After preparing for a week, I went to ByteDance for an interview. As a result, I was tortured and cried... Let's be the interviewer.

People say that there are two kinds of people in this world who are destined to be single, one is too good, the other is too ordinary.

I hear it? Then I am not good at this, so I resolutely broke up with my girlfriend.

People say that the Internet is here, and companies that are still recruiting people on a large scale at this time must be awesome companies. And those who bravely quit at this time must be awesome people.

So I started the social recruitment interview by ByteDance.

For this day, I prepared for a whole week. The day before the interview, the long line had a neat haircut, and his beard was shaved cleanly. Putting on the brand new New Balance 999, even the socks are brand new NB, dark green overalls with burgundy sweater, and an exquisite black down waistcoat on the outside, appearing in front of the computer screen on time, ready to start the video interview.

"To interview today's headlines, you'd better prepare yourself."

My good brother who interviewed Toutiao gave me a piece of advice. However, the email was very clear about the content of the test, so on the one hand, I did not do too much psychological construction. I did not expect to be abused by the interviewer...

Here are the interview questions:

1. Self-introduction

2. Familiar language, how to learn java (the difference between core technology volume 1 and volume 2) jvm virtual machine

3. The difference between interface and abstract class, if a class does not need to be inherited, what should be done, final, then under what circumstances would we use final to modify the class...

4. InvokeVirtual, invokeInteface, why do you think the efficiency of abstract classes is high (I said on the lookup bytecode instruction) If it is a case of single inheritance and implementation of an interface, you should have your own understanding...

5. The function of equals and hashCode() of HashMap, what will happen if hashcode is not overwritten

6. What is the difference between Exception and Error? Do we have to solve Exception by ourselves?

7. Do you understand generics? Is generic erasure in the compiling stage or in the loading stage? How to understand the concept of type erasure (here I talked about automatic boxing, it should be wrong)

8. The difference between extends and super in generics

9. Thread, why a new thread needs to be opened for network requests

10. ANR has several situations

11. Can the UI be manipulated in the thread?

12. Have you heard of HandlerThread, do you know what he does?

13.Handler principle

14. Will all messages sent asynchronously go to the same message queue?

15. Correspondence between thread and handler, Looper, MessageQueue

16. How to deal with this delayed message, I answered that there is a linked list structure in the messageQueue, sorted by time, it is taken out when it is time, and it is blocked if it is not time.

17. Talk about dynamic agents

18. Annotation

19. How do you understand the concept of subnet mask?

20. Http message structure is divided into several layers, which layer is specific, send a message request, give you something and ask you which segment of the message these things are in

21. What are the request methods, Head, Delete. I specifically asked about Post and Get requests. Why did Post send two messages? What if there is no data in the data segment

22. I asked about the glide source code. What other image request frameworks are there?

23. Have you seen some source code libraries?

24...What is the difference between Application and Activity in the inheritance tree of Context? What is the difference in the use of the two?

Data Structures and Algorithms:

1. Find the maximum distance between two nodes in the binary tree.

2. Any binary tree, find the maximum node distance

3. Implement an ArrayList by yourself, first write ten minutes to realize the core function, and then we will look at it

to sum up

I couldn’t bear to look directly at the replay, but it didn’t feel too difficult. They were all regular questions, and then I kept studying one point until you didn’t know how to do it, ah, baldness... the overall situation is not good enough, and you have some knowledge. I didn’t grasp it thoroughly, and I was cold.

This is a story I saw on a forum. I know that many of our programmers have a dream of being a big factory, but many programmers are at a loss as to how to prepare for interviews with big factories.

I have been doing Android development by myself in the 6th year. Two years after graduation, I have the honor 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. Below I will talk about how to prepare for interviews with major companies based on some of my own opinions.

If you want to reach the standards of major manufacturers, you must first build a knowledge framework

When we are learning technology, if we do not pay attention to building a knowledge framework, you will encounter a problem in the later stage, that is, you will feel that the knowledge you learned before is messy and unsystematic, and the industry technology is updated very quickly. As you learn more and more knowledge by yourself in the future, and the previous studies are scattered and you have not sorted it out, you will feel that the knowledge you have is scattered.

It seems that there are many points, the lines may have been connected, but they just don't form a surface. When we do a larger project, we need to be proficient in many related technical aspects, and even component technology. If you only use some common technical points for a long time, then you may have a long time to stay in a small company to move code.

How to build a knowledge framework?

The two ways of building a knowledge framework shared here are both very good methods summarized by many technical experts. It depends on your personal preferences!

The first type: watch video tutorials to build a knowledge framework

This is a general method, and may be more suitable for those friends who are in the elementary to intermediate stages of technology. Of course, here I say one thing. I find that many friends who watch videos for learning often make such a mistake, that is, they have a great desire for video tutorials. What does squirrel disease caused by strong force mean? That is, many friends look for video tutorials everywhere, and then all kinds of hoarding , at most, look at this, look at that, feel this or that, so I want to watch this, and I want to watch that. The final result is the video I have collected a lot of tutorials, but none of them have really been read . You said, are you like this? (This paragraph is too true!)

