Stop more will be nearly half a year, this half a year has experienced more than a dozen interviews, through the continuous review of the past summary of the interview questions. Until the departure, until the arrival of June, until confirmed to join the bear factory. After the entry of the adaptation, busy, feeling, finally now can calm down to comb, these months of mental journey.

thinking

It has been three months since I came to Bear Factory. There are not so many arguments as you think. Maybe each team is different from each other, or maybe the teams I contacted before have some differences with our factory in various aspects. Now, if you think back to the three rounds of technical interviews, even though they said that the interview for the aircraft carrier job, the interviewer asked you some principles, talk about the performance, in fact, there is a certain reason, for example, he used a lot of these frameworks in his project and you need to understand how they work so that you can use them better. You may even be able to give them some suggestions on what they are currently working on, how to optimize it and how to modify it, so that different ideas can be touched. And some custom View, now the necessary skills in large factories, the frequency is very very high, maybe everyone’s understanding of custom View is not the same, and said that there may be three possible to say that there are a variety of, in fact, in large factories used the most of the kind of called custom combination View. It is not recommended that you draw a View directly, that is, to draw the control yourself, but more recommended to use a native or ready-made quality View, that is, to combine as much as you can, so this also reflects the importance of custom combination View. Custom composite Views are both concise and efficient because they encapsulate their own logic. In fact, some departments may specialize in drawing views, encapsulating views and frames, etc., or there may be specialized people who just draw views. This will avoid some of the compatibility and versatility may not be very good, but also may hide other bugs, so it is not recommended to draw a View (directly inherit View and ViewGroup), so a custom combination of views has become a basic requirement for a large factory. And then performance and stuff like that is looking at the quality of your code and stuff like that, and then there are the principles of the framework that there are probably lots and lots of things that are going to be used for this one project, and you really have to know these things to understand the whole project. In a big factory, it does not mean that a project is really just a simple project, but there may be a core super APP in a big factory, while other apps’ architectures, such as componentizing, actually use the things developed by the super PP’s team. Other apps, although they haven’t quite reached the level of super apps, they’ve actually referenced some of the core things that are there, but they haven’t quite reached the scale yet. So you really need to have a wide range of knowledge, and then the work that you do in a big factory is not as deep as that, but if you can understand that, then you will be able to go more quickly in later projects, to understand the architecture of the whole project and the business processes and so on. These are some of the experiences and thoughts I have had in the past few months.

advice

Here are some tips we all know, but often “ignore” when coding:

  1. Don’t let other people’s code affect your code. For example: the above code has a blank, and you can now not blank, this is not correct. Because at some point someone else or you might change the logic of the code in front of you, and that might cause this field to be null, and then if you didn’t do it before, that would affect your code. So don’t let the code in front of you affect your code, that is, your code needs to be independent.

  2. The necessary nulls are certain, as are the out-of-bounds behavior of various arrays and collections. Early, in the coding process may have been some array out of line or set out of line some judgment. However, if you modify any logic related to arrays and collections before testing, you need to consider whether you are overstepping the bounds.

  3. It’s also a response to the first point. When you have written a requirement, the requirement only needs to change part of the code, the rest of the code is not changed at all, in the process of your own verification must be fully verified, even if the subsequent code is not changed. For example, in an interface, you only add a View, but at this time, a three-party data source is added to the original data source. The new data source may cause the loss of a certain field or the change of the type, which will lead to the subsequent logic crash. Therefore, before testing, we must carry out a comprehensive verification, more and more double check.

  4. Big factories pay more attention to alignment, for example: Android and ios dual-end technology alignment, technology alignment refers to the implementation of a function as far as possible to achieve the same way of thinking. The benefits of this alignment are self-evident. Problems are easy to troubleshoot, lack of single-end thinking can be avoided, and some cases can be processed or analyzed when double-end personnel are not present at the same time.

  5. Code quality and project documentation. Project documentation: Project documentation is by no means written. Project documentation is not a description of requirements or a hasty completion of technical reviews, nor a pile of messy information related to requirements. Instead, it is a management of requirements design ideas and a record of requirements design choices. Code quality actually includes: code style, unit tests, and Code review. Style: From the naming of variables and methods to the necessary comments, each company has different requirements. Just make sure that the code is written in a good manner, and try to be clear and simple to read. Unit testing: Speaking of unit testing, in fact, Android unit testing is rarely used in daily development, even in large factories, but large factories will encourage people to do unit testing, and the previous unit testing is in various languages, such as Java, Python, Go, etc., while Android unit testing is not quite the same. And often most of the Android development is not very familiar, even I myself only know a little related knowledge Google official website test related knowledge (Chinese oh); Code review: Code review is an important part of the development process, especially before it goes live. Code review is not only the best way to improve code quality, but also an important way to transfer knowledge within the team and teach the best way to write good code.

What is bad code: 1. Code that cannot be read within 5 minutes. 2. Code that requires thinking to understand. 3. Code that requires scrolling back and forth to understand. 4. Code without blank lines/comments.

