
Java面试题库
只想发财
这个作者很懒,什么都没留下…
展开
-
MyBaits和HiBernate的区别
共同点MyBaits和HiBernate都是通过ORM对象关系映射框架,都是持久层数据框架。不同点1)HiBernate它重量级的框架,而MyBaits是轻量级的框架。2)HiBernate对JDBC的封装比较深,对开发者些sql的能力不是很高,只需要通过Hql语句操作对象即可完成数据的持久化操作了。3)MyBaits也是对JDBC的封装,但是没有Hibernate那么深,原创 2017-09-18 22:04:03 · 1180 阅读 · 0 评论 -
java中,什么是构造方法?什么是构造方法重载?什么是拷贝构造方法?
构造方法当新对象被创建时,对象就会默认加载构造方法。所以有些对于该对象的初始值,就会放在构造方法里。并且在java中,如果没有定义构造方法,那么就会默认创建一个无参的构造方法。构造方法重载构造方法重载,也和方法重载差不多。方法名相同啦,但是参数类型,个数,顺序至少一个不相同啦。在java中,当我们为一个类重载了构造方法之后,就不会默认创建一个无参的构造了。并且一个类中,可以有一个...原创 2019-06-02 03:53:59 · 2144 阅读 · 0 评论 -
JDK,JRE,JVM分别的关系是什么
JDKJDK就是java的开发工具,包含java程序所必须的编译,运行等开发工具和JRE,开发工具如:用于编译的javac命令 用于启动jvm启动的java命令 用于生成文档的javadoc命令 用于打包的jar命令等等简单的说就是jdk中包含了jre以及一些开发工具。JREJRE可以说是java的运行环境,他包含有java的虚拟机和丰富的系统类库,系统类库就是jav...原创 2019-06-02 04:16:28 · 441 阅读 · 0 评论 -
什么是字节码?采用字节码的最大好处是什么?
什么是字节码?java中引入了虚拟机的概念,就是在机器和程序之间加入了一层抽象的虚拟机器。这台机器在各个平台中都给程序提供了接口。程序只需要面向虚拟机编程,而不需要管理这套程序是否在什么平台执行。编写好的程序,由解释器来编译后,成为机器可以读懂并且执行的代码。在java中,将虚拟机可以读懂的代码,称之为字节码。这里记住不要混淆了。是将虚拟机可以读懂的代码称之为字节码。也就是java中的cl...原创 2019-06-02 06:30:50 · 18543 阅读 · 3 评论 -
Java八大基本类型
整数类型:byte,short,int,long字符型:char浮点类型:float,double布尔型:boolean整数类型默认int。小数类型默认double。float和long类型的值必须加后缀,比如 float f = 100f. Long l = 100L.引用类型声明的变量是指在堆中的内存地址。引用类型包括类,接口,数组等。string类型是...原创 2019-06-02 09:04:03 · 506 阅读 · 0 评论 -
char类型是否可以存储一个汉字。
在c语言中,char类型占一个字节,而汉字占两个字节,所以不能存储。在java语言中,char类型占两个字节,而java默认采用Unicode码是16位,所以一个Unicode码占两个字节,java中无论汉字还是英文都是用Unicode编码来表达的,所以可以存储一个汉字。1Byte(字节) = 8bit (位)1024 byte = 1kb1024kb =1mb1024mb ...原创 2019-06-02 09:14:13 · 11416 阅读 · 0 评论 -
StringTokenizer是什么
StringTokennizer是一个分解字符串的工具类。具体使用代码如下:import java.util.StringTokenizer; public class Main { public static void main(String[] args) { String str = "This is String , split by StringTo...原创 2019-06-02 09:43:12 · 3519 阅读 · 1 评论 -
什么是自动拆装箱
自动装箱和拆箱,就是基本类型和引用类型的相互转换。那么为什么要对他们进行转换呢?因为在集合(collection)中,只可以存放对象,不可以存放基本类型。在通常的情况下,我们会把基本类型转为引用类型,但是代码的精简度就不够了。为了优化这一问题,在jdk5中引入了自动拆装箱的机制。但是使用自动拆装箱时,需要了解他的机制,否则会出现难以捕捉的bug。比如int和integer之间的缓存...原创 2019-06-02 10:07:15 · 2667 阅读 · 0 评论 -
Java中==和equals的区别
在面试的过程中,可能会被面试到equals和==的区别。大多数的答案可能就是equals是用来对比值,而==是用来对比内存地址的。其实回答的并不是太全面,在JDK子代的一些类对equals的实现各不同。例如在object中,我们自定义的类他们父类全部都是object。所以在自定义类的实例化变量,调用equals,调用的是object父类里的equals。代码如下:...原创 2019-06-02 18:43:14 · 911 阅读 · 0 评论 -
final,finally,finalize的区别
finalfinal,是修饰符的关键词,代表不能被引用。类声明final。代表不能再派生出子类,不能作为父类被继承,因此一个类如果是abstract,那么就不能被final修饰。 方法声明final。代表该方法不能被重写。 变量声明final。代表变量不能被修改,在定义的时候就应该给初始值。finally在异常处理时提供了finally块来执行任何的清理操作。比如关流等。在以...原创 2019-06-03 00:23:14 · 669 阅读 · 1 评论 -
finally和return的执行顺序
finally:异常代码块中,最后都会执行的代码。通常用来关闭资源。return:用于跳出当前方法,指针返回值。这篇文章主要是为了验证,当我们的异常代码块中,在finally代码前就已经return。那么会任何执行呢?我列出以下几个场景来验证。1.try...catch中有return,finally里面的语句会执行吗?如下是try中有return的执行情况。public c...原创 2019-06-03 02:06:06 · 3662 阅读 · 0 评论 -
抽象类和接口的区别
接口中所有的方法都是抽象的,而抽象类的方法可以是抽象的,可以有实现的。 类可以实现多个接口,但是只能继承一个抽象类。当抽象类A和B,同时拥有func()方法。这个时候,如果C同时继承了A,B。重写了func()。或者调用了func()。会造成混乱。是调用A里的func() 还是B里的func()。但是如果接口的话,就不会有这个疑问,因为接口中的方法都是抽象的,没有实现。不会发生同一个方法,不同...原创 2019-06-03 12:18:16 · 459 阅读 · 0 评论 -
RandomAccess有什么用?
RandomAccess用来当标记,是一种标记接口。用处是当要实现某些算法时,会判断当前类是否实现了RandomAccess接口,会选择不同的算法。接口RandomAccess中内容是空的,只是作为标记用。比如List下的ArrayList和LinkedList。其中ArrayList实现了RandomAccess。而LinkedList没有。我们可以利用instanceof来判断哪一个是...原创 2019-06-03 13:29:18 · 7662 阅读 · 0 评论 -
类的实例化顺序
首先列出实例化的顺序父类静态变量 父类静态代码块 子类静态变量 子类静态代码块 父类非静态变量 父类非静态代码块,如:构造,方法 子类非静态变量 子类非静态代码块,如:构造,方法具体大家可以自行通过代码进行验证。在实例化的时候,可能会出现成员变量实例化类,那么成员实例化。假造到public Father father = new Father()时,在去初始化Father这...原创 2019-06-03 20:49:40 · 320 阅读 · 0 评论 -
如何实现对象克隆
情景:在我们实际的开发过程中,一个对象A中已经包含了一些有用的信息,现在我需要复制A的内容到B。使得A和B对象是完全两个不同的内存地址,修改一个对象的值,不会影响到另外一个。在java中如果单单采用复制的方式是不行的,只会让A和B同时指向一个内存地址,互相影响。解决:1.实现Cloneable接口,并重写object类中的clone方法,可以实现浅克隆,也可以实现深度克隆。2.实现...原创 2019-06-04 11:08:41 · 4559 阅读 · 0 评论 -
Cloneable实现对象克隆
在其他文章中已经说明了场景,和一些对象克隆的实现方式。本篇文章主要是对Cloneable接口如何实现对象克隆展开。首先需要声明下,对象有分为浅克隆和深克隆。浅克隆浅克隆是对要克隆的对象,其中的基本类型复制一份新的产生给对象。但是对于非基本类型的数据类型,仅仅是复制一份引用给新产生的对象。即基本类型是新产生的,非基本类型是复制一份内存引用。实现步骤:1.实现Cloneable接口...原创 2019-06-04 13:46:25 · 1411 阅读 · 0 评论 -
重载和重写的区别?
其实在编写代码的过程中,或者在基础的教学中,或多或少都接触过重写,和重载。但是当我们把这两个词放在这一起,让我们说说他们的区别,难免会弄混。这里整理下重载和重写的区别。重载参数的类型,顺序,个数至少有一个不相同 不能重载只有返回值不同的方法名 存在于父子类,或同类中。重写方法名,参数,返回值相同 子类不能缩小父类的权限 子类方法不能抛出比父类更多的异常 存在于父子类中 方...原创 2019-06-02 03:20:07 · 281 阅读 · 0 评论 -
面向对象和面向过程的区别
面包过程优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗内存空间等。而比如单片机,嵌入式开发,Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象的易维护,易复用,易扩展面向对象优点:易维护,易复用,易扩展。由于面向对象有封装,继承,多态,抽象的特性,可以设计出低耦合的系统,使系统更加的灵活。缺点:性能比面向对象低...原创 2019-06-02 00:18:50 · 323 阅读 · 0 评论 -
为什么使用srping框架,它有什么优点?
1)非侵入性的。2)容易整合其他框架,比如struts2,MyBaits,HiBernate等。3)是个轻量级的框架。4)可以提供事务管理原创 2017-09-18 22:11:45 · 459 阅读 · 0 评论 -
数组有没有length()方法?String有没有length()方法?
数组是没有length()这个方法的,有length这个属性,可以计算数组的长度String是有length()这个方法的,用来计算字符串的长度。原创 2017-09-18 22:32:45 · 18326 阅读 · 1 评论 -
Java的反射机制的作用
1)在运行时判断一个对象所属的类2)在运行时构造一个类的对象。3)在运行时判断任意一个类所具有的成员变量和方法4)在运行时调用任意一个对象的方法原创 2017-09-18 22:28:55 · 457 阅读 · 0 评论 -
如何理解Java的泛型
在javaSE1.5版本之前是没有java泛型的,这个时候程序员是通过,对类型Object的引用,来实现参数的任意化。泛型是javaSE1.5的新特性。泛型的本质是参数化类型,它和Object的功能,都是实现参数任意化,但是泛型,能够让编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用性。原创 2017-09-18 22:16:52 · 1134 阅读 · 0 评论 -
String,StringBuilder和StringBuffer的区别
String通过源码可以看到,是通过字符数组来保存一个对象的,如果频繁更改,效率十分的低下。浪费空间,相当于每一次String操作就会产生新的字符数组对象。如果在String前面加上final修饰符,代表这个String是不可变的,就可以理解为这个String是安全的,StringBuilder是线程不安全带的,而StringBuffer是线程安全的,可以从源码里看出,StringBu原创 2017-09-18 22:43:22 · 348 阅读 · 0 评论 -
运行时异常和一般异常的不同
一般异常表示在程序运行中可能会出现的非正常状态。而运行异常是在,运行的时候所抛出的异常。java编译器只会抛出一般异常,无法铺捉到未抛出的异常。原创 2017-09-18 22:56:36 · 438 阅读 · 0 评论 -
简单说明什么是递归,什么情况下会使用递归,并写一个简单的递归程序。
递归作为一种算法被广泛用在程序设计语言中,它是直接或间接的调用自己。递归在什么情况下使用?数据在定义的时候递归定义的,数据的结构形式是按递归定义的。简单的递归程序定义一个方法,然后有一个int类型的参数。在方法里做一个if判断,如果参数等于0,那么方法结束,如果参数不等于0,就递减。调用自身,出口是参数等于0.当我输入参数是10的时候,递减到参数是0的时候,递归就结束了。原创 2017-09-18 23:03:09 · 6373 阅读 · 0 评论 -
HTTP的特性
简单快速:客户向服务器请求方法的时候,只要传送请求方法和路径。灵活:HTTP允许传输任意类型的数据对象。无连接:在客户端与服务器交互完后,就断开连接,可以节省传输的时间。无状态:对事务的处理没有记忆能力,如果需要上一次的数据,需要重新上传。原创 2017-09-18 23:49:26 · 839 阅读 · 0 评论 -
TCP和UDP的区别
TCP是面试连接的,而UDP不是面向连接的。TCP是用于网络数据可靠性传输的情况下,它具有顺序控制,重发控制,等机制,所以它可以为数据提供可靠的传输。而UDP是不可靠传输,有时候会丢失数据,但是它速度快。大部分就用在比如多广播里,IP电话里,速度快,形成了一种消息的实时性的一种优势,而且在数据的丢失情况下,也不会造成重新发送,形成了通话不会被干扰,并且实时的情况。TCP 只能是点到点的原创 2017-09-18 23:42:08 · 317 阅读 · 0 评论 -
TCP,UDP,HTPP关系
tcp/ip是个协议组,可以分为3个层次:网络层,传输层,应用层。网络层 :ip协议,BOOTP协议传输层:UDP协议和TCP协议应用层:FTP协议,和HTTP协议。HTTP本身就是一个协议,基于TCP协议,目前,有人正在研究UDP和TCP混合的HTTP协议。原创 2017-09-18 23:20:41 · 381 阅读 · 0 评论 -
ip,TCP,UDP,HTTP,TCP/IP,SOCKET
IP协议,是为了网络计算机的通信而设计的协议。TCP和UDP是基于二进制流的控制间传输协议,TCP在大概率的让数据能够安全的传输。而UDP是速度快的,但是不能保证数据的安全传输。IP协议是网络计算机的通信协议,属于网络层,而tcp/IP是属于传输层,两者不一样。socket相当于调用接口API,来获取tcp/ip协议原创 2017-09-18 23:34:57 · 367 阅读 · 0 评论 -
数组逆序功能
/* 数组的逆序: 数组中的元素,进行位置上的交换 逆序 不等于 反向遍历 就是数组中最远的两个索引,进行位置交换,实现数组的逆序 使用的是数组的指针思想,就是变量,思想,可以随时变换索引 反转 reverse 实现步骤: 1. 定义方法,实现数组的逆序 2. 遍历数组 实现数组的最远索引换位置 使用临时的第三方变量*/pu原创 2017-12-03 19:22:16 · 1051 阅读 · 1 评论 -
数组的冒泡排序
前言冒泡排序是相领2个角标对比。分析实现 /* 定义方法,实现数组的冒泡排序 返回值: 没有 参数: 数组 */ public static void bubbleSort(int[] arr){ for(int i = 0 ; i < arr.length - 1; i++){ //每次内循环的比较,从0索引开始原创 2017-12-04 09:10:56 · 4576 阅读 · 0 评论 -
递归的概念和例题。
###16递归概念和注意事项 * A:递归概念和注意事项 * a: 递归概念 * 递归,指在当前方法内调用自己的这种现象 * 递归分为两种,直接递归和间接递归 * 直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法 * b: 注意事项 * 递归一定要有出口, 必须可以让程序停下 * 递归次数不能过多 * 构造原创 2017-12-23 16:00:17 · 762 阅读 · 0 评论 -
for循环的优化
方法1:循环多不要紧,要紧的是循环嵌套得太多,要解决这个问题,需要从根本上找原因,用更好的数据结构和算法,从根源上减少对于循环的需求方法2:将循环次数多的放在里面,循环次数少的放在外面做大循环方法3:for循环中少用if——else if判断,用switch——case,效率更高方法4:多线程并发替代单循环么,尽可能利用CPUfor(int i = 0; i < 100; ++i) { ...转载 2017-09-26 09:42:15 · 5700 阅读 · 0 评论 -
什么是面向对象
说到这个面试题目,可以说是老生常谈啦。无论是对于新手还是老手,面对不同时期的程序员,都会有不同的理解,不同的思路。回答的内容深度也会大不相同。面向对象说到底就是一种思想,任何事物都可以看作是一个对象。在有些面试题目中也称之为OOP(Object Oriented Programming)。分开来解读就是:Object:对象、Oriented: 面向的Programming:程序设计...原创 2019-06-01 23:02:26 · 31626 阅读 · 3 评论 -
迭代器中的快速失败(fail-fasr)和安全失败(fail-safe)
首先总体区别下什么是快速失败和安全失败,在java.util包的集合类就是快速失败的,而java.util.concurrent包下的类都是安全失败的。比如ConcurrentHashMap。快速失败(fail-fast)在使用迭代器时,如果A线程正在对集合进行遍历,同一时间,B线程对集合进行了增删改的操作,那么就会导致A线程抛出ConcurrentModificationExceptio...原创 2019-06-04 23:47:04 · 938 阅读 · 0 评论