校招面试总结

上午十点五十左右的时候,浙江杭州的电话打过来了,以我的经验判断应该是阿里的电话面试,于是,迅速收拾了一下桌面,找出了几张白纸和一支铅笔,因为是一个人在宿舍,就开了免提(其实可以顺便可以打开电话录音,后续问题忘记了可以回顾,当时我忘记了),大概问的问题如下,有些可能记得不太清楚了。

阿里

一面问题

  1. 自我介绍一下。
  2. 大概做了哪些项目,印象比较深的,可以说一下。
  3. 项目里面用了哪些框架?(后续就根据项目框架提问)
  4. 为什么用springboot?(开发效率较高,免去复杂的配置,开箱即用)
  5. 谈谈对Redis的理解?(基于内存的K-V存储)
  6. 为什么Redis效率比较高?(数据在内存,读写效率高,map数据结构读写时间复杂度较低)
  7. 对memcached有了解吗?(处于跟Redis同一级别的缓存数据库)
  8. Redis一般用于什么场景下?(数据缓存,说了一个秒杀场景,读多写少,将商品的数据信息放在缓存中,能很大程度上减少数据库层面的访问压力。)
  9. Redis是怎么实现分布式锁的?(这个我忘了,但是我记得分布式锁有很多种实现方式,比如传统方式数据库实现、再就是用zookeeper实现、但是redis不记得了。)
  10. 既然提到了zookeeper,说说zookeeper是怎么实现领导人选举的?(这个说的不不怎么好,我把Raft协议中的Leader选举说了下,不过zookeeper是改进了paxos协议,然后自己实现了ZAB协议)
  11. Spring用了多长时间了,了解过Spring的源码吗?(用过,研究过Spring的启动流程,IOC,AOP特性等等)
  12. Spring的bean是怎么创建的?如果用注解方式呢?(这个回答的有点糙)
  13. Spring的AOP是什么?怎么实现的?(面向切面编程,说了一下AOP场景比如事务管理等,实现就是动态代理方式,有JDK代理和cjlib代理)
  14. 在什么情况下用cjlib代理?(当目标对象实现了接口的时候默认选择JDK代理,当目标对象没有实现任何接口的时候就选择cjlib代理)
  15. 有用过事务吗?(突然说事务,不清楚是什么事务,后面知道是Spring中事务,说用过,如果需要某一组操作具有原子性,就用注解的方式开启事务)在一个事务里面调用另外一个方法会怎样?如果另外一个方法也开启事务,两个方法是共用一个事务吗?独立事务怎么搞?(卒,这部分真不清楚,说不太清楚独立事务,项目里面用到的事务偏简单)
  16. 还用过什么框架?mybatis用过吗?谈谈对mybatis的认识?(就是个orm的对象映射框架)
  17. 开始了第二个项目,你在这个项目里面担任什么角色?(项目组长)做了哪些工作?项目结构是怎么样的?有多大的访问量?(没上线,不知道)?你是如何提高项目的性能和拓展性的?(性能真没有,拓展性回答了一些)
  18. 如果让你设计一个高性能的web,你怎么设计?(CDN、负载均衡、分布式缓存)
  19. 如何解决分布式缓存中数据一致性的问题?如果每台服务器的缓存都是在本地怎么解决缓存的一致性?(借用了数据库复制的思路,一个可以对缓存操作的日志进行同步,然后收到同步日志的服务器再对操作日志进行回放;二个可以直接对缓存当前的数据进行复制。)
  20. 什么是session?怎么管理session?
  21. 好像还有个问题忘记写了,就是知道ThreadLoacal吗?(每个线程可以通过ThreadLocal维护自己的一个数据副本,而不进行共享,取出数据的时候通过线程的名字,内部实际上是一个map的结构。)那这个线程结束时候内存怎么释放呢?(&*……¥#。。。忘记了,这个没注意看)
  22. 算法有了解吗?(知道一些常用算法)二叉树遍历方式?说说中序遍历?红黑树了解吗?红黑树有哪些应用场景?(JDK中的HashMap、TreeMap等等)二叉树一共799个结点一共有多少叶子节点?快排的时间复杂度?(最好和最差的情况)
  23. 以后的职业生涯怎么想?最近在看什么书?这段时间在干嘛?(准备秋招)还有没有你觉得漏掉的最能体现你能力的地方没有面试到?(。。。)
  24. 你有没有什么问题问我?(评价下面试咋样,我好继续改善)

一面面了将近一个小时,问了后面是否还有面试,说是保持电话畅通,还有面试。

二面问题

  1. 比较基础的问题,什么是多态?什么是重载?什么是重写?(多态:也叫后期绑定、动态绑定,分离了做什么和怎么做,将接口和实现分离开来,这样在写代码的时候可以只考虑与基类打交道了,这样也方便了程序拓展。重载:经常老是潜意识当成了重写,重载是以参数列表和返回值区分重载方法。重写:子类对父类方法的重新实现。)
  2. 类之间有哪些关系?有没有用UML画过类图?(这个我应该回答错了,我说了继承和内部类)
  3. mvc是什么?(面试的时候会担心专业术语讲错,我当时说的这是一种架构模式,应该没说错,model-view-controller)常见的有哪些框架是这种架构模式的?(SpringMVC、Struts)
  4. 看过Spring吗?有没有看过Spring的源码?看了多少?(启动流程、IOC)讲一讲源码是怎么实现的?
  5. Spring中有哪些类是继承了webApplicationContext?(没记错应该是这个问题,webApplicationContext这是一个接口,有两个实现类,一个是Spring默认的XmlWebApplicationContext,还有一个是ClassPathXmlApplicationContext,可以通过后者自己加载Spring的配置文件)
  6. 有什么方式可以通过Spring初始化的bean拿到这个bean的容器?(好像没用过&……%)
  7. ==和equal的区别?(前者是判断引用是否相当,也可以认为是对象的内存地址;后者在Object对象中默认的实现也是判断引用,但是可以进行覆盖重写,判断对象的属性内容是否相等)
  8. get请求和post请求的有哪些区别?(可以参考这个浅谈HTTP中Get与Post的区别)get和post的携带参数的数据量大小知道吗?
  9. 集合类有用到过哪些,了解吗?说说List和Set的区别,分别是怎么实现的?
  10. Set中是怎么保证key的唯一性的?(set其实就是map中key的集合,说了先判断hashcode,看是否冲突,冲突了再判断equal。。。)那到底是怎么来确定唯一性?(。。。又回到了equal和hashcode,其实是想让我回答,是通过hashcode和equal二者一起判断的,因为具有同样的hashcode并不能说明key对象是相等的,因为不同的对象可能会有相同的hashcode。)
  11. 线程安全是什么意思?(周志明老师那本jvm书籍里面对线程安全的理解,觉得挺好,一个线程访问一个对象时或者说调用一个对象的行为方法时,不需要额外的同步方法,就说这个对象是线程安全的。我当时就这么说,面试好像不太满意。。。)那你举个线程不安全的例子?(说了一下Servlet中代码不安全的问题,对于共享变量如果不进行同步的话,就会出现线程不安全。)再具体一点,怎么不安全了?(我就说假如是个访问次数统计,两个线程同时读取到了一个相同的值,然后执行+1操作,再写回主内存的共享变量,这个时候就会出现数据不一致紊乱。)那怎么解决呢?(变量用volitle修饰或者方法内部的关键操作用同步代码块)
  12. 了解过什么算法吗?(常用的算法都了解一些,比如快排序。。。,还没说完)讲一下快排的代码实现过程?(balabala。。。)时间复杂度咋样的?
  13. 知道哪些设计模式?项目或者框架中用到了哪些设计模式?(代理模式-Spring-AOP-JDK代理和cglib代理)?cglib是什么东东?(好像是一个第三方的jar包%……&,当时不太确定,后面查了一下,简单来说,就是一个代码生成类库。它可以在运行时候动态是生成某个类的子类。)
  14. 最近在看什么东西?(Zookeeper)为什么要看这个?看了多少?(主要的引用场景,以及ZAB协议)
  15. 谈谈你的项目架构?RESTful接口是什么?走的是http协议不安全怎么办?(自己设计了密钥对,进行验证)
  16. 数据库中第一范式和第二范式什么意思?(这个有些忘记了,当时就说为了减少数据冗余,具体可以参考这篇文字
  17. 平时学习过程有没有遇到什么困难印象很深刻?(说了一下之前有段时间对数据库好奇,挖了一下levelDB的源码,这个过程踩了很多坑)那你是怎么解决的?(Google,呢喃了一句,说感觉没有啥问题是解决不了的)

二面结束了,总的来说二面问的基础东西比较多,感觉项目和基础都要重视,两手抓。

搜狐新媒体

一面

  1. 讲讲Java里面的权限控制(private、protected、public,回答了这三个不满意,还有一个default)
  2. hashtable和concurrentHashMap有什么区别?
  3. jvm里面的垃圾回收中,垃圾是什么?有哪些方法判断是垃圾?
  4. jvm里面有哪些代?项目里面出现代码怎么排查错误?(后面发现他想问的是jvm里面堆栈溢出怎么搞,绕了这么大圈,说是什么日志都没有。。。总之感觉面试官问问题表达的很别扭)
  5. 因为我简历里面写了maven,问maven的发布仓库和插件仓库什么的仓库地址怎么配置?(不知道)
  6. git一些操作,合并分支、删除远程分支;
  7. Linux的一些操作命令,我说了几个cat、iostat、netstat、grep?(中间说到iostat的时候,面试官说有这个吗?你说的是netstat吧?。。。写面经的时候验证了一下,发现iostat没有问题啊。。。瞬间无语)?写一个筛选php进程的命令吧?(ps -ax|grep php,这个被肯定了没错,没记错的话,grep就是用来筛选的过滤的)
  8. 说说Zookeeper配置机器的话,机器数量有什么要求?(奇数,且大于3)为什么必须是奇数?(我之前查过这个问题,后面面完又查了一下,配置偶数台机器是没必要的甚至资源浪费,而且容错数量一致的情况下,奇数是节省机器资源的。然而面试官说是因为偶数有时候无法进行leader选举,我勒个去,leader选举的时候是通过机器ID和事务ID同时确定的,如果两个机器获得了相同的选票,那么机器ID大的胜出。所以奇偶对选举不造成影响。。。不过面试官一直在否定我的答案,我也没有办法了)
  9. 后面就是两道算法题,一道求最大公约数,另外一道不难手写出来了。

一面面试官体验不好,没有感觉面出什么,可能有些细节不太记得了。

二面

  1. HashMap+TopK问题,就是求路径访问中次数最多的100条。
  2. LRU算法,就是操作系统中的cache,让你设计这样一个问题,用什么数据结构?(回答HashMap和双向链表,然后就没问了)
  3. 522转化成16进制是多少?(刚开始有点懵。。。脑袋短路。。。后面转化成二进制,再转16进制)
  4. 反转单链表(用循环写了一个,又让用递归写,递归好像就GG了,感觉写的有问题,面试官说没事,递归这个确实需要经过思维的一些训练。。。可以参考这篇文章
  5. 面试到此为止,回去等通知。

二面面试官全程刷今日头条和聊微信中,呵呵。

美团

一面

美团基本上一上来就是聊项目了,我去面试现场的时候,连一秒钟都没坐到,就直接被领导力面试官前面,就开始聊起来了。

  1. 项目中的你做的部分。
  2. 难点在哪里?是怎么解决的?
  3. 问了一点基础,比如volatile关键字、HashMap、concurrentHashMap数据结构。
  4. 判断二叉树是平衡二叉树。

二面

  1. 没怎么问项目出了几道算法题。都是比较简单的,剑指offer上面的,有一道是求最长递增子序列的长度。
  2. 顺着简历问一些他感兴趣的东西。

三面

也是我现在实习的leader面我的,也是我觉得水平比较高德一次面试,很多问题,感觉都是接近生产环境的问题。

  1. 实现一个方法,每秒钟只允许前1000次的调用成功,返回true;后面的返回false。每秒钟结束,数据重置,如此循环。
  2. 基于第一个方法的改版,判断当前流量的峰值,在任意一秒钟内,禁止出现1000次以上的请求调用方法,如果调用该方法没超过峰值1000qps,则返回true,否则返回false。
  3. 职业生涯有什么规划。
  4. 以前工作有什么收获,最大的收获是什么
  5. 后面就是聊人生聊感想了。

HR面

半个小时就问完了,问平时怎么学习的,对哪个事业群感兴趣等等之类的。

网易

当时面了我一个半小时,面试官确实很nice,不知道为什么把我挂了。
问我对web开发感兴趣还是中间件,我说中间件,结果就全程跟我聊中间件,然后随便问了下http的内容就结束了。

华为

华为面试也是奇葩的很,一面面试官其实还不错,跟我聊得挺好的,很耐心的在听我讲。
二面面试官是个四十多的中年大叔吧,中间一度盯着身边走过的妹子看,目不转睛。态度傲慢,问最成功的一件事,最失败的一件事,最难过的事,最开心的事。你觉得你身上最大优点,最大缺点。我说优点是认真,他就来劲了,问你为华为面试认真准备了什么?华为价值观是什么?华为哪一年创立?果真是傻逼了。。。我辛亏没去华为,这种面试官也真是让人恶心的不行了。

其实中间还参加有一些,比如好未来、有赞的面试,好未来的面试官态度还好,一直对我赞不绝口,给我讲愿景,给了offer,但是一直到后面HR都没主动约网签的事情,呵呵了。有赞在杭州,本来是想抱着去杭州试试的,面了下,也给了offer,但是待遇没有一点诚意,弃。还有很早面试就拿下offer的是cvte,不过不得不说,cvte的面试体验是不错的,面试官和HR都很好,二面技术一面HR,给了我sp,奈何看到网上黑cvte的太多,也就没去了,我没实际在cvte工作过,没有体验没有发言权,但是还是感谢对我的认可,期待它拜托负面声誉,发展更好吧。

最后,签约了美团,从给我电话到后面水到渠成一气呵成的签约,再到来公司实习也就是一个月的事情。一切太奇妙,感谢神卸下我所有的骄傲,使我谦卑,能认识自己的不足,但还是会在最后将最好的给我,感谢神。未来加油!