Self-study Android, how long can I join ByteDance?

Before answering self-study Android, how long can you learn to join Bytedance, we first need to understand the job requirements to join Bytedance. The picture below is the job description of today's headline Android engineer selected from boss direct employment.
Job Requirements

If I became a little white. I want to learn Android by myself and I want to find a job. I estimate that it will take 6 months. The prerequisite is that I am in a state of efficient learning every day and I study at least 12 hours a day.

Even so, I'm sure that the job I found will not be too good, and I can barely make ends meet. After all, it is a zero-based entry. If you want to go further and truly become an indispensable senior Android engineer, it will take longer, two, three, five years, until the day of baldness. Thinking about it, I felt it necessary to prepare for that day in case of emergency.

  • 1. Proficiency in Java language, in-depth understanding of language features; Proficiency in Android Studio or other development environments;
  • 2. Familiar with Android Sdk, Framework, basic components, and have a certain understanding of important system characteristics and principles;
  • 3. Be able to use commonly used third-party libraries and basic components, and have a certain understanding of their characteristics and implementation principles;
  • 4. Understand design patterns such as MVC/MVP/MVVM, and be familiar with object-oriented thinking and related design patterns;
  • 5. Understand commonly used Debug tools and methods, and be proficient in exception handling mechanisms;
  • 6. Love technology, be able to learn quickly, and always keep technology updated;
  • 7. Focus on the business and have curiosity about the product, which is related to the user experience;
  • 8. Those with Kotlin development experience are preferred, and those with independent development of product-level APP experience are preferred;

1. Proficient in Java language, in-depth understanding of language features; proficient in Android Studio or other development environments

Android application development is based on the Java language, so a solid basic knowledge of Java is required. Let's start with the first point of proficiency in the Java language, in-depth understanding of language features, and expand the explanation:
first familiar with the basic grammar of java, and then familiar with the design patterns.
a) Java basic grammar: see the following "Java Knowledge Point List"
b) Design pattern: Since a large number of design patterns are used in the framework layer of the Android system, without this knowledge, the understanding of Android will be great discount.

Java basics

  • Java Object class methods
  • HashMap principle, Hash conflict, concurrent collection, thread-safe collection and implementation principle
  • The difference between HashMap and HashTable
  • HashCode function, how to overload the hashCode method
  • Difference and connection between ArrayList and LinkList
  • GC mechanism
  • Java reflection mechanism, Java proxy mode
  • Java generics
  • Synchronized principle
  • Volatile implementation principle
  • The meaning and difference of method lock, object lock and class lock
  • Methods of thread synchronization: Synchronized, lock, reentrantLock analysis
  • Types of Java locks: fair locks, optimistic locks, mutex locks, segmented locks, biased locks, spin locks, etc.
  • Principle and usage of ThreadLocal
  • Usage and examples of ThreadPool
  • The difference between wait() and sleep()

Java Advanced

  • Java virtual machine, Java operation, Java GC mechanism (reachability analysis method, reference counting method)
  • The complete life cycle of Java objects
  • JVM memory model
  • Inter-process communication, inter-thread communication
  • JVM class loading mechanism
  • Java reference types
  • Design patterns: In addition to common design patterns, special, reflection mechanisms, and proxy patterns
  • HTTP protocol and HTTPS protocol
  • Socket protocol, Socket realizes long connection
  • TCP and UDP protocol
  • The concrete realization of GET and POST in HTTP protocol
  • Serialization and deserialization
  • The realization principle of thread pool
  • Basic knowledge of database: multi-table query, index, database transaction

