第一次参加面试,感觉问的东西基本都能答得上来,但是一些问题理解得不深入,之后得沉淀。
面完之后秒挂,挺伤心的,我总结的原因是:
1. 自身准备不充分,基础薄弱,面试时很紧张
2. 我准备的是 Java 后端,结果面的是招 c++ 的, 我事先根本不知道,离谱
3. 我投的 base 是上海,面试官说他们是在深圳
八股比较少,主要问的是简历上的项目。(
可能 c++ 的面试官不怎么知道 Java 八股)
说了 string hash list set 等等 (以为要问这些数据结构的底层实现原理,心想寄了,但是幸好没问)
结合项目讲了一下,主要使用 string set 数据结构 (其实只用到了 Redis 的缓存功能)
在项目的背景下说了一个应用场景,面试官认可了。面完之后搜索了一下,知道了更多的场景 (这个应该是 Redis 的面经,但是没有准备)
不太会,随便瞎扯了点,不知道是不是考察 Redis 分布式锁的相关知识,这个之后得研究一下
这个认真准备了,流畅地说出来了。(心想面试官会问三握四挥,但是并没有问。。。)
讲了 HTTP /1.0 ~ HTTP /3 的发展,3 是基于 UDP 的,其余基于 TCP。
讲了 UDP 不需要连接,速度快,效率高,不会有队头阻塞之类的,但是面试官觉得比较宽泛,不断追问为什么。
这个不太清楚。
讲了虚存是操作系统重要的虚拟化,用户编程使用的是虚拟地址空间,内存管理等等。
代码段、数据段、PCB
终于有 Java 的八股了(/(ㄒoㄒ)/),结合项目说了类的加载、连接、初始化过程,包括在项目中如何读取 class 文件,如何验证 class 文件格式,如何解析 class 文件将类信息等存入方法区等。
cafe babe 常量池 字段表 方法表等,没有说全
说了一下实现,大体就是不断取指,译码,执行,其实具体的实现细节有点忘了。。。
说了堆可以看成是一棵二叉树,小根堆就是每个父节点的值小于两个子节点的值这样的二叉树,然后以底层用数组实现的小根堆为例讲了讲插入堆时候的上浮,删除小根堆最小元素之后调整堆的下沉操作,分析了复杂度。
在问完了小根堆之后面试官让写算法题,当时很慌,以为面试官要让我手搓堆了,但是题目打开一看是链表反转。。。
做题时是在腾讯会议中给了一个 web IDE,但是面试官允许屏幕共享+本地 IDE。
做完之后讲解算法思路 + 时空复杂度。
面试官继续问: 为什么你准备的是 Java, 做题要用 C++ 呢? 平时做题用 C++ 吗? 说一说你为什么要这样?
我: C++做题比较爽,讲了讲 C++ 一些语言特性之类的, 语法简洁 lambda 函数 好用的 STL 之类的,C++编译运行速度快...
面试官: 我看你 ListNode 这个类中构造函数之前使用了 explicit, 请你说说使用和不使用 explicit 的区别?
explicit ListNode(int val): val(val), next(nullptr){};
我: 使用 explicit 之后需要显示声明,比如 ListNode* node = new ListNode(1); 不加的话会隐式转换 ListNode node = 1;
主要在腾讯会议下做实时通信、音视频传输
面试官: 哦哦, 其实我们团队主要的开发语言是 C/C++, 但是其实没有关系,语言都是相通的。
我: ????? 这下知道自己寄了。
整体来说面试感受不错,能够感受到面试官很认真地提问,问的也不是偏难怪的,对于答不上来的能够引导自己去思考。
不足的是面试官好像在上班,有噪声,尤其是在他介绍部门业务的时候。。。