关于“面试造火箭,工作拧螺丝”
面试的时候,很公司把从客户需整理,系统设计,数据库设计,到编码规范,什么高并发,分布式,团队协作,等不在话下,显示他们很规范,很牛 B 。
等你进入公司,给你一坨屎山一样的代码,在上面继续拉屎。你都一砖把面试的人拍死。
所以你看到了很拧把的事情。他们希望花最少的钱,用最好的人才,来保障他们对软件的最低需求。而软件的创新和改进不会提升任何主营业务的赢利水平。所以他们对造火箭很感兴趣但仅仅是感兴趣。可是造火箭不赚钱,不赚钱的工程师最终都会被送去拧螺丝。
1 浏览器从输入 URL 到显示页面中间经历了哪些过程?
2 请谈一谈 MVC MVP 和 MVVM 的区别. 你深入理解过 Vue 的源码吗?请谈一谈 Vue 的响应式原理.
估计面试官自己都不清楚答案.
中国人这么多当然得挑人来干,门槛自然就高。
辛辛苦苦面个 4/5 轮进了某家公司, 薪资指不定也不错。 心里想着: “公司肯定需要一个强力的人来顶住复杂的高并发业务吧”, 然后进去发现全是 CRUD, 好像随便抓个 java 开发都能做的样子 (狗头)
螺丝火箭问题的时代背景,是开源创造的技术世界。为了更好的说明这一点,先讲一个许多人都听说过的说法,就是在水里面,鱼是最后一个知道有水存在的。这个说法说的是,我们对太熟悉的东西,会视而不见,理所当然的认为他们就是应该存在的。开源就是这样的一个事物,现在国内的技术圈子,大多都是靠着开源技术过活,大家有没有想过为什么可以靠拧螺丝就可以每个月有收入?是的,这就像鱼看不见水一样,我们习惯了开源的力量,开源创造的生态,所以我们觉得那是理所当然的。而实际上鱼所生活的水域环境,是经过大自然漫长的演化发展才造就的,开源生态也是,是无数的前辈苦心孤诣得来的,所以我们可以靠着拧拧螺丝,就可以找到一份工作。但大家有没有想过,如果从现在开始,大家都只是拧拧螺丝,而不去深究开源技术底层的技术原理与由来,而随着先前造就开源生态的技术大神慢慢逝去,技术还谈何发展呢?这就会出现一个现象,就是一套工具或者系统,人们会用,但是不知道怎么扩展,另外出了 bug,也没人会修复,只能凑合着用,那么这种情况下的生态就停滞了,所以说社会要发展,技术要进步,一定要有接班人,要有承接上一代开源精神和技术能力的后辈来继续开疆拓土。这样的话,问题就很明显了,从开源生态的发展角度,光会用软件是远远不够的,会用软件很简单,但是懂得背后的原理就难了,如果精通原理 + 运用软件的知识 = 100% ,那么运用软件的知识占比可能只有 10% – 15%,例如冰山一样,表面的高度,远远不及水下冰层的深度,这样的冰山才是稳固的。再一次说明,站在整个社会的角度,对于一个技术人员,不仅应该懂得运用软件的知识,还要看的清技术的来龙去脉和未来发展,这样的技术生态才是良性的。故此大公司技术团队负责人面试的时候,都会看看面试者运用软件之外的能力,意图也相当明显:我们虽然是招聘用轮子的人,但是最好他也能造轮子。
刚刚特意强调了大公司面试,是因为并不是所有”螺丝火箭“的现象都是面试官担心将来技术领域会出现断层,而天天忧国忧民寝食难安。这种技术情结大多都是有自主研发能力的大公司,大企业往往都是开源生态的中流砥柱,通过自身的经验贡献开源生态,从而在将来得到回馈。而小公司则不然,小公司一般只是开源生态的受益者,他们本身很难有贡献开源的能力,小公司的第一目标就是先活下来,然后慢慢的找到盈利点,这就是小公司的状态,这年头创业,大家都知道非常的难,本身赢利点就不容易准确定位,所以节省开支,就是维持企业正常运转的一个很重要的方面,这种情况下,在面试技术员工的时候,都想要找”物美价廉“的程序员,也就是技术牛笔,给钱又少的技术,但是总不能直接跟人说我公司没钱,想白嫖你的技术吧,所以面试的时候一般都是高起点,让你知道我们公司技术是很牛的,要会很多,等把你打击的差不多了,在用这个来压低你的工资。这也就是小企业为了找到合适员工的计量罢了。
以上可以看出,”螺丝火箭“现象,只是开源生态在国内发展不完全的结果,随着国内经济的逐步崛起,技术领域的逐步规范,为了后继开源精神的”螺丝火箭“现象还会存在,但是小企业压工资的”螺丝火箭“,会慢慢减少,不是不想用了,是大家技术都越来越扎实了,小企业再也不能占员工什么便宜了,所以技术人员还是要自己有底层分析与认知能力,相应的才能有更好的开发运用能力,一分钱一分货,有什么能力就拿多少工资。所以开源的意义,远比大多数人认为的免费,不用钱,要丰富的多,重要性也大的多,想要更加充分的了解这一点,随便找一个介绍 20 几年前 IT 技术的视频你就会发现,在那个闭源的技术年代,技术发展是缓慢的,软件系统是昂贵的,技术氛围是死气沉沉的,这样一个对比,才能充分认知开源的意义,明白了开源的意义,也就能看到一些”造火箭与拧螺丝“背后的东西。
并不是中国特色,外国人也抱怨,这个叫 brain teaser 。国外其实更常见,最坑的是还有白板手写。
起码国外面试主要是考算法,作为工程师不管做什么,时间和空间都是需要考虑的问题。当然现在军备竞赛越问越难也是蛮烦人的
上场就问你读没读过源码这种事我觉得更像是码农八股文,有需要了再读的东西有什么必要没开工就读到针眼里
后面最夸张的是面一个公司(类似 Uber ),有一轮中( 45 分钟),先考了个很难的算法题,然后再来一道系统设计让我设计 Uber 。我想如果我真的能设计 Uber 了,那 Uber 里面那么多 Principle Engineer 是不是可以辞退掉了。
现在想想,面试其实不是工作,面试是想方设法删选掉 99% 的人来录取,所以造火箭还是造飞机,这就看公司心情了。
回到主题,这个就是说,大部分人的工作内容其实都是一般的,用不到太高深复杂的算法,也没有经历过千奇百怪的场景,对各种工具也就是一般的使用。但是面试的东西往往和实际工作的内容脱节,需要你额外花时间特意去准备因为在工作中不怎么会碰到这些问题。就比方说 flag 面试就是 5,6 轮算法+系统设计,工作这么多年早忘了不是么。
你要说有啥建议?上学期间好好刷题吧,对面试确实有很大帮助
同样是面试题,怎么造火箭和火箭怎么造是不一样的
Java 的 hashmap 是怎么实现的和如果让你设计一个语言的 hashmap 你会怎么做,是两个问题。
设计一个 mvvm 框架和 Vue 的 diff 算法和响应式是怎么实现的,是两个问题。
TLS 是如何实现握手的的和如果让你设计一个可靠的安全的通信方式,你会怎么做,是两个问题。
一个是考察你是如何思考的,如何应用你已经学的知识。另一种仿佛就是要招一个无情的编码机器,背诵好所有的 API 和算法就行。
你说,大家讨厌的是哪种?
@ChanKc 你说的也对,我之前对主的问题理解不太准确。 我的本意是,从纯技术角度看造火箭和拧螺丝两者并不冲突。
在主的问题背景里,造火箭和拧螺丝有冲突是因为,某些小公司本身不具备造火箭的能力,却用造火箭的标准选择候选人,而且给不到候选人匹配的待遇。 这种招聘策略把一些高端人才拉到了更低层次,加剧了行业低层次人才的进一步内卷,破坏了整个行业的生态,尤其是造成了糟糕的面试体验。
很遗憾,如果不能向他人展现自己的价值,那么就算是金子也只是个破石头而已,这年头酒香也怕巷子深。
因为内卷
“我需要你会很多,并且我可能只用你身上的一点,但是备不住哪一点”