java面试100题。

一、Java 基础

1.JDK 和 JRE 有什么区别?

jdk 是java的开发工具包,jre是java开发的运行环境

2.== 和 equals 的区别是什么?

== 比较的是内存中的地址是否相等,equals比较的是内容是否相等

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

两个对象相等,他们的hashcode()一定相等,

两个对象的hashcode()相等,equal()不一定为true。

hashcode相等即是两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等

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

修饰的类不能被继承

修饰的方法不能被重写

修饰的变量叫做常量,常量必须初始化,初始化之后不能修改了

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

-1

6.String 属于基础的数据类型吗?

不是 基本类型是 :int ,short char long byte boolean double float

string 属于对象

7.java 中操作字符串都有哪些类?它们之间有什么区别?

String ,StringBuffer,Stringbuilder

区别:

string 声明的是不可修改的对象,每次操作都会生成一个新的string对象

stringbuffer,和stringbuilder可以在原对象的基础上进行操作,所以经常改变字符串的情况不要使用string

stringbuffer和stringbuilder的区别就是,stringbuffer线程安全,stringbuilder是非线程安全的。

stringbuilder的性能高于stringbuffer,所以在单线程环境下推荐使用stringbuilder,  多线程环境下推荐使用stringbuffer

8.String str="i"与 String str=new String("i")一样吗?

不一样 因为内存的分配方式不一样,string str="i"  java 虚拟机会将其分配到常量池中。而string str=new string(“i”)则会被分配到堆内存中

9.如何将字符串反转?

使用stringbuilder或者stringbuffer的reverse()方法。

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

indexOf():返回指定字符的索引。

charAt():返回指定索引处的字符

replace():字符串替换

trim():去除字符串两端的空白

split()分割字符串返回一个分割后的字符串数组

getbytes():返回字符串的byte类型数组

length()返回字符串的长度

toLowercase():将字符串转换成小写字母

toUpperCase():将字符串转成大写字符

substring():截取字符串。

equals()。比较字符串

11.抽象类必须要有抽象方法吗?

抽象类不一定非要有抽象方法 。

12.普通类和抽象类有哪些区别?

普通类不能包含抽象方法,抽象类可以包含抽象方法

抽象类不能直接实例化,普通类可以实例化。

13.抽象类能使用 final 修饰吗?

不能,定义了抽象类就是让其他类继承的,如果用了final 该类就不能继承了。则彼此产生矛盾,编译器报错。

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

实现:抽象类的子类使用extends来继承,接口必须使用implements来实现接口。

构造函数:抽象类可以有构造函数,接口不能有构造函数

实现数量:类可以实现多个接口。但是只能继承一个抽象类。

访问修饰符:接口的方法默认使用public修饰;抽象类中的方法可以是任意访问修饰符。

15.java 中 IO 流分为几种?

按照功能划分:输入流input,输出流output

按照类型划分:字节流和字符流

字节流和字符流的区别: 字节流按8位传输 ,以字节为单位输入输出数据。字符流按16位传输 以字符为单位输入输出数据。

以InputStream(输入)/OutputStream(输出)为后缀的是字节流;

          以Reader(输入)/Writer(输出)为后缀的是字符流。

16.BIO、NIO、AIO 有什么区别?

17.Files的常用方法都有哪些?

exists() :检测文件路径是否存在

creatFile():创建文件。

creatdirectory():创建文件夹

delete():删除一个文件或目录

copy():复制文件。

move():移动文件

size():文件的个数

read():读文件

write():写文件

二、容器

18.java 容器都有哪些?

容器分为collection 和Map两大类

collection里面有list  (arraylist ,linkedlist,vector stack)

                        set (hashset,linkedhashset,treeset)

map 里面有  hashmap (linkhashmap)

                  treemap

                   hashtable

19.Collection 和 Collections 有什么区别?

collection 是一个集合接口,它提供了对集合对象的基本操作通用的接口方法,所有的集合都是他的子类,list set

collections 是一个包装类,包含了很多静态方法不能被实例化,就像一个工具类。

20.List、Set、Map 之间的区别是什么?

list 元素有序,允许元素重复

set---abstractset和hashset元素不有序,不允许元素重复

        treeset 元素有序,但是不允许元素重复

