Java开发常见基础题大全

1.&和&&的区别?java

&:逻辑与(and),运算符两边的表达式均为true时,整个结果才为true。程序员

&&:短路与,若是第一个表达式为false时,第二个表达式就不会计算了。算法

2.”==”和equals方法究竟有什么区别?sql

==:表示两个变量的值是否相等,用于比较两个基本数据类型的数据或者引用变量。数据库

equals:用于比较两个独立对象的外汇返佣内容是否相同。字符串的比较也用equals。编程

== 对于基本类型来讲是值比较,对于引用类型来讲是比较的是引用;而 equals 默认状况下是引用比较,只是不少类从新了 equals 方法,好比 String、Integer 等把它变成了值比较,因此通常状况下 equals 比较的是值是否相等。数组

3.比较字符串相等时用equals和==的区别安全

String 是对象,若是用==号就是比较两个String对象内存地址是否同样,equals()比较的是String内容时候同样,不过不一样的编程语言二者不太同样服务器

4.Int和integer的区别?数据结构

Int是Java的8中基本数据类型之一,integer是int的封装类。Int类型的默认值为0,integer默认值为null,因此区别在于,integer能区分出null值和0的区别。

5.重载和重写的区别?

重载(Overload):函数名相同,参数不一样。能够改变返回值类型,参数的个数和类型。

重写(Override):和父类的的方法名称、参数彻底相同。

6.面向对象的特征?

封装:将对象属性和方法的代码封装到一个模块中,也就是一个类中,保证软件内部具备优良的模块性的基础,实现“高内聚,低耦合”。

抽象:找出一些事物的类似和共性之处,而后归为一个类,该类只考虑事物的类似和共性之处。抽象包括行为抽象和状态抽象。

继承:在已经存在的类的基础上进行,将其定义的内容做为本身的内容,并能够加入新的内容或者修改原来的方法适合特殊的须要。

多态:同一操做做用于不一样的对象,能够有不一样的解释,产生不一样的执行结果,就是多态,简单点说:就是用父类的引用指向子类的对象。目的:提升代码复用性,解决项目中紧耦合问题,提升可扩展性。

多态的机制:靠的是父类的或者接口的引用变量能够指向子类或者具体实现类的实例对象。

7.JDK 和 JRE 有什么区别?

JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java 的开发环境和运行环境。

JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的运行提供了所需环境。

具体来讲 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包含了不少 Java 程序调试和分析的工具。简单来讲:若是你须要运行 Java 程序,只需安装 JRE 就能够了,若是你须要编写 Java 程序,须要安装 JDK。

8.final 在 Java 中有什么做用?

final 修饰的类叫最终类,该类不能被继承。

final 修饰的方法不能被重写。

final 修饰的变量叫常量,常量必须初始化,初始化以后值就不能被修改。

9.String s =new String (“syx”);建立了几个String Object?

若是String常理池(常量缓冲区)中,已经建立"syx",则不会继续建立,此时只建立了一个对象new String(“syx”);

若是String常理池中,没有建立"syx",则会建立两个对象,一个对象的值是"syx",一个对象new String(“syx”)。

10.JDBC操做数据库的七大步骤?

1.加载JDBC驱动程序:

2.提供JDBC链接的URL;

3.建立数据库的链接;

4.建立一个Statement(建立sql的执行操做);

5.执行SQL语句;

6.处理执行结果;

7.关闭JDBC对象,释放内存。

11.String 类的经常使用方法都有那些?

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

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

replace():字符串替换。

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

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

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

length():返回字符串长度。

toLowerCase():将字符串转成小写字母。

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

substring():截取字符串。

equals():字符串比较。

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

普通类不能包含抽象方法,抽象类能够包含抽象方法。

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

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

抽象类:用abstract修饰,抽象类不能建立实例对象。抽象方法必须在子类中实现,不能有抽象构造方法或者抽象静态方法。

接口:抽象类的一种特例,接口中的方法必须是抽象的。

二者的区别:

1.抽象类能够有构造方法,接口没有构造方法

2.抽象类能够有普通成员变量,接口没有普通成员变量。

3.抽象类能够有非抽象的普通方法,接口中的方法必须是抽象的。

4.抽象类中的抽象方法访问类型能够是public,protected,接口中抽闲方法必须是public类型的。

5.抽象类能够包含静态方法,接口中不能包含静态方法。

6.一个类能够实现多个接口,可是只能继承一个抽象类。

7.接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是。

8.抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。

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

