preface

Not that you should give a standard answer to every question, but that you should give your own, personal answer to this question.

About your resume

The first thing to mention in the interview is resume, resume this thing is really a very profound thing, why profound, in fact, for people like me and profound: education background is not good, bad work experience. Of course, this is also related to the current environment of technical RESEARCH and development talent demand, and the above two points will increasingly affect the acceptance of the resume. Say a true thing everyone have a concept, it is a former colleague told me in private, he more than a year before I left the company, and then to a giant (a large electrical contractor), he is also responsible for job interview now, if the club recruit resume is not the master, will be back in rows, although this is not the company’s rules, but they actually are operating in this way. Isn’t it scary? He was scared of himself. Having said all that, what should we do? Can’t you expect to get a good job if you don’t have a good degree or work experience? Of course not, in fact, the interview or examination of internal skills, a resume is just a stepping stone, if you have deep internal skills, and can be well reflected in the resume, then the resume is really just a resume. As you may have noticed, there are two points mentioned above:

  1. Show off your skills on your resume
  2. Internal work deep

How to show your ability on your resume is not a good skill for a science and engineering student, so you should write more, change more, consult more experienced friends to help you look, even if you do not have such a friend, I believe we have the ability and channels to contact such people. In addition there is a lot of articles about the format of the resume online, in front of the column article also have mentioned, this is no longer in-depth, it is important I think we should strengthen our vigilance, is used, but know not in-depth technical point must not write on your resume, as big company must have a resume on one side, which is in accordance with your technical point q, written in the abbreviations If you find that you have written, but you can’t say anything very deep, that’s quite a minus, so be careful about that. In short, the resume is not the most important thing for you to pass the interview, the most important thing is number two: internal skills

About the internal work

What kind of Android engineer can get into Dachang? The following aspects are often required

basis

If you want to get big offers, good foundation is a hard conditions, for computer related professional graduate students, the curriculum is based on your college, if not the computer related professional graduates, you will need to full time under basic knowledge in this aspect, must master specific for the following things:

  1. Operating system principles (there are some computer components of the principle of knowledge to grasp)
  2. The network principle

What if you don’t have this knowledge, or have studied it before and forgotten? To learn! How do you learn it? Go looking for the open class of a few universities on the net, I am the Qinghua that sees, as to what suits you of which school, you have your own judgment only. You might wonder, will the interview ask about this knowledge? There are few direct questions, but only when you know the knowledge, can you have a deeper understanding of some technology and knowledge. Let’s take two examples. First, if you want to do network optimization in Android, you don’t know some of the principles of network, how do you know how to optimize? If you don’t know the detailed difference between UDP and TCP, how do you know which technology to choose as your communication protocol? Another high probability question about networks is TCP’s three-way handshake and four-way handshake, which is actually the knowledge of network principles. Second, knowing what memory does and how it works in an operating system, you’ll have no trouble understanding Android’s memory management.

Data structures and algorithms

Data structure and algorithm are actually separate things, we need to master all kinds of data structure first, and then to deepen the algorithm, data structure and algorithm actually belong to the foundation, but it is now more and more important, so I will take out separately. I also recommend you to see tsinghua or Zhejiang University “Data structure” open class, especially tsinghua, worth repeated research. As for algorithms, the first thing to do is to do it, directly on LeetCode! The second stage is to summarize the ideas and routines of various algorithms, such as recursion and dynamic programming, which have routines. In LeetCode, there are also screening categories based on data structure and algorithm, so you can practice and summarize accordingly. Of course, for an Android programmer, it is very good to be able to brush questions on LeetCode every day, so you must stick to it. When you stick to it for a certain period of time, you will find that you are more and more skilled. I started to brush questions on LeetCode at the end of 2015, and so far I have brushed more than 200 questions. Xiaomi’s interview is also very algorithmic, but also able to write. And for companies that are very algorithmic, they’re very strict, yes, strict,

Design patterns

Design principles, design patterns are included with the actually for Android developers, design patterns that 23, know and understand the design pattern is the first stage, is only at this stage is not enough, general interview also won’t ask you the concept of a design pattern, and will give you a specific about your understanding of a certain design patterns and use, Its advantages and disadvantages, so, the second stage is to use them, followed by the Android source code to use the design pattern place to combine learning. Examples include builder mode, which is used to create dialogs in Andoird, singleton mode, adapter mode, observer mode, etc. These are very common design patterns in Android, and also come up frequently in interviews.

Java

Java I will come to a point directly, as follows:

  1. Java collection (HashMap)
  2. reflection
  3. multithreading
  4. IO, NIO(optional)
  5. The generic
  6. JVM related, such as memory management, memory reclamation, class loading, and so on
  7. Java exception

You may think that you know all these more or less, but when asked about the details, you do not know, so you still need to have a systematic understanding of the above knowledge, there is no opportunity to go deep in the project to make breakthroughs one by one, for example, Java collection, first of all, you need to have a macro understanding of the collection.

Start with the source code of common classes, such as HashMap, and work your way through them one by one. This also shows that we need to know more about each type of knowledge, rather than the general ones, such as some of the Android hotfix frameworks, which include classloading and reflection in the JVM. In concurrency, thread pools and ThreadLocal are all essential knowledge to master and use proficiently, and are often asked about in interviews.

