云从科技Java开发岗面经

云从科技Java开发岗面经

请注意,本文编写于  450  天前,最后修改于  450  天前,其中某些信息可能已经过时。

7 月 31 号晚上 8 点 30 视频面试的,面试官还可以,问的不算深,也都是基础知识。但是由于是第一次视频面试,有点紧张导致思路有点短路,有些关键点还是回答的不算好或者直接没回答上来,后面还要继续努力啊。。

  1. 先自我介绍,然后介绍一下最近做的项目,由于在实习,所以说的是实习中正在做的项目,项目中涉及到了 Netty,面试官对这个比较感兴趣,问我实习项目中 Netty 流量有多大,然而实际上我还没开始写 Netty 相关的业务...所以只能说不知道,目前还在看文档。面试官就没多问了,下面就是问 Java 基础。
  2. Java 基础你应该很了解吧,说说 Java 面向对象的三大特性?然后问你觉得多态的特点是什么?(ps:上次面试也问了我多态的原理)
  3. 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() 扩容机制效率是很影响性能的。。。不该啊。。
  4. JVM 你了解吗?那你说说 1.8 后的 JVM 内存收集算法?我说 JDK1.8 后 HotSpot 虚拟机引入了 G1 收集器,即 G1 收集算法,然后他问那你说说 G1 算法的特点?balabala一堆,那你觉得 G1 算法和标记算法的区别是什么?
  5. 然后继续问你了解双亲委派机制吗?我说了解,他问那你说说双亲委派机制中有几个类加载器?双亲委派机制的作用是什么?然后他问那如何破坏双亲委派机制?这个问题我没有答上来,我想了一下说是通过自定义类加载器修改类加载条件进行破坏,面试官没有回答我说的是否正确。。。各位可以自己百度一下答案。
  6. 多线程你了解吧?说说悲观锁和乐观锁?我说悲观锁就是线程在更新操作时总是认为会有其它线程来竞争,所以悲观锁会先进行加锁,如 Synchronized 和 ReentrantLock 都是乐观锁的实现,乐观锁就是线程在更新操作时总认为不会有其它线程跟自己竞争,那么这个线程在更新操作时会尝试去进行更新,如果更新成功就成功,如果失败就采取失败策略,常用的失败策略就是自旋,乐观锁的实现最常见的就是 CAS。
  7. 然后他问你知道数据库中如何实现乐观锁的吗?这个好像是面试常问题。。但是我还没复习完数据库。。仅凭记忆说了一下好像是使用 select xxx for update。。然后他说这是悲观锁。。。好吧丢人丢到家了。。。
  8. 然后又问了我数据库索引有哪些?B+ 树索引和哈希索引的区别和各自特点?
  9. 回到多线程,那你说说原子类的实现原理?
  10. 最后问了 IO,先问从 1.8 之后,JAVA 中的 IO 分为哪几类?然后问了一下 NIO 和 AIO 的区别?这个问题不难。。但是没答上来,我只说 NIO 是一个 Selector 轮询 Channel 通道,AIO 采用的是事件去驱动模型,具体的实现我答不上来,然后直接坦白说这方面我实在了解不多。。
  11. 最后问了我有什么需要问他的,我问了两个问题,一个是云从科技目前 Java 是在做什么方向,一个是我目前还有哪些地方需要加强,第二个问题面试官说从刚才的表现,有三个方面需要加强,一个是数据库方面,数据库的索引和锁机制需要熟悉(这个确实还没复习完。。。),一个是 IO 操作,最后一个是网络 Socket 编程,第二个和第三个可以说是一个问题,就是加强 NIO 和 AIO 的原理理解,如果能了解 Netty 框架原理更好。。

8 月 15 号下午 4 点 15 远程视频二面的,感觉二面面试官好像把问题写在了纸上- - 问问题的时候还低着头

  1. 不用自我介绍了,恭喜你进入了复试(好像没有一点激动的心情的亚子),上次面试后感受如何?我说挺棒的,上次问了面试官有哪些方向需要加强的,后期也重点看了一下,尤其是数据库和 IO 上。
  2. 那你说下数据库中的索引吧?使用索引有哪些需要注意的地方?这个我从索引的建立和避免用不到索引的角度来说的。
  3. Spring 中的事务怎么实现的?使用 AOP
  4. Java 中创建线程池有哪些方式?我说分为两类,一类是 Excutor 创建的,一类是直接 new ThreadPoolExecutor 的,并且问我第一类 Excutor 创建的原理(跟昨天网易面试问的一样),然后问我一般使用哪一种方式创建?我说第二种,因为易于控制和自定义参数。面试官在这里还解释了开发规范上要求尽量不要使用 Excutor 创建,这个我当然知道啦,就是阿里巴巴 Java 开发手册上的原话。
  5. 解释一下 AQS 原理?AQS 怎么实现公平锁和非公平锁的?
  6. 解释一下 CountDownLatch 和 CyclicBarrier 的区别?我说是 CyclicBarrier 提供的功能更高级,包括 reset() 重置、提供获取当前等待的线程数量等 API 操作,面试官解释说这不是核心,CountDownLatch 是线程到达同步点后再一起执行,CyclicBarrier 是线程之间互相等待...反正说了半天我还是没明白这个方面有什么区别,反正用起来是一样的感 jio,后面再补一下此处的原理。
  7. 问我熟悉分布式吗?我解释了一下什么是分布式,面试官说听我说的感觉我不熟这玩意...没关系,后面还问了一下知道怎么保证分布式系统的可靠性和一致性吗?答...不知道,这个估计是想闻一下分布式事务和分布式锁之类的,我不是很会所以也没继续往下问。

感受:两场面试感觉都还可以,面试官都比较 nice,问的问题也都属于基础性问题,没有给场景、算法题,然后这也是目前第一次面试被问了整个 Java 知识体系,帮我查漏补缺了一些知识点,后面继续努力学习!以应对后面更多的大公司!


8 月 20 号下午 2 点 半电话 HR 面的,20分钟不到就结束了。

  1. 自我介绍

  2. 了解云从科技吗?

  3. 印象最深或者最有成就的项目(简历上的)

  4. 在实验室干活的时候是一个什么角色?leader 还是干活的?还是善于提意见的?

  5. 如果和同学在项目某些意见上不一致会有 argue 吗?怎么解决的?

  6. 如果谁都不服谁怎么解决?

  7. 自我评价,个人优缺点

  8. 职业规划,对于岗位和公司的偏好

  9. 有没有其它 offer?有没有其它在面试流程的?

  10. 意向薪资

本文由 Sanarous 创作,如果您觉得本文不错,请随意赞赏
采用 知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
本文链接:https://bestzuo.cn/posts/3578976493.html
最后更新于:2019-08-01 20:30:51

切换主题 | SCHEME TOOL  
>