程序员面试系列(2)非计算机专业程序员

大学中读了一个非计算机专业,就业之后发现程序员收入高,很多人勇敢的选择了转行,我们公司不对应聘者的大学专业有要求,基本上大专以上学历,工作三年经验就可以通过hr 的简历筛选,我在最近的面试中遇到了两位有了三年经验的非计算机专业的程序员,他们能力都超过了应届毕业生,可以独立的完成简单的需求,例如:分页查询某类信息,条件搜索分页,简单的连表查询,但对于复杂的任务就有点力不从心的感觉,问道一些原理上的东西就会暴露出一些缺点。

一、转行的勇气

无论面试结果如何,我都对非计算机专业的程序员表示钦佩,我身边也有很多人高考分数很高,读了不错的学校,可惜选了环境工程、土木工程一些就业竞争压力比较大的行业,但很少有人有勇气或者行动去转行程序员,就如同我的一位学了土木结构的同学,凭自己的能力拿到了一级建造师,学习能力绝对优秀 本科普通211 考研到了头部985.
可惜竞争压力大,我羡慕他进了国企设计院,他羡慕我年轻赚到了钱。

他说自己的建筑专业的知识形成了系统,转行计算机很难,他反问我若是计算机专业过剩,土木稀缺,你会从头开始学习转行土木工程师吗?我思考一阵应该不会,即便是转行我也会转相近行业,或者学习门槛低的行业,计算机的学习门槛并不低,如果你只是为了年轻赚钱,会模仿同事的写法,写固定业务的代码,那么你到了35岁就会逐步被行业抛弃,如果你想把程序员作为终生职业,那么你就得活到老学到老。

二、转行的途径

2.1 通过培训班

培训班需要有自己的定力,付出时间和金钱,一般学校越好培训班的包装越好,可以找到不错的工作,接下来就靠运气,遇到好同事,自己虚心请教,在第一家公司站稳脚跟,逐步提升自己的能力。

2.2 考研计算机专业

这个途径最靠谱,也最受行业认可,计算机专业的研究深度超过了本科计算机,况且通过了考研专业课,计算机基础知识一般都没啥问题,公司并不是需要一个计算机专家,但是讨论技术问题的时候,需要专业背景知识,例如什么是线程安全,悲观锁、乐观锁。
特别是解决线上问题的时候,没人有时间普及基础知识。

2.3 边工作边学习

这条路最难,一切靠自己,最好有个共同学习的伙伴,自己善于学习,自己找到靠谱的教程
这里不推荐,免得有广告嫌疑。

不得不说,培训机构的教程一言难尽,如果从功能实现上,技巧是没啥大问题,但是很少触及原理,本质,理解不到本质解决问题就是容易云里雾里。抓不住重点。

三、两位3-5年的非计算机专业候选人面试记录

A: 211 大学非计算机专业,简历中出现了二线大厂,但是项目偏简单,基本上设计信息桥梁的作用,接近外包项目,没有复杂的业务逻辑,技术栈不够全面。

A 履历很好看,好学校,大厂经历,但是项目很一般,我看中了他的学校、大厂经验,给了面试机会,但面试下来却给我一个刚毕业的感觉,首选 计算机基础没有补齐,很多计算机专业术语不知道,这点影响同事之间的交流。技术沟通。

候选人所在的大厂号称XX 四大坑,加班多著名,但是候选人却没有加班,我们一般安排晚上电话面试,猜想也是大厂的清闲岗位,候选人说自己需要出差到客户方,基本上算是技术支持,简单的接口对接工作。

候选人项目基本上是单体,偏向工业互联网,物联网,没有互联网这种高并发,高可用,灵活上线的工作经历。

很可惜能力和经验不匹配。

B 统招本科 采矿工程 自学转行,3年经验

B的业务沟通很顺畅,能清楚表达出自己做的功能模块,实现的业务逻辑,清楚业务逻辑细节,可以确认项目是真实的,这时候他已经完成了转行,即使达不到我们公司的要求,他也会拿到其他公司的offer。

但是B 的项目逻辑不够复杂,一个单体应用、一个分布式项目。

由于此次招聘的岗位是P6 ,我们公司岗位定级对表阿里,但是基本上对后选人的要求低于阿里,实际上也就是阿里P5 的要求,能独立完成比较复杂的需求,例如一个计费模块,一个审核模块。

根据简历,我开始由浅入深,简历中写了

具有扎实的 Java编程基础,理解 IO、多线程等基础框架,对 JVM的 原理有一定的了解

每个人对扎实的定义不同,但写上扎实就是熟练的使用Java,我问了一个问题:

如果一个Java文件中写了四个class类 一个枚举,那么Java文件编译后有几个class 文件,候选人开始卡主了,最后猜对了答案,但是不知道原理。

这样的表现算不算扎实呢?

我又问,hashMap 的扩容过程,什么时候会触发扩容,扩容的步骤,结果候选人答出了负载因子0.75 的由来,泊松分布的一个极值。
参考资料:
https://blog.csdn.net/sl1202/article/details/108292693
我很欣喜,虽然答非所问了但是候选人确实看了源码。

一般答出这些就站在一定高度,我怀疑遇到了隐藏的高手,我接着引导 如果我初始化的时候hashMap的容量是18 ,那么第一次扩容后容量是多少?候选人算了几十秒说 容量一般是2的N次方,这个没问题,我又问为什么是2的N次方,回答:可以减少hash冲突,这里就有点偏题了,hashMap的hash 计算结果 和容量没有关系。

   static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

hashMap 中获取Hash的代码,其中有将计算出的原始hash值的高16位特征混合到低16位,为了使得数组中分布更均匀。
在这里插入图片描述
参考资料:https://www.cnblogs.com/mxxct/p/13857097.html

我又问为啥容量一定是2的N次方,候选人答不出来。

这里我就开始怀疑候选人的计算机基础知识了。

我们组有一个经典问题,怎么获取到一个链表的倒数第三个节点,我有时候会问怎么判断一个链表是不是环,这个数据结构题目,大概只有百分之二十的人可以答出。

知道使用双节点遍历的几乎没遇到过。

接下来我又问了乐观锁、悲观锁,重入锁,候选人都没回答出。

这是我大概了解了候选人的阶段,大概是计算机1-2年经验,一般我们对于计算机专业可以给到P5 ,非计算机专业只要能回到到 计算机网络 三次握手、四次挥手、https 协议,cookie session 也足够,知道B+ 树,知道MySQL 回表,聚簇索引、非聚簇索引。知道数据库事务隔离级别。页给了

这时候我已经知道候选人无法达到能力要求,所以接下来我开始启发式的面试,希望多给候选人一些学习思路

我又问了
1.synchronized 锁的用法 考察 锁的对象,锁的是当前对象 还是 类对象,这时候候选人说了一个不专业的说法,很影响面试。
2.springBean的作用域,候选人都答出来了,但是不熟练,我又问了springBean 的名称可以重复吗,别名可以重复吗,类型可以重复吗?
3.spring怎么使用Bean ,回答使用autowire 注解,我说不用注解怎么拿到Bean 候选人表示不知道

以上三个问题 P6 是必须知道的,因为很多spring 项目启动的问题就是SpringBean的配置不对。

这时时间已经40多分钟了,我让候选人问了我几个问题,说了一个鼓励的话并且委婉告诉了候选人的面试结果。

希望他能找到一个适合自己的职位。

欢迎有想法的同行一起交流:QQ群:424506194

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值