An Internet user posted a post on the workplace forum, he said that he is 37 years old, is an Android veteran, because of conflict with the leadership of the previous company, there is a rift, in anger on naked resignation, now has resigned for four months, also unemployed for four months.

I tried to send out 500 resumes every day, but only three called me for an interview, the rest didn’t come back. He felt puzzled and asked a friend who was a headhunter. The friend said that he was over age and there was no post for the person of this age. Only a few of them could be relaxed to the age of 40, but it was not quite suitable for him to do. So they have no way to take an examination of the institution, did not think of the institution should also ask 35 years old, this can do, he still need to support his family.

The netizen asked why the Internet industry discriminates against age so much. He has rich experience and good technology. Why can’t he find a job? Netizens responded to the post with their own opinions.

If a competent employee can become a senior executive at this age, there is no need to apply for a job at all. Therefore, a resume above 35 will be considered incompetent by default.

The “35 rule” is true in the workplace, and if you’re not standing out and doing entry-level work at 35, you’re probably optimised — there are plenty of younger, easier to use and cheaper people out there than you are.

Today I saw this question again:

What would you think and do if you were certain that you would definitely leave your current job when you were 35 (or 40), either passively or actively?

I have to say, this is a very unpleasant question. However, it is also worth you and I to think about the problem.

In recent years, the rapid development of the domestic economy has led to many industries and many people have found opportunities.

Against this backdrop, it is easy to be overly optimistic and lose vigilance about the future. We tend to assume that each day in the future will be like yesterday, uneventful and uneventful.

But change often comes unawares.

So be prepared for a rainy day.

So in a tight market and the trend of big front end, how can we mobile programmers break through the career bottleneck and maintain the core competitiveness of individuals?

First, hard skills: professional technical knowledge

1.Java/Kotlin development language

Java

  • Common data structures:

Use scenarios such as ArrayList, Vector, CopyOnWriteArrayList, HaspMap, ConcurrentHashMap, and HashTable.

  • The JVM includes Java memory management, GC garbage collection, and class loading mechanisms. Recommended book: In-depth Understanding of Advanced Features and Best Practices of the Java Virtual Machine JVM.

  • Multithreaded programming, including thread pools, locking mechanisms, thread synchronization. Recommended books: “Java Concurrent Programming Practice” and “Java Multi-threaded Programming Core Technology”.

  • AOP programming implementation, including JDK dynamic proxy implementation, ASM direct operation bytecode, CGLIB implementation, its principle encapsulated ASM, more convenient to use.

  • Javassist: Modify the method you need to cut in directly before the bytecode is loaded, as well as the annotation processor APT, which is widely used in Android by open source libraries such as DataBinding, ButterKnife, EventBus3, etc.

  • Exception handling Exception, including check Exception and runtime Exception handling.

  • I/O flow correlation, including blocked I/O and non-blocked I/O.

  • Java’s advanced features, such as reflection, proxies, generics, enumerations, regular expressions, and so on; Also check out jdK1.8, 1.9, 1.10 and other new features. I recommend Thinking in Java and Effective Java.

Kotlin

Kotlin is a new JVM-based programming language announced by Google as the official Android development language in Google IO 2017.

What are Kotlin’s strengths?

① Simplicity: many standard functions are provided, greatly reducing the amount of boilerplate code.

② Safety: avoid errors such as null pointer exceptions.

Interoperability: Take full advantage of existing libraries in the JVM, Android, and browser.

④ Tool friendly: use any Java IDE or use the command line to build.

The idea of functional programming is enshrined in Kotlin. A function is understood as a mapping from one value to another, and the business logic is handled by a function as a unit, which can be either a parameter or a return value. Use Kotlin’s standard functions, such as let, run, with, apply, Also, and Lambda expressions. Use closures and higher-order functions whenever possible.

Another outstanding feature of Kotlin is coroutines, which provide a powerful paradigm for designing asynchronous, non-blocking programs. A coroutine is a lightweight thread that provides a cheaper, controllable operation that avoids blocking: coroutine suspend. Asynchronous programming is simplified by placing complex asynchronous operations in an underlying library where program logic can be expressed sequentially.

Finally, Kotlin/Native is designed to support programming in non-JVM virtual machine environments, such as iOS, embedded platforms, and interoperability with C. Recommended book: Kotlin In Action.

2. Advanced Technology points of Android

Process related, including App process principle and AIDL principle.

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

Android source code related, including: Binder mechanism, Activity start process, Handler principle, AMS, PMS, WMS principle, View drawing process, Touch event transfer mechanism and so on.

Compile the packaging process, from the Java/Kotlin source code to the final APK process.

At present, there are many kinds of hot repair frameworks, including low-level replacement, class loading and Instant Run schemes.

The principle of reverse engineering is mainly to prevent THE decompilation and cracking of APK, and to understand the reinforcement scheme of APK.

