java面试题

1.&与&&的区别
&与&&都是逻辑运算符,&&在第一个条件不成立时后面的条件不会执行。&在第一个条件不成立时,依然会执行后面的条件。

2.静态变量与实例变量的区别
首先静态变量前面要加一个static关键字,实例不用
静态变量只要加载了类的字节码就会分配空间,实例变量则是需要创建这个实例对象之后才会分配空间
静态变量使用时通过类名.变量名就可以使用,而实例变量要先new创建对象后才可以使用
静态方法不可以调用非静态方法,而非静态方法可以调用静态方法

3.==与equals的区别
==是判断值的类型,内容以及内存地址是否相等
equals是判断内容是否相等

4.使用final关键字修饰一个变量,是引用不能变还是引用的对象不能变
使用final关键字修饰时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的,就相当于在一个篮子里有许多水果,篮子是不能改变的,但是里面的东西还是可以改变的

5.Integer与int的区别
int是基本的数据类型,而Integer是int的封装
int的默认值是0,integer的默认值是null
integer提供了parseInt等转换类型的方法

6.访问修饰符的作用域
public:本类 同一包下 子类 其他包下
protected:本类 同一包下 子类
默认:本类 同一包下
private:本类

7.面向对象的三大特征
封装、继承、多态

8.重载与重写的区别
重载是在同一类中方法名相同,但是方法的参数列表不同,与返回值没有关系
重写是在有继承的关系下与父类与子类的方法完全一致

9.接口与抽象类的区别
接口与抽象类都不可以被实例化
接口中成员不能使私有的,而抽象类中可以是私有的
接口中不能有普通的方法,而抽象类中可以有

10.final、finally、finalize的区别
final用于声明属性、方法还有类,表示属性不可变,方法不可覆盖,类不可继承,内部类要访问局部变量,局部变量就必须使用final
finally是异常处理语句的一个部分,表示无论是否出现异常都会执行
finalize是Object类的一个方法,这个方法是在垃圾收集器在确定了,被清理对象没有被引用的情况下调用的

11.String、StringBuffer、StringBuilder的区别
String是不可变的字符串常量
StringBuffer是可变的字符串变量(线程安全)
StringBuilder是可变的字符串变量(效率高但是线程不安全)

12.object的子类有哪些,object的常用方法有哪些
Class类、Math类、Number类
toString方法、getClass方法、finalize方法、equals方法

13.数组中有没有length()方法,String中有没有length()方法
数组中没有length()方法但是有length属性
String中有length()方法

14.Error和Exception的区别
error与exception都是继承与Throwable,RuntimeException继承与Exception
error类一般是指与虚拟机相关的问题,比如系统崩溃,内存不足,方法调用栈溢出等
exception表示程序可以处理的异常,可以捕获且可能修复,遇到这样的异常建议修复而不是终止

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

16.线程的五个基本状态
新建状态:线程创建后进入新建状态,继承Thread类,重写run方法
就绪状态:当调用线程对象的start方法,进入就绪状态,随时等待cpu调度执行
运行状态:当cpu开始调度处于就绪状态的线程,进入运行状态
阻塞状态:运行状态的线程因某些原因,暂时放弃对cpu的使用权,停止执行,直到再次放入就绪状态
死亡状态:有两个原因会导致线程死亡:
1) run方法正常退出而自然死亡,
2) 一个未捕获的异常终止了run方法而使线程猝死。
为了确定线程在当前是否存活着(就是要么是可运行的,要么是被阻塞了),需要使用isAlive方法。如果是可运行或被阻塞,这个方法返回true; 如果线程仍旧是new状态且不是可运行的, 或者线程死亡了,则返回false.

17.线程同步与异步
同步:当前线程执行完之后才会执行下一个线程
异步:同时又多个线程执行不同的路径

18.什么是线程不安全
多个线程共享同一个数据时会受到其他的线程干扰就是线程不安全

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

20.collection与conllections的区别
conllection是Set、list、vector、linkedlist、queue的跟接口
collections是提供集合操作的工具类

21.什么是数组,什么是链表
数组就是相同数据类型的元素按照一定的顺去排列的集合,占内存大,查询简单,增删效率低
链表是一种物理储存单元上的非连续、非顺序的储存结构,内存宽松,查询效率不高,增删效率高

22.什么是hash表
兼具两者的优点,链表与数组的组成,map是由hash表实现

23.ArrayList与Vector的区别
这两个类都实现了list接口继承了collection接口,都是有序的集合,底层实现方式都是动态的数组,arraylist线程不安全,如果是多线程的话使用vecotr最好

24.HashMap与HashTable的区别
都实现了map接口,HashMap是HashTable的轻量级实现,HashMap可以储存null键值对,HashTable不行。HashTable是线程安全的,HashMap是线程不安全的,所以效率比较高

25HashSet与TreeSet的区别
HashSet不重复,无序
TreeSet不重复,有序

26.Collection的方法
sort();排序
addAll();添加方法
max();获取最大值
min();获取最小值
copy();

27.xml(报文)与Json的区别
xml是重量级、json是轻量级
xml比较占宽带、json占宽带比较小容易压缩
json在webservice中用的比较少,xml用的比较多
两者都是数据交换格式

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

