android input method! 200 real questions for Android interviews, one article will help you answer

Cause

The thing is like this.

When I graduated 4 years ago, I stayed in the company's short video project and made videos. That would be done earlier than Douyin, but the project was shut down by the company because the short video was too expensive. At that time, I needed to develop a live/asynchronous video scene with horizontal and vertical screens. I studied the apps on the market and found that the interaction of input barrage was not friendly. The most direct experience is that WeChat is more smooth than most IM software when the input method and emoji panel are frequently switched in the chat scene, and it does not give users a very abrupt flicker. But in addition to adapting to the vertical screen, we also need to be compatible with scenes such as horizontal screen/full screen/immersion.

After groping for a while, the result is quite good, better than the input interaction experience in the live broadcast/asynchronous video playback scene on the market. So I wrote a recorded Blog Android -SystemUI about that. Mainly how to design a good input interaction in the horizontal and vertical screen straight/on-demand scene. But the article is not finished... I left the suspense of using PopupWindow in landscape mode... I planned to continue writing the second article. As a result, it was delayed for three years.

In the past three years, I have participated in the development of more than a dozen projects (we are assembly line production, old tool people), and modules related to input interaction have IM chat, live room, asynchronous video playback page, information flow comments, etc. Wait. These pages have evolved from being originally implemented with Activity to being replaced by Fragment, Dialog, and PopupWindow. So it turns out that the technical realization can no longer be satisfied. Under the premise of finding no results for external open source projects/technical blog posts, I slowly accumulated a library

primary

The definition of a junior R&D engineer is to master basic Android knowledge and be able to complete a function independently. The working life is about 1-2 years. Most people at this level can quickly reach this level by reading some books and project exercises. People at this level often need to master the following skills:

  • Grasp the knowledge of the four major components of Android, and have an in-depth understanding of the relevant life cycle. You must also master the common development knowledge of Application, Fragment, and Intent.
  • Master the attributes and usage of Android basic layout and controls. Commonly used layouts include LinearLayout, RelativeLayout, ConstraintLayout, etc., and controls include-TextView, ImageView, RecyclerView, ScrollView, etc.
  • Have a basic understanding of Android's resource access and use, and understand Android's adaptation principles for different countries, languages, screens, and APIs.
  • Master the use of android system services and tools, and have a basic understanding of network access and database operations.
  • Familiar with R&D tools, such as IDE, simulator, network agent, log, etc.

intermediate

My definition of intermediate engineers is to be able to complete function research and development proficiently, but also need to master some principles of common open source libraries, and imitate open source libraries to build wheels to practice. Most of the people at this stage have worked for 3-5 years and are proficient in business development. Any problem can be solved. People at this level often need to have the following skills:

  • Familiar with SOLID basic design principles and master 23 design modes.
  • Have a deep understanding of the development language features of java/kotlin, such as reflection, dynamic proxy, apt, etc.
  • Have a basic understanding of the Android architecture, and an in-depth understanding of the apk structure and packaging principles.
  • Have a basic understanding of the features of each version of Android, such as MD design, permission management, doze mode, etc.
  • Familiar with various R&D debugging tools, such as git, gradle, mat, layout inspector, etc.
  • Grasp the principle of Handler\AsyncTask, and be familiar with multi-threaded development.
  • Have a preliminary understanding of the principle of drawing pages, and be able to implement a complex custom control.
  • Be able to master the use of open source libraries, such as image libraries (Glide\Fresco), network libraries (Volley\okhttp\Retrofit), tools (Dagger\RxJava\EventBus), etc., and be able to repackage these commonly used libraries.
  • Familiar with the application of common optimization methods, to avoid writing memory leak code.

advanced

