Flutter technical analysis and actual combat! The strongest vue in history is summarized, the powerful version

background

Coordinates in Guangzhou, five years of iOS development experience.

I recently interviewed a programmer who has worked for 12 years,

This old man has 3 years of Java development experience, 2 years of H5, 7 years of iOS development experience, and his resume says that he is proficient in Java, iOS, and is familiar with H5 development. There is no specific technical point.

To be honest, I was looking forward to this old man's interview, so I was invited to him.

The aura of my brother interview is very full, I also respect him very much, after a large wave of self-introduction, we entered the topic.

I asked him about Runloop. He said he had almost never used Runloop, so I gave him a small example. The answer my brother gave me was that Baidu could solve it.

So I asked him about KVC, but my brother still didn’t know clearly, so I asked about the most basic copy, weak and other key words, but I still couldn’t explain clearly. My brother is still so domineering and he gave me the feeling "Why do you do everything, don't ask these useless".

Looking at his resume written on it, proficient in Android and iOS development, familiar with cross-platform development, js interaction, I asked if you know Flutter? He said that he didn't know he hadn't heard it before, and finally asked him about 25k. I didn't know what to ask, so he ended the interview in a hurry.

Knowledge needed to review for Android job-hopping

Before introducing the content of the interview survey, let’s take a look at the knowledge points that I think "Intermediate Android" needs to master. These are summed up by combining some interviews, actual interviews and consulting seniors. They mainly include two parts:

  1. Basic knowledge
  2. Advanced knowledge

When interviewing for intermediate and lower positions, in the telephone interview, one side, or when your resume does not highlight the highlights, you will generally ask the basics first, in order to make sure that your basic skills are not solid.

If there is too much basic knowledge, it is dangerous, and you must prepare well. This is unavoidable. After the telephone interview and the inspection of basic skills, you will enter the next stage-ask some advanced ones to see where your highest level is.

At this stage, it is normal that you will not, because the other party is determining your level, but the attitude must be proactive. Even if you have not studied before, you must also use some experience to tell the results of the speculation, and do not directly say "I will not".

Basic knowledge

The basic knowledge mainly includes the following points:

  1. Java basics
  2. Concurrent/asynchronous
  3. Android basics
  4. Design Patterns
  5. Common data structure algorithms
  6. Network foundation

1. Java Basics

Although Kotlin is very popular now, I have interviewed several major companies without asking Kotlin, and I have asked a lot about Java. Therefore, we must ensure that the current knowledge is proficient, and then learn new knowledge, otherwise it will really become a bear.

The Java foundation mainly includes the following knowledge points:

  • Differences between internal classes and static internal classes, usage scenarios

  • The difference between abstract class and interface inheritance implementation

  • set

  • annotation

  • reflection

  • Generic

  • abnormal

  • I

    Less asked

I only post links to the content I have written, and the rest of my friends go online to search, or buy a book to read it. It is recommended to read "Java Programming Thoughts", which not only answers What, but also discusses Why.

2. Concurrent/Asynchronous

It mainly includes two parts:

  1. Android Concurrency
  2. Java concurrency knowledge

Android's main thread model requires us to place time-consuming operations on threads for asynchronous execution, otherwise it will affect the smoothness of the app or even freeze.

It is necessary to provide the master Andrews Handler, HandlerThread, IntentService, AsyncTask, this is a good package for our Andrews asynchronous classes, from the use of the principle, have to understand, interview regulars.

Then you need to understand the Java thread, memory model, and classes provided under the Java concurrency package. This is also a frequent visitor for large companies to investigate the basics.

In addition to the interview, if you went to see open-source framework, you will find there are many ConcurrentHashMap, Lock, Condition, start looking at your face ignorant force, in the mastery of knowledge of the Java concurrency, the framework will then see a lot of effort.

Main knowledge points of Java concurrency:

  • The difference between synchronized and Lock
  • What is a reentrant lock
  • Thread communication method
  • The difference between wait and sleep
  • wait-notify model
  • Producer consumer model
  • Thread Pool

Recommended reading books: "Exploration of Android Development Art", "Java Concurrent Programming Art", "Java Concurrent Programming Practice"

3. Android Basics

Android basics like to ask back and forth about those points:

  • Common problems such as four major components, life cycle startup methods, etc.

  • Custom View related

    Drawing process

    Event delivery

    Sliding conflict

This part is common, and most people should be familiar with it. If you want to read the book, please read "Art Exploration".

