From "Interview Rejected" to "Ant Financial" and then to "Ali", personal experience from Android engineer-with interview dry goods

Just during the resignation period, I took the time to briefly share some of my personal experiences with everyone, hoping to help students who have just graduated or worked for three to five years.

1: Personal experience

Before writing, let’s start with some simple self-introductions. This part is more moist. If you are not interested, you can skip to the second part to read some interview questions.
I graduated with a bachelor’s degree in 16 years. I worked in Fujian in the first year of graduation. I went to Hangzhou in 17 years. Before coming to Hangzhou, I spent a long time preparing for the interview. I was full of confidence, but I still encountered great setbacks when I arrived in Hangzhou. I still remember that when an interviewer asked me what you said was componentization and plug-inization, I was stuck. Although I did a lot of preparation before the interview, I read a lot of open source framework design ideas, and when I talked about the project, I also blew a bit about how the project is used, but when the interviewer asked me to briefly talk about the difference between componentization and plug-inization At that time, I couldn't answer for a while. It's really embarrassing to think about it now.

But Hangzhou is worthy of being the capital of the Internet. There are really many opportunities. It may also be related to my preliminary preparations, or because the company I am facing is relatively small or the company lacks people. Anyway, I remember that I also took it. Quite a lot of offers. After being recommended by a friend, I chose an Alibaba joint venture company. Now that I look back and think about it, I am really grateful for this experience of working in Hangzhou for the first period of time. Here I met many excellent colleagues (most of these colleagues also went to Ali), and I also met a lot of Nice boss.

Looking back now, I am really grateful for the colleagues I met at that time. The atmosphere of our team was really good, and the learning atmosphere was very strong. We often organized technology sharing privately. During that time, we grew a lot, not only the cutting-edge Internet technology, but also learning habits. I got a lot of opportunities in this company, and I seized every opportunity. After half a year, I even became a group leader of 5 or 6 members, not two years after I graduated. I still remember when I was talking about promotion, a judge told me that you started to lead people just two years after graduating. This is a challenge and a pit for you. You are very lacking in both skills and experience, so don’t get lost. For yourself, always have enthusiasm for technology and keep improving. I also give this sentence to other students who work in relatively small companies and start to lead people soon after starting their work.

By the middle of 18 years, I moved to Ant Financial, which is the Ant Financial under the Alibaba that I used to do. At that time, it was purely because many colleagues around me slowly received Ali’s offers. In fact, as computer professionals at that stage, we basically have a dream of BAT (it is now 2021, maybe the original BAT has already Not so fragrant). I saw that everyone went out to try and was excited, so I voted for Ali's position. It should be regarded as a little bit of strength and a little bit of luck. I was originally a faceless nail, but later went to Ant Financial by mistake.

I joined Ant Financial in August 18th, and it took almost two and a half years to the end of January 21st. Because I am still working and in the handover stage, there are many things that are not convenient to talk about here. I have encountered many challenges here, and at the same time I met many awesome colleagues, and learned many ways of doing things. I am about to leave Ant. Here I also summarize a few work experiences, including a few things I didn’t do well. I hope I can learn a little from the students behind:

1: In large factories like Ali, in fact, it is the same in many companies. Communication and feedback are very, very important, and people who blindly work hard are actually at a disadvantage. I have seen several classmates who work steadily get marked as '325' and leave. So we must learn to pack and express ourselves in front of bosses and colleagues.

2: Too much demand, too much workload for operation and maintenance, usually all kinds of trivial things will fill all your time (even your sleep time and weekend time), you must learn to liberate (think about the solution or ask for help, or give it to others) ), and then get out and do something interesting for growth. Only in this way will you have time to work on projects that are easy to get KPIs. Otherwise, all you will be left with is complaining about why you are so busy and why you are doing the swearing and tiring work. . In fact, these complaints are useless at all. In the eyes of the boss and most people, they can only show that you can't handle anything. In result-oriented values, the process is not important!

3: The purpose of ordinary people's work is nothing more than to obtain higher material returns under the same conditions. If you really work hard and desperately, and still can't get the mental approval of your boss, and you can't get the material rewards you want, you will either change yourself, or change the environment-or change the environment.