For the advanced level, it is not only limited to function and business development, but also requires a deep understanding of the operating principles of the Android system to achieve integration, and some of them can be used as Android-side architects. Most people at this stage have worked for 5-8 years, have the ability to design open source libraries, and have a better understanding of the operating principles of the Android system.

  • Master the advanced features of java, such as JUC, thread pool, NIO\BIO, etc.; master the knowledge of jvm virtual machine, such as memory model, GC principle, class loading mechanism, thread model, etc.
  • Have an in-depth understanding of the Android operating environment, understand the Android sandbox mechanism, master the principles of AIDL and Binder communication, and understand the principles of app and activity startup.
  • Grasp the principle of hot repair, the advantages and disadvantages of major manufacturers' solutions.
  • Have an in-depth understanding of Android event distribution, focusing on the touch event mechanism.
  • In-depth understanding of Android drawing principles, understanding of VSYNC and surface mechanisms and window principles.
  • In-depth understanding of Android animation principles, including tween animation and attribute animation.
  • Have a basic understanding of Android security mechanisms and understand Android security principles.
  • In-depth understanding of the design paradigm ideas on the end, such as mvc\mvp\mvvm\clean-arch, etc.
  • Understand the evolution of architecture, have a good idea of ​​layering and splitting, master modularization, plug-in, dynamic deployment, etc.
  • Be sensitive to new technologies (, understand and master the dynamic features of the next-generation architecture, etc.).

If you reach this level, congratulations, you have more than 70% of the people, but if you want to go further, such as architecture/development experts, then in addition to understanding some of the core principles of Android, you also need to have the ability to design architecture. Look at the problem at a higher level and understand the design of the entire system.

expert

As a development expert, in addition to understanding some of the core principles of Android, you also need to have the ability to design architecture, be able to look at problems from a higher level, and understand the design of the entire system.

  • Understand microservices and SOA ideas, and have a certain understanding of back-end development.
  • Understand front-end R&D tools and ideas, and know R&D frameworks such as vue react.
  • In-depth understanding of cross-terminal technologies, such as phonegap, weex/RN flutter, small program quick application, etc.

So apart from the above technical aspects, where is the difference between you and the senior engineer?

1. Work experience and technology accumulation

When it comes to senior engineers, the first impression is naturally that they have rich work experience and strong skills.

Note that this is about work experience, not working hours. Some people work on projects steadily, thinking about learning more new technologies in their spare time, persisting in reading, writing blog summaries seriously, practicing more, plus their own savvy and not bad, they can have others in two or three years. With 3, 5 years of work experience, it is natural to grow into a senior engineer in the company. And some people mix up their lives, do projects that are easy to do, play games in their spare time, and chase dramas. Maybe you have been working in the company for 10 years and look conscientious, but you don’t have higher requirements for yourself. You are content with the status quo and do not seek progress. Even if these people have 10 years of working hours, they can only stop there.

Relying on my continuous learning and the accumulation of work experience, step by step, there are more markets and more pits to step on. It is only natural that the technology is getting better and better, and technology is the most basic requirement of a senior engineer. However, I think that as long as people who are not fools and have a bit of pursuit of technology, it is not difficult to achieve this. It is just a matter of time. Apart from technology, there are other gaps between you and those real senior engineers!

2. Responsibility

Senior engineers must have a strong sense of responsibility. The sense of responsibility reflects a person’s attitude. They will always pay attention to a bug, and do everything possible to find the cause and solve it as soon as possible. However, some people are easy to pass the bug and solve the bug. Attitude is to try, thinking that it is ok if it is solved on the surface.

Our CTO has more than ten years of software development experience, and users report bugs. No matter how busy or when, we must stop what we are doing to find the cause and solve it. In my experience in Mint, I followed him more than once to solve a bug late at night, and a few times late at night, I found a bug that caused users to be unable to pay. I slept in bed and was called by the CTO to rush to the company to fix it in the middle of the night. I didn’t understand the experience at the time. After a long time, I realized that this sense of responsibility is professionalism. Now I am deeply infected. At any time, at any time, my mobile phone and computer are not separated from my body. Questions must be responded to the first time!

Compared with you, is your sense of responsibility strong enough?

At last

May you one day love yourself and be kind to yourself.

This article is in an open source project: What about Android development? How to get a high salary  in an interview has been included, including self-learning programming routes in different directions, interview question collection/face-to-face, and a series of technical articles, etc. The resources are continuously being updated...

8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md) has been included, which includes self-learning programming routes in different directions, interview question collections/faces, and series of technical articles, etc. Resources are being continuously updated...

Guess you like

Origin blog.csdn.net/m0_52308677/article/details/114260425