本文主要是介绍非科班转行计算机开发岗,零基础短时间内如何进入BAT这类大厂,深度总结篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、写在前面的一些话
现在是2021年6月7日 11:14:54,这一篇我可能会写的很长,话语间可能也会有一些啰嗦,但这篇真的是我心底想说也想做的,请大家一定耐心看完,我自己走过了这个阶段,我深刻的理解那种感觉:你热爱这个行业,但是它和你现在的专业不匹配,你的时间又不多了,你甚至把它当成你生命的救赎,但是好像这一切离你很远,迷茫痛苦交杂之际,你渴望找到一些同类或者前辈的一些话,让你知道一切都是可能的。这可能是我最初的心情吧,往下看吧哈哈哈。
二、个人情况以及学历等因素分析
先说说个人整体介绍:我本硕都是985力学专业(看到985有一部分同学可能会说学历优势,别急,往下看就好),我是研一期间才接触到计算机这个东西,当时是因为研究生办公室有一本C语言的书,无聊之际翻了翻,然后编了代码,就这样喜欢上了。
这里我得先说一下自己大概是什么样的人,为什么说这方面呢,因为每个人的性格以及学习方式是不一样的,我为什么会有后面的经历,和我自身性格等因素分不开的。先说优点:我应该是比较聪明的(我真的很讨厌用聪明这个词,智力是毒药),我本科成绩是中下游水准,但是我学的各种数学课程都是班级前列,这也不是我认真听课了,我作业从不交,课也最多上一半,典型的期末努力党,说这个是为了表明我是那种在周围人看来比较聪明的;我是属于那种三分钟热度的,就是很难去坚持一件事,很容易三天打鱼两天晒网;我闲杂爱好非常之多,小说、游戏等各种样样痴迷(绝对不是普通境界,玩疯的那种,一天叫两个外卖,从早玩到半夜,玩累了就看小说,一只眼看累了,遮住这只用另一只的那种);
研一期间我只学了C语言,学的东西也很基础,就是很基础的语法,把郝斌老师的C语言视频教程看了一遍,觉得指针也没那么难,甚至会用C语言写一个单链表了,成就感爆炸(狗头),整个研一的学习经历是断断续续的,知道研二开始的那个暑假我去了一家单位实习(很水的那种),去了才知道部门用Java语言,我那时候只是听说过这么语言,连helloworld都没写过,于是整个实习期间我都是拿着工资上自习,两个月之后我做了次鼻息肉手术,手术期间没有学习导致Java学习丢失了进度,然后颓废了几个月,之后又是断断续续的学习,等到研二下学期开始(大概是疫情最严重那会),要开始找实习了,我记得很深刻,那天是3月18号,我关注的阿里巴巴招聘公众号突然说开始实习生招聘了,那时的我已经颓废了整整一个月,每天在家不是玩就是玩,醉生梦死,所以那时我的技术功底非常的差,Java只是学了点皮毛,会基本语法和控制语句,并发问题皮毛(只是知道几种新建线程的方式。。。),算法零基础(力扣零答题),对基本的数据结构有了解,比如数组和链表,想想吧,那时候已经开始招聘实习生了,而且我听说实习经历对未来找工作至关重要,所以当时我的心里一惊,整个人瞬间,真的是瞬间就惊醒了,我立刻意识到我可能进不去好公司了(做白日梦吗那不是),我立刻非常冷静的在家里认真想了想,我已经没有时间思考能不能找到工作,我也没有时间考虑我过去有多么荒唐,我也没有时间考虑找不到工作会有多么绝望等等一系列问题,我的脑子里只知道我要学习学习再学习,于是我制订了疯狂的学习计划,那应该是我二十多年最努力也是最心无旁骛的两个月了,后面我会说复习什么内容,在此之前,我需要给大家打针强心剂,我会对学历、学习时间、基础等方面逐个分析,力求让你明白进入大厂BAT不是不可能,甚至不是多么难的事情。
非科班因素
本篇题目说是非科班,我本硕都是力学专业,本科也没有学过任何计算机相关课程(我们之前一级还学过C语言,到我们那里就取消了),而且计算机学院和我们是两个校区,也就是整个本硕我连科班人身上的味道都没闻到。不可否认的是,在我进入真正的互联网公司之前,我都是很忐忑的,比如我会想面试官会不会歧视啊,会不会觉得我不够专业啊等等问题,我进入携程实习之后,见面会上大家自我介绍,我惊讶的发现部门11个人只有一个本科是计算机专业,其他要么是考研转的,要么是和我一样完全自学找的,更离谱的一个本硕学的是植物养护专业,哈哈哈,我以为兽医够离谱了。。。我跟他聊的很开心,唉,同是天涯沦落人,都知道那份苦哈哈哈哈,所以如果你是非科班,真的真的不要怕,不要慌,多的多的是你这样的情况。
学历因素
前面说了我是985,这一点我不能从自身出发来说这个问题,我说说我找工作期间认识的朋友和同事吧。我认识一个同学,他是普通一本,他研一就定好了Java开发方向,本硕都是能动专业,实习刚开始,我啥也不会,他的算法和Java功底我已经看不到头了,最终他去了阿里的淘宝,年薪比我高;我在阿里认识一个哥们,他是专科,在准备成人本科,他年薪比我高5万,比我大一岁。怎么说呢,其实我不想通过举例说明这一点的,我在这篇文末也会说一点我对学历以及大学的看法,有句话很好:王侯将相宁有种乎,不是学历高的人就牛逼,千万千万别这么想。
时间问题
这一点应该是我独有的,我认真学习的时间严格来说只有两个月,是因为我确实确实没有认真对待,如果你是非科班,如果你时间相对充裕,一定一定要提前学习,这一点非常非常重要,校招牛逼的一点就是你多学一分薪资就会涨十分,这在社招是反过来的,当然如果时间不多了,也不一定完全没有机会,努力了就不后悔,而且找工作这个事情很玄学,真的很可能面试时候正好问到你学过的东西。
三、最应该先学什么(Java开发岗学习路线)
这部分内容我打算就学习内容说一下,针对的是短时间内最应该付出时间的部分,也是我觉得面试过程中问的比较多的,可能彼此之间面试内容不一样,如果你已经技术成长上走了很长的路,那可以跳过这一部分。
算法
最最最最核心的一定是算法,必须是算法,而且一定要越早学习越好,怎么学呢,其实网上也有很多帖子说这个,我建议的是,在你掌握一门语言的基本数据类型和控制语句之后,就开始写算法,算法思想是和语言特性没太大关系的,与其一直纠结语言本身,一直重复记忆一些基础语法,不如直接上手算法,上手算法之前先学习数据结构,最起码要把数组、链表、树这几种常见的数据结构整明白,数据结构我建议可以看《大话数据结构》这本书,讲的比较直白,但是建议看最新版,旧版一堆问题,看书时千万不要钻到底,比如把图、把链表的各种变体、树的各种变体都研究透了,没那时间,这也不是主要的(一定一定本着一个原则,先学最基本的、频率最高的,这也是本篇第三部分的一个基调),了解了基本的数据结构概念后,先不要直接自己上手leetcode等平台,我个人建议先看视频,b站找个讲面试算法专题的(比如左神、九章之类的),看视频有一个好处就是可以最快速的帮你建立信心,也最快的帮你了解这个领域,如果你直接上手leetcode,你可能会怀疑人生,看着评论区各位大佬的骚操作,怀疑到自己智商有问题(尤其是零基础算法的同学),然后看视频的过程中往往听懂算法本身不是什么难度,难得是自己敲出来(尤其是对于不熟悉语言语法的同学),这个过程中一定要忍住,有视频老师带着,加上自己仔细琢磨,可以很快找到那么一点感觉,看完一个视频系列并且很熟悉每一道题的解答后;接下来上leetcode,先要熟悉leetcode,它上面会有各类算法的出现频率,做算法一定要分类做,而且一定要先做简单难度的,不会做也没关系,我建议前期临摹简单算法为主,之后再慢慢看中等以上难度。总结一下吧,算法这一小节我不是具体教你怎么做算法题,我是把我觉得应该学习算法的顺序分享给你,我觉得这样可以相对平滑的让你进入算法的门,具体怎么做算法题,网上多的是帖子。
高并发
所谓面试,最核心的一点就是你有比其他人强的地方,不然你即使int、double、float写的再快又如何呢,所以我在准备的时候着重准备了高并发这一块,我把Java的JUC部门常见的源码(ThreadLocal、ConcurrentHashMap、线程池、AQS、ReentrantLock、同步队列、栅栏等),对这些类的源码做到了每一行都读懂,并自己做了笔记定期复习,我敢说这部分在面试官那里很加分,因为懂个大概的人很多,但是我把每个类的常见方法的具体实现逻辑一步步说出来的很少吧,不说大而空的架构思想,我只说细到源码每一行实现的内容,所以这算是我的核心竞争力了,当然这部分我也是跟着老师学的(这里必须说我是很幸运的,老师那会刚刚开始创业哈哈哈哈,具体可以关注文末公众号加我好友咨询),在学完这部分内容后,其实在Java语言层面我已经非常有底气了(单论语言本身),简历上甚至敢写精通Java核心语法了哈哈哈,虽然有点飘,但真的等你学完JUC这个模块,会真的很自信,不是那种背书的没底气,因为你每一行源码都懂,自信源于实力。高并发当然不止JUC了,但还是那句话,这是我高并发的入门之路,我因为这个能够平滑的进入这个门槛。
项目
项目这一块其实我没什么发言权的,因为我确实没什么项目,我是照着b站上一个视频随便写的一个项目,仅作为充满简历内容,前面说的那个能动专业的同学就很秀了,他同样也没校园项目,但是他从github上找了热门的秒杀等项目,熟悉其中核心代码,前期他的简历项目内容是这样,后来腾讯实习完之后,项目更秀了,由于他实习那会跟着大佬写过JVM,然后项目第一条是手写JVM,光听名字吓死人,第二条是手写简易Spring容器,然后巴拉巴拉介绍。项目是要有的,但是如果实在没什么项目,那就找个github上项目copy一下,熟悉核心代码,自我介绍的时候着重强调自己的基础多么多好,绕过项目。
Mysql数据库
数据库绝对是高频面试,一定要认真看,网上非常多教程。我这里着重说的一点就是一定不要花太多时间研究mysql语句怎么写,了解大概结构就行了,面试我一次没被问到过,把经历放在mysql锁、mvcc、事务、索引底层数据结构这些内容上。(关于这部分我后面会整理成一个系列)
其他
Java开发当然远不止上面这些,比如Spring的基本使用你是要会的,难一点的循环依赖和三级缓存也是要会的,关于Spring,我觉得要掌握的地步就是首先要熟悉,不要硬背,这一块一定不要背书背知识点,也不要自己建Spring项目,没那时间,而且啥也不熟悉的话很难下手,还是那句话,看视频,先看Spring教程基础视频,照着敲一遍之后,对注解什么的认个脸熟就可以了,然后找一个项目视频,照着敲,遇到什么知识点不会了,回去看上一步的Spring教程基础视频,这样学起来就快很多了。
中间件是要学的,但是中间件太多了,不要全学,而且肯定也学不完,缓存中间件比如redis的跳表这是高频啊,一定要会;
微服务和分布式如果学有余力也要学习(这里可能有同学会说当今微服务是热点,怎么可能优先级这么低,但是说实话我当时放弃了这一点,面试被问到我直接说不太了解,因为我真的没太多时间学习这些了)。
Linux我面试过程中没问过,我不太了解其他人的情况,但频率肯定很低,所以如果时间不太多,别花太多时间浪费在linux上。
还有很多杂七杂八的技术,总之一句话,在学完最应该学的内容之前,不要碰新技术(不可否认新技术最容易产生虚假的成就感,但那些写不在简历上,对找工作有害无利)。
四、学习过程常见的问题
这部分我就我个人学习过程中遇到的一些问题做一个总结,这部分内容也和我最开始说的个人性格因素有很大关系。
成就感太多导致停滞不前
这个问题我觉得是计算机学习所独有的,成就感太容易获得了,我举几个例子,刚开始学C语言,要下载IDE工具吧,可能要设置环境变量吧,可能要打开cmd黑窗口吧,等等操作下来,全是你以前没有接触过得,你甚至觉得有点黑客的感觉了。。。,然后再照着教程写一个helloworld,虽然过程中可能会遇到各种莫名其妙的错误,比如main写成mian了,中文逗号了等等奇怪问题,但是没关系,经过你的一番努力,所有bug成功解决,ohmygod(狗头),成就感爆炸了,然后就有点飘了,今天有点学的太多了,明天再学那些int、double、 float这些复杂的变量类型吧,然后就停下来了。再比如你要搭建虚拟机学习linux了,比如你要学习数据结构了,等等等等,总结一下,我觉得计算机学习的特点就是知识点非常多,但每个知识点都很简单,这就导致掌握一个知识点很容易,数量会让你产生错觉,这一点要警惕。
学的越多忘得越快
这个特点其实和前面说的知识点学起来容易但是知识点数量很多的特点是分不开的,尤其是前期,你可能一天学三四十个知识点,可能也有同学会做笔记,但是定时复习笔记的同学就比较少了。其实这个问题应该是技术学习最容易遇到,也很容易崩溃的一点,尤其是当面试时,面试官正好问到你学过的一个知识点,但是你给忘了,那种感觉真的酸爽。
聊聊解决方法,凡是遗忘问题,唯一办法就是重复,区别是怎么重复,先说说我的几个进化阶段,第一阶段,记笔记大法,我用的是有道云笔记,每次网上学习时,遇到一个知识点就截图,顺便写一点感悟,生怕错过任何一个知识点,所以导致我的笔记量极大。这个阶段的一个严重问题就是光是记笔记没用啊,而且是一堆未经你大脑加工的笔记,只会起反作用,让你以为自己会了。第二个阶段,经过前期大量的记录笔记,终于有一天想到复习了,我发现无从下手,因为笔记太多了,他们的类别也太多了,有的是算法,有的是语法特性,有的是中间件,有的是面试专题等等等等,没办法,只能再重新来一遍,对笔记进行归纳整理总结。这个阶段很重要了,因为归纳总结了,真正变成了自己的笔记。第三个阶段,笔记不是为了记笔记记得,它是用来复习的,复习的,复习的,所以一定要定期复习,下面我来说说我目前的学习模式。
学完一个知识点,按照自己的理解记录一份笔记,我问过自己我希望的笔记长什么样子(这是服务自己的,不是服务别人的!!!!,自己要问自己,只有你知道你喜欢什么样的)
我希望的笔记长什么样子?
笔记宗旨:我记录的笔记是为了之后的记忆法服务的。所以笔记核心是容易懂,重点突出,细节也有。
每条笔记的特点:每一条笔记的内容可能比较少,因为我都是为了后期复习,但是尽量归类(这里所谓的每条笔记是指我以前可能一个笔记的题目就是redis,而现在一条笔记的题目是redis跳表,就是尽量做到细化笔记,复习起来也简单)。
目录 :该条笔记的主要内容是什么?(目的是为了复习时候,先脑海里回忆一下关于该条笔记的所有内容)
详细内容:记录关于本主题的细节(包括如何论证,相关知识点等等)
当前复习阶段忘记的内容(下一次注意)、以及当前复习阶段出现的新知识(所谓温故而知新)
上面是我希望的笔记样子,我根据这个建立了我的笔记,我截取了跳表笔记的目录,大概长这样
然后记录了笔记之后,最重要的当然是复习了,笔记记录的再好也不是你脑子的东西,想要永远记住这条笔记,不至于在面试时候尴尬,需要更重要的是复习规划,我是按照艾宾浩斯记忆法复习的(手机有很多类似软件可以完成),大概长这样
有了这个复习计划后,每天只需要抽出一部分时间,跟着目录回顾一边具体知识点内容,如果遇到不会的再仔细琢磨,基本可以做到不会忘记你学过的任何知识点。
这里还要插嘴一句,这样复习笔记的方式虽然快,但是会导致以前你每天学30个知识点,现在可能只能学习15个知识点,看着好像少了,但是你要知道七天之后你学的30个知识点只会记住5个,而这七天内学的所有的15个知识点你都记在心里,要永远关注你脑子里的东西,而不是笔记记录的东西更不是你学懂的东西,因为面试不会让你看笔记不会让你回忆,你要对每个知识点做到肌肉记忆。
五、写在最后
写到这里终于算是完了,其实就跟写日记一样,基本是一气呵成的,因为这些东西在我脑子里已经想了无数遍,我真的很想很想把自己走过的弯路,自己思想上的成长,技术上的成长,更重要的人格的重铸,分享给那些和我一样遇到迷茫,遭遇挫折,但不知道真正的原因出在哪里的人,这篇博客主要是针对技术的,但是我的名字是程序员的哲学人生,我更想分享的是自己的人生,因为我觉得技术只是低维度的东西,只是器术罢了,真正有利于我们重铸自我的是更高维度的哲学,是古老的永不褪色的思想。
不行了,写到这里我又忍不住叨叨了,哈哈哈哈,今天正好是高考嘛,真的想说很多很多话,关于高考,关于大学,关于人生,《守破离》中有句话说:天赋是上天赐予的礼物,更是毒药。我读到这句话的时候深有感触,我被很多人说很聪明,我也慢慢的唯智力论起来,高考完上了大学,大学给了我一记重击,前面我也说过,我简直在糟践自己的精神和身体,更可悲的是我不知道为什么我会这样,为什么我和别人不一样。其实是教育体制问题,大学之前我们几乎经历的所有教育都是知识教育,它永远在给你灌输数学、物理、化学等等器术之道,它让我变成了所谓的好学生所谓的差学生,但我们应该先是人,而后才是职业云云,如何做人呢,做人不是能说会道,不是什么乱七八糟的外在的东西,而是你,你要把所有的聚焦点放在自己身上,你要看看自己,审视自己是不是缺失了某些东西,高考是公平的,一张无法作弊的试卷让我们分出了好学校坏学校,但它不是完全公平的,因为一个人很多很多其他的东西是无法体现在试卷上的,大学就是这个平台,让那些中学时代没有体现的优点展现的淋漓尽致,你可能长得帅,女朋友多,你可能会唱歌,成为大学的风云人物,你可能能说会道,成为学生会部长,等等等等,而那些中学时代的风云人物,那些除了成绩好没什么特点的,再加有一堆性格缺陷,那就是真正的灾难。
。。。写的写的就飘了,但的确是我想说的,可能会有很多人不认同吧,最后的最后,如果你也是非科班,不管校招还是社招,不管你是什么样的人,我希望我们可以一起交流,可以关注一下我的公众号:程序员的哲学人生。我会建立一个非科班的BAT群,期待我们的共同成长。
这篇关于非科班转行计算机开发岗,零基础短时间内如何进入BAT这类大厂,深度总结篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!