作为一个刚毕业的小伙去面试java,自己经过了几次失败的面试,然后整理出来的面试题,现在已经拿到offer,特别适合刚毕业,或者未毕业的你们! 题目还在补全中。

作为一个刚毕业的小伙去面试java,自己经过了几次失败的面试,然后整理出来的面试题,现在已经拿到offer,特别适合刚毕业,或者未毕业的你们! 题目还在补全中。

一、Java 基础

1.JDK 和 JRE 有什么区别?
jdk是java开发工具包,是程序员使用java语言编写java程序所需要的开发工具包,JDK包含了JRE,同时还包含了java源代码的编译器javac,还包含了程序调试和分析工具
jre是java运行时环境,包含了java虚拟机java基础类库。java类库的class文件,都在lib目录下,并且都打包成了jar
2.== 和 equals 的区别是什么?

作用于基本数据类型的变量,则直接比较其存储的"值"是否相等
作用于引用类型的变量,则比较的是所指向对象的地址
equals
equals方法不能作用于基本数据类型的变量
如果没有对Object中的equals方法重写,则比较的是引用类型的变量所指向的对象的地址,反之则是比较的是内容
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

4.final 在 java 中有什么作用?

5.java 中的 Math.round(-1.5) 等于多少?

6.String 属于基础的数据类型吗?
java中String是个对象,是引用类,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是复杂的数据结构。

7.java 中操作字符串都有哪些类?它们之间有什么区别?
String StringBUffer StringBuilder
String是不可变的对象,每次对String类型改变时都会生成一个新对象
StringBuffer是可以改变的对象,效率低,但是线程安全,用于多线程
StringBuilder是可变对象,是非线性安全,操作效率高,用于单线程

项目中需要拼接字符串最好才用StringBuffer
8.String str="i"与 String str=new String(“i”)一样吗?

9.如何将字符串反转?
使用StringBuilder或StringBuffer的reverse方法。

10.String 类的常用方法都有那些?

length():求字符串长度
indexOf():求某个字符在字符串中的位置
charAt():求一个字符串中某个位置的值
equals():比较两个字符串是否相同
11.抽象类必须要有抽象方法吗?

12.普通类和抽象类有哪些区别?
1)抽象类不能被实例化
2)抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态
3)抽象方法只需申明,无需实现,抽象类中可以允许普通方法有主体
4)含有抽象方法的类必须申明为抽象类
5)抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
13.抽象类能使用 final 修饰吗?

14.接口和抽象类有什么区别?

15.java 中 IO 流分为几种?

二、容器

18.java 容器都有哪些?
数组,String Java.util下的集合容器
19.Collection 和 Collections 有什么区别?
Collection是set和List的父接口。Collections是一个工具类,提供了一系列的静态方法来辅助操作,这些放法对容器的搜索,排序,线程安全化

20.List、Set、Map 之间的区别是什么?
List:1可以有重复的对象 2可以插入多个null元素 3是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入顺序 4常用的实现类有ArrayList,LinkedList和vector。ArrayList最为流行,它提供了使用索引的随意访问,而LinkenList则对于经常需要从List中添加或删除元素的场合更为合适

vector:底层是数组,查询快,增删慢 线程同步(安全),效率低
Arraylist:底层是数组,查询快,增删慢 线程不同步(不安全),效率高
LinkedList:底层是链表,查询慢,增删快 线程不安全 ,效率高

Set:1不允许有重复对象 2无序容器,你无法保证每个元素的存储顺序,TreeSet通过Comparator或者Comparable维护了一个排序顺序 3只允许一个Null元素 4Set接口最流行的几个实现类是HashSet,LinkedHashSet以及TreeSet.最流行的是继续HashMap实现的HashSet;TreeSet还实现了SortedSet接口,因此treeSet是一个根据其compare()和compareTo()的定义进行排序的有序容器

Map:1不是collection的子接口或者实现类。Map是一个接口。
2Map的每个Entry都保持两个对象,也就是一个键一个值,Map可能会持有相同的值对象但键对象必须是唯一的。
3TreeMap也是通过Comparator或者Comparable维护了一个排序顺序
4Map里你可以拥有随意个NULL值,但只能哟哟一个NULL键
5Map接口最流行的几个实现类是HashMap,LinkendHashMap,Hashtable和TreeMap(HashMap和TreeMap最常用)

