ByteDance Android senior engineer interviewer showed up and explained the interview routines of big factories in depth, and winning is at the starting line!

Insert picture description here

Preface

The interview never asks you to give a standard answer to every question, but to give you your own answer to this question.

One about resume

The first thing to mention in the interview is the resume. The resume is really a very esoteric thing. Why it is esoteric is actually esoteric to people like me: poor education and poor work experience. Of course, this is also related to the current environment of demand for technology R&D talents, and the above two points will increasingly affect the passability of resumes. Everyone has a concept to say a real thing. This is what a former colleague told me privately. He left the company more than a year earlier than me, and then went to a big factory (a big e-commerce company). He is now also responsible for recruitment interviews. If the social recruitment resume is not a master's degree, it will be ranked back. Although this is not the company's regulations, they actually operate in this way. Isn't it scary? He himself felt scary. Having said so much, what should we do? Don’t expect to find a good job if you don’t have a good education or work experience? Of course not. In fact, the interview is still a test of internal skills. The resume is just a stepping stone. If your internal skills are deep and can be well reflected in the resume, then the resume is really just a resume. You should have noticed that there are two points mentioned above:

1. Reflect your ability well on your resume

2. Deep inner strength

How to reflect the ability well on the resume is not a skill that a science and engineering student is good at, so you need to write more, change it and ask for advice, find more experienced friends to help you see, even if you don’t have such a friend, I believe everyone Also have the ability and channels to reach such people. In addition, there are many articles on the format of resumes on the Internet, and I have mentioned them in the previous column. This point is no longer in-depth. One thing is very important. I think I should strengthen everyone’s vigilance. I have used it, but I don’t know it Technical points must not be written on the resume. Generally, one side of the interview of a large company must be the resume side, which is to ask according to the technical points written in your abbreviation. If you find that you have written, but you can’t say something deep, then Quite a point reduction, so this point must be paid attention to. In short, the resume is not the most important thing for you to pass the interview. The most important thing is the second point: internal strength

Two about internal strength

What kind of Android engineer can enter the big factory? The following aspects are often required

2.1 Basics

If you want to get an offer from a major factory, good foundation is a hard condition. For students who graduated from computer-related majors, these foundations are the courses you have studied in the university. If you are not students who graduated from computer-related majors, then you need to A lot of work has been done in this aspect of knowledge. Specifically, the following things must be mastered:

1. Operating system principles (there are some knowledge of computer composition principles that need to be grasped simply)

2. Network principle

What if you have not mastered this knowledge, or learned it before, but forgot? Learn! How to learn it? Go online to find some open courses in universities. I looked at Tsinghua University. As for which school is suitable for you, you can only judge by yourself. You may have questions, will you ask about this knowledge in the interview? There are very few direct questions, but only if you understand this knowledge can you have a deeper understanding of some technologies and knowledge. Give two examples. First, if you want to optimize the network in Android, you don't know some principles in the 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 one to choose as your communication protocol when choosing a technology? There is also a problem with a high probability of occurrence of the network, which is the three-way handshake and four-way handshake of TCP. In fact, it is the knowledge of network principles. Second, what is the role of memory in the operating system, and how does it work? Knowing these, you will be able to understand the memory management of Android at your fingertips.

2.2 Data structure and algorithm

Data structure and algorithm are actually separate things. We need to master various data structures first, and then deepen the algorithm. Data structure and algorithm actually belong to the foundation, but it is becoming more and more important now, so I will take it out separately. How to get into the data structure. I also recommend everyone to watch the "Data Structure" open class of Tsinghua University or Zhejiang University, especially Tsinghua University. It is worth studying repeatedly. As for the algorithm, 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. Algorithms such as recursion and dynamic programming have routines. On LeetCode, there are also filtering according to data structure and algorithm classification. You can practice and summarize them in a targeted manner. Of course, for an Android programmer, it’s very good to be able to write questions on LeetCode every day, so you must stick to it. When you stick to a certain period of time, you will find that you are more and more comfortable. I started at the end of 15 There are more than 200 questions on LeetCode, and Xiaomi’s interviews also focus on algorithms and must be able to write. And for some companies that pay special attention to algorithms, the evaluation of algorithms is very strict. Yes, it is strict.

