对一些面试常见问题的回应
这个博客竟然有7年没更新了,之前尝试过在微信公众号上写文章,但总感觉不够自由。最近找工作被面试搞得身心疲惫,同样的话每周重复好几遍,故写此文对一些经常被问到的问题作出回应,顺便把一些不适合当面讲的真实想法也写出来,希望面试官提前看下,减少沟通成本。
0. 自我介绍
基本上对于这个问题我的回答都是在复述简历,毕竟在工作中做过什么,有什么成就,这些东西早就写在简历上了。我很想说:如果您之前没看过简历,现在可以看下;如果看过了,就可以略过这个问题,直接问简历上的内容。对于简历上的链接,也请您点开看下,可以更好地了解我参与开发过的项目。
1. 主要写 Python?
最近几年写得最多的是 Python,再早是 PHP,前端也一直有关注。
DevOps 相关的工作一直有在做,所以 Bash 写得也挺多,另外还会写 PowerShell。
Dockerfile 也没少写,K8s 主要用云服务商提供的,没有实际部署和运维过。
国内外的公有云都有用过,也基于他们提供的 API 开发过服务。
Go、Java 可以修修 bug、写点简单的功能,开发大型项目可能需要点时间学习。
安全领域偶尔也有关注,之前分析过 Edge 应用商店里一个混淆了 JS 代码的恶意扩展,还被一些科技媒体转载。
Android 逆向也玩过,上家公司的内部系统要用 APP 生成的动态码登录,我嫌每次都要看手机太麻烦,就把 APK 解包找到了动态码的生成算法以及与服务器之间的通信逻辑,自己写了个脚本实现了自动登录。
以前沉迷 WoW 的时候还用 Lua 写过插件。
编程语言只是工具,切换语言对我来说不是一件很困难的事情。操作系统也一样,Win、Mac、Linux 无缝切换。各种软硬件自然也折腾过不少,主要是兴趣驱动,觉得好玩就研究下。
个人比较追求代码的简洁优雅,常常在重构代码上花费大量时间,研究代码量更少的写法。
2. 用过 MySQL、MongoDB、Redis 等数据库吗?
用得最多的是 MySQL,基本都是 CRUD,一直在用 ORM,SQL 写得少。MongoDB 和 Redis 自然也用过。除了数据库,像 ZooKeeper、RabbitMQ 这些也用过。
说实话数据库研究得不多,一般复杂的业务逻辑都在代码里维护,数据库只是用来存取结果的。缓存用得也不多,毕竟 AI 相关的项目,其瓶颈都不在 API 上,一般都是数据量太大、计算资源不够。
3. 为什么上面说的技术栈大部分都没有出现在简历上?
不是天天在用的东西不敢往简历上写,遇到问题都是现查,细节不看代码根本不记得,不记得的东西写简历上不是减分吗。
4. 没网怎么办?
别说没网了,离开自动补全,连标准库的 API 都记不全,根本写不出代码,更别提现在越来越依赖 GitHub Copilot 了。
工作又不是考试,遇到不会的问题就问搜索引擎,现在还可以问 AI。写代码又不是搞科研,哪有什么创新性,只要问的问题正确,就一定有解决方案。
5. 会翻墙吗?
第一次听到这问题我是十分惊讶的,还有不会翻墙的程序员?只看墙内的二手内容吗?后来工作久了,接触的同事越来越多才发现,原来还有很多码农不会翻墙,别说翻墙查资料了,连自学能力都没有。
答案当然是会,而且是重度依赖,连路由器里都装着 OpenClash,手机里自然也有,另外我翻墙的历史比我接触编程的时间还要早。
6. 如何看待八股文和算法题?
八股文我是懒得背的,问我不如问 ChatGPT,AI 绝对比人类回答得更好。算法题我也从来不刷,我认为算法题考察的是数学能力,而我对数学并不感兴趣。
知道根据业务场景选择技术方案,比正确背诵八股文要重要的多,就算不知道该用什么,去看文档不就知道了,哪个优秀的产品没有详尽的文档来介绍适用场景的。
算法可能在学校里很重要,工作中 99% 的场景是写 CRUD,各种业务代码根本用不到算法,就算用到了,还是那句话,问搜索引擎,把别人的代码变成自己的,是一个程序员的基本素养。
7. GitHub 上没有什么有亮点的项目
这个问题今年倒是没被问到过,可能今年大环境不好,应聘的人太多,面试官连 GitHub 都没时间看吧。
我懒得造轮子,别人有现成的工具我就直接用,有些功能没有或者有 bug 就提个 PR 改改,毕竟开源不就是为了让其他人也能参与开发吗。贡献过的项目实在太多、太杂,就不一一列举了,大部分都是添加个 feature 和 bugfix 之类的,列出来也没意义。
8. 你有什么优势?
这要看您需要什么样的人了,如果是招实习生,那肯定是名校毕业,八股文背得滚瓜烂熟,算法题写得又好又快的应届毕业生适合;如果是整天写 CRUD 的螺丝钉,那一个两到三年经验的码农就够了,比我年轻,要的还比我少;如果是从零开始,搭建一套完整的服务,至少 Web 开发这块,从前后端开发到部署、运维,我都能做。
没错,我认为我适合当架构师。正如前面所说,接触编程十余年,我写过很多语言,用过很多工具。既独立设计开发过中小型项目,也参与开发过大型项目,积累了大量经验。
上家公司刚入职的时候,领导让我查个 bug,具体现象记不清了,就记得我看到某个模块配置存取的代码(各个模块的配置都是独立存取的,没有统一的代码)时,惊讶地发现有些配置是以纯文本的形式存储在文件里的,还没加锁。任务运行过程中,不断地读写同一份文件。不用想,肯定是这里了,加了个锁之后再也没出现过。后来我把这块代码全重构了,用数据库存,文件只作向后兼容,只在任务完成后写一次作备份,如果数据库里没有就读文件写入数据库。
十几万代码,入职第一周就发现并解决了一个隐藏 bug,这自然得益于多年的工作经验和大量的源码阅读。就算我背不出 ACID 的含义,也知道任何有并发可能性的地方,都要做到事务隔离。
另外我的视野非常广,一直保持着对业界动态的关注。举一个简单的例子,虽然我平常不写 Java,但我们组开发的项目里有用 Java 写的,Log4j 曝出严重漏洞后,我第一时间在组会上提醒相关的同事关注。
这两年大模型火爆,像 ChatGPT 和 Midjourney,我都有付费使用过。虽然不是做算法的,但既然工作内容都与 AI 相关,我自然也会了解下相关的技术原理,只不过数学不好,看不懂公式,只是看个大概而已。但有些搞算法的面试官,非揪着具体原理问,不知道什么意思。比如有次面试官问我联邦学习是如何通信的,不同参与方之间传递的数据是什么。实话说这块我完全没关注过,任务调度与算法组件、数据交换等都是由不同的组件负责的,我只参与开发过调度部分,其他部分只是部署使用过,并没有详细阅读过源码。
9. 为什么离职?
基本上一份工作干一两年就厌倦了,毕竟普通开发就是螺丝钉,只负责一小块东西,需求永远写不完,想参与点别的项目也是力不从心。像前面说的算法组件、数据交换等仓库,我也有想过去看,但每个仓库都是几十万行代码,连领导都不建议我去看。当然,还是太懒,要是我把打游戏的时间全用来阅读代码,那一定早就成为组内的核心成员,现在也不会在找工作了😂。
每次离职的原因其实都差不多,同样的活干多了,工作态度和积极性就慢慢变差,只是被动地完成工作,甚至还能拖就拖,领导不满意,主动或被动离职。不过您放心,第一年我绝对是充满干劲的,至于之后就要看环境有没有变化了。
10. 空窗期过久
HR 最喜欢问这种问题,每次我都想问问 HR:你喜欢上班吗?要是财务自由了,你还在这里当 HR 吗?有几个打工人喜欢上班的,我说自己太懒只是自嘲,很清楚大部分人跟我一样,不想上班、不想努力,非得在面试时想些假惺惺的借口,搞得休息跟犯罪似的。手头有钱就歇一阵,没钱就找工作,就是这么简单。
虽然互联网行业技术更新迭代非常快,但也没快到几个月就变天了。再说了,我休息又不是代表不看新闻、不写代码了。
11. 接受降薪吗?
尽管我知道今年大环境非常差,就业形势严峻,但我不会接受降薪的,哪怕是找不到工作。请 HR 不要浪费时间跟我砍价,我在上家公司的薪资就是我的底线,不接受更低的价格。