Skip to main content
  1. other/

面试小结2022-04

·2845 words·6 mins·

最近花了两周时间去“实地考察了下市场”,记录下经历。

考察内容 #

作为后端开发,面试内容主要包括:项目经历、算法、Go语言、MySQL、Redis、操作系统、网络,其中重要程度为项目经历>算法>MySQL=Redis=Go语言>操作系统>网络。

项目经历 #

项目经历这一块是最重要的部分,主要考察对项目的熟悉程度、项目的深度以及语言表达能力。

面试官最喜欢问简历上的前两个项目,因此需要把自己掌握最熟的、更能展现自己能力的两个项目写在前边。

面试官一般都是以“介绍项目”开始,因此要提前准备好如何描述自己的项目,要包括以下几点:

  1. 项目背景
  2. 整体架构
  3. 项目成果
  4. 技术难点

面试官一般会针对某个点进行深入提问,从而考察应聘者对项目的掌握程度以及技术能力。针对项目里的技术栈,面试官还会进行延申,如:项目中使用了消息队列,那么面试官可能会问如何实现延迟队列。

MySQL #

MySQL是我们最常用的存储中间件,同时其内部逻辑也是非常复杂,因此常常作为面试题的主力军。在这两周我大致遇到了这些:

  1. MySQL的事务以及实现
  2. InnoDB存储引擎的索引实现(主键索引、二级索引)
  3. B树和B+树的区别
  4. Explain的使用
  5. 慢SQL优化

有的也会出题让写一些SQL,主要有分组、联表等操作。

Redis #

Reids作为工作中最常使用的中间件,其在面试中的重要程度甚至高于MySQL。在这两周我大致遇到了这些:

  1. 完整的请求过程是怎样的
  2. pipeline和事务的异同
  3. 基础结构的内部实现
  4. rehash的实现
  5. redis为什么这么快
  6. redis的使用场景

Go语言 #

相比Java的八股文,Go语言的面试点应该要简单很多。在这两周我大致遇到了这些:

  1. 切片扩容以及作为参数传递的坑
  2. interface类型的坑
  3. defer的坑(defer中改变命名的返回值)
  4. channel的使用(两个协程交替输出一个字符串)
  5. channel的内部实现
  6. go中实现并发管理的几种方式
  7. go中的内存分配
  8. 如何分析内存溢出
  9. 垃圾回收

操作系统 #

在工作中一般不会遇到操作系统方面的问题,但一旦遇到就让人头大。因此,操作系统方面的知识一定要扎实。我主要遇到了以下几个问题:

  1. 进程、线程与协程的区别
  2. 进程、线程之间的通信方式
  3. 协程为什么快
  4. 系统调用更消耗性能还是线程上下文切换更消耗性能
  5. 进程、线程上下文切换的过程
  6. 进程的组成
  7. 进程创建子进程的过程
  8. epoll与select的区别
  9. epoll中的通知方式
  10. 堆与栈的区别
  11. 堆快还是栈快,为什么

网络 #

熟悉网络能够让我们更快的找到某些突发问题的解决思路。我大致遇到了这些问题:

  1. 谈谈网络拥塞
  2. 什么是tcp粘包以及解决办法
  3. 分析场景:服务器大量time_wait连接

竟然没人问握手、挥手、滑动窗口了。。。

算法 #

算法是基础。不仅是程序员的基本功,也是面试的第一关,很多企业都会先让做一些算法题,过了的话才会有面试机会。

我一直认为算法考察的是两方面能力:思考问题的能力+代码实现的能力。前者需要大量的“刷题”经验以及灵活使用数据结构,后者需要良好的代码驾驭能力。

遇到的算法题就不列举了,基本上都是些中等难度及以下的题。

如果是机考并且是用牛客的话,一定要注意,很有可能需要自己处理输入和输出,一定要提前练习。

思维能力 #

除了以上这些外,还会遇到一些考察思维能力的题,如“8个小球,七个好的重量相同,有一个是坏的,重量与其他小球不同。给你一个天平,需要最少称几次能稳定找到坏的球”。