feeling

Since working for three months, I have had different feelings in each period of time, and each experience has some impact on me.

  1. First of all, in the first half of the first month, I found that the whole project was perfect during the process of understanding the project. Improvement includes: business logic part, performance analysis part, basic components part.

Although the business logic part was understandable, how the whole project worked was really not understood at first. Later studies and found that the overall is to pass the custom gradle plug-in to realize the building, it also can prove if you know some gradle plug-in knowledge, can be faster and more complete understanding of the project, although know these may not much help for development projects, but at least can know the project build or the principle of some performance testing, Then you can improve yourself by learning the idea of its realization. 2. Then, we enter the iterative development stage of requirements within the group. In this stage, we need to understand the code logic of the responsible module in detail, and we will find that the code reuse degree is very high, and the business logic is more complex than previous projects. At the end of this stage, it was found that the students’ self-consciousness and responsible attitude was not good. Everyone does not need to arrange. When they find that some part of the code in the project may have problems, or a document is missing, they will consciously complete it. There are students who optimize the code, there are students who improve the document, there are students who summarize the small “pit”…… It feels so good to me right now. 3. I may have graduated from college and felt surrounded by so many big names for the first time since I started my career. Even when I just entered the industry, I was ignorant, but after two months of study, I also felt that the team technology was like this. Later, because I felt that my technology was poor, I began to keep learning. For three years, every team felt that there were not many leaders, and everyone’s enthusiasm for learning was not high. Now it’s different. People are good and studious.Hahaha, so work harder, good habits can be developed or learned, learn from the team leaders… Both big factories and small factories have their advantages and disadvantages. Small factories have a wide range of areas, and they may be able to access and use all kinds of technologies, but they may not have a deep understanding and deep thinking. Every day is just iteration, without a sound system. Big factory “wide” and deep, this “wide” and small factory wide, can contact more, but not necessarily you to achieve, for example, may use a lot of excellent framework to build the entire project architecture, and performance optimization, etc., but these do not need you to achieve. Surface depth, refers to the coding need to consider more and more complete, and even need to understand its certain principles, after all, now if the factory does not understand some of the principles of the source code and certain algorithm ability, it is difficult to come in. Company also has a more complete mechanism, each version of the iterative cycle, the level of demand, a variety of scheduling, etc., small factory may need to change the boss or products, test a word but a demand schedule of the same, but generally not the case, a consortium even requirements change requires reassessment work, is sure to work overtime to digest or delay. 5. Daco has a better environment for growth. You can not only learn by yourself, communicate with your team, but also learn through some public courses in the factory. For example, when new technology or new version comes out, there may be related students to share; Or other technical experience, development experience sharing, etc.

The interview questions

The few questions I can think of averaged just over an hour each. It is best for you to say more about each question during the interview, so that you can spread the answer from one question. On the one hand, it is a wide range of knowledge, on the other hand, it is their own said more so that the interview management will know more about the knowledge point you ask, and then ask questions will be relatively less, after all, limited time, haha 😄.

One side (part) :

  1. To introduce myself
  2. The startup mode of an Activity and the application scenario of singTask
  3. According to the project questions, including performance optimization, architecture, modularity (how to communicate between modules), whether the networking framework is packaged itself, how to achieve breakpoint continuation
  4. View drawing process
  5. ThreadLoacl, describes the Handler and ThreadLoacl principle
  6. Four kinds of reference, extended memory reclamation, soft reference application scenario (glide memory cache, and was asked why glide memory cache use soft reference, but not weak reference), weak reference application scenario
  7. Retrofit principle, with some OKHTTP attached
  8. Interthread communication, producer consumer, lock, lock how do you wake up?
  9. Shared desktop, handwriting algorithm: given an ordered array, find the sum of two numbers 0 data

Second Interview (part) :

  1. Project introduction
  2. How the ImageView is displayed on the screen
  3. What performance optimizations have been made
  4. Kotlin syntax, extension functions, and inline functions. How to express kotlin syntax in Java
  5. Gradle syntax and custom plugin, as well as gradle compile process, talk about some plugins
  6. The relationship and difference between threads and coroutines
  7. View event distribution

Three sides (part) :

  1. Talk first and introduce yourself
  2. Tell me about the project, which project is the most challenging
  3. What performance optimizations have been done, how caton monitors them (how blocks work)
  4. Did you write all your own articles on the nuggets? What’s on Github? Have you ever written your own open source components?
  5. Algorithm: there are finite points in the plane, how to find the most points in a line
  6. After receiving several offers, why not choose the highest one or why reject the highest salary offer? If you fail the interview, which one of these offers will you choose?
  7. Is there anything you want to ask me?
  8. What are you looking at recently? How do you look at Flutter

Finally, I wish all of you can achieve your goals and achieve better yourself at every stage.

Note: If there are places where you have different ideas, please feel free to discuss in the comments section!!