Hello, I'm a programmer, Fishy. Yesterday, I interviewed a 25th year student, let's call him "Ah Qiang" for the time being.
Ah Qiang is very good, not only has half a year of internship experience, has his own project, but also participated in the big factory (byte) interview.
Before the interview started, I asked my schoolmate: How did you feel when you interviewed Byte last time?
As a result, Ah Qiang's answer almost flashed my old back, he said: "The intensity is quite high, I was asked more than 50 questions in a one-hour interview!
What kind of concept is that? One question a minute? What kind of machine gun is that?
I jokingly asked: so did you basically fail to answer all the questions? Is that why the interviewer asked so many questions?
As a result, Keung said, "No, a lot of them are just follow-up questions, so I just keep answering them~
Then I asked Ah Qiang about his expected salary and he said that he would like to enter a medium to large factory and would be satisfied with an annual salary of $200,000 to $300,000.
OK, it seems that Ah Keung, the student who attended my interview this time, has two skills.
-
Inside what you thought was a fish skin: watch me torture him!
-
Inside the actual fish skin: I don't want to be tortured by him!
Let's get started with the interview, which will be revealed at the end of the article to see if Keung can get the salary he expects.
The replay video of this interview is in the live area of Programming Navigator, which also has dozens of replays of real live interviews:/live
The scene of the interview
The interview lasted nearly 2 hours, and I basically asked Qiang about everything on his resume, from professional skills, to internships, to projects.
I'll share the questions I asked, you can also try to answer them, the answers can be found in the interview brush-up website we developed
1) What are the data structures of Redis? What are the scenarios for which HyperLogLog has disadvantages?
The question was a classic eight-part essay, and the more competent the candidate, the more they would say, and the good ones would talk about it in the context of their own projects, rather than just memorizing their answers. I also randomly picked one of the structures HyperLogLog that Keung mentioned as a follow-up question.
2) How to accurately count the PV and UV of a website and how to support millions of concurrency?
This question is a system design question, which can examine the system design ability of the candidate in all aspects. At first, Ah Qiang's answer was limited to Redis, then under my guidance, Ah Qiang proposed the solution of local atomic counter + periodic reporting; under my further guidance, Ah Qiang proposed the solution of message queue + log collection, which was not a bad answer.
3) What is your understanding of AQS? Which classes are based on AQS implementation?
Although this question is an eight-legged essay, it is definitely not good to just memorize it. Ah Qiang's answer is not bad, he not only stated the core idea of AQS, but also accurately answered some of the techniques used in AQS, such as ReentrantLock, CountDownLatch and so on.
4) What concurrent programming classes have been used in the project? How to troubleshoot thread pool full situation? How to optimize it?
From the last question, I could sense that Qiang was pretty well prepared for the concurrent programming piece. So I asked this question to see if he was an "octet master" or if he had used concurrency toolkits in his projects. Ah Qiang's answer was moderate, answering custom thread pools, CompletableFuture, and so on. However, his answer to the follow-up question on connection pooling and optimization was not so good. Here, Ah Qiang frankly confessed that he had little experience in dealing with online problems. This is also the general situation of school recruiting students.
5) What is the write process for a billion data volume? How to deal with data loss?
Why did you ask this question? Because Ah Qiang's internship experience says that "he has experience in writing billion-scale data volume", so I asked this question according to his internship experience. As a result, Ah Qiang's answer was quite good, and he clearly explained the data processing process of his internship company, which involves technologies such as Kafka, Flink, Hive, S3 storage, and so on.
6) Does the server automatically return Gzip compression to the browser?
This question was also written in Ah Qiang's internship experience, he said that he had optimized the server's resource transfer volume through Gzip compression. But I changed the question to see if he really knew about Gzip and under what circumstances the server would return Gzip, and Qiang did a good job of thinking about the Accept-Encoding in the request header.
7) What is Apollo and what are its features and benefits? How is it usually released and configured?
This question examines the configuration center, also written in the resume of Ah Qiang, from his answer can be felt really used in the enterprise configuration center, but also understand the configuration of the release process. The question here his internship experience has been "iron real", they have done things mastered very good. It's a bit of a shame that some of the features of the configuration center weren't mentioned, so I didn't bother to ask him about the design principles of the configuration center.
8) What is LiteFlow and how can I implement LiteFlow on my own?
This question is also mentioned in Ah Qiang's internship experience, he has touched the LiteFlow rule engine in his company. The first half of the question is relatively basic, and the core test point is in the second half of the question, I want to examine the architectural design ability of Ah Qiang, to see if he can think of the core of the design of the rule engine, such as rule configuration, rule persistence, rule scheduling, rule hot refresh, context isolation, etc. This question is also fluent in expressing his own ideas, but the perspective is still more biased towards application development rather than context isolation. In this question, Ah Qiang also expressed his thoughts fluently, only the perspective is still more inclined to application development, rather than the overall design.
9) Why choose Dubbo over Feign and how to implement Dubbo on your own?
There's not much to say about this question. Qiang mentioned RPC in his resume, so I asked about it casually, and I was able to answer all the key differences. But since I don't know much about Dubbo, I'm not sure how to implement it on my own.
10) What is pooling technology? How to implement pooling techniques autonomously?
The focus of this question remains in the second half of the question, see if you can think of a few key points of pooling techniques, such as implementing a connection pool: how do you need to think about reusing connections? How do you control the size of the pool? How to manage idle connections? How to handle connection timeouts? Is it thread-safe, etc.? Replacing "connections" with other "resources" would be similar.
11) How to design an easily extensible SDK?
This question examines development experience, and since Ah Qiang has never written an SDK, only utils, his answer was average. I told him to go back and learn about Java's SPI mechanism.
12) How do you typically go live with a project? How do you implement a pipeline automated deployment platform?
This question examines the ability of the online project, Ah Qiang Linux + Jenkins automated deployment of hands-on experience, or good, but for the online JVM parameter configuration, the stability of the online service, the observability of the online service, resource utilization and other concepts are not very sensitive. This is also the general situation of school recruiting students.
13) What is single sign-on? How to realize single sign-on?
Ah Qiang firstly answered the question of unified login authentication center and token-based solution, but neglected the solution based on shared cookie domain name. We suggest that students who want to enter a medium or large factory should search and compare several solutions, instead of just understanding one solution and then be done with it.
14) What are some of the considerations during a stress test?
15) What are the considerations in using ThreadLocal?
16) How can I design an automatic caching annotation myself? How to use caching more efficiently?
These last few questions also basically look at various aspects of experience, such as experience in testing and analyzing system performance, practice with common classes used in development, coding and design skills, and so on.
Interview Advice
Give the results of the interview first and I'm willing to make him a 20 - 30w offer.
I had a very good experience during the whole interview, I didn't feel that Qiang was a 25th year student, it was more like chatting with a classmate who has working experience. Basically, he was able to express himself very quickly and seldom got stuck; he was also confident, and some of the pitfalls I intentionally set up didn't fool him. The pop-ups in the live broadcast room were all saying: "Cao Cao, is this the 25th class?
So I can actually understand why he went to Byte for an interview and was asked so many questions in 1 hour.
Finally, I have some advice for Qiang: the preparation for the interview is actually more than adequate, and the focus is on optimizing the resume.
1) Put your own project online, try to go online with your address, personal blog and GitHub to show more of your experience and capabilities to recruiters!
2) Since there is only 1 project on the resume, you can add another one. The one I recommend for Keung is Programming Navigator
(3) After that, when answering system design questions, you can first think about how to answer from the whole to the local, there is a linear idea to answer, such as "How to design a spike system?" , you can first answer the key problems that the spike system re needs to solve, and then answer from both front and back end perspectives; when answering the back end, you can follow the order of the request, and answer the considerations of each module (or technical component) of the whole chain in turn.
OK, that's all I have to share, can you all answer these questions?
The replay video of this interview is in the live area of Programming Navigator, which also has dozens of replays of real live interviews:/live
More Programming Learning Resources