我认为这些题考察的是解决问题的思维能力,结果并不重要。当然,我的面试官可能不这么想,因为他一直问我结果是什么。。

NOT ONLY 考察内容 #

有些东西不会作为面试内容,但是会关乎到面试结果。

自我介绍 #

如何在简短的自我介绍中让面试官留下深刻印象甚至提起兴趣,这值得应聘者花费一些精力。

激情 #

没有人喜欢平淡的人生,也没有人喜欢平淡的对话。

面试官选人的标准之一就是愿不愿意与应聘者一起工作,如果应聘者给面试官的印象很平淡甚至是无聊,那应该不会有好结果。

价值 #

当谈及到期望的报酬,应该说多少?

应聘者清楚自己的技术价值,也知道自己的“附加价值”。作为应聘者,期望的报酬肯定包括了技术价值与附加价值;而作为面试官只能看到应聘者的技术价值。因此,如果应聘者只是提出自己期望的薪酬,面试官可能会对“溢价”感到疑惑。这个时候就需要应聘者展现自己的附加价值了:“我除了良好的技术能力外,还能为团队做出xxxxx,所以我期望的报酬是xxxx”

大环境 #

选择大于努力。在大环境不好的时候去找工作,很可能拿到比期望值低的报酬。

最近大厂纷纷裁员,在供大于求的环境下价格势必会降低,此时需要应聘者仔细考虑是否急需一份新工作。

职业规划 #

面试官经常问的另一个问题是职业规划。应聘者需要提前思考这个问题,最好不要临时抱佛脚。

另一方面,面试官往往比应聘者拥有更多的职场经验和人生阅历,抓住机会与面试官多聊聊人生的困惑,向面试官取取经,这样即使面试不通过,应聘者仍会有收获。

最后 #

技术人往往会有这样一种认知:只要我技术好,就不怕没工作。

我以前也是这么想,但最近有了一些改变。

最近读了杰克·韦尔奇的自传。作为一个换过很多份工作的人,我很难想象一个人一辈子就只在一家公司工作是什么感觉,而杰克·韦尔奇就做到了。

那么,我们为什么会有这种“错误”的想法呢?我下意识想到,现在的人太焦虑了。然而,人是环境的产物,大环境如此浮躁,处于环境中的我们要如何“耐得住寂寞”?

打开“脉脉”,总会刷到一些人在分享自己的跳槽经历——毕业几年,换了几份工作,薪水涨到了多少。而在互联网行业有一个被普遍认可的观点:跳槽才是最快的涨薪方式。

让我们从理性的角度来分析下报酬由何决定:

  1. 在刚进入公司时, 一个人的“价格”由市场的供需关系以及个人能力决定
  2. 在进入公司一段时间后,一个人的“价格”由他能够产生的价值决定

说白了,入职一家公司能够拿到多少报酬取决于市场,而互联网在过去的十几年野蛮生长,因此市场的价格也水涨船高,所以跳槽往往能够拿到更高的工资,但是他能产生对应的价值吗,不一定。

当员工在公司中稳定工作后,公司不再以市场的角度去思考员工的价格,而是以价值的角度去思考,这时候,如果公司还未形成盈利或者盈利不高,说明员工产生的价值不高,因此公司不会给员工太高的涨薪。

于是,“跳槽才是最快的涨薪方式"就成了近几年被普遍认可的现象,“只要技术好,就不怕没工作"也成了漂泊的技术人的一点自我安慰。

但如果一个人的能力足够强,能够产生巨大的价值,那他的报酬就会突破市场价格——任何一个脑子正常的老板都知道要如何奖励能够产生价值的人。问题在于,为什么没有这样的员工?《杰克·韦尔奇自传》中一个工人说到:25年来,公司一直为我的双手支付报酬,实际上,公司完全可以用上我的头脑——而且什么钱也不用花。

公司文化太重要了,让员工勇敢的表达自己的想法、创意太重要了,但是很少有公司会这样去做。

新冠疫情加速了整个世界的进程,移动互联网的红利期也即将结束,我们每个技术人都应该反思自己的过去和未来。