美团二面凉经
9.12 美团二面,细问java八股文,给我问懵了,项目问题一点没有,白看了好久的场景题🤡
- 自我介绍
- 问点Java集合类,arraylist和hashmap简单介绍一下(底层数据结构,扩容机制,查询的时间复杂度)
- 提到了hashmap的查询效率是O(1),为什么呢?(数组在内存中是连续内存,所以查询时间复杂度是O(1))
- hashmap遇到冲突是怎么解决的?(链地址法,rehash法,开放寻址法,(公共溢出区等))
- 刚才说hashmap的查询时间复杂度是O(1),但是遇到hash冲突hashmap会转变为链表或者树的形式,这样的查询时间复杂度好像不是O(1),为什么最终结论是hashmap的查询时间复杂度为O(1)呢?(当时说不知道,(应该是在数据量小的时候,是O(1),在数据量大的时候是链表的O(n)或者是树的O(logn),理想情况下是O(1)的)
- 刚刚说arraylist是什么时候扩容来着? (1.5 倍扩容,当当前数据量达到最大数据量的0.75的时候会扩容)
- 那hashmap是什么时候扩容?(先说了hashmap的链表转红黑树的时机,再说了当当前数据量大于等于数组长度*loadFactor(16 * 0.75)的时候进行扩容)
- 为什么hashmap是0.75呢?是1行吗?是2行吗?(当时答是妥协的因素,设为1和2是可以的,避免了hashmap在大量插入数据的情况下的扩容问题,扩容影响性能。为什么是0.75:泊松分布 ,看来还是考察的还是hashmap的源码,orz忙着看项目了,没背java基础,给跪了)扩容因子为0.75的好处:如果扩展因子过小,HashMap 将会频繁地扩展容量,导致较多的内存开销和较慢的查询速度;如果扩展因子过大,HashMap 将较少地扩展容量,导致冲突的可能性增加,查询速度可能会变慢。
- 为什么arraylist也有一个0.75呢?(底层arraylist在扩容时,会调用System.copy()方法,它会先生成一个新数组进行拷贝,所以扩容会消耗一定的内存资源)
- jdk还看过什么源码?(线程池)
- java里面线程有几种状态?(就绪,运行,等待,等待一段时间,终止)
- 阻塞和等待有什么区别?(没答好,查了一下,阻塞会持有临界资源并等待,等待会释放临界资源,不过概念还是比较模糊)
- 线程调用sleep方法,sleep(10s),结束后,调用sleep的线程处于什么状态?(在sleep的时间内,线程不会释放临界资源,在sleep结束之后,线程正常运行,sleep一般是模拟一些业务,之后unlock就释放了临界资源,比如锁)然后就被套路了。。。 orz
- 那还是那个问题,sleep 10s 后线程就会立马被唤醒起来执行吗?(答的不会立马执行,sleep之后接notify/notifyAll才能唤醒。应该是会立即执行,自己脑子被绕进入了,orz)
- 线程池源码的一段话。。。 讲的是线程池创建线程,执行任务的过程。。。
- 问了创建了一个corePoolSize=maxPoolSize=5的线程池,不放任务,线程池中有多少个线程? (0个)
- 放了一个任务,线程池中有多少个线程?(1个)
- 任务结束了,线程池中有多少个线程?(1个)
- 放了10个任务,线程池中有多少个线程?(5个,还有5个任务在阻塞队列)
- 算法题,金字塔型数组,寻找从上到下的最小和,dfs秒了,问还有更优的吗,dp
- mysql判断题: select * from table where a=x and b=y and c=z,a,b,c 各有一个索引(总索引数为3),问,mysql执行这个sql语句走什么索引? (高版本mysql走联合索引,减少回表,但是面试官好像不太认可这个答案,orz)
- sql题:问table表中有日期date和订单号order_id,写sql语句求出在2023-01-01之后的重复订单
select order_id from (select order_id, count(order_id) from table where date >= '2023-01-01' group by order_id having count(order_id) > 1) t
- 问 select * from table where a=5 for update 加了什么锁?
答:行锁,是表锁行锁的行锁(面试官不太满意),当前读+临建锁,不过好像也不太对,orz
应该是锁了a这个索引吧,具体细节没怎么问
- 最近看什么书?
- 你跟前端起冲突了怎么解决?
- 反问:
- 在哪方面需要提升?
- 多关注基础知识,不要只提升广度,更要提升知识的深度。要不断的保持学习和知识的注入,多看东西部门做什么业务
- 本次面试的结果多久通知?
- 听hr统一的安排
- 本次面试,您更在乎的是基础,业务方面对应届生有多高的要求呢?
- 社招和校招不一样,社招需要你带来一些经验。公司会耐心的去逐步培养同学,所以校招更侧重专业能力,学习能力,好奇心和解决问题的能力等等。因此更加注重基础一些。