Real knowledge from practice! Teach you how to write Android project documents, in-depth and good text

Preface

I am 38 years old this year. Before I became unemployed, I was the technical director of a well-known Internet company in a second-tier city in the south. I am happy in marriage. I have a son and a daughter under my knees. In Qian’s house, my wife takes care of the baby at home full-time. All the expenses at home are all counted on my salary. I never thought that unemployment would come to me. When I told my mother the news, my mother cried:" Such a good job is gone, I thought you would work there for a lifetime." The wife said, "With your technical ability, you will always find a good job. Don't be discouraged."

In this way, I embarked on the process of re-applying unsuspectingly. Although I was more confident in my abilities, I still walked on three legs in order to attack at the same time to ensure the final success rate.

① For the top 3 large companies in the delivery industry, because they have a good resume before, after sending some resumes, they can always receive interview notices. Every time I can chat in full swing, I will go back and wait for the notice. But I just didn't see the offer notice.

② After Top3 hit the wall, I lowered my expectations. I delivered small Internet and startup companies, and I was criticized by various HRs, saying that it was too old and the company could not support a highly paid person like me.

③ Due to the nature of the industry, my other way is to find acquaintances to refer me. This achieves the best results, but the only point is that the salary and benefits, job responsibilities, etc. do not meet my liking.

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 structure: **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,** includes 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, and it 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 and so on.

Exception handling Exception , including checked exceptions 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, and I recommend **"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 sequentially 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, embedded platforms, etc., while supporting interoperability with C. Recommended books: "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, which registers the activity to occupy the pit, uses the pit activity to pass AMS verification, and restores the plug-in activity. The principles of other components are also roughly 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 of the 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 yet been rendered on the screen. This kind of animation is extensible and can be customized for 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 will 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

Memory leak detection tool LeakCanary, 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 by 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, and so on.

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 continue to learn.

**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 are easy to 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 handling important but not urgent tasks, so that you can plan ahead.

img

Under the trend of big front-end, mobile programmers will 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.

At last

In fact, there are so many knowledge points in Android development, and there are still a few things to ask in interviews. Therefore, there are no other tricks for the interview, just look at how well you prepare for these knowledge points. So, when you go out for an interview, it is good to see which stage you have reached in your review.

The high-frequency interview questions shared by Tencent, Toutiao, Ali, Meituan, ByteDance and other companies in 2019-2021 . The blogger also organized these technical points into videos and PDFs (in fact, it took a lot more than expected Energy), including knowledge + many details . Due to the limited space, the above is just a part of the picture to show you.

[ Android learning PDF + learning video + interview document + knowledge point notes ]

[Android mind map (skill tree)]

Knowledge is not system? Here is also a sorted out mind map of Android advanced learning, for everyone to refer to a direction.

[Android Advanced Architecture Video Learning Resources]

A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)】

[Android mind map (skill tree)]

Knowledge is not system? Here is also a sorted out mind map of Android advanced learning, for everyone to refer to a direction.

[External link image is being transferred...(img-46gCTkyr-1613913669721)]

[Android Advanced Architecture Video Learning Resources]

**Android part of the video is even more powerful after receiving and learning! **Enter the BATJ factory and so on (preparation)! Nowadays, it’s said that the Internet is cold. In fact, you get in the wrong car and wear less (skills). If you get in the right car and your own technical ability is strong enough, the cost of the company’s replacement is high. How could you be laid off? It's only the elimination of the end business Curd! Nowadays, there is a flood of junior programmers in the market. This set of tutorials is aimed at Android development engineers who are 1-6 years old. They are in a bottleneck period. Those who want to break through their salary increases in the next year, advanced Android intermediate and senior, architects are even more important to you. Like a fish in water, get it quickly!

Guess you like

Origin blog.csdn.net/chayel123/article/details/113923982