作为小米面试官,原来这种学生最吃香!

开发 前端
在写代码前,我们会让面试者先思考 5 分钟,然后再讲一下思路,如果牛头不对马嘴,大概率就要 Pass,如果给的方案不太好,我们会稍微进行引导,也有很多能直接给出最佳方案的。

大家好,我是楼仔!

想必大家看过很多文章,都是教大家如何面试,比如之前很火的《吊打面试官 xxx》系列,你以为掌握了某个知识点,就真的能吊打面试官么?你来吊打我一个试试?

现在已经 9 月中旬,秋招正在火热进行,这几周我也面试了十几个学生。

给我的第一感受就是,今年的就业形势更严峻了,主要体现在各大公司的招聘名额缩减,然后也感觉今年的学生更卷了!

下面是我面试的一些感受,仅限于大厂,如果是小厂的话,就不需要这么高要求,但是如果都掌握的话,那小厂真的随便进。

1. 代码考察

如果你想进大厂,这个是一道无法跨越的坎。

因为这次面的都是提前批,没有经过笔试,对于一面,算法必须是我们重点考察的内容。

面试官一般会出 2 道中等难点系数的算法题,时间不超过 40 分钟,比如重排链表。

图片

一般要求直接写进阶版的代码,即空间复杂度 O(1)。

先是考察算法思路。

在写代码前,我们会让面试者先思考 5 分钟,然后再讲一下思路,如果牛头不对马嘴,大概率就要 Pass,如果给的方案不太好,我们会稍微进行引导,也有很多能直接给出最佳方案的。

下面就开始撸代码,时间控制在 15-25 分钟。

线上编程一般用牛客网,代码是需要能正常运行的,如果代码写完了,运行不出来,印象会大打折扣。

不过线上编程,有个问题就是不能 debug,遇到问题就只能凭眼力排查了。

如果是纸上手写代码,个人感觉难点稍微小一些,因为只需要撸出来,不用考虑能否运行。

好的代码质量也可以加分,下面是我们面试一位武大的学生写的,方法封装得好,运行直接一遍过。

public class Solution {
public void reorderList(ListNode head) {
if(head==null){
return ;
}
ListNode mid = middleNode(head);
ListNode l1 = head;
ListNode l2 = mid.next;
mid.next = null;
l2 = reverseList(l2);
mergeList(l1,l2);
}
public ListNode middleNode(ListNode head){
ListNode slow = head;
ListNode fast = head;
while(fast.next!=null&&fast.next.next!=null){
slow = slow.next;
fast= fast.next.next;
}
return slow;
}
public ListNode reverseList(ListNode head){
ListNode pre = null;
ListNode cur = head;
while(cur!=null){
ListNode temp = cur.next;
cur.next=pre;
pre = cur;
cur = temp;
}
return pre;
}
public void mergeList(ListNode l1,ListNode l2){
ListNode temp1;
ListNode temp2;
while(l1!=null&&l2!=null){
temp1 = l1.next;
temp2 = l2.next;
l1.next = l2;
l1 = temp1;
l2.next = l1;
l2 = temp2;
}
}
}

可能有粉丝会说,你这道题有点难,其实我前 2 年面试,基本只考察链表的反转,但是今年僧多粥少,我们不加点难度,那咋区分呢?

2. 面试环节

如果两道算法题都过了,或者过了一道,另外一道因为时间原因没有写出来,但是思路没问题,就会进入面试环节。

可能又有粉丝会跳出来问,“那如果第一道算法题都没有过,那是不是就结束了呢?” 其实为了不让面试者难堪,我们至少会凑够 30 分钟,后面也会象征性地问一下基础知识。

由于大部分时间都用来写代码,只有 25 分钟左右时间来考察知识点,所以面试的问题可能不会太多,但考察会更有重点。

比如 MySQL,我们不会问 4 种事务的隔离级别,因为这个大家都会,直接问你什么是幻读?幻读产生的原因?如何避免幻读?避免幻读需要用到什么锁?如何手动去加这个锁?

这些问题基本都是由浅入深,能回答到最后一个问题的同学,遇到的不多。

如果你连 MySQL 几种事务隔离级别都不知道,基本就不会问你 MySQL,直接下一个知识领域。

再比如 Spring,我们会问是否知道循环依赖?Spring 如何解决循环依赖?为什么要用三级缓存,不是两级?能否直接去掉第二级缓存?如果不能去掉,为什么?第三级缓存存的是什么?如果你回答对象工厂,这个工厂里面存的又是什么?

