今年我们团队在西安的招聘名额比较多,我作为团队的招聘组长,筛选了一波又一波的候选人。
西安是一个有实力的城市,名校云集,985/211 院校很多,包括西安交大、长安大学、西北工业大学、西安电子科技大学、西北大学、西北农林科技大学。多数候选人也是出自这些名校。
但是跟北京、上海、杭州这些互联网氛围浓厚的城市相比,西安的互联网氛围还是逊色一些。从我收到的简历看,候选人目前的岗位主要有下面四类:
-
银行科技公司的员工或者外包;
-
华为西安研究所、腾讯云等大厂,岗位集中在云计算、大数据、devops 等,很多人有管理经验;
-
互联网公司的外包岗位;
-
其他不太知名的公司。
最近华为某个部门要撤离西安,整个团队面临迁移到别的城市的处境,这对于已经成家的员工来说,几乎不太可能。他们只能选择离职,我收到了不少相关候选人的简历。
下面的我摘出的一部分简历内容:
使用技术:Spark、Hadoop、Clickhose、K8s 等。工作职责:
主导大数据架构设计和技术选型;
为数据流处理提供优化方案;
新方案设计的推动落地实施;
团队管理。
擅长技能:
熟悉 C++、Java、Linux 相关技术栈;
熟悉 Spring、SpringBoot、SpringCloud 等框架;
熟悉大数据相关技术,如 Kafka、flink、Spark 等;
熟悉代码管理工具,如 maven、git 等;
具体团队管理能力和经验。
自我评价:编程能力强,热爱钻研技术,待人真诚,具有很强的抗压能力,良好的团队管理能力。
就从简历来看,候选人是很优秀的,学历背景优秀、大厂工作经历、带过团队、项目经验丰富。
我满怀期望跟候选人进行了沟通,但整个过程并不顺畅。
我:先简单介绍一下自己的情况。
候选人:我是在 xx 年毕业,毕业后经历了几家公司,...,从 xx 年开始我在 xx 研究所做云计算和大数据相关的工作。主要参与过 xx 项目。
我:详细介绍一个自己主导或者参与比较多的项目,包括项目中有哪些服务,用到了哪些技术栈,这些服务在业务流程中的作用,服务间怎么调用的。
候选人:xx 服务主要包括了 4 个服务,服务间通过 HttpClient 来进行通信 ...
先是自我介绍,然后深入介绍一个项目,这一般是我面试的开场套路。因为没有接触过候选人介绍的类似项目,我听得马马虎虎,假装听懂了。
我:你们微服务是怎么划分的,都有哪些服务?服务之间是怎么通信的?
候选人:我们服务是部署在云上,...
我又是似懂非懂的,当面试官好难。要不纯问一些技术吧。
我:问你几个技术问题吧。给定一个长度为 n 包含 [0, n] 中 n 个数的数组 nums,数组是有序的无重复的,找出 [0, n] 这个范围内没有出现在数组中的那个数。(leetcode268 改编,改得更简单了)。
候选人:新建一个长度为 n+1 的数组保存 [0, n+1] ,对原来的数组做循环依次查找每个元素是否在新建的数组中。
我追问:这个时间复杂度太高了,o(n^2),而且还需要额外空间,有更好的方法吗?
候选人:我想想,(大概过了一分钟),不依赖外部数组,对原数组进行遍历,用数组下标加 1 和数组在当前下标的元素值进行比较,不相等就结束循环,最坏时间复杂度是o(n)。
我追问:还有更好的方法吗?
候选人:我再想想,(大概过了 30 秒)想不出了。
我又失望了一次,其实我想听到的答案是二分查找,用递归实现。
我:Java 中的 TreeMap 和 LinkedHashMap 有什么区别?
候选人:TreeMap 是有序的,LinkedHashMap 记不清了。
这里我想考察候选人的写代码情况,长期不写代码的人很容易记不清。
我:Java 中有哪些锁,可以讲一下吗?
候选人:我们常用的是 synchronized。
我:Java AQS 中的锁使用过吗?候选人:好像有一个 reentrant 什么,记不清了。
到这里,我感觉候选人应该主要做管理,已经很少做开发了。
我:使用 Spring 做依赖注入的时候,@Resource 和 @Autowired 有什么区别?候选人:@Autowired 是用类型来注入,@Resource 是用名字来注入。
我追问:这两个一般用在什么场景呢?
候选人:我们一般使用 @Autowired 比较多,@Resource 用的很少。
我:(考虑到候选人是云计算岗)K8s 中的 deployment 和 statefulset 有什么区别呢?(这个问题其实是为了缓解尴尬)
候选人:statefulset 用在有状态的应用,...
我:(最后了)请问你离职的原因是什么?
候选人:跟银行相比,华为还是不太稳定。为了节约成本,我们部门要撤掉,整体迁移到 xx 和 yy 两个城市,我家在西安,不太想去。
这个候选人我没给通过,原因有几点:
-
我招聘的这个岗位对于资深的候选人,入职后肯定要带团队;
-
带团队不是只做管理,而是技术经理,需要能冲在一线,需要有不错的技术能力,有行业背景那就更好了;
-
团队对每个人都是有代码考核的,不允许不写代码的同事存在;
-
我要招一个人跟我做同事,当然希望基础好一些,这样可以对团队有一个很好的指导。
最后,分享几点自己的见解:
-
可以丢掉技术,但得有几个前提:
-
要保证现在的工作足够稳定,不会被淘汰;
-
即使被淘汰了,也不担心,因为有丰富的人脉资源,可以帮助自己很快找到下一家管理岗;
-
不用担心经济问题,因为自己已经实现财富自由或者可以选择创业。
-
面试中如果只是泛泛而谈,那不如直接说我不会,或者记不清了;
-
社会对大龄程序员要求很高,技术、业务,高 P 的职位多数也要求懂管理;
-
如果不是迫不得已,不要轻易换赛道,除非是 AI,ChatGPT 等很火的赛道。换了赛道,意味着之前的积累基本都会丢掉;
-
今年的情况机会很难得,准备好了再去面试,不打没有准备的仗。