4. Design Patterns

When I was looking for a job this time, there were two writing singleton modes in the written test. I remember that a few years ago when the school recruited, I lost a good opportunity because of singleton. You can weigh the importance of singleton mode by yourself.

The design pattern investigation is not too complicated. You know the usage scenarios of several commonly used design patterns, and you can write the key singletons (static internal double-check know the difference).

5. Data structure algorithm

I asked very little about the algorithm in this interview. I only hand-written insertion sort. It is recommended to familiarize yourself with the time complexity and implementation of bubbling, insertion, and merge. It is best to write it by hand, otherwise it is easy to make mistakes when handwriting on site.

As a pursuing programmer, these data structures and algorithms need to be mastered:

  • Array linked list difference
  • Linked list insertion and deletion
  • Stack and usage scenarios
  • Queue and usage scenarios (may be extended to blocking queues)

These are the basics. Only by studying well can you master the others.

Red-black trees, KMP, shortest path, dynamic programming, and knapsack problems are all advanced. There are relatively few questions, just get to know them.

6. Network Basics

In fact, there are not many questions about the network, because after all, we don’t need to implement an HTTP Client ourselves. Common network problems are about the following:

  • Seven-layer model

  • HTTP content

  • Common response codes

  • Cache related

  • TCP three-way handshake, four waved hands

  • Use of Socket

Advanced knowledge

After confirming that your foundation is sufficient, you will be examined two or three aspects of your advanced ability. As far as application development is concerned, advanced knowledge mainly includes the following:

  1. Framework principle

    Cache

    The internet

    image

  2. Performance optimization

  3. Architecture pattern

  4. JVM

  5. Plug-in

1. Framework Principle

As a pursuit of Android development, how can it be possible to only use the framework without knowing its principles?

In interviews, I will often be asked: What framework's source code are you familiar with?

At this time, if you are not prepared, you will be embarrassed and lost the opportunity to add points to yourself.

The current mainstream framework is RxJava Retrofit OkHttp Picasso/Glide EventBus3. You can choose two or so to familiarize yourself with the source code and general process. It is important to understand why this framework is needed, the problems it solves, and how to solve it .

Suggested reading: "Android Advanced Light"

2. Performance optimization

Performance optimization is another high-frequency problem. Generally, it mainly asks about the optimization of memory and UI.

common problem:

  • Memory optimization

    How to avoid and detect memory leaks

    What to do with memory jitter

    Have you used any tools?

    How to avoid OOM

  • UI optimization

    What to do if the layout is stuck

    How to determine whether the layout needs to be optimized

    What tools are there

You can also read "High-Performance Android Application Development".

3. Architecture Mode

Advanced Android development requires not only the completion of a module, but also the design and development of the entire project.

The common architecture model is divided by project layer, MVC MVP MVVM, you can choose two of them for learning and practice, and you can compare and understand the advantages and disadvantages. There are many online articles.

The other is design thinking. The idea of ​​OOP object-oriented development is generally known. Inheritance encapsulation polymorphism, when to use interfaces and when to use abstract classes, are actually complementary to design patterns.

There is also AOP, aspect-oriented programming, which is generally used in large-scale projects. It is recommended to understand when adding functions without intruding the code.

There is also routing. Componentization is popular now. One problem with componentization is how to rely on components and how to communicate. These require good architecture design ideas. I am also groping.

This part of the knowledge belongs to personal experience. Different people have different experiences. There is no relevant book suitable for everyone. You need to write more and summarize it yourself.

4. JVM

When I went to a company for an interview, the next room was also interviewing a back office. While waiting for the interviewer, I secretly listened to their conversation. One of the dialogues is memorable:

  • Please introduce the CMS garbage collector.
  • Uh, I’m sorry, I only graduated for one year, so I don’t know much about it.

Does the knowledge of JVM need to work for several years to understand?

Different people have different opinions. My opinion is: as early as possible .

The main contents of the JVM are probably these (from "In-depth Understanding of the Java Virtual Machine"):

  • JMM (Java Memory Model)
  • GC (garbage collection strategy)
  • Virtual machine performance monitoring and tuning
  • Class file structure
  • Class loading mechanism
  • Program compilation optimization

Click here to receive it for free!

In...(img-DUzo0FTC-1613960160182)]

Click here to receive it for free!

Guess you like

Origin blog.csdn.net/Sunbuyi/article/details/113930350