Java 数据库 经典面试题 足够

java基础:

1.谈谈对集合的了解

  集合的英文名称是Collection,是用来存放对象的数据结构,而且长度可变,可以存放不同类型的对象,并且还提供了一组操作成批对象的方法.Collection接口是集合层次结构 中的根接口,接口不能直接使用,但是该接口提供了添加元素/删除元素/管理元素的父接口公共方法.

由于List接口与Set接口都继承了Collection接口,因此这些方法对于List集合和Set集合是通用的.

2.ArrayList和LinkedList的区别

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

二 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。

三 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。

综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除

操作较多时,更推荐使用 LinkedList。

3.重载和重写的区别

重载:在一个类中的现象:同一个类中,存在方法名相同,参数列表不同的方法

重写:是指建立了继承关系以后,子类对父类的方法不满意,可以重写,遵循两同两小一大原则

重载的意义:是为了外界调用方法时方便,不管传入什么样的参数,都可以匹配到对应的同名方法

重写的意义:在不修改源码的情况下,进行功能的修改与拓展(OCP原则:面向修改关闭,面向拓展开放)

((重写的要求:两同两小一大

两同:方法名 参数列表 要完全一致

两小:

子类返回值类型小于等于父类的返回值类型(注意此处说的是继承关系,不是值大小)

子类抛出异常小于等于父类方法抛出异常

一大:子类方法的修饰符权限要大于等于父类被重写方法的修饰符权限))

1. JDK 和 JRE 有什么区别?

· JDK:Java Development Kit 的简称,Java 开发工具包,提供了 Java

的开发环境和运行环境。

· JRE:Java Runtime Environment 的简称,Java 运行环境,为 Java 的

运行提供了所需环境。

具体来说 JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 Javac,还包

含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装

JRE 就可以了,如果你需要编写 Java 程序,需要安装 JDK。

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

== 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;

而 equals 默认情况下是引用比较,只是很多类重新了 equals 方法,比如

String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是

否相等。

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

对吗?

不对,两个对象的 hashCode() 相同,equals() 不一定 true。

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

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

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

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

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

String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、

long、double,而 String 属于对象

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

不一样,因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分

配到常量池中;而 String str=new String("i") 则会被分到堆内存中。

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

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

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

· replace():字符串替换。

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

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

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

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

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

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

· substring():截取字符串。

· equals():字符串比较。

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

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

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

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

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

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

不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样

彼此就会产生矛盾,所以 final 不能修饰抽象类

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

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

来实现接口。

· 构造函数:抽象类可以有构造函数;接口不能有。

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

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

是任意访问修饰符。

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

List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。

三者之间的区别,如下表:

21. HashMap 和 Hashtable 有什么区别?

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

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

· 推荐使用:在 Hashtable 的类注释可以看到,Hashtable 是保留类不建

议使用,推荐在单线程环境下使用 HashMap 替代,如果需要多线程使

用则用 ConcurrentHashMap 替代。

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

· 数据结构实现:ArrayList 是动态数组的数据结构实现,而 LinkedList 是

双向链表的数据结构实现。

· 随机访问效率:ArrayList 比 LinkedList 在随机访问的时候效率要高,

因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依

次查找。· 增加和删除效率:在非首尾的增加和删除操作,LinkedList 要比

ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据

的下标。

综合来说,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除

操作较多时,更推荐使用 LinkedList。

57. 什么是反射?

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

意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象

的方法的功能称为 Java 语言的反射机制。

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

Java 序列化是为了保存各种对象在内存中的状态,并且可以把保存的对象状态再读出

来。

以下情况需要使用 Java 序列化:

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

· 想用套接字在网络上传送对象的时候;

· 想通过 RMI(远程方法调用)传输对象的时候。

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

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

动态代理的应用有 spring aop、hibernate 数据查询、测试框架的后端 mock、rpc,

Java 注解对象获取等。

60. 怎么实现动态代理?

JDK 原生动态代理和 cglib 动态代理。JDK 原生动态代理是基于接口实现的,而 cglib

