- A+
2022秋招眼看着就要来了,很多同学开始感受到压力,着急金九银十的秋招,所以纷纷临时抱佛脚,开始在找有没有什么提升面试成功率,查漏补缺的方法。
我的回答是: 有!
说起来,临阵磨枪没有比背八股文更靠谱的了,很多人对这个很不屑: 呵,背题家罢了!
但国内大环境如此,你不背,你就找不到满意的工作,很现实的一个事情。当然,你可以选择出淤泥而不染,身体力行的表示反抗,对推动国内互联网陋习改革出一份力,那我还是很佩服的。
这套面试题主要是针对0-5年左右的Java开发程序员提升的,不管是传统行业还是互联网行业,掌握这些技术基本都能拿到一个不错的薪资,希望对大家有所帮助。
一、Java基础
- Java概述
- 基础语法
- 面向对象
- 类与接口
- 变量与方法
- 内部类
- 重写与重载
- 对象相等判断
- 值传递
- Java包
- IO流
- 反射
- 常用API
- 集合容器概述
- Collection接口
- HashMap
- 多线程
- Java异常
- Tomcat
- 并发编程
二、Java异常
- finally 块中的代码什么时候被执行?
- finally 是不是一定会被执行到?
- try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
- try-catch-finally 中那个部分可以省略?
- Error 和 Exception 的区别?
- 运行时异常与受检异常有何异同?
- throw 和 throws 的区别?
- 常见的异常类有哪些?
- 主线程可以捕获到子线程的异常吗?
三、Java集合
1.Java 中常用的容器有哪些?
-
ArrayList 和 LinkedList 的区别?
-
ArrayList 实现 RandomAccess 接口有何作用?为何 LinkedList 却没实现这个接口?
-
ArrayList 的扩容机制?
-
Array 和 ArrayList 有何区别?什么时候更适合用 Array?
-
HashMap 的实现原理/底层数据结构?JDK1.7 和 JDK1.8
-
HashMap 的 put 方法的执行过程?
-
HashMap 的 get 方法的执行过程?
-
HashMap 的 resize 方法的执行过程?
-
HashMap 的 size 为什么必须是 2 的整数次方?
-
HashMap 多线程死循环问题?
-
HashMap 的 get 方法能否判断某个元素是否在 map 中?
-
HashMap 与 HashTable 的区别是什么?
-
HashMap 与 ConcurrentHashMap 的区别是什么?
-
HashTable 和 ConcurrentHashMap 的区别?
-
ConcurrentHashMap 的实现原理是什么?
-
HashSet 的实现原理?
-
HashSet 怎么保证元素不重复的?
-
LinkedHashMap 的实现原理?
-
Iterator 怎么使用?有什么特点?
-
Iterator 和 ListIterator 有什么区别?
-
Iterator 和 Enumeration 接口的区别?
-
fail-fast 与 fail-safe 有什么区别?
-
Collection 和 Collections 有什么区别?
四、Java并发
-
并行和并发有什么区别?
-
线程和进程的区别?
-
守护线程是什么?
-
创建线程的几种方式?
-
Runnable 和 Callable 有什么区别?
-
线程状态及转换?
-
sleep() 和 wait() 的区别?
-
线程的 run() 和 start() 有什么区别?
-
在 Java 程序中怎么保证多线程的运行安全?
-
Java 线程同步的几种方法?
-
Thread.interrupt() 方法的工作原理是什么?
-
谈谈对 ThreadLocal 的理解?
-
在哪些场景下会使用到 ThreadLocal?
-
说一说自己对于 synchronized 关键字的了解?
-
如何在项目中使用 synchronized 的?
-
说说 JDK1.6 之后的 synchronized 关键字底层做了哪些优化,可以详细介绍一下这些优化吗?
-
谈谈 synchronized 和 ReenTrantLock 的区别?
-
synchronized 和 volatile 的区别是什么?
-
谈一下你对 volatile 关键字的理解?
-
说下对 ReentrantReadWriteLock 的理解?
-
说下对悲观锁和乐观锁的理解?
-
乐观锁常见的两种实现方式是什么?
-
乐观锁的缺点有哪些?
-
CAS 和 synchronized 的使用场景?
-
简单说下对 Java 中的原子类的理解?
-
atomic 的原理是什么?
-
说下对同步器 AQS 的理解?
-
AQS 的原理是什么?
-
AQS 对资源的共享模式有哪些?
-
AQS 底层使用了模板方法模式,你能说出几个需要重写的方法吗?
-
说下对信号量 Semaphore 的理解?
-
CountDownLatch 和 CyclicBarrier 有什么区别?
-
说下对线程池的理解?为什么要使用线程池?
-
创建线程池的参数有哪些?
-
如何创建线程池?
-
线程池中的的线程数一般怎么设置?需要考虑哪些问题?
-
执行 execute() 方法和 submit() 方法的区别是什么呢?
-
说下对 Fork和Join 并行计算框架的理解?
-
JDK 中提供了哪些并发容器?
-
谈谈对 CopyOnWriteArrayList 的理解?
-
谈谈对 BlockingQueue 的理解?分别有哪些实现类?
-
谈谈对 Concurre
五、JVM
-
说一下 Jvm 的主要组成部分?及其作用?
-
谈谈对运行时数据区的理解?
-
堆和栈的区别是什么?
-
堆中存什么?栈中存什么?
-
为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
-
Java 中的参数传递时传值呢?还是传引用?
-
Java 对象的大小是怎么计算的?
-
对象的访问定位的两种方式?
-
判断垃圾可以回收的方法有哪些?
-
垃圾回收是从哪里开始的呢?
-
被标记为垃圾的对象一定会被回收吗?
-
谈谈对 Java 中引用的了解?
-
谈谈对内存泄漏的理解?
-
内存泄露的根本原因是什么?
-
举几个可能发生内存泄漏的情况?
-
尽量避免内存泄漏的方法?
-
常用的垃圾收集 算法有哪些?
-
为什么要采用分代收集 算法?
-
分代收集下的年轻代和老年代应该采用什么样的垃圾回收算法?
-
什么是浮动垃圾?
-
什么是内存碎片?如何解决?
-
常用的垃圾收集器有哪些?
-
谈谈你对 CMS 垃圾收集器的理解?
-
谈谈你对 G1 收集器的理解?
-
说下你对垃圾回收策略的理解/垃圾回收时机?
-
谈谈你对内存分配的理解?大对象怎么分配?空间分配担保?
-
说下你用过的 JVM 监控工具?
-
如何利用监控工具调优?
-
JVM 的一些参数?
-
谈谈你对类文件结构的理解?有哪些部分组成?
-
谈谈你对类加载机制的了解?
-
类加载各阶段的作用分别是什么?
-
有哪些类加载器?分别有什么作用?
-
类与类加载器的关系?
-
谈谈你对双亲委派模型的理解?工作过程?为什么要使用
-
怎么实现一个自定义的类加载器?需要注意什么?
-
怎么打破双亲委派模型?
-
有哪些实际场景是需要打破双亲委派模型的?
-
谈谈你对编译期优化和运行期优化的理解?
-
为何 HotSpot 虚拟机要使用解释器与编译器并存的架构?
-
说下你对 Java 内存模型的理解?
-
内存间的交互操作有哪些?需要满足什么规则?
六、SSM框架
Spring框架
-
使用 Spring 框架的好处是什么?
-
解释下什么是 AOP?
-
AOP 的代理有哪几种方式?
-
怎么实现 JDK 动态代理?
-
AOP 的基本概念:切面、连接点、切入点等?
-
通知类型(Advice)型(Advice)有哪些?
-
谈谈你对 IOC 的理解?
-
Bean 的生命周期?
-
Bean 的作用域?
-
Spring 中的单例 Bean 的线程安全问题了解吗?
-
谈谈你对 Spring 中的事物的理解?
-
Spring 中的事务隔离级别?
-
Spring 中的事物传播行为?
-
Spring 常用的注入方式有哪些?
-
Spring 框架中用到了哪些设计模式?
-
ApplicationContext 通常的实现有哪些?
-
谈谈你对 MVC 模式的理解?
-
SpringMVC 的工作原理/执行流程?
-
SpringMVC 的核心组件有哪些?
-
SpringMVC 常用的注解有哪些?
-
RequestMapping 的作用是什么?
-
如何解决 POST 请求中文乱码问题,GET 的又如何处理呢?
-
SpringMVC 的控制器是不是单例模式,如果是会有什么问题,怎么解决?
-
SpringMVC 怎么样设定重定向和转发的?
-
SpringMVC 里面拦截器是怎么写的?
-
SpringMVC 和 Struts2 的区别有哪些?
七、Mybatis
- MyBaits 的优缺点有哪些?
- MyBatis 与 Hibernate 有哪些不同?
- MyBatis 中 #{} 和 ${}的区别是什么?
- MyBatis 是如何进行分页的?分页插件的原理是什么?
- MyBatis 有几种分页方式?
- MyBatis 逻辑分页和物理分页的区别是什么?
- MyBatis 是否支持延迟加载?如果支持,它的实现原理是什么?
- 说一下 MyBatis 的一级缓存和二级缓存?
- Mybatis 有哪些执行器(Executor)?
- MyBatis 动态 SQL 是做什么的?都有哪些动态 SQL?能简述一下动态 SQL的执行原理不?
八、MySQL
-
请说下你对 MySQL 架构的了解?
-
一条 SQL 语句在数据库框架中的执行流程?
-
数据库的三范式是什么?
-
char 和 varchar 的区别?
-
varchar(10) 和 varchar(20) 的区别?
-
谈谈你对索引的理解?
-
索引的底层使用的是什么数据结构?
-
谈谈你对 B+ 树的理解?
-
为什么 InnoDB 存储引擎选用 B+ 树而不是 B 树呢?
-
谈谈你对聚簇索引的理解?
-
谈谈你对哈希索引的理解?
-
谈谈你对覆盖索引的认识?
-
索引的分类?
-
谈谈你对最左前缀原则的理解?
-
怎么知道创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
-
什么情况下索引会失效?即查询不走索引?
-
查询性能的优化方法?
-
InnoDB 和 MyISAM 的比较?
-
谈谈你对水平切分和垂直切分的理解?
-
主从复制中涉及到哪三个线程?
-
主从同步的延迟原因及解决办法?
-
谈谈你对数据库读写分离的理解?
-
请你描述下事务的特性?
-
谈谈你对事务隔离级别的理解?
-
解释下什么叫脏读、不可重复读和幻读?
-
MySQL 默认的隔离级别是什么?
-
谈谈你对MVCC 的了解?
-
说一下 MySQL 的行锁和表锁?
-
InnoDB 存储引擎的锁的算法有哪些?
-
MySQL 问题排查都有哪些手段?
-
MySQL 数据库 CPU 飙升到 500% 的话他怎么处理?
九、Redis
-
谈下你对 Redis 的了解?
-
Redis 一般都有哪些使用场景?
-
Redis 有哪些常见的功能?
-
Redis 支持的数据类型有哪些?
-
Redis 为什么这么快?
-
什么是缓存穿透?怎么解决?
-
什么是缓存雪崩?该如何解决?
-
怎么保证缓存和数据库数据的一致性?
-
Redis 持久化有几种方式?
-
Redis 怎么实现分布式锁?
-
Redis 淘汰策略有哪些?
-
Redis 常见性能问题和解决方案?
十、计算机网络
-
为什么需要三次握手?两次不行?
-
为什么需要四次挥手?三次不行?
-
TCP与UDP有哪些区别?各自应用场景?
-
HTTP1.0,1.1,2.0 的版本区别
-
POST和GET有哪些区别?各自应用场景?
-
HTTP 哪些常用的状态码及使用场景?
-
HTTP状态码301和302的区别,都有哪些用途?
-
在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?
-
HTTP 如何实现长连接?在什么时候会超时?
-
TCP 如何保证有效传输及拥塞控制原理
-
IP地址有哪些分类?
-
GET请求中URL编码的意义
-
什么是SQL 注入?举个例子?
-
谈一谈 XSS 攻击,举个例子?
-
讲一下网络五层模型,每一层的职责?
-
简单说下 HTTPS 和 HTTP 的区别
-
对称加密与非对称加密的区别
-
简单说下每一层对应的网络协议有哪些?
-
ARP 协议的工作原理?
-
TCP 的主要特点是什么?
-
UDP 的主要特点是什么?
-
TCP 和 UDP 分别对应的常见应用层协议有哪些?
-
为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
-
保活计时器的作用?
-
TCP 协议是如何保证可靠传输的?
-
谈谈你对停止等待协议的理解?
-
谈谈你对 ARQ 协议的理解?
-
谈谈你对滑动窗口的了解?
-
谈下你对流量控制的理解?
-
谈下你对 TCP 拥塞控制的理解?使用了哪些算法?
-
什么是粘包?
-
TCP 黏包是怎么产生的?
-
怎么解决拆包和粘包?
-
forward 和 redirect 的区别?
-
HTTP 方法有哪些?
-
在浏览器中输入 URL 地址到显示主页的过程?
-
DNS 的解析过程?
-
谈谈你对域名缓存的了解?
-
谈下你对 HTTP 长连接和短连接的理解?分别应用于哪些场景?
-
HTTPS 的工作过程?
-
HTTP 和 HTTPS 的区别?
-
HTTPS 的优缺点?
-
什么是数字签名?
-
什么是数字证书?
-
Cookie 和 Session 有什么区别?
十一、操作系统
-
简单说下你对并发和并行的理解?
-
同步、异步、阻塞、非阻塞的概念
-
进程和线程的基本概念
-
进程与线程的区别?
-
为什么有了进程,还要有线程呢?
-
进程的状态转换
-
进程间的通信方式有哪些?
-
进程的调度算法有哪些?
-
什么是死锁?
-
产生死锁的原因?
-
死锁产生的必要条件?
-
解决死锁的基本方法?
-
怎么预防死锁?
-
怎么避免死锁?
-
怎么解除死锁?
-
什么是缓冲区溢出?有什么危害?
-
分页与分段的区别?
-
物理地址、逻辑地址、虚拟内存的概念
-
页面置换算法有哪些?
-
谈谈你对动态链接库和静态链接库的理解?
-
外中断和异常有什么区别?
-
一个程序从开始运行到结束的完整过程,你能说出来多少?
-
什么是用户态和内核态
-
用户态和内核态是如何切换的?
-
进程终止的方式
-
守护进程、僵尸进程和孤儿进程
-
如何避免僵尸进程?
-
介绍一下几种典型的锁?
-
常见内存分配内存错误
-
内存交换中,被换出的进程保存在哪里?
-
原子操作的是如何实现的
-
抖动你知道是什么吗?它也叫颠簸现象
完整资料全收录包含了 Java 基础、容器、多线程、反射、对象拷贝、Java Web 、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、MyBatis、RabbitMQ、Kafka、Zookeeper、MySQL、Redis、JVM 等十九个技术栈,所有问题答案都已梳理好
1、面向对象的三个基本特征?
面向对象的三个基本特征是:封装、继承和多态。
继承:让某个类型的对象获得另一个类型的对象的属性的方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
封装:隐藏部分对象的属性和实现细节,对数据的访问只能通过外公开的接口。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
多态:对于同一个行为,不同的子类对象具有不同的表现形式。多态存在的3个条件:1)继承;2)重写;3)父类引用指向子类对象。
2.&和&&的区别?
&&:逻辑与运算符。当运算符左右两边的表达式都为 true,才返回 true。同时具有短路性,如果第一个表达式为 false,则直接返回 false。
&:逻辑与运算符、按位与运算符。
按位与运算符:用于二进制的计算,只有对应的两个二进位均为1时,结果位才为1 ,否则为0。
逻辑与运算符:& 在用于逻辑与时,和 && 的区别是不具有短路性。所在通常使用逻辑与运算符都会使用 &&,而 & 更多的适用于位运算。
3、String 是 Java 基本数据类型吗?
答:不是。Java 中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type)。
基本数据类型:数据直接存储在栈上
引用数据类型区别:数据存储在堆上,栈上只存储引用地址
4、String 类可以继承吗?
不行。String 类使用 final 修饰,无法被继承。
5、String和StringBuilder、StringBuffer的区别?
String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。
StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全。
StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,具有更高的性能,推荐优先使用。
以下则是一些问题补充以及面试建议,小伙伴们可以对照自己查漏补缺,纠正面试可能犯的错误
TCP与HTTP
- http1.0和http1.1有什么区别。
- TCP三次握手和四次挥手的流程,为什么断开连接要4次,如果握手只有两次,会出现什么。
- TIME_WAIT和CLOSE_WAIT的区别。
- 说说你知道的几种HTTP响应码,比如200, 302, 404。
- 当你用浏览器打开一个链接(如:www.javastack.cn)的时候,计算机做了哪些工作步骤。
- TCP/IP如何保证可靠性,说说TCP头的结构。
- 如何避免浏览器缓存。
- 如何理解HTTP协议的无状态性。
- 简述Http请求get和post的区别以及数据包格式。
- HTTP有哪些method
- 简述HTTP请求的报文格式。
- HTTP的长连接是什么意思。
- HTTPS的加密方式是什么,讲讲整个加密解密流程。
- Http和https的三次握手有什么区别。
- 什么是分块传送。
- Session和cookie的区别。
- 点击这里有一套答案版的试题。
架构设计与分布式
- 用java自己实现一个LRU。
- 分布式集群下如何做到唯一序列号。
- 设计一个秒杀系统,30分钟没付款就自动关闭交易。
- 如何使用redis和zookeeper实现分布式锁?有什么区别优缺点,会有什么问题,分别适用什么
- 场景。(延伸:如果知道redlock,讲讲他的算法实现,争议在哪里)
- 如果有人恶意创建非法连接,怎么解决。
- 分布式事务的原理,优缺点,如何使用分布式事务,2pc 3pc 的区别,解决了哪些问题,还有
- 哪些问题没解决,如何解决,你自己项目里涉及到分布式事务是怎么处理的。
- 什么是一致性hash。
- 什么是restful,讲讲你理解的restful。
- 如何设计一个良好的API。
- 如何设计建立和保持100w的长连接。
- 解释什么是MESI协议(缓存一致性)。
- 说说你知道的几种HASH算法,简单的也可以。
- 什么是paxos算法, 什么是zab协议。
- 一个在线文档系统,文档可以被编辑,如何防止多人同时对同
- 一份文档进行编辑更新。
- 线上系统突然变得异常缓慢,你如何查找问题。
- 说说你平时用到的设计模式。
- Dubbo的原理,有看过源码么,数据怎么流转的,怎么实现集群,负载均衡,服务注册
- 和发现,重试转发,快速失败的策略是怎样的 。
- 一次RPC请求的流程是什么。
- 自己实现过rpc么,原理可以简单讲讲。Rpc要解决什么问题。
- 异步模式的用途和意义。
- 编程中自己都怎么考虑一些设计原则的,比如开闭原则,以及在工作中的应用。
- 设计一个社交网站中的“私信”功能,要求高并发、可扩展等等。 画一下架构图。
- MVC模式,即常见的MVC框架。
- 聊下曾经参与设计的服务器架构并画图,谈谈遇到的问题,怎么解决的。
- 应用服务器怎么监控性能,各种方式的区别。
- 如何设计一套高并发支付方案,架构如何设计。
- 如何实现负载均衡,有哪些算法可以实现。
- Zookeeper的用途,选举的原理是什么。
- Zookeeper watch机制原理。
参加面试需要注意的问题
1、自我感觉自己的Java的技术不错,但是面试往往不如人意;
2、对面试官提出的问题很懵,不知道它问的是什么?
3、面试才开始,有些面试官就疯狂地从知识基础的开始询问;
4、一些面试官一直在问有关业务场景的问题,完全不知道面试前要准备什么。
面试(无论是为了找工作还是升职)是我们每个人都无法逃避的事情。有时候,与其一味写代码,不如提升一下自己的面试技巧。小千特意搜集了很多信息,整理,现在分享给大家!
1、Java的基本知识很重要。
能否熟练掌握Java基础知识,是一项被许多大公司高度重视的基本能力,但总有人追求高深的技术,而忽略它。如果您的底层知识扎实,一套完整的框架知识,这将会为您未来所有的面试打下坚实的基础。
2、不要答非所问,明确面试提问的意图
面试官针对不同的Java岗位要求,对能力考察的重点有些差异!
如果你是参加校招,会重点看到你的基本知识,逻辑思维,更多以挖掘潜力为主;
如果你是初级Java工程师,你需要注重基本知识的应用和自身掌握知识的广度;
对于资深或高级Java工程师来说,更需要对基本原理有深刻的理解,并且能够灵活地使用各种知识,一般以综合能力为主。
3、了解Java应用能力考察点和加分项
不同类型的公司对候选人的能力需要而不同。对于社交门户,Java工程师的考察知识是大规模和高并发场景的应用和体系结构能力。
O2O行业将重点放在对求职者综合能力的考察;
互金更喜欢具有缜密的逻辑思维和在高可用性安全领域经验丰富的候选人。
因此,为了提高面试合格率,达到事半功倍的效果,面试前应根据公司类型和岗位要求进行特殊准备。
综合以上这三个维度准备面试,通过率就会大大提高。但是,如果你真的想轻松地应对面试,还需要和大工厂的面试官进行沟通交流,了解更多关于面试的核心技能。这样,您就能更好地了解自己的弱点,清晰考察的要点。
面试是一个交流的过程,千万不能生搬硬套,要根据具体情况分析,提出合适的问题,比如从公司工作,团队,客户等工作相关的内容提出问题,那么就不会有太多的错误。
凡事预则立,不预则废。能读到这里的人,我相信都是这个世界上的“有心人”,还是那句老话:上天不负有心人!我相信你的每一步努力,都会收获意想不到的回报。
由于篇幅过长就不一一展示了,有需要的小伙伴请点赞留言