I didn’t want to write this article, because IT’s been a month since I joined the new company, but I think I’d better write it to make a summary of the past two or three years, which may be helpful to some people or get some suggestions from them. The interview will last for two weeks. The first week is mainly about sending resumes, and the second week is mainly about interviewing. There will be 2-3 interviews in one day.

Let’s talk about the main impression of the interview is deep knowledge:

  • The difference between stack and heap
  • Essential differences between interfaces and abstract classes
  • The difference between String, StringBuffer, and StringBuilder
  • Annotations, reflection, generics
  • Handler message mechanism, producer and consumer model
  • View, ViewGroup event transfer mechanism, how to resolve sliding conflict? To answer how to slide conflicts is best to cite actual scenarios and how to resolve them
  • View, ViewGroup drawing process
  • OkHttp, Retrofit source code, principle
  • Explain what the MVP structure is
  • Https principle and encryption algorithm
  • RecyclerView cache mechanism
  • Common design patterns focus on these (singleton, agent, adapter, builder), start with concepts, and then the interviewer will ask for specific usage scenarios
  • Is the latest Google AAC architecture (ViewModel, LiveData, Room, etc.) in use and how it works
  • Is Kotlin in use? The companies that ask this question, basically their own companies are using Kotlin to develop new apps, or are using Kotlin to migrate, refactor, and mix with Java
  • How to use the Android Profile to check for memory leaks? And how does LeakCanary, a third-party tool to check for memory leaks, work?
  • What are the highlights and difficulties of the App developed? How to troubleshoot online bugs? Do you have any experience in code reconstruction

The above interview questions, mainly Android application layer knowledge, need to build the rocket before the interview, but also need the usual cultivation, accumulation and summary.

Talk about the company that impressed you deeply in the interview

SPD Credit Card is the worst person to be accused. At the beginning, I asked some basic questions, and then asked me how the app upload parameter you made prevented others from accessing it. Since my last company was mainly engaged in the app of financial planning loan, plus the nature of SPDB credit card r&d team, it is quite normal to ask this question. I replied to use so library to verify the parameters, md5 encryption for some special parameters, and comparison with the background. The interviewer so library is safe and can not be decompiled. And then you ask how HTTPS works, what do encryption algorithms know? Couldn’t answer at all. Confidence was gone. The interviewer then asked the RecyclerView cache mechanism, more can not answer, because I have seen it at ordinary times, there are too many codes, usually do not encounter tens of thousands of data, there are many different types of layout list. So I don’t look in depth, and I don’t understand.

Tiantianpai Car (round D professional personal car selling platform, similar to Guazi used car) the interviewer asked two and a half hours of technical questions, covering most of the interview questions summarized above (except those summarized by SPD Credit Card). The overall findings and conversation were not bad, because most of the answers were answered and the second interview was received two days later.

The interviewer mainly asked about the latest Android Jetpack, the latest component principle, whether Kotlin is using it, the interprocess communication mode of Android, how do you do multithreaded download? How do I do breakpoints? The overall answer is ok, asked after the interviewer said, I looked at your Github. Because MY Github is open source with a multithreaded download file instance and an open source App written by Kotlin. I received the second interview two days later.

Summarized the second interview and offer of several companies, as well as other companies. I’m not going to list them all. The second interview did not go, because the phone call over the second interview, are fast into my company now. The company I joined remembered that I had an interview on Saturday in the first week. I was deeply impressed by two questions: 1. How to understand Handler message mechanism, producer and consumer model, and how to apply it to practical development. 2, how to ensure that the memory is not OOM? The technical points I asked were basically answered. Then the hr person asked me when I would start work as soon as possible, which was postponed for a week. At present, the company I work for is mainly engaged in intelligent interaction and intelligent robot, and more than 10 are engaged in Android. Found predecessors knock code, there are good, there are bad. This is also normal, you also have a bad type of code also left to others.

After the whole interview, I found that 996 companies in this year are quite many, not so many in the previous two years. In some cases, the boss will directly say 996, or ask if the company with 996,996 refused to go. In the process of the interview, I found my confidence is not enough, technical ability is not enough, and I am anxious. Think about these points in the interview.

  1. Like a bigger factory, it takes two weeks to send the resume and reply after the interview.
  2. If the interviewer doesn’t ask technical questions or doesn’t ask in-depth questions, it’s a pretty safe bet that the company isn’t driven by technology.
  3. Improve their confidence, they will be more, the knowledge of the understanding to in-depth.

The main purpose of writing this article is to summarize. I remember when I was just out of school, I hope I can meet a big bull to take me, and I want to learn more. Maybe the purpose of entering the company is to learn. I think there are a lot of just out of school have my mentality like this, ha ha, this original mentality….. Now think about the whole mentality is different, into the company is to reflect the value, to bring benefits to the company. As for the technology, a large part of the company needs to rely on their own, but also a part of the company’s business, product demand is to do which piece, the technology point will mainly attack which piece. Peacetime learning needs more accumulation, more experience, code needs more hands-on knocking. Just out of school to write code is very messy, no programming style, no ideas. This is very normal, most people are like this, ability is gradually improved, experienced a year or two this point will be better. Now I look at their own two years ago to knock the code, very poor, very poor.

Since I have been doing development for three years, mainly doing android app, I have also learned Spring, SpringMVC, ios development and so on. One reason why I contact others is the need of the company. Some companies are not staffed enough or some positions do not want to hire people, so I urge you to do it and have a look. For the first year of my work, I refuse to do anything else. Second, as I have been working for a long time, I have gradually improved my learning ability. I find that I need to learn other things. The application layer of Android is not enough, and the market competition is becoming increasingly fierce. When I started to contact Kotlin, Rect and ios last year, I found that many things are similar, even though they are different platforms and different development languages. More like jin Yong novels described martial arts in that way, “the world martial arts all paths lead to the same destination.”

Write code to summarize the following points:

  1. Need to confirm the requirements, understanding the deviation. Always talk to the product manager before writing code. Spend more time talking to testers and designers than writing code. Also, think hard about how to implement such a feature, thinking clear in the code.
  2. Develop good coding habits and styles. Take a look at Google’s open source github examples, or those from other well-known companies.
  3. The six design principles and some common design patterns are well understood and kept in mind, which are often used in the coding process.
  4. Code should have ideas, write good comments, write code is not only for themselves to see, but also for others to see.
  5. Peacetime learning needs more summary, more experience, code needs more hands-on knocking.