顺丰校招一二面—Java开发工程师
顺丰一面 2020.8.4
- 自我介绍
- HashMap了解多少,简单说说
- 说了一下HashMap的底层链表数组实现,put方法和get方法实现
- 比较两个key是否相同,先判断hashcode方法在判断equals方法
-
- 为什么要重写equals方法和hashcode方法
- HashMap和HashTable的区别
- HashMap线程不安全,HashTable线程安全
- 底层有什么区别没答上来
-
- CocurrentHashMap怎么实现线程安全的
- segment,分段锁
-
- 讲到锁,那什么是乐观锁和悲观锁
- 乐观锁认乐观思想,认为读多写少,倾向于不加锁;悲观锁认为写多读少,任何操作都要加锁,synchronize就是悲观锁
-
- 除了synchronize关键字,还是什么锁
- 可重入锁,实现Lock接口,详细展开
-
- 进程和线程的区别,Java中如何实现多线程
- 实现Runnable接口,继承Thread,有返回值的实现Callable接口
-
- 线程池简单讲讲
- 创建销毁线程耗费资源,引入池化的概念,实现线程复用和管理,这里没展开讲线程池的原理,面试官也没要求继续讲
-
- 关于多线程,volatile关键字有什么作用
- 保证修饰的变量线程之间可见,避免脏数据
-
- 了解过哪些排序算法?
- 常见的冒泡,快排,选择排序,归并,桶排序。我以为要手撕代码,归并排序代码不熟啊,但面试官也没让手写
-
- 数据库了解过吗,说说MySQL数据库,索引、优化、原理?
- 数据库是我的弱项啊,不太了解,只能硬着头皮简单说说事务的隔离级别,面试官也没深入问
-
- 聊聊你的项目
顺丰二面 2020.8.5
自我介绍
介绍项目
研究生期间做过的项目和建模工具有关(主要用到JavaSE),比较偏工业领域应用吧,面试官应该也不是很了解,主要问了用到的技术栈,项目中负责开发的模块,解释一通
项目的几个细节,因为自己做过的也比较熟,这里说了将近3分钟
JVM的内存模型
JVM内存模型常考吧,我面了几家都问了。
1. 线程私有:虚拟机栈,程序计数器,本地方法栈
2. 线程共享:堆,方法区(JDK1.8之后改为位于直接内存的元空间)
3. 直接内存
JVM的GC了解多少
我主要从触发GC方面回答的:
MinorGC: new出的对象一般进入到堆空间的新生代的Eden区(对象很大会直接放入老年代),如果此时Eden区已满,触发一次MinorGC,将Eden存活的对象连同ServivorFrom区存活的对象一同复制到ServivorTo区,ServivorFrom和ServivorTo区互换,存活下来的对象年龄+1。
MajorGC: 默认情况下,如果此时有对象年龄达到15,将晋身到老年代,如果此时导致老年代空间不够,则会触发MajorGC,回收老年代的垃圾对象。
数据库了解吗,有哪些索引
聚簇索引,好像是B+树实现的?啊,数据库得恶补了,我的弱项啊,好在面试官也没再继续追问。
反问环节
问:如果被录取了,部门就确定了吗,可以重新选择吗?
答:还会根据面试表现重新分配的(是分配,没得选择)
整体上,除了数据库没回答上来,其他的都还可以吧(蜜汁自信),面试官人很好,平易近人,没有板着脸,面试过程也很愉快。
兄弟姐妹们加油呀,去恶补数据库了~