是基于继承当前类的子类实现的

19、String 和 StringBuilder、StringBuffer 的区别?

答:

Java 平台提供了两种类型的字符串:String 和 StringBuffer/StringBuilder,它

们可以储存和操作字符串。其中 String 是只读字符串,也就意味着 String 引用的

字符串内容是不能被改变的。而 StringBuffer/StringBuilder 类表示的字符串对象

可以直接进行修改。StringBuilder 是 Java 5 中引入的,它和 StringBuffer 的方

法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被

synchronized 修饰,因此它的效率也比 StringBuffer 要高。

31、String s = new String(“xyz”);创建了几个字符串对象?

答:

两个对象,一个是静态区的”xyz”,一个是用 new 创建在堆上的对象。

32、接口是否可继承(extends)接口?抽象类是否可实现

(implements)接口?抽象类是否可继承具体类(concrete

class)?

答:

接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽

象类可继承具体类也可以继承抽象类

45、Error 和 Exception 有什么区别?

答:

Error 表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情

况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;

Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;

也就是说,它表示如果程序运行正常,从不会发生的情况。

49、列出一些你常见的运行时异常?

答:

·

ArithmeticException(算术异常)

·

ClassCastException (类转换异常)

·

IllegalArgumentException (非法参数异常)

·

IndexOutOfBoundsException (下标越界异常)

·

NullPointerException (空指针异常)

·

SecurityException (安全异常)

64、启动一个线程是调用 run()还是 start()方法?

答:

启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态,

这意味着它可以由 JVM 调度并执行,这并不意味着线程就会立即运行。run()方

法是线程启动后要进行回调(callback)的方法

数据库基础:

1.  A表和B表左连接的结果集是什么,或者说A表和B表是怎么关联的

INNER JOIN两边都对应有记录的才展示,其他去掉                   inner join 内连接,只保留两张表中完全匹配的结果集

LEFT JOIN左边表中的数据都出现,右边没有数据以NULL填充          left join会返回左表所有的行,即使在右表中没有匹配的记录

RIGHT JOIN右边表中的数据都出现,左边没有数据以NULL填充          right join会返回右表所有的行,即使在左表中没有匹配的记录

2. 事务的特性是什么

一般来说,事务是必须满足4个条件(ACID):原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中如果发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

3. 索引有几种类型

单值索引:一个索引只包括一个列,一个表可以有多个列

唯一索引:索引列的值必须唯一,但允许有空值;主键会自动创建唯一索引

复合索引:一个索引同时包括多列

171. MySQL 索引是怎么实现的?

索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从

而实现高效查找数据。

具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎

的索引都是 B+ 树实现的,B+ 树的搜索效率,可以到达二分法的性能,找到数据区域之后

就找到了完整的数据结构了,所有索引的性能也是更好的。

174. 说一下 MySQL 常用的引擎?

· InnoDB 引擎:mysql 5.1 后默认的数据库引擎,提供了对数据库 acid 事务

的支持,并且还提供了行级锁和外键的约束,它的设计的目标就是处理大数据容量

的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据

和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的

行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全

表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会

提升效率的。

· MyIASM 引擎:不提供事务的支持,也不支持行级锁和外键。因此当执行插入

和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不

过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select

count(*) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全

表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将

MyIASM 作为数据库引擎的首选。

5、CHAR 和 VARCHAR 的区别?

1、CHAR 和 VARCHAR 类型在存储和检索方面有所不同

2、CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255 当 CHAR

值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。

10、LIKE 声明中的%和_是什么意思?

%对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。

38、Myql 中的事务回滚机制概述

事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个

不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤

销。

要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修

改完,可能第二个表修改过程中出现了异常而没能修改,此时就只有第二个表依

旧是未修改之前的状态,而第一个表已经被修改完毕。而当你把它们设定为一个

事务的时候,当第一个表修改完,第二表修改出现异常而没能修改,第一个表和

第二个表都要回到未修改的状态,这就是所谓的事务回滚

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值