How do I prepare for spring recruits in three months | Nuggets Technical Essays.

How do I prepare for spring recruits in three months | Nuggets Technical Essays.

Preface

All the content in this article is a personal summary of bestsort. Not necessarily suitable for everyone, please pay attention to screening

Bestsort is currently a junior, studying software engineering at a second college in Shandong. I participated in ACM during my freshman and sophomore year and had the honor to serve as the person in charge for one year. The following is what I think I can see a little bit.

  1. The awards won include the Blue Bridge Cup (National 2.Prize), ACM Provincial Tournament (2.Prize), Regional Tournament Winning Award (this is cannon fodder, haha, this is not written on the resume).
  2. I spent 2 months in my junior year and wrote a semi-finished project , most of the functions are designed by myself referring to Zhihu, Nuggets, and CSDN.
  3. I also have a personal blog . The estimated visit volume should be about 15W (I didn't use CSDN in the summer vacation last year, and it was on my own server. This is the statistics of CSDN), and the total word count is about 11W.
  4. I have contributed two Pull Requests to the open source project Halo . One of the PRs has significantly improved the performance of a certain module and reduced the memory overhead when uploading attachments (but this is after the start of the interview, probably around March 10th. Look like)

At present, the offer is only CVTE, Tencent has about 4.7 HR face, and Ali just finished three faces on Friday. It should be noted that this article does not involve interview questions . If you want to see the interview questions, you can exit directly in the upper right corner. Because I think there are thousands of people, and what others meet may not be met by yourself. As for some basic knowledge, it must be tested anyway. After understanding the points that the interviewer wants to investigate, the problem will naturally arise, even if not. (Actually, I don't know most of the questions Tencent asks me.) It can also reflect your ability in the analysis process, which is enough for school admissions. And for some basics , other side sutras have been written, I will not repeat them. If you are at a loss when you mention the transaction features in SQL, the division of JVM memory areas, and the underlying structure of the index, it is recommended that you hurry up and learn. Don't feel that I have never heard of these in class. There is a big disconnect between university education and practical applications.

This article is suitable for the crowd

This article is suitable for fresh graduates who are preparing to sprint into a big factory. Readers need to have a certain degree of discrimination (because this article is only from the perspective of the author to analyze and summarize. It is credible, but not fully believed) and the perseverance of Di Di Di Di Di, the author prepares for an interview to exclude The project and algorithm took about 3 months (nearly 150 alliances were played in these three months~) and there is a little search ability.

Since the authors post all Java-related positions, students in Java positions will eat better, and students in other languages can refer to it appropriately.

What have I prepared?

January

During the whole month of January, I did the following:

  1. I read the source code of JDK and CGLIB dynamic proxy and wrote an article on JDK source code analysis and published it on my blog
  2. Understand the common interview questions of MySQL, including MVCC, transaction, isolation, index data structure, the difference between InnoDB and MyISAM and other basic knowledge. I haven't learned about the cluster index.
  3. I read "In-Depth Understanding of the Java Virtual Machine" 2-3 times, and I made paper notes where I thought it might become an interview test site.
  4. LeetCode brushes the questions, 3 questions a day. I didn't stick to this, and I did about 50 questions in the Top 100 in 20 days.
  5. Read Chapter 17-24 of "TCP/IP Detailed Volume One" twice (this part mainly talks about TCP protocol) and take notes.
  6. I conducted about 5 mock interviews with my friends in the Niu Kequ group, each of which asked in detail about a certain area, and the duration was about 1H each time.

The whole month of January is the time period for me to prepare the most, including the following February and March, the workload has been reduced a lot.

February

I didn't prepare too much in February, because some companies are already conducting interviews at this point in time, so this time period is mainly focused on missing knowledge points encountered during the interview process to fill in the gaps. I did the following throughout February:

  1. Looking back on my entire project, because some project details may not be remembered clearly after a long time, this is a very fatal problem in the interview.
  2. Think about the expansion points and optimization space in the project, and some solutions under the large flow.
  3. After reading the two books "The Art of Java Concurrent Programming" and "Redis Design and Practice", I drew a map for the underlying data structure of Redis and reviewed "In-depth Understanding of the Java Virtual Machine".
  4. The Nuggets purchased the booklet "Understanding MySQL from the Root" and tried to read a few sections.
  5. I met CVTE, Dongfang Jinxin (a small company), and Alibaba's side + CBU side. At the end of February, I received offers from the first two companies.
  6. I wrote a bit of a complete set (a personal network disk that integrates the storage of various objects, I wrote it in advance if I want to use it as an autumn recruitment project), and read the source code of some modules of Halo.

March

Written exams in March gradually increased, and I didn't do anything at this time. .

  1. Two PRs were proposed to Halo and merged into the main branch by project members
  2. After reading "Understanding MySQL from the Root" (just read it roughly)
  3. Various written examinations + interviews (the interviews are actually Ali and Tencent~)
  4. Learned some knowledge of the operating system, including the basics of I/O model and process threads. This part is mainly for interviews~ I am actually okay to use it, because I have always been developing under the Linux environment.
  5. Improve some knowledge about HTTP and HTTPS.
  6. I read some design patterns and wrote it myself (this is mainly because I used it when I submitted a PR to Halo and when I wrote the network disk)

How to prepare?

First of all, we must understand a few key points of the interview: basics, algorithm/data structure, project, development potential, any interview is conducted around these areas. Among them, the foundation and algorithm/data structure are the core of the core, and the algorithm cannot be improved in a short time. It is difficult to really come up with a usable project within three months (even if it is taken out, can you ensure that most of them are self-thinking? How much energy will it consume?) So we need to set a rough review route:

1.  3 

2.  MySQL/explain optmizier trace 
3.  
4.  
5.  Java HashMap + Redis MySQL B+ I/O 
 

Why is there no framework mentioned above?

I can say without hesitation: none of the interviewers I have interviewed asked me about the framework. The reason I think lies in two points:

  1. I didn't write any entry about the framework on my resume (some students may wonder how to live this way, refer to the second article in How to prepare).
  2. The interviewer thinks that my potential and foundation are good, and I don't have much requirements for the framework.
  3. I m too good here. I think it s mainly the second and third points. Now many projects are really spikes/malls. Many students said that the key points are all copied from the video, without going through a deeper one of their own. Thinking. This is like copying homework. How do you distinguish between copying?

My project is only a semi-finished product, but for caching alone, my own selection is from the second level cache of MyBatis -> Spring Boot Redis Cache -> handwritten aop annotations. I have experienced my own every time I change components. Thinking, I have my own thoughts on the advantages and pain points. For example, I am doing a community. In order to design comments and likes, I refer to a bunch of community websites such as Nuggets, Zhihu, and CSDN. For each website, I use interceptors to check the return of these interfaces. Value and design, which I think the students who follow the video can t experience.

My own shortcomings are obvious. I don t know IO, I don t know how to distribute, I don t write microservices, I don t have an internship, and I am a second undergraduate. But I understand where my strengths are, and my learning ability and potential I can make the interviewer clearly understand through the answers in the interview. I think this is why I can get an offer.

How to prepare a project

This part of the project is indispensable in most cases, but for most freshmen, there is no ability to independently complete a relatively good project. At this time, you can refer to more information. Including but not limited to: products, videos, and technical blogs that have been online and have a large number of users. Most of the students may choose the video method to learn, because following the video can avoid a lot of pits, but what I need to remind is to beware of the comfort zone trap (self-made compound words~).

I personally think that when you find that some logic, design, and ideas overlap with the previous learning process during the learning process, you should stop the video. Then try to practice the implementation of a certain module by yourself, and then go back and compare the design in the video after writing, and you can try to compare the advantages and disadvantages of each and see if there is any room for optimization.

In fact, it is very simple to solve the problem with the algorithm. Some problems may be scalp and do not know how to do it. But when I saw other people's solution, I understood it instantly. Then why don t you just click on the answer when you write the algorithm question? I believe that everyone who has brushed the question has their own answers. A certain AC question is not our purpose of brushing the questions. The purpose is to improve our thinking ability by brushing the questions, so that we can draw inferences and quickly AC during the interview (the pattern is smaller, smaller~). Similarly, for most projects, it is not the purpose. The purpose is to show your practical ability, learning ability, engineering thinking, development potential, etc. during the interview process. If you just follow the video and put it on The code is moved down, and the common interview questions are memorized without in-depth thinking. It is easy to expose the problems during the interview. Here are a few questions. If you have the following keywords in your resume, you can check your learning achievements. Think about the problem, don't take it seriously... I can't think of a better question, just ignore it.

  1. Dynamic proxy: How is the cache in the JDK dynamic proxy implemented, and what are the benefits?
  2. ConcurrentHashMap: ConcurrentHashMap's expansion mechanism, why choose back to front
  3. HashMap: Redis also has a similar Hash structure, the difference between the two implementations, why
  4. Transaction: Why InnoDB's default isolation level is RR, and for what considerations
  5. Singleton: Why is the enumeration implementation better than the Double Check
  6. MySQL: Comparison of MySQL's Redo Log and Redis's RDB and AOF persistence methods
  7. MySQL: Sometimes SQL statements may not use the index even if they avoid the query method that will cause the index to fail. So how does the query optimizer choose the execution path?
  8. CAS: Will it be locked during CAS operation? Is there any difference between CAS in single-core and multi-core environments?

Limited to the level, only a few limited questions can be raised. If you have better questions, please leave a message in the comment area~