4: Work is the company's, only technology, growth and health are their own. You don’t want to stay here, you have your own place to stay, but you still need to be hard when you strike iron. To put it bluntly, you want to change jobs also depends on your strength. In your daily work, you must take time to learn more and summarize. The Internet industry, technology updates The speed of replacement is too fast, and only self-growth is the kingly way.

2: Interview experience

My job is Android development. There are many first- and second-tier Internet companies, including Tencent, Alibaba, Didi, NetEase, Meituan, Toutiao, Kuaishou, etc. The following articles have less moisture and are all interview dry goods. . I hope I can circle some "test scope" for everyone and bring you a little help in the interview.

The first thing I want to say is that the interview time is very important, which directly determines your competitiveness and the difficulty of getting an offer. For the same job, interview at different time points, the difficulty and requirements are different. Because it depends on the degree of vacancy and the number of job HCs.
According to my observations on the Internet in Hangzhou, there are generally more opportunities at the end of each year. In addition, if you know someone who recommends a position that is more urgent or has a higher chance of "released", then the probability of you getting an offer is naturally higher. This is the interview I mentioned above is based on strength. A little luck.

The second point is Android basics. I graduated for 4 and a half years, about 5 years later, and I have a development engineer and a development expert (recently I also got an offer from a development expert in a first- and second-line factory). Basically prepare for each interview the common "eight-legged essays" of Android interviews, and will be asked every time, such as Activity, Service, such as Handler NDK, etc. These basics must be mastered, and even be thoroughly familiar. .

The third point: Written test questions. In the last two years of interviews, some big companies have basically done some written test questions. Generally, they are made by Niuke online. Most of these questions are some algorithmic questions, and they are basically the original questions of leetcode. , So students who want to prepare for the interview should adapt in advance and go to the LeetCode to review the questions. Generally, interviewers will ask questions of different difficulty based on your interview performance. If you answer the interview questions well, the questions given will be relatively simple. If the answer is not good, you may directly give you a hard.

However, according to my experience, the questions given in most cases are the original questions of medium difficulty of the hot question 100 on leetcode. I have compiled some original written test questions that I encountered during the interview in the last two months for your reference: click here GitHub to view the complete question bank.

Fourth, various commonly used performance optimizations and source code: you must master his principles. If you have time, it is best to use the core source code. The average interviewer likes to ask these things, especially when a small factory jumps to a big one. For these knowledge points, you can make some corresponding preparations according to the articles on the Internet and your own situation. There are too many things here, so I won't make a summary.

The fifth point is the project. When talking about the project, if it is a business project, it should reflect the difficulties and solutions of the project. It is best to have high concurrency, large data volume, how to ensure stability, and so on. If it is a framework project, it must reflect its platform, how to ensure high reliability and so on. Then there are the more distinctive things you do in the project, the most difficult things (this time is to learn and apply, whether you did it or not, as long as you can say it is yours).

There may be many students who have not encountered any difficult projects, but the project is not challenging in the eyes of the interviewer. At this time, you'd better prepare a middleware-like project to talk about it to attract the attention of the interviewer. , Such as current limit, such as task scheduling, such as configuration platform, etc., these are universal projects, it is easy to integrate into their own business projects .

3: Summary

The resignation period is boring, so I just briefly review some of my work experience in the past few years, and share some interview experience accumulated during this period with you, hoping to help you a little bit.

4: Write at the end

I have joined the new company now. I wrote this article before to share some of my own experience. In addition, I will share an Android architect growth learning route and learning materials jointly released by nine Alibaba architects:
1. Essential skills for architects to build a foundation:
Android applications are Developed by Java language, SDK is also written by Java language, so we have to learn Java language. In addition, although the kotlin language has received the official Android hot push, kotlin is also compiled into the java language and then run. For Android, as long as the SDK is not rewritten in kotlin, then the Java language needs to be learned. And the background server program of Androidapk is most likely to be built in java language, so learning java is also inevitable.

So what are the things in Java that we Android programmers need to learn? As Android programmers are used to CV code blocks, the slightly more difficult Java foundations related to Android are almost always a threshold, such as generics, multithreading, reflection, JVM, efficient IO, annotations, serialization, etc. It is the object of the CV, and the programmer does not understand the principle, the specific content is shown in the figure.

