写点什么

三面“有赞”Java 岗斩获 offer:Spring+JVM+ 并发锁 + 分布式 + 算法

用户头像
周老师
关注
发布于: 22 小时前


年末离职,年初为面试也筹备挺长一段时间,找了不少复习资料,刷了很多题在网上投了很多简历最终面试了有赞,还有幸拿到 offer!

本人两年 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。

分享一波我的复习宝典

Step1:准备一份优秀的简历

想要拿到阿里 Offer,那么首先得要有面试阿里的机会,想要得到大厂面试机会并不是一件容易的事情,而简历,是撬开面试大门的钥匙,钥匙是否匹配,就要看简历是否优秀了。很多应届生不知道怎么制作自己的简历,随便在网上下载一份,改改个人信息。实际上,大厂面试的简历,看重的不是你的个人爱好,也不是在校参加过什么社团学生会,更注重的还是你的个人实际能力。所以,一份优秀的简历,应该包括你个人掌握的技术点,是否有实习经历,参加过什么项目,解决过什么项目难题等等。


Step2:提示自身的软实力(知识和技术)

第二个关键就要自己的自身实力过硬了,无论是你应届生,还是工作好几年,无论是校招还是社招,企业招聘的永远是自身实力过硬的,也就是你的知识储备,你的技术水平要达到要求,而提升自身软实力的唯一办法就是:不断学习。

以下我会分享一些我个人的学习文档,有需要的朋友自行选择获取:


  • Java 核心知识整理

啃完 283 页的 pdf 文档(美团资深架构师整理)

Java 部分:Java 基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java 算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis 缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

Java 核心知识

  • Spring 全家桶(实战系列)


  • 其他电子书资料


Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:


写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。

以上学习资料均免费放送,最后祝愿各位身体健康,顺利拿到心仪的 offer!

欢迎大家扫码来关注公众号博主,获取文章全部资料,此公众号会持续更新技术干货、不定期分享 Java 进阶面试宝典、Java 核心知识、架构书籍电子版

享 Java 进阶面试宝典、Java 核心知识、架构书籍电子版


用户头像

周老师

关注

精通java热衷于分享java领域资料,感谢支持 2020.06.09 加入

还未添加个人简介

评论

发布
暂无评论
三面“有赞”Java岗斩获offer:Spring+JVM+并发锁+分布式+算法