腾讯一面(凉)
4/1 腾讯一面(挂)
(1h05min)
直接上来开问JVM和多线程。面试官摄像头也没开。
1.JVM内存结构
只答了元空间、虚拟机栈、堆。
2.定义了两个局部变量 int a=10; new object。这两个在JVM中什么位置?
答:a在虚拟机栈中。object在堆中。
3.对象有没有可能在栈中
答:对象在堆中。
4.JAVA主要的垃圾回收方法?
答:标记清除、标记整理、复制算法、分代收集算法
5.可达性分析算法GCroot,它是怎么找到垃圾的?
答:这块实现不太清楚,说了哪些对象可以当GCRoot(好像也说错了),然后讲沿着一个类似树的往下找。
6.有哪些标记方式?
答:这块不知道了
然后开始垃圾收集器的拷打。
7.G1垃圾收集器的优点。
答:这块不是很清楚,说了并行化速度快,每块区域都可以当新生代和老年代。
8.CMS收集器的不足
答:这一块也不太清楚。
9.CMS在哪些阶段要STW
答:不会答。。。瞎答的。。
10.CMS重新标记时间会很长吗?
答:(不清楚)我说的不会很长,因为重新标记的一些垃圾比较少,耗时不会太长。
11.垃圾回收器之间的差异
答:。。。面试官看出不会垃圾回收器了,哭哭,
12.有哪几种接口可以创建线程池
答: 通过Executors类的静态方法创建,但一般不用这种方法。另外是用new ThreadPoolExecutor()
13.给了核心线程数,阻塞队列大小,最大线程数,问线程池有几个线程去执行任务。
答: 这个会,基本八股。
14.假如阻塞队列用了一个无界的LinkedQueue,这时会有几个线程到阻塞队列中去。
答:这个不太清楚,就回答了一般就算是链表阻塞队列也会设置队列大小。
15.优先队列是如何实现的?
答:这个也不太清楚,答了Executors有个Delayedpool。(其实是记混了线程池中的DelayedWorkQueue)
16.volatile关键字怎么实现可见性
答:先说了可见性是啥(但是当时回答成了有序性。。。哭)防止编译器优化代码,禁止指令重排序。
17.面试官反问,多线程同步跟这个有什么关系。面试官想让我说volatile的读写屏障
答:这个当时只有个模糊的概念。就凭记忆说了写是向上屏障,读是向下屏障。。。
18.场景题:大概就是怎样让两个线程在某个条件的时候会合,然后再让线程往下执行。
答:先说了join,但面试官说不对,我就说了可以加个if条件,到了这个条件停下来。然后又说可以有await()和noitify。
19.如何分辨当前线程是否做完这个任务了?
答:。。。还是if条件。
20.面试官又问当有1000个线程的时候,加if条件太耗时,有什么解决办法?
答:。。。。不会啊!!!!只说了可以放在一个队列中,没学过微服务,但简单知道点MQ,就说了可以把达到条件的先放在一个等待队列中(开始胡答了。。。)
21.Linux判断性能指标
答:nvidia-smi看gpu,top看cpu
22.算法题:
判断是否有环
用了快慢指针。。。但是输入语句不会写。
总结:总的来说还是基础不牢,对于一些细节、还有具体实现方面是个模糊的状态。还是得再沉淀沉淀。
#软件开发2024笔面经#