今天下午把 JavaGuide[1]上 MySQL 以及书单部分的内容完善了一下。
晚上出去吃了饭,本来是想着写写水文,聊聊近期的生活。不过,看着很多小伙伴被各种面试毒打,我很难受啊,还是做点什么吧!
给小伙伴们分享两个近期的面经,问的问题挺有代表性的,你们可以拿来自测一下!
参考答案我这里也没有,也没时间一个一个帮你们回答。你们可以到 JavaGuide 上找,JavaGuide 上面找不到的,自己搜一下、看看书。
阿里淘系 Java(大三实习)
一面
- 首先还是没有自我介绍,直接是项目介绍,项目使用的什么技术栈,里面的一些难点。
- 项目中的大致流程,怎么去运行的。
- 项目中的容器使用到 MySQL,ES,MongoDB,Redis,这些都是干嘛?为什么要用他们(他们有什么好处?解决什么额问题?),项目中怎么使用的?
- 那么你们肯定使用到了索引对吧,详细说说 mysql 索引吧?
- 你们建立索引有什么规则?怎么建立的?哪些地方使用到了索引?有什么好处?结合具体场景回答回答。
- 索引是 B 树是吧?这个有什么优点呢,为什么 MySQL 要使用 B 树,不用别的呢?(这里我想问下大佬们,除了减少 io 次数,局部性原理,稳定,有序还有什么优点呢?)
- 存储引擎了解过吗?
- 你使用过 MVC 是吧,具体说说是什么,为什么选择这个,怎么封装的,如何方便?
- MVC 是什么?三层架构指什么?为什么使用三层架构,具体说说怎么松耦合的,举例子?
- MVC 请求执行流程
- 你说说为什么松耦合,你代码中怎么实现松耦合?这样为什么就能体现松耦合,是什么和什么之间的耦合?
- Spring 是什么?有什么优点?IOC 具体讲讲,为什么交给 Spring 容器管理就会松耦合,你来具体说一说?
- HashMap 底层了解过吧?说说底层吧,数据结构。
- HashMap 查询,删除的时间复杂度。
- 保证线程安全,为什么推荐使用 ConcurrentHashMap,有什么特点。就只是使用数据结构 cas volatile 吗?除了这些没别的优点了吗?
- cas 为什么就比 synchronized 轻量,什么原因,synchronized 怎么调用到操作系统的?具体说说,操作系统消耗什么资源呢?
- Java 内存模型,那怎么保证可见性?加锁为什么就可以保证内存屏障?
- 内存屏障是什么?具体说说吧?内存屏障为什么保障可见性?指令重排序?happen-before 原则了解么?
- 线程这边在操作系统怎么体现的,解决什么问题?在单核 cpu 中线程起什么作用?为什么轻量?
- 单核 CPU 线程解决问题,多核 CPU 中解决什么问题?
- 怎么设置 CPU 最佳线程数?
- 操作系统内存管理?分页?置换算法?有去深入了解吗?
- 线程池聊聊?怎么设置线程数,什么时候最优,为什么这么设置?
- 好的我这边已经大致了解了,你还有什么想问的吗?(我反问:部门干什么的,我表现怎么样?)
二面
- 自我介绍
- 项目介绍,技术难点
- 看你项目使用到反射,谈谈你对于反射的理解,你在 项目中怎么使用的反射,有什么好处?
- 说说 jvm 吧?jvm 怎么样你所了解的?(内存结构,堆,垃圾收集 算法。垃圾收集器,各个特点)
- 类加载?双亲委派?你怎么能实现类加载机制?有什么需要考虑的吗?
- 使用类加载机制能实现吗?考虑什么问题?
- 说说 fullgc 你说说你的了解?jvm 触发 fullGC 老年代没有减少可能是什么原因?
- 说说你使用的集合?底层了解多少?
- 说说 ArrayList 和 LinkedList 底层有什么区别?说说怎么删除固定的位置的元素?有什么线程安全问题吗?为什么会产生?
- 说说 HashMap 的底层原理?数据结构?扩容?
- 说说 ConcurrentHashMap?
- 说说你的 MySQL 理解?有没有写过什么复杂的 SQL?使用什么优化了吗?你平时是如何优化 SQL 的?如何查看 SQL 语句的执行速度?
- 索引说一说?分库分表?
- 说说 synchronized 和 volatile?
- 说说 url 从输入到回车经历的过程?http tcp(三次握手,对应的状态)
- 说说 ARP 协议?
- 说说磁盘调度 算法?说说电梯 算法?说说扫描 算法?
- 说说 Java 的线程和操作系统的线程是不是一样的?有什么区别?
- 说说你理解的线程?说说线程池?几种方式?阿里巴巴开发手册为什么推荐使用自定义线程池?
- 说说你的实习?
- 说说怎么创建线程?有几种方式,为什么?有什么区别?
- 移位操作为什么快?从底层是二进制,补码原码真值回答底层的原理。反问:部门干什么的?我表现怎么样?
二面之后,就没有下文了。这次面试确实有点受到了打击,业务场景确实我菜了。
携程春招 Java 后端
一面
- 介绍下项目,热点数据用 Redis 的什么数据结构存储?
zset
。你这个负载均衡算法中的加权轮训算法怎么实现的?Rpc 项目中客户端调用服务的整个过程?怎么使用 Netty 进行通讯的? - SpringBoot 常用注解?
SpringBootApllication
由哪些注解组成?由三个注解组成,其中有一个开启自动配置的注解。 - 说一下
volatile
?volatile
有内存可见性和有序性,底层通过 lock 前缀的一个空指令实现。 sleep
和wait
的区别?一个释放锁,一个不会,wait 可以无限阻塞,sleep 不能。- 了解哪些设计模式?写一个双重检测的单例模式,为什么要加 synchronized?因为要考虑线程安全,加在类方法和普通方法有什么区别?
- 了解注解吗?自己的项目使用到了自定义注解。注解怎么实现的?通过反射实现。反射中获取 class 对象的三种方式?通过 object 类的 getClass 方法,类的 class 属性,class 类的 forName 方法。
- 了解哪些排序算法,写一个快排吧。
二面
- 详细讲解你的项目,细节与难点。项目中使用的序列器,protobuf 为什么快?
- Java 的 io 模型?bio,nio,aio。其中 nio 使用操作系统的 io 多路复用。io 多路复用的实现有哪些?select,poll,epoll。
- 写一个多线程的题,线程 1 打印 a,线程 2 打印 b,线程 3 打印 c,要求顺序打印出 abcabcabc。
反问,对自己有什么建议,按校招已经到达标准,由于时间问题没法再深入了解项目,所以也没有什么建议。
整体难度不是很大,不像大厂那样死扣细节。最后求个 hr 面,不然真的要失业了。
HR 面
- 自我介绍
- 为什么不读研究生了
- 工作地点有要求吗
- 薪资要求
- 有过实习吗
- 你这个项目的难点是什么
- 比较看中公司的哪些方面
- 有其他 offer 吗,哪些公司还在流程中
- 过四六级吗?多少分?等下发个英语测评有时间去做下,会根据测评结果安排后续的进程
反问,公司对应届生的培训机制,多长时间出结果。
参考资料
[1]
JavaGuide: https://github.com/Snailclimb/JavaGuide