文章目录
一、自我介绍
大家好啊!我先做个简单的自我介绍。
我是双非普通本科软件工程专业,技术方向是C++,一段超级小厂客户端开发实习,一段中大厂客户端开发实习,目前在国内互联网Top通过实习转正拿到了后端开发Offer。
二、学习经历
转专业
我是转专业到计算机专业的。大一上我得知学校可以转专业,转计算机只需要通过编程题考试即可。也了解到IT行业有些很好的公司不卡学历并且薪资乐观,抱着这样一个想法,我开始搜索网上资料,如何学习C语言。在刚入门的时候,真的感觉在听天书,经常一个知识点我会搜很多博主的课来理解,我基本是看小破站的C语言课程转专业的,但是如果有想转专业的兄弟在看这篇文章,要提醒一下,如果时间不够建议你速通一下语法然后直接刷题。市面上也有很多书籍,但是综合来看,目前关于技术学习的书籍水平不太高,对于初学者很不友好,一本好的书或者一个好的老师对于初学者来说很重要。
选择就业
当进入大学后,我们就要考虑这些事:以后要干什么?考研?考公?就业?简单讲下我的想法。
考研:对我来讲很累,而且即便花费很多心思和精力,考不考的上另说,考上了还要读三年,读研听说也很累。如果不考虑在学术领域发展,依然要找工作,依然要笔试面试,而且读完研之后的就业形势也不好说。当然,如果可以保研到好学校是很不错的。
考公:如果考上了很稳定,但是我不太喜欢考公需要学的知识,如常识判断、言语理解与表达、数量关系、判断推理、资料分析等,而且考公人数越来越多,录取比例很低,我觉得很难。
就业:双非本科就业很难,如果没有实习经历,简历绝大多数情况都不会通过,当然就没有后续的笔试面试。如果要双非本就业,最好要有两段实习经历,且至少要有一段大厂实习经历,这样秋招时简历通过率才会增加。这就需要提前准备,包括提前把技术学好,提前找实习。即便有了实习,秋招时收到面试的顺序依然是:92硕,92本,双一流,双非。另外,一些笔试同样做出来两道,硕士可能会收到面试,而双非可能收不到。所以,我建议能读个好点的研究生,大家还是读研吧,本科找工作真的很难。比较乐观的是,有些很不错的公司是不太看重学历的,而且,如果本科可以把技术学扎实,毕业直接就业是个相当不错的选择,前提是早早准备,早早决定,早早把技术练好,不然,大三的秋招就是悬崖峭壁。
综上,三条道路难度无法讨论孰易孰难,看大家个人喜好,我早早的就选择了就业这条道路。
学习之路
我在学习期间,经常会经历这样的循环:心情积极乐观,打鸡血猛学一个月------某天偶尔想到会不会找到工作?学这些会不会有好结果?学这些有用吗?------然后心情很低落,停止学习一段时间,之后想到再怎么说,计算机行业也算是比较好的行业了,不如就先学着,不学一定没结果,每天玩肯定不行------然后又开始了下一轮循环,特别是GPT爆火的那段时间,经常会刷到博主说现在AI已经怎么样怎么样,程序员行业已经怎么样怎么样,我就会怀疑,这个课这么难,每次学起来并不轻松,甚至有点痛苦,为了学这个我把对学校课程的精力都放到这上面了,会有好结果吗?程序员是不是要被AI替代了?当我实习工作后,就会发现这个想法其实是有点好笑的,AI未来也许会很牛,但目前他还是处于一个起步的状态,而网上那些宣称自己是某某大厂的技术佬,在网络上四处宣扬说IT已死的人只不过是博流量罢了,并且目前大数据推荐,你越看,他就越推,你就越焦虑,建议遇到这种情况直接划走。当过十几年的学生,想必大家都了解,学习的过程和结果,有很大一部分在于谁有稳定的情绪,谁有足够强的心理承受力和对这个世界有足够清晰的认知,有了强大的内在精神驱动,做什么都不会很差的,特别是到一些我们认为是"大事"的时候,能否做到沉着冷静,能否做到从从容容~游刃有余~?我可以给大家个定心丸,IT行业在如今的就业环境中,依然老当益壮,都说计算机已死,又有多少非科班的人自学来吃这碗饭?我实习遇到很多实习生都是非科班的研究生,我一段小厂实习两段大厂实习期间,身边除了我全是研究生,而且很多是非科班自学转码的研究生,都说计算机凉了,又有多少人挤破头想吃这一碗饭。所以完全没必要担心,你只需要知道,你把技术学完学透,是足足可以在IT行业找到一份不错的工作的,这个疑虑打消了,剩下的就看兄弟们的自制性了。也就是说,坚信,学这个方向,这么学下去会有好结果,如果没有一份信念作为精神的中流砥柱,在整个学习生涯中是难以坚持下来的,学习的过程中会遇到多少诱惑?会遇到多少挫折?如果对前方没有一点自信,心中没有一点信念,又怎能够支撑?这样的经历,作为学生的我们多多少少都会经历一次甚至多次,考研考公的经历亦是如此,我身边有很多考研考公的同学, 每天起早贪黑,没日没夜的学习,死磕408或者行测申论,这么搞下去前方有光亮吗?在一眼望不到底的深渊回廊里死撑,能不能走出去?走出去是光明的吗?不知道,学习的过程往往是一个悬而未决的过程,在这个过程我们需要有一个坚定的信念,也需要有这样的认识:"一定要培养对事情悬而未决的耐受力,避免因急于求成而造成焦虑和烦恼,要允许事情处于灰色地带,接受事情的不可控因素,过度追求掌控反而容易陷入焦虑与自我消耗。任何问题的到来你都不需要太着急去回应,否则就是在和自己死磕,学会让子弹飞一会儿绝对是大智慧。事实上不管多大的事,到最后都会解决。不要给自己太大的压力,你的人生也绝对不会因为任何一件单一的事情就毁掉了。"上述引用王立群教授的话共勉。
学习方法
技术很多,尤其是对于小白来讲,很难,很多,很容易劝退,但是,只要坚持,就有不小的收获,坚持就是胜利兄弟们。
学习技术时,一定一定,千万千万要做笔记,从开始学习时就做笔记,不要用纸质的做了,学会用电脑做笔记,画图等。CSDN就是一个不错的记笔记的平台,首要的是要做笔记给自己日后复习看,其次是日后面试官看。学习的时候一定要有产出,这样学起来不会焦虑,并且日后方便复习。有些知识当场听觉得自己会了,而且会的很彻底,想着不做笔记了,赶进度吧,过了一个月发现之前学的一点印象没了,所以,学习时一定要稳扎稳打,把当前技术听懂听会听透,一遍不行两遍,两遍不行三遍,然后好好做一下笔记,排版不要求那么美观,但起码条理清晰,总结排版的过程也是学习复习的过程,听课+做笔记+做习题+日后复习+日后用到或者想到二次复习,这样一个知识才算学会了,当然这样的过程是对普通人来说的,一些天才可能一遍就OK?学习时不要贪图进度,慢就是快,快就是慢。不管是什么方面的经验,大家一定要听老人言。(我的文章后期都是针对一些遇到的问题,搜索AI直接贴了答案,建议大家有时间,自己总结一下再写文章)。

