Android development foundation is not strong? The most comprehensive test sites and interview skills, have been offered

Preface

It is well known that the IT industry has high salaries, so many people choose IT-related majors in universities. Even if people who are not in this major, they want to go to a training institution for gold plating and enter this industry after graduation.

But the saying that this industry retires at the age of 35 has always been rumors.

In addition, major companies have continued to lay off employees in recent years. The most famous one is Huawei, and many people over 35 have been eliminated.

But these are all data magnified by the media, and the real situation is often not as cruel as it appears on the surface.

Many people who are capable in this area can frequently change jobs before the age of 30. After the age of 30, find a large company that is stable with them. The value you bring to the company is greater than the contribution the company gives you. Your position must be stable. Stable. And the upward trend is also good.

Generally, at the age of 35, they fainted their technical management posts. Whether in large companies such as NetEase, Alibaba, Huawei, Didi, and Meituan, or some small Internet companies, these people are the backbone.

And let’s take a look at the people over 35 who were laid off. They have low positions, low incomes, and high substitutability. They have been mixed for more than 10 years. If you are still in the lowest-end position, you can only be eliminated by later young people. .

This is the reality in China. If you want to be a pure programmer, it seems very difficult. Unlike foreign countries, some people can still be a pure programmer at the bottom of their forties or 50s, focusing only on writing well. The code is good software.

But this is the reality. If you don't want to be retired at the age of 35, you should plan your career when you start.

Self-learning ability and problem-solving ability are always necessary abilities for IT professionals.

From elementary to advanced level, an advanced collection of mobile programmers

To become an excellent Android developer, you need a complete knowledge system. Here, let us grow together to be what we think.

Let's take Android development as an example. From both hard skills and soft skills, we sort out the skill points required for mobile programmers to advance from beginner to advanced under the big front-end trend, and recommend some practical books and materials.

(1) Hard skills: professional technical knowledge

1. Java / Kotlin development language

(1) Java

**Common data structures: **Use scenarios such as ArrayList, Vector, CopyOnWriteArrayList, HaspMap, ConcurrentHashMap, HashTable, etc.

The JVM virtual machine includes Java memory management, GC garbage collection mechanism, and class loading mechanism. Recommended book: "In-depth understanding of Java virtual machine JVM advanced features and VPN practice".

**Multi-threaded programming,** including thread pool, lock mechanism, thread synchronization. Recommended books: "Java Concurrent Programming Practice" and "Java Multithreaded Programming Core Technology".

AOP programming implementation , including JDK dynamic proxy implementation, ASM direct manipulation of bytecode, CGLIB implementation, its principle encapsulates ASM, which is more convenient to use.

Javassist : Directly modify the method that needs to be cut before the bytecode is loaded, as well as the annotation processor APT. There are many open source library applications in Android, such as DataBinding, ButterKnife, EventBus3, etc.

Exception handling Exception , including checked exception and runtime exception handling.

IO flow is related , including blocking IO and non-blocking IO.

Some high-level specialties of Java , such as reflection, proxy, generics, enumeration, regular expressions, etc.; also learn about new features such as jdk1.8, 1.9, 1.10, etc. There are many related books, recommended ** "Thinking in Java" and "Effective Java" **.

(2) Kotlin

Kotlin is a new programming language based on JVM, which was announced as the official development language of Android by Google in Google IO 2017.

What are the advantages of Kotlin?

**①Conciseness: **A lot of standard functions are provided, which greatly reduces the amount of boilerplate code.

**② Security: ** Avoid errors such as null pointer exceptions.

**③Interoperability:** Make full use of the existing libraries of JVM, Android and browsers.

**④Tool-friendly: **It can be built with any Java IDE or using the command line.

Establish functional programming ideas in Kotlin . The function is understood as the mapping relationship between one value and another value, and the function is used as a unit to process various business logic. The function can be used as a parameter or a return value. Use the standard functions provided by Kotlin, such as let, run, with, apply, also, and Lambda expressions. Try to use closures and higher-order functions.