BIO:Block IO 同步阻塞式 IO,就是咱们日常使用的传统 IO,它的特色是模式简单使用方便,并发处理能力低。

NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端经过 Channel(通道)通信,实现了多路复用。

AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操做基于事件和回调机制。

15.Files的经常使用方法都有哪些?

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

Files. createFile():建立文件。

Files. createDirectory():建立文件夹。

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

Files. copy():复制文件。

Files. move():移动文件。

Files. size():查看文件个数。

Files. read():读取文件。

Files. write():写入文件。

16.请对比synchronized与java.util.concurrent.locks.Lock的异同?

主要相同点:Lock能完成synchronized所实现的全部功能

主要不一样点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock必定要求程序员手工释放,而且必须在finally从句中释放。

17.List、Set和Map的区别?

List:是存储单列数据的集合,存储有顺序,容许重复。继承Collection接口。

Set: 是存储单列数据的集合。继承Collection接口。不容许重复。

Map:存储键和值这样的双列数据的集合,存储数据无顺序,键(key)不能重复,值(value)。能够重复。

18.java建立对象的方式有哪些?

1.使用new关键字

2.使用反射机制建立对象:

(1)使用Class类的newInstance方法

(2)java.lang.reflect.Constructor类里也有一个newInstance方法能够建立对象。

3.使用clone方法:先实现Cloneable接口并实现其定义的clone方法

4.使用反序列化。

19. Java 中 IO 流分为几种?

按功能来分:输入流(input)、输出流(output)。

按类型来分:字节流和字符流。

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

20.运行时异常与通常异常有何异同?

Java提供了两类主要的异常:运行时异常runtime exception和通常异常checked exception。对于后者这种通常异常,JAVA要求程序员对其进行catch处理。因此,面对这种异常无论咱们是否愿意,只能本身去写一大堆catch块去处理可能的异常。

运行时异常咱们能够不处理。这样的异常由虚拟机接管。出现运行时异常后,系统会把异常一直往上层抛,一直遇处处理代码。若是不对运行时异常进行处理,那么出现运行时异常以后,要么是线程停止,要么是主程序终止。

JAVA容器知识点

1. Java 容器都有哪些?

Java 容器分为 Collection 和 Map 两大类,其下又有不少子类,以下所示:

Collection

List

ArrayList

LinkedList

Vector

Stack

Set

HashSet

LinkedHashSet

TreeSet

Map

HashMap

LinkedHashMap

TreeMap

ConcurrentHashMap

Hashtable

2.List、Set和Map的区别?

List:是存储单列数据的集合,存储有顺序,容许重复。继承Collection接口。

Set::是存储单列数据的集合。继承Collection接口。不容许重复。

Map:存储键和值这样的双列数据的集合,存储数据无顺序,键(key)不能重复,值(value)。能够重复。

3.HashMap 和 Hashtable 有什么区别?

存储:HashMap 运行 key 和 value 为 null,而 Hashtable 不容许。

线程安全:Hashtable 是线程安全的,而 HashMap 是非线程安全的。

推荐使用:在 Hashtable 的类注释能够看到,Hashtable 是保留类不建议使用,推荐在单线程环境下使用 HashMap 替代,若是须要多线程使用则用 ConcurrentHashMap 替代。

4. 如何决定使用 HashMap 仍是 TreeMap?

对于在 Map 中插入、删除、定位一个元素这类操做,HashMap 是最好的选择,由于相对而言 HashMap 的插入会更快,但若是你要对一个 key 集合进行有序的遍历,那 TreeMap 是更好的选择。

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

HashMap 基于 Hash 算法实现的,咱们经过 put(key,value)存储,get(key)来获取。当传入 key 时,HashMap 会根据 key. hashCode() 计算出 hash 值,根据 hash 值将 value 保存在 bucket 里。当计算出的 hash 值相同时,咱们称之为 hash 冲突,HashMap 的作法是用链表和红黑树存储相同 hash 值的 value。当 hash 冲突的个数比较少时,使用链表不然使用红黑树。

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

HashSet 是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存全部元素,所以 HashSet 的实现比较简单,相关 HashSet 的操做,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不容许重复的值。

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

数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是双向链表的数据结构实现。

随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,由于 LinkedList 是线性的数据存储方式,因此须要移动指针从前日后依次查找。

增长和删除效率:在非首尾的增长和删除操做,LinkedList 要比 ArrayList 效率要高,由于 ArrayList 增删操做要影响数组内的其余数据的下标。

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。

