面试宝典 - 他山之石

三跨学生的Java面经(头条、拼多多、华为、vivo)

作者:[数据删除]
原文链接:https://www.nowcoder.com/discuss/195640?type=2&order=0&pos=7&page=2

这是一篇迟到了一个月的总结。此时,我回到本科学校,坐在奋斗了2年多的自习室里敲下了文章的开头,也算是有始有终吧。

 

一、开篇

本人作为某211院校某土木专业下属二级专业的学生,大二时通过知乎发现本专业前景堪忧(改变人生的一个知乎问题!)早早地做出了转行的打算。承蒙南大不弃,最后跨专业保研到了南大软院,事实证明,学校的名声在春招时给我带来了很大的帮助,掩盖了跨专业的劣势。过了研一上学期,基本上寒假一回来,2月底就算就正式开始了春招实习。

 

二、before 正文

在面经之前,我想从切身体会上说两点很重要的场外因素:面试节奏和心理准备。

1.面试节奏

没真正经历过面试之前,我们肯定会想着:先面小厂练练手,再去面大厂。然而,事实上,并不是先小厂再大厂的节奏,而是大大大大小小小大大小小小小的节奏。大厂和小厂通常时穿插着面试,并且往往是大厂先面。这就要求我们一是从春招开始就做好全部的准备——就算深度可能不够,广度至少得覆盖大部分的知识点,做到就算31号面bat,起码能过1的水平。如果把握不大,不如拖两天面,这两天的成长会非常迅速(就像期末考前的两天)。我自己就吃了个大亏:腾讯一面非常查,postget都说不清(天知道我怎么想的),所以在别人腾讯2345面的时候,我整个春招只有这一次机会——表现太差了其他面试官也不会捞的。

考虑到我们的能力随着时间是慢慢增强的,所以个人觉得把最想去的公司安排在复习的中后期比较合适。当然,要考虑到hc的问题。拿我举个栗子,本来我3月上旬就官网投了头条,但因为种种原因一直没有面试,错过了3月下旬的一次集体面试,直到4月下旬才面试通过。相比三月面过的同学,我失去了部门的选择余地,但是三月下旬我也确实没信心能够通过面试。而且,针对头条这家公司,请一定先尝试内推,无笔试,能自由选部门,运气好两面进,最后再去官网投递!

2.心理准备

春招的战线能从2月拉到5月,十分漫长。中间不仅要看书学习,还有不断的面试,以及学校可能安排的课程与考试,所以心理健康很重要啊。各位大兄弟有女朋友的抱紧女朋友,没女朋友的抱紧舍友吧(在此鸣谢我的几位舍友们!)

另外,在春招之前就要有马上要面临春招的心理准备,理想的时间线是:

去年11-12月认识到要找实习,开始带着刷题、看面经资料(算法是最难突击的)

寒假没项目的做一个有深度的项目(非crud),有项目的深挖项目(分布式、高并发往上怼,万恶的阿里)

31号开始春招,海投并准备面试。

3-4月:(腾讯、阿里、网易等大厂的提前批阶段,头条、pdd的滚动面试阶段、其他厂也陆续开始)边学习边看面经边面试,面试崩了心态别崩,总结教训,下一场好好面。建议先拿一个offer再说,不然后面心态容易炸。

4-5月:(腾讯、阿里等大厂的正式批,头条、pdd的滚动面试阶段、华为、蓝绿陆续开始)大佬这个时候已经拿到offer了,像我这样提前批凉了的就好好准备正式批吧,依然是面试和学习交叉进行。腾讯不锁简历,被捞了就能面。阿里一个阶段只能面一个,慎重选择部门,别头铁。蓝厂只要一面就能进,性价比太高了。华为也很好,2面问了问基础,就是性格测试比较玄学(谁能想到现在海思被推倒了风口浪尖)。