其次,把练习代码push到Gitee和Github。一是方便后面看代码复习,二是有不错的提交记录很加分,如果有实力的还可以去开源项目提PR,更加分。此外,学有余力的可以搞一个开源项目,有star更更加分,前提是把主要技术学透,在精不在多。

技术和岗位
说到这里,我谈一下对技术和岗位的认识。
目前IT岗大致分为:嵌入式,后端,客户端,前端。
C++后端我按重要程度依次列一下需要掌握的技术:
- C/C++:面向对象(封装、继承、多态)、泛型编程(模板、STL 容器 / 算法)、内存管理、异常处理、性能优化、核心语法(C++11、14、17、20)
- 算法:双指针,滑动窗口,二分,前缀和,模拟,分治,链表,哈希表,字符串,栈,队列,优先级队列,DFS/BFS(FloodFill,最短路,多源 BFS,拓扑排序),递归,回溯与剪枝,记忆化搜索,动态规划(路径问题,多状态,子数组,子序列,回文串,二维dp,01 背包,完全背包)、贪心,LRU/LFU,海量数据去重,TopK 。
- 数据结构:数组 链表 栈 队列 哈希表 二叉树 二叉搜索树 AVL树 红黑树 B/B+树 堆 跳表 图 位图 布隆过滤器
- 操作系统:Linux指令;进程 / 线程 / 协程【进程创建等待替换调度通信、信号处理、线程同步(互斥锁 mutex、条件变量 condition_variable、信号量、原子操作 atomic)、死锁检测与避免】;内存管理【虚拟内存、页表、内存映射(mmap)、内存池设计】;文件管理【文件描述符,文件系统,软硬链接,重定向】;I/O 模型:同步 / 异步 I/O、阻塞 / 非阻塞 I/O,理解 select/poll/epoll等 I/O 多路复用机制。
- 计算机网络:协议栈【TCP/IP 协议族(IP、TCP、UDP、HTTP各版本、HTTPS、DNS),理解 TCP 三次握手 / 四次挥手、拥塞控制、滑动窗口、粘包 / 拆包问题,基于UDP的QUIC】;网络编程【基于 socket 的 C++ 网络编程,掌握 TCP 服务器 / 客户端实现,了解 UDP 适用场景,熟悉 libevent/libuv/muduo 等网络库】;服务治理【负载均衡(轮询、一致性哈希)、超时重试、限流、熔断(如 Sentinel 思想)、HTTPS 加密原理(TLS/SSL)】;RPC。
- 关系型数据库:MySQL,索引(B + 树)、事务(ACID)、隔离级别、锁机制(行锁 / 表锁),SQL 优化、分库分表。
- 非关系型数据库:Redis(缓存、数据结构、持久化 RDB/AOF、主从复制、哨兵、集群),MongoDB(文档存储)、Elasticsearch(搜索引擎)。「我现在还不了解MongoDB和Elasticsearch,但是面试被问过」
- 消息队列: Kafka、RabbitMQ、RocketMQ 的使用场景(异步通信、削峰填谷、解耦),消息可靠性、重复消费、顺序性
- 分布式:分布式一致性协议(Paxos、Raft)、分布式锁(Redis/ZooKeeper)、HDFS
- Docker:仓库,镜像,容器,存储卷,网络,编排
- ProtoBuf/JSON:序列化与反序列化,数据类型。
- 工具:Git,Cmake/Bazel,GDB,Vim
- 工程:设计模式,编码规范,线上问题定位【内存泄漏、CPU 飙高、死锁、网络超时】;性能调优【系统瓶颈识别(CPU / 内存 / IO / 网络),通过指标(QPS、延迟、吞吐量)优化服务】。业务理解与沟通【结合业务场景设计技术方案,平衡技术选型与业务需求,跨团队协作(与产品、运维、前端等沟通),清晰表达技术方案和问题】。
三、实习和秋招
投递和面试
这里提供投递表格模板,当然可以做个参考自己做一个投递记录表,主要记录:投了哪些,简历状态,笔试状态,面试状态。做好投递记录!!!

