朋友来网易面试,挂了~
阅读本文大概需要8分钟。
最近推荐一个朋友来网易面试,这哥们在小厂工作6年,研发经验非常丰富,但他却挂在了技术终面。
事后和他约了个饭,深聊了一次发现他的技术成长路径还是有点问题。
软件开发行业需要经验,需要时间来沉淀,但从我个人发展情况以及带过的下属来看,这种成长绝非线性成长,而是突变式成长。
所谓突变式成长就好比豹变和顿悟,仿佛一下子打开了任督二脉成为高手。而硬币的另一面是:不少工作10年的人,从经验和能力上考量和他刚毕业1、2年差距不大。
“我们以为我们是工作了10年,其实却只有一年的经验,只不过又重复用了九年”。
不少朋友虽然工作了很多年,但他们很少学习计算机体系基础知识、很少在debug能力上突飞猛进、很少去研究计算机底层知识和原理。除了最初几年能成长,之后一直停滞不前,而且他们不明白为什么。
这样的朋友在工作3、5年后,想进大厂很难,即便是在中小厂也很难成为架构师或者高级工程师。
而有些同学,才工作1,2年就能在工作中展现出优秀的能力、承担重要模块的研发和攻坚,甚至能独立做一个大的产品。
今天结合和这个读者朋友的深聊以及过去12年带团队的经验,讲讲作为程序员我们需要避开的4种表现:
1.不重视底层技术
应用层的技术,程序员们为了完成工作一定会大量学习,但其实底层技术同样重要,甚至更重要。
那么哪些是底层技术呢?拿windows C++技术栈举例:
C++语言高级特性:运算符重载(一元运算符、二元运算符、运算符重载难点、项目开发中的运算符重载)、多继承及其二义性、虚继承、多态、函数模板、类模板,模板的继承、程序编译链接机制、内存布局(memory layout)、对象模型、各种容器的实现(vector、map、hashmap)等等;
算法和数据结构:尤其是和C++结合的算法能力及数据结构的应用能力,hash map、B+/B-树、算法在C++容器中的效率应用、DP(动态规划)等;
网络底层:HTTP、HTTPS、DNS、ARP、TCP、IP、ICMP、UDP、FTP、SMTP、的实现底层;
多进程/多线程编程:进程通信的方式(共享内存、pipe、Socket编程等)、同步、死锁及解决方案、线程池的实现、进程/线程的操作系统实现原理、进程的状态及切换和调度等;
UI库的实现机制:WTL的实现机制、QT的实现机制、Windows C++底层绘制原理(这块简直博大精深)、窗口消息机制、DUI的实现机制等;
很多程序员朋友,完成业务开发没什么问题,但一遇到系统性疑难杂症,立马就失去了方向。原因很多,但最重要的无疑是缺乏底层技术。
再举个应用场景的例子:一提到分布式锁问题,大多数同学想到的方案是基于Redis的Master-Slave模式来实现。这个实现方案行不行?分布式锁本质是一个CP需求,基于Redis的实现是一个AP需求,乍一看基于Redis的实现是无法满足的。
脱离业务场景来谈架构都是耍流氓。从技术战略的需求层面来看,如果分布式锁在极端情况下获取锁的不一致,社交业务场景能够接受,那么基于Redis的实现是完全可行的。
如果业务是交易场景,分布式锁在极端情况下获取锁的不一致性无法接受,那么基于Redis的实现方案是不可行的。在锁强一致性的场景下,需要采取基于CP模型的etcd等方案来实现。
做出以上判断,需要深度理解底层系统原理。缺乏了这种理解,无法做出正确的架构抉择,也自然会对工作造成不利影响。
夯实的底层技术还会让你具备一通百通的能力,旧文说过:我们要进入高手模式,能举一反三。对于程序员来说,不清楚底层技术基本与高手无缘。
底层技术具备可迁移性,更上层的应用技术却被特化。
拿我自己举例,早期积累了深厚的C++底层技术基础,2011年在cocs2d还没成熟之际,自己用C++写了一个小的游戏引擎,这套代码应用了大量windows C++的思想,这就是底层技术的可迁移性。
另外,大厂的面试官酷爱考察底层能力水平,诸如上来就让你手写算法、通过你的工作经历层层深入问下去,尤其是如何调优之类。
2.不能在错误中汲取教训
对于软件开发人员来说,在工作中获得反馈,并通过反馈矫正行为和方向非常重要。
这其中的重点是:在错误中得到反馈,并汲取教训,获得成长。
交付产品的BUG、一次code review的结论、领导对你提的建议等等,这些你是否记录了、沉淀了,并力争在下次得到进步和改进?
来自业务、产品和其他人的反馈,会让我们明白自己的短板在哪,应该如何针对性的学习和成长。
很遗憾的是,不少同学不仅不会在错误中成长,反而试图掩盖和消弭自己的错误。
应该怎么做:
对每个反馈保持积极的态度。你可以选择接受或者拒绝,但都应该保持平和和学习的心态。
从错误中学习。没有人能永远正确,终身学习才能让自己持续强大。
3.习惯写烂代码
大部分优秀程序员或多或少都有代码洁癖,这是因为他们把代码和交付物当作艺术品而不仅仅是完成一项工作。
关于这点,我们看看曾经是程序员大神的雷军是怎么说的:
“编程的工作和石匠的工作相差不多,是技术活同时也是体力活,而编写优秀的软件,是一件困难的事情。编程不仅仅是技术,更是艺术,也只有具备对艺术的追求,才能催生出更多优秀的产品。”
缺乏经验的程序员很难写出优美代码,在看他们的代码总有一种感觉:一不小心就陷入了迷宫,找不到方向和出口。
应该怎么做:
在动手写代码之前,设计出代码框架并用StarUML等软件绘制出代码时序图和类结构图;
重视命名规范和注释,命名最好能起到部分注释作用;
定期重构代码,无论是函数和类的抽离、还是架构的优化,在不影响业务开发节奏的基础上,需要经常做。
追求代码的优美还有一个很明显的好处:会帮助你快速获得结构化能力和思维。
别怀疑,有经验的技术面试官可以很轻松的考察出你的思维是否是结构化的。
4. 盲目追逐新技术
很多开发人员总是在谈论技术潮流,当有了新的技术之际,他们总是异常兴奋,快速投入这项技术的怀抱。
过了一段时间,更新的技术出现了,他们又抛弃了刚学会的前一项技术。
这就跟狗熊掰玉米一样,他们总是在学习教程,并且总是虚幻的感觉自己都掌握了,但其实真正要掌握一项技术需要长时间的实战应用并需要在反馈中前行。
限于公司业务的稳定性,他们学习的新技术大部分不会应用于线上产品,自然很难得到实践和反馈。
应该怎么做:
从工作中需要的技术学起,再应用到工作中,同时从线上得到反馈并改进。
即便学习和工作无关的新技术,也要做一些实际的应用或者小玩意出来。
2008年我刚加入腾讯,发现我们的QQ游戏大厅调用游戏程序存在1%左右的失败率,这之后我深入学习了管道通信和共享内存通信,并做了一个调用失败立即切换的SDK,替换了原有的多进程通信的方式。上线后失败率下降到1/1000,这个过程让我真正掌握了新技术。
以上四点真正在工作中做到,相信大家的进步速度会明显加快。另外程序员常见的一些问题也需要规避下,比如养成工作摸鱼的习惯、傲慢自大(新手在学到一些知识之后,很容易站在愚昧之巅)等。
程序员朋友在职场的前5、6年,一定要想办法进大厂,虽然大厂不一定是职场终点,但大厂有这些优势:海量用户量、健全的福利、完整的培训体系、完善的晋升制度,它们会助力大家的发展。
朋友来网易面试,挂了~相关推荐
- BAT、网易面试经验收集
小白重学Java之二: 之前实习的时候就想着写一篇面经,后来忙就给忘了,现在找完工作了,也是该静下心总结一下走过的路程了,我全盘托出,奉上这篇诚意之作,希望能给未来找工作的人一点指引和总结, 也希望能 ...
- 网易面试Java开发凉凉经,面试官:基础不牢,技术不够深入,无缘offer,无缘网易......
前言 我也是经朋友介绍来的网易,先是投了简历,然后朋友通知我说可以面试了,于是我就带着忐忑的心理来到网易公司.面试的是一位帅气的光头叔叔,下午三点开始,之前准备了很多准备应付技术问答,结果基础还是太差 ...
- 程序员美团面试挂了,7天后去腾讯面试,见到面试官:好巧啊!!
说起来,职场上很多事情,只能用一个"缘分"来解释.近日在职场论坛上看到有员工发帖,他说自己在面试时遇到了一件最悲哀的事情?在上个月去美团面试的时候,由于发挥不太好,面试挂了.当时那 ...
- 朋友去华为面试,轻松拿到26K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...
- 朋友去华为面试,轻松拿到30K的Offer,羡慕了......
最近有朋友去华为面试,面试前后进行了20天左右,包含4轮电话面试.1轮笔试.1轮主管视频面试.1轮hr视频面试. 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮 ...
- 网易面试是一种什么体验?
前言 防喷声明:本文纯粹胡言乱语,所讲述内容全部做不得真,如有雷同纯属巧合,请不要对号入座,如有反驳以您所述为准. 关于网易:本文所属网易公司,并非猪厂,乃是小熊上网不易总被喷责任有限公司,简称网易. ...
- 为什么你今年的去哪儿产品经理面试挂了?
去哪儿今年的校招已经落下帷幕,还想进驼厂的,只能等待明年春招了.作为驼厂的产品经理,现在来复盘一下今年的校招,顺便分享一些求职者的故事. 去哪儿北京地区的面试竞争是最激烈的,然后相应的霸面机会和招聘名 ...
- 阿里网易面试送送送命题 —— 微服务架构
近几年,微服务架构迅速在整个技术社区窜红,被认为是 IT 软件架构的未来方向.一线互联网公司由于具有大量的业务体量和业务场景,比如阿里.网易,很早就开始入坑微服务架构. 但说起微服务,不少人还是有这样 ...
- 网易面试一面【游戏测试工程师】
转载:https://blog.csdn.net/languolan/article/details/81632735 1.自我介绍 2.多态 3.string变量可变不?为什么? 4. 等价类和边界 ...
最新文章
- 微软SQL Server数据库的两种请求游标
- 数据库字段设置为非空默认值
- sha1withRSA md5withRSA分析
- OPC的数据访问方法分别有同步访问、异步访问和订阅式
- HALCON示例程序class_ndim_norm.hdev基于多通道图像的分类
- jenkins代理设置
- 何传启:第六次科技革命的三大“猜想
- Jquery实现无限级树状结构并动态添加增删改等编辑功能
- TensorFlow精进之路(六):CIFAR-10图像是被(下)
- Linux tmux 使用指南
- 17. JavaScript Math(算数)对象
- 20145235 《Java程序设计》第8周学习总结
- java.lang.IllegalArgumentException: requirement failed: indices should be one-based and in ascending
- webpack打包图片资源问题
- envi窗口滤波_ENVI软件操作【数据显示操作——Overlay菜单操作】
- 弗吉尼亚理工大学计算机科学,弗吉尼亚理工大学计算机科学硕士排名第46(2020年TFE Times排名)...
- handwrite-1
- c语言工程实践小超市商品管理系统
- Nacos客户端本地缓存和故障转移
- Mysql导致CPU飙高的问题
热门文章
- 如何快速清空 Linux 中的大文件
- JavaScript作用域面试题避坑指南
- 单片机原理,单片机能做什么?
- 初试CSS(二):选择器
- php函数细节_php strip_tags()函数使用注意细节
- mysql种default约束的语句_sql语句大全之SQL DEFAULT 约束
- df满足条件的值修改_文科生学 Python 系列 16:泰坦尼克数据 2(缺失值处理)
- java与ios的区别_好奇?Android与iOS究竟有什么区别?终于知道了!
- PTA基础编程题目集-6-5 求自定类型元素的最大值
- PTA数据结构与算法题目集(中文)7-37