5-6月:大厂基本都在之前结束了,但是华为是个例外,offer发的慢,入职也慢,慢慢等开奖吧。不过这个时候还能接到没招满的部门的电话,可以捡个漏。我甚至在头条总部大楼里接到了阿里一个部门的面试电话(= =

 

三、正文

以下按顺序贴一下我面的各厂的面经。

网易一面(互娱)

自我介绍+项目

RPC框架和普通http有什么区别和优势? 基于Tcp封装还是http封装的

rpc是长连接吗?如果要传输一个特别大的文件 底层还是基于流吗? Nio是一个什么IO模型?

github了的watch star fork

异常和error的区别,oomerror还是异常?什么东西分配在堆上和栈上?

只对堆进行gc 这句话对不对 调用system.gc()马上就执行gc

缺页中断 分页地址转换 内存抖动

linuxfork指令对数据的拷贝是马上就拷贝的吗?

linux看网络状况用什么 看日志用什么?

拥塞控制 以及里面的算法?流量控制的协议

Ping命令做了什么?基于那一个层?ping是哪一个层的?

MysqlRedis最大的区别? MyISAMInnoDB的区别?

Redis 的实现。为什么这么高性能 ?set kv键值对进去的时候,kv键值的长度是不一样的 你觉得底层的数据结构是一样的吗? 持久化的策略 长久下来aof文件会很大 怎么办?InnoDB行锁的分类 (其实就是排他锁和共享锁)

Select from update 是什么效果?事务你平常是怎么处理的?

两个队列实现一个栈、圆里均匀地生成点(极坐标系)

ps命令的底层实现(???

类加载器 自己写过没

网易二面(互娱)

自我介绍,爬虫项目功能介绍

爬的是静态网页,还是异步加载的,怎么爬异步加载的?性能怎么样?如果性能要求高,怎么办?

介绍一下协程 实现原理

一个协程爬网站的时候 被卡住了 同一个进程的协程会不会卡住

协程的好处 和线程的对比

协程能解决什么问题

有做压力测试吗?什么情况下需要用协程

协程底层机制 yield底层实现

rpc框架全双工 还是半双工 单向还是双向

不考虑全双工 在半双工的情况下 如何实现双向?如果要实现双向的话 应该用长连接还是短连接?

用短连接能不能实现半双工通信

如何实现异步地获得一个RPC调用的结果

RPC的通信格式是基于javaAPI实现的吗?

你用过什么通信格式?这几个库能不能跨语言?

Springboot有什么技术难点?设计微服务的系统要注意什么问题?你是怎么理解微服务的?

应用可以做到水平扩展,那数据库怎么办?

redis怎么保证缓存一致性

微服务中会指数级增加复杂度的地方

场景:一千个微服务 中有一个发生故障 怎么迅速定位?

 

腾讯一面

你知道哪些RPC框架

RMI怎么实现的?

Netty里的线程池用的是什么?

线程池的参数怎么设置?如果请求书超过了线程池的线程数会发生什么?

restfulAPIRPC的区别

你为什么用SpringBoot这个版本,相比于Spring框架有什么优势?

你对SpringCloud有了解嘛?

爬虫速度怎么样?单进程还是多进程?

访问频繁被禁用了怎么办?

什么是协程?协程和线程池的区别?

Mybatishibernate的区别

一个sql查询慢,百万级别,单表,你觉得性能问题可能出在哪?

如果两表查慢,问题出在哪?

Inner join left join 性能不同,inner join反而慢是为什么?

redis怎么实现消息队列?怎么实现分布式锁?

说几个head首部。Content-type类型有哪些。getpost区别?

 

阿里(业务平台部)一面

怎么解决消息队列重复消费

MQ为什么能单机抗很高的并发量

Netty里序列化的方式

如果说想提高性能 用什么序列化方案?

Netty线程池:nioeventloopgroup 串行无锁化 threadselector的封装

线程池的设置参数

线程数量怎么定的:n+1 2*n+1

有没有测过不同线程数量对于性能的影响

你的web项目有几个表 分别是什么。

分布式事务实现方法?

update是原子性的么?

update会不会死锁

hashmap会不会死锁

concurrentHashMap:介绍一波1.71.8的结构

建索引的规范或者标准:

从宏观角度说一下数据库,是怎么做出来的

mysql的文件系统,是怎么找数据的?

数据量特别大的时候 mysql会怎么去做

mysql是怎么跟外部建立连接的

redis单一getset操作是不是原子的

为什么redis没有做成多线程的

设计一个秒杀系统:整个系统上考虑 后台的搭建 网站 和数据库设计。

允许上单的情况下怎么设计:就是比如整点抢购,每个整点都会有不同库存 不同价格的商品加入抢购

你对996怎么看?你对没有技术含量的工作怎么看

PS:有一句说一句,这个部门的内推人是我面过所有公司里最好的一个,这里吹一波。

阿里(业务平台部)二面

leftjoinrightjoin的区别

分布式事务的几种实现方案

高并***况下用哪种方案。

怎么优化使用rocketmq的分布式事务方案。

CAP原理

httpshttp区别

https可能出现不安全的地方

打开一个url,会经历那些过程:

这个过程中操作系统做了什么

向淘宝请求首页,怎么提高性能

如果为了被黑产爬CDN页面,而不用CDN,怎么在服务端实现静态页面和动态内容的merge

sessioncookie的区别、应用场景

如何保证cookie的安全性,比如你的cookies被拷贝了?

多重验证也不能保证安全性,应该怎么办?

可以把客户端所有的信息都拷贝走,如何防止这种攻击?

你知道那些rpc框架?dubbo的负载均衡?

cglibjdk的动态***的实现原理?这两者之间性能的区别?

动态***用多了之后对内存方面有什么影响嘛?

动态***、反射生产的对象在jvm的哪里?会不会影响到永久代或者是8以后的元空间?

大概说一下***模式?***模式和适配器模式的差异?

你觉得你说的***模式能实现适配器功能嘛?

java线程池ThreadPoolExecuter和四个自带的分别适合什么场景?

有全国性的奖嘛?有参与github大型项目吗?有奖学金吗?

PS:阿里对实习生要求很高,看他的意思是要已经学会了干活用的框架,去了就能干活的那种。

 

头条北京一面

PS:因为通过视频面试,没有录音,复盘问题不是太完全。这位也是我入职后的mentor

进程调度

tcp三次握手四次挥手,为什么是四次。

算法题:生成全排列,非递归中序遍历二叉树

头条北京二面

ThreadLocal的内部实现。怎么确定一个线程使用的是哪一个threadlocal

sync的内部实现,以及优化

sync标注不同的方法有什么区别。

算法题:把汉字表示的数字转化成阿拉伯数字(我竟然按阿拉伯数字转汉字来写了,还好逻辑没问题)

应用题:一个用组合模式实现的题。类似列出文件夹下所有文件。(手写有很多小问题,比如写错字,没有返回值)

树存数据库里有什么办法?

头条北京三面

吹项目。重点问了Netty,启动、连接建立、NIO特点、适用场景。

Spring的特点、IOCAOP

数据库索引、事务

算法:最小编辑距离。(运气来了,我刚好在几天前刷到原题,不然凉凉。就算这样,当场写转移方程还是漏了一个条件)

 

拼多多一面

PSpdd笔试真是奇葩,运气爆棚做出来3道过了笔试而同样做出来三道的大佬反而没过笔试……而且3月过了笔试,再我提醒hr之后4月才安排上面试…………

PS1:不过pdd面试体验真不错,确实比较基础。比阿里神仙打架友好多了!

说说8种数据结构

栈和队列的区别

生活中栈的例子:真没想到,这是我整场面试里唯一不会的

算法题:口述,还是TOPK原题……

n个节点的树可能的高度。最高和最低的高度

BST树的高度

项目难点

redis的使用场景,和memry***的区别

UDPTCP的区别

Mysql的储存引擎和索引

问了一个订单数据表(uidorderIdtimemoblie)每天2000w条,要存1年。应该怎么存?

最后还就我的职业规划,跟我聊了好几分钟!体验无敌

拼多多二面

先问项目。web项目背景。如何应对高并发、如何做分布式事务。

看过源码嘛?AQSconcurentHashMapHashMap。各个版本的区别说了一下。

1.8版本的concurentHashMap在单线程下和HashMap效率有什么区别

多线程方面学到了什么?Netty线程模型介绍一下、Java线程池四种介绍一下?

Nio特性介绍

你怎么自学看什么书:并发编程艺术

JMM内存可见性

还有什么能保证可见性:syncLock

怎么打断线程(没听明白问题,后面又扯到kill指令了)

问我之前的笔试题(一个多月了哪记得)

手写代码:没有任何算法,直接按题意翻译就行。但是太久没写了,写得十分差,bug还没看出来,还是面试官提醒得……

PS:与拼多多这个产品给人得印象不同,面试体验相当不错,也不是很神仙,可能是在高速发展期吧。

 

其他

蓝厂:现场面。问了很多spring相关的,比如如何解决互相依赖的问题。

华为:面试流程非常正式,还包了顿饭。如果不是随机分岗,华为真的很不错。

 

四、总结

整个春招期间,见识了各路大神,尤其是别人有了offer自己还没有的时候…………万幸在最后头条和拼多多给了一个达到我心理预期的offer,结束了2个多月的煎熬。

但是很遗憾,最终还是没有拿到BAT任何一家的offer,跟其他各路大神(比如舍友)比起来也是差远了;算法题也是因为之前没有积累,只是靠了运气过了头条的面试;每个知识点也没有深入地理解,背完现在已经忘了大半;以及最重要的,代码写少了!

过不了两个月就是秋招了,fighting

莫名其妙过了菜鸟5面,拿了offer,春招算是圆满了吧(虽然圆满的有点迟~

登录后发表评论