In fact, this is a big taboo in learning technology. It will deceive you seriously and make you feel that you have learned a lot. In fact, not only do you learn very little, but it also slows down the progress of your improvement! Let me tell you, about the video tutorials, just find a set of similar ones . The video tutorials of some training courses circulating on the market are actually quite different. As long as they are not in disrepair, they will do. It’s a training class, so it’s very suitable to build a knowledge framework. Just find one. If there are more, there is no benefit. Now listen to me and see if there are several sets of the same type of video tutorials in your collection. Mine, keep one set, delete everything else!

Remember, only one set is left to build the knowledge framework, only one set, one set, just one set.

The second type: search for relevant knowledge or paths, self-organizing knowledge framework

This method is actually more demanding, which requires you to have a certain search ability and organizational ability. The core of this method is to search for the knowledge points you need to learn, then organize and combine, and then organize into a knowledge framework.

You may not understand this way. Let me give you an example. For example, if we learn Android, if we build a knowledge framework in the way of watching videos, then we only need to find a set of video tutorials, and then look at it from the front to the back, and build according to what is said The corresponding folders can form our knowledge framework.

But the second way is not like this, because there is no video tutorial as a reference, we need to search by ourselves , such as searching for "what knowledge points should be mastered to learn Android?", "what does Android need to learn", "Android learning path "What is it", and then you will get a lot of answers, there will be a lot of people tell you what to learn first, what to learn, and so on, and then find a few more answers, you will come up with a learning path, and then follow this path to establish You can study the corresponding folders one by one in the order of the folders . You can find a separate video tutorial to watch, or you can search a series of blogs online to learn. This is much more free.

( If you think online search is very laborious, I can share your set of Android advanced guide for internal transmission by byte beating)

1. Advanced UI, custom View

The knowledge of UI is currently the most users. The Android introductory training that was so popular that year, you can find a good job by learning this little piece of knowledge.

However, it is obviously not enough now. Reject the endless CV, go to the actual project, read the source code, and study the principle!

2. NDK module development

Today, short video apps are booming and flourishing. With the rise of short video, more and more attention has been paid to audio and video development, and the salary is rising. Taking first-tier cities as an example, the salary of audio and video engineering development is 40% higher than that of Android application layer development.

The content mainly involves the following aspects:

  • NDK module development
  • JNI module
  • Native development tools
  • Linux programming
  • Low-level image processing
  • Audio and video development
  • Machine learning

3. Data structure and algorithm

Why study data structure?

This is because all programs essentially process data. How to process data efficiently depends on the structure of the data itself (such as type (integer, floating point, etc.), dimension, and whether it is a complex type (structure) Type, class type), etc.) and the logical relationship between the data (linear, non-linear, etc.).

The data structure is inseparable from the algorithm, and the designed data structure is for the smooth and convenient implementation of the algorithm.

4. Java Advanced and Core Principles

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.

One hundred percent, all companies, large and small, must ask Java-related interviews.

The content mainly involves the following aspects:

  • HashMap
  • ArrayList
  • LinkedList
  • Hashset source code analysis
  • Memory model
  • Garbage collection algorithm (JVM)
  • The difference between garbage collection mechanism and calling System.gc()
  • Class loading process
  • reflection
  • Multithreading and thread pool
  • Design Patterns
  • Java generics,
    etc...

5. Advanced Flutter technology

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.

The main points of this article:

1. Overview of Flutter cross-platform development
2. Building Flutter development environment in Windows
3. Writing your first Flutter APP
4. Getting started with the Flutter Dart language system


6.360-degree performance tuning in all aspects

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 Eleven
  • Analysis of source code dependence of AutoNavi APP full link
  • Sharing of actual combat experience of completely eliminating OOM
  • WeChat Android terminal memory optimization practice

7. Framework refined kernel analysis

As we all know, Android is an operating system based on Linux. But for the Linux kernel, Android is just an application running on the kernel, and there is no difference from other applications running on the kernel.

Therefore, Android also needs a running environment, and the Linux kernel needs to load the resources needed for the Android Framework to run after the startup is complete. Only after the Framework is initialized can the corresponding APK application be started.

The main content includes:

  • In-depth analysis of Binder
  • In-depth analysis of Handler
  • Dalvik VM process system
  • In-depth analysis of WMS
  • PackagerManagerService

So far, this is the second way to build a knowledge framework!

Due to space reasons, if you need the full version of the PDF, you can like + comment to support me, and then [click here] to read and download for free.

Then I must emphasize a few points:

  1. This knowledge framework does not mean that you organize the order of knowledge to be learned, and then create the corresponding folder, you really have to learn the knowledge contained in it!

  2. When you study, you must take notes, you must take notes, this is very important

  3. In the end, your knowledge framework should be a complete hierarchical folder, and each folder has corresponding knowledge study notes

In this way, your knowledge framework is truly completed! At this point, you have taken the most critical step towards the Android architect.

With your own knowledge framework, you will be able to do well in the interview. Finally, I wish everyone a smooth interview and get a satisfactory offer!

Guess you like

Origin blog.csdn.net/weixin_52217015/article/details/115015880