map --abstractmap 和hashmap元素无序,key值唯一,value可以重复

          treemap 元素有序   key值唯一,value可以重复 

21.HashMap 和 Hashtable 有什么区别?

存储:hashmap运行key和value为空 而hashtable不允许为空

线程安全:hashtable 线程安全  hashmap线程不安全。

推荐使用:在hashtable的类注释可以看到,hashtable是保留类不建议使用,推荐在单线程环境 下使用 hashmap替代。如果需要多线程使用则用concurrenthashmap

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

对于在map中插入,删除,定位 一个元素这类操作,hashmap是最好的选择,因为相对而言hashmap的插入会更快。如果你要对一个可以集合进行有序的遍历,那treemap更好的选择。

23.说一下 HashMap 的实现原理?

24.说一下 HashSet 的实现原理?

25.ArrayList 和 LinkedList 的区别是什么?

arraylist底层是数组 线程不安全 查询快增删慢

linkedlist底层是链表 线程不安全 ,查询慢 增删快

26.如何实现数组和 List 之间的转换?

数组转换list:array.asList()

list转换数组:使用list自带的toarray()

27.ArrayList 和 Vector 的区别是什么?

线程安全: vector 使用了synchronized(see课瑞拉..的)来实现线程同步 ,线程是安全的, 而ArrayList是非线程安全

 性能: ArrayList 在性能方法要优于vector。

扩容:两者都要根据实际需要动态的调用容量。只不过在vector扩容每次回增加1倍 而ArrayList 只会增加50%

28.Array 和 ArrayList 有何区别?

array 可以存储基本数据类型和对象  ArrayList只能存储对象。

array 是指定固定大小的,而ArrayList大小是自动扩展的。

array内置的方法没有ArrayList多。addall()removeall()都是ArrayList特有的

29.在 Queue 中 poll()和 remove()有什么区别?

30.哪些集合类是线程安全的?

vector hashtable,stack 线程安全 

hashmap线程非安全,但是有对应的线程安全类是concurrenthashmap

31.迭代器 Iterator 是什么?

iterator 接口提供遍历任何collection的接口。

32.Iterator 怎么使用?有什么特点?

Iterator的特点安全,他可以确保在遍历集合的时候元素被改变的时候,会抛出异常。

33.Iterator 和 ListIterator 有什么区别?

Iterator可以遍历set和list 集合 而ListIterator只能遍历list

ListIterator可以双向遍历,Iterator只能单向遍历

34.怎么确保一个集合不能被修改?

可以使用collections.unmodifiablecollection()方法来创建一个集合,这样改变集合的任何操作都会抛出异常。

三、多线程

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

并行:多个处理器或者多核处理器同时处理多个任务

并发:多个任务在用一个cpu核上,按细分的时间片轮流执行,从逻辑上面看是同时执行的。

36.线程和进程的区别?

一个程序下至少有一个进程,一个进程下至少有一个线程,一个进程下也可以有多个线程来增加程序的执行速度。

37.守护线程是什么?

守护线程是运行在后台的一种特殊进程,在java中垃圾回收线程就是特殊的守护线程

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

三种方法:

   继承thread 重写run方法

   实现runnable接口

   实现callable接口

39.说一下 runnable 和 callable 有什么区别?

runnable没有返回值 ,callable可以拿到返回值,callable可以看作是runnable的补充。

40.线程有哪些状态?

NEW 未启动

RUNNABLE正在执行中

41.sleep() 和 wait() 有什么区别?

类的不同:sleep()来自thread,wait()来自object

释放锁:sleep()不释放锁,wait()释放锁

用法不同:sleep()时间到了会自动恢复,wait()可以使用notify()/notifyAll()直接唤醒。

42.notify()和 notifyAll()有什么区别?

notifyAll()唤醒所有进程

notify()唤醒一个进程。

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

start()方法用于启动线程,run()方法用于执行线程的运行代码,run()可以重复调用,而start只能调用一次

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

7种方式,

最核心的方式是:

threadpoolexecutor():最原始的线程池创建

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

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

execute():只能执行runnable类型的任务

submit  :可以执行runnable和callable类型的任务

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

一使用安全类:java.util.concurrent下的类

二使用:自动锁synchronized

三使用:手动锁lock

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

49.什么是死锁?

50.怎么防止死锁?

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

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

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

