分享面经与总结(京东+搜狐+CVTE,offer已get)
曾经有学弟问我,复贵学长很久都没写博客了,想想,确实是很久没写了。现在写下的这篇博客,正记录2017年春招两个月来的求职经历,终于还是收到了满意的offer,回想起来这段时间,真是刻骨又铭心。
基本情况:北理工软件学院大三本科生,简历上三个项目(自己设计需求,设计技术难点,并不是课程大作业)
我的求职意向是:Java研发工程师
面试经历:阿里巴巴蚂蚁金服支付宝、携程机票研发部、华为IT应用软件、CVTE,搜狐产品技术部,京东。
被淘汰:蚂蚁金服,携程
已收Offer:京东,搜狐,CVTE
待定:华为
阿里巴巴(一面)
阿里找了一个北邮学长的内推,准确来说应该是直推,是他帮我直接录的简历,他本科进的阿里蚂蚁金服,厉害吧?是真的佩服。第一次在官网上填资料,想想马云有多出名,想想蚂蚁金服这样的顶级技术,有些兴奋,有些期待。
录完简历后等待简历评估,原来,找内推不一定能得到面试机会,能不能得到面试机会要经过简历评估(我这才知道,原来内推免笔试可不是那么容易的…..),毕竟内推能免去在线笔试直接面试,互联网第一梯队像百度、阿里,腾讯的笔试真的很有难度,做过前几年这些公司的笔试题,真的太难了。在阿里的校招群里看到很多研究生研究算法,前端,java研发的,简历评估后直接变成已回绝没有得到面试机会。心想,我一个本科生,java研发都是自学的,项目都是自己设计的需求,简历也就一张纸,究竟能不能得到面试机会?
填完资料的一个星期后收到了支付宝的面试电话,突然变得好紧张,居然得到了面试的机会。
- 自我介绍
- 简单的介绍一下你的项目
- 一个有500个用户的广播系统,你怎么做性能优化
- 当用户提交请求后,却立即按撤回按钮,涉及性能的数据落地问题你怎么处理
- Lucene底层实现原理,它的索引结构
- ibatis跟hibernate的区别
- ibatis是怎么实现映射的,它的映射原理是什么
- Java I/O底层细节,注意是底层细节,而不是怎么用
- 你对mysql有什么了解
- 说一下数据库事务的四个特性,为什么mysql事务能保证失败回滚
- mysql数据库的锁有多少种,怎么编写加锁的sql语句
- mysql什么情况下会触发表锁
- 页锁、乐观锁、悲观锁
- tcp三次握手的过程
- 进程跟线程的区别
- redis的操作是不是原子操作
- ArrayList跟LinkedList的底层实现原理,使用场景
- B+树
- 一道算法题,在一个整形数组中,有正数有负数,找出和最大的子串
- 动态规划的思想
- 你有什么想问的
阿里一面过后变得怀疑人生,真的好多不会好多底层原理没答出来,第二天查状态,变成已回绝了。原来学习不能只学表面,作为一名研发人员,只知道怎么用是不够的,更多的应该知道底层原理,不然出现了性能瓶颈你怎么优化?你怎么扛得住每秒千万甚至亿的并发量?
有很多底层问题没答出来,接下来干嘛?学啊!
携程(一面)
携程又找了内推,直接面试。
- 自我介绍
- 介绍一下项目
- 你的并发项目有做过压测吗
- haspmap的底层实现原理,怎么解决冲突问题
- haspmap是否线程安全
- object对象的常用方法
- 你有什么想问的
携程一面后被淘汰,其实问题很简单,当初被淘汰了感觉很不解,有些郁闷,只不过是稍微犹豫了一下线程安全问题而已,最后也答对了。但现在想起来,连haspmap是否线程安全都要考虑,根本就不是一个合格的java工程师,被淘汰也是理所当然的。突然感觉自己学的好不扎实,变得有些焦虑,连java基础都存在问题,接下来干嘛,学啊!
被阿里跟携程拒绝后的一个多星期,没有接到任何面试电话,笔试了美团、今日头条,都挂了,变得没什么心情,其实之前也学了很多java的技术,但还是不牢固不全吧,继续补吧。
虽然很低落不过还是坚持天天看书。去牢实各种java基础,thinking in
java再看一遍;多线程,concurrent包;集合类,每一个集合类的底层,haspmap的底层源码,concurrentHaspMap的底层源码,更多地区理解为什么,而不是怎么样;看虚拟机从内存管理到类加载;java并发编程的艺术;复习servlet/jsp技术;理解ibatis的技术要点,ibatis的底层源码;复习操作系统数据库计网每一个讲过的重点;理解MySQL的技术要点;spring的核心技术跟思想IOC、AOP、springMVC;Lucene的索引结构,检索特点,为什么拿它来取代数据库的全文检索;Redis技术要点,从五种数据结构到乐观锁事务再到数据安全主从复制持久化…..;牢记Linux系统的常用命令与操作;经典的设计模式,单例懒汉恶汉等等;复习数据结构平衡二叉树B树B+树,复习算法刷leetcode…..当然,还有很多很多。
华为(技术面+综面,等消息)
在北研所的现场面,第一次现场面,但不紧张。经过之前的两次淘汰,觉得无所谓了,随缘吧,但底气也更足了,因为之前失败后的每一天都在进步。
技术面:
- 你拿过什么奖学金
- 你是哪里人,为什么跑这么远来上大学
- 进程跟线程的区别,多线程能不能布到多核CPU上运行
- 如果我要做一个简单的个人博客系统,有文字,图片,但都量很少,访问量也少,你怎么设计
- 如果我的博客系统图片特别多,访问量不高,你又怎么设计
- 为什么磁盘I/O阻塞代价很大
- SSD没有磁头,为什么I/O代价还很高
- 现在我的博客系统图片非常多,并发量非常高,你又怎么改进
综面:
- 你设计的网站有上线吗?有人用吗
- 你的项目都是课程大作业吗(当然不是….课程大作业哪好意思写到简历拜托)
- 如果你保研了你会怎么选择(自己作死回答了继续读研深造)
- 你意向的工作城市
华为问的问题都答上了。在北研所面试的时候身边的基本都是北邮北航北***华的研究生,简历有好几页,字还特别小,各种盖章论文;跟我一起综面的是北邮研二的学长,之前在英特尔实习过,还各种实习证明各种专利各种盖章,资料给面试官一看,面试官都惊讶了….而我只有一份简历,第一次感受到了本科生跟研究生的差别,原来这么大。
CVTE(笔试+两面技术+一面hr,拿到offer)
技术一面:
- 自我介绍
- 介绍一下项目
- redis的五种数据结构
- redis是怎么存储数据的
- 说出所有java集合类
- haspmap的get方法底层原理,是不是线程安全的,怎么解决冲突问题
- concurrentHaspMap的底层原理
- 学生表,成绩表,说出查找学生总成绩大于500的学生的姓名跟总分
- 刚刚的问题怎么建索引优化,建索引的sql语句怎么写
- java的类加载过程,为什么能保证java稳定的继承体系结构
- 你对jvm还有什么了解,说出java内存模型以及所有垃圾收集器相应的回收过程
- redis使用场景
- 你平时都用什么mysql存储引擎,说出Innodb跟MyISAM的区别
- 一个算法题,给出一个字符数组,找出第一个出现次数最多的字符,注意是第一个
- 你有什么想问的
技术二面(视频面,手写代码的过程被面试官看到):
- 自我介绍
- 介绍一下项目
- 你的项目怎么实现断点续传
- mybatis跟hibernate的区别
- Spring的核心技术
- Spring的源码有看过吗?Spring用到哪些设计模式
- 怎么优化mysql,具体方式
- 说出你目前掌握的所有后台技术
- 一道算法题,在一个整形数组中,找出第三大的数,注意时间效率
- 你有什么想问的
CVTE面试的问题,除了concurrentHaspMap回答得有些抓鸡,其他都答出来了。
搜狐(笔试+面试,已拿到入职邀请)
搜狐媒体大厦面试,问题很少。
- 查找的一道算法题
- 怎么优化
- 还能不能优化
- 再优化
- 第二道查找的算法题
- 怎么优化
- 再优化
- 在一张白纸上手写反转链表的代码
- springMVC的请求流程
- 聊项目项目项目….打开项目代码看代码
- 你有什么想问的
虽然搜狐面试的问题是最少的,不过算法题那块简直是煎熬,一直问还能不能优化,怎么优化,用什么优化,面试官也很友好一直在引导,中间涉及了java的集合类的接口使用,二分什么的都涉及了,各种时间复杂度,幸好之前有准备,踉踉跄跄地虎过去了算法的考察。
京东(笔试+两面技术+一面hr,拿到offer)
一面:
- 自我介绍
- 介绍一下项目
- java多线程有哪几种实现方式
- CountDownLatch
- Spring的核心技术
- 关于数据库事务说出你知道的所有
- 跟面试官聊天,说了很多关于登录验证的技术问题(有些紧张)
- 你有什么想问的
二面:
- 自我介绍
- 介绍一下项目
- 把你知道的java的concurrent包的技术全部说出来(volatile、锁重入,LinkedTransferQueue字节追加提高并发度技术,ConcurrentHaspMap结合volatile的happen-before读取优化)
- redis的配置文件(AOF&&Snapshot&&主从复制)
- WebSocket长连接问题
- 秒杀业务场景设计(事务,逻辑调整,行级锁,数据库并发度、mybatis调用存储过程)
- 会不会写前端(会,但也仅是会写,会写jQuery,CSS3)
- 你平时都用什么开发工具?IntelliJ IDEA相比Ecplise有什么好(快捷键)
- 跟面试官聊天,讨论了很多关于后台大并发量的问题
- 你今后的研究方向是什么
- 你有什么想问的
京东的问题都答出来了,感觉特别是二面真的很体现一个人的研发功底,幸好都答出来了,跟面试官聊他们部门的后端并发技术问题,简直受益匪浅。
以上的面试题很不全的,只是记得其中的一部分,毕竟时间有点久远了,仅供参考吧。
求职的这段时间,有最深刻的体会就是学一样东西,不能只学表面怎么调用API,更多的应该往深处去理解,理解原理,理解为什么。否则,出现bug的时候可能不知往哪调,出现性能瓶颈怎么做优化?后端要亟待解决的问题不就是大流量大并发量跟安全吗?其实,单例模式有三种书写方式,哪种性能最高呢?能从jvm的角度去解释清楚吗?其实,一个简单的synchronized关键字底层涉及偏向锁,轻量级锁,重量级锁的锁升级过程,你能结合并发度去解释清楚吗?你有没有想过为什么一般的索引结构都用B+树而不是B树跟其他数据结构?TCP为什么要三次握手四次挥手?少了其中一次行不行,会出现什么问题?多终端的session问题怎么处理?cookie的安全问题怎么解决?JDK发展到1.8以来集合类各种优化,concurrent包源码的优化,有去了解吗?大型网站的架构设计有了解吗?电商场景的数据一致性问题怎么解决?redis只能扛十万的并发量,那更多的并发量怎么处理?Spring的AOP底层原理是什么?ibatis底层映射原理是什么?Java I/O的底层细节有没有过了解?NI/O的底层细节怎么做了改进?你真的懂Hadoop跟Spark吗?你有研究过底层源码吗?还是只会调用大数据的api仅此而已?学java研发的人那么多,你怎么保证你比别人更好更值得企业聘请?
真的很感谢身边的同学,帮我分担所有的课程大作业任务,要不是有他们,自己也没那么多时间准备春招。本科生在茫茫研究生人海中要想得到大公司的赏识真的是不容易,京东二面的面试官问我为什么笔试的时候没有写编程题,我很明确的说我在研究java后端技术,所以算法部分很薄弱,笔试的编程题不会写。但不管怎样,最后他还是给予了我肯定,他说本科生能有这样的成就,很了不起了。跟我科普了很多后端技术,我也跟他讨论了很多技术问题,京东面试来来回回去了酒店三次,感觉真的不枉此行。
大学前三年也算是有自己执着的方向,自己设计需求,自己开发项目,一个个调bug,这其中当然也有上天的眷顾,如愿收到最满意的京东offer。往后的这段时间课也变多了,各种大作业,中软杯还要比赛,还要带学弟学妹,好多事情要做,相信会变得更好的~