2. Android Framework Architecture-Andlroid Advanced UI and FrameWork Source Code
Speaking of FrameWork , you just need to go to Github to look at the source code of Tencent Matrix to know how important the knowledge of Framework is. Like frame drop monitoring, function instrumentation, slow function detection, ANR monitoring, and startup monitoring, you need to have a deeper understanding of the framework to know how to monitor, what mechanism to use to monitor, where to insert the function instrumentation, and reflection Which class, which method and which attribute should be reflected...

3. 360° overall performance tuning
Android performance tuning includes a lot of knowledge points, among which the key is design ideas and code quality optimization, program performance optimization, and development efficiency optimization. Our developers collectively refer to these as Android360° All aspects of performance tuning. In fact, in the process of software development, many readers must have encountered system performance problems. The main steps to solve system performance problems are:

Evaluation: Perform a large number of targeted tests on the system to obtain appropriate test data.
Analyze the system bottleneck: Analyze the test data and find the hotspot (hotspot, that is, bottleneck).
Performance optimization: Optimize hotspot-related code.

4. Interpretation of the open
source framework design ideas The knowledge points in the open source framework design ideas in Android development are also more important. I believe everyone can see that in each company's recruitment, the requirements for the Android open source framework are relatively strict. And if you want to fully understand, you have to learn to organize and plan: our common Android hot fix framework, plug-in framework, component framework, image loading framework, network access framework, RxJava responsive programming framework , IOC dependency injection framework, recent architecture Component Jetpack and other Android third-party open source frameworks, these are the design ideas of Android open source framework. As shown in the figure below:

5. NDK module development
Android platform has supported C and C++ development since its birth. As we all know, the Android SDK is implemented based on Java, which means that third-party applications developed based on the Android SDK must use the Java language. But this is not the same as "third-party applications can only use Java." When the Android SDK was first released, Google announced that its virtual machine Dalvik supports JNI programming, that is, third-party applications can call their own C dynamic libraries through JNI, that is, on the Android platform, the "Java+C" programming method is It has always been possible. Recently, the most popular audio and video development technology also belongs to NDK module development. You can read this article about advanced audio and video: Click this article for advanced audio and video: As an Android programmer, proficient in audio and video development, no matter how cold the winter is, you can’t freeze you


6. Architect training into actual combat.
After learning the above knowledge, you should apply it to actual combat. In common combat: architecture design, online mall project combat, news client project combat, multi-format player project combat, Gradle automation project They are all top priorities.

Of course, the actual combat of small program projects is also something that Android developers must understand:

7. WeChat small program
Ali architects' views on small programs:

First, no matter whether the applet can shine on the mobile terminal in the future, there is no harm in learning it and mastering it.
The second point is that as far as the current version is concerned, it is still too closed. Developing a small program feels like going around in a small circle designated for us by WeChat. Maybe we can get a very good development experience in the circle, but we can't go out even one step.
The third point is that between performance and convenience, convenience often wins in the end.
The third point is that those that can be developed with js will eventually be developed with js.

8. Hybrid development and Flutter
want to become an excellent architect, the knowledge that needs to be mastered is a bit too much, and new technologies cannot be left to learn, just like Flutter
in Flutter, everything is a control! Everything is a control! Everything is a control! Keep this concept in mind . Text is a control, Image is a control, Icon is a control, scaffolding is also a control, and even the entire APP is a control.

Study notes for the study syllabus:

1. Essential skills for architects to build foundation:
2. Andlroid advanced UI and FrameWork source code: 3.
360° performance tuning in all aspects:
4. Interpretation of open source framework design ideas:

5. NDK module development:
6. Architect training into actual combat

7. WeChat applet:
8. Hybrid development and Flutter:
If you are getting lost on the road to an architect and feel that your knowledge has expanded, then Maybe you have learned too much but not refined, and lack a complete learning outline. I think this article can help you. Small companies may not have the concept of an architect, and it is not easy to get an architect position in a large company. But in any case, it is necessary to keep learning new technologies and improve your own level. No matter which company you are in, you must have a strong technical level.
All the materials in the article and the complete architect study outline can be obtained directly here for free.

Guess you like

Origin blog.csdn.net/Android578/article/details/114080314