java面试题整理(三年以下)

1、作为一个java初级程序员必备技能
a.熟悉java基础、面向对象、JVM、IO流程、多线程、集合框架
b.熟悉JSP、Servlet、Spring、Hibernate、SpringMVC
c.熟悉Http协议、Socket、WebService及网络编程
d.熟悉Maven及Linux常用命令
e.项目相关知识

2、&与&&的区别(|与||)
&与&&都是逻辑运算符,都是判断两边同时满足为真,如果判断条件中有一个为假,则整个判断不通过;
但是&&当第一个条件不成之后,后面的条件也不会执行,
而&则还是继续执行,直到整个条件执行完为止

3、使用final关键字修饰一个变量,是引用不能变,还是引用的对象不能变
使用final关键字修饰一个变量时,是指引用变量不能变,
引用变量所指向的对象中的内容还是可以改变的
一旦声明对象,对象存放在堆里,一旦存放在堆里,java虚拟机会分配一个唯一的内存地址,
它的地址不可以改变,而对象内容是可以改变的

4、静态变量与实例变量的区别
a.静态变量前要加static关键字,而实例不加
b.在程序运行时的区别,实例变量属于某个对象的属性,必须创建这个实例对象,
其中的实例变量才会分配空间,才能使用这个实例变量
c.静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的
字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以使用了
d.实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以通过类名来引用
e.静态变量使用时,通过类名.名称,实例变量必须要初始化才能使用。实例变量是实例化
后才分配空间,而静态变量当类加载时才会分配空间
f.静态方法不可以调用非static方法的,而非static方法可以引用static方法

5、==与equals有什么区别
==判断值类型,内容是否相等,判断引用类型时,是判断地址是否相等
equals判断内容是否相等

6、Integer与int的区别
a.int值类型,Integer是引用类型
b.int默认值是0,Integer默认值null
c.Integer还有parseInt等方法

7、访问修饰符作用域
public:本类、同一包类、子孙类、其他包类
protected:本类、同一包类、子孙类
缺省:本类、同一包类
private:本类

ps:利用反射可以获取类的私有构造方法,属性和方法(Declared?)

8、面向对象(封装、继承、多态)
a.重载与重写的区别
重载是同一个类中,方法名是相同的,但是参数或个数不同,与返回值类型没有关系
重写是在多个类中,产生继承关系,父类与子类的方法必须相同
b.接口与抽象类的区别
不同
实现接口关键字是interface,而定义抽象类关键字是abstract
接口中成员不能有私有,抽象类可以
接口中定义的成员,是public static final类型,抽象类没有
接口中不能有普通方法,抽象类可以
相同
两者都不能new

9、final、finally、finalize的区别
final用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖,类不可继承
内部类要访问局部变量,局部变量必须定义成final类型
finally是异常处理语句结构的一部分,表示总是执行
finalize是Object类的一个方法,垃圾回收机制,当垃圾回收的时候会调用此方法

10、String、StringBuffer与StringBuilder的区别
a.String是字符串常量
b.StringBuffer是字符串变量(线程安全)
c.StringBuilder是字符串变量(非线程安全)

11、你用过的object类的直接子类有哪些,object类的常用方法有那些
a.clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出
CloneNotSupportedException异常。
b.getClass方法
final方法,获得运行时的类型
c.toString方法
该方法用得比较多,一般子类都有覆盖
d.finalize
该方法用于释放资源,很少使用
e.equals
f.hashcode
g.notify、notifyall
h.wait

12、数组有没有length()方法,String有没有length()方法
数组没有length()方法,但是有length属性,String有length()方法

13、浅谈hashCode方法:

Set和Map(键)不重复的底层实现原理,hashCode方法返回值是int(哈希码),也是判断值是否相等,不过它相对于equals方法来说,判断的不是特别全面,所以效率上是比equals方法高的,equals方法相等,hashCode就肯定相等,但是equals方法不相等,hashCode方法就肯定不相等,也就是说hashCode不相等,equals方法就肯定不相等,所以Set和Map底层判断是否重复,先用hashCode判断再用equals判断

14、异常
a、Error和Exception的联系
Error和Exception都继承于Throwable,RuntimeException继承自Exception
b、Error和Exception的区别
Error类一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、内存不足、方法调用栈溢出等,对于这类错误,
java编译器不去检查他们,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复,遇到这类异常建议修复,而不是终止。

15、多线程
a.多线程是指从软件或者硬件上实现多个线程并发的技术,提高效率
b.进程是操作系统级别的,分配内存的任务单位
c.线程是程序内部的,共享进程内存的执行单位

