Java常见的面试题(一)每日更新

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是个一个工具类,提供了一系列的静态方法来辅助容器操作,这些方法包括对容器的搜索、排序、线程安全化等等。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值