有赞

Java开发工程师

有赞:问得非常细节

一面:

1 Java并发技术了解吗,说了线程,juc的线程池,并发容器,阻塞队列,原子数据类型等。

2 问我原子数据类型怎么实现,cas

3 线程池有哪些参数,阻塞队列用的是普通队列么,答不是,是blockingqueue

4 concurrenthashmap和hashmap的区别,chm的实现原理,你在什么场景下用到chm,为什么,我说了多线程查询数据,put可能覆盖,或者hashmap的扩容可能产生死链

5 还用过哪些数据结构,list,set,map,stack和queue。

6 Spring了解么,问我了解五大组件不,不了解,说了ioc和aop。然后问我分别怎么实现的,使用xml和注解配置实现类有什么区别,怎么解析它们的数据。

7 Spring如何动态地加载一个bean到bean容器中,不是通过配置文件配置的,不会。

8 Spring aop的实现原理,如何加一层动态代理的,我说是创建bean过程中直接生成代理类的实例

9 Spring的spring quartz知道么,必须不知道

10 spring源码看过么,mvc了解么,说了一下mvc的原理和请求过程

11 hibernate和mybatis的源码看过么,没有

12 如何实现不同环境中配置文件的自动切换,使用脚本或者命令,他说使用hibernate的注解可以实现切换。

13 nio和io的区别,nio是阻塞轮询的,如何改用异步通知的机制,我说使用aio注册异步回调函数。

14 nio的包装框架了解么,我说netty,看得深入么,我说没有深入看。

15 分布式服务dubbo了解么,有哪些功能,如何自己实现一个dubbo,我分别从rpc和微服务的角度说了一下。问我有哪些序列化方式。

16 mysql问了几个简单问题。

17 对我们公司了解么,只是稍微了解。

二面:

1 项目

2 Java的内存模型,堆和栈分别存什么

3 Java的深拷贝和浅拷贝

4 Spring的aop怎么实现的,动态代理的原理是什么

5 Spring MVC的请求过程。

6 跳出Spring,说一下浏览器的请求过程

7 网络编程这一块,你了解哪些,说了socket和nio

8 nio的底层实现一般是epoll,讲一下epoll吧。

9 mysql的索引说一下,二级索引是怎么进行查找的

10 MySQL的两个引擎区别

11 hibernate的orm是怎么实现的,我说的是xml和注解的解析,以及jdbc封装

12 hibernate的事务如何实现,我说是jdbc的事务实现。

13 分布式数据库查询一个表的前十条数据,对id进行hash来索引节点,如何进行查询。我说那就对id hash,找到节点分别查询。

14 分布式系统的概念,如果有数据一致性怎么办,答cap和base

15 了解哪些分布式技术,说了缓存,负载均衡,消息队列,Hadoop

16 负载均衡的衡量指标,不知道

17 消息队列了解哪个,rabbitmq和kafka,为什么kafka比rm快,答了零拷贝,具体实现原理答错了,应该是避免复制数据到应用缓冲,直接使用sendfile传输数据。

18 hadoop了解哪些,hdfs的文件读写机制说一下。

19 没什么问题了

20 需要来现场面试,其实我不想去现场面,然后隔天给我发了拒信

三面:

1 自我介绍和项目

2 Java的内存分区

3 Java对象的回收方式,回收算法。

4 CMS和G1了解么,CMS解决什么问题,说一下回收的过程。

5 CMS回收停顿了几次,为什么要停顿两次。

6 Java栈什么时候会发生内存溢出,Java堆呢,说一种场景,我说集合类持有对象。

7 那集合类如何解决这个问题呢,我说用软引用和弱引用,那你讲一下这两个引用的区别吧。

8 Java里的锁了解哪些,说了Lock和synchronized

9 它们的使用方式和实现原理有什么区别呢,使用的话,synchronize用于方法和代码块,可以锁对象和类以及方法,Lock一般锁一块代码。并且Lock可以搭配condition使用。

实现原理的话,synchronized使用底层的mutex锁,需要系统调用,而Lock则使用AQS实现。

10 synchronized锁升级的过程,说了偏向锁到轻量级锁再到重量级锁,然后问我它们分别是怎么实现的,解决的是哪些问题,什么时候会发生锁升级。

11Tomcat了解么。说一下类加载器结构吧,我说不知道,说了些别的。

12 问我会什么框架,说了Spring,问我Spring中如何让A和B两个bean按顺序加载,我说依赖关系,他问怎么实现,然后说要用dependon注解,我说不了解。

13 beanfactory和applicationcontext是什么关系,使用有什么区别。

14 MySQL的sql优化了解么,答了解索引优化。

15 他问我如何做一条sql的优化,说了慢日志和explain。

16 MySQL集群的主从复制怎么做的,具体有哪些线程做哪些事情,使用了哪些日志。

17 CAP定理说一下,为什么三者只能选二,为什么分区容忍性必须保证。

18 平时了解哪些技术是牺牲了一致性来保证可用性的,我说消息队列,他问我MySQL是不是,我说MySQL主从复制应该是。

19 工作中CAP的A和P是怎么选择的,我说选P吧,他的意思是选A。

20 算法题:

一:10亿个数去重,我说用hash分片做,他说可能不均匀,然后我说了bitmap,他说那数字量更多怎么办,我说那就两个bitmap把。他说下一题吧。

二:十亿个数找前10个最大的,小顶堆过一遍即可。他说如果要提高效率呢,我说可以分片做堆排序再进行归并即可。他说OK。

▼更多精彩内容

今日头条研发面经

蚂蚁金服研发面经

百度研发面经整合版

拼多多&快手研发面经

百度研发面经

多内容请关注微信公众号【程序员江湖】

 

作者黄小斜,斜杠青年,某 985 硕士,阿里 Java 研发工程师,目前专注于后端技术,同时致力于分享自学编程、求职面试、程序员自我提升等经验和感悟,以及从技术小白成长为BAT程序员的学习心得和心路历程(关注公众号后回复”资料“即可领取 3T 免费技术学习资源,包含Java、C++、Python、大数据、移动端、前端、机器学习等方向,同时也将赠送我原创的【程序员校招指南】等精品资源)