16、线程的五个基本状态
a.新建状态:线程创建后进入新建状态,继承Thread类,重写run()方法
b.就绪状态:当调用线程对象start()方法,进入就绪状态,随时等待cpu调度执行
c.运行状态:当cpu开始调度处于就绪状态的线程,进入运行状态
d.阻塞状态:运行状态的线程因某原因,暂时放弃对cpu的使用权,停止执行,直到再次放入就绪状态,才有机会运行,阻塞三分种
1、等待阻塞:wait()
2、同步阻塞:synchronized
3、其他阻塞:sleep()、join()、I/O请求、死亡
e.死亡状态

17、关于线程其他基础知识
a、yield()失去cpu,回到就绪状态,把cpu交给同优先级的线程,yield()依然是随机的,该线程仍然可能会进入运行状态
b、关于停止一个线程,boolean来退出run()方法的循环或取消任务
c、sleep()休眠让给其他线程,不释放对象锁,需catch捕获异常。
d、wait()暂停执行,释放对象锁
e、join()优先执行

18、线程同步与异步
a.同步:当前线程执行完后下一个线程接着执行
b.异步:在一个应用程序中,同时有多个不同的执行路径(ajax)

19、什么是线程不安全
多个线程共享同一个数据会受到其他线程干扰

20、如何创建一个线程,继承Thread类或者实现Runnable接口,并重写run方法,调用start(),进入就绪状态30

ps:也有一个特殊的方式实现多线程,就是继承Callable接口,利用Future获取返回值,这种多线程是有返回值的,

所以个人所知道的是三种
 

21、集合框架
a、Collection与Collections的区别
Collection是Set(LinkedHashSet、HashSet、TreeSet)、
List(ArrayList(数组)、Vector、LinkedList(链表实现))、
Queue(PriorityQueue)的根接口,Collections是提供集合操作的工具类。
b、Map(Hashtable、LinkedHashMap、HashMap(数组+链表)、TreeMap)
c、迭代器
d、Set无序不重复、List有序重复、Map键值对

22、什么是数组,什么是链表
a.数组就是相同数据类型的元素按照一定顺序排列的集合
特点:占用内存大,查询简单,增删困难
b.链表是一种物理储存单元上非连续、非顺序的储存结构
特点:内存宽松,相对数组查询困难,增删容易

23、什么是哈希表
间距前两者优点,链表与数组的组成,map是由哈希表实现

24、ArrayList与Vector的区别
这两个类都实现了List接口继承了Collection接口,都是有序的集合,底层实现方式都是动态的
数组。
区别:ArrayList线程不安全,多线程建议Vector

25、HashMap与HashTable的区别
都实现了Map接口,HashMap是HashTable的轻量级实现,HashMap可以储存null键值对,HashTable不可以,
HashMap线程不安全,效率比较高,HashTable线程安全

26、HashSet与TreeSet的区别
a.HashSet不重复,无序
b.TreeSet不重复,有序

27、泛型
参数化类型,安全简单,编译期间会检查类型安全,并且所有的强制类型转换都是自动和隐式的,以提高代码重用率

28、Collection的方法
a.sort()
b.addAll()
c.max()
d.min()
e.copy()

29、集合数组优缺点
数组必须定义长度,只能装同一类型
集合不需要

30、TCP/IP具体通信(转载)
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则往应用层往上走。
我们用HTTP举例来说明,首先作为发送端的客户端在应用层(HTTP协议)发出一个想看某个Web页面的HTTP请求。
接着,为了传输方便,在传输层(TCP协议)把从应用层处收到的数据(HTTP请求报文)进行分割,
并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP协议),增加作为通信目的地的MAC地址后转发给链路层。
这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。
当传输到应用层,才能算真正接收到由客户端发送过来的HTTP请求。

---------------------

第30条来自CSDN博主朋友,

请点击:https://blog.csdn.net/agzhchren/article/details/79173491?utm_source=copy 

31、Xml(报文)与Json的区别
a.相同点:两者都是数据交换格式
b.xml是重量级、json是轻量级
c.xml比较占带宽、json占带宽小,易于压缩
d.json在webservice用的比较少、xml用的较多

32、TCP与UDP区别
UDP:
a.是面向无连接,将数据源的封装在数据包中,不需要建立连接
b.每个数据包的大小限制在64k内
c.因无连接,是不可靠协议
d.不需要建立连接,速度快
TCP:
a.建立连接,形成传输数据的通道
b.在连接中进行大数据量传输,以字节流的方式
c.通过三次握手完成连接,是可靠协议
d.必须建立连接,效率会较低

