preface
The author was admitted to Huazhong University of Science and Technology majoring in Computer Science and Technology in 2016.
At the end of 2017 (winter vacation of sophomore year), I got the Offer of Android development intern of Toutiao (Bytedance) Shenzhen R&D Center, and worked as an intern in Shenzhen R&D Center until March 2018.
He joined the newly established Toutiao Wuhan R&D Center as an intern in April 2018 and left in May 2019.
Received summer internship offers from Tencent (wechat) and Ant Financial (Alipay) in spring recruitment in 2019, and joined wechat as an intern in July 2019.
Received offers from ByteDance SSP (Tiktok), wechat (transferred to full-time) and Ape Tutoring SP (Zebra English) in autumn recruitment in 2019. Finally, I chose to stay in wechat and now I have transferred to full-time.
During my four years in college, I have four years of Android development experience, two and a half years of internship experience, and two Google Play apps. The most important thing is that I finally got my satisfactory Offer, which can be regarded as a complete end to my college life.
The purpose of writing this article is to summarize my four years in college. 2 it is to have a goal of the students like me some reference and advice (including is practical for fresh graduates face the), the hope can give you some help, read this article hopes to achieve their goals or you can also further, on the way to pursue higher goals is to make some small contribution.
Technical learning and personal growth
The experience of four years in university is very long, which cannot be clearly expressed in a few words. Each person is at different stages and may be interested in different contents. In this article, I will focus on sharing the importance of basic knowledge and how to learn.
Basic knowledge mainly refers to some basic and general knowledge in computer science, including computer composition principle, algorithm and data structure, operating system, computer network and others such as C language, assembly, database, computer system structure, compilation principle and so on.
Can be found that these are for the computer professional courses, a specific school, the school will be according to different emphasis on open several electricity, electricity and other wide at the bottom of the course or game development, object-oriented programming, such as the upper course, this part of the course can choose according to interest in deep level, priority will be lower than these in front of the general course.
When asked how much effort I should put into learning the basics, MY answer is usually “learning to death.” The importance of basic knowledge can be reflected in the following aspects:
Basic knowledge determines learning ability and depth
The entire computer knowledge system is actually much like a layered model in a computer network, where each layer only focuses on what this layer should do, developing on the basis of the abstraction provided by the lower layer and providing the abstract interface for the higher layer.
This is like a snowball process. A full understanding of existing knowledge can help you to consolidate and deepen your existing knowledge while learning new knowledge more easily. Eventually, the snowball will roll faster and bigger.
The learning curve of computer is a curve that starts slowly and then speeds up continuously until it reaches the limit of one’s understanding ability. The learning speed and understanding ability of students with solid basic knowledge will be far beyond those with weak basic knowledge, opening an increasingly large gap.
Greater learning ability can lead to deeper technical depth, but the impact of basic knowledge on technical depth does not stop there.
For Android development:
Part of the technical depth is reflected in the understanding of the bottom layer of the Android system. Only by understanding the bottom operation can we have a more comprehensive understanding of the behavior of the application, solve some problems that are difficult to understand at the application level, and carry out targeted performance optimization according to the underlying principles. The underlying layer of Android is what we know as Linux, and the operating system knowledge is perfectly applicable here, as is the basic knowledge required to understand the application’s runtime environment, the JVM, and how it runs our application code and optimizes it.
Another part of technical depth can be reflected in the ability to design software architecture. The design concepts and principles in operating system, computer network, database system and other courses are very classic and excellent, and the study of these system design can subtly improve our software design ability. When I read the code for processing input events in the source code of the Android system, I suddenly found that this is the design of THE CPU pipeline in the composition principle. Later I came to wechat and found a similar design in the code, which is the charm of excellent design.
The basics are the most important thing in an interview
In the interviews I have experienced, the more demanding the company/position is, the more emphasis is placed on the examination of basic knowledge. What many people don’t understand is that the basic knowledge is known to be tested, and the questions are the same. Why do these interviewers keep asking these questions?
For every new college graduate who wants to work in development, whether or not he or she is in a class, a general knowledge of the basics must be the best measure of how well he or she has mastered computer science in college. One is that everyone will learn, and there will be no situation where they just ask for directions that they have not touched before. Second, it is very easy to distinguish the real level from the investigation of basic knowledge. Although there are only a few problems on the Internet, the degree of mastering basic knowledge depends more on the mutual verification and deepening of different knowledge mentioned above.
“The difference between processes and threads, for example,” operating system is a very classic interview questions, a lot of people can easily carry out the standard answer: “the process is the basic unit of the operating system resources allocation, and thread is the basic unit of the task scheduling and execution”, but the further step to ask “what operating system process for the distribution resources?” “, “Why and how do operating systems schedule threads?” “That’s not something most people can answer, not to mention interviewers can dig deeper until they know the limits of a candidate’s knowledge.
In order to screen the basic knowledge of the interviewees in advance and save the investment in the interview, now each big factory will conduct a written test for investigation, and it is very popular to conduct cross-interview, so that the interviewers who are not in this direction can investigate the general ability. Facts have proved that the interviewees with solid basic knowledge will be very easy to get the praise of the interviewer, and the pass rate is often very high. After all, language and specific development direction can be learned slowly after working, but the basic knowledge must be learned in the university. Knowing this, how can we not pay attention to the study of basic knowledge in college?
How do you learn the basics
This is the first step to learning: understand why you are learning, so that you don’t feel confused and shaken in the process. I’d like to share some of the generalizations I’ve made about the technology over the years, along with my own notes on what it takes to be a senior Android developer.
Advanced UI
The UI piece of knowledge is the most widely used today. That year the popular Android training, learn this small piece of knowledge can casually find a good job.
But obviously now is far from enough, refused to endless CV, personally to project combat, read the source code, research principle!
“Framework Refined Kernel Analysis”
The main contents include:
- In-depth analysis of Binder
- Parsing Handler in depth
- Dalvik VM process system
- Parse WMS in depth
- PackagerManagerService
“360° All-round Performance Tuning”
The content mainly includes the following points:
1. Design ideas and code quality optimization
2. Program performance optimization
- Optimization of startup speed and execution efficiency
- Layout detection and optimization
- Memory optimization
- Optimize the power consumption
- Network transmission and data storage optimization
- APK size optimization
3. Optimization of development efficiency
- Git, a distributed version control system
- Automated build system Gradle
4. Actual project combat
- startup
- fluency
- The practice of Douyin in APK packet size resource optimization
- Youku responsive layout technology full analysis
- Network optimization
- Mobile Taobao Double 11 performance optimization project revealed
- Autonavi APP full link source code dependency analysis
- Complete the OOM experience sharing
- Wechat Android terminal memory optimization practice
Android Third-party Frameworks
Content of this article (1042 pages)
- Thermal repair design
- pluggable
- Component frame design
- Image loading frame
- Network Request Framework
- RXJava responsive programming framework design
- IOC Architecture Design
- Android architecture component Jetpack
NDK Module Development
The NDK is a native development kit that allows Android to use C/C++ code and provides numerous platform libraries.
The main contents include:
- NDK module development
- JNI module
- Native development tools
- Linux programming
- Underlying image processing
- Audio and Video development
- Machine learning
Jetpack Architectural Components from Beginner to Master
- Android Jetpack – Navigation
- Android Jetpack – Data Binding
- Android Jetpack – ViewModel & LiveData
- Android Jetpack – Room
- Android Jetpack – Paging
- Android Jetpack – WorkManger
- Lifecycle for Android Jetpack architecture components
- Jetpack Compose for Android
Advancements in Flutter Technology
- Overview of Flutter cross-platform development
- Build Flutter development environment in Windows
- Write your first Flutter APP
- Introduction to the Flutter Dart language System
2020 Big Factory Interview
One, picture two, network and security mechanism three, database four, plug-in, modular, component, hot repair, incremental update, Gradle five, architecture design and design mode six, performance optimization seven, Android Framework eight, Android excellent tripartite library source code
All materials have been uploaded to the open source project“Lot”Help yourself to a friend in need.
Have a problem
For these basic knowledge learning process is not easy, often can not understand the knowledge point, my habit is generally will skip these points, some knowledge points arrangement problems will lead to the explanation of the concept in advance, see behind and then come back to understand the nature; Other books about was true enough meticulous, more direct way is to direct search related articles, blogs, problems such as help understand (some specific to speak in a technical details of the article will be much more detailed than the book), a bit of trouble is to look for other books corresponding parts do reference, if you haven’t find the answer, I don’t think the question of large probability is really important. Sometimes it’s a waste to pay too much attention to details.
On the one hand, you can skip over what you don’t understand for the time being. On the other hand, if you still feel foggy after finishing a book and don’t understand the content of this course completely, you can never stop there. You can learn another course for a period of time and then come back to read it carefully, or just change a book and continue learning. Again, the basics are worth dying to learn.
The last
Finally finally, or to emphasize that “the body is the capital of the revolution” this sentence, the health of the body is the premise of all this, the loss of health means that life has changed the direction, most of the previous efforts will be burned, which is the vast majority of people can not afford.
Easy to know is difficult to do.