三七互娱补招技术二面
不知道凉不凉,看运气了,答是将就都答上了。
1、自我介绍
2、怼项目,和一面差不多。
3、介绍Hashmap.
4、用hashmap实现一张表的数据存储,key是teacher的id,value是班级。如果要判断两个teacher的id是否相同用什么方法?只需要重写hashcode方法
5、在hash冲突比较严重的情况下,使用拉链法解决冲突。这是如果两个key相同的对象要存入hashmap,请问会发生什么情况?答发生value值的覆盖
6、++i这个操作在多线程并发的情况下是否线程安全?答不安全。++i不是原子操作,分为两步完成了操作。
7、如果++i实现了原子操作,请问还存在线程安全问题吗?在面试官的引导下答出了多线程对变量的修改各个线程不可见。问怎么解决,使用volatile。
使用valtile怎么实现多线程对变量的修改相互可见?从主存本地栈的方向回答,线程取值会去主存中取而不是缓存。他说OK
8、如果实现++i的操作不使用锁进行同步实现线程安全,还有什么方法?说了AtomicInteger,说了volatile定义value值,使用Unsafe类中的方法操作内存中的数据
获取value在堆内存中的偏移量,再用CAS这个系统指令原语的CompareAndSwap方法进行对比更新i的值。
9、CAS的CompareAndSwap方法怎么实现对I值的更新?简单说了下,他又问,CAS在使用中会存在一定的问题,请问有哪些?我说了对旧的预期值A,可能出现
先修改为预期值B,后又修改为A,这样CAS算法在判断时,发现A没有变化,就不会进行交换与赋值,但实际上A的值经过了两次修改。对于这个问题使用版本号进
行解决。他说OK。
10、介绍下JAVA中乐观锁,悲观锁的区别。说了读锁写锁,SYNCHRONIZED,REENTRANTLOCK。以及使用的场景,说完了它问还有呢?我又稍微介绍了下共享锁,
说加了读锁可以再加共享锁,加了写锁就不能再加共享锁以及任何锁了。他说OK。我感觉这里说的没有达到他的要求。
11、介绍链表、平衡二叉树、红黑树的时间复杂度。链表的时间复杂度对插入,修改为O(1),查询为O(N),平衡二叉树为O(logN),红黑树我就介绍了下概念,
说是特殊的二叉排序树,以及根节点,叶子结点粉笔是什么颜色的结点以及规则。时间复杂度说不太了解使用的少。
感觉半凉不凉吧,这些问题答完一共聊了45分钟。最后他说有结果会在一周内通知,我问接下来我应该怎么去学习呢?他说我虽然是转行的还是学的挺快的,基础要继续
打牢,在基础夯实的基础上,可以研究下JAVA的消息中间件,学习下PYTHON,了解下深度学习的方向啥的。我问接下来还有面试吗?(其实很想去的,,心里没按耐住
还是问了),他下意识就说没有,然后又说哦,不是没有,有结果的话一周内会通知。我听他这句话总觉得是不是凉了。。。各位老铁分析一波。其实我觉得答得还算凑合,
可能他有提醒一部分。。
#三七互娱##面经##秋招##Java工程师#