33、说说三次握手
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN: 同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

34、什么是Webservice
Webservice就是提供不同的平台相互通讯,基于Soap协议。
Web service就是一个应用程序,它向外界暴露一个能够通过Web进行调用的API
SOAP是一个简单基于xml的轻量协议,用户web上交换结构化信息和类型信息
soap请求是Http Post的一个专用版本,遵循一种特殊的xml消息格式
Content-type设置为:text/xml任何数据都可以xml化

35、WebService实现原理是
HTTP协议+XML

36、HTTP协议是什么
对客户端和服务端之间数据传输的格式规范,格式称之为"超文本传输协议"

37、什么是http协议无状态协议,怎么解决http协议无状态
a.无状态协议对于事务处理没有记忆功能,缺少状态意味着如果后续处理需要前面的信息
b.通过Cookie或者Session保存

38、http状态码

200:请求成功

500:语法错误

502:错误网关

404:请求页面不存在

39、http协议由什么组成
请求报文包含三部分
a.请求行(包含请求方法、URI、Http版本信息)
b.请求首部字段
c.请求内容实体
响应报文包含三部分
a.响应行(包含http版本、状态码、状态码的原因短语)
b.响应首部字段
c.响应内容实体

40、http协议请求方式
a.GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
b.POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
c.PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
d.HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
e.DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件

41、HTTP1.0与HTTP1.1的区别
1.0每次请求结束后都会关闭连接,然后发送新的请求就会重新建立连接,这样会导致很多问题,
1.1每次连接可以发送多个请求。

42、HTTP协议实现原理机制

43、http与https的区别
https具有安全通信线路认证,完全性的保护

44、Http协议有哪些特征
a.支持客户/服务器模式
b.简单快捷
c.灵活
d.无连接
e.无状态

45、Servlet的执行流程,doGet和doPost的区别
a、实例化,初始化(init()),处理请求,进行销毁(destroy())
b、doGet处理get请求,doPost处理Post请求,doGet用于地址栏提交,doPost用于表单提交

46、Jsp中重定向与转发的区别
a.重定向是客户端行为,转发是服务器行为
b.重定向会导致request对象丢失,转发不会
c.重定向向服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的网站
转发只能在当前项目里转发
d.转发url不会变request.getRequestDispatch().forward()
e.重定向url会改变response.getRedirect()

47、Jsp和Servlet的区别
a.Jsp的可读性强,容易维护,并且jsp最后会编译成servlet
b.Servlet容易调试
c.Jsp更多的是用于表示层,写html代码

48、Session常用方法
getSession、set/getAttribute等

49、Jsp九大内置对象
a.Request:对当前请求进行封装
b.Response:返回服务器端信息给用户
c.Session:浏览器会话对象,浏览器范围内有效
d.Application:应用程序对象,对整个web工程都有效
e.Page:当前页面对象,也就是this
f.PageContext:只对当前jsp页面有效,里面封装了基本的request和session的对象
g.Out:页面打印对象,在jsp页面打印字符串
h.Config:单个Servlet的配置对象,相当于servletConfig对象
i.Excepetion:错误页面的exception对象

50、Jsp三大指令
a.Page:指令是针对当前页面的指令
b.Include:用于指定如何包含另一个页面
c.Taglib:用于定义和指定自定义标签

51、Jsp七大动作
a.Forward:执行页面跳转,将请求的处理转发到另一个页面
b.Include:用于动态引入一个jsp页面
c.Param:用于传递参数
d.Plugin:用于下载javaBean或applet到客户端执行
e.useBean:用于javaBean
f.setProperty:修改javaBean实例的属性值
g.getProperty:获取javeBean实例的属性值

52、获取页面的元素和值有几种方式
a.request.getParameter()返回客户端的请求参数与值
b.request.getParameterNames()返回所有可用属性名的枚举
c.request.getParameterValues()返回包含参数的所有值的数组

53、jsp与javaScript的区别
a.前者服务端基于java,后者客户端基于html
b.Servlet是独立于平台和协议的服务端的java应用程序,可以动态生成web页面,
并采用响应和请求的模式提供web服务
c.JavaScript是一种解释性语言,用于与html页面提供交互

54、Jsp执行原理
客户端发出请求,jsp引擎将jsp页面翻译成servlet的java源文件,在tomcat中将
源文件编译成class文件,并加载到内存中执行,把结果返回给客户端

55、Html和Servlet的异同
a.html是静态,servlet是动态
b.html页面有服务器直接返回
c.servlet是用来处理客户请求,并返回html页面

