阿里、百度、搜狐、优土等互联网公司面试经验总结

时间:2020-08-12 21:19:30
  这个跳槽季大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面经,
  我现在主要的方向是Java服务端开发,把遇到的问题和大家分享一下,也谈谈关于技术人员如何有方向的提高自己,做到有的放矢。

一、面试遇到的问题        

1.百度  
百度最近真是炙手可热,贴吧事件刚结束,医疗竞价排名又闹得沸沸扬扬,一些论坛上连带程序员都开始招黑了,友谊的小船可是说翻就翻。
说回面试,百度面了两次,分别是百度糯米和金融事业部,百度目前只有这两个部门的招聘岗位和我比较匹配。
面试都在西二旗的百度新总部,园区还在施工,离地铁也比较远,需要打车过去。
面试官自带电脑,整个面试过程都在记录,首先详细询问了最近一份工作项目的架构和工作内容,
面试主要围绕工作中用到的组件和中间件技术来扩展,考察掌握程度。
MySQL InnoDB存储的文件结构
索引树是如何维护的?
数据库自增主键可能的问题
Redis的主键争用问题如何解决
了解Redis事务的CAS操作吗
分析线程池的实现原理和线程的调度过程
动态代理的几种方式
spring AOP与IOC的实现
为什么CGlib方式可以对接口实现代理?
RMI与代理模式
Dubbo的底层实现原理和机制,
描述一个服务从发布到被消费的详细过程
算法方面考察了一个简单的数组就地去重问题,用丢弃数组尾部元素的方式实现了。
百度金融的面试安排在了周六,最近应该在各种扩张,各个招聘网站随处可见招聘启事。
一面面试官很赞,态度认真,有些问题没有思路会给你提示,交流的不错,二面被告知缺少金融支付背景,
不过作为一名工作不到两年的新人,我觉得被Pass主要原因应该是工作经验比较少,教育背景也不太亮眼。
面试中的问题:
分布式系统怎么做服务治理
接口的幂等性的概念
Maven出现版本冲突如何解决
JVM垃圾回收机制,何时触发MinorGC等操作
新生代和老生代的内存回收策略
Eden和Survivor的比例分配等
Synchronized和Lock的区别
两次面试,感觉百度的流程比较严格,面试官挺不错的,简单可信赖,虽然工作中一般都用谷歌,
想起一个段子,哈哈。
有次面百度,我提到了一个比赛,面试官很感兴趣,想搜一下,
于是先用百度搜了一下关键字,首屏没有找到,面试官面不改色,熟练的打开了谷歌输入关键字,发现第一个就是官方网站。


2.阿里巴巴

在内推网上收到了阿里菜鸟和阿里云安全部门的面试,后来参加了阿里云的面试。
阿里的面试安排的很快,这次止步二面,两轮面试都是电面。听朋友说阿里五轮面试,四轮技术一轮HR,技术面试是部门的几个同事交叉面试,也有了了解。
一面总体上还是围绕项目架构、Java基础、JVM、并发编程、数据库操作、中间件技术和Dubbo服务治理框架等展开,
可能因为是云安全部门,有一半时间在考察JVM,还提问了一些编译优化的知识,
一面结束后很快安排了二面,相对一面,二面的问题更深入,问题比较刨根问底,更加注重对一些技术细节的理解和把握。
比如数据库操作,面试官会详细的问你数据库插入和删除一条数据的过程在底层是如何执行的,项目里配置了读写分离,也会比较深入的就实现方法和底层逻辑展开讨论。
一些值得记录的问题:
JVM内存分代,
Java 8的内存分代改进
深入分析了Classloader,双亲委派机制
JVM的编译优化
对Java内存模型的理解,以及其在并发中的应用
指令重排序,内存栅栏等
HashMap的并发问题
了解LinkedHashMap的应用吗
在工作中遇到过哪些设计模式,是如何应用的
由于阿里杭州目前社招都是P6起,自我感觉和岗位要求有差距,二面在电话里和面试官交流了,没有再参加后面的面试。
两次面试,阿里给我留下的印象很好,面试官都是大牛,面试结束后第二天,收到了阿里的邮件拒信,点赞。
阿里的岗位大都在杭州,面试结束特意关注了一下那边的生活成本,目前杭州房子均价不到两万,相比浙江一些县市的房价都破两万,杭州的房价应该比较正常。
如果拿到阿里和网易等几家互联网公司的高薪,买房和生活的确比北京要轻松很多,果断决定再沉淀一段时间,两年后P7再战。


3.优酷土豆
优酷的面试都是二对一,每轮面试两个面试官,
一面比较顺利,主要是Java基础,Spring原理,Java NIO,并发和集合框架等,
可能是因为视频网站,优酷考察网络原理的知识多,比如TCP/IP协议、长连接与短连接等。
一面提到了自己可能会在下半年学习大数据与机器学习相关的知识,二面就在这上面栽了跟头,问了很多海量数据的问题。
TCP/IP协议
长连接与短连接
mapreduce过程
多路归并的时间复杂度
海量url去重类问题
Java NIO使用
倒排索引的原理
对分词技术的了解
面试中给了一个具体场景,考察对MapReduce过程的理解,比如Map阶段和Reduce阶段是如何进行的等,
Reduce阶段面试官希望分析给出一个多路归并的时间复杂度,用外排序的知识简单分析了一下,回答的不太好。
回来以后搜索了胜者树和败者树的优化,发现这里面的内容还挺多,深刻体会到有些知识点如果平时掌握的不够全面深刻,很难信手拈来。
 
