找工作之旅总算结束了,期间断断续续的拿了几个offer,最后选择卖身美团点评。写此文章纪念一下过去的找工作之旅吧,顺便也发发面经。

7,8月:准备

复习的方向

  1. java编程基础
  2. jvm虚拟机
  3. 并发
  4. SSH框架
  5. 数据库
  6. SQL优化
  7. 操作系统
  8. Linux
  9. 数据结构
  10. 计算机网络
  11. 刷题

并制作了便签放在书桌前,如下:

复习的相关书籍

  1. 《java编程思想》
  2. 《深入理解java虚拟机》
  3. 《java并发编程的艺术》
  4. 《Linux命令行与shell脚本编程大全》
  5. 《操作系统:精髓与设计原理》
  6. 《剑指offer》
  7. 《leetcode题解》
  8. 《看透Spring MVC:源代码分析与实践》
  9. 《Spring实战》
  10. 《Head First 设计模式》
  11. 《深入浅出MySQL》
  12. 《数据结构与算法分析:Java语言描述》
  13. 《计算机网络》

主要知识点

Java基础

这部分主要是依赖《java编程思想》,基本上把书的重要章节刷两遍就可以了,一般短的章节一两天可以刷完,长的章节比如并发那块需要三天左右,一定要耐心看下去,收获会不小的(书中关于图形界面和测试相关的可以先不看)。其中,关于常见容器,比如HashMap,Hashtable,ArrayList等要主动去看jdk源码,理解底层具体是怎么实现的

JVM

这部分的细节主要就是靠《深入理解java虚拟机》这本书了,作者写的非常好,很容易理解,也是至少刷一遍

并发

并发这块其实面试的时候问的最多,《java编程思想》,《深入理解java虚拟机》两本书中也有涉及,但是《并发编程的艺术》这书从底层讲述了并发的原理,可以配合其他的书相辅相成的看,而且可以面试的时候展示出对这块了解的深度

操作系统

操作系统由于之前没学过,看起来比较吃力,而且纯看书也比较枯燥,此处重点推荐下coursera上的北大的操作系统公开课,边看视频边辅助看书,轻松不少,也更加容易懂,就是需要花的时间较多,建议利用碎片时间看看

SSH框架

本科的时候只用过Struts2,其他的两个Hibernate和Spring完全没用过,但是根据最新的公司需求来看,Spring是使用需求最高的,Struts2用的已经很少了,因此只需要看Spring相关的就行了,Spring要看的点主要是:

  1. Ioc
  2. Aop
  3. Spring mvc

把上述的点都理解了基本就可以了,《看透Spring MVC:源代码分析与实践》和《Spring实战》这两本书都讲的可以,都能从源码的角度进行分析,达到完全的理解

数据结构

这块我主要就是根据《数据结构与算法分析:Java语言描述》这书来复习的,理解每个数据结构的原理,以及如何自己实现;各个算法的实现,时间空间复杂度的分析;二叉树的递归处理等。基本把书过一遍,之后就通过刷题来巩固了

数据库

数据库这块的复习主要就是《深入浅出MySQL》这本书了,这本其实将的也不深,主要就是对基本命令的复习,数据库这块除了基本的使用之外,还有事务,数据库引擎,范式,索引,优化等方面的知识也很重要,这部分主要是在网上搜博客进行专题复习,效率也挺高

Linux

linux这块主要就是复习基本指令的使用和shell编程了,基本看下《Linux命令行与shell脚本编程大全》这书就基本够了。还需要对常见的工具命令awk,gawk熟悉下,面试的时候考的挺多。
如果之前对linux很不熟悉的话,不建议在这块花太多经历,因为这不是必备技能而且要记的东西太多。如果之前用linux用的很熟基本上复习一下就可以了,这块的使用重点还是看平时吧,短时间突击不了。

计算机网络

基本把TCP/IP那一块的东西重点看下就行了,包括路由,拥塞控制,三次握手等,把书翻一遍,然后根据相关的面经复习即可

刷题

