Java开发面试题——1

Java基础

创建对象的几种方法

  1. 采用new
  2. 通过反射机制
  3. 采用clone方法
  4. 通过序列化机制

抽象类与接口的区别

抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。如果实现了这个接口,那么就必须确保使用这些方法,可以说是一种约束把。

抽象类接口
可以有默认的方法实现接口完全是抽象的,不可以有具体的方法实现
子类使用extends继承抽象类,且一个子类只可以继承一个抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类需要用implements来实现接口,它需要提供接口中所有声明的方法的实现
抽象类可以有构造器接口不能有构造器
除了不能实例化抽象类之外,与普通类没有区别接口是完全不同的类型
抽象方法可以有public、protected和default这些修饰符接口方法默认修饰符是public。不可以使用其它修饰符。
抽象方法可以有main方法并且可以运行接口不可以有main方法
抽象类可以继承一个类和实现多接口接口只可以继承一个或多个接口

接口的意义

接口的意义用三个词就可以概括:规范,扩展,回调

拆箱和装箱

  • 拆箱就是自动将包装器类型转换为基本数据类型;
  • 装箱就是自动将基本数据类型转换为包装器类型。

int与Integer的区别

  • Integer是int的包装类,int则是java的一种基本数据类型;
  • Integer变量需要实例化后才能使用,而int变量不需要;
  • Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值;
  • Integer的默认值为null,而int的默认值为0。

String、StringBuilder和StringBuffer区别

共同点:都是final类,不允许被继承

  • String:String对象一旦创建之后该对象是不可更改的,一旦修改字符串,则会产生新的对象,适用于少量字符串操作的情况;
  • StringBuilder:可以多次进行修改字符串,不产生新对象,但是线程不安全,适用于单线程操作大量字符串数据;
  • StringBuffer:与StringBuilder唯一的区别就是StringBuffer线程安全,适用于多线程操作大量字符串数据。

String的intern()方法

intern()方法会首先从常量池中查找是否存在该常量值,如果常量池中不存在则先在常量池中创建,如果已经存在则直接返回。
比如:

String s1="aa"; 
String s2=s1.intern(); 
//此时由于已经有这个常量了,所以返回true
System.out.print(s1==s2);//返回true

数据集合

数据集合包括List、Set、Map,而List又包括ArrayList、Vector、LinkedList,Set包括HashSet、LinkedHashSet、TreeSet、ArraySet,Map包括HashMap、HashTable、TreeMap。

List(继承Collection接口)

  1. ArrayList: 它的底层结构为数组,故而有着数组的特性,有序,查询快,但增删比较慢,可以存储重复的值(包括null),但是它是线程不安全的。默认初始容量为10。
  2. Vector: 它的底层结构也是数组,同样的拥有数组的特性,有序,查询快,但增删比较慢,可以存储重复的值(包括null),和ArrayList唯一的区别是:Vector是实现了synchronized,是线程安全的。
  3. LinkedList: 它的底层结构为链表,有着链表的特性:查询慢,增删快,同时它也是线程不安全的。

Set(继承Collection接口)

  1. HashSet: 它的底层结构为哈希表,无序,不可以存储重复的值,只可以有一个null值。
  2. LinkedHashSet: 它的底层结构为双向链表和哈希表,双向链表保证了有序,哈希表保证了元素的唯一性,只可以有一个null值。
  3. TreeSet: 它的底层结构为红黑树,内部实现排序,也可以自定义排序规则,TreeSet不允许有null值,否则会出现空指针异常(NullPointerException)。
  4. ArraySet: 他的底层数据结构为双数组,有序。

Map(Map接口)

  1. HashMap: 它的底层结构为数组结构,这个数组里的每项元素都为一个链表结构;无序,线程不安全;存储的内容为键值对(key-value),只允许一个key为null,value不做限制。默认初始容量为16.
  2. HashTable: 散列表,也叫哈希表,存储的内容为键值对(key-value),无序,线程安全,不允许有null值;其父类为Dictionary。
  3. TreeMap: 它的底层结构为红黑树,父类是SortMap接口,能够把它保存的键值对根据key排序;key不允许有null值,否则会出现空指针异常(NullPointerException)。

数据库

join连接

join连接包括了内连接(inner join)和外连接(outer join),其中外连接有包括了左外连接,右外连接以及全外连接。

test1表

idtest1Name
2王五
3刘六

test2表

idtest2Name
1张三
2李四
  1. inner join: 与on一起用,inner join on,获得两个表中匹配的行。
select * from test1 inner join test2 on test1.id=test2.id;

注:只写join默认为inner join
执行结果

  1. left join: 左外连接,与on一起用,返回左表的全部行,每一行如果右表没有匹配的话,那么这一行右表的字段都为null。

执行结果

  1. **right join:**右外连接,与on一起用,返回右表的全部行 ,每一行如果左表没有匹配的话,那么这一行右表的字段都为null。
    执行结果

  2. full join: 全外连接,显示两个表的结果。
    执行结果

索引

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找,则与在表中搜索所有的行相比,索引有助于更快地获取信息。

索引种类

  • 唯一索引
  • 主键索引
  • 聚集索引

如果同时有多个索引,那么采用最左优先原则,如有一个联合索引(a,b,c),则mysql会创建(a)、(a,b)、(a,b,c)三个索引对。

MyBatis和JDBC的差别

MyBatis是对JDBC的封装,相对于jdbc而言,mybatis有以下优点:

  1. 有数据库连接池(减少数据库关闭开启时数据库的资源浪费);
  2. 由SQL配置文件统一管理,对数据库进行存取操作(减少硬编码)
  3. 可以动态生成SQL语句,且可以防止sql注入。
  4. 能够对结果集进行映射(resultset直接转为java对象)

SpringBoot

SpringBoot特性

  1. 可以很快的搭建一个项目;
  2. 非常简洁的安全策略集成;
  3. 内嵌Tomcat等Servlet容器;
  4. 简化了xml等繁琐的配置;
  5. 强大的开发包,且支持热部署(热启动);
  6. 自带应用监控;
  7. 自动管理依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颜艾青

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值