2.3 Design patterns

Design patterns include design principles. In fact, for Android developers, there are only 23 design patterns. Knowing and understanding these design patterns is the first stage. It is not enough to go to this stage. Generally, interviews will not ask. Your concept of a certain design pattern will let you specifically talk about your in-depth understanding and use of a certain design pattern, its advantages and disadvantages, so the second stage is to use them, and secondly, in the Android source code Apply to the design pattern for combined learning. For example, the builder mode is used in the Dialog creation in Andoird, and there are also design patterns such as singleton mode, adapter mode, observer mode, etc. that are very commonly used in Android, and they appear frequently in interviews.
Insert picture description here

2.4 Java

I'm going straight to Java, as follows:

Java collection (HashMap is generally required, it is necessary to read through the source code)
reflection
Multi-threaded
IO, NIO (optional)
generic
JVM related, such as memory management, memory recovery, class loading, etc.
Java exceptions,
you may think these I know more or less, but when asked about the details, I don’t know, so the above knowledge still needs a systematic cognition. There is no opportunity in the project to make breakthroughs one by one, such as Java collections. First of all, you must have a collection of collections. Macro cognition.

Start with the source code of common classes, such as HashMap, step by step, and break them one by one. It can also be seen from this point that we must have an in-depth understanding of each type of knowledge, rather than general knowledge, such as some hot fix frameworks for Android, among which are technologies such as class loading and reflection in the JVM. For example, in concurrency, thread pools and ThreadLocal are all necessary knowledge and skillful use, and they are often asked in interviews.

2.5 Android

In fact, there is not much to say about Android. For an Android programmer with work experience, everyone has mastered some of the basic Android technologies. If you want to be an Android programmer with extra points, the following Android technologies are required In-depth understanding:

Android View drawing and process
Android touch event distribution mechanism
Performance optimization (network, memory, battery, UI)
common Android source code, such as Handler, AsyncTask, etc.
Familiar with Binder principle,
understand some common knowledge of Framework, such as AMS

In the same way, these are to be systematically mastered and used.

2.6 JNI

JNI is actually a technical point in the Android NDK, but it is not like the above knowledge that requires a systematic understanding. JNI we only need to know how Java calls C or C++ code, how C or C++ calls Java code, and how it is before each other Pass various parameters (objects), because general Android meetings will not involve writing complex C or C++ code. We use NDK to call some third-party C or C++ algorithm libraries, such as FFmpeg. Of course, if you can write good C or C++ code, then it's even more divided.

2.7 Framework and projects

Some third-party frameworks are often used in Android. This is also often asked in interviews. The specific questions are their principles or design, such as LeakCanary, OkHttp, etc. Of course, we will generally only ask you the ones you have used. When using third-party frameworks, you need to understand them. They are only used for use. It is a phenomenon that interviewers don't want to see, because they can only use them. If they don't understand the principles, they cannot be controlled, but they are controlled by the framework. How to understand it, we must first know how to use this framework, and then look for the entrance, step by step to explore from the entrance. Your own projects are similar to third-party frameworks. If you don’t know the structure of your own projects, then the interviewer will know your hunger for technology. For example, my previous company used Netty for terminal and server communication. This is also reflected in my resume. I am confident that it will be reflected on my resume because I took the time to learn more about Netty, from NIO to Netty, to the commonly used classes in Netty, and then to the understanding of some concepts, such as zero copy, IO multiplexing, sticking, unpacking, and so on. So when you have used it in a project and you can say it well when asked, it must be a bonus.

Three. Other

Others can add points to your resume (not to mention good academic qualifications and good working background):

There are open source projects, have
participated in open source projects,
have personal blogs (with content, depth, and value).
These are also a person’s internal skills, but it is not the same as what I mentioned above, because it is not necessary, but it is possible Very important.

Four. Summary of internal strength

Everyone will look at me and sum up the internal skills that Android developers need to have in a while, but it is really not easy if you really want to truly master these and become your own things. Everyone has their own goals and dreams, and there must be all kinds of difficulties on the way to the goals and dreams. Only by overcoming difficulties can we move on, so stick to it!

Insert picture description here

5. Detailed list of knowledge points

