We're going to be talking about what nobody tells you about the software engineering interviews. And this is coming from me, someone who has conducted over 100 interviews over at Google. So I see a lot of misinformation out there and people making so many mistakes. Some people think that all you need is lead code, and you just do a bunch of lead code questions, and that'll get you going. That's not quite true. I have a colleague actually who did like 400 lead both questions. He was very good at these white boarding questions, but his communication skills were total garbage. And I knew from the outset, he would not land. Any job offers given his current attitude, which was very arrogant, his communication style. Sure enough, he went out interviewed, didn't land a single offer out there, even though I'm sure he asked all of those legal questions.
我们来讨论下关于软件工程面试的事情,有些事从没人告诉你,这是我说的,我在谷歌做过100多次面试。所以我看到了很多错误的信息,人们犯了很多错误。有些人认为你所需要的只是 Leetcode 刷题,你只需要做一堆 Leetcode 上的问题,这就会让你很爽。这并不完全正确。比如我有一个同事,他在两个平台上都刷了400 道题。他非常擅长这些白板问题,但他的沟通技巧完全是垃圾。从一开始我就知道他不会通过面试,还考虑到他目前非常傲慢的态度,以及他的沟通风格,任何工作机会。果不其然,他去面试了,没有得到一个工作机会,尽管我肯定他回答了所有的面试问题。
This is the first thing to know. A lot of Junior engineers think that white boarding coding practice is all that they need to ace. The interviews, just do 400 lead code questions. And you're good. If breadth first search, that first search recursion, your data structures, hash tables, stacks, and queues, then that'll get you going. And that's just not how it works, because usually within the first 1 to 2 minutes of media candidate, I already know whether I will be giving the candidate recommendation to move forward or rejection. Because the fact is the interview process is very human, it is not objective and you can either have me on your side or against you. I could be giving you all sorts of things, giving the benefit of the doubt, giving you the easier questions and just reading for you through the whole process. Or I could be against you, trying to make you feel giving you very difficult questions, not giving you a single hand, making the question intentionally as ambiguous as possible.
首先要知道的是,许多初级工程师认为白板编码实践就是他们所需要的一切。在面试中,只需做400个 Leetcode问题。你也很棒。如果广度优先搜索,第一个搜索递归,你的数据结构,哈希表,堆栈和队列,那么你就可以开始了。不是这样的,因为通常在媒体候选人的前1到2分钟内,我已经知道我是否会给候选人推荐继续或拒绝。因为事实上,面试过程是非常人性化的,它是不客观的,你可以让我赞同你,也可以反对你。我可以给你各种各样的东西,给你怀疑的好处,问你容易的问题,或在整个面试过程中就只是读面试问题。或者我可以反对你,试图让你觉得给你非常困难的问题,而不是给你一只手,故意让问题尽可能模棱两可。
In fact, here's how it works, how to say within the first 5, 10 seconds of meeting, someone you already know whether you like somebody or not, that does not change for interviews as well. So you need to make yourself presentable. And I already have an idea in my head. After I talk to you for, say, 10, 15 minutes, I hear about your back story. I already know would say 90 % certainty whether I'm going to move you for or not. And what I have not even asked you your little lead code coding question, the decisions already pretty much been made. Now, at this point, I just want to get rid of you. I have like 30 more minutes to burn. So what I really do is I just try and preoccupy you with a coding question. I just throw something your way. And the real purpose of this is so that I can just go and check my phone and regret or check my EMAIL, because I'm pretty much done talking with you, and I just don't know how to burn the rest of the time.
事实上,它是这样的,面试官在见面的前5到10秒内判断出你已经认识的人,无论你是否喜欢某人,这在面试中也不会改变。所以你要让自己变得体面。我脑子里已经有主意了。在我和你谈了10到15分钟后,我就会听到你背后的故事。我已经知道会说90%的肯定,我是否会让你到下一轮。我甚至还没有问你你的 Leetcode问题,决定几乎已经做出了。现在,在这个时候,我只想摆脱你。我还有30分钟的时间。所以我真正要做的是试着让你们全神贯注于一个编码问题。我只是把东西扔给你。这样做的真正目的是,我可以去查看我的手机,然后后悔或者查看我的电子邮件,因为我已经和你谈得差不多了,我只是不知道如何度过剩下的时间。
Meanwhile, the candidate things that at this point, the interview has actually begun. This is when the real work starts. There is the coding question, and so they get completely rejected because of entirely other reasons, lifestyle, isn't it? But you need to know that when people are evaluating you there, evaluating your ability to become a senior engineer, what does it take to become a senior engineer? Well, holding ability alone gets you to say, l four, which is not senior. That's like standard software engineer in order to become a senior engineer, or at least to show that potential, you need to show leadership qualities, ability to tackle complex. The ambiguity, teamwork skills, collaboration, skills, communication skills, friendliness, trump enthusiast, passion for learning. In fact, passion for learning is a big one, actually, because when you think about it, when I give you a coding question, I'm not interested in hearing you regurgitate a memory solution.
同时,候选人认为,此时,面试实际上已经开始了。这是真正的工作开始的时候。有编码问题,所以他们完全被拒绝了,因为完全是其他原因,生活方式,不是吗?但你要知道,当人们在那里评估你的时候,评估你成为高级工程师的能力,成为高级工程师需要什么?好吧,光是持有能力就能让你说,L4,这不是高级的。这就像标准的软件工程师,为了成为一名高级工程师,或者至少要展示潜力,你需要展示领导素质,处理复杂问题的能力。模棱两可,团队合作技能,协作技能,沟通技巧,友好,极大的狂热,学习热情。事实上,学习的热情是一个很大的问题,因为当你思考这个问题时,当我给你一个编码问题时,我没有兴趣听你反复纠结一个记忆解决方案。
Actually, what I want to know is your process for reaching a solution. Because oftentimes, in actual software engineering, there is no pre different solution. You have to work towards that. And that process in reaching that solution often requires a lot of analysis, balancing tradeoffs, discussing alternatives, team, Mark collaboration, accepting feedback. And I want to see that process occur as you're coming up with the solution.
实际上,我想知道的是你达成解决方案的过程。因为通常,在实际的软件工程中,没有不同的解决方案。你必须朝着这个方向努力。达成解决方案的过程通常需要大量的分析、权衡、讨论备选方案、团队、标记协作和接受反馈。当你想出解决方案时,我想看到这个过程发生。
If I give you a question, I want to know how you reach the answer, not if you can reach the answer. If you reach the answer, you just answer a single question or no. You got the answer. If you tell me how you reach the the way you trade off time and space, how you present alternative solutions, thoughtfully discuss the algorithm and come up with an actual solution. That entire process is actually what is far more interesting.
如果我给你一个问题,我想知道你是如何得到答案的,而不是你是否能得到答案。如果你得到了答案,你只需回答一个问题或“不”。你得到了答案。如果你告诉我你是如何权衡时间和空间的,你是如何提出可供选择的解决方案的,仔细讨论算法并提出一个实际的解决方案。整个过程实际上更有趣。
Now speaking of that another ticket, there was a post in a group where somebody went to an Amazon interview. And then the interviewer was late for like 20 minutes. They finally show up and then they do the interview with half the time unloaded and the person fails because they just don't have enough time to finish the problem. This actually happens, and then they're trying to work with the recruiter. And the recruiter is not really responding. So i've seen mishaps like this where through no fault of the candidate, the chances of passing are just dramatically reduced.
现在说到另一个帖子,在一个群里有一个帖子,有人去参加亚马逊的面试。然后面试官迟到了20分钟。他们终于出现了,然后他们用一半的时间进行面试,这个人失败了,因为他们没有足够的时间来完成问题。这确实发生了,然后他们试图与招聘人员合作。招聘人员并没有真正回应。所以我见过这样的事故,不是因为候选人的过错,而是通过的机会大大减少了。
For example, there's no whiteboard markers. And then people spend like 10 minutes looking for good markers. The wrong resume could be printed, or perhaps somebody just forgot to print it altogether. And then people are going through the interview, just winging it without really knowing the candidates background or score. Education. And then there was a bunch of time going over just these basic details, like which school did you go to? Where did you work previously? For me, if I go into an interview, I will actually bring my own backpack, my own markers, my own eraser, backup resumes, that are the most up to date, such that everything goes estimate going through the interview.
例如,没有白板笔。然后人们花10分钟寻找可的白板笔。可能打印了错误的简历,也可能是有人完全忘记打印了。然后人们通过面试,只是在不真正了解候选人的背景或分数的情况下即兴发挥。教育。然后花了很多时间讨论这些基本的细节,比如你上的是哪所学校?你以前在哪里工作?对我来说,如果我去面试,我会带上自己的背包,我自己的记号笔,我自己的橡皮擦,备份简历,这些都是最新的,这样一切都可以通过面试。
We can on all the other random stuff that could get into the way, because at the end of the day, you are going to be the one being held accountable, the interviews. They don't care. Nobody cares about your performance as much as you do. Now, if you're an American, you may not be aware, but American schools are actually terrible. And if you to take a look at the international candidates coming out of state India, China, their whiteboard coding performance is stellar. Like they are really good, and they can blow out so many other people. So a lot of the international candidates, they're just willing to work harder and longer to attend that American dream. They will do 1,000 lead code questions, for example. Yet, as an interviewer, I come across these people, and many still do not pass for other reasons. Besides just coding ability, perhaps one of, the Top reasons is ambiguity.
我们可以在所有其他随机的事情上,因为在一天结束的时候,你将是那个最后受影响的的人,面试。他们不在乎。没有人比你更关心你的表现。现在,如果你是美国人,你可能不知道,但美国的学校实际上很糟糕。如果你看看来自印度和中国的国际候选人,他们的白板编码表现是一流的。就像他们真的很棒,他们可以击败很多人。所以很多国际候选人,他们只是愿意更努力、更长久地工作来实现美国梦。例如,他们将做1,000个引导代码问题。然而,作为一名面试官,我遇到了这些人,许多人仍然因为其他原因没有通过。除了编码能力之外,也许最主要的原因之一是模棱两可。
So if all is test taking ability, and you can just answer whole bunch of questions about data structures and algorithms. And yet you don't really know how to apply them given a ambiguous question where I don't even give you the method signature, I don't tell you what the inputs and outputs are with the data format is going to look like. I've heard this from colleagues. Interviewers will sometimes intentionally give you a very vague and biggest question, just to see how you can tackle that just to try to throw you off like that. So the ability to tackle ambiguity is actually one of the performance i see that you are being graded on. Another one is kind of efficiency, and it's naive that it is actually about practicality. So I remember over our Facebook, there's this question about a quick select. You can approach this problem in a number of ways you can do good for you to create a heap, or you can even implement the partition in algorithm.
所以如果所有的都是考试能力,你可以回答一大堆关于数据结构和算法的问题。然而,你真的不知道如何应用它们,给出一个模棱两可的问题,我甚至没有给你方法签名,我没有告诉你输入和输出是什么,数据格式是什么样子。我听同事说过。面试官有时会故意给你一个非常模糊和最大的问题,只是想看看你如何解决这个问题,只是想把你像那样扔出去。所以处理歧义的能力实际上是我看到的你被评分的表现之一。另一个是效率,这是天真的,它实际上是关于实用性的。我记得在我们的Facebook上,有一个关于快速选择的问题。你可以用很多方法来解决这个问题,你可以创建一个堆,或者你甚至可以在算法中实现分区。
Now, the problem is that this partition in algorithm, it is the most optimal format, but it is quite difficult to write. It takes way too much time. And actually, what will happen is if you try to solve it in this most optimal manner, you may not be able to solve it within the time. Given what interviews really want is for you to use the less optimal approach, say, using a heap. And then to just quickly mention, like, there's also this other more optimal algorithm, quick slack with partitioning. But we're not gonna do that. Just seems a little bit way to complicate it. Let's just do the simpler heap algorithm that can be written much quicker. So is this ability to recognize practicality and simplicity over, say, always coming up with the most optimal time efficient algorithm that could be the simplest algorithm that you can actually write given your deadline of about 30 minutes.
现在的问题是,这个分区在算法中,它是最优的格式,但它很难写。它需要太多的时间。实际上,将会发生的是,如果你试图以这种最优的方式解决它,你可能无法在时间内解决它。考虑到面试真正想要的是你使用不太理想的方法,比如说,使用堆。然后简单提一下,还有另一个更优化的算法,快速松弛分区。但我们不会这么做。看起来有点复杂。让我们只做更简单的堆算法,它可以写得更快。因此,这种识别实用性和简单性的能力,比如说,总是想出最优的时间效率算法,这可能是最简单的算法,你可以在大约30分钟的截止时间内编写。
Now, most interviews will actually know the answers to the questions that they're asking, but occasionally there will be interviews who. They just ask some random question each time, and they like to work through the problem with the candidate. You can see that it becomes extremely annoying when the candidate begins asking questions. Like, is this right answer this? How does this sound? Is this good? What do you think about this? Do you think that's the most optimal? I think that the most optimal dynamic programming, but I'm not sure if I should do that yet. Should I approach with this share? Proceed? Is this? And the problem here is this is not how coworkers work together. It is more about being collaborative and having that teamwork ability not really asking for permission to move forward with something, but to discuss the alternatives and solutions and reach a consensus together.
现在,大多数面试实际上都知道他们所问问题的答案,但偶尔也会有面试。他们每次只是问一些随机的问题,他们喜欢和候选人一起解决问题。你可以看到,当候选人开始提问时,它变得非常令人讨厌。就像,这个答案是正确的吗?这听起来怎么样?这样好吗?你对此有何看法?你认为这是最理想的吗?我认为这是最优的动态规划,但我不确定我是否应该这样做。我应该接近这个份额吗?继续?是这个吗?这里的问题是,这不是同事一起工作的方式。它更多的是关于协作和团队合作能力,而不是真正要求允许推进某件事,而是讨论替代方案和解决方案,并共同达成共识。
By the way, sometimes the interviewer may not even wanna collaborate with you, they just want to, see you a personal problem as if you're on your own. That's kind of the approach I would do, especially if it seems like the candidate is quite strong, it seems like they can pretty much do on their own. I rather just see what they can do. And the fact sometimes candidates surprised me with a completely new and interesting answer or different way of approaching problem. And then they get on this points for that because they actually surprised me. And one of me in my own head. And one more tip here, too many people, especially Junior engineers. They think they're being evaluated for their past experiences, whereas actually, they're being evaluated for their future potential, especially to be able to learn and execute on the project. So it's not really about coming up with a laundry list of all of your prior accomplishments in some other technology that simply cannot be applied to the current role.
顺便说一句,有时面试官甚至不想与你合作,他们只是想看到你的个人问题,就像你是一个人一样。这是我会做的一种方法,特别是如果候选人看起来很强大,看起来他们几乎可以自己做。我只是想看看他们能做什么。事实上,有时候选人会用一个全新的、有趣的答案或不同的方法来解决问题,这让我感到惊讶。然后他们得到了这一点,因为他们实际上让我感到惊讶。还有一个我在我自己的脑袋里。这里还有一个提示,太多的人,尤其是初级工程师。他们认为他们被评估的是他们过去的经验,而实际上,他们被评估的是他们未来的潜力,特别是学习和执行项目的能力。因此,这并不是真的要列出一份清单,列出你以前在其他技术上取得的所有成就,而这些成就根本不能应用于当前的角色。
So what it's more about the how because whatever accomplish was probably not very important anyway, but I wanna know how you were able to accomplish that. Were you able to teach yourself new languages, bringing your passion, explore new technologies, work with other people, show your teamwork and collaboration skills, and just bring that enthusiasm to learn technical PRC and teamwork skills in order to accomplish a project.
所以更重要的是如何完成,因为无论完成什么可能都不是很重要,但我想知道你是如何完成的。你是否能够自学新的语言,带着你的热情,探索新技术,与他人合作,展示你的团队合作和协作技能,并带着学习技术PRC和团队合作技能的热情来完成一个项目。
If you can show that, I think you will be golden before even the white boarding portion starts, you will have me on your side I will be reading for you, give me as many, hence as I can, to make sure that this whole white boarding code in question goes as smoothly as possible. That said you still need to be good at that many Junior candidates welfare at this portion, you still have to get that right. Because if you feel at that, then even I can help you. So still make sure that you're doing other preparation and branding on the lead both questions. Just know that there's much more to it than that. So they'll do for me, but let me know what some of your uncommon interview tips, maybe if you like the video give you like and subscribe and i'll see you next time. Thanks, bye.
如果你能证明这一点,我想在白板部分开始之前,你就已经是黄金了,你会有我在你身边,我会为你阅读,给我尽可能多的,因此,我可以确保整个白板代码尽可能顺利地进行。也就是说,你仍然需要在这部分做好许多初级候选人的福利,你仍然必须做好这一点。因为如果你有这种感觉,那么即使是我也可以帮助你。所以仍然要确保你在这两个问题上做了其他准备和品牌推广。你要知道,事情远不止这些。所以他们会为我做,但让我知道你的一些不寻常的面试技巧,也许如果你喜欢视频,给你喜欢和订阅,我们下次见。谢谢,再见。