The design pattern is based on six principles :

  • Principle of opening and closing : A software entity such as class, module and function should be closed for modification and open for extension.
  • Single responsibility principle : A class only does one thing, and a class should have only one reason for its modification.
  • Richter's substitution principle : subclasses should be able to completely replace the parent class. That is to say, when using inheritance, only extend new functions, and do not destroy the original functions of the parent class.
  • Rely on the principle of inversion : details should depend on abstraction, and abstraction should not depend on details. Put the abstraction layer at the high-level of the program design and keep it stable, and the details of the program are changed by the low-level implementation layer.
  • Dimit's rule : also known as the "least-know principle", a class should not know the details of the class that it operates, in other words, only talk to friends, not friends of friends.
  • Interface isolation principle : The client should not rely on interfaces it does not need. If some methods of an interface are implemented by the client due to redundancy, the interface should be split so that the implementation class only needs to rely on the interface methods it needs.

Familiar with Android Studio or other development environments

2. Familiar with Android Sdk, Framework, basic components, and have a certain understanding of important system features and principles

The goals of the SDK can be summarized as follows: concise, stable, and efficient.
concise

For users, a good product should be simple and easy to use, and should not allow them to spend too much time learning. The same is true for the SDK. It should not have complicated and tedious docking work. Users can do the docking of the SDK in a very small amount of time by reading the code and documentation.

Stability From the
perspective of SDK users, we expect third-party SDK services to be stable and efficient, which is reflected in providing stable and reliable services and efficient runtime performance. This requires us to do the following as much as possible when designing and implementing the SDK:

  • Provide stable API externally. Once the API of the SDK is determined, unless special circumstances cannot be changed, the cost for the provider to change the API is very high.
  • Provide stable business externally. After providing a stable API, there must be a stable business as support. Stability during operation. Ensure that the SDK itself runs stably, and the host application cannot be unstable due to SDK access.
  • Version is stable and updated. SDK version iteration is very slow, and it is necessary to shield users as much as possible to avoid unnecessary adaptation costs.

Efficient

Whether it is ordinary application development or SDK development, performance issues should be considered. SDK designers should focus on the following issues:

  • Less memory usage. Generally, the SDK and App run in the same process. At this time, the SDK must manage its own memory, allocate it reasonably, and pay attention to release.
  • Less memory jitter. Under the premise of occupying less memory, SDK designers must reduce the memory jitter problem caused by frequent GC.
  • Less power consumption. It is difficult to make a trade-off between low power consumption and high performance, which can be considered from the perspective of CPU calculation and screen refresh frame rate.

How to learn Android Framework

  • 1. In-depth analysis of Binder
    Binder mechanism as a means of inter-process communication, basically runs through all the andorid framework layers. So we must first understand the basic communication mechanism of Android Binder.
  • 2. In-depth analysis of Handler
    Message source code analysis, and then to MessageQueue source code analysis, Looper source code analysis, handler source code analysis, Handler mechanism realization principle, is not only a common interview test, but also a necessary skill for work.
  • 3. Dalvik VM process system
    Andorid system startup, init process, Zygote, SystemServer startup process, application creation and use, Activity creation, destruction Handler and Looper.
  • 4. In-depth analysis
    of the working principle of the WMS window management frame system animation frame View.
  • 5. PackagerManagerService
    package management service. Resource management related classes

Android Framework refined kernel analysis
If you need the complete documentation of the AndroidFramework development notes, click me to get the information for free!

3. Be able to use commonly used third-party libraries and basic components, and have a certain understanding of their characteristics and implementation principles

With the continuous development of Internet companies, there are more and more modules in product projects, and user experience requirements are getting higher and higher. It is becoming more and more difficult to achieve the purpose of fast running in small steps and rapid iteration. There is also 65535. The application of plug-in technology is born for problems such as the mutual calling of each other. If there is no plug-in technology, the applications that integrate a large number of "app" such as Meituan and Taobao may be as big as a few g.

Therefore, today's Android mobile development will not be hot-fixed, plug-in, and componentized, and more than 80% of the interviews will not pass.

Android hot fix framework, plug-in framework, component framework, image loading framework, network access framework, RxJava responsive programming framework, IOC dependency injection framework, recent architecture component Jetpack and other Android third-party open source frameworks, only will master these Android first Three-party framework, and have a certain understanding of its characteristics and implementation principles, I believe you are one step away from the Bytedance interview!