没有面试时,先面小厂,锻炼表达能力。眼睛直视屏幕,分点阐述,由浅入深,逻辑清晰,有理有据,可以自己录视频练习。做好面试复盘,把面试时不会的问题,下来查一下,自己总结一下。对于一个问题比较好的回答:为什么要有它?是什么?底层原理是什么?有什么应用场景?技术对比,平常学习时就可以想这个知识面试官可能会怎么问,我要怎么答。
实习和秋招
实习部分具体可看上述文章。简单来讲,学历不行的先用boss投小厂,有了实习之后再用boss+官网投递中大厂,之后暑期转正实习就投递大厂。今年秋招开的特别早,所以兄弟们,大一就开始准备是最好的,踏进大学门的那一刻,如果想就业学历还不行,就要开始了!而且,一些岗位秋招是不开的,所以暑期转正实习,一定要,尽量要,去一个好的岗位,实习转正进大厂的难度要远远小于秋招进大厂的难度,所以,大三下学期的结束时间该是6月份,在大三下学期之前,至少要有两段实习,最好有一段大厂实习,并且要有足够扎实的八股和算法实力,这样,机会来了才能抓得住,学历差的能遇到的机会很少,一旦遇到,得抓住,那么就需要在这之前有足够充分的准备和实力,机会来了,要能接得住。
其次要注意,一般在暑期实习期间,在转正答辩前,秋招可能就开始了,特别要注意不要allin转正!!!不然转正失败的后果难以想象。秋招前一般会有提前批,提前批一般是学历好的去投,如果这时候准备的比较好,有丰富的实习经历,双非本也是可以冲一下的,但如果不太自信,而且有些公司提前批挂了秋招没机会了!这个就考虑不要投提前批。今年也许是大厂想抢人?秋招开的很早,有点措不及防。我们能做的就是在还有时间学习知识的时候,抓紧学吧,真到战场上,刀光剑影可不管你学艺精不精,人家朝着脑门就刺过来了,接不接得住,就看之前学习的成果了。
实习的重要性上述已讲过。实习期间,不要忘记对新知识的持续学习,上班很累,但是要注意不要被麻木,一定要保持学习新知识。谈一下转正,如上述所说,转正是比较容易进大厂的,但是如何让导师和评委认可你?一般来讲,转正是日常为主,答辩为辅。日常工作时,遇到不会的,先自己思考,搜索资料,真不行了再问别人,锻炼自己独立解决问题的能力。一套完整的开发流程包括:理解需求 方案设计和技术选型 和导师讨论方案可行性 开发 压测 联调/测试 部署上线。这个流程中会暴露各种各样的问题,一定要自己先独立解决,导师一般偏好可以自己思考,可以独立解决问题的实习生。想转正的第一步,让mentor认可你的工作能力。
秋招:有笔试的公司的笔试很难,是近年变难了还是我太乐色?有些题目一大串看都不看不懂更别说敲代码了,算法的重要性我在实习的文章里说的很清楚了,重在平常,力扣的难度只是面试时的难度,笔试的难度大概是牛客竞赛题目的难度,一定要练。秋招考察时,一般分为这几部分,算法,实习,项目,八股。而算法就占了一半,实习+项目+八股加起来才占另一半,算法重要性不言而喻。
面试时注意眼睛要直视屏幕,不然你没有作弊,面试官可能会认为你作弊,大大减分。我知道如今笔试面试有很多人作弊,但是还是平常把技术学扎实了吧,一旦有了投机取巧的想法,技术水平难以提升,即便作弊通过了考查,参加工作后什么都不会,我想也是不行的。
最后,总结一下,提前准备,练好技术,积极投递,提前实习,心态端正,剑指Offer!希望大家都做一个有想法的人。