新华智云暑期实习一面二面(已offer)
2/23(周三)
一面(35min):
-
聊项目,断点续传,流量限制
-
平衡二叉树概念
-
获取普通二叉树所有的平衡二叉子树(口头答
- A:说了一个用遍历的方式挨个验证每个节点是否符合,面试官要求优化没说出来.....
- h
-
-
图的广度遍历和深度遍历(口头答
-
java实现一个任务的超时中断。
-
A: 计时使用一个标志来标志打断,任务线程主动中断。或者 使用Thread.interrupted()中断
-
-
单链表找倒数第k个节点(口头答
-
A:说了使用回溯法,然后面试官说如果链表长到递归栈溢出怎么办。又说了用迭代先反转然后再找第k个。没说到面试官想要的答案(快慢指针给我忘记了。。。。
-
-
算法题
-
大数求和(AC)
-
- 反问:略、
=========================================================================================更新2022-2-26
2/26(周六)
二面(1h):
- 聊项目,敏感词过滤AC自动机的实现原理(面试官说了个如果本来不是敏感词的单个词组合成了敏感词该怎么办.....我没考虑过)
- 问怎么学习的,看了什么书(准备了下计网和Mysql 结果没问 5555..)
-
怎么检测一个数是2的幂次方(往二进制说了,但是怎么快速找到第一个1的解法没找到,换题了)把 n&n-1 就可以(因为二进制幂次方的时候只有一个1,如 1000 & 0111)
- 1000个苹果放10个篮子,要求设计一种放法,可以支持0~1000任意数的拿法。(二进制表示0~1000, 按照位权 1 2 4 8 16......),追问最后一个篮子苹果数量(1000-前面的)
- 线程同步问题,三个线程交替打印abc,口述(说了用ReentranLock 或者 cas)
- 进程是什么时候才能运行,答了下进程七状态模型。
-
JMM内存模型 ,
-
追问:工作内存和主存区别。(答了下作用,和执行操作的流程)
- 追问:既然都在同一块内存中为什么在工作内存中效率要比主存中直接拿效率要高(说了下可能修改的时候得加锁会影响效率,os给进程线程分配资源,但是都没答到点子上) 是不是因为从工作内存可以直接拿,而从主存得先复制到工作内存,又或者从计算机取值的角度(IR寄存器)答,
- 2022.3.9(更正)jvm 在java 的层面定义了工作内存(那些线程内私有的变量)(cache) 主存(那些共享的变量), 普通情况下一个线程读一个变量是先将其从主存复制到工作内存,然后进行访问的,如果对共享变量没有修改操作,jvm会做一个优化,下次读取该变量的时候直接从工作内存中获取,而不需要从主存重新拉数据,这时候有其他线程修改了主存中的共享变量,对于当前线程来说修改也是不可见的。需要加上volatile 关键词,他做的操作类似总线的缓存一致性协议MESI。当主存中的共享变量被修改后,会及时通知其他的线程失效掉自己工作内存中的数据重新拉取最新的数据,来达到共享变量的可见性。但是其不能保证原子性(略,这个展开还有很多)。对于工作内存(cache)高速缓存肯定是比直接从主存中获取数据是更快的。
- 2022.4.9(补充)最近看了下《深入理解Java虚拟机》:对应线程的工作内存 虚拟机是会将其映射物理层面对应的寄存器和高速缓存中。所以速度会更快。模型对应:java工作内存---->cpu内核用的高速缓存和相应寄存器。 java主存------>操作系统用的主存
-
- volatile原理,如何保证的可见性
-
操作系统实现进程同步的几个方法
-
算法:
- 求一个数组中的 连续k个长度 的子数组中的最大和(AC 滑动窗口解)
-
- 面试官评价:Java底层深入还可以多看看书
感觉凶多吉少了.......
=========================================================================================更新2022-3-9
hr面,聊了聊天