54.synchronized 和 Lock 有什么区别?

55.synchronized 和 ReentrantLock 区别是什么?

56.说一下 atomic 的原理?

四、反射

57.什么是反射?

反射是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性;

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

保存各种对象在内存中的状态,并且可以保存对象状态再读出来。

以下是使用java序列化的情况:

     把内存中的对象状态保存到一个文件中或者数据库中的时候

   

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

动态代理是运行时动态生成代理。

动态代理的运用有 spring aop hibernate数据查询 ,java注解对象获取

60.怎么实现动态代理?

jdk原生动态代理和cglib动态代理;

jdk原生动态代理:基于接口实现的

cglib动态代理:基于继承当前类的子类实现的。

五、对象拷贝

61.为什么要使用克隆?

62.如何实现对象克隆?

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

六、Java Web

64.jsp 和 servlet 有什么区别?

jsp可就是servlet 技术的扩展,本质上就是servlet的简易方式。

servlet和jsp最主要的不同点在于,servlet 的应用逻辑是在java文件中,并且完全是从表示层中的HTML里面分离出来的

而jsp的情况是java和HTML可以组合成的一个扩展名为jsp的文件,jsp 侧重于视图,servlet侧重于逻辑控制

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

response:封装服务器对客户端的响应。

request:封装客户端的请求,包含来自get和post的请求

page:jsp页面本身

pagecontext:通过该对象可以获取其他对象

config:web应用的配置对象

application:封装服务器运行的对象

out:输出服务器响应的输出流对象

session:封装用户会话的对象

exception:封装页面抛出异常的对象

66.说一下 jsp 的 4 种作用域?

名称

作用域

application

在所有应用程序中有效

session

在当前会话中有效

request

在当前请求中有效

page

在当前页面有效

page:代表与一个页面相关的对象和属性

request:代表与客户端发出的请求相关的对象和属性,一个请求可以跨越多个页面,涉及多个web组件;需要在页面显示的临时数据可以置于此多用域

session:代表与某个用户与服务器建立的一次会话相关的对象和属性。跟某个用户相关的数据应该放在用户自己的session中

application:代表整个web应用程序相关的对象和属性,他的实质上就是跨越整个web应用程序,包括多个页面,请求和会话的一个全局作用域

67.session 和 cookie 有什么区别?

存储位置不同:session存储在服务器端,cookie存储在浏览器端

安全性不同:cookie安全性一般。在浏览器存储,可以被伪造和修改。

容量和个数的限制:cookie容量有限,每个站点下的cookie也有个数限制。

存储的多样性:session可以存储在Redis中,数据库中,应用程序中;而cookie只能存储在浏览器中

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

客户端登录之后,服务器创建对应的session ,session创建完之后,会把session的id发送给客户端,客户端在存储到浏览器中。

这样客户端每次访问服务器时,都带着sessionid,服务器拿到sessionid之后,在内存找到与之对应的session这样就可以正常工作了。

69.如果客户端禁止 cookie 能实现 session 还能用吗?

可以 session只是依赖cookie存储sessionid ,如果cookie被禁用了,可以使用URL 中添加sessionid 的方式保证session能正常使用。

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

拦截级别:struct2是类级别的拦截,springMVC是方法级别的拦截。

拦截机制:struct2 有自己的interceptor机制,springmvc 用的是独立的aop方式。这样导致struct2配置文件量比springmvc大

对ajax的支持:springmvc 集成了ajax 所有的ajax使用很方便,只需一个注解@ResponseBody就可以实现了。而struct2一般需要安装插件或者自己写代码才行。

71.如何避免 sql 注入?

使用预处理 preparedstatement

使用正则表达式过滤字符中的特殊字符

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

对于输入的数据做过滤处理

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

关键操作添加验证码

在请求地址添加token并验证

七、异常

74.throw 和 throws 的区别? 

throw:是真实抛出一个异常

throws:是声明可能会抛出一个异常

75.final、finally、finalize 有什么区别?

final:是修饰符,如果修饰类,该类不能被继承,如果修饰变量和方法,则该方法和变量不可改变,只能使用。

finally:是try{}catch{}finally{} 最后一部分,表示不论发生任何情况都会执行,

          finally 部分可以省略,但是如果finally部分存在,则移动会执行finally里面的代码。