Advanced Android componentization and plug-in enhancement actual combat manual
If you need advanced Android componentization and plug-in enhancement of the actual combat manual, click me to get the information for free!

4. Understand design patterns such as MVC/MVP/MVVM, and be familiar with object-oriented thinking and related design patterns

MVC, MVP, and MVVM are more important parts of our work and interviews, but many times we are a little confused. For example, after reading many articles, I can’t figure out what MVC is. I originally wanted to write an MVP and just wrote it and became MVC. What is the shameful relationship between Databing and MVVM?

MVC
may be due to the rise of MVP and MVVM, the application of MVC in android has become less and less, but MVC is the foundation, and a good understanding of MVC can better understand MVP and MVVM. Because the latter two are developed based on MVC.
1. MVC dazzling design drawings

When we search for mvc related information from the Internet, if you read a few more articles, you may find that the design drawings they introduced are not the same. Most of the design drawings are listed here.

2. MVC design drawing explanation

Which of the design drawings listed above is correct? In fact, they are all right. Why do you say that? It starts with the development of mvc. The MVC framework pattern was first proposed by Trygve Reenskaug on the Smalltalk-80 system in 1978. After so many years of development, different versions will of course evolve, but the core remains unchanged and still the three-layer model Model-View-Control.

MVP

1. MVP description

MVP is very similar to MVC. There are many design drawings of MVC listed at the beginning of the article. Therefore, according to the development of MVC, it is not an exaggeration to regard MVP as MVC, because MVP is also three-tier, and the only difference is Model and No communication between Views is done through Presenter. When I introduced MVC earlier, I mentioned it as a fatal flaw. Due to the existence of activity (god object) in Android, it is difficult to completely decouple Controller and View. But this problem can be solved well in MVP. Look at the design drawing of MVP:

Under normal circumstances, these two.
MVVM

1. MVVM description

In MVP, we said that with the increase of business logic and many changes in the UI, there will be a lot of UI-related cases, which will cause the View interface to be very large. MVVM solves this problem. Through the two-way binding mechanism, data and UI content are realized. As long as you want to change one of them, the other can be updated in time. This saves a lot of writing in the View layer. In many cases, you only need to change the data. First look at the MVVM design drawing:

Under normal circumstances, in these two cases, this seems to be the same as MVP. In fact, the difference is quite big. In MVP, View and presenter must hold each other to facilitate calling each other. In MVP, View and ViewModel pass Binding. For association, their previous association processing is completed through DataBinding.

5. Understand commonly used Debug tools and methods, and be proficient in exception handling mechanisms

Android Studio debugging skills you need to master

6、Kotlin

Google started to take the "Kotlin First" route a few years ago. At present, many official documents and demos use Kotlin as the default language. The importance of Kotlin is self-evident.

Google also officially published a "Refactoring to Kotlin" tutorial, which is introduced as follows:

This Codelab is suitable for any developer who uses Java and is considering migrating their projects to Kotlin. We will start with several Java classes and guide you to convert them to Kotlin using the IDE. Next, we will review the converted code and study how to improve it to make it more in line with usage habits while avoiding common mistakes

Data Structures and Algorithms

1.1.1 What are the commonly used data structures?
1.1.2 Array
(1). How to find the missing number in an integer array from 1 to 100

Related knowledge points: [array](javascript: void(0))[mathematics](javascript: void(0))[bit operation](javascript: void(0))