What I have summarized above is that I am afraid that everyone still thinks that it is too general and there is no dry goods, so I will make up a list for everyone:

Activity’s life cycle
Activity’s task stack
Activity’s startup mode
Fragment’s life cycle
Fragment communication, between Fragments,
what is Fragment and Activity is Service, and the difference between Thread and
Broadcast’s role and registration method
What is local broadcasting
What is ordered broadcasting
What are the asynchronous processing methods of Android? The drawing process of
AsycnTask, HandlerThread, IntentService source code
Binder
View
Event distribution mechanism
Several scenarios and methods of custom View
ListView caching mechanism
Handler, Message, MessageQueue, Looper
third-party open source framework design and principle
ANR is What, how to avoid and troubleshoot
OOM, generally how to avoid and solve
memory leaks, what are the common memory leaks, what
version management tools are used, Git, SVN
code compilation tools,
code obfuscation,
Java IO
multi-threaded
class loader,
reflection
23 kinds Design mode
HTTP, TCP, UDP protocol
Computer network
Operating system principles
Algorithms and data structures: sorting, binary tree traversal, dynamic programming,
common encryption methods and principles

Six. About the prospects of Android

I keep hearing a lot of people talking about whether there is a future for Android, Android R&D is going downhill, and Android jobs are too hard to find. In fact, my opinion on these is very simple. I really haven’t said that Android development is no longer available. The point where the road can go, of course I can't predict the future. Now major companies are actually short of Android R&D (intermediate and high-level) and are constantly hiring people. Take Xiaomi as an example, let alone interviewers, they can’t get too many resumes, and it takes a lot of time to find them. resume. Therefore, for students with Android development experience, more should think about how to explore in depth, rather than just thinking about changing directions. No matter which direction you change, you will face the time point from beginner to advanced to senior to expert. So I think the correct career plan should be pyramid-shaped, and the core competitiveness must be solid!

Seven. Summary

The above is a simple summary of the technical points before the interview. There are many things. If you want to master these from scratch, it is also a very difficult process. You can only rely on yourself to accumulate bit by bit. There is no other way. In fact, it is not difficult to sum up these things by yourself. The difficult thing is how to learn, how to persist, and how to strengthen. Everyone has different ways of learning and accumulation. You must find your own way. The standard of what is a good way is to let yourself remember Quickly remember, remembering is more important than quick remembering. How to persevere is a test of willpower. We often 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 keep their feet on the ground. I believe that the harder you work, the luckier you are!

Insert picture description here

8. Dedicated to readers

I have been doing Android development by myself in the 4th year. Two years after graduation, I am fortunate to join the big family of ByteDance. In the 4 years of Byte, I have witnessed too many people coming and going, and I am deeply impressed by a colleague who switched jobs to Ali and directly doubled his salary, but I also saw many people bumping into the wall with gold plated with "big factory". Technically!

I may be considered a successful example myself. I achieved 2-2 from 1-1 in 4 years. Of course, the "sorrowful tears" behind this will be discussed later. In general, thanks to my continuous learning, review and summary, and improve my skills! Let me share my specific study route and notes in the past 4 years, hoping to help friends who are interested in improving technology!

The following complete study notes PDF, you can like + comment to support the worker brother, click here to pick it up for free !

  • Essential skills for architects

At present, the mainstream language for Android APP development is the Java language. The biggest feature of the Java language is to increase the possibility of software interaction. It can be said that almost all applications on Android phones are written in the Java language.

Knowledge points:
1. In-depth understanding of Java generics
2. Explaining in-depth explanations
3. Concurrent programming
4. Data transmission and serialization
5. Principles of Java virtual machine
6. Efficient IO

Essential skills for architects

  • Interpretation of open source framework for design thinking

With the continuous development of Internet companies, there are more and more modules in product projects, and user experience requirements are getting higher and higher. It is becoming more and more difficult to achieve the purpose of small steps and fast iterations, and the application of plug-in technology is born. If there is no plug-in technology, the applications that integrate a large number of "app" such as Meituan and Taobao may be as big as a few g.

Therefore, today's Android mobile development will not be hot-fixed, plug-inized, or componentized, and more than 80% of the interviews will not pass.

Knowledge points:
1. Hot fix design
2. Plug-in framework design
3. Component framework design
4. Picture loading framework
5. Network access framework design
6. RXJava responsive programming framework design

