当前位置 博文首页 > 小林coding:太心酸了!!!转行进腾讯了(自学经验 + 面试心得

    小林coding:太心酸了!!!转行进腾讯了(自学经验 + 面试心得

    作者:[db:作者] 时间:2021-07-28 08:55

    大家好,我是小林哥。

    之前分享过很多读者校招拿到大厂 offer 的经历,他们都有一个共同的特点。

    就是在大学期间对于计算机基础准备的很充分,比如数据结构与算法、操作系统、计算机网络、数据库、Linux 这些。

    这次分享给大家,获取方式:计算机必读书籍(含下载方式),包含数据结构与算法、操作系统、计算机网络、数据库、Linux 这些,

    然后期间就有很多读者问我,对于社招或者转行又应该怎么准备呢?

    前段时间,就有位在机械行业工作了 2 年的读者,成功转行了程序员,而且还进了腾讯

    在这里插入图片描述

    我知道大家肯定会很好奇他的经历,所以小林已经邀请这位读者来分享他的转行的经历。

    当时我看完后挺震撼的。震撼在于他之前的机械工作,竟然晚上 10 点才下班,每天工作 14 个小时,这工作强度不必互联网大厂少,而薪资却不及互联网一半。

    这个工作强度,使得他在上班期间根本没时间自学编程,都是利用周末的时间从早学到晚,而且还是自学了 2 年,我开始以为他是自学了半年后转行的,没想到一直坚持那么久。

    而且这位读者说他自己挺幸运的,他最开始转行找工作的时候,目标并不是想去大厂,只是想去小厂,结果事与愿违,好家伙!

    相信这位读者的转行经历,能鼓舞到那些也有此想法的朋友。

    在这里插入图片描述


    前言

    大家好,很感谢林哥给我这次机会分享,介绍一下我自己。

    我 19 年毕业于武汉理工大学,毕业后一直在做机械研发的工作,自学了两年 Linux C++ 编程

    如今在武汉找到了一份编程开发的工作,现在我将我的经历写出来,希望能给大家一些帮助。

    为什么要转行?

    转行的主要原因是因为毕业设计要做一个串口播放器。

    当时做了播放器和串口通信的实现分别花了一个星期,怎么将二者打通折磨了我很久。

    这期间我借了很多书,看了很多博客,看了很多视频,完全没有相关内容。最后论文指导老师都劝我放弃了,不然毕业论文就写不完了。

    没法子,只能先放弃。

    虽然口口声声说放弃了,但我的内心还是不想放弃,有好几晚都失眠了。直到一个周四的晚上,我依旧失眠到两点。

    不过这一晚不同,我翻来覆去睡不着,脑海中突然闪过一个很好的 idea,害怕这个 idea 飞走,我悄咪咪的爬下床,打开我的电脑,顺着思路敲下代码,越写越兴奋,心里不断传来声音说「对的,这是对的,哈哈哈~」。

    当我点击编译,一个一个功能进行测试,和预期功能完全一样,那一瞬间成就感填满了我的内心。

    这时一道阳光透过窗照在我脸上(武汉夏天太阳出来早),原来已经天亮了,这是我第一次对一件事这么着迷,就想着以后做这方面的工作。

    下面这张图就是我当时做的串口播放器,可以通过右侧的按钮进行控制,也可以连接串口后,接收相应的串口信号,进行视频的播放、暂停、全屏之类的操作,同时还可以发送和显示接收到的串口数据。

    在这里插入图片描述

    虽然现在现在这个播放器看起来很简陋,但当时足足花了我一个月的时间,是我的第一个可以直接体会到的程序,我一直将它放在我的桌面上。

    当学到厌倦的时候,都会打开它,提醒自己走到这一步的初心。

    选择什么方向?

    因为我是机械出身的,我最初的想法是转到与机械关联性大一点的岗位 – 嵌入式。

    心里想着悄悄的学习,然后司内转岗,惊艳所有人(很幼稚的想法)。说干就干,我先在网上找了学习路线,制定了学习计划。

    需要学习 51 单片机,就在 B 站找到了郭天祥的 51 单片机教程,还淘宝买了个 51 单片机,照着教程一点一点的敲,有不懂的就看书。

    很快就遇到了瓶颈,书上有个电路图我看不懂,出于「我不仅是想找一份工作,我还想把这份工做好」的想法,我又去网上找学习路线。

    网上说嵌入式得学数电模电,学数电模电又得学电路分析、微机原理等等。

    于是我做了一个错误示范,在 MOOC 上找了北理工的基础电路分析课,还淘宝买了对应教程。

    一学学了两个月,堪堪对着视频学完,想着厚厚的数电模电,还有树莓派之类的要学,BOSS 直聘又查了一下单片机开发的工资,得出结论 – 我不适合嵌入式(学东西直接一口气学完,不要老想着完美主义)。

    接着我又开始了寻找学习路线的路途,因为限定语言是 C++,找到四个路线嵌入式、音视频、服务器、游戏,考虑未来准备发展城市的互联网环境和房价,最终决定做服务器开发

    接着就是在知乎上查找服务器开发的路线,看了很多,根据自己的情况,制定学习计划,再按计划实施就可以了。

    学习方法

    我一直坚信选择比努力重要,好的方法可以事半功倍。

    我提供一下我自学期间的方法,或者说是基本原则,虽然不一定适合大家,但希望能给大家一个参考。

    • 睡眠最重要,睡得好,才有精力同时应对工作和学习,每天晚上必须保证七个小时的睡眠,中午也要午休一个小时;
    • 学习少便是多。听懂一个知识点,比略略看了三四个点更重要;
    • 刚开始学的时候看视频,快速构建知识框架,后续看书补全知识框架;
    • 做好笔记,以输出为目的进行学习,推介用 typora 做学习笔记,将自己每天所学的内容记用 typora 记录下来;
    • 关注相关领域的博主,比如说@小林coding,加入他们的技术交流群,你最后会发现,你即使潜水,也能学到很多;
    • 将所需要学的分为知识和技能,二者相辅相成,但知识偏理论,要记下来,技能偏实践,一定要亲自动手。

    一边工作一边自学

    背景

    我的本专业是汽车类的,当时高考结束选择机械专业的原因就两个。

    第一是认知有限,无人指导,只知道程序员秃头、教师要改作业、材料要做危险品实验等等,一众专业中唯独机械万金油,什么都会,什么都能干,而且越老越吃香,因为是农村的,一心求稳,害怕找不到工作,机械就成了首选专业。

    其二就是这个专业是我们学校的王牌专业,本着宁为鸡头,不为凤尾的原则,就不考虑更好一点学校的普通专业。大四找工作时才知道,「什么都会」代表着「什么都不精」,「越老越吃香」代表着「年轻时不吃香」。

    当时最大的愿望是能找到一份年薪十万的工作,能拿到年薪十万的基本上都是学院里的佼佼者,拿到十五万到二十万就是学院里的 top 同学,再往上我就没怎么听说了。

    现实却是,大多是四五千月薪的工作,而且得经过层层选拔。印象最深刻的是一个知名汽车厂,面试了三轮,还要写小作文,最后一问工资四千五。

    偶然间参加了一次互联网公司的宣讲会,听到 17 万只是他们公司的白菜价时,我整个人都惊呆了,我只能告诉自己「机械专业越老越吃香,他们三十五之后有淘汰危机,而我没有。」

    现实往往是惨痛的,我在前一家机械公司呆了一年半。工作节奏是周一到周四早 8 晚 10,周五早 8 晚 5,迟到要罚款,周六可以晚点去,但一定要去上白班

    虽然中午可以休息两个小时,下午也有一个半小时吃饭,但每次下夜班都是十点了,回到寝室只能简单洗漱一下就睡了。

    虽然每天的在工位上的时间只有「区区十小时」,但真正自己能支配的时间只有晚上十点半到第二天七点五十,每次周日的时候,只想睡觉,一觉醒来,发现明天又要上班了,感觉自己完全没休息好,马上又要上班了。

    仅仅一年的时间,跟我一起进去的小伙伴体检都有了大大小小的问题,我也有了脂肪肝、甲状腺结节、糜烂性胃炎,有时候还会心悸、胸痛。

    最开始的计划是一边上班、一边自学,转行成功了再辞职。

    直到第去年六月份的时候,带我的同事去年绩效打得不好,公司要求末尾淘汰。

    他是公司刚成立没多久就来了的,被公司优化了,本来没什么,拿个 N+1 走人也可以的,恶心人的却是,公司用了网上各种套路,诸如威胁、调岗、最低工资等等招式对付我的同事。

    最后达成协议,工资降一半,继续留下来,我同事也同意了。

    但不到一个月,又说上面政策变了,还是得走人,可以给N,但是是降薪后的N,我的同事彻底心凉了,不愿意在纠缠了。

    这件事也让我彻底心凉了,即使董事长说「发动机不过是一坨铁」,我们研发人员也只是相视一笑,直到这件事发生,我们才明白----这公司没什么人情味,我们都可能是下一个「他」,谁知道明年会不会优化我们呢?

    即使我们努力加班,年纪轻轻就一大堆毛病,也阻止不了被优化。但这已经是机械行业里的 top 企业了,集团还是世界五百强,从业人员都还是这种待遇。

    若是出去,其它机械小厂是不是更糟糕,这更加坚定了我转行的决心。

    后来了解到仅仅这个公司这样,广丰广本上汽这样的明星企业还是很好的,但进去的条件极其严苛。

    小鹏、蔚来的互联网车企待遇也很好,但需求更大的是「软件人才」,不是机械。

    如果大家有志于汽车行业,也不要因为我的经历而寒心,我的第一家公司代表不了所有的机械行业,只能给大家一个参考。

    如果有志于发展中国的汽车行业,建议大家可以学计算机、通信、电气,然后进入车企当嵌入式工程师,结构岗我就不推介了,这个坑我已经踩了。

    言归正传,说说学习节奏

    为了保证充足的精力应对学习和工作,我基本上都是晚上十点下班,回到宿舍洗漱一番,和女朋友聊聊天,十一点就赶紧睡觉了,然后第二天早上 6 点起床看书,看到七点四十就去吃早餐上班(住在厂区,离办公地点很近)。

    这样的节奏一般保持六天,周日就睡半天,打打游戏,看看电影,放松自己,下周继续上一周的节奏。

    周一到周六除了早上固定的学习时间,我也会在中午或下午下班看半小时书,不过效率没有早上高,故而早上一般学习最重要的内容,其他时间看博客理解早上学的内容。

    在这一年半的时间里,我只学了 C++、操作系统、计算机网络、数据结构和算法,基本上都是在 MOOC、B 站上找视频自学的,看完视频再看书进行补充。

    C++ 的学习

    我在 B 站看黑马程序员的 C++ 课程入门的,就是这个课程:

    我基本是先看完一个章节的内容,心中有了大概的理解,就在 VS 上复现出来。

    我对自己的要求就是–一定要复现出来,因为有种错觉就是–我以为我会了,一写代码就卡壳了,争取每天学习都动手敲代码。

    作为初学者,我学了三四个月,在此期间,一直秉承着「少便是多」的原则,甚至会刻意放慢速度,如果发现前面的忘了,就重新再学一遍,而且第二遍第三遍会快很多,而且还会发现之前忽略的细节。

    得益于这阶段 C++ 学得很慢,对基础知识记住得比较多,后来面试看看面经,C++ 相关的问题基本能回答出来。

    我学完后没看书,因为《C++ primer》太厚了,直至面试,我也只是略读了一次。

    操作系统的学习

    操作系统我是在 MOOC 上看北京大学陈向群老师的现代操作系统学的,不过现在 B 站也有视频,操作系统还有其他很优秀的课,比如华科的、哈工大的、清华大学的,我选择北京大学老师的课是因为我买了《现代操作系统》这本书,课程刚好对应上。

    在这里插入图片描述

    学习过程中,操作系统给我的感觉就是非常的抽象,这一阶段学得非常慢,进程线程我都是看书才看懂的,不过这一阶段要学的基本可以分为四个部分:进程线程、内存、文件系统、I/O(面试问得很少,理解即可),其他的部分可以后续遇到再学。

    学习节奏基本保持着每个星期只学一章,多了不学,也不能少。

    计算机网络的学习

    计网我是通过哈工大的计算机网络学的,配套书籍是《计算机网络自顶向下》,我只看了视频的应用层、传输层、网络层、链路层、物理层

    在这里插入图片描述

    到传输层的时候我就感觉有些吃力了,还好当时我遇到了宝藏博主@小林coding,小林的图解让我有一种醍醐灌顶的感觉,原来课上理解不清的概念都被小林图解得明明白白,衷心推介大家关注。

    数据结构的学习

    我的数据结构是通过浙大陈越姥姥的课学的,B站有视频,大家可以去搜。

    在这里插入图片描述

    这一课程需要达到的目标是,知道什么是数组、链表、栈、队列、堆、树、哈希表、图这些数据结构。

    最好能照着视频实现自己的数据结构。只要能将这些实现出来,基本就可以进入下一阶段了。

    在家自学半年

    在家这半年主要做了两件事:

    • 第一是将之前学的操作系统、计算机网络、数据结构和算法、C++ 进行总结,用 xmind 将每一个内容的知识点脉络整理出来,用 typora 将比较难得知识点记录下来。
    • 第二就是进行实战训练,学习编程技能,比如 linux 的基础 shell 命令、vim、gdb、gcc、make、git 的使用,学完这些后,开始跟着 acwing 刷题,刷完算法基础课后,学习 linux 系统编程和 linux 网络编程。

    编程基础技能

    在这里插入图片描述

    刷题

    如图,加入了很多博主的技术交流群,在里面一直潜水,但依旧学到了很多。

    有一次就知道来了 acwing 的算法基础课,B站试看了一下,发现正是自己所缺的刷题套路。淘宝买了正版码,就开始了学习刷题套路之旅。

    最开始的时候,我想着把课程看完,再回来做练习题。实行了一个星期,发现自己还是什么都不知道。

    复盘了一下,还是自己太急躁来了,就给自己定下了少就是多的原则,一定要把题目刷出来才进入下一 阶段。

    我开始以写出来为目的进行学习,如果今天写不出来,就看题解,去理解,理解后自己写两三遍,直到能随手写出来。

    不出意料,我的进度慢得出奇,一个下午只理解了一个题,不过我还是坚定这个方法是可行的。

    皇天不负有心人,一星期后我发现自己慢慢地摸索到了刷题的节奏。渐渐的能跟上视频进度了,学了两个月,终于把 acwing 的算法基础课学完,虽然花的时间比较长,但还是值得的。

    在我遇到的面试中,但凡是要求手撕算法的,都能在算法基础课里找到一个类型的题。

    linux系统编程 & 网络编程

    我将 linux 系统编程、网络编程看做是操作系统、计算机网络的技能体现,既然是技能,就一定要练。

    这两门课我是看 B 站黑马程序员的视频学的,在 B 站输入关键词就能找到。这两门课一定要 学完操作系统和计算机网络之后再学习,不然很多东西都听不懂。

    还有就是一定要做笔记,下面就是我做的 linux 系统编程、网络编程的笔记,可以在视频下方找到别人的笔记,进行增删改查,变成自己的笔记。

    在这里插入图片描述
    在这里插入图片描述

    开始面试

    八股文

    如果说学习计网、OS、数据结构是让自己有理论基础,学习linux系统编程、网络编程是让自己有编码基础,那么八股文就是让自己有面试基础

    有些知识点你可能掌握了,但问的时候却回答不上来,终究还是不熟悉套路。

    可以在 CSDN 输入「XXX八股文、XXX面试题」这些关键词,就能找到很多,收集到了就复制到 typora 中,达到一定量了,就按自己的知识地图分好类,面试前做看一看就可以了。

    对了,小林的《图解系统》和《图解计网》,大家一定要在面试前看明白,看明白了,系统和计网就 不怕面试官问了。

    说一说我在面试中遇到印象比较深的面试题,希望能能给大家一个参考:

    C++
    1. 说说const与指针?
    2. 定义常量有哪些方法?有什么区别?
    3. 声明和定义的区别?
    4. static的作用?
    5. 指针和引用的区别?
    6. vector和list的区别?
    7. map和unordered_map的区别?
    8. map和multimap的区别?
    9. 类的三大特性是什么?说说自己的理解
    10. 多态的实现原理(虚函数表指针方向)
    操作系统:(看小林coding《图解系统》就没问题了)
    1. 进程与线程的区别?
    2. 什么是内核空间?
    3. 内存空间分配?
    4. 内存分配算法
    5. 内存页面为什么是4k大小最合适?
    6. 什么是外碎片、内碎片?
    7. 什么是硬连接
    计算机网络:(看小林coding《图解网络》)
    1. get和post区别?
    2. 三次握手?
    3. 四次挥手?
    linux系统编程:
    1. 进程通信方式?
    2. 线程通信方式?
    3. 线程同步方式?
    linux网络编程:
    1. select、poll、epoll区别?
    2. 说说你理解的IO多路复用?
    3. 说说你做的web服务器?
    算法题:(要求手撕)
    1. 两个有序set容器合并成一个有序序列(归并排序)
    2. 求一个字符串里有几个子字符串(kmp算法)
    3. 数字转换成罗马数字(考虑所有情况即可)
    4. 将一系列区间合并成几个闭区间(区间合并)
    其它:
    1. git的commit命令提交的是什么?idex是什么?
    2. 说说gdb的常用调试命令?
    3. 说说你常用的shell命令?

    简历

    简历里一定要有项目,我的项目就是 linux 网络编程课程后面的web服务器

    在这里插入图片描述

    虽然很简单,只能实现网页看文字、图片、音视频,但我也会写上去。

    面了这么多家,发现面试官在意的不是做了什么项目,而是在项目中得到了什么,更注重你的思想感悟。下面就是我写在简历上的项目:

    关于技能栈,我会将我所有知道的技能都分类写上去,但一定确定自己会,而且有自己的理解,不熟的我都不放,不给自己挖坑,面试官一般也只问我简历上的内容。好好准备一下八股文,面试前多看看小林的《图解网络》和《图解系统》,基本就没问题了。

    在这里插入图片描述

    面试

    这么找到面试机会呢?

    我给大家说说我的做法:

    第一步,下载boss直聘,填写好自己的在线简历;

    第二步,刷boss直聘,这个软件有个机制就是,你看了对方的岗位,hr会看到谁看了他的岗位,他有可能会看你的简历,如果hr感觉合适就会联系你。当时我晚上失眠,刷到两三点(不要学我),第二天醒来发现有一大堆hr发消息。而且上面会有很多大公司的员工兼职招聘,因为大厂的内退奖励很丰厚,有人靠下班刷 boss 赚了几万内推奖励。

    第三步,多面试,提高自己的面试能力。我最开始面试的时候话都说不利索,到后面都可以侃侃而谈了。就是同样的话说多了,熟练度高了。

    怎么进的腾讯的?

    我的面试并不多,也就十几家。

    发现小公司都不是很愿意给面试机会,反而大一点的公司面试机会更多一些,其中华为的 od 招聘最愿意给机会。

    我最开始的目标是找个小公司,月薪六七千我就满足了,但在长沙还是很难实现。此时接二连三有一些大公司boss直聘上给我留言,我知道自己面不上,每次都是回答「对不起,我不太合适」。

    后来收到多了,我也烦了,就直接答应了 csig 的hr。想着简历也不会过,过了去体验一下大厂面试也好。

    所以也没很重视,甚至面试前几分钟都还在睡午觉,还好有闹钟。

    面试是在周六下午,一共两面,面试问题并没有想象中的难,基本上就是我上面罗列的八股文

    让我比较不适应的是手撕算法,我第一次面试手撕,还有点不习惯,还好当时学AcWing算法基础课时每一道题都写了好几遍,才不至于卡壳。

    一面就是手撕归并排序,我写出来了。二面手撕kmp,我没写出来,但说了kmp的算法思路。运气比较好,面试官让我通过了面试。

    事后总结了一下,感觉能通过面试是因为:

    • 1.简历上的我都会用;
    • 2.基本问题都能回答上来;
    • 3.平时刷题都是实打实的手敲(没怎么刷题,主要就是写了AcWing算法基础课的练习题)。

    怎么回答自己半年的空窗期?

    我当时就将自己两年间的经历和心路历程都跟面试官说了一下。

    期间聊到了自己为什么要转行?为什么要选择互联网?对自己而言最重要的是什么?

    面试官基本都比较满意我的回答,后面复盘,认为面试官在意的应该是我是否是一个有规划的人,想通过这个问题看我是不是脑子一热就转行的人。

    面试遇到的槽点

    hr压价

    hr 压价是普遍存在的,如果可以以更低的成本招聘到人,何乐而不为呢?

    刚开始遇到压价我很慌,后面 offer 拿了几个,也就有了应对措施,给大家分享一下:

    • 多面试,多拿offer,只要手里有一个offer,就可以和hr谈价;
    • 确定好自己的目标薪资,如果offer达到薪资目标就考虑五险一金、工作时间、平台,做好横向对比,选取最合适自己的offer;
    • 放宽心,工作是双向选择的结果,你在选择公司,公司也在选择候选人,如果公司不愿意开出满意的薪资,可以换一家。
    外包

    我自学之初就看了很多网上的文章,基本都说不要去外包

    我面试过程中也遇到了外包,是武汉的某某科技(国企),看了我的简历,boss上找到了我,要了简历。后面给我打了个电话,说看了我的简历,认为我是可造之才,愿意给我个机会,做他们的外包,月薪六千,不包吃住,没有五险一金,一年后看表现决定是否让我转正,最重要的是不用面试。

    当时听到这条件,我的确心动了,但想到我学了两年,却连面试都都没有,我不甘心,至少得让我面试一下,最后就拒绝了。

    后来才知道,这是这个公司在忽悠人,人员流失非常严重。说出来是希望给大家一个参考,至少得面试一下。

    最新型的外包就是 boss 上铺天盖地的 od 岗位,签的是外企德科,我也面了。

    先机试,要求 150 分,三道算法题,好好做都能过。然后是两轮技术面,面试过程中都要手撕算法题。最后是人事面,都过了。

    最后谈工资的时候,只拿到 11.9k,其中 2k 还是绩效工资,换而言之就是,你表现不好,就少 2k。

    而且 od 是没有奖金和股票的,hr们都说不分正式员工和 od,实际上是你干着和正式员工一样的活,他们有年终奖和股票,你没有。

    不过大家没有路的话,也可是试试,毕竟是大厂。

    面试不问技术

    我遇到最奇怪一个面试,莫过于第一场面试,全程没问我技术问题,只问我会不会喝酒,有什么兴趣爱好,会不会打麻将,我回答得都不好,但面试官还是让我过了。

    因为刚开始转行面试,我很珍惜这一次的机会。

    到后面的时候越想越不对劲,写代码还要会搓麻将?感觉不靠谱,就拒绝了二面。

    后来才了解到,那个行业技术人员混的一般,混得好的都是很会「来事」的。

    如果大家遇到这种奇怪的面试,希望大家多考虑一番,不要因为转行而没有自信,感觉自己低人一等,对求职公司委曲求全

    公司这么多,总会找到一个愿意接受我们的。

    后记

    基本上就这些了,我的经历只能给大家一个参考,如果你已经工作了,并且想转行,希望能给你一些参考。

    谢谢大家,祝大家工作、生活、学习愉快!

    cs