网络调试难学吗?以后好就业吗?

金九银十,又到一年秋招季。这场规模巨大的校园招聘,承载了近千万毕业生的梦想。不过,在这特殊的2020年,这场秋招也变得非比寻常。

  本周,我们公司的校园招聘也正式启动了,我担任了3天的二面面试官。这是我毕业8年后,第一次以另外一种身份参与到秋招中。

  虽然没有应聘者的那种压力感,却能深深感受到他们身上的紧张、诚挚和渴望,当年自己参与秋招的画面也历历在目,甚是感慨。

  这篇文章,我将结合自己的亲身感受,从面试官的角度给出些建议,希望对正在参与秋招的莘莘学子们有所帮助。

一场疫情,开启了魔幻的2020年。

  很多学生真正体会了一把史无前例的 “云” 课堂、“云” 毕业。

  但是,疫情带来的影响绝不仅仅只是上课形式或者毕业仪式的改变,紧接着的就业影响才是这场特殊 “成人礼” 真正的考验。

从我面试的候选人来看,能明显感受到两点变化:

1、绝大部分人都缺少实习经历

  我问了几个候选人,都说因为疫情没法参加实习。放在往年,实习经历是企业招人时很看重的点。

  尤其对于程序员这个职业,非常强调实战。提前经历过实习以及生产项目历练的候选人,他们的编程能力以及对技术的理解更能接近企业的要求。

  另外,一段亮眼的实习经历通常也是拿 special offer 的必备条件,但是几天面试下来,没有一个候选人能达到这个水平。

2、竞争激烈,国内外名校毕业生都在广撒网

  参加面试的候选人绝大部分都是一本,而且将近一半是211/985硕士,这一点挺出乎我意料的,毕竟我们公司只能算是二线的互联网公司。

  我问其中一个985硕士背景的候选人,为什么会选择我们公司?答案很现实:因为整体形势不太好,只要有点名气的一二线互联网公司他都会海投。

  另外,还有一个就读澳洲名校硕士的候选人,因为海外疫情严重,也打算回国发展了。

  从这两点来看,今年的就业形势确实比较严峻。据统计,参与今年秋招的大军预计在1千万左右,人数达到新高,但是绝大部分互联网公司并没有扩招的趋势,可见竞争之激烈。

  在这个最难的毕业季,要想拿到一个好offer着实不易,务必认清现状,同时做好充分准备。

面试到底看重的是什么?

虽然就业形势很严峻,但是公司招人的标准只会更高,因为供远大于求。对于应届生来说,要考察的内容主要包括以下几个方面:

面试时重点看的还是计算机理论、算法能力以及代码功底,框架和项目只是锦上添花的考察项。

  下面,我以一道实际的编程题为例,同时结合候选人的答题过程,详细地聊一聊面试官通常是如何判断应届生素质的?希望让参与秋招的你有所启发。

一个单链表,从高位指向低位存储一个大数,每个节点表示这个大数的其中一位(取值范围从0到9)。题目要求:对这个大数进行加1,输入和输出都是单链表,时间复杂度和空间复杂度尽可能低。

对于刷过leetcode的同学来说,这道编程题真心不难,而且解法非常多,我觉得还比较适合应届生。

  但是,就是这样一道普通的程序题,居然刷掉了将近50%的候选人,并且这批人都是已经通过笔试和第1轮技术面的。

  下面按照解题的完整过程,我说下面试中的重点。

  题目给出来后,我会跟候选人确认下是否完全理解题目了,然后给1-2分钟时间让对方思考下解法。这个环节有几位候选人的表现让我印象深刻。

候选人:这题简单,遍历到最后一位加1就行! 面试官:你再想想,还有什么情况没考虑到? 候选人:哦哦,最后一位如果是9,要处理进位问题,我再想想.....

面试官说完题目后,你不假思索就开始说解法,这种其实是做算法题时的大忌,很容易让面试官觉得你是一个没有思考力的人。

候选人:我能用数组表示吗?这样进位就好处理了 面试官:那你数组大小怎么定呢? 候选人:嗯... 我可以先遍历链表,得到链表长度 面试官:然后呢? 候选人:那就简单了,链表转成数组后,先对数组加1,然后再将数组转成链表返回就行。

大约有1/3的候选人会先想到这种最常规的解法,也有人用ArrayList或者Stack的,其实底层都是数组。

  很显然,这种解决并不是最优的,空间复杂度太高,然后我会引导他们思考更优的解法。