Another outstanding feature of Kotlin is the coroutine , which provides a powerful paradigm for designing asynchronous, non-blocking programs. A coroutine is a lightweight thread that provides a cheaper and controllable operation that avoids blocking: the coroutine hangs. Put complex asynchronous operations into the underlying library, and the program logic can be expressed in sequence to simplify asynchronous programming.

To put it simply, Kotlin/Native is designed to support programming in non-JVM virtual machine platform environments, such as iOS and embedded platforms, and to support interoperability with C. Recommended book: "Kotlin Actual Combat" .

2. Android advanced technical points

Process related , including App process principle and AIDL principle.

Performance optimization , including: memory, cpu, power consumption, network request, UI layout, thread, database and other optimization methods and the use of optimization tools.

Android source code related , including: Binder mechanism, Activity startup process, Handler principle, AMS, PMS, WMS principle, View drawing process, Touch event delivery mechanism, etc.

The process of compiling and packaging , from the java/kotlin source code to the final APK.

The realization principle of hot repair, currently there are many types of hot repair frameworks, common ones include underlying replacement, class loading and Instant Run solutions.

The principle of reverse engineering is mainly to prevent the apk from being decompiled and cracked, and to understand the apk reinforcement scheme.

Plug-inization , there are also many current solutions. The mainstream technology implementation is the Hook method, registering the activity to occupy the hole, using the occupying activity to pass AMS verification, and restore the plug-in activity. The principles of other components are similar.

NDK development , call JNI and call back to Java.

For custom controls , you need to pay attention to the call timing of onMeasure, onLayout, and onDraw, as well as the Touch event distribution mechanism.

Animation View Animation , view animation has been provided in the very early Android version system, and can only be used to set the animation of the View.

Property Animation , only for version 3.0 or higher, can be set to any Object, including objects that have not been rendered on the screen. This kind of animation is extensible and can customize any type and attribute of animation.

Native JS interaction in Webview , commonly used JSBridge, etc.

The features of Gradle and DSL syntax , such as the use of Gradle Transform API, allow third-party plug-ins to manipulate the compiled class files before they are converted to dex files. Using this feature, we can implement code injection or code modification during the code compilation stage, which is also the basis of many buried point technologies and hot repair technologies.

**Security: **HTTPS communication principle, data encryption methods, including MD5, RSA, etc., webview security, code obfuscation, data verification, component communication security, server communication.

CI continuous integration : Jenkins, Gitlab CI, etc. build continuous integration development tools.

Sersor sensor : including gyroscope, acceleration sensor, direction sensor, gravity sensor, light sensor, etc.

Android development internationalization .

The difference between ART and Dalvik virtual machine is mainly AOT, Ahead-Of-Time pre-compilation.

Familiar with DEX file structure.

Unit testing : the use of JUnit4, AndroidJUnitRunner, Mockito framework.

Automated testing : Monkey / Monkey Runner, Espresso, UI Automator, etc.

Master the modular development method : Mainly pay attention to the division of layers and the jump communication between modules.

Code refactoring ability , recommended books: "Refactoring to improve the design of existing code", "Refactoring and Patterns"

Google Dynamic Framework App Bundles .

Jetpack , Google's new generation of components, tools and architectural guidance, aims to accelerate the speed of Android application development. Jetpack is mainly divided into 4 parts:

img

Under the trend of big front-end, mobile programmers should be cool? These advanced skills help you counterattack

Third-party libraries commonly used in Android development:

Reactive programming: RxJava, RxAndroid, Google’s Agera

Network library: including Retrofit, OkHttp, Volley

Picture: Fresco, Gilde, Picasso

Dependency injection: Dagger2

Database: Realm, ORMLite, GreenDAO, ObjectBox

Data bus: EventBus, otto

LeakCanary, a memory leak detection tool, etc.

If each skill point is expanded in detail, it will form a very complicated knowledge map. It is recommended that you sort out and digest it yourself.

3. OOAD and design patterns

In terms of architecture design, the first thing to master is object-oriented development and design. Specific knowledge points include:

