为期一个多月的春招旅程终于告一段落了,春招过程中牛客也带给了我很大的帮助,今天写一个经验贴讲下自己从去年10月放弃考研,转Java开发备战春招,到如今如愿拿到offer的学习历程。
后来又很多人又私聊我问了一些问题,我尽可能的补上

个人背景

  • 某末流985国贸专业本科
  • 大学前三年除了计算机二级考了Python外,没接触过编程(随便吐槽下Python是我们专业选修,而且不选很难修够分,不知道是哪个神仙老师安排的🤣)
  • 去年从6月起复习考研,到10月中旬下定决定转程序员(一入此门深似海🤣)
  • 春招从3月起,主要使用Java的公司面过的都收到offer了

面试经历

  • 华为一面挂(只问了两个算法,一个中等秒做,一个是困难变种,遇到过的最难算法,目前还是不会🤣)
  • 腾讯二面挂(也只被问了两个问题,以前的面经中有,这两次面试沉重打击了我的信心🤣)
  • 字节二面挂(总共面过5次,10个算法做了9个还是最多二面,可能就是无缘吧🤣)
  • 跟谁学offer
  • 美团offer
  • 招银offer
  • 小米offer
  • 网易offer

简历篇

我第一次用的简历是淘宝上找人做的,很花哨,但后来经过在牛客网上找的大佬指点,才知道其实程序员的简历越简洁越好。我强烈推荐《超级简历》这个网站,里面制作程序员简历很方便
因为是非科班,能写的东西很少,没有相关奖项,没有比赛,甚至可能像我实习经历也非常水,那么只能在项目上多做文章了。
我是用了两个项目
  • 一个是分布式的秒杀系统,自己部署在了租的阿里云服务器上,这个项目把传统CRUD的一套技术栈都覆盖了,而且因为可以实际上线,可以学到很多东西。
  • 另一个是基于BIO、NIO、AIO实现的多人聊天室,很简洁,用命令行运行的,主要是为了学习IO,尤其是IO多路复用的知识,redis和ngnix中都用到了NIO,能把这些搞清楚面试会很加分。
这些项目都是在某课网上找的,大家应该可以自己查得到,非科班不像科班渠道很多,要找靠谱的项目真的很难,这也是我花了很多时间找到了两个对于面试很有帮助的项目。我觉得项目不只是要在简历上看起来比较厉害,能过HR法眼,还最好能尽可能多的涉及平常面试的考点,在项目中学的知识一般比较好讲,因为自己亲身经历过,所以最好找一些实用的项目。非科班选手真的要多利用网上的资源来学习,不然真的很难有实际经验。还有就是项目最好要把使用的原理写清楚,比如如果项目中用到了缓存,那么最好能写清楚为什么用缓存,用了之后性能有多大提升之类的。


计算机基础

  • 《数据结构与算法》这本书算是数据结构的入门,非科班第一遍看可能有些晦涩难懂,可以先看一遍中国大学慕课网上的课再看书会好很多
  • 《操作系统》除了课本外也推荐看网课,网课讲解的比较清楚
  • 《计算机网络》除了书和网课外可以看看极客时间的《趣谈网络协议》,这个课程把很多基础的网络知识讲解的很形象
  • linux基本的命令可以看《鸟叔的linux私房菜》,还有极客时间的《Linux实战技能100讲
以上内容虽然是计算机基础,但建议放在学习过程的最后看,因为我觉得非科班在0基础的情况下,一般既没有兴趣,也很难看懂基础知识,而且在学习过程中也不怎么用得上,不如在对编程有所了解,产生兴趣后再来学基础知识。

Java相关书籍

  • 《Java核心技术-卷一》Java入门书籍,刚开始看可能很多概念看不懂,我觉得没必要深究,接着看下去,以后再来查漏补缺最好。
  • 《深入理解Java虚拟机》JVM几乎是必考内容,所以这本书一定要看仔细,尤其是JVM内存结构和垃圾回收的部分,最后还有一部分并发编程的讲解也非常清晰易懂。中间字节码文件结构和参数调优的部分我觉得不用细看,因为没有实际使用经验很难看懂,而且面试过程中也几乎不会被问到。不过常用的参数比如Xms、Xmx这些还是最好有所了解。
  • 《Java并发编程实战》并发编程也是Java常考点,最好能用一本书系统的学习,这本书就把Java并发编程知识讲解的很透彻。不过我建议反着看这本书,比如Java内存模型这种对于volatile关键字以及CAS等为基础的内容居然被这本书放在最后一章🤣,我第一次看书正着看,被前面章节中诸如发布泄露、委托失效等概念搞得头很晕。但第二次反着看这本书就觉得顺序对多了🤣。某课网上也有讲java并发编程的课程,我觉得还是比较有帮助。
  • 《Java EE互联网轻量级框架整合开发》这本书结合了springMVC、MyBatis、Redis的内容,非常适合用于进阶知识的学习,很多框架方面的书通篇贴代码,也没有细致讲解很多原理。这本书算是我看过的框架类书中最好的一本了。不过建议框架类的书也是放在最后再看。
  • 《高性能MySQL》前六章,这本书的前六章基本涵盖了一般面试中会问到的数据库知识,尤其是索引那部分。

常见面试考点

以下是我在面试过程中常被问到的知识点以及部分答案,有错的地方希望各位大佬指正🤣
  • String在new和直接赋值时的区别:new是在堆上新建一个对象,直接赋值时指向堆的字符串常量池中(JDK1.7之前这个常量池在方法区中,1.7后被移到堆里,因为JDK正逐渐减少方法区的内存)
  • hashmap是否线程安全,有什么安全的hashmap?:不安全,因为在多线程同时put时或者在扩容时Put都会有线程安全问题。安全可以使用hashtable、Collections.synchronizedMap、ConcurrentHashMap这三类。但前两类都是直接在方法标签上加了synch