前两天有粉丝联系我,说他软件工程专业,大厂校招屡次被刷,有一个已经到了三面,还是被刷了,感觉很绝望,不想找工作了。邮箱里也有很多信息,初试都没有过,找工作太难了,好累啊 真的被打击到了。
想起两年前我一个小学弟的经历,他也是校招的时候往腾讯投了一次简历,结果很明显凉了,随后这个理想就被暂时放下了,但是这个种子一直埋在心里,想着总有一天会再次挑战的。
这两年他除了工作以外,其余时间基本上都在学习,打磨自己的技术水平。也会坚持上论坛写写东西,也因此结识了很多优秀的小伙伴,从他们身上这个小学弟学到了特别多东西,把这次面试分享出来,也是希望可以帮助到更多的人。
面试经历
一面(远程视频面)
-
自我介绍
-
项目介绍
-
Redis介绍
-
了解redis源码吗
-
了解redis集群吗
-
Hashmap的原理
-
hashmap容量为什么是2的幂次
-
hashset的源码
-
object类你知道的方法
-
hashcode和equals
-
你重写过hashcode和equals么,要注意什么
-
假设现在一个学生类,有学号和姓名,我现在hashcode方法重写的时候,只将学号参与计算,会出现什么情况?
-
往set里面put一个学生对象,然后将这个学生对象的学号改了,再put进去,可以放进set么?并讲出为什么
-
Redis的持久化?有哪些方式,原理是什么?
-
讲一下稳定的排序算法和不稳定的排序算法
-
讲一下快速排序的思想
我特意整理了一下,有很多问题不是靠几句话能讲清楚,所以整理成一份文档,用来回答这些面试题。很多问题其实答案很简单,但是背后的思考和逻辑不简单。
二面(现场)
-
List item
-
自我介绍
-
讲一下数据的acid
-
什么是一致性
-
什么是隔离性
-
Mysql的隔离级别
-
每个隔离级别是如何解决
-
Mysql要加上nextkey锁,语句该怎么写
-
Java的内存模型,垃圾回收
-
线程池的参数
-
每个参数解释一遍
-
然后面试官设置了每个参数,给了是个线程,让描述出完整的线程池执行的流程
-
Nio和IO有什么区别
-
Nio和aio的区别
-
Spring的aop怎么实现
-
Spring的aop有哪些实现方式
-
动态代理的实现方式和区别
-
Linux了解么
-
怎么查看系统负载
-
Cpu load的参数如果为4,描述一下现在系统处于什么情况
-
Linux,查找磁盘上最大的文件的命令
-
Linux,如何查看系统日志文件
-
手撕算法:leeetcode原题 22,Generate Parentheses,给定 n
-
对括号,请写一个函数以将其生成新的括号组合,并返回所有组合结果。
三面
-
说一说Java内存区域。
-
什么是分布式系统?
-
分布式系统你会考虑哪些方面?
-
为什么说TCP/IP协议是不可靠的?
-
OSI有哪七层模型?TCP/IP是哪四层模型。
-
讲一讲TCP协议的三次握手和四次挥手流程。
-
为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接?
-
为什么TCP TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
-
什么是DoS、DDoS、DRDoS攻击?如何防御?
-
描述一下Java异常层次结构。
-
什么是检查异常,不受检查异常,运行时异常?并分别举例说明。
-
finally块一定会执行吗?
-
正常情况下,当在try块或catch块中遇到return语句时,finally语句块在方法返回之前还是之后被执行?
-
try、catch、finally语句块的执行顺序。
-
Java虚拟机中,数据类型可以分为哪几类?
-
怎么理解栈、堆?堆中存什么?栈中存什么?
-
为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
-
在Java中,什么是是栈的起始点,同时也是程序的起始点?
-
为什么不把基本类型放堆中呢?
-
Java中的参数传递时传值呢?还是传引用?
-
Java中有没有指针的概念?
-
Java中,栈的大小通过什么参数来设置?
-
一个空Object对象的占多大空间?
-
对象引用类型分为哪几类?
-
讲一讲垃圾回收算法。
-
如何解决内存碎片的问题?
大家在去面试自己中意的公司之前建议大家先去练练手,我首先去了美团和快手,每次都会带上录音笔,这样可以更快的发现自己的错误并改正,校招看重的是基础,社招也重基础但是更多的是考察项目,上面一些题可能有些很简单,但是某些点面试官会深挖。
面试前我也准备了挺久,前面主要是看电子书,学习笔记视频什么的,后面就是刷面试真题。这里免费分享一份Java常用工具包学习思维导图+Java核心进阶知识整理,是我当初学习的时候找圈内一位大佬要的。目前已经收到了七八个网友的反馈,说是面试问到了很多这里面的知识点。
内容涉及:Java开发介绍、Java数组、Java面向对象、常用基础类、集合、IO流、多线程、异常、反射等。
先给大家看看内容截图,完整版本PDF文档可以在文末免费领取。
一:Java开发介绍
- DOS常用命令
- JVM、JRE、JDK之间的关系
- Java开发环境的搭建:安装JDK,配置环境变量
- Java入门程序(Java的开发流程)
- Java的注释,标识符、标识符的命名规范
- Java基本数据类型
- 变量和常量的定义及初始化
- Java的运算符
- 运算符的优先级
- Java分支语句之if...else
- 循环的嵌套
- 方法的定义
- 方法的形参和实参
- 方法的递归调用
二、Java数组
- Java 数组的定义
- Java 数组的声明
- 数组的优势与局限
- 数组的遍历访问(普通循环,增强for循环)
- 数组元素的顺序查找
- 数组元素的冒泡法排序
- Arrays工具类的使用
- 二维数组
三、Java面向对象
- 面向对象设计思想
- 面向对象的分析与设计
- Java与面向对象
- 类中成员变量的定义与意义
- 构造方法的定义和调用
- 面向对象的封装特性
- 局部变量和成员变量的作用域问题
- 静态属性、静态方法、静态代码块
- 面向对象的继承特性
- 继承中构造方法的细节
- 面向对象的多态特性
- 抽象方法与抽象类
- 接口
四、异常
- 异常的概念
- 异常的分类
- 异常的理解
- 常见异常介绍
- 运行时异常
- 编译时异常
- 运行和编译异常区别
- 异常的处理方式之捕获异常
- 异常的处理方式之抛出异常
- 异常的处理方式之断点调试
- 断点调试之引导运行步骤
- 自定义异常
- 异常关键字处理
- 关键字执行流程
- 异常总结
五、集合
- 集合的概念和作用
- 集合和数组的区别
- 集合框架体系介绍
- 集合框架之Collection接口
- ArrayList和LinkedList的方法使用
- ArrayList和LinkedList各自的工作原理分析原理分析
- 使用多种方式遍历集合
- HashSet和LinkedHashSet各自的工作原理分析
- 集合框架之Map接口
- 泛型的使用
- Collections工具类的使用
六、IO流
- File类的作用
- File类中常用方法的使用介绍
- 使用File类操作文件和文件夹
- 相对路径和绝对路径的介绍
- IO流的概念和工作原理
- IO流的分类
- 文件流的使用
- 转换流的使用
- 缓冲流的使用
- 对象流的使用
- 内存流的使用
- 使用不同的流实现文件内容的拷贝
七、多线程
- 进程和线程的介绍
- 进程和线程之间的区别与联系
- 线程实现方式之继承自Thread类
- 线程实现方式之实现Runnable接口
- 线程实现方式之线程池
- 线程的生命周期
- 线程中常用方法的使用
我把一些常用Java工具包的思维导图做了汇总,持续更新中,方便读者查阅。
从这份文档截图中就可以看到这份资料总结得非常全面,有需要的话,点击下方名片,扫码即可免费获取,如果觉得本文对你有帮助,可以转发关注支持一下。