刷题主要就是对前面看书的巩固了,主要推荐牛客网啊,真是太好用了。前面的知识点的选择题都可以上面找到,还给你分类了,特别赞。
刷编程题的话建议先把《剑指offer》这书刷完,刷的时候最后看完题目,自己先做,然后再和答案比较,这样印象较深,直接看答案容易忘。刷完书后可以在牛客网的在线编程那再把剑指offer的题刷一遍,上面原题和测试案例。之后就可以刷刷leetcode了,建议刷的时候可以根据专题来刷,比如一次把动态规划的题刷完,这样会对动规有个更深刻的了解(leetcode题解中作者已经分好类了,感谢@soulmachine)
(以上只是我的学习方法,不一定是最合适的,但是我觉得效果还可以,如果有更好的方法也可以交流下。同时分享下期间整理的各知识点的面经,基本都是从牛客网上找的,戳这里 (访问密码:SDopEJ))

9月:各种笔试+面试

9月就是疯狂的投简历了,还好基本上都是线上的,不需要到处跑,投的公司用org-mode来记录,防止到时候忘了笔试2333。
笔试了那么多,挂了一大批,还是有点菜鸡啊,所以下图大部分的更新都是笔试已挂QAQ
到最后能到面试环节的基本也就:华为,京东,趋势科技,美团点评,广联达。上述几个公司面完后拿到了offer后,后面好多公司就不参加笔试了,基本就开始玩了。

面经

中船重工724研究所

这个是九月初师姐给我内推的,去那面试主要就聊了下我研究生期间的项目,由于也是雷达相关的,比较对口,加上我是项目负责人和师姐的推荐,面试官面了不到20分钟就开始问我成绩单和三方带没带,准备签了,当时把我吓蒙了,这也太突然了吧,我说我啥都没带,然后他让我带上材料第二天去电科大找他。
回来的路上就开始纠结了,和师姐,和父母都商量了下他们觉得待遇还可以,而且公积金特别高,在南京买房压力没有那么大。我当时也动摇了,晚上回来又和同学聊了会,都说还可以,我也就准备签了。
半夜睡不着开始刷知乎,各种看关于军工研究所的生活以及前人的反馈,越看越不适合我,我不希望过一眼能看到几十年后生活状态的平稳的生活,于是觉得第二天去看看,能不能要高点价,不能就不签。
第二天去了,问能不能涨薪,回答:不能,你考虑好再签。然后就不理我了,感觉完全不想是那种求贤若渴的感觉,而是你不签的话后面排队的人多的是。于是就回来了,此offer作废。倒是挺对不起师姐的,麻烦了她好久,最后还没签,改天去南京请她吃饭!

华为

华为面试是在酒店举办的,先进行性格测试,然后有两面,分别是技术面和综合面?反正我两面都是问的项目相关的。
一面:面试官上来就让我自我介绍,我就简单介绍了下,然后开始各种吹项目,说的过程他就简单提几个问题,基本答上来了,除了一个,好像是问我了解微服务吗?我说不知道,然后谦虚的问他是什么,他就详细的给我介绍了下。所以面试的时候遇到不会的,不虚,可以适当的求问一下,也显示出你的沟通技巧。但是一些基础问题就不能反问了,容易引起反感而gg。
二面:面试管貌似是个高层,头发都不多了,上来就盯着我研究生期间的项目问,貌似他也对通信懂一些,然后一直质问我这个项目存在的意义,说这项目是骗政府钱的,我当然就急了啊,跟他讨论半天,他还是不服,我后来想想,算了,在面试呢,认怂,笑笑不说话了。然后他又开始问我为什么读的通信研究生却报的软件开发岗啊。我心里想:钱多啊,但是又不能直接说,于是微笑着说:因为感兴趣啊!他听完嘀咕了句:敲代码有啥兴趣。。然后开始说,java,操作系统,数据库这些课你都学过吧。我说:恩。心想,尼玛终于开始正题了。 结果。。。。他下一句问的是,你有女朋友吗? 我????没有!!!他接着问:为什么选择去杭州?不留成都? 我:那边有亲戚(其实没有),更喜欢杭州这城市。 问:有没有投阿里的公司? 答:投了内推,但是还没给我打电话(后来想想我当时真是太实在了,没挂掉算好事)。然后面试就结束了,说后期再联系我。
然后就一直等到中秋节才给我发了第一批的offer。但是发了offer后迟迟不谈薪资地点,我只好又出去到处找其他的呢,其实当时直接谈的话可能就直接签了,毕竟内推的时候没公司鸟我,让我很受伤。国庆后来谈了薪资,上海,14K*14。

趋势科技

