2022-03-17-📣🐘🐘🐘🐘程序员面试指东

2022-03-17  本文已影响0人  沐深

程序员面试

如果面试一个程序员,我会从以下几个方面入手


1、系统设计:工程能力-优雅和美观的抽象能力,追求代码世界的简约

普通程序员和顶尖程序员之间的区别在于优雅和美观的抽象能力。好的系统通常是要做到两个方面才合格,其一是好用,其二是好看。但是令人遗憾的是,普通程序员仅仅从实现的角度进行堆砌。顶尖程序员往往能够更进一步,经常会去思考用户在操作这个功能的时候,到底还会做什么事情。

代码的注释是否恰到好处、函数模块和类的结构是否能让其他人直接秒懂、架构的设计是否足够清晰等等,都属于程序员追求简约的范畴。
有一种炫技程序员或者架构师,喜欢简单事情往复杂了做。明明几个类能搞定的,弄出很多中间类,明明三层架构就解决的问题,生生弄出五层。

2、算法和数据结构:裸编能力

处理程序实际实现部分的子任务,实现函数或者算法之类的能力。听起来很简单对吧?实际上很多程序员缺失这样的能力。
不知道大家有没有见过「复制粘贴工程师」,review他们的代码甚至会发现一些网上的注释,又或者其他人的编写错误。
普通的程序员连时间复杂度怎么计算可能都不清楚,优秀的程序员轻松用算法优化性能卡点,更别提大厂面试普遍要求手写算法。

程序员要想进大厂先从刷算法做起是个好方法,算法厉害的人进大厂非常容易。

3、基础知识:掌握底层系统原理

处理复杂任务或解决复杂BUG时,具备深厚的底层系统知识非常重要。比如数据结构、网络协议、操作系统相关知识,等等。
程序的很多问题都是源于对计算机工作原理的误解,即使是使用高级语言开发的程序也一样。另外,一些更偏应用层的架构或框架,基础一定是更底层的系统。
了解了底层原理,我们才能看穿眼花缭乱的技术背后的东西,不被层出不穷的新技术所累。

4、行为态度:创造力

从长远看,创造力是程序员核心竞争力,也是决定一个程序员能走多远的重要特征。保持好奇心,保持对生活的激情和自信。

比如前端开发,怎么样写出自己JSSDK,具有项目创造力呢?
以下是我的一位前辈说的:

我个人觉得,或者说我的方法一般都是早期临摹就跟写书法一样。我一般回去bestofjs去寻找比较热度适中的库来临摹。为什么呢?
因为一般热度适中的库的代码复杂度不是很高,但是整体代码质量也还可以,能够看懂并模仿下来。然后我一般是看懂了,关上他的。自己开始着手去做,遇到问题了再回去参考人家的。直到跑通代码、我再去看那些这个项目下的其他特别火热的库。
大家会觉得?为啥不直接临摹最火热的。
因为这种一般经过长时间维护代码复杂度太高了,就比如蹦台阶,不可能一下能到10层20层,先蹦到2层,4层。
等我的代码跑起来我再从他的代码和项目结构中吸收精髓。这样下来下几个库你就会有创造的能力。
最后就是多学习一些技巧语法,比如devto啊、大牛的推特啊。都能让你的编码技术大增。

核心能力

作为搞计算机的同学,抽象能力是核心能力,加油。

做好程序员的四个点

1.认知态度

人的一生,失败和挫折可能是主流,会伴随我们的一生。成功就是在失败的基础上一点一点积累起来的。

我们一定要认真,一定要自信,一定要踏实。

踏实程度,左耳朵耗子曾说:
对于当前这个社会:大多数人的信息渠道都被微信朋友圈、微博、知乎、今日头条、抖音占据着。这些信息渠道中有营养的信息少之又少。
大多数公司都是实行类似于 996 这样的加班文化,在透支和消耗着下一代年轻人,让他们成长不起来。
因为国内互联网访问不通畅,加上英文水平受限,所以,大多数人根本没法获取到国外的第一手信息。
快餐文化盛行,绝大多数人都急于速成,心态比较浮燥,对事物不求甚解。
所以,你看,在这种环境下,你根本不需要努力的。你只需要踏实一点,像以前那样看书,看英文资料,你只需要正常学习,根本不用努力,就可以超过你身边的绝大多数人。

积极性,任正非内部讲话第一篇:价值观态度比能力重要,态度决定高度。

总之注意非智力因素的培养,非技巧因素培养,韧劲,毅力,坚持,需要引起重视。一步一个脚印的往前走。

2.个人素质

个人素质很重要,就是智商了,有些东西确实需要智商,比如这个人是否够聪明,学习能力快。这个天生的没办法,多吃核桃,多锻炼,身体是革命的本钱嘛。

3.理论积累和高度

这是区分理论研究和应用研究的一个重要分水岭。
理论达到当前领域的纬度,可以孵化出不同的应用方向。比如拥有深厚理论功底的计算机博士,可以在智能驾驶,图像人脸检测,大数据,机器人等开辟新的方向。而这些东西让一个没有理论知识只知道搞api得应用开发者,是搞不成的。

结论就是:理论高度决定了你的工作领域的高度。

基础是否牢靠,计算机原理,数据结构算法,思维逻辑清晰,也可以叫内功,少林有72绝技,但是让它成为武林泰斗的还是《易筋经》,这个东西,需要自己磨练,靠项目无法提升,多看书,多刷题,多消化。有机会搞个更高的学位,比如考研,考博。

4.应用经验积累

计算机应用一直在变化,应用领域一直在变化,可能有些专业知识,过几年就没市场了,领域没了,开发经验就是废纸,比如正在下沉的安卓,IOS,但同样重要。。

1.应用专业知识积累

不断完善系统化知识,知识地图。比如你是前端 css js。。 ,后端java 数据库。。。

2.工程化积累

是否在工作中一直积累有效经验,注意是有效经验,一年经验用N年的程序员一抓一大把。
不要以调用API作为一种项目积累,这东西几天不用,就快忘干净了。有效积累绝不是记住和调用APi;
主要是在某种语言和设计模式方面有了基础的积累,对软件设计的场景积累,工程化解决方案的方向。

参考: 《深入理解计算机系统》

上一篇下一篇

猜你喜欢

热点阅读