非科班半年转Java开发经验贴
解题思路
为期一个多月的春招旅程终于告一段落了,春招过程中牛客也带给了我很大的帮助,今天写一个经验贴讲下自己从去年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这三类。但前两类都是直接在方法标签上加了synchronized,所以效率很低。而ConcurrentHashMap效率很好,在1.7中,ConcurrentHashMap是用segment数组为每个格子加锁来保证安全性。在1.8中ConcurrentHashMap和hashmap的结构完全一样,但更改了put方法。在计算了哈希值和索引后,先判断索引位置是否正在扩容,如果正在扩容就调用一个协助扩容的函数,如果没扩容再判断是否为空,为空则用CAS的方式放入,不为空则用synchronized锁住格子,判断为链表还是红黑树,分别调用对应方式放入。最后再判断一次冲突长度,大于8则转化为红黑树。 volatile作用:保证可见性和顺序性。Java把处理器的多级缓存抽象为JMM,即线程私有的工作内存和线程公有的主内存,每个线程从主内存拷贝所需数据到自己的工作内存。volatile的作用就是当线程修改被volatile修饰的变量时,要立即写入到主内存,当线程读取被volatile修饰的变量时,要立即到主内存中去读取,保证了可见性。禁止指令重排来保证顺序性。 ArrayList和LinkedList的区别:一个是基于动态数组实现的,一个是基于链表实现的。动态数组随机索引的特点,读和改快,增删慢,链表增删快,读慢。 手写单例模式:双重锁写法、静态内部类写法、枚举类写法最好都会,至少要双重锁,最常考。 类加载的过程:加载-验证-准备-解析-初始化,这几个步骤每个都做了什么最好要知道 双亲委派机制:启动类加载器-扩展类加载器-应用类加载器-自定义类加载器的顺序,自己写一个java.lang.String会不会被加载?什么时期报错。 三次握手为什么不是两次? time_wait过多怎么办? 进程通讯的方式 IOC和AOP的概念和使用场景 synchronize和lock的区别,lock接口比synchronize多的3个特性:公平锁、多条件、限时等待的作用和场合,都是可重入锁,可重入锁的原理,为什么默认是非公平锁。 AQS和CAS的原理最好能会 流量控制和拥塞控制的原理和作用 两种垃圾判断方式,引用计数法和可达性分析算法的原理和优缺点 两种垃圾回收算法各自的优缺点和6种垃圾回收器的各自特点,G1的特点 线程池的几个参数作用,3种工作队列各自的特点 b+树特点和优点 聚集索引和非聚集索引的区别 innodb和myisam的区别 mysql的一二级缓存 redis5种数据结构各自特点和实现原理、适用场合 面试考点很多,随便举了一些,与其撞知识点,不如系统的看书来增长知识,一劳永逸,不过面试前看相关面经还是挺有用的 ????。 算法 我觉得这就是我自学的路上最难的部分了,其他都是记忆性的知识点,算法要求就要高多了,我是通过刷题的方式学习的。力扣300多题,剑指两遍。剑指考的频率很高,建议熟练。力扣我觉得其实大概刷200题然后把刷过的再熟练几遍比一直往前刷要有意义一些。 其实算法要是已经入门的话只是刷题就能有很大提升,但非科班入门就比较困难,尤其是像我这种经济学专业的,课程中没有数据结构相关的课程,自学算法犹如看天书,但算法很多时候决定了面试成败。某课网上有个bobo老师,他有很多很经典而且简单易懂的算法课程,对我算法入门的提升很大,里面详细讲了常用数据结构与常考算法类型,很适合入门。还是那句话,非科班选手真的要善用网上的资源,不然比起科班而言差距太大了。 面试技巧 整个春招面试了无数次,一开始时的面一个挂一个,到后面面一个过一个。我觉得面试很重要的一环就是心态,一定要自信,如果自己都不相信自己,面试官怎么会信任你呢。而且没有自信很容易把会的没讲清楚,不会的不敢尝试,紧张和拘束都会让自己不能发挥到应有的水平。面试是一个展示自己的时间,有机会就要展示自己,尽可能把面试官往自己熟悉的方向引,比如介绍项目时,有什么自己特别熟悉的原理就可以着重讲一下,面试官要是后来问到就可以侃侃而谈,自我介绍时也可以多讲下自己看过的书,让面试官有问的方向。 碎碎念 5月中旬了,虽然比不上很多大佬,但一路走来,没想到自己还是拿了几个offer,遗憾的是今年春招有些大厂不招20届了,都怪自己一直没能下定决心,错过了秋招吧 ????。去年三月,大家都在复习考研,我在自学前端,试图找一份实习,但周围完全没人学计算机,自己一个人像无头苍蝇一样不知所措,错过了很多机会,没能找到实习,最后心灰意冷的在大家都在秋招时复习考研????。我现在都还记得第一次面试的经历,面试官问我JS有哪些数据结构,我说我不知道什么是数据结构????,就这样面试官还耐心问了我半个小时,最后告诉我最好看下《JS高级程序与设计》,我那时才知道自己差的有多远。也是那时知道的牛客网,开始渐渐接触到了这个行业。接着一个月的疯狂复习后,最后一个面试是腾讯,面试官问了我半个小时JS基础和网络协议,我因为面试次数多,都已经背下来了,接着最后问我了不了解nodejs多线程,我反问面试官一个经典的面试问题:什么是线程,春招就此落幕????。 到了10月份,本身对经济学就没兴趣,混了四年碌碌无为的我,最后还是不想考研,跟我爸说了后,没想到他居然出乎意料的平静,而且告诉我去做我想做的,他可以理解。真的很感谢父母对我的支持,我爸就是国企的HR,他告诉我像我这样错过了秋招,而且还是非科班的人想就业非常困难,至少国企是肯定不会招的,但我既然这么喜欢,又有信心,那还是做自己想做的好,好好准备春招。 我就此开始了我的春招准备,没有继续学前端,因为想多补下算法,能更贴近科班学生的水平,于是学了一般而言要求更高的后端,java。10月、11月、12月接下来的这三个月对我来说真的是难忘的煎熬。周围人都在专心复习考研,早上早起去图书馆,很晚才回来,而我一个人坐在寝室里,不知道该学什么,也不知道自己到底是个什么水平,同龄的科班生是什么水平,每天学习的东西也没法和周围人分享或者讨论,因为周围人都在本专业考研。我一度很怀疑自己是不是脑瘫,考研第一轮都要复习完了又来准备跨专业就业,秋招那么好的就业机会又在复习考研????。但我知道自己已经没退路了,自己放弃考研了,就只剩春招这一个机会了。总归运气还算好,找到了一个实习,虽然很水,招的是java开发,我基本全在写前端,还要自学angular,后台一个返回写10分钟,前端逻辑写半天????。不过这个实习给了我很大自信,让我第一次真的参与到了实际开发中来,我也很珍惜机会,领导第一次的任务让我一周写完,我一天就写完了,然后就被领导无情压榨。。。。我第一周后任务量就跟正式员工一样了,而且第二周就让我带一个新来的实习生????,我自己也在实习啊。。。这也让我后来学会了划水????,毕竟还要准备春招,而且领导给的任务实在是太重了,我写完了都不敢给领导说,不然又是一个新任务,根本停不下来????。期间我还在投简历,几次面试经历也让我知道了自己缺什么,然后一边实习划水(没办法,领导真的给的任务太多了,不划水被压榨到死),一边准备春招,当时我一周就要看完一本书,实习的工位上摆满了书。 后来就是放假回家了,每天在家做项目,刷算法,为春招做准备。到2,3月份,开始大量投简历,一开始面的都是小公司。当时很没有自信,因为是闭门造车,不知道正常应届生应该有什么水平,每次面试都非常紧张,面了一个月,一个都没过????。不过每次面试被考到的问题我都会记录下来,然后查清楚,这为后来的面试提供了很大帮助。到了2月底,春招终于全面启动,基本每天都有HR约面试或者收到笔试邮件,一开始的笔试除了华为都没过。。。不过也让我算法提升了不少,知道笔试这么难后,我一个月刷了100多道的力扣还有剑指,后来面试基本上没被算法考到过了。然后腾讯和华为的接连失利让我本来就没有的信心更加崩溃,一度怀疑自己春招是不是找不到工作了。 但到了3月中旬,可能终于是水到渠成吧,美团三面时突然收到跟谁学的OC,然后下午就收到美团HR面了,紧接着面一个过一个(除了字节,面试真的玄学)。有了自信后,整个人的面试状态就不一样了,没那么紧张和拘束了,会的问题能和面试官讲清楚,不再是磕磕巴巴的了,不会的也能稍微讲下自己会的部分。这也让我意识到了面试时自信的重要性,面试时真的要有自信,不然很有可能会因为紧张或者拘束而把会的没表示清楚,不会的直接放弃,那就真的没机会了。 说了这么多,回想起自己第一次看到代码的兴奋,第一次读完一本技术方面书的成就感,第一次收到OC的喜悦,再回想起自己在去年一个人踽踽独行时的落寞和孤独,只觉得这半年来如梦如幻,突然一切就结束了,我从一名经济学的本科生,就成为一名程序员了。这是自己喜欢的行业,自己奋斗的结果,祝愿大家能拿到心仪的Offer。 更多模拟面试 查看更多 > 模拟面试第 4 名 网易 模拟面试 有人41分钟前测试并获得了面试报告 模拟面试第 17 名 中国农业银行 模拟面试 有人1小时前测试并获得了面试报告 (123) (899) 分享 举报 精华采集 浏览41313


讨论区

23424




werwrwer




sdfsdfsdfsdfs




srertertert




werwerwer




水电费水电费说




多舒服水电费




sad舒服舒服水电费




ertertert




dfgdfgdfg




34rwerwerw




ertertertert




2342424




werwerwer




ewrwerwer




活活这个题吧




ddddd




111



题目列表

扫描二维码
请添加深了个蓝微信
请备注【智商测验题库】
编辑题目
题干
解题思路
设置题目所属题包

- 二级分类专属题包
- 测试题包1
- 网抑云
- 牛客网爬的数据2
- nkw爬取数据
请选择题目所属岗位(请最多选择6个)
请选择题目所属公司

- 测试公司
- 计算机
- test专用
- 大疆无人机
- 哔哩哔哩
- 百度智能
- 字节跳动
- 英伽教育
- 北京校苑
- 环球赛乐
- 深蓝前沿科技
解题思路解锁方式

您还有0次解锁机会,是否解锁本题思路?