4.搜狐新闻
搜狐最近应该是没有招聘计划,面试等待时间比较长。
做了笔试题,一面是个和我年纪相仿的面试官,针对笔试和简历提问了一些基础问题,聊得挺投机,
二面技术经理就比较偏架构和中间件的应用,提问了项目,主要考察了服务治理和消息队列等中间件使用的问题,
消息中间件如何解决消息丢失问题
Dubbo的服务请求失败怎么处理
重连机制会不会造成错误
对分布式事务的理解
深入分析几个设计模式
面试最后提问了一个不定长字符串转为定长字符串的问题,
刚刚面过优酷,这个简单的问题被我想复杂了,没有Get到面试官的点,考虑了唯一性,性能等,扯了一大堆。
也提醒一下大家,面试过程中要保持清醒,不要有思维定式,除非是底层研发岗位,社招对算法的考察不会特别难,用正常的思路去解决就可以。
 
5.58赶集
58总部在798附近,全天有班车可以过去。总体上,感觉面试官的问题非常接地气,
三轮技术面,大部分是实际场景的算法和系统设计类问题。
HTTP请求的报文格式
Spring的事务实现原理
实际场景问题,大量用户数据如何在内存中排序和去重
缓存机器增删如何对系统影响最小,一致性哈希的实现
Redis持久化的几种方式
Redis的缓存失效策略
实际场景问题解决,典型的TOP K问题
实际场景问题,海量登录日志如何排序和处理
SQL操作,主要是索引和聚合函数的应用
三面面试官提问了一些优点和缺点的自我评价类问题,简单交流以后对我给出了一些中肯的建议,非常感谢。
 
6.国美在线
国美在线面试最开始是部门经理沟通,在知道我毕业不满两年以后,重新去做了一份笔试题,
题目质量不错,主要考察Java基础,数据库,设计模式以及数据结构,要求写出B-Tree的节点结构,
算法题目是一道等概率抽奖的题目,用蓄水池抽样算法解决了。
SQL语句编写
MySQL的几种优化
Spring行级锁
Spring衍生的相关其他组件整理
RMI的几种协议和实现框架
BTree相关的操作
数据库锁表的相关处理
考察跳台阶问题
和面试官的交流比较轻松,面试官提示我要加强数据库操作的掌握,另外面试过程中询问了一些工作中用到框架和组件的版本等细节问题,平时没太关注,
后来思考了一下,对开源组件的应用,版本的管理很重要,不注意可能会发生一些诡异的问题。
 
7.去哪儿网,口袋购物等公司
除了上面的公司,还参加过去哪儿网,口袋购物,链家等几家公司的面试。
去哪儿网中规中矩,口袋购物的工作环境非常不错。链家网最近有新浪的鸟哥加入任技术总监,在IT圈子里挺火,面试了链家旗下的两个租房部门,技术氛围不错,前景看好,很值得去的一家公司。
几家公司的模式和问题都类似,注重对基础和编程能力的考察,以及对分布式系统设计和架构的理解,一些有代表性的问题: 
JVM内存查看与分析,编写内存泄露实例
线上CPU100%,如何定位和排查问题
如何在运行时确定对象类型?
引用传递和值传递
类加载过程,如何获得当前对象的ClassLoader
Git操作,Maven多项目聚合
10万个ip段如何快速查找
Java内存模型,volatile和i++的线程安全
线程池实现原理,Lock机制的实现
JVM对final关键字的编译优化
ConcurrentHashMap深入分析
HashMap和HashSet的使用
Synchronized和Lock的使用
Dubbo底层实现,Dubbo相比webservice等方式的优势
设计模式,服务治理等
Spring动态加载数据源
Spring boot应用
Spring中的设计模式
Linux的常用命令,简单shell编写
Linux系统监控命令
Redis的持久化方式
缓存和数据库的一致性问题
Redis、MongoDB和Memcached的区别
Solr和Lucene,中文分词技术
爬虫的深搜和广搜,队列和栈
数据库索引的实现,B+树的结构和操作,为什么不用红黑树
SQL表设计 Join操作
数据库范式,聚集索引与非聚集索引
数据库存储过程,SQL注入
值得一提的是一家创业公司的面试,过程十分简单粗暴。
没有自我介绍,面试官看完简历就在白板上提了一个多线程调度问题,递过来MAC就开始敲代码+_+
写完以后我表示这题目意义不大,问了Redis,要求十五分钟实现一个LRUCache,再次现场写代码。
写到一半面试官看没问题就打断了,问对公司有什么想了解的,等了一会让我回去了,就这么被Pass,创业公司效率果然高(此处/dog脸)。
 
上面提到面试中要保持清醒,比如ip段查找这个问题,首先是一个典型的查找问题,
明确了这个,就可以针对性的选择相关的算法实现,如二分查找、二叉查找树等。
另外推荐画图表达的方式。
做过的项目架构,各种框架和中间件的设计实现,通过画图的方式都可以很好的阐述,
可以随身带着纸和笔,面试本来就是一次很好的学习过程,一些问题也可以记录下来。
一般来说,面试过程类似一个寻路算法,交流过程中如果提到了面试官感兴趣的某一点,
就会就这个点展开,然后一直提出问题到你不能回答为止,或者你特别牛在这个领域直接秒杀面试官,这样一条路线走通,再换下一条路线。