趋势这个公司算是南京很棒的公司了,然后之前因为陪朋友去过公司面试,也算是有缘分了,因此就特别想去。趋势的笔试在川大,那天由于去的早,去教室休息的时候顺便把在教室里宣讲的广联达的笔试也做了。
趋势笔试的时候发现题基本都是c++加安全的题,完全看不懂,全是蒙的,编程题有两道,做了一道,然后就交卷了,心想这尼玛要是都能过笔试的话,改卷的人绝对眼瞎了。
然后当晚居然收到了面试通知,当时感觉真是中了彩票。
面试的时候一面面试官是个年轻的小伙,年纪应该和我差不多大,交流的很愉快,主要讨论的是我简历上项目的东西和一些基础。
直接过了第一面,到第二面。
二面是小组长和HR的综合面,由于组长不会java,就问了我几个关于缓存和linux命令相关的东西,没有答好。最后,问我为什么想加入趋势?我说根据以后物联网的发展趋势,安全必不可少,而且会越来越重要,而且对这块也比较感兴趣(自己给自己挖了个坑QAQ),他说:既然对安全感兴趣,平时有没有主动去学习安全的知识或者逛安全的论坛。 我:.....
不出意外的挂掉了....

相关面试题:
* final类名表示不能继承类,如果不用final,怎么实现这个功能?
* 多表连接如何实现删除数据?
* 读取日志文件如何实现实时在屏幕上滚动?不用vim,怎么定位关键词,用什么命令?
* struts2流程说下,怎么实现? web 框架实现方式? 用过Hibernate没?
* 分布式缓存怎么搞?缓存应用场景?怎么实现?
* 说下索引?怎么实现数据库的优化?

广联达

广联达的这个offer完全就是运气捡来的,因为之前完全不知道这个公司,以至于我到拿到offer后才去了解了下这个公司具体是干啥的。。。
继上次顺便的笔试之后,当晚收到第二天面试通知。中午11点进行的面试,面试的时候先给了一个编程题,看能不能短时间内做出来,是关于一个二叉排序树的题目,直接说了下思路就过了。然后就是问一些基础的东西和项目相关的东西。由于问的比较简单,基本都答上来了,直接通过。
由于下午要去美团面试,因此一面面完后直接加面了综合面,无非就是继续谈谈项目,看你怎么管理的项目,怎么理解自己做的项目,还有平时的兴趣爱好等,我感觉回答的都很好,因此毫无悬念的拿到了offer,17K*14,算是我所有offer里面最高的了吧,真是挺意外的。

京东

京东面试环境挺糟的,在一个大厅里面,有好多组同时在面试,很嘈杂。
一面上来就强调岗位在北京,可是我报的是杭州啊,当时就有点不爽,但只能说可以考虑去北京,然后开始面试。面试就问了十多分钟,基本都是基础,但是范围挺广的,直接过,就不说了。
二面的面试官上来就盯着数据库猛问,由于这块是我的弱项,问的我直流冷汗,感觉可能要gg了,后来话题转开后就轻松了。中间他还问我怎么看在北京工作,我说我肯定不会在北京定居啊,太远了,干几年就跑(我还是太实在了啊2333)。最后快结束的时候面试官纠结我能不能去实习,我说12月之前不能去,他就表示不太乐意。于是我只能说回去和导师商量下,他才让我过了。
HR面没啥好说,就是一些简单情况的了解。
国庆回来之后给了我拒信,我估计是因为我表达了不想去北京和不能实习的意愿导致的。

相关面试题:
* 写代码实现多线程读文件并写入到数据库
* JDBC数据池怎么配的?
* 索引了解吗?怎么建的?怎么优化?
* MySQL分布式怎么搞?
* 知道缓存吗?什么时候用?知道redis吗?详细说下
* cookie和session区别,session放到服务器放不下怎么办?
* Java怎么操控XML文件?如果xml文件非常大,不能一次读入内存怎么办?
* 用过哪些设计模式?
* Struts2中filter主要用来干啥?常用于实现什么功能?
* 用过哪些JSP标签?<s:iterator>怎么用?
* JSP与servlet区别?servlet有哪些方法?servletRequest头里面有哪些信息?
* 外键了解吗?级联呢?
* 你的blog里面有啥内容?
* String是final类吗?String a = "abc"+"bcd"发生了什么? “+”怎么实现?
* DBSCAN怎么用的?
* sychronized, lock, volatile介绍下

美团

