春招实习之路(附面经)
本人Laochou,这帖子主要是分享一下我的春招实习的历程。
本人春招实习一共就面了4家公司,下面的面经都可以从我以前的帖子中找到,这篇帖子做了一个整合。
[时间线]
2020.03.01
这一天,我记得很清楚。这是我人生中的第一次面试,结果是惨不忍睹。面试官是一位大佬,阿里巴巴高级技术专家(P8,大家如果不知道P8什么等级,可以百度哦)。
大家可以看到是3月1号 11点开始面试的。因为之前我主要是以基础复习为主,结果项目并未进行复习。结果面试过程中主要是以项目展开的,结果可想而知。
这次面试就只有一面,面试问的问题整体来说确实不是很难,只能说自己菜了。我在这分享下面试题
钉钉一面凉经(一个小时,写代码30分钟,电话面试30分钟)
- 先手写个算法,一个无序的数组,找到第k大的数,要求尽量使用性能高的算法
- 问了一些发展之类的,职业规划,为什么不考虑复读之类的
- 问在大学专业课那些学的不错,我傻乎乎的说了个计网
- 从计网中引入服务器HTTPS如何配置,有哪些步骤,我傻了
- 问了是有哪些因素导致了学编程的激情和动力
- 问了项目的难点,然后说了SpringMVC的一个实现,然后讲讲自己的SpringMVC有哪些缺点,如何处理参数。我项目真的没准备好。
- 问了NIO,讲讲NIO的生活应用,我也傻了
- 最后就是建议我多看看书,扩展下自己。
从面试题来看,确实问的问题没有很难。但是确实当时项目准备的不足,面试官也明确告诉我,说目前还达不到要求。
其实面试前,我还是挺自信的。因为在基础上也花了很久,自己的工作室也会举行一些模拟面试而且模拟面试的表现个人还是比较满意的。但是自己这些的花拳绣腿却经不起社会人普普通通的一拳。
面试完,整个人的心态发生了巨变。我依稀记得那天天气很好,窗外的天空很蓝很美。落败的我,就这样静静的观望着。吃完午饭之后,喝了一些心灵鸡汤。后面就继续努力复习了。
失败又何如,找不到实习又何如,我认为这不是失败。真正的失败是跌倒了就再也没有爬起来的勇气。跌倒了,那么就重新爬起来,吸取前面的经验,最后一定会到达彼岸的。
2020.03.30
这一天,是印象格外清晰的一天,我阿里CBU面试三面止步了。很多人会问,为什么你又面钉钉,又面CBU,其实我还面了淘系的一个部门。因为在阿里没有走正式流程之前,很多部门会私下面试。但是在这诸多的部门中,你只能选择其中一个部门走正式流程。
这个消息于我而言,是一个很大的打击了,阿里的面试流程一共是4+1(简历面不算)。而四面是交叉面,只要三面通过,交叉面一般不会太难,有很大可能是可以通过阿里的面试。当然阿里的HR是有一票否决权,但是只要表现的不是太差,还是很大概率通过的。一个晴天霹雳,我累了,我想放弃了。但是我不能放弃,我代表的永远不仅仅是我自己,哪怕不到最后一刻,也不能放弃。
阿里三面止步
一面(80分钟)
项目方面
- 问了项目相关的,如何定义接口规范啊,如何做项目架构实现(SpringIOC,SpringMVC的自实现),业务(也就是CRUD,没啥难度),讲了LRU缓存的实现。项目大概15分钟左右。
基础方面
- JVM内存模型(运行数据区的各种区域,以及功能(栈帧里面的那些也讲了)),然后讲到GC,GC算法,堆的分布(老年代,新生代,以及它们的分配,垃圾回收算法的选择)
补充问到:当eden区不断增大的情况下,survivor区不断减小会导致什么情况?- InnoDB存储引擎(从InnoDB的特性出发,行锁,全文索引,聚蔟索引,必须含有主键(没有主键怎么办,如何选择),为什么是B+树,而不是B树,而不是红黑树,磁盘IO,以及B+树和B树的区别),然后就是InnoDB的MVVC实现(版本号如何进行各种数据库操作)。
- 类加载机制(从类加载,验证,准备,解析,初始化,使用,卸载角度讲述,类加载讲类加载器(三种,如何定义用户加载器),然后就是各个阶段做了什么)
- 线程池,刚开始没听清楚,以为是原生实现线程池,后面才知道讲的是TheadPoolExecutor,然后就是讲参数,讲流程,讲拒绝策略。
- ThreadLocal,讲了底层实现,讲了ThreadLocal的目的,解决了什么问题。后面的ThreadLocal的key是弱引用(没答出来,确实没注意),然后就是ThreadLocal在线程池里面使用会怎么样。
- 冒泡排序算法
- TCP 为什么三次连接,TCP拥塞控制(慢开始,拥塞避免,快重传,快恢复,里面的窗口变量)和流程控制
- 各种奖项的问,做了什么。
- 还问了一些JUC的一些东西,CountDownLatch,Semaphore,CyclicBarrier
二面(40分钟)
项目方面
- 问了下项目的实现.
基础方面
- Redis和Memcached的区别,我问面试官需不需要讲一下其他的东西(比如RDB,AOF的实现),他说不用,直接讲区别。我还想多说点拖点时间呢
- 类加载的双亲委派原则,解释就行,不用讲其他的
- 设计模式(单例模式,工厂模式,使用场景,单例模式的实现(4种))
- 设计原则(说了5大设计原则,忘了接口隔离原则),问了依赖倒置原则,里氏替换原则,合成复用原则,讲了下继承带来的问题,合成复用原则的使用场景。
- LRU缓存的设计,为什么采用数据存放点,为什么不使用Redis
- Redis的淘汰机制,为什么淘汰
- Redis的惰性删除,删除策略,为什么要用这个策略。
- Redis的分布式锁的实现,从mysql的唯一索引,到setnx,到expire到set指令原子性到redlock等。讲了Redis分布式锁可能解决不了的问题。
- 秒杀场景的设计(高并发问题,超卖问题,如何解决,缓存击穿如何解决,BloomFilter,BloomFilter的底层实现,容量和容错率。如何说了下前端方面怎么做。)
- 就是问了下最近面了几个部门,我说还有一个,然后就给过了。
三面(51分钟)
项目方面
- 问了自己实现的SpringIOC的整个流程,直接细节到了代码,说了一遍没听清楚,然后又说了一遍。问了LRU缓存的设计,后面就是直接口述LRU缓存的实现(代码)。问了注解用代码是如何写的(我这记不清楚啊),然后就是问注解是如何自己解析的,我说可以通过Class对象,获取到注解信息,从而判断。
基础方面
- 问了Redis的线程模型,单线程模式,怎么实现的,说了IO多路复用,然后就是epoll,然后介绍了IO多路复用模型的其他实现,对比,然后就是问我Redis的epoll实现,我这个好像有点懵。
- 线程的状态(NEW,RUNNABLE,BLOCKED,TIME_WAITING,WAITING,TERMINATED),然后就是BLOCKED 和 WAIT的区别
- 锁,我讲了synchronize,reentrantlock和锁升级的过程,从无锁状态到偏向锁到轻量级锁到重量级锁(markword,和cas操作替换线程id,然后问我cas是什么,我说比较和替换,Compare and swap,然后我说底层是通过硬件的cmpxchg命令保证的)。然后就是我们的ReentrantLock,将了AQS的底层(双向链表,Node节点(Share,Exclusive,waitStatus),state变量(对不同的实现,所代表的含义不同),然后就是acquire方法和release方法的流程。reentrantlock的公平和非公平(没说),好像是被打断了)
- 口述LRU算法的实现(讲了两遍)
- 类加载,class.forname 和 classloader的区别,双亲委派原则。被问到不使用双亲委派原则,如何自定义java.lang.Integer会怎么样
- 问了自己的缺点和优点,和奖项的项目和做了什么
上面就是本人阿里三面的真实面经,小伙伴如果看到了这里,那么可以看看自己能回答出多少。
2020.04
自从我在牛客上发了“阿里三面止步”的帖子,很多阿里大佬私聊问我,要不要考虑他们部门,可以帮忙转流程。当时我极度开心,觉得机会来了。
还有一些大佬的并没有截图,真的很感谢他们。
天晴了,雨停了,我又觉得我行了。
到底行不行,请继续看下去。
2020.04 中旬
阿里的面试迟迟没有来,流程也并未终止,还停留在CBU的流程。这个时间点,我通过朋友(铮哥)的介绍,加了滴滴的HR,并投递了简历。这个时候其实还有一个微众的流程在走。
微众是4.15一面的,后面24号二面的,二面只有10分钟。(微众并没有拿到Offer,大概率学历问题)
微众实习面经
一面
项目方面
- 你们项目是怎么做的,项目的由来
基础方面
- 讲一下TCP三次握手
- 讲一下HTTPS
- 扩展性问题:假设有一个sdk,app使用sdk,但是sdk是不能改的,app的控制权限也没有,那么证书失效了,你有什么办法解决吗?
- Java 序列化
- 泛型
- JAVA8 新特性
- git 的两个命令,两个只知道一个,commit,哭了。
- bian叔(面试官)说我这么多奖,说是不是假的,叫我把证书发到一个邮箱里面,我邮箱有没有记错(不知道)
二面
- 你负责项目的哪块,介绍下
- 你在项目中遇到哪些技术难题(如何解决)
- 你是什么时候确定走Java后台方向的
- 你在大学觉得最有成就感的事是什么(当然是和朋友通宵改bug啊,哈哈哈哈)
- 你在大学觉得有点遗憾的事是什么(我的大学(一款APP)第二版没有做)
- 你获奖的项目(我就讲了下项目的功能啊,和一些特殊场景)
滴滴整个面试流程3天走完(20号一面,21号二面,22号OC(offer call))
滴滴实习面经
一面
代码方面
- 单例模式(很多实现方式)
- 链表倒数第K个节点
- 反转链表
项目方面
- 项目怎么做的,我就说了下项目的架构,LRU缓存的设计,DB pool的封装,然后就是压测时的问题,以及如何解决。吞吐量啊啥的。
- 数据库如何优化,大概就说了下explain和覆盖索引,采用的innodb的存储引擎。
基础方面
- 面向对象怎么理解(封装,继承,多态),结合项目说,毕竟我们的项目是private打天下。
- URL的整个解析过程(DHCP,ARP,RIP(这个比较熟),OSPF,BGP,然后是DNS的过程,TCP啥的)
- 单例模式,工厂模式(这个我很熟的,居然紧张到忘了抽象工厂),适配器模式(以及说了下后面项目的迭代如何使用适配器模式)。
- 最后就是聊聊天了。小姐姐的声音好听
二面
代码方面
- 给定一个有序递增数据,给定一个目标值,找到这个目标值的区间。
- 最大子序列和,这个我用的是贪心法解决的。
基础方面
- 操作系统的进程和线程
- 进程的通信方式
- URL的流程(和上面貌似冲突了,反正讲了很久,面试官说:你讲的太细了,大一点,分为几个流程(我就说了下:DNS解析,建立连接,数据交互,数据渲染,用户使用))
- HTTP协议,HTTP1.0,1.1 啥的,然后扯到了 一致性hash算法(从Http1.1的虚拟主机特性,扯到虚拟节点)。
- 最后就是问了下MySQL和Redis
- 反问了,我问了下是什么部门。面试官说了下部门主要是干什么的
隔一天OC。
2020.04.27左右
在拿到滴滴Offer之后,便开启了王者模式(可以一起玩王者啊,目前10+星),从钻石三天之内打到了星耀一。这时候有个微信好友告诉我面试,这个好友是孤尽前辈(阿里巴巴Java手册的作者)。他是之前加了我,只是问了下是不是“阿里三面止步”的那个小伙子,我说是的。这个时候我并没有反应过来,他是谁。后面有一次他发了朋友圈,我才知道他是谁,是的,他是赫赫有名的孤尽大佬。
我很后悔从他加我的那一刻没有去查查,很后悔拿了滴滴Offer便放飞自我。他提前一个小时告诉我面试,而这个时候我才刚打完一把王者。我慌了,拼了命的复习,我心想拒了面试算了。别因为这次影响我的面评(面试评级)。是的,我拒了,我说我已经拿到其他的Offer了。他说,面下,也是个机会。后面就面试了,很多都遗忘了,感觉面的很差。面试中,他告诉我,是他捞的我,现在这次面试就是重新三面,面过了就交叉面。我心中很震惊,也很苦闷。因为我的放飞,我可能错过了一次进入阿里的机会(但是没有后悔药了)。
2020.04.30
入职滴滴了!
因为疫情原因嘛,并没有现场实习,很可惜没有现场见到组里的各位同事,只能通过线上的视频会议进行沟通。
工牌和工作电脑在5.1假期就到了。
想知道我实习期间从事的工作,可以阅读BAT TMD 实习好玩吗?
阿里的面试还是来了
继孤尽前辈的三面之后,0571的电话在入职第二周左右来了。由于我并不知道是几面,当时应该问清楚一点,我就拒绝了。说已经入职滴滴了。所以,希望大家以后一定要问清楚到底是几面。因为阿里捞人可能从一面重新面,也有可能是后续的流程。所以这个电话也有可能是交叉面或者重新三面,如果是的话,我又错失了一个进阿里的机会。也正因为如此,我秋招面试阿里的时候,基本都会被问到当时为什么拒绝阿里的面试。
不过最后结果还是挺满意的,秋招通过了阿里的面试,并也签完了三方。年后就进去实习。
2020.07.01
我从滴滴辞职了,正式踏上秋招的战场。这一天很淡然,因为我不想错过秋招。哪怕最后遍体鳞伤,我亦不后悔。其实很多人还是希望我在滴滴转正,我也不是不甘心,我只是想出来看看,仅此而已。
最后
主要是分享我的春招实习经历,也分享了很多干货。希望通过这帖子,小伙伴能获得一些成长。好了,这便是这帖子的所有内容。
我是Laochou,一位又老又丑的前行者!!!下期见。
最近做的一个公众号,欢迎关注呀
全部评论
(7) 回帖