OPPO后端开发工程师凉经

面试官是个中年的Java高级开发工程师,气场非常强,之前没有遇到过这种类型的面试官,我面试的时候就有点慌,这个可能也预示了后面面试失败的解决了吧,好的心态也是成功的必要条件之一。(这次面试全程很懵,加上忘记录音了,我只能尽可能回忆,之后会每次都录音的)

  1. 首先是自我介绍。

  2. 然后开始针对我简历中的TCP客户端/服务端程序(C/C++写的,当时项目要求的,我不是很擅长)开始问

    • 面试官:有没有想过如何改进你的程序

      我:我当时提的是再加一个线程池,将io多路复用之后产生的同步操作变为异步的。

    • 面试官:epoll是采用的边沿触发模式还是水平触发模式

      我:我回答用边沿触发模式

    • 面试官:读的时候有没有使用buff

      我:当时一下子懵了,忘记为啥要用buff了,就有点阿巴阿巴,然后想起了边沿触发模式时,没有新的数据进来的时候,只会触发一次提醒,需要全部读出来。然后我回答说,当时有设置read非阻塞。

    • 面试官:那write的时候会阻塞吗

      我:我项目里面没有把读事件注册到epoll,所有没有理解面试官的意图,回答的牛头不对马嘴的。面试官后面说,是让我回答操作系统用户态和内核态的切换。

    • 面试官:tcp四次挥手,close_wait发生在哪一段?为什么要有close_wait这个机制

      我:发生在被动关闭的那一段,close_wait时半关闭,被动关闭的一端还可以发消息。

    • 面试官:那你程序里面是如何处理这个close_wait的?

      我:调用read函数返回-1,我就认为读完了,如何就关闭用于连接的文件描述符了。

    • 面试官:那你这个确实很简单啊

      我:😅

  3. 线程/进程间通信有什么方式

    不是很了解,凭借对八股的记忆答了管道、信号、套接字。

  4. 开始往信号细抠,哪种信号会被忽略。

    不会。(39条消息) Linux的信号机制____Blue_H的博客-CSDN博客_linux信号机制

    面试官:那你对linux也不是很了解啊。

  5. Java中如何保证可见性的

    我回答的volatile。

  6. volatile保证可见性的原理

    读屏障和写屏障。Java内存模型将在写操作后插入一个写屏障指令,在读操作前插入一个读屏障指令。(我紧张说反了)

  7. 细抠屏障是什么。

    阿巴阿巴。volatile 和 内存屏障 - 哈哈呵h - 博客园 (cnblogs.com)

  8. 了解synchronized和ReentraLock吗?解释一下是如何实现的。

    回答了synchronized有重量级锁、轻量级锁和偏向锁,在jvm层面实现的。

    ReentraLock是用java实现的,基于AQS实现的。

  9. 我们平时用java时默认是不开启偏向锁的,为什么java新特性取消了偏向锁。

    不太了解。瞎答的。你知道 Java 的偏向锁要被废弃掉了吗? - 知乎 (zhihu.com)

  10. Java线程的状态有哪几种。

    6种。

    1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。

    2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
      线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。

    3. 阻塞(BLOCKED):表示线程阻塞于锁。

    4. 等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。

    5. 超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。

    6. 终止(TERMINATED):表示该线程已经执行完毕。

  11. 给了几种场景让我回答一下处于什么状态。里面有个ReentraLock获得锁之前是什么状态。面试官特意提了一下ReentraLock的自旋机制。

    之前理解错他的意思了,答成了time_waiting,他给了提示之后改成了Runnable或者Blocked。

  12. 你的项目里面是如何设置多级缓存的。

    Caffeine + Redis实现多级缓存。

  13. redis缓存穿透、缓存击穿、缓存雪崩区别和解决方案

    其实是常见的面试题的,但是心已经开始乱了,各说出来一种解决方案,然后就想不出来了。

  14. 单链表的翻转有几种方法。(这道题其实很简单,但是他考得越简单,我越慌,觉得是不是之前面的太差了,实在没的问了)

    双指针遍历迭代和递归。

  15. 分析一下两种方式的时间和空间复杂度

    迭代(时间O(N)、空间O(1))、递归(时间O(N)、空间O(N))

复盘一下自己本次的面试表现,我觉得最大的问题就是心态,这个面试官面我的时候就感觉压力很大,问的问题可能从我的面经里面单看觉得很简单,那是因为这次我没有录音,我只能记得我get到他点的地方,其实他会往细节一点点问,一点点抠,就像慢慢揭开你的遮羞布一样,因为非科班并且学习时间短,对知识的细节掌握的不够,所以我就经不起他的细问。有个面试时候的细节,我在回答问题的时候,有尝试把面试官往我擅长的地方引导,但是他马上打断了我,并且说:”请你回答一下我的问题“。

其实这次面试是有点压力面的感觉了,希望自己以后能有更强大的心脏,不卑不亢,也能和这种面试官“谈笑风生”,这次算是提前栽了个跟头,面完之后人也很丧。但是写面经的时候,自己重新梳理了一下,在发现不足的同时,心情也慢慢缓过来了。

最后,希望大家都能获得自己心仪的offer,人人有工作。

#面经##后端开发##OPPO#
全部评论
非科班转码人表示感同身受了 楼主加油
4 回复 分享
发布于 2022-03-24 00:42
楼主是实习还是春招呀?
2 回复 分享
发布于 2022-04-08 09:07
科班也不会,这需要课外自学🤣
2 回复 分享
发布于 2022-03-24 08:22
问的这么深吗
1 回复 分享
发布于 2022-04-08 09:05
楼主加油!
点赞 回复 分享
发布于 2022-03-24 10:37
反正我觉得这个纯粹是面试官的问题。扣的太细了啊
点赞 回复 分享
发布于 2022-04-02 19:24
同一个面试官无疑了。问的问题一摸一样
点赞 回复 分享
发布于 2022-04-21 20:14
实习还问这么多,话说oppo不用手撕代码么
点赞 回复 分享
发布于 2022-07-27 15:44

相关推荐

01-14 19:01
吉首大学 Java
黑皮白袜臭脚体育生:加个项目吧,一般需要两个项目一业务一轮子呢,简历统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写
点赞 评论 收藏
分享
02-26 15:33
已编辑
西北大学 golang
点赞 评论 收藏
分享
评论
16
71
分享

创作者周榜

更多
牛客网
牛客企业服务