56、会话跟踪有那些,它们的区别是什么
a.Cookie、session和application
b.Cookie是http对象,客户端与服务端都可以操纵
c.cookie是在客户端保持状态,session是在服务器保持状态,
由于cookie保存在客户端本地,所有数据容易窃取
d.当访问量很多,使用session则会降低服务器性能,application作用域整个工程只有一个,
可以在不同浏览器共享数据,所有人都可以共享,所以application是不安全的

57、session和application的作用
a.Session用于客户端与服务器之间保持状态的解决方案,数据保存在服务器中,底层是cookie实现的
b.application的作用域整个工程只有一个,可以在不同浏览器之间共享数据所有人都可以共享,
所以application是不安全的

58、request、response、session和application是怎么用的
a.Request是客户端向服务器发送请求
b.Response是服务端对客户端请求做出的响应
c.Session在Servlet中不能直接使用,需要通过getSession()创建
d.Application不能直接创建,存在于服务器内存中,由服务器创建或者销毁

59、为什么在session少放对象
因为session底层是cookie实现,当客户端禁用cookie后,session也会失效,
所以尽量少向session中保存信息,
session保存在服务器端,大量session会降低服务器性能

60、Jsp页面跳转
forward和redirect

61、什么是Spring
Spring是开发Java企业级软件的开放开源轻量级的框架,它解决了业务逻辑层和其他各层之间
耦合的问题,因此它将面向接口编程思想贯穿了整个应用系统

62、IOC(DI)
控制反转,促进低耦合,使用对象需要实例化,而IOC是将控制权反转给Spring,作用是实现了
程序的解耦

63、AOP
允许程序模块化横向切割关注点,应用对象只需实现它们应该做的完成业务逻辑,
它们并不负责其他系统关注点(例如日志或者事务支持)

64、Spring的底层实现机制
使用Demo4j(解析XML)和Java的反射机制

65、AOP用到了什么代理
JDK动态代理:对实现了接口的类生成代理
CGLib代理机制:对类生成代理

66、动态代理与静态代理区别
静态代理:由程序员或特定工具自动生成源代码,再对其编译。在程序运行前,
代理类的.class文件就已经存在
动态代理:在程序运行时,运用反射机制创建而成

67、Spring注入方式有哪些
a.Set注入
b.构造器注入
c.静态工厂的方法注入
d.实例工厂的方法注入

68、Spring常用注解
a.@Autowired
b.@Service
c.@Resource
d.@Controller
e.@RequestMapping

69、Spring优缺点
a.优点:降低了组件之间的耦合性,实现了软件各层之间的解耦
可以使用容器提供的众多服务,如事务管理,消息服务等
容器提供单例模式支持
容器提供AOP技术,利用它很容易实现权限拦截、运行期监控等功能
spring对于众多主流应用框架提供支持hibernate、struts等
spring属于低入侵式设计,代码的污染极低
spring的DI机制降低了业务对象替换的复杂性
spring高度开放,不强制完全依赖spring
b.缺点:使用了大量反射机制,很占内存

70、Spring工作流程
a.浏览器发出一个请求
b.请求首先进入DispatcherServlet主控制器
c.主控制器调用handlerMapping组件根据请求找到映射的Controller处理执行
d.Controller处理方法,将返回结果给ViewResolver组件
e.ViewResolver组件根据Controller返回结果定位试图jsp,将模型数据传递到jsp
f.由jsp生成响应结果,给浏览器输出

71、Spring作用域
a.singleton:单例模式,在整个容器中,Bean只有一个实例
b.prototype:原型模式,每次通过getBean()获取Bean,产生一个实例
c.request:每次http请求,request定义的Bean都将产生一个实例,
只有在web应用中使用Spring才有效
d.session:对于每次http session,session定义的Bean都将产生一个新实例,
只有在web应用中使用Spring才有效
e.globalsession:每个全局http session,session定义的Bean都将产生一个新实例,
典型情况下,仅在使用portlet context的时候有效
只有在web应用中使用Spring才有效

72、什么是hibernate
hibernate是一个基于ORM持久框架,可以让程序员以面向对象的思想操作数据库,
提高生产效率

73、什么是ORM
orm是一种思想,对象关系映射,是对象关系模型,如hibernate,
以面向对象方式编程,封装了JDBC

74、Hibernate中get和load的区别
a.性能好不会发出SQL语句,但是如果查id之外的值会报错.报错可控 不会出现NULL
b.不管你用不用这个对象都会发出SQL语句,所以性能差,但是可以查对象的所有值.报错不可控  查不到对象的话 会报NULL.

