In the senior engineer stage, you must have some irreplaceability, whether it is programming ability or management ability. You are usually responsible for the pre-research of new technologies, the promotion of important requirements, and the technical selection of new projects.
You spend more time solving things that others can’t solve, trying solutions that the industry hasn’t tried yet, and helping other engineers grow.
At this stage, the programming language is no longer important, and all choices are for the better development of the business. There are also more things to consider outside of the code.
After working for 3-5 years, some talented and lucky developer can become senior engineers. Everyone’s development path may be different, but these senior engineers all share some of the same characteristics:
Not tied to one programming language
For Android engineers, Java may have been preconceived. but understand that since you can learn Java, you can learn any other programming language. A language is a tool, and there are certain useful tools for doing different things. Excellent engineers usually take the initiative to pay attention to the development and application of other languages. If they are really used in their work, they have already started.
Think from a higher dimension
Senior engineers will not only think at the level of coding,excellent engineers will think about requirements at the business level, and even at the level of product architecture. For example, when a new requirement come, due to the familiarity with the business, it may be considered whether the requirement will conflict with other businesses. Or assessing whether a requirement breaks business rules, these ideas often avoid many online problems in advance.
Learn to think in a higher dimension, think more deeply about everything, and map ideas into code implementation. You will find that the project is getting easier and easier, and the changes to the code will be smaller and smaller due to new requirements, and the development efficiency will be higher and higher.
Think from someone else’s point of view
Think more from the perspective of others, and don’t always take your own ideas too seriously. Don’t think you’re always right, don’t be too quick to deny others, and don’t be too stubborn. There may be many solutions to the same requirement, and the one you insist on is not necessarily the best. Try to think from someone else’s point of view, why do others propose different solutions from you? Is your plan more in line with your own interests? Are you giving in first for a common goal? Think about similar issues more often, and future communication may be smoother.
Technology is to serve business
Senior engineers don’t show off their skills, and they don’t learn complex and hard-to-maintain code. Understand that technology is used to serve business, and then talk about technology first. Don’t think that the functions required by the business cannot be achieved by using a certain framework, and the business requirements are unreasonable. Think more about whether you have chosen the wrong framework because you did not consider the future direction of business development in advance?
Technology without business support actually has no meaning. I remember that I spent a lot of energy in a company a few years ago and designed a new architecture for a new project. All the frameworks were the latest at that time, but I did not consider the overall capabilities of the team. It took everyone a good time to understand the project architecture. For a few days, the development efficiency is not very high. In the end, the project was unsuccessful, and the new architecture was useless. The new project still uses the architecture of the old project because of its high development efficiency. Code that actually proves to be able to quickly complete business development is good code, and code with advanced and beautiful concepts may be useless code.
But it is easy to say that many people do not have the idea of becoming a senior engineer, but suffer from lack of access, lack of a learning route that suits them, and lack of their own systematic knowledge structure. The situation, or obviously the technology is sufficient, the salary is not satisfactory.
The core reason for this is the fragmentation of the knowledge system!
Due to the lack of specific learning routes and ideas , the knowledge learned is completely forgotten after a period of time. The fundamental reason is that the knowledge cannot be connected in series. Ultimately, the mastered skills cannot be applied to actual projects, and promotion and high salary will then farther and farther away from you
Android related technology for a senior engineer for your reference
01. Android essential underlying technology:
Java serialization: Serializable principle, Parcelable interface principle, Json, XML
Annotations, generics and reflection: custom annotations, use of annotations, generic erasure mechanism, generic boundaries, Java methods and Arm instructions, Method reflection source code, invoke method execution principle
Virtual machine: JVM garbage collector mechanism, JVM memory allocation strategy, the difference between Android virtual machine and JVM bottom layer, the underlying Odex local instruction cache mechanism of virtual machine, how virtual machine loads class and object respectively, virtual machine class loading model
Concurrency: Java thread essence explanation, thread principle, thread communication, UnSafe class, thread pool
Compile-time technology: OOP aspect-oriented AspectJ, bytecode scalpel JavaSSit combat, bytecode instrumentation technology (ASM) combat
Dynamic proxy: The principle of dynamic proxy implementation, dynamic splicing of Class bytecode analysis when dynamic proxy is running in a virtual machine, and the process of generating bytecode by ProxyGenerator
Advanced data structures and algorithms: HashMap source code, ArrayList source code, sorting algorithm
Java IO: Java IO system, IO file operation
Binder: Linux memory foundation, Binder four-layer source code analysis, Binder mechanism, Binder process communication principle
Handler: Loop message pump mechanism, Message parsing
Zygote: init process and Zygote process, Zygote startup process, Socket communication mode, APP startup process
AMS: ActivityThread source code analysis, AMS and ActivityThread communication principle, Activity startup mechanism
PMS: PMS source code, APK installation process analysis, PMS analysis principle of installation package
WMS: PhoneWindow instantiation process, DecorView creation process, ViewRootImpl rendering mechanism
03.Android common components:
Activty: Activity management stack and Activity startup mode, Activity life cycle source code analysis
Fragment: In-depth explanation of Fragment life cycle, detailed explanation of Fragment transaction management mechanism, and performance optimization related solutions
Service: Analysis of Service startup mode, Service management and communication scheme, detailed explanation of the bottom layer of Service life cycle
04. Advanced UI:
UI drawing principle: what is done under the setContentView() method, the difference between AppCompatActivity and Activity, UI measurement, layout, and the underlying execution process of drawing
Plug-in skinning: LayoutInflater loading layout analysis, Android resource loading mechanism, Resource and AssetManager
Principle of event distribution mechanism: event execution U-shaped chain and L-shaped chain, event interception principle
Property animation: VSYNC refresh mechanism, ObjectAnimator and ValueAnimator source code explanation, Android property animation: interpolator and estimator
RecycleView: detailed explanation of layout manager LayoutManager, design idea of recycling pool, principle of adapter mode
Lifecycle: Lifecycle source code, Lifecycle high-level application
ViewModel: ViewModel source code, ViewModel application skills
LiveData: LiveData source code
Navigation: Navigation source code
Room: Room source code, Room+LiveData monitor database data changes and refresh page principles
DataBinding: One-way binding, two-way binding, how to use with RecyclerView, underlying principle
06. Performance optimization:
Startup optimization: system startup principle, Trace tool analysis startup stuck, class rearrangement mechanism, resource file rearrangement mechanism
UI rendering optimization: UI level specification and impact on UI loading, UI stuck causes and repairs, UI drawing, layout, measurement reasons and solutions
Caton optimization: analysis of causes of stuck, memory jitter and GC recycling, recycling algorithm
Power consumption optimization
Crash optimization: project crash exception capture, elegant exception handling solution, how to avoid exception pop-ups
Security optimization: APP reinforcement implementation (anti-decompilation, dex reinforcement), https anti-capture mechanism (data transmission and loading, client-server two-way encryption verification)
Network optimization: serializable principle, parcelable interface principle, http and https principle detailed explanation, protbuffer network IO detailed explanation, gzip compression scheme
Large image loading optimization: principle analysis of Glide giant image loading mechanism, large image multi-level cache implementation scheme
Multi-threaded concurrency optimization
Storage optimization: Android file system-sdcard and memory storage, Shared Preference principle, MMAP memory mapping
Installation package optimization: shrinkResources to remove useless resources, reasonable setting of multiple languages, webp to achieve image reduction, reasonable configuration of armable-v7 so library, Lint inspection tool practice
07. Audio and video:
C/C++: data types, arrays, memory layout, pointers, functions, preprocessors, structures, unions, containers, type conversions, exceptions, file stream operations, threads
H.265/H.265: audio and video format encapsulation principle, coding principle, assembly principle of video stream H264 slice NAL unit, video stream H264 stream analysis, slice and macro fast, motion vector, source encoder, high frequency filter , Inter-frame splitting and intra-frame prediction, CTU, PU TU coding structure, DSP chip decoding process, MediaPlayer and DSP chip interaction mechanism, screen projection structure, MediaProjection and MediaCodec interaction mechanism, H265 code stream exchange
MediaCodec: dsp chip, life cycle of codec, design idea of input queue and parsing queue in decoder, smooth decoding analysis in MediaCodec, multiplexing of MediaExtractor, MediaMuxer synthesizer, MediaFormat format
Audio and video clips: video clips, audio clips, audio synthesis, audio spectrum display, video playback
Live audio and video: hard coding, soft coding, native rtmp push streaming, camera preview frame encoding NV21 to YUV, video image encapsulation and splicing Packet package, audio stream data splicing Packet package, RtmpDump real-time synchronously sending audio and video data, MediaProjection, Medicodec encoding H264 stream, rtmp push stream
OpenGL and audio and video decoding: OpenGL drawing process, matrix, Opencv detailed explanation, face recognition effect realization
OpenGL special effects: detailed explanation of CPU and GPU operation mechanism, world coordinates, layout coordinates, and FBO coordinate system, image mirroring and rotation processing, face positioning and key point positioning, big eye effect, sticker effect, beauty effect
FFmpeg universal player: FFmpeg structure, sound playback principle, Surface rendering, pixel rendering principle and alignment mechanism, audio and video synchronization principle, overall architecture of video player
Webrtc audio and video calls: WebRtc server environment construction and Webrtc compilation, 1v1 video call implementation plan, group chat video call implementation ideas, many-to-many video conference implementation, 1V1 audio and video call implementation
08. Principle of open source framework:
Componentization, plug-in, hot repair, etc.
Gradle Android Plugin Configuration
Gradle practice and more
UI custom controls, etc.