坐标苏州,双非本科,专业环境工程,之前没有任何编程经验,历经一年努力,终于在春招拿到心仪的offer。成功转行JAVA后端工程师。
由于转行时间较晚,2018年4月初正式开始接触编程。在此之前,没有参加过有关计算机的竞赛,也没有计算机的知识,唯一沾边的是会帮别人修电脑。
目前拿到的offer:三七互娱,无锡帆软,上海汉得,cvte(在等结果)以及部分苏州地区的IT公司。
这里简述一下这一年来的学习线路和心得:
4月至4月中旬 学习c语言课本,了解了什么是编程,学会了写简单的c程序。
5月开始学习JAVA,从网上找来培训班视频,学习完了JAVA基础,面向对象,集合,异常,最终能够跟着视频,做出一个飞机大战的项目。
6月开始学习数据结构和算法,刷《算法笔记》的编程题。同时弥补数据结构,看了《大话数据结构》。算法笔记刷了1个月的时间,效果比较差,所有题目看答案,刷过就忘。
7月开始学习JAVA多线程编程和JAVA虚拟机,将《深入学习JAVA虚拟机》看了2-3遍,多线程编程内的基本内容也都完整看过一遍。
7月中旬~8月开始刷leetcode,前后将leetcode中的初级算法和中级算法都完成了一遍(中级算法是实现他人思路)。到了9月上旬,leetcode上实现的算法有150多道。对链表,二叉树,动态规划和回溯算法有了一定的了解。
9月,学习计算机网络,数据库和操作系统(都是非常浅层的学习),根据牛客网上的JAVA面经开始查缺补漏,而我发现:我不知servlet、JDBC、Spring、html、CSS为何物。
由于没有项目经验,我在慕课网上,将SSM实现秒杀商品系统看了2遍以上,写在简历中。
秋招:
9月也是正式开始秋招,前后笔试了许多大厂,笔试题目只能A出一道半。结果非常惨烈的,我没有收到任何一家公司的面试邀请。
整个秋招,我都在牛客网上打酱油。看着别人发的面经,我感概我到底什么时候才能走到面试那一步呢?而且发现,大厂秋招也快要结束了,已经基本没有机会了。 当时心灰意冷,有一段时间,不想学习,每天玩滑板,换一换脑子,放松心情。之后玩滑板脚崴了,整整2个礼拜,呆在宿舍没法动弹,于是重新拾起培训班的视频,开始学习计算机基础,跟着培训班视频,弥补了前端知识,JDBC,JAVA web编程项目,也在实现一些小小的项目。
当时对校招的企业没有上心,但厚着脸皮面试了一个外包公司,面试没多久便拿到了offer,可把我激动坏了,发现自己并没有那么菜。
自信心增强之后,我便开始寻找校招企业。凭借着之前复习的内容,先后拿到了苏州地区的许多offer,各种职位都有:科沃斯的c 开发、其他公司的前端开发、外包公司的Java。
11-12月,面试的过程中,也没有忘记学习,先后将spring,hibernate等框架正式学习了一遍。这个时间点,再刷算法题无望,于是将算法弃置一段时间。
12月中旬,互联网寒冬已到,打算春招再继续开战,于是进入苏州的一家互联网企业,她的名字叫:盖雅信息技术有限公司。这家公司的技术氛围太好了,实习过程我一直懵逼,但是同事也是非常热情,不厌其烦地回答我的问题。实习过程,我也算真正接触到了真实的开发项目。实习过程真的学习到了非常多的知识。
这里提醒各位,一定要尽早去实习!!!编程一定要实践,实战环境才能检验你的学习成果。
春招:
实习到2月下旬,发现对JAVA知识掌握的比较牢固了,正好学校要开始毕业设计(关于某污水处理厂的工艺设计)。拾起面经,开始对面试的知识考点全面恶补。这里强烈推荐:慕课网的Java面试-offer直通车,他能解决面经上面90%的问题,而且能够梳理你大脑中的知识点。算法方面,将刷过的leetcode整理一遍,刷一刷《剑指offer》。
3月互联网正式开启春招,前后投递了大概50多家公司,最后通过简历筛选,进入笔试面试的企业只有5家(我怀疑是不是我的简历做的太差了,还是直接把我这个双非非科班的简历直接pass掉了)。前前后后跑宣讲会,斩获offer,最终进入互联网行业。
三七互娱二面 远程视频面试:JAVA游戏端开发。非常有深度 大约50Min
1.自我介绍:
2.我不是计算机专业的,先从一些计算机常识问题入手:
3.计算机的结构:硬件和软件,里面的计算机结构
4.计算机网络模型 OSI七层模型的产生
5.操作系统的死锁问题
一个线程持有锁A,访问B,另一个线程持有锁B,访问锁A,则会死锁。
问我会什么,我从JAVA虚拟机入手
6.JAVA虚拟机内存模型 :程序计数器,虚拟机栈、本地方法栈、Java堆(具体划分)、方法区
7. 内存泄漏如何解决 用jstat,jstack,jmap各种工具分析
(1.确定频繁full GC现象,找出进程唯一ID,用JPS 2.Jstat查看Full GC频次 3.jmap分析堆文件)
8.谈到了新生代的Eden和survivor区,为什么Eden区不用标记-清除算法: 因为新生代频繁创建对象
9.标记清除算法,复制算法的原理
10.垃圾回收机制的优劣 :不用手动管理垃圾回收,但是也造成了无法对垃圾进行管控。
11.垃圾回收算法中可达性分析算法原理,什么可以作为GC-roots的引用链
虚拟机栈引用的对象,方法区类静态属性引用的对象,方法区常量引用的对象
就在此时,网络开始变差,我。。。我和面试官失去了联系。
面试官脾气真的好,让我调试成功了再继续。 而且,本来约上午的面试,我当时准备高铁面试,然后就安排到了下午,非常有耐心!
多线程编程 刨根问底
JAVA中的线程
12多线程和单线程的区别: 一个数据集进行排序,使用单线程还是多线程处理,他们的优劣
我谈到了mapReduce,他说是不同主机之间的处理,如果是一台主机,你是选用多线程还是单线程呢?
这个真的把我难倒了。
13多线程编程的好处是什么? --充分利用并发
14synchronized和reentrantLock的区别 --先说到了自旋锁,锁消除和锁粗化。最后扯到了Unsafe类就谈不下去了
15synchronized的原理和ReentrantLock的原理 问到AQS这一层,已经回答不出来了。
16.synchronized锁对象和锁类的区别(synchronized(A.class)和synchronized(object) 获取对象锁,获取类锁)
主要区别是同一个类的不同对象使用类锁会是同步的。
17.当数据正在更新,如何解决不同线程更新一个变量的问题。 ---使用synchoronized/volatile
18.volatile的内部原理:JMM内存模型,冲刷线程中的缓存。
19.volatile的具体使用场景
20.CAS的原理,CAS产生的问题,如何解决,CAS使用场景
21.知道atomic类的原理吗? 聊一聊使用的场景。
聊了这么多,说一下你对哪一方面的知识比较熟悉?
22.提到了线程池中的各种接口
从executor到executorService,ThreadPoolExecutor,Executors,谈到了里面都有哪些方法?
ThreadPoolExecutor的具体工作流程
聊到这里已经基本结束,询问了公司的业务和方向,不是偏向大数据。使用的框架大部分都是公司内部的。
最后问面试官我的表现如何,他说基本上问题不大,不知道有没有通过。
最后总结一下:技术官非常喜欢深挖一些你会的知识点,然后不断向下探索,深度挖掘。
一个知识点,真的需要把他的原理搞明白
。