75、hibernate的三种状态
a.临时状态
b.持久化状态
c.游离状态

76、orm与jdbc的区别
a.jdbc只是一个java操作数据库的规范接口
b.orm是一种思想,对象关系映射
c.jdbc是从底层访问数据库服务器,比较安全
d.orm是对象关系模型,如hibernate,以面向对象方式编程,封装了jdbc

77、hibernate懒加载,几种禁用方法
a.数据量过大,用缓存不合适,为减少系统资源消耗,hibernate用懒加载来弥补这种缺陷。
b.使用代理对象Hibernate.initialize("代理对象")
映射文件添加lazy="false"
在web.xml中配置openSessionInView过滤掉

78、hibernate有几种查询
a.属性查询
b.参数查询
c.命名参数查询
d.关联查询
e.分页查询
f.统计函数

79、hibernate优缺点
a.优点
程序更加面向对象
提高生产率
方便移植
无侵入性
b.缺点
效率比jdbc略差
不适合批量操作

80、hibernate缓存机制
a.hibernate缓存机制包括两大类:hibernate一级缓存和hibernate二级缓存
b.hibernate一级缓存又称为"session的缓存"
session内置不能被卸载,session的缓存是事务范围的缓存
一级缓存中,持久化类的每个实例都具有一个唯一的OID
c.hibernate二级缓存又称为"sessionFactory的缓存"
二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,
如果同一个sessionFactory创建的某个session执行了相同的操作,
hibernate就会从二级缓存中拿结果,而不会再去连接数据库,
二级缓存是可选的,是一个可配置的插件

81、hibernate延迟加载
当Hibernate从数据库中加载某个对象时,不加载关联的对象,而只是生成了代理对象

82、hibernate工作原理及为什么要用
工作原理
a.读取并解析配置文件
b.读取并解析映射信息
c.创建sessionFactory
d.打开session
e.创建事务transaction
f.持久化操作
g.提交事务
h.关闭session
i.关闭sessionFactory
为什么用
j.对jdbc访问数据库代码进行了封装,简化代码开发量
k.优秀的orm实现并且使用java反射机制,而不是字节码增强程序来实现透明性
l.映射灵活性很出色,支持各种关系

83、什么是MyBatis
前身是iBatis,升级版本名称叫MyBatis,MyBatis是以纯sql操作数据的持久层框架

84、MyBatis与Hibernate区别
a.hibernate是面向对象的思想操作数据库,不需写sql语句,自动生成,
而MyBatis是以纯sql操作数据库,MyBatis容易优化
b.MyBatis移植性差

85、设计模式(一共23种)
a.单例模式
b.代理模式
c.工厂模式
d.抽象工厂模式

86、什么是单例模式
单例分类:懒汉式单例、饿汉式单例
单例特点:
a.单例类只能有一个实例
b.单例类必须自己创建自己的唯一实例
c.单例类必须给所有其他对象提供这一实例

87、懒汉模式和饿汉模式的区别
a.饿汉模式一旦加载,就把单例模式初始化完成
b.懒汉模式,当调用getInstance的时候,就会去初始化单例
c.懒汉线程不安全,因其是方法内部实例化,当多个线程访问会造成线程不安全

88、linux常用命令
a.gat:查看某个文件
b.cp:拷贝
c.ls:查看当前目录文件
d.pwd:查看当前路径
e.tail:查看日志
f.grep:搜索日志
g.ifconfig:查看ip等信息
h.cd ..返回上一级
i.mkdir:创建文件夹(可创建多个)
j.mv:移动文件
k:touch:创建文件
l.cat:查看文件
m.echo(输出字符串) "内容" >>(追加,>表示覆盖) 
n.rm( -rf:无提示):删除

89.struts2执行流程
a.客户端浏览器发出HTTP请求。
b.根据web.xml配置,该请求被FilterDispatcher接收。
c.根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
d.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
e.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
f.返回HTTP响应到客户端浏览器。

90、事务
事务是数据库系统执行的逻辑单位,四大特性
ACID
a.原子性:事务是最小的执行单位,不可分割
b.一致性:事务如果中间被割裂可能导致数据不一致性,数据必须完全一直,这一点由原子性保障
c.隔离性:并发事务之间不能相互影响
d.持久性:事务一旦提交,数据的修改就会永久保存在储存器中

91、锁
当并发事务同时访问一个资源,有可能导致数据不一致,为保证一致性,需要一种机制顺序化。

猜你喜欢

转载自blog.csdn.net/weixin_40740613/article/details/82933336