朋友来网易面试,挂了~

阅读本文大概需要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年,一定要想办法进大厂,虽然大厂不一定是职场终点,但大厂有这些优势:海量用户量、健全的福利、完整的培训体系、完善的晋升制度,它们会助力大家的发展。

今天就说这么多了,51大家都出去玩了吧,祝大家玩的开心呀~

洋哥这几天会持续输出干货,大家可以留言讲讲你希望洋哥写的方向呀。

昨天给大家发红包了,忘记点击的朋友戳这里,今晚8点准时开奖:70000+ 发大红包啦啦啦啦啦。

另外,之前送给大家的硬核算法笔记,没领的记得领取下,疯狂训练算法真的是进大厂最快捷径,公号回复01领取:

我们下期见~

·················END·················

你好,我是findyi,毕业于华科、清华,

一位大厂的业务负责人,

做过大厂技术总监,

也做过小厂CTO的产品技术人,

同时,也是一位信奉终身成长的职场人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 图片 3d旋转图片,html5实现图片的3D旋转效果

我们先来看一下实现效果:(学习视频分享:html视频教程)H5旋转3D相册,鼠标放置暂停,图片灰度级为0,有放大效果。该实例运用H5和CSS3动画效果,未用javascript。提高了本人对CSS3 新属性的了解及掌握。完整代码…

初级运维工程师面试题总结

该面试题结合了上海龙旗,土豆网,上海激动网络,风之云,广典集团,旅行者传媒等等,有些面试题还在进一步完善之中,希望给想步入运维行业的朋友们一点点帮助,加油!1)Linux启动大致过程&a…

数据这么多,且看R语言怎么处理!

随着科技的不断进步,数据处理量的不断增大,对数据进行处理、分析、统计建模、数据挖掘以及可视化的重要性日渐突出。如果说有一门简单易学、通俗易懂并且集上述功能为一体的编程语言让科研人员从中解脱出来,R语言当仁不让。作为一种统计分析软…

MYSQL数据库表大小计算,计算mysql数据库数据表的大小,不精确,只是大略的数据...

SHOW TABLE STATUS dbname返回数组:Name: xxx (表名)Engine: MyISAM (表引擎)Version: 10 (版本)Row_format: Dynamic (行格式)Rows: (表内总行数)Avg_row_length: (平均每行大小,这里是4.7K)Data_length: (该表总大小,单位字节)Max_data_len…

乘风破浪,.Net Core遇见Dapr,为云原生而生的分布式应用运行时

Dapr是一个由微软主导的云原生开源项目,国内云计算巨头阿里云也积极参与其中,2019年10月首次发布,到今年2月正式发布V1.0版本。在不到一年半的时间内,github star数达到了1.2万,超过同期的kubernetes、istio、knative等…

催人泪下!一个程序员的悲惨故事

全世界有3.14 % 的人已经关注了数据与算法之美编辑:大数据二狗如果你喜欢这篇文章,就把它发给朋友看吧~精品课程推荐:选购数学科普正版读物严选“数学思维好物”送给孩子的益智礼物 | 办公室神器算法工程师成长阅读 | 居家高科技理工…

php分目录存放session,phpsession实现多级目录存放实现代码,phpsession_PHP教程

php session实现多级目录存放实现代码,phpsession当一个目录下有很多文件时,服务器的处理性能会变低,php默认的session仅仅存放在/tmp目录下,未进行分级,当有一定的访问量时,就存在性能问题了。首先&#x…

erlang 编译之 to_core

感谢 坚强2002 同学的推荐 http://www.it.uu.se/research/group/hipe/cerl/ main.erl-module(main). -export([start/0]).start() ->ok. c(main, to_core). 会产生中间代码文件 main.core 打开如下 main.coremodule main [module_info/0,module_info/1,start/0]attributes […

C# Action用法

Action是无返回值的泛型委托可以使用 Action<T1, T2, T3, T4> 委托以参数形式传递方法&#xff0c;而不用显式声明自定义的委托。封装的方法必须与此委托定义的方法签名相对应。也就是说&#xff0c;封装的方法必须具有四个均通过值传递给它的参数&#xff0c;并且不能返…

python让函数抛出异常,是否有任何对象可以使str()函数在python中抛出错误或异常?...