Interpretation of open source framework for design thinking

  • 360° all-round performance tuning

In the hands of development engineers at different levels, because of the uneven technical level, even if many mobile phones are running with very high software performance, there will still be lag when opening applications.

In addition, with the iteration of product content, the functions become more and more complex, and the UI pages become more and more abundant, which also becomes an obstacle to smooth operation. In summary, the performance optimization of APP has become a comprehensive quality that developers should have, and it is also a guarantee for developers to complete high-quality application works.

1. Design ideas and code quality optimization

2. Program performance optimization

  • Start-up speed and execution efficiency optimization
  • Layout detection and optimization
  • Memory optimization
  • Power consumption optimization
  • Network transmission and data storage optimization
  • APK size optimization

3. Optimization of development efficiency

  • Distributed version control system Git
  • Automated build system Gradle

4. Project actual combat

  • Start speed
  • Fluency
  • The practice of Douyin's APK package size resource optimization
  • Full analysis of Youku's responsive layout technology
  • Network Optimization
  • Revealing the Secret of the Performance Optimization Project on Taobao Double 11
  • Source code dependency analysis of AutoNavi APP full link
  • Sharing of actual combat experience of completely eliminating OOM
  • WeChat Android terminal memory optimization practice

360° all-round performance tuning

  • Android framework architecture

Android framework architecture (advanced UI+FrameWork source code) This piece of knowledge is currently the most users, and we call it the technology of Android from 2013 to 2016.

Android developers are often familiar and unfamiliar with this frequently "used" code because they are used to copying code online: the familiar is dealing with them almost every day, and copying the code every day; the unfamiliar is that although with these codes every day Dealing with codes, but I haven't studied the principles of these codes in depth and the connotations in the depths of the codes.

Key points of this article:
1. Advanced UI promotion
2. Android kernel components
3. Essential IPC for large projects
4. Data persistence and serialization
5. Framework kernel analysis

Android framework architecture

  • NDK module development (audio and video series)

NDK (abbreviation of Native Development Kit) is a software development kit based on a native programming interface that allows you to use C and C++ code in Android applications. The program developed by this tool runs directly locally, not a virtual machine.

In Android, NDK is a collection of a series of tools, mainly used to extend the Android SDK. NDK provides a series of tools to help developers quickly develop C or C++ dynamic libraries, and can automatically package so and Java applications into an apk.

Knowledge points in this article:
1. Introduction to C/C++ developed by NDK
2. JNI module development
3. Linux programming
4. Low-level image processing
5. Audio and video development
6. Machine learning

NDK module development

  • Flutter learning advanced

2019 is undoubtedly a year in which Flutter technology is in full swing.

Every mobile developer is crazy about the features and concepts of "rapid development, expressive and flexible UI, native performance" brought by Flutter, from super apps to independent apps, from pure Flutter to hybrid stacks, developers We are enthusiastic about exploring and applying Flutter technology in different scenarios, and we are also facing a variety of different challenges.

Key points of this article:
1. Overview of Flutter cross-platform development
2. Flutter development environment construction in Windows
3. Writing your first Flutter APP
4. Getting started

with the Flutter Dart language system ...

Flutter learning

  • WeChat applet development

As one of the most popular programming development application scenarios, WeChat applets are very popular in the market, which makes many developers greedy. But for beginners, it's completely at a loss. I don't know what knowledge needs to be learned in the development and production of WeChat applets. Friends in need can refer to this article.

The main points of knowledge in this article:
1. Overview and introduction of
applet 2. UI development of applet
3. API operation
4. Practical combat of shopping mall projects

WeChat applet development

  • Interpretation of Android-related source code
    As long as it is a programmer, whether it is Java or Android, if you don’t read the source code and only look at the API documentation, it will just stay on the skin. This is not good for the establishment and completeness of our knowledge system and the improvement of actual combat technology. of.

Interpretation of Android related source code

Interpretation of part of the Android-related source code

Due to space reasons, if you need the PDF of the above complete study notes, you can like + comment to support the worker brother, click here to pick it up for free !

Guess you like

Origin blog.csdn.net/Androiddddd/article/details/113943850
Recommended