OPPO后端开发工程师凉经
面试官是个中年的Java高级开发工程师,气场非常强,之前没有遇到过这种类型的面试官,我面试的时候就有点慌,这个可能也预示了后面面试失败的解决了吧,好的心态也是成功的必要条件之一。(这次面试全程很懵,加上忘记录音了,我只能尽可能回忆,之后会每次都录音的)
首先是自我介绍。
然后开始针对我简历中的TCP客户端/服务端程序(C/C++写的,当时项目要求的,我不是很擅长)开始问
面试官:有没有想过如何改进你的程序
我:我当时提的是再加一个线程池,将io多路复用之后产生的同步操作变为异步的。
面试官:epoll是采用的边沿触发模式还是水平触发模式
我:我回答用边沿触发模式
面试官:读的时候有没有使用buff
我:当时一下子懵了,忘记为啥要用buff了,就有点阿巴阿巴,然后想起了边沿触发模式时,没有新的数据进来的时候,只会触发一次提醒,需要全部读出来。然后我回答说,当时有设置read非阻塞。
面试官:那write的时候会阻塞吗
我:我项目里面没有把读事件注册到epoll,所有没有理解面试官的意图,回答的牛头不对马嘴的。面试官后面说,是让我回答操作系统用户态和内核态的切换。
面试官:tcp四次挥手,close_wait发生在哪一段?为什么要有close_wait这个机制
我:发生在被动关闭的那一段,close_wait时半关闭,被动关闭的一端还可以发消息。
面试官:那你程序里面是如何处理这个close_wait的?
我:调用read函数返回-1,我就认为读完了,如何就关闭用于连接的文件描述符了。
面试官:那你这个确实很简单啊
我:😅
线程/进程间通信有什么方式
不是很了解,凭借对八股的记忆答了管道、信号、套接字。
开始往信号细抠,哪种信号会被忽略。
不会。(39条消息) Linux的信号机制____Blue_H的博客-CSDN博客_linux信号机制
面试官:那你对linux也不是很了解啊。
Java中如何保证可见性的
我回答的volatile。
volatile保证可见性的原理
读屏障和写屏障。Java内存模型将在写操作后插入一个写屏障指令,在读操作前插入一个读屏障指令。(我紧张说反了)
细抠屏障是什么。
了解synchronized和ReentraLock吗?解释一下是如何实现的。
回答了synchronized有重量级锁、轻量级锁和偏向锁,在jvm层面实现的。
ReentraLock是用java实现的,基于AQS实现的。
我们平时用java时默认是不开启偏向锁的,为什么java新特性取消了偏向锁。
Java线程的状态有哪几种。
6种。
初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。阻塞(BLOCKED):表示线程阻塞于锁。
等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。
超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
终止(TERMINATED):表示该线程已经执行完毕。
给了几种场景让我回答一下处于什么状态。里面有个ReentraLock获得锁之前是什么状态。面试官特意提了一下ReentraLock的自旋机制。
之前理解错他的意思了,答成了time_waiting,他给了提示之后改成了Runnable或者Blocked。
你的项目里面是如何设置多级缓存的。
Caffeine + Redis实现多级缓存。
redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案
其实是常见的面试题的,但是心已经开始乱了,各说出来一种解决方案,然后就想不出来了。
单链表的翻转有几种方法。(这道题其实很简单,但是他考得越简单,我越慌,觉得是不是之前面的太差了,实在没的问了)
双指针遍历迭代和递归。
分析一下两种方式的时间和空间复杂度
迭代(时间O(N)、空间O(1))、递归(时间O(N)、空间O(N))
复盘一下自己本次的面试表现,我觉得最大的问题就是心态,这个面试官面我的时候就感觉压力很大,问的问题可能从我的面经里面单看觉得很简单,那是因为这次我没有录音,我只能记得我get到他点的地方,其实他会往细节一点点问,一点点抠,就像慢慢揭开你的遮羞布一样,因为非科班并且学习时间短,对知识的细节掌握的不够,所以我就经不起他的细问。有个面试时候的细节,我在回答问题的时候,有尝试把面试官往我擅长的地方引导,但是他马上打断了我,并且说:”请你回答一下我的问题“。
其实这次面试是有点压力面的感觉了,希望自己以后能有更强大的心脏,不卑不亢,也能和这种面试官“谈笑风生”,这次算是提前栽了个跟头,面完之后人也很丧。但是写面经的时候,自己重新梳理了一下,在发现不足的同时,心情也慢慢缓过来了。
最后,希望大家都能获得自己心仪的offer,人人有工作。
#面经##后端开发##OPPO#