在所有面试里面,我觉得美团的是最让人舒服的,也最专业。面试都是在单独的酒店房间里面,绝对安静,而且问的也很专业,态度也很诚恳,等候厅还有吃的喝的,唯一不好的就是通知面试的时间总是在半夜两点。
一面面试官是个女的,一脸严肃,进去后简单的自我介绍后,她就拿到我的简历,在技能栏那里圈出了8个关键词,当时我就虚了。首先先让我手写一个生产者消费者模式,然后开始一个点一个点的问,一共问了1小时40分钟左右,都快虚脱了我。庆幸还是过了。
二面面试官是男的,就问了几个问题就结束了,差不多半小时,我当时都以为我估计要挂了。结果回来半夜两点收到第二天的三面通知,好开心!
三面是平台事业群的boss,很有气质,上来就自我介绍,然后开始面试。三面主要考察项目相关的东西,我详细说了我管理的项目,我的专利和论文。最后简单问了点技术的东西和一些性格相关的问题就结束了,全程聊的很愉快,于是过了三面。
HR面主要问了意向工作地和一些性格相关的东西,15分钟左右就结束了。刚面完的时候我想要是美团要我我就来美团了,体验超棒!
过了几天就收到offer了,超级开心。国庆后来谈的薪资和地点,事业群是到店综合事业群,坐标上海,虽然是批发价,但是也很开心了。

相关面试题:
一面:
* 面对过程与面对对象的区别
* 了解哪些设计模式,运用场景?
* 访问一个网站的实现原理,越详细越好?
* 写一个OOM,Stackoverflow的案例
* 说说有哪些回收算法?
* 虚拟机有哪些区域,具体存了什么?
* 哪些是GC Root对象?
* Myclass A = new Myclass()虚拟机发生的过程详细说下?Myclass文件存在哪个区域,什么时候会被清除?
* 知道哪些GVM调优,参数是什么?
* 年轻代怎么进行垃圾回收?
* CMS缺点是啥?
* Sychronized实现原理?monitorentor指令存在哪?该指令在class文件中占几个字节?
* Reentrantlock实现原理?
* Sychronized与lock优缺点比较,性能比较?
* final, sychronized, static, transient, volatile说一下?
* volatile怎么阻止指令重排?内存屏障指令是啥?
* sychronized在哪个包,java哪个版本发行的,之后的版本做了什么优化?轻量级锁,偏向锁怎么实现的?锁的标识位存在哪个位置,几个字节?
* 操作系统的线程与java线程有什么关系,怎么对应?
* 用过什么数据库引擎?支持事务吗?Innodb怎么实现事务支持?
* linux怎么查看cpu信息?除了top,如何查看多核的cpu信息?
* 数据库查询非常慢,如何定位到问题?
* threadlocal说下?如果线程消亡后,留下threadlocal逻辑上会有什么问题?
* final会影响指令重排吗?
 class A
 { 
  private final String a;
  public String b;
  A
  {
   a = "abc";
   b = "abc";
  }  
A aa = new A();
那么A.b有没有可能为null
* final初始化顺序问题,下面哪个对?为什么?
class A
{
 final static String A;
 static
 {
  A = "abc";
 }
}
class A
{
 final String A;
 A()
 {
  A = "abc";
 }
}
* 给一个美团的log文件,log文件的格式为:年-天-小时 用户名 ip
用awk统计出ip出现次数超过1000的ip。

二面:
* 假定一个数组,先升序再降序,如何快速找到最高的那个数字?
* sychronized介绍下?
* 浏览网页的过程,越详细越好?
* traceroute实现原理?
* sychronized(obj.class)
{
 //多个线程可同时进吗
}
* 虚拟机有哪些回收算法,优缺点?
* 用过哪些设计模式?
* 说说项目,专利,论文?

10月:offer选择

广联达钱最多,华为和美团钱差不多,但是美团加班少,且自由,而且公司的技术氛围很好。所以,美团和华为相比,直接选了美团。广联达多了3W让我很是纠结,后来联系到了一个在广联达的师兄,他说广联达其实挺好的,但是更推荐我去美团,他的原话是:看你着眼现在,还是着眼未来,技术长进了,那点钱是小事。
于是,决定去美团点评了!寄了三方后,秋招就结束啦,剩下的就是把项目结题,毕业论文搞定,如果还有时间的话可以去美团点评去实习下,提前学习下。
over。