21.HashMap 和 Hashtable 有什么区别?
Hashtable继承Dictionary类, 线程不安全效率高 可以存储null键和null值
HashMaP继承自AbstractMap类 线程安全效率低 不可以存储null键和null值

22.如何决定使用 HashMap 还是 TreeMap?

HashMap是分散列均匀的,不支持排序,数据结构主要是数组,链表或红黑树
TreeMap的Key值是要求实现java.long.Comparable,所以在迭代的时候TreeMap是按照Key值升序排列的,TreeMap的实现也是基于红黑树结构
所以查找的时候用HashMap,增加,快速创建的时候用TreeMap
31.迭代器 Iterator 是什么?

他是一种设计模式,他是一个对象,可以遍历并选择系列中的对象
32.Iterator 怎么使用?有什么特点?

next()获得序列的下一个元素
hashNext()检查序列中是否还有元素
remove()将迭代器返回的元素删除
34.怎么确保一个集合不能被修改?
可以采用Collections包下的Unmodifiablemap的方法
三、多线程

35.并行和并发有什么区别?

并发,位于一个处理器上的多个已开启未完成的线程,在任意时刻系统调度只能让一个线程获得cpu资源运行。通过不断切换需要运行的线程让其运行的方式就叫并发
并行:在多CPU系统中,可以让两个以上的线程同时运行,这个可以让两个以上的线程同时运行的方式叫并行。
来个比喻:并发和并行是一个人吃三个馒头和三个人吃三个馒头
36.线程和进程的区别?

进程:是并发执行程序在执行过程中分配和管理资源的基本单位
线程:是进程的一个执行单元。
一个程序至少一个进程,一个进程至少一个县城
1地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间
2资源拥有:同一进程内的线程共享本进程的资源,但是进程之间的资源是独立的
3一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉,所以多进程要不多线程健壮
4进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程,同意如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。
5执行过程中:每个独立的进程有一个程序运行的入口,顺序执行序列和程序入口,但线程不能独立执行,必须依存于进程中,由应用程序提供多个线程执行控制
6线程是处理调度的基本单位,进程不是
7两者均可并发执行
38.创建线程有哪几种方式?

1继承Thread类型重写run方法
2实现Runnable接口
3实现Callable接口
39.说一下 runnable 和 callable 有什么区别?

1)Runnable执行的方法是run(),Callable是call()
2)实现Runnable接口的任务线程无返回值,实现Callable接口的线程能返回执行结果
3)call方法可以抛出异常,run方法若有异常只能在内部消化
40.线程有哪些状态?
新建 运行 就绪 阻塞 死亡
41.sleep() 和 wait() 有什么区别?

1这两个方法来自不同的类分别是Thread和Object
2最主要的是sleep方法没有释放锁,而wait方法释放了锁,使其它线程可以使用同步块控制或者方法
3wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
4sleep必须捕获异常,而wait,notifynotifyAll不需要捕获异常
42.notify()和 notifyAll()有什么区别?

43.线程的 run()和 start()有什么区别?

44.创建线程池有哪几种方式?

45.线程池都有哪些状态?

46.线程池中 submit()和 execute()方法有什么区别?

47.在 java 程序中怎么保证多线程的运行安全?

48.多线程锁的升级原理是什么?

49.什么是死锁?

是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,若无外力作用,他们都将无法再向前推进。
50.怎么防止死锁?

51.ThreadLocal 是什么?有哪些使用场景?

52.说一下 synchronized 底层实现原理?

53.synchronized 和 volatile 的区别是什么?

54.synchronized 和 Lock 有什么区别?

55.synchronized 和 ReentrantLock 区别是什么?

56.说一下 atomic 的原理?

四、反射

57.什么是反射?

58.什么是 java 序列化?什么情况下需要序列化?

59.动态代理是什么?有哪些应用?

60.怎么实现动态代理?

五、对象拷贝

61.为什么要使用克隆?

62.如何实现对象克隆?

63.深拷贝和浅拷贝区别是什么?

六、Java Web

64.jsp 和 servlet 有什么区别?

65.jsp 有哪些内置对象?作用分别是什么?

out 用于页面输出
request 得到用户请求信息
response 服务器向客户端的回应信息
config 服务器配置,可以取得初始化参数
session 用来保存用户信息
application 所有用户的共享信息
page 指当前页面转换后的Servlet类的实例
pageContext JSP页面容器
exception 表示Jsp页面所发生的异常,在错误页面中才起作用
66.说一下 jsp 的 4 种作用域?