Related knowledge points: [array](javascript: void(0))[mathematics](javascript: void(0))[bit operation](javascript: void(0))?
(2). How to set the integer array ( Xiaomi )
(3). How to find the maximum and minimum values in an unsorted integer array? ( byte beating )
(4). How to remove multiple copies from a given array in Java?
( 5). Add large numbers (today's headline)

1.1.3 Linked list
(1). What about the first query and the second to last query? (This is not the case, the first directly to the head node, the penultimate need to first start the countdown from the query, take two steps) ( Tencent )
(2) .arrayList underlying principle ( bit byte beating )
(3). How to find the median value of a single linked list in one traversal ? ( Ping An of China )
(4). How to prove whether a given linked list contains cycles? How to find the head node of the cycle? (Youku)
(5). Two A cross- linked singly linked list , find the cross point ( Huawei )
(6). How to get the length of the singly linked list ? 360
(7). How to reverse the singly linked list without using recursion? ( Xiaomi / Meituan )
(8) . how to determine the list have a ring ? ( Didi )
1.1.4 Queue & Stack
(1). How to use the stack to realize the function of the queue ? (Guangzhou Lychee FM)
(2). Two stacks to achieve a queue ( Mushroom Street )
(3). Two queues to achieve a stack ( Tencent )
(4). Compare queues and stacks, and their bottom implementation ( Tencent )

1.1.5 Binary tree
(1). How to perform pre-order traversal in a given binary tree? ( Baidu )
(2). How to implement post-order traversal algorithm? ( Baidu )
(3). How to perform dichotomy in a given array Search? ( Suning )
(4). It is known that the preorder traversal is {1,2,4,7,3,5,6,8}, and the middle order traversal is {4,7,2,1,5,3, 8,6}, what is its binary tree like? 58
(5). Input two binary trees A and B, and judge whether B is a substructure of A. ( Iqiyi )
(6). Please implement two functions for serializing binary trees and deserializing binary trees . (YY)
(7). The difference between a balanced binary tree and a red-black tree ? ( Byte beating )
(8). What is a balanced binary tree and what are its characteristics ( Meituan )
(9). B tree, B+ tree

1.1.6 HashMap
(1). What is the underlying principle of HashMap ? Is it thread safe? ( Baidu US group )
how (2) .HashMap is put in to achieve? ( Didi )
(3). Talk about when the hashMap needs to be expanded, and how is the expansion resize() achieved?
(4). What is hash collision? How to solve? ( Didi US group )
(5) .HashMap and the difference between the HashTable ( millet )
(6) .HashMap in when the need for expansion, expansion resize () is how to achieve? ( Drops )
(7) .hashmap ConcurrentHashMap principles ( US group )
(8) .arraylist and hashmap difference, why take a few fast? ( Byte beating )
1.1.7 Figure
(1). Rotate the output matrix
(2). Given a matrix int matrixA [m] [n], each row and each column are in increasing order, and an algorithm is implemented to find the matrix Element. Sogou

1.1.8 What are the sorting algorithms ?
(1) .top-k sorting (heap sort , bitmap method) ( US group )
(2). Bubble sort handwriting (Chinese Jieai Mi)
(3). Heap sort algorithm handwriting (Chinese Jieai Mi)
(4). There are two race tracks in the oval field, which can provide two horse races at the same time. After the two horses race, you can know which horse is running fast, but there is no timing tool. Question, how to use the optimal algorithm (least number of matches) to know the fastest three horses (Ali) among the 10 horses
(5). Input an integer unordered array, and the method of sorting the heap makes the array ordered ( Ali)
(6). how to use the fast sort algorithm for integer array sort ? ( CVTE )
1.1.9 lookup algorithm
(1). binary search algorithm is an ordered array ( Baidu )
1.1.10 string
(1). given a String, please find out the length of the longest substring without repeated characters. (Byte jitter )
(2) Given a string s, find the longest palindrome substring in s. You can assume that the maximum length of s is 1000.
1.1.11 Please write the following algorithm time complexity of
bubble sort method insertion sort HEAP sort method binary tree sort method
1.1.12 other algorithms
(1) commonly used symmetric encryption algorithm , what is the same? ( Byte jumping )
(2). How to find out if there is a combination of two numbers that is the target in an unordered (with negative numbers) array, twoSum(); (byte)

Full version data structure and algorithm PDF analysis

This article has been included in the open source project: https://github.com/Android-Alvin/Android-LearningNotes , which contains self-learning programming routes in different directions, interview questions/faces, and a series of technical articles. The resources are continuously updated …

Guess you like

Origin blog.csdn.net/weixin_43901866/article/details/112533028