29.什么是三次握手
第一次握手:建立连接时,客户端发送syn包到服务器,并进入syn_send状态,等待服务器确认
第二次握手:服务器收到syn包,必须确认客户的syn,同时自己也放松一个syn包,即syn+ack包,此时服务器进入syn_recv状态
第三次握手:客户端收到服务器的syn+ack包,向服务器发送确认的ack,此包发送完毕,客户端和服务器进入established状态,完成三次握手

30.WebService实现的原理
HTTP协议+XML

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

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

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

34.http协议由什么组成
请求报文包含三部分:
请求行(包含请求方法,url,http版本信息)
请求首部字段
请求内容实体
响应报文也包含三部分:
响应行(包含http版本,状态码,状态码的原因短语)
响应首部字段
响应内容实体

35.http协议请求方式
Get:用于请求访问已经被url识别的资源,可以通过url传参给服务器
post:用于传输信息给服务器,主要功能与get类似,单一半推荐用post
put:传输文件,报文主题中包含文件的内容,保存到对应的url位置
head:获取报文首部,与get方法类似,只是不返回报文主体,一般用于验证url是否有效
delete:删除文件,与put方法相反,删除对应的url位置的文件

36.http1.0与http1.1的区别
1.0每次请求结束后都会关闭连接,然后发送新的请求时又会重新建立连接
1.1每次连接可以发送多个请求

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

38.http协议有哪些特征
支持客户/服务器模式
简单快捷
灵活
无连接
无状态

39.servlet的执行流程,doget和dopost的区别
执行流程:实例化,初始化,处理请求,进行销毁
doget处理get请求,dopost处理post请求,doget用于地址栏提交,dopost用于表单提交

40.Jsp中重定向和转发的区别
重定向是客户端行为,转发是服务器行为
重定向会导致request对象丢失,转发不会
转发url不会变,重定向的url会改变

41.Jsp和Servlet有什么区别
jsp可读性强,易于维护,最后会编译成servlet
servlet容易调试
jsp更多用于表示层,写前端代码

42.session的常用方法
getSession、setAttribute、getAttribute

43.jsp九大内置对象
request:对当前请求进行封装
response:返回服务器端信息给用户
session:浏览器回话对象
application:应用程序对象
page:当前页面对象
pageContext:只对当前页面有效,封装了基本的request和session
out:页面打印对象,在jsp页面打印字符串
config:单个servlet的配置对象,相当于servletConfig
exception:错误页面的exception对象

44.jsp三大指令
Page:指令是针对当前页面的指令
Include:用于指定如何包含另一个页面
Taglib:用于定义和声明标签

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

46.jsp与javaScript的区别
前者服务器端基于java,后者客户端基于html
Servlet是独立于平台和协议服务端的java应用程序
javaScript是一种解释性语言,用于与html提供交互

47.jsp执行原理
客户端发送请求,jsp引擎将jsp编译成Servlet,在tomcat中将源文件编译成class文件,并加载到内存中运行,把结果返回给客户端

48.html与servlet的区别
html是静态的,servlet是动态的
html页面是服务器直接返回的
servlet是用来处理客户请求返回html页面

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

50.ioc(DI)
控制反转,促进低耦合,使用对象需要实例化,而ioc是将控制权交给了spring,作用是实现程序的解耦

51.aop
允许程序模块化横向切割关注点,应用对象只需实现他们应该完成的业务逻辑,a并不负责其他系统的关注点

52.Spring底层实现机制
使用Demo4j和java反射机制

53.aop用的什么代理
jdk动态代理与CGlib代理机制
前者是对接口的类生成代理,后者对类实现生成代理

54.spring的注入方式
set注入
构造器注入
静态工厂注入
实例工厂注入

55.spring的常用注解
@Autowired
@Service
@Resource
@controller
@RequestMapping

56.spring的优缺点
优点:
降低了组件之间的耦合实现各层之间的解耦
可以使用容器提供众多服务
提供单例模式支持
提供aop技术,利用它实现权限拦截等功能
缺点:
使用了大量反射机制,很占内存

57.Spring工作流程
浏览器发送一个请求
请求进入DispatcherServlet主控制器
主控制器调用handlerMapping组件根据请求找到映射的controller处理
controller处理完成后将结果返回给viewResolver组件
viewResolve组件根据返回结果定位视图jsp,将模型传递到jsp
由jsp生成响应结果,给浏览器输出

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

59.什么是ORM
ORM是一种思想,对象关系映射,是对象关系模型,以面向对象的方式编程,封装了JDBC

60.hibernate的三种状态
临时状态、持久化状态、游离状态

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

61.什么是mybatis
前身是ibatis,升级版本叫mybatis,咦纯sql操作数据的持久层框架

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

63.设计模式
一共二十三中设计模式,单例模式、代理模式、工厂模式、抽象工厂模式等

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

65.懒汉与饿汉模式的区别
饿汉模式加载后就把单例模式初始化
懒汉当调用getInstance的时候才会去初始化
懒汉模式线程不安全

66.事务的四大特性
原子性:事务是最小的执行单位,不可分割
一致性:事务如果中间被克烈可能导致数据不一致性,数据必须完全一致
隔离性:并发事务之间不能互相影响
持久性:事务一旦提交,数据永久保存在储存中

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值