The department has a lot of projects recently. We are recruiting more android programmers, but none of them are suitable.
I came across a resume with 10 years of work experience, experience in various Android development and expertise in various technologies, which seemed appropriate, so I contacted me for an interview.
To be honest, I was a little stunned when hr handed me my resume. This “big bull” with twice as much work experience as me, I want to know if he is interviewed by me, such an intermediate development, will despise me, even despise our company. Our company is just an ordinary listed company, far worse than first-tier Internet companies, but I still have a sense of company honor.
So, FIRST, I gave myself a few:
-
You can’t ask simple dumb questions, you have to have depth, and you can’t let the bull feel: “The interviewer’s questions are Low!” Feeling.
-
Try not to talk as much as possible, otherwise if you ask “Daniel” a question, “Daniel” answer, ask me a back, I can not answer, that is even more embarrassing.
-
A few others, I thought of at the time, but I can’t remember now.
Interview process:
Me: Briefly describe the Handler messaging mechanism.
Huh?
I: That is to say, the implementation of sending and receiving messages by Handler, especially the workflow of Message carrier.
Well, er, I’m not sure…
Me :(hurriedly changes direction) what’s the difference between a Service and an IntentService?
Service and what?
I: IntentService.
No, I haven’t. (He starts to feel embarrassed.)
Me: (Oh, no, this is probably too cool) How about the communication between services and activities?
Well, correspondence, er, what do you mean?
Me: Is to pass a value, such as the end of a background task in a Service, how to notify the current Activity, and pass the result out?
Oh, this, ah, think about it… After 10 seconds of silence…
Me: Well, like broadcast? (I was embarrassed to give him a hint.)
Oh, yes, Broadcast and so on.
Me: Is there any other way?
Well, radio, er… (Again 10 seconds later.) Like what?
Me: Interface callback… What’s the difference between Context sendBroadcast and LocalBroadcastManager sendBroadcast?
I’ve never heard of that…
From MVP and MVVM to multi-threaded synchronization, then click event distribution, to custom View, animation effect implementation, basic ArrayList, HashMap implementation, final static keyword usage. Among the more advanced design patterns, the implementation of singleton and observer patterns, Java class loading, and memory allocation, he could not answer any of the questions with certainty, either “don’t know”, “haven’t used”, or couldn’t give a name without hesitantly 123.
Oh, and in the course of our conversation, he repeatedly mentioned what third-party libraries he used to make himself seem competent.
I asked him: Have you opened any self-written libraries? He said no. I asked him: Have you read the source code for ImageLoader? How is ImageLoader’s local caching mechanism implemented? He said he didn’t know. I told him that I have used all the libraries you mentioned, and most of them I have seen the source code implementation. In addition, I have implemented simple versions of libraries like ImageLoader and Pull2RefreshListView after working for two years, and also made extensions respectively.
Finally, I decided that the so-called “bull” with 10 years of experience was the online kind of “a person with N years of experience rather than N years of experience”.
Back I again carefully look at his resume, 10 years in the process, the man in the eight companies, one of the longest one for less than two years, the shortest is quit six months, the resume is not their own independent completed a project, resume most of the Android project, control the basis of all of them are simple list, used design patterns, I didn’t have a layered frame design. It was just like what I wrote in my first year of work.
In the later stage of the interview and interviewed several people, to tell the truth, are not satisfactory, these interviewees have one thing in common: any knowledge point they know is to stay in the know, used level, specific implementation and how to expand optimization can not answer.
After two years of talking about Android development saturation, I feel that this statement is lacking, saturated with this kind of primary Android development, simple page implementation, but application scalability and maintenance, lack of consideration, lack of framework design. (of course not to say that the code must be in accordance with the rules of writing, but in the right place in the right way, somewhere a method obviously function can solve, there is no need to expand, late that you have to be in accordance with the JAVA object-oriented ideas, write a class object, and then with a box, a design pattern that trifles.
I feel that I am still hovering at the level of intermediate engineer. Due to various reasons, such as family and so on, I have much less time to study and less energy than when I started to work. When I think of these, I have an idea: I’ll never get to the point where I can write 10,000 star open source libraries on the Internet, or write an insightful technical blog that gets dozens of comments and retweets. So I have some motivation, study hard to go on, these talents should become their own goals.
Below I from the interviewer’s point of view to analyze, in the interview process of some of the candidates check it. There is no danger of losing a battle by knowing yourself and your opponent. A wave of reverse thinking during the interview process can help us deal with the technical aspects.
Does the candidate’s profile match the resume
Basically see whether the candidate is honest and true, this will directly affect can not pass. The candidate’s project experience and skill points should match the candidate as much as possible. For example, the candidate says he has done XX project, but can’t answer when asked how to achieve it, or he is familiar with XX skill points, but only calls the commonly used API, and is not familiar with the details of its source code, which is mostly not given. If a candidate wants to boast B, it is also feasible to show that he can boast B. For example, the “x” module was actually done by a colleague, but you fully understand that you can answer it fluently and the interviewer will not care about it.
Solid technical skills and project experience matching degree
The test includes technical understanding and problem solving skills, including some details, application scenarios, implementation principles, etc. The purpose is to test the upper limit of the candidate’s skill level. The more clear and in-depth the answer, and the more firmly you can grasp the details, the better. It is not necessary to give perfect answers to get the offer, but the effect of these answers can affect the offer price most. Small factories focus on skills and project experience matching, while large factories focus on fundamentals and principles. In small companies, interviewers often want candidates to get started quickly, and they want candidates with experience in competing products or feature development, so you can prepare for that as well. Large companies may present scenarios to test candidates’ designs, which require deep knowledge and logical reasoning. The above set of questions I did not write the answer, because I think there is no standard answer for many questions, there is no need to recite the “standard answer”, excellent answer, should form their own understanding of the output, said well grounded on the line.
Highlights and strengths of candidates
It is usually a plus for the candidate, or the interviewer wants to open up the topic quickly, understand the candidate’s strengths, and test the candidate’s strengths to what extent. If this question is answered well, a candidate can even turn it around.
Ability to communicate
Those who have moved bricks in the front line should know that they usually spend less than half of their time writing code every day. They also have to spend a lot of time with the product, with the background, with the UI and so on. Therefore, communication and coordination skills are also very important. Candidates need to understand the intention of the interviewer and express logically. It is best that the candidate can establish an atmosphere for discussing technology with the interviewer. This is something that most candidates tend to overlook, but it’s important. The interviewer may not be able to hire you directly, but he or she can probably eliminate you directly. If the candidate is arrogant and technical, it is also easy to fall over, but it should not be too timid and appear to have no technical confidence, so it is best to have a harmonious discussion atmosphere.
Learning ability, self-drive
The general director or person in charge will pay more attention to this.
Answer your questions
To understand the interviewer’s intentions, questions, that is, pay attention to the topic, not irrelevant answer, if the interviewer’s questions is not very understanding, timely and further communication, ask the question, this also reflected the ability to communicate, after all, work at ordinary times, also received some demand is not very clear, get more clear on their own needs and the excellent quality of the programmer.
Try to be as clear and accurate as possible, preferably to get to the heart of the question and show that you have explored the technology at a deeper level. Also pay attention to the feedback of the interviewer.
If the interviewer listened with interest and kept asking questions to make them harder, congratulations, you answered them well!
If the interviewer is getting impatient, shorten your response — time is limited — and cut out any long-winded remarks that aren’t relevant to the question.
If it is found that the interviewer asks the question more and more simple, more and more conventional surface, then have to be vigilant, may be your answer before too general, make the interviewer feel you compare dishes, so don’t give you a problem, even if this kind of circumstance to offer, for the most part the price also came up and even may be in order to give you a step down, Then you’ll be sent home to wait for an indefinite notice, in which case you’ll have to go a little deeper, answer as many questions as you know, and be as proactive as possible.
Answer no (not sure) questions
First of all, to have a certain thinking and analysis of this problem, do not easily say no, but also can not completely blind answer, completely not or dare to say no, honesty is also a necessary quality.
How do you think about analysis? In my experience, I think mainly in terms of relational knowledge of the problem or alternative solutions. Know about problems is not very clear, try from the associated knowledge known to make reasonable speculation, such as the surface of a concept from some open source database, or from the Android source code inside a concept, but this kind of situation will have to tell the interviewer what’s going on, you are speculating, also say why speculation, avoid the interviewer think you knows nothing but pretends to know. Alternatively, you can offer an alternative solution to the problem.
conclusion
In every industry, there are both good and bad ones. As long as you keep learning and making progress, you can pick the fruit that others can’t pick.
For programmers, there are too many knowledge content and technology to learn. Many people always encounter some problems when they just contact this industry or when they meet the bottleneck period. For example, after learning for a period of time, they feel directionless and do not know where to start to learn. They can pay attention to me and update various technical products every day.
At this point, as an Android developer, next I want to share these years, I for the technology of some summary and summary, and their own as an Android senior developer need to master those skills to share notes, I hope to help to the heart of the road to the black friends!
1. Advanced UI, custom View
The UI piece of knowledge is the most widely used today. That year the popular Android training, learn this small piece of knowledge can casually find a good job.
But obviously now is far from enough, refused to endless CV, personally to project combat, read the source code, research principle!
2.NDK module development
The content mainly involves the following aspects:
- NDK module development
- JNI module
- Native development tools
- Linux programming
- Underlying image processing
- Audio and Video development
- Machine learning
3. Data structure and algorithm
Why study data structures?
This is because all programs are essentially data processing, how to efficiently process data, which depends on the structure of the data itself (such as type (integer, floating point, etc.), dimension, whether it is a complex type (structure type, class type, etc.) and the logical relationship between the data (linear, nonlinear, etc.).
The data structure is inseparable from the algorithm, the design of the data structure is to make the algorithm smooth and convenient implementation.
4.Java advanced and kernel principle
The content mainly involves the following aspects:
- HashMap
- ArrayList
- LinkedList
- Hashset source code analysis
- The memory model
- Garbage Collection algorithm (JVM)
- The difference between garbage collection and calling System.gc()
- Class loading process
- reflection
- Multithreading and thread pools
- Design patterns
- Java generics
And so on…
5. Advancement of Flutter technology
Knowledge points of this article:
Create your first Flutter APP. 4. Get started with the Flutter Dart language system
6.360 degree full performance tuning
As product content iterates, features become more complex, and UI pages become richer, it becomes a barrier to smooth operation. To sum up, APP performance optimization has become a comprehensive quality that developers should have, and it is also a guarantee that developers can complete high-quality application works.
1. Design ideas and code quality optimization
2. Program performance optimization
- Optimization of startup speed and execution efficiency
- Layout detection and optimization
- Memory optimization
- Optimize the power consumption
- Network transmission and data storage optimization
- APK size optimization
3. Optimization of development efficiency
- Git, a distributed version control system
- Automated build system Gradle
4. Actual project combat
- startup
- fluency
- The practice of Douyin in APK packet size resource optimization
- Youku responsive layout technology full analysis
- Network optimization
- Mobile Taobao Double 11 performance optimization project revealed
- Autonavi APP full link source code dependency analysis
- Complete the OOM experience sharing
- Wechat Android terminal memory optimization practice
7.Framework refined kernel parsing
The main contents include:
- In-depth analysis of Binder
- Parsing Handler in depth
- Dalvik VM process system
- Parse WMS in depth
- PackagerManagerService
8.Jetpack architectural components go from beginner to master
- Android Jetpack – Navigation
- Android Jetpack – Data Binding
- Android Jetpack – ViewModel & LiveData
- Android Jetpack – Room
- Android Jetpack – Paging
- Android Jetpack – WorkManger
- Lifecycle for Android Jetpack architecture components
- Jetpack Compose for Android
9.2020 Big factory interview high-frequency knowledge points
One, picture two, network and security mechanism three, database four, plug-in, modular, component, hot repair, incremental update, Gradle five, architecture design and design mode six, performance optimization seven, Android Framework eight, Android excellent tripartite library source code