背景
又是一年中金三银四的招聘季节,最近有小伙伴问我:“现在 3
年左右军哥给别人面试都问些那方面啊?”,当时自己按照之前面试的流程简单回复了他:“一般是基础、项目技术、公司项目技术匹配度;当然基础很重要哦!”
后面想想感觉回答的还不够详细,我相信还有其他一些刚入行不久的程序员,也会和我上面的小伙伴一样有同样的问题,所以就有了此文,来分享我的一些浅薄认知,与君共勉吧。
这几年面试过不少人,也被别人面试过;有过对答如流的技术面试,也有过灰溜溜的彻底跑路。
下面是我常问或被问的一些技术点分享给大家:
-
Spring
:AOP、DI、源码 -
SpringBoot
:自动装配, -
SpringCloud
:SpringCloudAlibaba
、微服务、 服务治理 -
Dubbo
-
Redis
-
Java
锁机制(Lock
) -
消息队列:
Kafka
、RocketMQ
-
SQL
优化:索引优化、锁机制 -
多线程
-
JVM
性能调优 -
分布式事务
-
分布式锁
-
数据结构与算法
-
另外包括电商秒杀系统如何设计架构等。
大家发现没有,问的技术范围都一个共性:“基础”。
那什么是基础呢?
“基础就是底层原理,是支持上层技术的内核原理,比如数据结构与算法、锁机制、多线程、JVM等。
注意,据一些小伙伴反馈,现在的面试动不动就问数据结构、算法、计算机底层原理、开源技术底层原理,比如某节。
感觉一些好的大厂对程序员的要求越来越高了,所以想要工资高,必须在平时打好基础呀。
回归正题,作为面试者如何知技术面试官的心呢?
第一、技术面试官眼中的技术深度
但凡工作有一定年限的程序员,或多或少对自己熟悉的技术有一定的理解。而一个程序员对自己熟知技术理解的深浅,我觉得特别能反映他的内功是否深厚。

比如面试官问你 java
的 synchronized
关键字问题,一般面试会追求角度,由浅入深,直击灵魂的连环炮:
-
synchronized
的使用 -
synchronized
底层原理 -
synchronized
优势和不足 -
synchronized
与其他技术比较
其中最难回答的可能是 synchronized
底层原理了,因为这里面涉及到 Java
很底层的东西。比如 虚拟机、线程的工作内存与主内存、计算机处理器指令、对象锁 等等。而这些是平常开发人员很少会关注的层面,但这又恰恰是彻底掌握 synchronized
的关键知识。
试想,你 1
年前就知道如何使用 synchronized
,三年过去了,还是 1
年前的认知水平,那你的竞争力就不如工作一年工作经验的同学了。
第二、技术面试官眼中的技术广度
技术广度不要求你对一些非专业技术理解有多深,但一定是能够让你洞彻技术领域地大是大非的。
一般我理解技术广度分两种:
-
第一种是非专业相关的技术广泛涉猎。比如你的专业是
java
,但会去看一些C++
、GO
、PYTHON
等相关的书籍或者是新的语言。 -
第二种是你用过的一些辅助的技术和工具。比如设计工具(
viso
、UML
)、javascript
、shell
脚本等
一个技术知识面广的人,能够以点带面,学东西很容易触类旁通,反补你的专业。就像张无忌练就了 “九阳神功” 一样,有神功附体,学什么 “乾坤大挪移” 、“太极拳” 就非常快了!
第三、技术面试官眼中的技术高度
技术高度,我觉得是一个很虚的东西,可以指你对当今技术潮流的前瞻性看法、思维模式或者是否能从行业的生产力和产出的角度来看待技术的价值等。
那有同学要问了,怎么提升高度了?
个人认为,当你有了前面的技术深度和技术广度做基础,自然而然慢慢会对当今技术有深刻的认知、理解、判断或抉择,从而形成自己的技术价值观。
这种技术价值观是一种体系,是一种结构化思维能力,是能够让你度时势知进退的一柄利器,使你能够当在面对一件错综复杂的问题面前,抓住重点,直击要害。
所以,聪明的你也许已经发现,想要提升自己的技术高度是一个日积月累的长期过程,“冰冻三尺非一日之寒” 嘛。
如果非得有手段让你的技术一日千里,比如试着修炼 葵花宝典,那也是 “杀敌一千,自损八百”,最后也是得不偿失。
总结
一个公司对技术人要求多样,不能一概而论,有的只要你会 java 就可以了;有的要求 Java 技术专家;或者技术不重要,业务能力适合我们公司就行。但是不管是哪一种,对于程序员来说,要追求自己的技术价值观。
“台上一分钟,台下十年功”,所以工作之余,要不断的学习总结,做一个对自己负责任的有心人,虽然面试内容千奇百怪,但是万变不离其宗。