对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据,而查询和修改ArrayList占优点。

综合来讲,在须要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操做较多时,更推荐使用 LinkedList。

Java进阶知识

1.三个与取整有关的方法:

Math.ceil():表示向上取整;Math.ceil(11.3)=12;Math.ceil(-11.3)=-12。

Math.floor():表示向下取整;Math.floor(11.6)=12;Math.floor(-11.6)=-12。

Math.round():表示四舍五入;Math.round(11.5)=12;Math.round(-11.5)=-11;

Marh.round(11.3)=11;Math.round(-11.3)=–11;

2.String和StringBuffuer、StringBuilder

String:字符串数值不可变;

StringBuffer:字符串可修改,能够动态构造字符数据。StringBuffer类是能够经过Append()来修改值。线程安全。

StringBuilder:线程不安全。

共同点:它们均可以储存和操做字符串,同时三者都使用final修饰,都属于终结类不能派生子类,操做的相关方法也相似例如获取字符串长度等。

不一样:

1.其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的,每次对String的操做都会生成新的String对象,形成内存浪费。而StringBuffer和StringBuilder类表示的字符串对象能够直接进行修改,在修改的同时地址值不会发生改变。

2.StringBuilder是JDK 1.5中引入的,它和StringBuffer的方法彻底相同,区别在于它是在单线程环境下使用的(不能同步访问),由于它的全部方面都没有被synchronized修饰,所以它的效率也比StringBuffer略高。

三者在执行速度方面的比较:StringBuilder > StringBuffer > String

对于三者使用的总结:

1.若是要操做少许的数据用String

2.单线程操做字符串缓冲区下操做大量数据用StringBuilder

3.多线程操做字符串缓冲区下操做大量数据用StringBuffer

3.对比几种不一样的简单singleton单例模式

饱汉模式:类加载时完初始化,无论用不用,先建立。

//饱汉模式:类加载时完成初始化,建立出实例对象(无论用不用,先建立)。

public class SingleTon {

        //实例化对象放到静态代码块中,可提升执行效率,可是可能更占用空间

        private final static SingleTon instence=new SingleTon();

        private SingleTon(){};//私有的构造函数

        //获取方法

        public static SingleTon getinstance(){

                return instence;

        };

饿汉模式:第一次使用时建立对象,存在线程安全问题。

//饥汉模式:延迟加载,在第一次用的时候才建立出对象,存在线程安全问题。

public class SingleTon {

        private  static SingleTon instence=null;

        private SingleTon(){};//私有的构造函数

        //获取方法

        public static synchronized SingleTon getinstance(){

                if(instence==null){

                        //第一次使用的时候建立对象

                        instence=new SingleTon();

                }

                return instence;

        };

}

4.hashCode与equals的区别与联系?

1、equals方法的做用

一、默认状况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是否是同一个地址(是否是同一个对象)。

2 、要是类中覆盖了equals方法,那么就要根据具体的代码来肯定equals方法的做用了,覆盖后通常都是经过对象的内容是否相等来判断对象是否相等。

2、Hashcode()方法:

一、咱们并无覆盖equals方法只覆盖了hashCode方法,两个对象虽然hashCode同样,但在将stu1和stu2放入set集合时因为equals方法比较的两个对象是false,因此就没有在比较两个对象的hashcode值。

二、覆盖一下equals方法和hashCode方法,stu1和stu2经过equals方法比较相等,并且返回的hashCode值同样,因此放入set集合中时只放入了一个对象。

三、咱们让两个对象equals方法比较相等,但hashCode值不相等试试,虽然stu1和stu2经过equals方法比较相等,但两个对象的hashcode的值并不相等,因此在将stu1和stu2放入set集合中时认为是两个不一样的对象。

总结:

一、equals方法用于比较对象的内容是否相等(覆盖之后)

二、hashcode方法只有在集合中用到

三、当覆盖了equals方法时,比较对象是否相等将经过覆盖后的equals方法进行比较(判断对象的内容是否相等)。

四、将对象放入到集合中时,首先判断要放入对象的hashcode值与集合中的任意一个元素的hashcode值是否相等,若是不相等直接将该对象放入集合中。若是hashcode值相等,而后再经过equals方法判断要放入对象与集合中的任意一个对象是否相等,若是equals判断不相等,直接将该元素放入到集合中,不然不放入。

原文连接:https://blog.csdn.net/qq_35980218/article/details/102481247

相关文章
相关标签/搜索