finalize:是object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

76.try-catch-finally 中哪个部分可以省略?

其中 catch和finally 都可以省略,但是不能同时省略

,也就是说有try的时候,必须后面跟一个catch或者finally。

77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

finally 一定会执行,即使catch中return了 catch中return 会等finally 中的代码执行完之后,才会执行。

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

空指针异常:nullpointexception

指定类不存在:classnotfoundexception

 字符串转换为数字异常:numberformatexception

数组下标越界异常:indexoutofboundsecxeption

数据类型转换异常:classcastexception

文件找不到异常:filenotfoundexception

方法不存在异常:nosuchmethodexception

io异常:IOexception

Socket异常:sockstexception

八、网络

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

301永久重定向,对搜索引擎优化更加有利。

302暂时重定向,有被提示为网络拦截的风险。

80.forward 和 redirect 的区别?

forward是转发和redirect是重定向

  地址栏URL显示:forward URL不会发生改变,redirect URL会发生改变

数据共享: forward 可以共享request里面的数据,redirect不能共享。

效率:forward比redirect效率高

81.简述 tcp 和 udp的区别?

tcp 和udp是osi模型中的运输层中的协议。

tcp提供可靠的通讯传输,

udp用于让广播和细节控制交给应用的通信传输。

82.tcp 为什么要三次握手,两次不行吗?为什么?

如果两次握手的话,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直等待客户端,这样服务器端就白白浪费资源。若采用三次握手,服务器端没有收到来自客户端的再此确认,则就会知道客户端并没有要求建立请求,才不会浪费服务器资源。

83.说一下 tcp 粘包是怎么产生的?

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

物理层

数据链路层

网络层

传输层

会话层

表示层

应用层

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

get请求会被浏览器主动缓存,而post不会。

get传递参数有大小限制,post没有

post参数更安全,get的参数会明文限制在URL上,post不会。

86.如何实现跨域?

87.说一下 JSONP 实现原理?

九、设计模式

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

单例模式:保证被创建一次,节省系统开销

工厂模式:解耦代码

观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有依赖都会收到通知并自动更新

89.简单工厂和抽象工厂有什么区别?

简单工厂:用来生产同一等级结构中的任意产品,对于增加新的产品,无能为力

工厂方法:用来生产同一等级结构中的固定资产品,支持增加任意产品。

抽象工厂:用来生产不同产品族的全部产品,对于增加新的产品,无能为力;支持增加产品族。

十、Spring/Spring MVC

90.为什么要使用 spring?

spring提供IOC技术 容器会自动帮你管理依赖的对象,不需要自己创建和管理对象,更轻松的实现了程序的解耦

spring 提供了事务支持,使得事务操作变的更加方便。

spring 提供面向切面编程,这样可以更方便的处理某一类问题。

更方便框架的集成,比如mybatis,hibernate。

91.解释一下什么是 aop?

面向切面编程:  同一处理,统一维护某一问题的编程思想。比如统一日志,异常。

92.解释一下什么是 ioc?

控制反转,简单说就是控制当前对象内部成员的控制权,控制反转指 这种控制权不由当前对象管理,由其他第三方或者类来管理

93.spring 有哪些主要模块?

spring core :框架的最基础的部分,提供IOC和依赖注入特性

spring aop :提供了面向切面的编程实现,可以自定义拦截器和切点。

springweb :提供面向切面的编程实现,让你可以自定义拦截器和切点

 springweb MVC :等等

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

setter属性注入

构造方法注入

注解注入

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

spring 中的bean是单例模式,spring 框架并没有单例bean进行多线程的封装处理。

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

request: 每次请求都会创建一个bean

session:同一个httpsession 共享一个bean实例

。。。。。。

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

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

声明试事务:声明式事务也有两种实现方式,基于xml配置文件的方式和注解方式(@transcation注解)

编码方式: 提供编码的形式管理和维护事务。

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

100.说一下 spring mvc 运行流程?

先是将请求发送给dispatcherservlet. 然后dispatcherservlet查询一个或者多个handlemapping

找到处理请求的controller ,dispatcherservlet 再把请求提交到对应的controller

controller进行业务逻辑处理后会返回一个modelandview。 dispatcher查询一个或者多个viewresolver视图解析器,