面试官:空间复杂度太高了,有更好的解法没有? 候选人:我再想想.... 候选人:能给点提示吗? 面试官:链表是从高位指向低位的,但是进位是从低位到高位的,如何解决这个方向不一致的问题呢?你朝这个角度想想 候选人:哦,我知道了,可以将链表反转

  部分候选人在听到提示后,基本能想到 “链表反转” 的解法了,当然也有想不出来的,这种我会直接告诉他解法,然后看他在coding阶段是否有突出的表现。

因为这个题目本身难度不大,链表反转基本是应届生们信手拈来、倒背如流的题目。我这个题只是在此基础上 “拐了一个弯” 而已,但是确实难倒了一些人。因此,建议应届生们:刷题有必要,但是一定要懂得灵活变通,不要寄希望于遇到原题。

前面提到这个题的解法很多种,比如:可以不反转链表,而是用递归法;最聪明的解法是记录最后一个不是9的节点,然后处理该节点和最后一个节点之间的加1就行。

  在我面试的候选人当中,大概有50%的人能在没有提示的情况下给出解法,还有少部分人提示后能想到解法。

  编码环节是我比较关注的,候选人在IDE中直接编码,并将屏幕共享给我,我会全程观察他们的coding过程。

  先来看一个候选人的代码,然后说下我的建议。

  上面这份50行左右的代码,是一个1面表现还不错的候选人花了15分钟写完的,而且这是我从所有候选人中挑出来的质量偏中上的代码(是不是有点惊讶?)

  站在面试官的角度评价这份代码,除了程序的正确性以外,我几乎找不到其他亮点。下面几点我觉得是应届生们同样需要重视的:

  变量命名和方法命名体现了你的编码习惯,一定要注意规范性,做到见名知意。

  将重复性的代码封装成子方法,比如上面的链表反转。

  复杂逻辑拆解成多步,每个步骤封装成独立的方法,方便维护和阅读。

可以适当加些注释,对特殊逻辑进行解释。

  写完代码,一定要写个UT或者Main方法,测试下各种case,而不是等面试官提示你写测试用例时才想起来。

Talk is cheap, show me the code. 编码能力是真正拉开应届生差距的考察点。因为Coding的过程能充分体现你的基本功和逻辑思维,而这两点恰恰是面试官判断候选人是否有潜力的重要依据。

  调试环节也是个很好的面试考察点,能判断候选人定位问题和解决问题的能力。

  这3天我面试的候选人,居然没有一位能一次性写出正确的代码,这一点当然跟绝大部分人不写测试代码或者测试case覆盖不全有关。

另外就是,有一部分候选人的调试过程真的很让人着急,我说几个具体case:

第1种,不会先拆分成大的步骤去定位问题,而是单步调试。比如你用反转链表的解法,基本是以下3步:

  比较好的思路是将这3步的结果打印出来,看下是否符合预期,这样1个复杂问题相当于拆解成3个子问题了,然后排除法定位即可。

第2种,明显的错误看不出来。比如:遍历链表时,指针没指向下一个节点引起了死循环,导致程序结束不了,有候选人一度怀疑自己的IDE出问题了,还重启了一把IDE。

第3种,改完一个BUG又引入了新的BUG。链表节点全是9的情况是很多候选人没覆盖到的,需要再新加一个节点,有不少人在解决这个问题时又引入了新BUG,但是没有意识去重跑之前通过的case。

总之,调试过程也是一个很重要的环节,它是你对错误代码进行补救的机会,首先要调整好心态,其次是注重方法。

  关于调试,我的建议是:加关键日志进行打印,先定位到出问题的代码块或者子方法,然后再仔细审阅代码或者单步调试。另外,改完一部分代码后,一定要重新跑一下之前通过的测试case。

希望上面这道编程题的还原过程能让你有所启发,下面我再总结下其他参考建议:

1、良好的面试环境很重要:因为疫情原因,绝大部分秋招都是远程视频面试,因此一定要有一个安静且整洁的面试空间;其次需要确保网络畅通,不会出现卡顿情况;再次,电脑上有编程环境,除非你裸写代码的能力很强,可以不依赖IDE.

2、注重沟通技巧和效率:开场的自我介绍一般是用来暖场的,如何快速说出自己的优势和成绩很重要,切忌对照简历说太多无用的细节。另外,问答环节听清楚题目很重要,如果有疑问一定要及时确认,避免答非所问。

3、注重细节,而不是差不多:细节决定成败,要做到脱颖而出,一定要精益求精。计算机的基础知识,不建议死记硬背,而是真的吃透了,你的回答代表你的思考过程,而不是记忆过程,最好能说出你自己的理解。

4、展示积极和真诚的一面:遇到不会的问题时,不要轻易说放弃,而是积极去思考或者让面试官给你适当的提示。其次,没必要伪装或者夸大自己的成绩,而是尽量展示出你真正理解的东西以及你对这个行业的热爱,自信和真诚很重要。

