面试总结
1.美团
美团好像近期在大肆招人,我面试也是很快,请了一上午的假去的,面试官很不错,顺着简历问了一些项目的问题,问题也主要是项目的问题,也指出项目上可能存在的一些问题,问一下我的解决方案,主要问题汇总一下:
- LocalCache用什么实现的,LocalCache怎么保证一致性
- 如何减少Full GC的发生,因为我的项目中有localCache的使用,可能会有大对象。
- Zookeeper的使用场景。
- Mapreduce的数据流转,处理流程。
- Hbase的行锁的实现以及效果。
- 日常中用Storm有什么问题。
- Hbase的架构以及相应的compact和split。
- 对比一下ES和Solr的区别,如何选择使用哪一种。
- ConCurrentHashMap的架构和如何保证线程安全。
- 如何实现一个Zookeeper的分布式锁。
2.某汽车公司
公司整体环境很好,面试官都比较厉害,据说是雅虎北研的班底,问了很多算法和数据结构的问题,感觉更是想选基础好的童鞋。面试问题如下:
- 介绍一下公司的数据架构和数据开发的流程。
- 密码加密之后,盐丢失了怎么去处理。
- Spring的依赖注入的好处,你怎么理解。
- mysql的查询慢了,如何优化索引。
- MyIsam和InnoDB的区别。
- InnoDB的索引结构。
- Join操作时内部的原理,Join的时候大表驱动小表还是小表驱动大表,走索引的时候的复杂度是怎样的。
- InnoDB的四种隔离机制,RC和RR的区别,以及在使用的时候有什么感受和问题。
- 经典的数组翻转之后的二分查找问题。
- 经典的走矩阵找和最大的场景。
- 经典的判断二叉搜索树是否是严格的二叉搜索树。
- 分布式主键生成方式有哪些中,优势和劣势是什么?SnowFlake算法具体是怎么实现的。
- Mapreduce做图计算。
- Hive的底层存储结构RC结构的Text结构的区别。
- 多线程使用的场景。
- 进程间的通信方式。
- 挖金子问题。
- Hive做数据仓库的时候常见的一些问题?比较让你印象深刻的。
- InnoDB主键索引的普通索引的区别和查询时的过程。
- 自动机的存储是按什么存储的?内存占用怎么评估。
3.京东
首先,京东的面试官十分可以,HR也没的说,主动来接,面试官也很和气,面试题也偏重基础,主要如下:
- 写一个注解,就是类似于@Controller的东西。
- 对于Solr都用过哪些功能,Solr集群主要是怎么搭建的?版本变化情况等等。
- SolrCloud的Query过程,怎么进行Query?怎么计算Score,汇总返回的流程。
- Mysql为什么表越大Query越慢。
- java线程池的实现,以及溢出的时候的抛弃策略。
- JVM的垃圾回收过程,以及相应的CMS和G1的算法。
- java8的一些新特性,lambda和并行数据处理等。
- Zookeeper使用场景,你是怎么用Zookeeper的。
- java锁的可见性的是怎么保证的。
- Redis的使用,怎么保证高可用。
- 基本的java命令,jstat以及 jstack等,举一个你实际的场景。
- HashMap的并发时的死循环问题。
- ConcurrentHashMap怎么保证线程安全的,结构是什么样的。
4.百度
百度就有点扯了,做了两个多小时的车去面试,光是在路上就四个小时,然后还是一轮游。第一次去百度大厦,感觉挺大的,保安安保意识很严啊,在外面愣是站了20分钟,到前台用手机号取预约,等面试官也等了好一阵子,感觉好大的架子,面试难度一般,但是愣是没过,面试官以你的spring不太好拒绝了我,spring啥时候成了硬性要求了,我。。。。
面试题的话时间长了可能记不清了,主要如下:
- 如何解决Cookie盗取问题
- OAuth协议为什么会有一个Redirect阶段
- 密码的加密算法
- spring的Bean的生命周期
- spring如何在加载之前初始化一个Bean
- 手写一个线程池
- Lock和synchronized区别
- jvm内存模型
- 垃圾回收算法
- redis和Memcached的区别
- java8的新特性,做一个List到Map的转换
- Mapreduce的核心思想和数据流向
5. 阿里
阿里面试流程比较长,但是面试官水平真心没的说,都是大牛。首先一轮是简历筛选,面试官简要的问了一下项目和离职的原因。二面的话是基本的技术面,面试官没有问太深太细的东西,感觉是要考察广度吧。三面的话,面试还是有深度的,面试官是几个资深的技术专家,面试时比较紧张,但是感觉也学到了很多的东西。总的来说阿里的面试感觉很好,对我提升很大,主要的问题可能记得不是很清楚,大致如下:
- jvm内存模型和垃圾回收机制
- 对于高并发场景如何应对
- 内存溢出的原因和排查方法
- 线程池的核心参数,在java中的实现,以及任务抛弃策略。
- 常见线上问题排查的思路和流程,如何应对。
- Lock和synchronized区别
- 如何用Hbase做二级索引
- Mapreduce的核心思想和数据流转
- CDH版本的Hadoop的改进特性有哪些
- 数据库的四大范式
- 数据库四大范式和Hive的结合,如何进行表的设计
- 你在做数据仓库时碰见的问题有哪些,怎么解决的
- sql查询两个数据集的补集
- 表的外键索引的问题
- 26进制转换问题
- 除了Java还学了什么语言?为什么?
- 垃圾回收算法CMS
- CMS和G1的比较,以及G1的缺点,S0、S1要解决什么样的问题。
- java的Stack数据结构的实现
- java跳表的并发问题
感想
忙碌了半个月,面试了几家公司,有的时候甚至是一天两家。整个人比较疲倦吧,互联网依然很浮躁,碰见的求职者都是跳槽很频繁的。其实感觉这样并不好。首先,换公司是一件成本很大的事。其次,在一家公司还没站稳,业务还没摸透,就离开,对自身的发展也有很大的影响。对我来说,未来几年真心很重要,真的希望能找一个好团队,做一个好的项目,安安心心的沉淀几年,深耕一个行业。但愿梦想能够实现。
规划
面试了挺多家公司,学到了很多东西。自己也反思了一下自身的优点和不足,后面也应该针对自己的缺点做些努力吧。
- 自己有时候有点急功近利,有点急于求成,毕竟工作不到3年,还需要多学,多看和多做。将自己的步子慢下来,多注重细节,精益求精。
- 基础知识的话还有比较多的漏洞,像计算机网、操作系统和算法,接下来主要想看的书是《计算机网络第五版》、《操作系统精髓与设计原理》、《算法》和《算法导论》
- 对于基础的框架还只停留在会用的阶段,所以对于Spring和Mybatis需要学习核心代码,ioc、Aop、springMVC核心代码、Mybatis-Spring包、Druid连接池。主要看《Spring实战》和《Mybatis官方doc》
- Mysql是最常用的DB了,但是目前只是会优化一些索引,解决一些Query慢的Case,但是对于Mysql的运维还是两眼一抹黑,所以接下来需要了解Mysql的运维。主要是《高性能Mysql》
- 因为原来的工作经历有做过搜索,感觉搜索里面门道很多,所以还打算把Lucene再深入搞一搞,从Es下手,研究研究Lucene底层的数据结构和Query流程,主要想看一下《信息检索导论》。
- 最后一点就是深入的学习java的基础知识吧,读一读一些不常用的数据结构和工具,有精力的话,看看JVM的源码。