项目经历
实习经历
hashmap 怎么实现?
答:数组 + 链表/ 红黑树,然后讲了一大堆添加元素的操作(算hashcode -> 算index -> 冲突解决)
hashmap 扩容流程
答:默认16,有个扩容阈值0.75,扩容2n
然后呢?具体扩容过程
答:( 沉默 )
hashmap线程安全吗?
答:不是,首先hashmap设计理念就不是多线程场景下的
hashmap在并发场景下会有什么问题?
答:能插入null key/ null value 肯定会有安全问题
具体会有什么问题了解过吗?
答:( 沉默 ) 然后说了有可能会有跟mysql可重复读一样的问题吧
为了线程安全用什么结构?
答:ConcurrentHashMap
ConcureentHashMap 怎么实现线程安全?
答:1.7 Segment数组,分段加锁 1.8 Node数组,synchronized + CAS
Synchronized怎么实现的?
答:jvm层面 取对象监视器monitor
除了synchronize还有什么方法可以保证线程安全的
答:讲了volatile原理、然后还有Atomic原子类,CAS的ABA问题等等(感觉这个方向不太好,应该回答别的)
了解反射吗
答:可以通过反射去拿到类的信息,赋值,执行方法等等
反射可以解决什么问题
答:balabla讲了一大堆动态代理被打断了,然后又重复了一遍反射本身是用来解决什么东西的
反射有什么问题?
答:需要绕过安全检查,会有安全问题
除了安全问题还有什么?
答:( 沉默 )
java内存模型
答:讲了运行时数据区域,线程私有公有那些( = = 回答的不太对,当时应该想错了)
堆和栈有什么不一样
答:堆存放对象实例、静态变量、字符串常量池,栈由栈帧组成,栈帧由变量表、动态链接等方面组成
申请一个对象,他会在刚刚提到的哪个内存模型模块去发生(这个问题我实在不是很理解想问什么)
答:讲了对象创建的过程,就加载 验证 准备 解析 初始化
对象一定会在堆里面
答:我说我只知道有“逃逸”的名词
追问知道逃逸对象在哪里吗?
答:不清楚,可能是栈
Spring?
答:简单讲了IoC、AOP
mysql范式
答:背
了解mysql事务吗?
答:ACID
了解mysql索引吗?
答:聚簇索引、非聚簇索引(然后讲了InnoDB、MyISAM)、二级索引,讲了一堆
联合索引
答:最左匹配原则,(a, b, c) 创建 (a)、(a, b)、(a, b, c)
a = xx,c = xxx?
答:应该是有的,因为a等于某个值,c也是按顺序的(当时回答慌了感觉凉了、不过仔细想想好像也没啥错的,其实这里用的应该只是a的索引,这个说法好像没啥毛病)
b = xx, c = xxx?
答: 没有,不遵循最左匹配
了解唯一索引吗(直接尸体冰凉,一慌全忘了)
答:主键索引也是一种唯一索引,但唯一索引不仅仅包括主键索引
唯一索引有null值能生效吗
答:(完全不知道)说了不可以(刚刚查了是可以的)
进程线程区别
答:
为什么线程进程为什么性能损耗不同?
答:可能是包括上下文切换信息不同
进程怎么跟操作系统申请资源分配
答:完全不知道,只知道分配内存和文件描述符,会不会跟IO模型有关,系统调度
做题:num1, num2 循环大数减小数,减到有一个为0
面试官说是简单题,但是我卡了一会,而且面试官人超好边写还给我提示,但是飞书和leetcode不一样好不习惯