大部分同学只能回答前几问,能全部回答出来的,也是凤毛麟角。

对于 Java 并发编程,我们会问线程池的工作原理,然后详细考察拒绝策略、任务队列,如果这块考察通过,会再问几个关键字的内存屏障、重排序、内存模型等相关知识。

当然,我肯定不会随便挑个知识就问,我会先问一下面试者,哪块知识掌握得比较好,不限于设计模式、MySQL、Redis、操作系统、计算机网络、Java、JVM、Spring、消息队列等相关知识。

如果你说 xx 知识掌握的还可以,我就会对这块知识深入考察,一直给你探到底。

3. 个人意愿

个人意愿也是面试官非常看重的内容。

如果你直接问他,你想来小米么?这不废话嘛,我来面试,肯定是想通过,即使不想来,我嘴上也会说想,拿着 Offer 找 Offer,不香么?

我首先会看面试者的籍贯,如果简历上没有写,我就会问一下,比如武汉小米,如果你籍贯是湖北,或者老家就在武汉,是非常加分的,因为这种同学留武汉的概率很大。

也有那种纯粹的米粉,真的非常喜欢小米的产品,也非常加分。

不过我也遇到籍贯不是武汉,但非常想来武汉小米的同学,他给我两点理由,第一是他本硕都是武汉读的,在这里呆了 7 年,最关键是她女朋友是武汉本地人,你说这种情况,留汉意愿能不大么?

写到这里,大家是不是又学到一招,如果你籍贯不是本地,你谈了 N 年的女朋友在本地,是不是很加分? 那没有女朋友呢?你就 New 一个呗,都说到这个份了,要是还不懂,那我。。。喷你一口老血。。。

4. 注意事项

大家面试时,不要紧张,其实我之前遇到的面试官,性格都非常不错,不仅不会刁难你,还会对你慢慢引导,不过不排除那种极少个别恶心的,面个试都吊炸天的那种,这种我遇到过,当时直接去 TMD!

面试过程中,要实事求是,如果不会的,可以直接说不会,这样面试官就会换个问题去考察你,如果你说比较了解,结果连稍微深入的问题都答不上来,面试官可能会觉得你掌握好的知识也就这个程度,其它的估计更不行。

学会引导,并不是所有的面试官像我一下,会先问你哪块知识掌握得比较好,然后再去深挖,因为这要求面试官的水平比较高。很多面试官上来会问你对某块是否了解,比如 MySQL,然后再去问,如果刚好触发到你的知识盲区,可以适当引导一下面试官,让他能问你熟悉的领域。

注意个人形象,在面试过程中,有个学生一直在那清嗓子,然后倒吸嗓子吐痰,声音还特别大,然后思考时,一直在那一个劲嘀咕,也会减些印象分。

985/211 的学校,确实会优先考虑,因为录取名额不多,所以基本都是挑选的双 985、211,专业基本和计算机相关,如果你是非计算机专业,但是学校确实很好,有自己的技术广度和深度,也会考虑。

5. 写到最后

面试其实是一个双方博弈的过程,前提是自己肚子足够有货,我记得我当年校招,虽然谈不上 Offer 收割机,但也是非常不错的。

然后今年的就业形势更严峻,大家一定要提前做好充分的准备,如果有任何问题,也可以加我微信进行沟通。

最后祝愿大家都能拿到心仪的 Offer,加油!

责任编辑:武晓燕 来源: 楼仔
相关推荐

2024-05-20 10:03:15

线程池优先级队列排序方法

2013-08-27 14:04:29

2023-07-28 07:18:39

final继承结构

2012-02-27 10:03:19

小米雷军小米之家

2024-11-11 00:00:01

线程池工具

2020-02-25 16:56:02

面试官有话想说

2022-05-23 08:43:02

BigIntJavaScript内置对象

2015-08-13 10:29:12

面试面试官

2017-03-16 15:27:10

面试官测试技术

2023-02-16 08:10:40

死锁线程

2018-06-19 16:50:03

编程语言Python面试

2023-01-30 15:39:40

GETHTTP

2013-04-11 09:51:43

编程语言

2021-11-02 09:05:25

Redis

2024-03-05 10:33:39

AOPSpring编程

2024-08-22 10:39:50

@Async注解代理

2024-03-18 14:06:00

停机Spring服务器

2021-09-07 10:44:33

Java 注解开发

2024-02-20 14:10:55

系统缓存冗余

2021-07-06 07:08:18

管控数据数仓
点赞
收藏

51CTO技术栈公众号