非科班的转码学习历程
个人背景:双非本华五硕,本硕均某管理专业,字节美团两段实习,期实习拿了携程、美团、腾讯的offer,最后去了团子实习(转正给了个白菜)。秋招拿了两个B厂的ssp还有一些华为手机厂等各类offer。
作为本科双非加本硕非科班的双重debuff,秋招拿到这些已经纯属运气爆棚,从今年3月暑期开始就一直混迹牛客,也非常感谢各位大佬的面经指导,我也分享一下个人的学习路线以及职业规划供大家参考。
我的学习路线
作为非科班,大部分人首选语言应该是Java,就业面广,网络资源多,八股文全面,这也在一定程度上导致了当前的就业环境越来越卷。其实作为非科班而言,大部分人在转码后都会成为CRUD boy去做业务的而不是os、数据库一类的底层,我选择Java是因为目前大部分公司也一般都用java或者go来写业务,像大部分国企银行也都使用Java,而就我个人互联网面试考察重点业务理解>=基础知识掌握>语言能力,所以语言的还需根据自身未来赛道去选择。
基础知识学习
个人学习时间:半年左右
推荐学习资源:B站大学、力扣
起步篇:
1、Java语言基础:转码准入门槛,可以去B站上找各类知名资源,如尚硅谷、黑马等,基础资源教程大同小异,可以放倍速2倍、3倍,尽快熟悉语言特性,能够会敲会写。
2、数据结构:面试和八股文准入门槛,同样可以去B站大学,或者自己看学校数据结构的书,重点数据结构如链表、树、栈等一定要理解概念,是后续学习的基石。
必备技能篇:
1、Spring框架:CRUD必备技能,事实上我对Spring各类源码学习比较浅,目前也局限于了解部分基础会使用而已,这一类框架的学习建议同样寻找网络资源,可以找一个比较感兴趣的小项目边敲边学(这可能就是实际工作中天天做的事情),同样至少也应当有一个项目去填补去填补一下简历。
2、Mysql:涉及到Spring就肯定离不开数据库,目前主流学习都是Mysql,一方面可以结合自己边敲项目边学习(比如项目涉及到数据库,那就先看一星期的数据库课程,大致了解具体功能之后再继续写项目),另一方面就是专门寻找数据库专门资源。
重点中间件篇:
1、Redis:Redis的学习就看书就行了,学习一下具体使用场景,也是比较容易在项目当中有所涉及,涉及的时候多了解了解
2、消息队列、ES:这一部分在个人项目可能比较有较少的涉及,大家可以在实习当中或者网课资料当中略加学习,消息队列我个人推荐kafka或者rocketmq,可以略作了解。
其他基础必备
计算机网络和操作系统:对于非科班以及应聘通常业务开发类的工作时,面试官对于这两部分考察的内容其实也相对较少,主要就是常见的热门问题,网络部分集中于握手挥手,网络结构,而系统方面则集中于一些进程、线程相关知识。
学习方式
对于我个人而言,怎么学比学什么更加重要,Java内容太多,涉及面太广学习内容与实践脱节总让人觉得浮在空中不知所以,面试却一问三不知,我也只能给大家大致去梳理一下学习路线
Java语言基础和数据结构作为基础非常重要,不会或者印象不够深刻就多看看
1、算法:每天刷刷力扣,培养一下手感,刷hot100题或者常见题目,刷算法不仅仅是要学习解题思路,更多的是加深对于数据结构的认识,也能为背八股文做准备
推荐学习网址:labuladong算法小抄、随想录、某Code题库
2、计网、操作系统:这一部分需要个人多看看书并进行理解了,多看看牛客面经之类的去查漏补缺,这部分我感觉没啥好方法,一般来说单纯做业务开发的话,对这方面考察基本都是那些热点问题
推荐学习网址:xiaolinCoding
3、敲项目吧,边敲边学:推荐B站大学,尚硅谷黑马的项目都可以,在敲项目的过程当中,你会学习到诸如SpringBoot、SpringCloud、Mybatis、Git、Maven等工程知识,小白在敲项目的过程当中,建议遇到了便可以抽几天系统学习一下,然后再继续敲项目。同时,在敲项目的过程当中也多点点源码看一下,比如用到某类数据结构,线程池等,多点点源码学习一下(当然主要看的是常考内容加深印象),如果了解某些比较冷门的有意思的源码实现肯定会是一个大的加分项。
这三步是完全可以并行学习的,通过项目熟悉语言以及需要用到的各种中间件、框架,要学会使用IDE的快捷操作、看源码等,在后续八股学习中也会经常使用到这些,一定有操作能力。
八股学习
强推Guide哥的文章,这篇文章当中涉及到的知识点已经足够全面,对于个人而言完全可以按照他的学习路线来,但是部分内容可能直接学习会摸不着头脑,可以在有需要进行一下系统性学习,再回头看便会豁然开朗
Java语言相关内容:JavaGuide、各类网上公开课等,一方面需要对语言本身了解,另外一方面则是对Java当中一些类的实现熟悉,如ArrayList、ConcurrentHashMap等,也是对数据结构的深入学习。
JUC:有关于Java并发方面,推荐书籍《Java并发编程的艺术》,学习JUC的过程相当于学习Java多线程、数据结构、锁等方面的知识,如线程安全集合的特点、AQS队列等等,顺带复习基础知识。
JVM:Java虚拟机相关内容,主要涉及到垃圾回收等内容,推荐书籍《深入理解Java虚拟机:JVM高级特性与最佳实践》,这本书对我刚学习的时候简直如天书一般,建议多看看网上资料或者看看面经,尽量多百度“为什么xxx”,理解着去记忆。
Mysql:数据库相关内容,主要设计存储结构、日志、隔离级别等等,推荐数据《MySQL技术内幕 InnoDB存储引擎》
Redis:主要有关于Redis的数据结构,持久化等,也是相关类似内容,推荐书籍《Redis设计与实现》
以上内容差不多能覆盖到八股的80~90%左右,对以上内容在八股的考察方面个人认为都遵从一个逻辑->"XXX的功能是什么?、它的功能是怎么设计的?、这样的设计有什么好处? + 可能存在的额外问题扩展",所以在对这些内容学习的时候一定要加强一下自身理解,甚至可以在面试中添加自己对于这些内容的看法,也就避免了背诵忘词的情况。
我在学习上述书籍一般都会先过一遍,有个大致的印象,之后在看大佬的面经或技术文章的时,如果发现某些不会的地方,然后再次翻阅书籍去加深一遍印象,一遍一遍翻书的过程,也就慢慢把所有的都看完了,前期的学习枯燥乏味,会感觉自己只能靠背,量变引起质变,八股背的多了,也会发现很多地方知识点会是如此的相似,八股文考察的是对技术的理解,重点都在于讲清楚某类技术是如何实现的,为什么这么实现?
一些想法
如果一心想去互联网或者私企挣钱的话,实习经历还是比较看重的一个点,还是建议能早出去就早出去,只要过一遍基础知识,常见八股能答上来就可以慢慢去找了,在面试中学习。一般来说年底或者快过年了的时候实习生离职会比较多,在缺人的时候找实习也会相对容易一下
有关求职:就我个人的学习和求职经历来看,运气>>努力和实力,不同的面试官,不同的面试时间都会大大影响面试时候的临场发挥,所以不必气馁,每次面试尽自己所能,剩下的交给天意。
有关定级:其实很多时候面试者之间的差距并没有很大,这种情况下定级or定薪往往是外界因素影响,如竞对offer、面试官眼缘、学历实习经历等,只要能通过面试就要相信自己的能力。
后面的看情况慢慢补充吧
#转码##java学习##求职##offer#