1.重载重写的区别
-
(1)重载:发生在同一个类内
方法名必须相同 ,参数类型不同,个数不同,顺序不同,方法返回值和访问修饰符可以不同 -
(2)重写:发生在子类和父类之间
子类重写父类的非私有的方法,方法名要相同, 参数的类型、顺序、 个数必须相同, 返回值的范围小于等父类, 访问修饰符大于等于父类
2.创建线程的方法
-
第一种:继承Thread类
(1)定义 thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务,因此把run()方法称为执行体。
(2)创建thread的子类的实例,即创建了线程对象
(3)调运线程对象的start()方法来启动该线程。 -
第二种:实现Runnable接口
(1)定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
(2)创建 Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
(3)调用线程对象的start()方法来启动该线程。
3.面向对象的特点
- a.封装:Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。
封装的意义就是增强类的信息隐藏与模块化,提高安全性。 - b.继承:Java中的继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。
- c.多态:多态指的是子类对象可以直接赋给父类变量,但运行时依然表现子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。
4. 数据库的事务性质
-
1、原子性(Atomicity):
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。 -
2、一致性(Consistency) : 一个事务中,事务前后数据的完整性必须保持一致。
-
3、隔离性(Isolation): 事务的隔离性是指多个用户并发访问数据库时,一个用户的
事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。 -
4、持久性(Durability): 持久性是指一个事务一旦被提交,它对数据库中数据的改变
就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
5.什么是哈希冲突 怎么解决
- 问题一、什么是哈希冲突
由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。(两个不同的数据计算后的结果一样) - 问题二、如何解决哈希冲突
1、开放地址法(再散列法)
线性探查法
平方探查法
双散列函数探查法
2、链地址法(拉链法)
3、再哈希法
4、创建公共溢出区 - 详细解释:
1、开放地址法(前提是散列表的长度大于等于所要存放的元素)
发生哈希冲突后,按照某一次序找到下一个空闲的单元,把冲突的元素放入。
线性探查法:
从发生冲突的单元开始探查,依次查看下一个单元是否为空,如果到了最后一个单元还是空,那么再从表首依次判断。如此执行直到碰到了空闲的单元或者已经探查完所有单元。
平方探查法
从发生冲突的单元加上12,22,32,…,n2,直到遇到空闲的单元
双散列函数探查法
定义两个散列函数,分别为s1和s2,s1的算法和前面一致,s2取一个1~m-1之间并和m互为素数的数。s2作为步长。
2、链地址法
将哈希值相同的元素构成一个链表,head放在散列表中。一般链表长度超过了8就转为红黑树,长度少于6个就变为链表。
3、再哈希法
同时构造多个不同的哈希函数,Hi = RHi(key) i= 1,2,3 … k;
当H1 = RH1(key) 发生冲突时,再用H2 = RH2(key) 进行计算,直到冲突不再产生,这种方法不易产生聚集,但是增加了计算时间。
4、建立公共溢出区
把哈希表分为公共表和溢出表,如果发生了溢出,溢出的数据全部放在溢出区。
6.抽象类和接口的区别
1)接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含静态常量.
2)一个子类只能继承一个抽象类,但是可以实现多个接口
核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法.
7.super关键字和this关键字
- a.属性的区别:
this访问本类中的属性,如果本类没有这个属性,则用super访问父类中的属性。 - b.方法的区别: this访问本类中的方法,super访问父类中的方法。
- c.构造的区别:
(1)this调用本类构造构造,必须放在构造方法的首行。
(2)super调用父类构造,必须放在子类构造方法首行。
(3)其他区别:this表示当前对象。super不能表示当前对象 - d.变量的区别:
this.变量:调用的当前对象的变量; super.变量:直接调用的是父类中的变量。 - e.this(参数)和super(参数)方法
(1)this(参数):调用(转发)的是当前类中的构造器;
(2)super(参数):用于确认要使用父类中的哪一个构造器。 - f.注意点:
(1)在对拥有父类的子类进行初始化时,父类的构造方法也会执行,且优先于子类的构造函数执行;因为每一个子类的构造函数中的第一行都有一条默认的隐式语句super();
(2)this() 和super()都只能写在构造函数的第一行;
(3)this() 和super() 不能存在于同一个构造函数中。
(4)this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)。
8.请解释String、StringBuffffer、StringBuilder的区别:
-
String的内容不可修改,StringBuffer与StringBuilder的内容可以修改.
-
StringBuffer与StringBuilder大部分功能是相似的
-
StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作
-
***注意:***String和StringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:
1.String变为StringBuffer:利用StringBuffer的构造方法或append()方法
2.StringBuffer变为String:调用toString()方法。
9.并发和并行的区别:
- 并发:多个进程在一个CPU下采用时间片轮转的方式,在一段时间之内,让多个进程都得以推进,称之为并发。
- 并行:多个进程在多个CPU下分别,同时进行运行,这称之为并行。
10.Collection 和Collections 的区别?
- Collection 是一个接口,它是Set、List等容器的父接口;
- Collections是个一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。