2016 校招感悟
校招真是一次特别的经历,记点自己的感受吧
简历
简历上要突出自己熟悉的,尽量不要写不熟悉的,尽管描述词是 “了解 xxx”,因为有可能面试官眼中 “了解” 和你的 “了解” 不一样,然后被问到如果答不上来就不 (bei) 好 (ju) 了。
笔试
- 笔试编程题是大分,尽量拿,如果写不出最优的解法,暴力一发能得点分总是没有坏处的(虽然有些公司只看通过与不通过,没有通过 50%)。
- 有些面试官会问笔试编程题,在面试之前最好回忆一下当时题目的具体解法(如果没有回答上,面试官有理由怀疑笔试成绩的真实性)。
面试
最重要的部分,一般分为技术面和 HR 面。
HR 面就不说了,毕竟我情商低得吓人→_→,反正遇到尖锐的问题尽量避开或从侧面回答,如果 HR 还是紧追不放,只有随机应变了。
礼貌
基本的礼貌是必不可少的,进房间敲门,双手递简历,称您等
主动
掌握面试主动权,主动表达出来自己会的东西,这样可以:
- 拖延时间,否则就会一直被面试官问问题,你也预料不到下一个问题你能不能答上来;
- 让面试官看出你知道的东西,对知识了解的深度等;
- 根据提出的问题延伸,引导面试官问你熟悉的方面。
问:(Java 中)HashMap 的原理?
答:常规 balabala(哈希冲突解决,具体实现,JDK8 改进等),不过该类是线程不安全的,在多线程环境下可以使用 ConcurrentHashMap 代替,继续 balabala(分段锁,JDK8 改进等),它其中的 get 方法是不用加锁的,主要通过 volatile 实现,继续扯到 Java 内存模型等等,都说到这里了,相信面试官不会不问 volatile 与原子性、synchronized 与 volatile 的区别这些问题了。
当然中途很有可能会被打断,但是这不重要,至少表达出来了,而且打断后面试官很有可能继续问后面你本自己打算说的东西。
只是举个栗子,类似的问题很多,比如单例模式(的各种实现,能很自然地扯到 Java 内存模型,类加载,语法糖等)...
代码
很多面试会被要求手写代码,首先不要听完就写,一定要问清题意,输入数据的范围等再动笔,写的时候命名要规范,特判一些条件,写完后多检查检查,再交给面试官,可以给他讲解,比如对于某些非法输入,就算你没在代码中检查,可以描述出来,至少代表考虑了这些情况。
面试常见手写代码:传送门
总结
面试官在面试的时候会对面试过程进行记录,比如我在二面的时候被问了一个分布式的问题,当时没有回答上来,三面面试官又问我了,“你回去解决这个问题没,是怎么解决的?来给我描述一下”。所以面试过后有必要回忆一下面试过程,对当时没有回答上的问题查查资料什么的。
人品
当然了,面试中人品是必不可少的啊(ps: 大牛无视)。
致 学弟学妹
正文
先说说我自己的大学经历吧:
- 大一进了学院的 ACM 队,当时觉得
Accept
是多么令人高兴的事,于是就这样过了一年,做着自己喜欢的事情,没什么感觉。 - 大二进了卓软,身边的同学都进实验室了,都开始做项目了,我还在 ACM,其实真的挺孤单的,做着和大多数人不一样的事情。第一学期还好,第二学期有项目管理、软件过程之类的课程,项目管理课上,当时我什么都不会,开始的时候想着边做边学,在 Java 都没学过的情况下听同学讲 Spring,完全听不懂,后来当然是同学做了。而我还在搞我的 ACM,经常晚上对拍到电脑没电,依旧是为了
Accept
,软件过程课上,别人都写的项目,就我写的某月某日到某月某日 AC 了几道题,暑假时候的信息系统和软件测试也是水水就过了。于是就这样又过了一年,不一样的一年,由于竞赛算法真的很难,期间经常怀疑自己的智商。 - 大三,说实话这时有点慌了,因为啥都不会,但是又有最重要的 ACM 区域赛,都坚持了两年了总要去一去吧,然后又坚持了大半学期,做题,整理模板(有需要的可以点击下载),10 月参加了长春区域赛,12 月参加了 Ec-final,中途抽时间自学了 Java。区域赛结束,正式放弃了 ACM,高智商人玩的游戏,开始尽量静下心学 Java 后台。其实说静下心,怎么能静下来,身边的同学都有 N 个项目经验了,而我才开始学,就这样又过了一年,挺辛苦的一年。
- 大四,找工作,实习。
说这个一是回忆一下大学生活,二是说明学长一路这么心酸都走过来了,你们还怕什么。
问题
看到你们整理的问题,选其中的一些说说我自己的看法吧,不清楚的还是不要乱说误导你们,我的天哪。jpg
-
技术专好还是精好?
其实我没懂什么意思,那我就猜测一下咯,必须要有自己专长的地方(找工作吃饭的工具),在这基础上再多了解点其他的。 -
哪些公司的发展好?
其实对于应届生,好吧,诚实一点,对我们这种学校的应届生,只要公司不是太挫,任何一家公司都有很多很多你学习的东西。其他的大公司有大公司的好,小公司有小公司的好。 -
如何应对找工作?
好好学习,好好准备,具体参见面试。 -
保研相关
不清楚,不过根据政策,多参加一些比赛活动,加分你懂的。 -
啥也不会?啥都不想学?不知道干嘛?
这个,我也不清楚,不过我有个建议,上知乎提个问,也许有人解决。
面试
把问题中面试的部分拿到这里了,这个比较重要,笔试就不说了,太杂了。
找工作和实习的面试要点?
面试开发所需的核心技能和知识?
面试经验?
想了解 Java 后台需要什么技术,并且到什么程度?
面试应该准备什么?
面试中注意什么?
面试和投简历需要准备什么?
公共课程:其实这些课很重要的,真的。
A. 算法 + 数据结构
面试中不会考什么复杂的算法,都是很简单的那种,但是很多时候会手写代码,原来随便总结一下:面试常见手写代码总结,另外可以看一看《剑指 Offer》这本书。
B. 计算机网络
- 网络分层和各层的作用
- TCP 和 UDP 区别
- TCP 的可靠传输原理
- TCP 的流量控制原理
- TCP 的拥塞控制原理
- TCP 的三次握手、四次挥手原理
- FTP 原理
- HTTP 原理
- HTTPS 与 HTTP 区别
C. 数据库(这里主要说 mysql)
- 索引类型
- 索引应该怎么建
- btree 索引原理
- hash 索引和 btree 索引的区别
- 事务的特性,隔离级别
- 数据库优化:sql 优化、索引优化、表优化、应用优化
- 常见存储引擎以及区别
D. 操作系统
- 用户态和内核态
- 进程线程区别
- 进程线程通信方式
- 进程线程的状态
- 死锁以及预防策略
- 进程线程调度算法
- 分页分段以及页面调度算法
- IO 控制方式
Java 后台
A. Java 基础
- java 语言的几个特性
- 接口与抽象类的异同(包含 JDK8 的新特性)
- Java8 的新特性
- IO 和 NIO 的区别
- 检查异常和非检查异常的区别
- 异常处理的原理
- HashMap 的原理(包含 JDK8 中的改进)
- ConcurrentHashMap 的原理(包括 JDK8 新特性以及 put、get、size 方法的实现)
B. Java 虚拟机
推荐一本书,《深入理解 Java 虚拟机》,对于面试足够了。要是闲太长了,就看这个吧:深入理解 Java 虚拟机总结
C. Java 并发,多线程,和上面的虚拟机有很大重叠
- 线程的状态
- interrupted 和 isInterrupted
- 阻塞队列
- ThreadLocal 的原理与内存泄露
- 线程池与 Executor 框架
- 什么是 Java 的内存模型
- Lock 和 Synchronized 的区别
- volatile 和 Synchronized 的区别
- volatile 实现机制
- 乐观锁和悲观锁的区别
- 锁等级
- Java 同步器
- CAS 的实现机制
- 原子类的实现机制
- Synchroized 的实现机制
- 你用过 JUC 包哪些类
D. Javaweb
这个好像不能说,分为基础和框架,基础主要是 Servlet 原理,jsp,Jdbc 什么的
框架比如 ssh, ssm,要知道一些常见问题的涉及的原理,看过源码就更好了。
比如:SpringBean 的生命周期,SpringMVC 处理请求的过程等等等...
E. Java 设计模式
其实面试中常问的就两三个,不过还是来个总结:设计模式总结
F. 分布式相关
面试官总是喜欢往这个方向扯,推荐一本书:《大型网站技术机构核心原理与案例分析》
HR 面
- 你有女朋友吗
- 你的优点、缺点
- 你对我们公司了解吗
- 你以后几年个人的计划
- 你平时怎么学习的
- 遇到问题你一般怎么解决
- 你有什么问题要问吗