page 当前页面有效
request 在当前请求中有效
session 当前会话中有效
application 当前项目中有效
67.session 和 cookie 有什么区别?

68.说一下 session 的工作原理?

70.spring mvc 和 struts 的区别是什么?

71.如何避免 sql 注入?

72.什么是 XSS 攻击,如何避免?

73.什么是 CSRF 攻击,如何避免?

七、异常

74.throw 和 throws 的区别?

Throw
1)作用在方法内,表示抛出具体异常,由方法体内的语句处理
2)具体向外抛出的动作,所以它抛出的是一个实体类。若执行了Throw一定是抛出了某种异常
Throws
1)作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理
2)主要声明这个方法会抛出某种类型的异常,让它的使用者知道捕获异常的类型
3)出现异常是一种可能性,但不一定会发生异常
75.final、finally、finalize 有什么区别?

fianl可用于修饰变量,方法,类,被修饰的变量的值不能改变,被修饰的方法不能重写,被修饰的类不能被继承
finally通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常运行还是发生异常,这里的代码块只要JVM不关闭总会执行,可以将释放外部资源的代码块写在fianlly中
finalize Object类的方法,java中允许使用finalize()方法在垃圾回收器将对象从内存中清除去之前必要的清理工作,这个方法是由垃圾回收器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作
76.try-catch-finally 中哪个部分可以省略?

catch和finally都可以省略,但是不能同时省略
77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

78.常见的异常类有哪些?

八、网络

79.http 响应码 301 和 302 代表的是什么?有什么区别?

80.forward 和 redirect 的区别?

81.简述 tcp 和 udp的区别?

84.OSI 的七层模型都有哪些?

85.get 和 post 请求有哪些区别?

86.如何实现跨域?

87.说一下 JSONP 实现原理?

九、设计模式

88.说一下你熟悉的设计模式?

工厂模式:工厂类可以根据条件生成不同的子类实例,这些子类中有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。当得到子类的实例后,开发人员可以调用基本类型中的方法而不必考虑到到底返回的是那一个子类实例。
89.简单工厂和抽象工厂有什么区别?

十、Spring/Spring MVC

90.为什么要使用 spring?
Spring是一个轻型容器,其核心是Bean工厂,用以构造我们所需要的Model,在此基础上提供了Aop的实现,用它来提供非管理环境下申明方式的事务,对Bean工厂的扩展ApplicationContext更加方便我们扩展JEE的应用
1 方便解耦,便于开发
2 spring支持aop编程
3 声明式事务支持
4 方便程序的测试
5 方便集成各种优秀的框架()
6降低javaEE ApI的使用难度

91.解释一下什么是 aop?
他是一种称为“横切“的技术。剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名“Aspect”

日志处理
92.解释一下什么是 ioc?
ioc意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转。这样可以解耦,提高程序的可扩展性。

SpringBean容器是用来创建bean对象,和管理bean对象的容器。

Spring IOC 容器本质上指的就是SpringBean容器,SpringBean容器的一个核心机制就是IOC机制(控制反转)。
93.spring 有哪些主要模块?

94.spring 常用的注入方式有哪些?

95.spring 中的 bean 是线程安全的吗?

96.spring 支持几种 bean 的作用域?

97.spring 自动装配 bean 有哪些方式?

98.spring 事务实现方式有哪些?

99.说一下 spring 的事务隔离?

赃读:赃读就是指一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。

不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事物也访问该同一事务也访问了该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的数据可能是不一样的。这样就发生了一个事物两次读到的数据不一样的情况。

幻读:是指当事物不是独立执行时发生的一种假象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据。同时第二个事务也修改了这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还没有修改的数据行,就像发生了幻觉一样。
100.说一下 spring mvc 运行流程?

1客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配前端控制器的请求映射路径,web容器将请求转交给DispatchServlet
2DispatcherServlet接收到这个请求之后将根据请求的信息以及处理器映射器(handlerMapping)的配置找到处理请求的处理器(Handler)
3由具体的处理器适配器(HandlerAdapter)对Handler进行具体的调用
4Handler对数据处理完成后将返回一个ModelAndView()对象给DispatcherServlet.
5DispatcherServlet通过视图解析器(viewResolver)将ModAndView()转化为真正的视图View.
6DispatcherServlet通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view给客户端

101.spring mvc 有哪些组件?