5、让面试官给你建议:秋招是一场持久战,面试也看缘分,没面好不代表你就不行。如果能认识到这一点,在最后的提问环节,你可以让面试官针对你的表现给些建议,这是你越面越顺的最好方法。

回想8年前自己参与秋招的过程,做梦都是offer。

  一个钟意的offer背后,不仅仅是一份工作,也承载了一个你想去奋斗的城市,一个你感兴趣的行业,一个你想持续精进的岗位,一份你想回报家人的薪酬...

  这是从象牙塔走向社会的里程碑,希望这篇文章对你有所帮助。积极准备,同时多做复盘。

  面试加油!预祝早日拿到满意的offer!

另外如果你想更好的提升你的编程能力,好好学习C/C++编程知识的话!那么你很幸运~

分享(源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

学习C/C++编程知识,提升C/C++编程能力,欢迎关注UP一起来成长!
另外,UP在主页上传了一些学习C/C++编程的视频教程,有兴趣或者正在学习的小伙伴一定要去看一看哦!会对你有帮助的~

女生学计算机网络技术好不好就业?女生学计算机网络技术就业前景

时间: 13:21:59 来源:精英考试网 作者:小东邪

       职场上因为各种因素,女性相对于来说还是比较不占优势的,所以在选择专业上她们非常的谨慎。那么,女生选择计算机网络技术好不好?就业前景到底如何?就业方向又有哪些呢?接下来就和小编一起去了解一下吧!
       计算机网络技术是中国普通高等学校专科专业,这个专业主要研究计算机网络和网络工程等方面基本知识和技能,进行网络安装维护、网络管理、网络软件部署、系统集成、计算机软硬件方面的维护与营销、数据库管理等。电脑等设备安装与调试,计算机系统的测试、维护和维修,网页图形、图像、动画、视频、声音等多媒体设计及制作等工作都是在这个专业范围之内。
       不管是男生女生,学计算机都是不错的方向,计算机网络技术专业在专业的招生要求和设置上是没有任何性别的区分和差别对待的,男女生都可以学习,只是男生比例比女生高。这个专业可以说是当下比较热门的行业,但是它的工作内容比较枯燥并且压力很大,所以一般不太建议女孩子去学习。
       计算机网络技术专业的核心能力主要是考察网络安装和安全维护,这个技术需要应用多种网络软件的计算机技术,因此在难度上系数比较高,女生们选择计算机网络技术专业需要具备过硬的专业素养和技术能力才可以胜任这样的工作。
       这个专业整体的就业趋势非常不错,就业率也很高。随着国家的网络不断发展,各行各业都需要这样的高技术人才,因此市场的需求量是很高的。计算机网络技术的应用范围很广,无论是电脑的方向还是移动电话的方向都很流行。所以大体趋势是非常好的,是一个非常不错的选择。
        计算机网络技术专业就业方向很广泛,可面向各企事业单位计算机网络应用技术岗位,可从事计算机操作维护、计算机局域网设计、安装、调试等工作。除此之外还可从事广域网管理、维护、网络管理信息系统的设计、开发和应用等工作。
       刚毕业的应届生可以从事程序员的职业,随着工作时间和年限以及经验的增长,计算机网络技术专业的人员可以胜任项目的管理工作和工程师的职位,同样薪资水平也是随着时间的增长而增长的,前景是非常可观的,发展空间也很大。

  • 从各方面因素考虑,女孩子就业的优势并不比男生高,所以女孩子在选择大学专业的时候要十分的谨慎。对于很多喜欢化学专业的女生来说,她们应该选择什么样的专业以...

  • 众所周知,医学的存在和人类的健康息息相关,不论男女老少,我们的生活多多少少都需要医学的支撑才能更加的平稳健康。也正是因此,让医学成为目前社会上发展前景...

  • 在大多数人印象中女生的理科普遍不是很好,那些学习成绩不好的女学生并不是所有的学科成绩都差。大多数女生是因为数学成绩不好,从而导致平均水平较差。那么这类...

  • 医生和老师一直都是大众心目中最神圣的职业,也是最受人尊敬的职业,所以很多学生在填报志愿的时候都会填报医学专业或者是教育类专业。那么作为女生,我们在填报...

  • 大家都知道,一个国家的航空航天领域在一定程度上代表了一个国家科学技术的水平,一直备受全世界的关注。近些年来,中国在航空航天行业有了巨大的进展,该领域也...

  • 近几年,我国考研究生的学生越来越多,有研究生这个学历不但意味着可以找到更好的工作,而且可以有针对性地到某些城市或地区就业。那么学习化工专业的女生考研的...

关于嵌入式的技术竞争力需要花点时间整理一下给大家

///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比///

相信很多刚入1-2年,甚510年的嵌入式工程师都会有这些疑惑。我做的事情好像没有多少技术含量,我做的事情好像没有多少创新,做嵌入式的技术竞争力到底在哪?嵌入式到底是做驱动好还是做应用好?

很多人说,嵌入式要学习很多很多的技能才能找到工作,既要懂硬件,还要懂编程,精C/C++,懂操作系Linux内核,懂通(4G 5G),懂自动控制,懂数字信号处理,懂网络协议栈,FPGA,懂电磁兼容,Android,是这样吗(这肯定是有人在吹牛装)。火哥今天和大家聊聊这个话题。

一、嵌入式的技术竞争力必须因地制宜,根据你所在的具体环境具体分析case by case没有万能药方

说到做嵌入式的技术竞争力,其实是和每个嵌入式工程师所身处的环境有关。所谓的环境包括:你的学历,你的家庭因(是否已婚,家里老人妻儿是否需要时间精力照),你所在的城市以及该城市的嵌入式相关产业结构,你目前从事的行业和业务,你现在的工作年限和当前已经有的基础技能与业务技能积累深度,你所认识的或互相信任的同行业的人脉等等。

火哥所拥有的技术竞争力,放在你所处的环境往往不一定有竞争力,这就好比你在一个二三线城市,整个城市没有一家AI深度学习相关的公司,火哥如果给你分享嵌入+AI深度学习的技能,在你的环境里就毫无参考意义,如果你只是公司的一个小兵,工作权限只能修改一个模块,火哥给你分享的复杂业务场景下大规模软件架构技术也意义不大。

很多时候个人是难以改变现有环境的,要么重新选择环境,要么适应环境,再参考别人分享的经验,根据自己当前的环境状况,做出对自己最有利的选择。

另外还有一个老生常谈的撕逼问题,嵌入式到底是做驱动好还是做应用好,其实也是要根据所在城市和公司的组织架构情况而定的,没有绝对优劣。

火哥第一家公司是属于传统行业大厂的嵌入Linux产品开发(火哥在应用部门),内核驱动和应用软件部门是严格划分的,驱动部门大部分都5年经验以上核心老员(相对薪资也高一),一般不直接校招,应用部门工3-5年经验的也可以转到驱动部门,没有绝对限制和门槛。

应用软件部门员工相对年轻,经验浅,应用软件部门没有权限提交驱动代码的修改,只能定位到驱动问题,让驱动部门的工程师修改。当时这家公司很多核心的业务逻辑和通信协议的代码在驱动层,公司设计的这套组织架构也是为了保证核心部门员工的稳定性,并不是说做应用就没有技术含量,就很难再转驱动了。

火哥第二家公司是新兴行业小AI相关嵌入Linux产品开发,嵌入式开发就一个部8(小厂人少,分工就不)7个人做应用层开(火哥还是做应)1个人做底层驱动。但是底层驱动的人,只是负责新的硬件和驱动功能集成到系统里面,做应用开发的同事,如果遇到底层的驱动bug,也要自己有能力解决,底层驱动的同事并不会帮你处理旧的模块bug

火哥第三家公司是新兴行业大厂Android系统平台开(火哥终于有做底层驱动的机会)。公司组织架构上根本就不是按驱动开发部门和应用开发部门这样划分的,而是按模块划分部门,比如摄像头组,存储组,视频编解码组,音频编解码组,蓝牙wifi组,功耗电源组bsp组等等。

每个组,只要你负责的模块有问题,不管是在内核驱动层还是在应用层,都属于你要处理的。比如摄像头组,你要有独立解决摄像头驱动和应用软件的能力,而不是说我只做摄像头驱动,应用不管。

另外火哥还了解到,在二三线城市甚至深圳这种一线城市,一些小(尤其是做单片mcu项目的小厂,可能就二三十人甚至更),由于人手不够,或者硬件部门,软件部门暂时没有招到合适的人,所以有些嵌入式软件工程师不得不暂时甚至长期兼PCB硬件原理图设计的工作。

当然火哥认为软硬设计都做的工作实在是不合理,分散精力容易出很多问题,但是不得不承认这种分工的工作在嵌入(尤其是单片mcu)工程师中是客观存在的,老板安排的硬件相关工作也不得不去承担。

虽说每个人具体的技术竞争力问题要根据实际情况case by case分析,但是火哥还是希望通过本文,抛砖引玉,给出一case,来引导小伙伴们进行深度思考。

二、能保证饭碗的基础技术竞争力

一般嵌入式工程师都是指在嵌入式平台做软件开发的工程师,没有专门的嵌入式硬件工程师说(硬件工程师自有专门的硬件工程师,这里以软件为)。虽然没有万能的技术竞争力,找工作也不是什么都要(公司招人的基本要求是能够马上干活帮老板解决问题,而不是啥都懂吹技术牛)

但是嵌入式还是有些通用的技术技能需要掌握才能成为一个合格的嵌入式工程师,随时保证有一个嵌入式的饭碗,能在一线城市找到月10K以上的工(二三线城市根据实际情况递),火哥还是建议你要掌握以下几点通用嵌入式基础技术。

编程能力不用多解释,嵌入式开发主要还是软件编程嘛C语言尽量精益求精,各种指针、结构体,联合体的高级用法滚瓜烂熟不需要问(可以上豆瓣3-5本高分C语言编程书籍细)C语言编程能力就是嵌入式开发的命根子。

另外,数据结构对于现代的大规模嵌入式软件开(不管是单片mcuLinux)也是必学科目,我知道很多电子通信,自动化专业出身的嵌入式工程师没有学过数据结构的课程,所以在这里啰嗦一下,去学吧,不然很难看懂别人写的复杂的程序结(尽管学了也不保证看得)

另外,基本的计算机算(堆和栈搜索,链表反转,哈希表,二叉树,红黑树,深度优先广度优先,时间复杂),有时间尽量学一学,补齐短板,虽然并不是说工作中要自己从头实现或者工作中绝对能用(知道你们大部分人都是写业务逻辑代),但是很多公司笔试面试要考,不学可能过不了面试,学了可以开拓思路。

C++语言应该也是要懂的,但C++范式太多,学习时间会比较长,而且每过几年还会更新,可以先工作,然后工作有时间慢慢学。不要求精C++(根本就不可能精通所C++特性和范式),但是至少能够看得懂基本的语法代码,能改动别人C++程序,能调用别人实现好class实现你的功能。

另外最好懂一门脚本语言,比Python, Python在做测试用例代码和自动化工具的时候还是用得挺多的,也不难学,C/C++简单(我觉得可以先Python,C++,这C++反而不会那么难)。

2.操作系统与计算机体系结构知(包括一些编译,链接的知)

嵌入式程序员和非嵌入式程序(APPweb)最大的能力差别就在解决操作系统底层,计算机体系结构相关问题的能力。操作系统知识对于Linux/Android RTOS开发的嵌入式程序员,不用我啰嗦,学吧,最好还要能看Linux内核源代码,理解其中的各种子系统的设计机制和设备模型。

对于单片MCU裸机开发的程序员,虽然可能暂时用不上,但建议你们有时间还是应该学一下,这样对以后换环境跳槽选择的路子会更(相比于完全不懂操作系统的老单片机工程师有优),而Linux FreeRTOS等操作系统内核都是开源的,里面有丰富的代码可能可以给你单片机编程提供参考(抄),扩展思路。

计算机体系结构的知识,可以说是做嵌入式程序(不管是LinuxAndroidRTOS还是单片MCU)的内功心法。一CPU是按照什么样的流程执行程序cache是什么有什么用TLB是啥MMU有什么用,中断流程是怎么执行,中断服务函数和一般函数有啥不同,一个程序运行的地址空间和各种段是怎么样的分布,系统是怎么启动最后运行你的应用程序,系统是怎么管理内存,防止碎片化,动态库静态库原理上有啥区别,你所使用的编译器工具链,硬浮点软浮点的基本原理和使用条件。

(不懂的可以从《深入理解计算机系统》这本书入)。这一系列体系结构有关的知识,火哥认为,不管是做操作系统还是做裸机嵌入式,都必须掌握,才能在面试中,得到面试官对你技术底子的认(很多候选人,可能公司相关业务知识不熟,但是技术底子不错,面试官也会考虑给机)

关于嵌入式要学多少硬件的问题,众说纷纭,有些文章渲染地神乎其神,软硬通吃。但是火哥在嵌入式软件工程师的面试中,其实被问的真正的硬件问(CPU中断这些体系结构知识不算真正硬件知识,体系结构知识是嵌入式必备)并不(50次面试2-3次问过硬),而且火哥是自动化专业出身,读书的时候模电,数电都有认真学,课程设计都有认真做,读书的时候也有过电力电子的项目经历,因而面试的硬件问题对火哥来说基本不是问题。

火哥的观点就是,对于电子通信、自动化专业出身的嵌入式工程师,以前学校读书学的模电,数电课本知识基本能够满足平时嵌入式软件开发中,看懂原理图,看示波器,和硬件工程师合作沟通,定位软硬件问题的需求,并不需要再加强多少硬件知识,也不需要真正去设计电路图PCB,EMC电磁兼容之类的东西,当然懂一些更好,但是也对找工作加不了太多分。

但是如果是计算机类专业出身,对硬件完全没有概念也不行,还是需要1-2个月时间,看看模电、数电的课本,学习示波器的使用3个月足以学习基本的概念知识,示波器的使用也就像使用一个办公软件一样,不需要多精通,会用就行,没有网上吹的那么(动不动示波器分析射频电路fft频谱特性,动态响应特)

当然如果是在做单片MCU开发的小公司,由于公司缺乏人手,需要兼顾硬件开发的话,那只好硬着头皮上了,但是这样花费的时间精力可能比较多,对你跳槽正规大厂的嵌入式也没有多少好处。

计算机网络TCP/IP,套接字编程,如果是电子通信专业出身的,学吧!现代嵌入式设备连接网络的功能越来越多,越来越常见,不一定要TCP/IP协议啃得很(Linux内核有现成的开源实现代码,不需要你0开始),但是基本的概念和网络应用编程还是要懂,才能增加你的就业机会。

5.各种寄存器,软硬件调试方法和经验

调试配置寄存器,软硬件联调就是传统嵌入式代代相传的手艺活了。这也很能体现大部分人所谓的实际项目中解决问题的能(定位问题到寄存器配置上,解决问题真有成就感哈),这项能力还是要靠实际的项目来锻炼,也就是嵌入式中所谓的吃经验的东西。

但火哥认为,现代嵌入式开发不要太迷信这种调试寄存器带来的成就感,还是应该把大部分精力放在计算机软件、操作系统,体系结构等基础知识的学习上。调试寄存器的能力就NBA比赛的灌篮技能一样,很有成就感,带来全场欢呼,但是毕竟不是常规得分手段,也不是常规技(大部分得分还是要靠战术配合,投篮,上篮,三分远),嵌入式开发大部分精力还是要放在编程,实现业务逻辑上。

三、升职加薪的业务技术竞争力

要想在公司升值加薪,除了基础技术竞争力之(这项只能帮你好跳槽,找工作,不保证升职加),还需要和公司业务相关的技术竞争(这项竞争力只在同行业跳槽有效,不保证跨行业跳)

所谓业务技术竞争力,就是在特定行业和公司才有价值的技术竞争力,是无法轻易从书本获取的技术。尽管火哥承Linux内核,操作系统原理,计算机基础算法,计算机体系结构这些知识有一定难度,不是那么容易学的,但是毕竟一个没有工作经验的学生都能从书本这种最廉价的途径获取,所以无法构成业务竞争力的壁垒,业务技术竞争力也是学生和有工作经验的工程师最主要的差距。

一般来说,业务技术需要入行之后,在工作中学习,而且不同行业不同公司能学习到的业务技术是不一样的。比如说,通信行业的公司4G LTE协议,标准相关的技术就是业务技术竞争力;网络产品行业的公司,那些网卡路由标准协议相关的技术就是业务竞争力;机顶盒产品的公司,音视频流媒体编解码播放的相关技术标准就是业务竞争力;网络摄像头产品的公司,摄像头数据采集与网络通信协议相关的技术和标准就是业务竞争……

一般进入某个行业某个公司之后,只有多学习积累公司业务相关的知识,才能自己独立完成业务相关的项目,然后指导新人、同事,带领团队做业务相关的更大的项目,进而在公司掌握更大的业务话语权,和高管讨论公司业务规划,乃至战略规划。

一般站在公司高管的角度,思考的问题都是业务发展方向和战略上的问题,一个工程Linux内核底层驱动理论和技术能力再好,如果不是Red Hat SUSE或者华为Linux内核部门这种把内核开发作为业务方向的公司和部门,那么你牛逼的底层技术能力,也只是一项基础技术,平时工作解决的再复杂再难的底层内核问题,写的再风骚的代码,在高管眼里都只是解决一个普通问题,实现一个普通功能而已。

这些都是为公司的业务服务的铺路石而已,而高管就像在路上开车,眼里只有终点,尽管铺路石的好坏可能导致路上的颠簸,但是只要顺利到达终点铺路石看起来并没有那么重要。

可以说,在公司,你所掌握的和公司战略方向相关的业务技能,就像一个放大器,把你实际的技术能力和价值放大多倍,进而带来更高的收益。但这也带来了一些问题,如果公司近年的业绩不够好,你牛逼的业务能力可能不会给你带来等价的回报,那就得考虑你在公司业务方向上花费的时间和精力到底值不值。

火哥第一家公司就有不少业务专家,但是公司业绩一年不如一年,导致业务专家也和普通小兵一样拿死工资,没有得到相应的年终奖,最后,火哥跳槽出来的时候,差不多算跨行跳槽,相关的业务知识也在面试中没有太大的帮助。

同时,火哥也在和很多面试官聊天中,发现很多业务牛人,出来面试,虽然业务技术牛逼,但是基础技术花费的精力不够,所以没有得到面试官的认可。当然,在同行跳槽的情况下,业务技术能力的加分还是很大的,比如手机行业,高通跳槽OPPO、小米的对口部门,待遇上的提升就很多,但是这种真正业务对口的跳槽机会,火哥认为占少数,所以在业务技术竞争力上,行业的选择一定要有眼光,高薪跳槽机会多的行业,业务技术才是有竞争力的技(尽管可能不是最难的技)

四、无法轻易获取的门槛技术竞争力

所谓无法轻易获取的门槛技术竞争力其实也是业务竞争力的一种,只是相对于常规的业务竞争力来说具有更高的获取门槛。上一节所说的业务竞争力是指一般的业务竞争力,可以在公司内部,通过参与公司实际项目,业务知识培训或者老员工指导,口口相传中获取。

而这种门槛技术,在公司中一般也是保密的,非偶然机遇,无法获取,靠自己找资料自学琢磨基本行不通。嵌入式开发相关领域无法轻易获取的门槛技术竞争力一般有这(如果火哥说的有遗漏,可以后台私信补):

4G/5G通信基带算法与核心业务逻辑

WiFi、蓝牙驱动加载的固件IP中核心的算法与业务逻辑

Camera驱动加载的固件IPMIPI-CSI高速数据采集接口相关的核心业务逻辑ISP(数字图像处)相关的核心算法与业务逻辑

GPU驱动加载的固件IP,以OpenGLCUDAOpenCLAPI标准的库实现中核心的算法与业务逻辑

音视频编解Codec驱动加载的固件IP,以OpenMaxAPI标准的库实现中的核心算法与业务逻辑

LCD/OLED屏幕,或HDMI屏幕驱动加载的固件IP中核心的业务逻辑和实现

嵌入式设备电源低功耗相关技术

嵌入式设备信息安全与密码保护相关技术

这些门槛业务技能,除非你有偶然的机会,去了某IC原厂专门的部门,否则基本不可能接触到这种高门槛的业务技能。如果你OEM产商从事相关的岗位驱(比如在小米做手机cameraWIFI),你也只能从高通MTK拿到二进制的固件,几乎不可能看到核心业务逻辑的源代码。

这些模块虽Linux内核驱动部分可能为了遵GPL协议开源,但是一般这种开源的驱动都hardware enable的驱动,也就是说驱动里面只有使能或者停止设备的基本功能,核心业务逻辑相关的代码都抽出来做在固(可以是内核加载的固件,也可以是应用层的闭源)

有机会接触这类高门槛核心业务岗位,也算一种幸运,如果能跳槽到对口的公司,可能拿到非常高的待(当然也可能跳槽要签竞业协议,每月从老东家拿)

这种岗位的员工,在就业市场上是非常难招的,公司也会出于防止核心门槛业务技术机密泄露的目的,花大价钱留住这些核心员工,也不会培养太多懂得这些核心门槛业务技术的员工。

有机会从事相关门槛业务技术的开发,如果跳槽到对口的赚钱的公司,就有突破年50W100W的机会,也算是一种幸运吧。这种嵌入式领域的门槛业务技术本身的难度相对Linux内核Android系统框架等复杂系统而言,也不是绝对的(毕竟大规模应用的技术,本身不可能比理论性的东西难,智商良好的大学生应该都能学),但是轻易无法获取,会有一种神秘感。

五、跳槽涨薪的新兴技术竞争力

目前嵌入式相关的行业和领域,出现了很多不同于传统嵌入式领域的产品与解决方案,比如嵌入+物联+云端,嵌入+大数据,嵌入+人工智能,嵌入+无人驾……

关于这些新兴技术,也有一些争议,有些老的工程师对这些东西表示不屑,认为也不是很有技术难度和深度,就是调用一下别人做的云端或AIAPI,有很多泡沫,无法落地等他们觉得做嵌入式还是不能浮躁,应该踏踏实实去钻Linux内核,网络协议栈等非常深非常难的已有技术。

但是,火哥对年轻的嵌入式工程师往新兴技术领域发展,持支持的态度,我也相信我们公司总监说right time to do right things。而且从大的趋势上看NVIDIA公司推出Jetson平台AI边缘计算解决方案以Xavier平台无人驾驶解决方案Intel公司收购以色列无人驾驶芯片公MobilEyeARM公司CPU里面做的神经网络并行矢量计算加速库,最近也大规模招聘物联网与云端项目相关的工程师;华为的海思麒970芯片集AI加速单NPU;瑞星RK3399ProNPU支持各AI应用的部……

行业领军公司的布局,种种迹象表明AI、物联网、云+嵌入式解决方案的新兴技术,已经是大势所趋,并不像某些有经验的老工程师所说的都是泡沫,无法落地。

所以,火哥还是建议刚入行做嵌入式的年轻人,尽量地往嵌入+人工智+物联+云端的应用解决方案领域靠拢,要敢于尝试新生事物。新兴技术能够落地应用,就证明这里面并不是特别难学,也不是一定要钻研内核驱动,积累很深的东西才能学新兴技术。

而且不难学的技术,不代表没有技术含量,技术上的东西,很多时间是在信息不对称的情况下,打一个时间差,抢到一个合适的岗位,虽然以那些老工程师的智商,应该也能学会这些新兴技术,但是他们不一定有这个时间和精(时间成本可能是最大的成),换行成本也比较高,所以这块更适合年轻人争取时间差,在懂得这项技术的人还不多的时候,赶快抢到一个好的位置,能够有业务上的话语权。

从另一方面说,由于之2节所描述的嵌入式领域业务技术上的竞争力,在传统领域,由于已经发展了一段时间,有很多行业大佬已经掌握这些传统业务的技术话语权,而且部分业务还有很大的获得门槛,必须要努+机遇才有机会进入对应岗位做下去,靠自学很难积累。

一旦一个领域,在你前面积攒810年甚15年以上经验的大佬太多,并且制定了太多的行业标准和专利,你就只能被别人的业务标准和专利牵着鼻子走,很难做到很高的位置。

这就像很多工程师说,在单片机上实现蓝牙WIFI,TCP/IP协议栈也是很难很有挑战的,然而,做技术的目的是为了什么,花这么多精力重新实现复杂的协议栈,只是为了炫耀技术牛逼吗?在这些成熟技术的领域,已经有很多前人铺好路,有很多现成的模块和开源代码,也有很多的别人制定的认证标准和专(所谓认证标准就是在某些市场,某些产品哪怕实现了所有功能,但是如果功能不符合一些公司制定的标准,那就拿不到认证,产品不允许在这个市场出售。

比如音频相关的产品如何没有通过杜比认证,在很多市场就不被接受,你不得不花时间学习很多别人制定的标准,而有制定标准话语权的大佬,可以随心所欲修改标)。所以年轻人靠新兴的技术,在嵌入+人工智能,嵌入+物联+云端等领域,通过同起点,同样的学习时间,可能可以做到弯道超车3年之内,在收入上超过那些工810年的大佬。

当然,火哥所说的这些新兴技术领域和行业,也要根据你自身的情况因地制宜,制定学习的计划。

首先,不是所有城市都有这些新兴技术领域的相关企业,如果你想入行新领域,可能就得做出跳槽去北上深等一线城市的决策,如果已经在二三线城市安家,要照顾家人,可能就得做一些取舍,不得不放弃这些发展计划,继续在旧的领域深耕。

其次,第二节所说的基础技术竞争力应该放在首位。在夯实基(不一定要达到精通,但是还是要扎)的情况下,保证能得到面试官的对你技术底子的认可,能找到合适的工作的前提下,跳过二、三节所说的传统业务技术的学习,直接进入新兴技术领域,弯道超车。

最后,要保持一双火眼金睛,要能够识别出你所做的新兴业务到底是真新兴,还是传统业务包了一层皮。比如有些童鞋在所谓做嵌入+物联网业务的公司,实际上每天的工作就是stm32单片机NB-IOT模块,每天做一些调用单片UART,I2C接口NB-IOT模组通信的重复性工作,这就不算是真正的新兴业务,也不具备真正的新兴技术竞争力。

真正的嵌入+物联网领域的技术竞争力应该熟悉整IOT终端到云端的解决方案架构,熟悉如何搭建部署这套系统,熟IOT设备与终端和云端的通信协议的核心业务逻辑。同理,在嵌入+AI相关的公司,虽然嵌入式工程师不一定要懂得自己实AI核心算法,但是核心技术竞争力也不是指调用别人的人脸识别闭源库函数,做简单人脸识别应用。

火哥认为嵌入+AI相关领域的核心业务竞争力,也是在熟悉整套边缘端到云AI计算系统架构和解决方案,懂得一AI算法的基本原(不一定要自己独立能实),各种神经网络的优劣,能对嵌入式平台AI软件做系统级别的计算性能的加速优化,部署落地,解决客户实际应用场景中的问题,提供反馈给AI算法的工程师,帮助他们修正训练出来的模型。

我要回帖

更多关于 机电一体化专业就业方向 的文章

 

随机推荐