At present, there are also many plug-in schemes. The mainstream technology implementation is Hook method, which registers the Activity to trap, and uses the trap Activity to pass the AMS verification to restore the plug-in Activity. The principle of other components is roughly similar.

NDK development, the way to call JNI and callback Java.

Custom controls, need to pay attention to onMeasure, onLayout, onDraw call timing, and Touch event distribution mechanism.

View Animation is a View Animation provided in early Versions of Android. It can only be used to animate a View.

The Property Animation, available only in version 3.0 and above, can be set to any Object, including objects that have not yet been rendered to the screen. This animation is extensible and can be customized for any type and attribute of animation.

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

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

** Security: **HTTPS communication principle, data encryption methods, including MD5, RSA, webView security, code obfuscations, data check, component communication security, server communication.

CI continuous integration: Jenkins, Gitlab CI and others build continuous integration development tools.

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

Internationalization of Android development.

The main difference between ART and Dalvik virtual machine is AOT, Ahead-of-time precompilation.

Be familiar with the DEX file structure.

Unit tests:

Junit 4, AndroidJUnitRunner,

Use of the Mockito framework.

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

Master the modular development mode: the main attention is divided into layers, jump communication between modules.

Code Refactoring Ability, recommended books: Refactoring improves the Design of Existing Code, Refactoring and Patterns

Google’s dynamic framework App Bundles.

Jetpack, Google’s next generation of components, tools, and architecture guides designed to speed up Android application development. Jetpack is divided into four parts:

Android development common third-party libraries:

Responsive programming: RxJava, RxAndroid, Google Agera

Web libraries: Include Retrofit, OkHttp, Volley

Photo: Fresco, Gilde, Picasso

Dependency injection: Dagger2

Databases: Realm, ORMLite, GreenDAO, ObjectBox

Data bus: EventBus, Otto

Memory leak detection tool LeakCanary

If each skill point is expanded in detail, it will form a huge and complicated knowledge map. We suggest that you sort out and summarize it by yourself.

OOAD and design patterns

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

Object – oriented three features: encapsulation, inheritance, polymorphism.

Five basic principles (SOLID principle), single responsibility principle, open and closed principle, Richter’s replacement principle, dependency inversion principle, interface separation principle

There are 23 design patterns: the most common are factory, singleton, adapter, bridge, composite, agent, command, observer, policy, state pattern, and so on.

4.APP architecture design

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

Soft skills

If you want to be a senior executive, it is not enough to have technical depth. You also need to master many soft skills and pay attention to the training of comprehensive professional quality. There are many people at the beginning of the lack of attention, in the process of rising in the second half of the career, easy to encounter bottlenecks.

Here is my personal summary of the soft skills that advanced programmers must have for your reference.

1. Quick learning ability

Including the depth and breadth of technology, can constantly explore new technology, continuous learning.

2. Communication skills

Strengthen the ability of expression, reading and writing, even in today’s advanced technology will never go out of style. Because any kind of communication in the enterprise is very necessary.

3. Team work ability

It’s easy for developers to get stuck in an isolated interpersonal situation, but development can never be done alone, and only when a member is truly integrated into the team and can communicate and collaborate with other colleagues can they show their true value and are more likely to be promoted in the future.

4. Time management skills

Using the Four-quadrant Rule of time management, you can plan ahead by focusing your energy and time on important, but not urgent, tasks.

5. Influence

Business influence on the one hand, technology influence on the other. Among them, the ways to improve the influence of technology include: more participation in technology sharing, summary and dissemination of accumulated knowledge; Participate in the review of technical solutions and share technical experience; Help new students solve technical problems; Share on blogs, Github, StackOverflow, etc.

6. Document writing ability

Code comments. Many programmers write too few comments, or too many, which are not appropriate. Refer to the annotation specification of open source projects.

Prepare technical design documents. Including flow charts, class diagrams, functional sequence diagrams and so on.

Another book I recommend: Soft Skills: A Survival Guide Beyond Code

The last

I have always been in the habit of preparing to jump out of the comfort zone at any time. Maybe the job applicant is satisfied with the current job, the salary, and feels accustomed and comfortable.

But if the company suddenly goes out of business, or the department is cut, will this or a better job be available?

I suggest that you study the interview questions, know the latest technology, interview with one or two companies every three months, because you already have a good job, so you can go to the interview with a relaxed mind, but also to gain experience in the interview.

I would like to share with you the recent compilation of the first-line Internet company interview questions + analysis, about three months of sorting, 2246 pages, free to share with you, to help you learn and progress.

Due to the space limitation, the detailed information of the document is too comprehensive, too many details, so only part of the knowledge point screenshots out of the rough introduction, each small node has more detailed content! Here are some screenshots:

If there are friends who need to obtain information documents, you can go to my【Github】Read and download.