DispatcherServlet是前端控制器,配置在web.xml文件中,拦截匹配的请求。与SpringIoc容器无缝衔接,从而获得Spring的所有好处

HandlerMapping是处理器映射器,他的作用是请求派发,负责请求和控制器建立对应的关系。

Controller控制器,负责处理由DispatcherServlet分发的请求,他把用户请求的数据经过业务处理层处理之后封装成一个Model,然后返回对应的View进行展示。

ModdelAndView 封装数据信息的模型。使用ModelAndView类用来储存处理完成的数据,以及显示该数据的视图

ViewResolver视图解析器,ViewResolver的主要作用是吧一个逻辑上的视图解析称为一个真正的视图。

102.@RequestMapping 的作用是什么?
@RequestMapping是一个注解,用来标识http请求地址与Controller类的方法之间的映射
103.@Autowired 的作用是什么?
是一个注释,他可以对成员变量,方法及构造函数进行标注,让spring的完成bean自动装配的装配工作。
默认是按照类去匹配,配合@QualiFiier指定按照名称去装配bean.

114.什么是 ORM 框架?
对象关系映射模式是一种为了解决面想对象与关系数据库存在的互不匹配的现象技术。
ORM通过描述对象和数据库之间的映射元数据,将程序中的对象自动持久化到关系数据库中。
120.get()和 load()的区别?

十三、Mybatis

125.mybatis 中 #{}和 ${}的区别是什么?

#将传入的数据都当成一个字符串,会对传入的数据自动加上引号
将 传 入 的 数 据 直 接 显 示 生 成 S Q L 中 注 意 : 使 用 将传入的数据直接显示生成SQL中 注意:使用 SQL使占位符可能会导致SQL注入攻击,能用#的地方就不要使用 , 写 o r d e r b y 字 句 的 时 候 应 该 使 用 ,写order by字句的时候应该使用 ,orderby使而不是#。
126.mybatis 有几种分页方式?

128.mybatis 逻辑分页和物理分页的区别是什么?

129.mybatis 是否支持延迟加载?延迟加载的原理是什么?

130.说一下 mybatis 的一级缓存和二级缓存?

Mybatis的一级缓存是指Session缓存,一级缓存的作用域默认是一个SqlSession.mybatis默认时开启一级缓存,也就是在同一个SqlSession中,执行相同的查询SQL,第一次会去数据库进行查询,并写道缓存中;第二次以后是直接去缓存中取。
当执行SQL查询中间发生了增删改的操作,MyBatis会把SqlSession的缓存清除。

Mybatis的二级缓存是指mapper映射文件,二级缓存的作用域是同一个namespace下的mapper映射文件内容,多个SqlSession共享。Mybatis需要手动设置启动二级缓存。
二级缓存是默认启用的,如果取消,则可以通过Mybatis配置文件的元素下的子元素来指定cacheenable为false

131.mybatis 和 hibernate 的区别有哪些?

132.mybatis 有哪些执行器(Executor)?

133.mybatis 分页插件的实现原理是什么?

134.mybatis 如何编写一个自定义插件?

十七、MySql

164.数据库的三范式是什么?
第一范式:字段不可再分
第二范式:数据库表中的非主属性只依赖与主键
第三范式:不存在非主属性对关键字的传递函数依赖关系

165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

166.如何获取当前数据库版本?

167.说一下 ACID 是什么?

168.char 和 varchar 的区别是什么?

169.float 和 double 的区别是什么?

170.mysql 的内连接、左连接、右连接有什么区别?

171.mysql 索引是怎么实现的?

172.怎么验证 mysql 的索引是否满足需求?

173.说一下数据库的事务隔离?

174.说一下 mysql 常用的引擎?

175.说一下 mysql 的行锁和表锁?

176.说一下乐观锁和悲观锁?

177.mysql 问题排查都有哪些手段?

178.如何做 mysql 的性能优化?

十九、JVM

194.说一下 jvm 的主要组成部分?及其作用?

195.说一下 jvm 运行时数据区?

196.说一下堆栈的区别?

201.java 中都有哪些引用类型?

202.说一下 jvm 有哪些垃圾回收算法?

203.说一下 jvm 有哪些垃圾回收器?

204.详细介绍一下 CMS 垃圾回收器?

205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

206.简述分代垃圾回收器是怎么工作的?

207.说一下 jvm 调优的工具?

208.常用的 jvm 调优的参数都有哪些?

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值