请注意,本文编写于 534 天前,最后修改于 534 天前,其中某些信息可能已经过时。
7 月 31 号晚上 8 点 30 视频面试的,面试官还可以,问的不算深,也都是基础知识。但是由于是第一次视频面试,有点紧张导致思路有点短路,有些关键点还是回答的不算好或者直接没回答上来,后面还要继续努力啊。。
- 先自我介绍,然后介绍一下最近做的项目,由于在实习,所以说的是实习中正在做的项目,项目中涉及到了 Netty,面试官对这个比较感兴趣,问我实习项目中 Netty 流量有多大,然而实际上我还没开始写 Netty 相关的业务...所以只能说不知道,目前还在看文档。面试官就没多问了,下面就是问 Java 基础。
- Java 基础你应该很了解吧,说说 Java 面向对象的三大特性?然后问你觉得多态的特点是什么?(ps:上次面试也问了我多态的原理)
- Java 容器你很清楚吧,那你说下 JDK1.8 后的 Map 的实现?我说既然是 Map,那就以最常用的 HashMap 举例, JDK1. 8后 HashMap 从数组+链表方法优化为数组+链表+红黑树的实现方式,链表长度默认超过 8 时会转化为红黑树,红黑树的搜索效率比长链表要高。然后他就问那你觉得红黑树相比其它树好在哪里,为什么采用红黑树?我说红黑树搜索效率高于普通二叉树,但是没有完全搜索二叉树效率高,应该是一种折中的体现吧(这里瞎掰了,回答是错误的,采用红黑树是因为红黑树的搜索、删除、插入最坏时间复杂度都为 O(logn))。那你说说容器中的 Map 使用的时候有哪些需要注意的地方?面试官这个问题提的有点突然,导致我也没完全想清楚,就按照能够想到的回答了,还是以 HashMap 为例,首先 HashMap 是线程不安全的,使用的时候需要注意单线程还是多线程环境,如果是多线程的话需要使用 ConcurrentHashMap 或者 Collections 类中的静态方法 synchronizedMap() 方法实现线程安全的 HashMap;第二点就是使用 HashMap 存储引用类型时,需要同时覆盖 equals 和 hashCode 方法。然后面试官说我第二点说的可以,一般人都想不到这点。。。但是事后我记起来我忘了说第三点,也是可以直接深入源码层面分析的,就是由于 HashMap 扩容机制的存在,使用前如果能大概知道容器存储的容量,在创建 Map 时就要指定容量,因为 HashMap 的 resize() 扩容机制效率是很影响性能的。。。不该啊。。
- JVM 你了解吗?那你说说 1.8 后的 JVM 内存收集算法?我说 JDK1.8 后 HotSpot 虚拟机引入了 G1 收集器,即 G1 收集算法,然后他问那你说说 G1 算法的特点?balabala一堆,那你觉得 G1 算法和标记算法的区别是什么?
- 然后继续问你了解双亲委派机制吗?我说了解,他问那你说说双亲委派机制中有几个类加载器?双亲委派机制的作用是什么?然后他问那如何破坏双亲委派机制?这个问题我没有答上来,我想了一下说是通过自定义类加载器修改类加载条件进行破坏,面试官没有回答我说的是否正确。。。各位可以自己百度一下答案。
- 多线程你了解吧?说说悲观锁和乐观锁?我说悲观锁就是线程在更新操作时总是认为会有其它线程来竞争,所以悲观锁会先进行加锁,如 Synchronized 和 ReentrantLock 都是乐观锁的实现,乐观锁就是线程在更新操作时总认为不会有其它线程跟自己竞争,那么这个线程在更新操作时会尝试去进行更新,如果更新成功就成功,如果失败就采取失败策略,常用的失败策略就是自旋,乐观锁的实现最常见的就是 CAS。
- 然后他问你知道数据库中如何实现乐观锁的吗?这个好像是面试常问题。。但是我还没复习完数据库。。仅凭记忆说了一下好像是使用 select xxx for update。。然后他说这是悲观锁。。。好吧丢人丢到家了。。。
- 然后又问了我数据库索引有哪些?B+ 树索引和哈希索引的区别和各自特点?
- 回到多线程,那你说说原子类的实现原理?
- 最后问了 IO,先问从 1.8 之后,JAVA 中的 IO 分为哪几类?然后问了一下 NIO 和 AIO 的区别?这个问题不难。。但是没答上来,我只说 NIO 是一个 Selector 轮询 Channel 通道,AIO 采用的是事件去驱动模型,具体的实现我答不上来,然后直接坦白说这方面我实在了解不多。。
- 最后问了我有什么需要问他的,我问了两个问题,一个是云从科技目前 Java 是在做什么方向,一个是我目前还有哪些地方需要加强,第二个问题面试官说从刚才的表现,有三个方面需要加强,一个是数据库方面,数据库的索引和锁机制需要熟悉(这个确实还没复习完。。。),一个是 IO 操作,最后一个是网络 Socket 编程,第二个和第三个可以说是一个问题,就是加强 NIO 和 AIO 的原理理解,如果能了解 Netty 框架原理更好。。
8 月 15 号下午 4 点 15 远程视频二面的,感觉二面面试官好像把问题写在了纸上- - 问问题的时候还低着头
- 不用自我介绍了,恭喜你进入了复试(好像没有一点激动的心情的亚子),上次面试后感受如何?我说挺棒的,上次问了面试官有哪些方向需要加强的,后期也重点看了一下,尤其是数据库和 IO 上。
- 那你说下数据库中的索引吧?使用索引有哪些需要注意的地方?这个我从索引的建立和避免用不到索引的角度来说的。
- Spring 中的事务怎么实现的?使用 AOP
- Java 中创建线程池有哪些方式?我说分为两类,一类是 Excutor 创建的,一类是直接 new ThreadPoolExecutor 的,并且问我第一类 Excutor 创建的原理(跟昨天网易面试问的一样),然后问我一般使用哪一种方式创建?我说第二种,因为易于控制和自定义参数。面试官在这里还解释了开发规范上要求尽量不要使用 Excutor 创建,这个我当然知道啦,就是阿里巴巴 Java 开发手册上的原话。
- 解释一下 AQS 原理?AQS 怎么实现公平锁和非公平锁的?
- 解释一下 CountDownLatch 和 CyclicBarrier 的区别?我说是 CyclicBarrier 提供的功能更高级,包括 reset() 重置、提供获取当前等待的线程数量等 API 操作,面试官解释说这不是核心,CountDownLatch 是线程到达同步点后再一起执行,CyclicBarrier 是线程之间互相等待...反正说了半天我还是没明白这个方面有什么区别,反正用起来是一样的感 jio,后面再补一下此处的原理。
- 问我熟悉分布式吗?我解释了一下什么是分布式,面试官说听我说的感觉我不熟这玩意...没关系,后面还问了一下知道怎么保证分布式系统的可靠性和一致性吗?答...不知道,这个估计是想闻一下分布式事务和分布式锁之类的,我不是很会所以也没继续往下问。
感受:两场面试感觉都还可以,面试官都比较 nice,问的问题也都属于基础性问题,没有给场景、算法题,然后这也是目前第一次面试被问了整个 Java 知识体系,帮我查漏补缺了一些知识点,后面继续努力学习!以应对后面更多的大公司!
8 月 20 号下午 2 点 半电话 HR 面的,20分钟不到就结束了。
-
自我介绍
-
了解云从科技吗?
-
印象最深或者最有成就的项目(简历上的)
-
在实验室干活的时候是一个什么角色?leader 还是干活的?还是善于提意见的?
-
如果和同学在项目某些意见上不一致会有 argue 吗?怎么解决的?
-
如果谁都不服谁怎么解决?
-
自我评价,个人优缺点
-
职业规划,对于岗位和公司的偏好
-
有没有其它 offer?有没有其它在面试流程的?
-
意向薪资
本文由 Sanarous 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
本文链接:https://bestzuo.cn/posts/3578976493.html
最后更新于:2019-08-01 20:30:51
评论
Valine
Sakura