Android

In fact, Android is not much to say, for an experienced Android programmer, some of the basic Android technology we are master, and if you want to do a bonus Android programmer, the following Android technology will need in-depth understanding:

  1. Android View drawing and flow
  2. Android Touch event distribution mechanism
  3. Performance optimization (network, memory, battery, UI)
  4. Common Android source code, such as Handler, AsyncTask, etc
  5. Familiar with Binder principle
  6. Understand some common Framework knowledge, such as AMS

Again, these are all to be systematically mastered and used.

JNI

JNI actually belongs to a technical point in Android NDK, but it does not require systematic understanding like the above knowledge. We only need to know how Java calls C or C++ code, how C or C++ calls Java code, and how to pass various parameters (objects) to each other. Since Android conferences typically don’t involve writing complex C or C++ code, we use NDK more for calling some third party C or C++ library, such as FFmpeg. Of course, if you can write good C or C++ code, so much the better.

Framework and Project

Android will often use some third-party frameworks, which is often asked in the interview, the specific question is their principle or design, like LeakCanary, OkHttp, etc., of course, the general will only ask you used, in ordinary times we use third-party frameworks, we need to know them, just for the sake of use, Is the phenomenon that the interviewer does not want to see, because only know how to use, do not understand the principle, can not control, but by the framework control. How to do that is to first understand how the framework works, and then to find the entrance and explore step by step from the entrance. Your own projects are similar to third-party frameworks. If you don’t know the structure of your own projects, the interviewer will know your technical hunger. For example, my previous company used Netty for communication between terminals and servers, and it was reflected in my resume. I felt confident to include it in my resume because I had taken the time to understand Netty in detail, from NIO to Netty, to the common classes used by Netty, and then some general knowledge. Such as zero copy, IO multiplexing, sticky package, unpack and so on. So when you use it in a project and you can say it when asked, that’s a plus.

other

Everything else will add to your resume (not to mention a good degree and work background) :

  1. There are open source projects
  2. Participated in open source projects
  3. Have a personal blog (content, depth, value)

This is also a person’s internal work, but it is not the same as what I mentioned above, because it is not necessary, but it may be important.

Internal work summary

You see, I will summarize the internal skills that Android developers need to have in a moment, but if you really want to master these things, make them your own things really not easy. Everyone has their own goals and dreams, on the way to the goals and dreams, there must be all kinds of difficulties. You have to overcome difficulties to move on, so keep at it!

Detailed list of knowledge points

I am afraid that the above summary is still too general and there is no dry goods, so I give you a list:

  • The Activity life cycle
  • The Activity’s task stack
  • The startup mode of the Activity
  • Fragment life cycle
  • Fragment communication, between fragments, fragments and activities
  • What is a Service and what is a Thread
  • The functions and registration mode of Broadcast
  • What is local broadcasting
  • What is ordered broadcast
  • What are the asynchronous processing methods of Android
  • AsycnTask, HandlerThread, IntentService source
  • Binder
  • View drawing process
  • Event distribution mechanism
  • Several scenarios and ways to customize a View
  • ListView caching mechanism
  • Handler, Message, MessageQueue, and Looper
  • Third party open source framework design and principles
  • What is ANR, how to avoid and check
  • What is OOM, generally if avoided and resolved
  • What are memory leaks and what are the common memory leaks
  • Use of version management tools, Git, SVN
  • Code compilation tool
  • Code confusion
  • Java IO
  • multithreading
  • Class loader
  • reflection
  • 23 design patterns
  • HTTP, TCP, and UDP protocols
  • Computer network
  • Operating System Principles
  • Algorithms and data structures: sorting, binary tree traversal, dynamic programming
  • Common encryption methods and principles

On the future of Android

I keep hearing a lot of people talk about whether Android has a future, that Android development is on the decline, and that Android jobs are hard to find. My view on this is very simple. It’s really not the end of Android development yet, and I can’t predict what the future holds. Now the major companies are in fact very short of Android RESEARCH and development (senior), constantly in the recruitment, take Xiaomi for example, let alone to interview people, they can not get too much resume, need to spend a lot of time to find a resume. Therefore, for students with Android development experience, more should think about how to explore deeper, rather than thinking about changing direction, no matter which direction, will face the time point from elementary to senior to senior and then to expert. So I think the right career planning should be pyramid-shaped, the core competitiveness must be solid! Here’s a diagram of Android collections that I summarized earlier:



conclusion

The above is a simple summary of the technical points before the interview, many things, if you want to start from scratch to master these is also very difficult process, only by their own dribs and drabs of accumulation, there is no other way. Actually own summarizes these things are not difficult, difficult is how to learn, how to adhere to, how to consolidate, everyone different way of learning and accumulation, must find their own way, what is a good way is to let oneself can remember, remember, fast in mind is more important than fast down, how to test on the persistence is a kind of willpower, Often we need to find some long-term and short-term goals for ourselves to motivate ourselves to make continuous progress. Most people including me are not geniuses, the only way to make progress is to work down to earth, I believe that the harder you work, the luckier you will be!