**Three characteristics of object-oriented: **encapsulation, inheritance, polymorphism.

Five basic principles (SOLID principles) , single responsibility principle, open and closed principle, Richter substitution principle, dependency inversion principle, interface separation principle.

23 design patterns : commonly used are factories, singletons, adapters, bridges, combinations, agents, commands, observers, strategies, state patterns, etc.

4. APP architecture design

Including MVC, MVP, MVVM, MVI, VIPER, Clean Architecture, Flux. At present, in addition to MVC, MVP and MVVM are used more, and the specific architecture design must be considered in conjunction with the business.

(2) Soft skills

People are in the workplace and walk the rivers and lakes. It is not enough to advance senior programmers with technical depth. They also need to master many soft skills and pay attention to the training of comprehensive professional qualities. Many people do not pay enough attention to them at first, and they are prone to encounter bottlenecks in the latter half of the rise in the workplace.

The following is my personal summary of the necessary soft skills for senior programmers for your reference.

**1. Fast learning ability: **Including the depth and breadth of technology, being able to continuously explore new technologies and learn continuously.

**2. Communication skills: **Strengthen the ability of expression, reading, and writing, even today with advanced technology, it will never be out of date. Because any form of communication is very necessary within the enterprise.

**3. Teamwork ability: **Developers can easily fall into an isolated state of interpersonal communication, but development work can never be completed by one person. Only when members can truly integrate into the team and smoothly communicate and cooperate with other colleagues can it be reflected Out of its true value, the chance of being listed as a candidate for future promotion is also greater.

**4. Time management ability: **You can refer to the "four-quadrant rule" of time management to focus your energy and time on important but not urgent tasks, so that you can plan ahead.

img

Under the trend of big front-end, mobile programmers should be cool? These advanced skills help you counterattack

**5. Influence: **On the one hand, it is business influence, and on the other hand, it is technical influence. Among them, the ways to increase the influence of technology include: participating in technology sharing, summarizing and disseminating accumulated knowledge; participating in the review of technical solutions and sharing technical experience; helping new students solve technical problems; in blogs, Github, StackOverflow and other platforms Share on the outside.

6. Document writing ability:

Code comments . Many programmers rarely write comments, or too many comments are inappropriate. Refer to the annotation specifications of open source projects.

Write technical design documents . Including flowcharts, class diagrams, function sequence diagrams and so on.

to sum up

[Android detailed knowledge point mind map (skill tree)]

I personally do Android development. I have been doing Android development for more than ten years. I am currently working as a CTO and system architect in a startup company. Although Android is not as hot as in previous years, the era of finding high-paying jobs with four major components has passed. This can only show that the positions below the intermediate level of Android are saturated. Now senior engineers are still relatively lacking . Many senior positions give very high salaries (you may not be able to find a suitable one if you have more money), so I strive to become a senior engineer. is the most important.

Attached here are dozens of sets of ByteDance related to the above-mentioned interview questions, interview questions from JD.com, Xiaomi, Tencent, Toutiao, Ali, Meituan and other companies in 19 years. The technical points are organized into videos and PDFs (in fact, a lot of effort was spent than expected), including knowledge + many details.

Due to limited space, I will show you a small part in the form of pictures.

The detailed arrangement can be seen on GitHub;

Android architecture video + BAT interview topic PDF + study notes

There are a lot of materials for learning Android on the Internet, but if the knowledge learned is not structured, and when you encounter problems, you just taste it and stop studying it in depth, then it is difficult to achieve real technological improvement. I hope that this systematic technical system will provide you with a direction reference.

8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**

There are a lot of materials for learning Android on the Internet, but if the knowledge learned is not structured, and when you encounter problems, you just taste it and stop studying it in depth, then it is difficult to achieve real technological improvement. I hope that this systematic technical system will provide you with a direction reference.

Finally, I would like to give everyone a word and encourage each other!

Guess you like

Origin blog.csdn.net/fanzhang_vip0723/article/details/112838011