我有一个函数,要求输入是一个字符串.我知道我可以断言或检查输入类型,但我想尽可能地处理它.我有以下代码来处理它.但我想知道是否有任何情况,这一行可以抛出我需要处理的异常.def foo(any_input):clean_input str(any_input) # will this throw any exception or error?proc…

双十一,单身狗除了买买买,还能做什么?

躲得过618&#xff0c;躲得过1024终究躲不过双十一小天相信&#xff0c;肯定有很多的小伙伴正磨刀霍霍对准自己的手这个节日小天陪你们买买买&#xff01;11月6~13日超级数学建模携手网易云课堂“超级充电节”为大家带来多重惊喜&#xff0c;福利享不停&#xff01;趁此机会赶紧…

将 SharePoint 开发与其他形式的开发进行比较

从三个视点检查 SharePoint 开发很有用&#xff1a; 为 .NET Framework 构建可扩展的应用程序 构建数据库应用程序 构建传统的富客户端应用程序将 SharePoint 应用程序与可扩展的 .NET Web 应用程序进行比较 您可以从开发人员的角度检查 SharePoint 开发&#xff0c;该开发人员…

Visual Studio 2022这些重大更新,影响每一位.NET开发者!

难得五一长假&#xff0c;蹲家里盘点了一下这2年.NET的发展&#xff0c;可谓日新月异&#xff0c;重现辉煌&#xff0c;各种重磅更新接踵而至&#xff1a;1 .NET Core3.1各种最受欢迎、性能排行等榜单霸榜&#xff0c;3个月增加100w的关注者&#xff1b;2 .NET5让.NET Framewor…

父与子一起学python3,父与子的编程之旅 与小卡特一起学Python 第3版(全彩印刷)...

章 出发吧 11.1 安装Python 11.2 从IDLE启动Python 21.3 来点指令吧 31.4 与Python交互 51.5 该编程了 71.6 运行你的个程序 91.7 如果出现问题 101.8 你的第二个程序 12第2章 记住内存和变量 152.1 输入、处理、输出 152.2 名字 172.3 名字里是什么 212.4 数字和字符串 222.5 …

影响计算机算法世界的十位大师

全世界有3.14 % 的人已经关注了数据与算法之美1、伟大的智者——Don E.Knuth&#xff0c;中文名&#xff1a;高德纳(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来&#xff0c;不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》…

【翻译】WPF中的数据绑定表达式

有很多文章讨论绑定的概念&#xff0c;并讲解如何使用StaticResources和DynamicResources绑定属性。这些概念使用WPF提供的数据绑定表达式。在本文中&#xff0c;让我们研究WPF提供的不同类型的数据绑定表达式。介绍数据绑定是一种强大的技术&#xff0c;它允许数据在UI元素和业…

java网络编程 个人心得

TCP协议是一个有连接可靠地协议。TCP编程的核心思路 开发服务器端ServerSocket ssnew ServerSocket(9000)ss.accept(); publicclassTcpServer {publicstaticvoidmain(String[] args) {try{ServerSocket ssnewServerSocket (9000);//创建SocketServer对象,并绑定端口Socket sss…

php对表格的处理,JavaScript_js处理表格对table进行修饰,js处理表格 1、行颜色间隔显示 - phpStudy...

js处理表格对table进行修饰js处理表格1、行颜色间隔显示css样式&#xff1a;两个选择器.one{background-color:#33ffcc;}.two{backgound-color:#ffff66;}function trcolor()//控制间隔行颜色显示不同{var tabNode document.getElementsByTagName("table")[0];//获取…

12个关键词,告诉你到底什么是机器学习

全世界只有3.14 % 的人关注了数据与算法之美编者按&#xff1a;随着人工智能(AI)技术对各行各业有越来越深入的影响&#xff0c;我们也更多地在新闻或报告中听到“机器学习”、“深度学习”、“增强学习”、“神经网络”等词汇&#xff0c;对于非专业人士来说略为玄幻。这篇文章…

WPF实现实现圆形菜单

WPF开发者QQ群&#xff1a; 340500857 有小伙伴需要实现圆形菜单。效果如下&#xff1a;一、Xaml代码如下<Window x:Class"WpfRoundMenu.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.mic…