找到modelandview 对象指定的视图对象。视图对象负责渲染返回客户端。

101.spring mvc 有哪些组件?

前置控制器dispatcherservlet .

映射控制器handermapping

处理器controller

模型和视图 modelandview

视图解析器viewresolver

102.@RequestMapping 的作用是什么?

将http请求映射到相应的类方法上

103.@Autowired 的作用是什么?

他可以对类的成员变量,方法以及构造函数进行标注,完成自动装配的工作,消除get,setf方法

。。。。。。待续

十一、Spring Boot/Spring Cloud

104.什么是 spring boot?

105.为什么要用 spring boot?

106.spring boot 核心配置文件是什么?

107.spring boot 配置文件有哪几种类型?它们有什么区别?

108.spring boot 有哪些方式可以实现热部署?

109.jpa 和 hibernate 有什么区别?

110.什么是 spring cloud?

111.spring cloud 断路器的作用是什么?

112.spring cloud 的核心组件有哪些?

十二、Hibernate

113.为什么要使用 hibernate?

114.什么是 ORM 框架?

115.hibernate 中如何在控制台查看打印的 sql 语句?

116.hibernate 有几种查询方式?

117.hibernate 实体类可以被定义为 final 吗?

118.在 hibernate 中使用 Integer 和 int 做映射有什么区别?

119.hibernate 是如何工作的?

120.get()和 load()的区别?

121.说一下 hibernate 的缓存机制?

122.hibernate 对象有哪些状态?

123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

124.hibernate 实体类必须要有无参构造函数吗?为什么?

十三、Mybatis

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

126.mybatis 有几种分页方式?

127.RowBounds 是一次性查询全部结果吗?为什么?

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

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

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

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

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

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

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

十四、RabbitMQ

135.rabbitmq 的使用场景有哪些?

136.rabbitmq 有哪些重要的角色?

137.rabbitmq 有哪些重要的组件?

138.rabbitmq 中 vhost 的作用是什么?

139.rabbitmq 的消息是怎么发送的?

140.rabbitmq 怎么保证消息的稳定性?

141.rabbitmq 怎么避免消息丢失?

142.要保证消息持久化成功的条件有哪些?

143.rabbitmq 持久化有什么缺点?

144.rabbitmq 有几种广播类型?

145.rabbitmq 怎么实现延迟消息队列?

146.rabbitmq 集群有什么用?

147.rabbitmq 节点的类型有哪些?

148.rabbitmq 集群搭建需要注意哪些问题?

149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

151.rabbitmq 对集群节点停止顺序有要求吗?

十五、Kafka

152.kafka 可以脱离 zookeeper 单独使用吗?为什么?

153.kafka 有几种数据保留的策略?

154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

155.什么情况会导致 kafka 运行变慢?

156.使用 kafka 集群需要注意什么?

十六、Zookeeper

157.zookeeper 是什么?

158.zookeeper 都有哪些功能?

159.zookeeper 有几种部署模式?

160.zookeeper 怎么保证主从节点的状态同步?

161.集群中为什么要有主节点?

162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

163.说一下 zookeeper 的通知机制?

十七、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 的性能优化?

十八、Redis

179.redis 是什么?都有哪些使用场景?

180.redis 有哪些功能?

181.redis 和 memecache 有什么区别?

182.redis 为什么是单线程的?

183.什么是缓存穿透?怎么解决?

184.redis 支持的数据类型有哪些?

185.redis 支持的 java 客户端都有哪些?

186.jedis 和 redisson 有哪些区别?

187.怎么保证缓存和数据库数据的一致性?

188.redis 持久化有几种方式?

189.redis 怎么实现分布式锁?

190.redis 分布式锁有什么缺陷?

191.redis 如何做内存优化?

192.redis 淘汰策略有哪些?

193.redis 常见的性能问题有哪些?该如何解决?

十九、JVM

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

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

196.说一下堆栈的区别?

197.队列和栈是什么?有什么区别?

198.什么是双亲委派模型?

199.说一下类加载的执行过程?

200.怎么判断对象是否可以被回收?

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

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

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

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

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

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

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

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

发布了15 篇原创文章 · 获赞 5 · 访问量 4469

猜你喜欢

转载自blog.csdn.net/qq_37139773/article/details/101210603