JAVA面试题(更新中)

目录

String、StringBuffer、StringBuilder区别

ArrayList和LinkedList区别

HashMap底层原理

ConcurrentHashMap

接口和抽象类的区别

==与equal的区别

synchronize的用法及原理

Java哪些地方使用了CAS

Static修饰符

List和Set的区别

面向对象的理解

Synchronized 和Lock的区别

Final关键字

重载和重写的区别,构造方法能不能重写

Java集合

访问修饰符

Java的异常处理机制

Java的基本数据类型和引用类型

Java运行数据区

wt()和sleep()区别

java特点、优点

ArrayList

String、StringBuffer、StringBuilder区别

String final 不可变变量

StringBuffer和StringBuilder都是可变变量 StringBuffer是线程安全的 StringBuilder线程不安全。

StringBuilder的效率比StringBuffer的执行效率高

ArrayList和LinkedList区别

ArrayList底层是动态数组实现的,数组是一组连续的内存单元,查询快(有索引),插入删除慢(需要更改索引)。

LinkedList是双向链表实现的,读写慢,插入删除快

HashMap底层原理

由数组+链表+红黑树构成。集合put时,通过计算key键的哈希值来放入元素。若有key值相同的哈希值时,会通过链表进行存放,链表长度达到8时会开辟红黑树进行存放。

ConcurrentHashMap

它是一个线程安全的集合,它的底层是由数组+链表+红黑树构成的,基本功能与HashMap相似,并在其基础上加了同步机制,采用锁头结点的方式来实现线程安全。

接口和抽象类的区别

抽象类的关键字为abstract class、抽象类有构造方法、在jdk8中抽象类可以有普通方法,一个类只能有一个抽象类、成员变量可以是各种类型、可以有静态方法和静态代码块

接口的关键字为interface、无构造方法、无普通方法、一个类可以有多个接口、只能有常量、成员变量只能是public、static、final类型的、不能有静态方法和静态代码块

==与equal的区别

==是比较基本数据类型时,比较两个数字是否相等;比较引用类型时,比较的是对象的内存地址。

equal在未重写时进行的是内存地址比较,重写后进行的是对象内容比较

synchronize的用法及原理

synchronized可以修饰静态方法、普通方法、代码块,主要用于实现多线程对于共享数据的互斥同步。

原理:Synchronized采用的是Java的对象头来存储锁信息,并且支持锁升级。在JVM里实现都是基于进入和退出Monitor对象来实现方法同步和代码块同步。

Java哪些地方使用了CAS

1.并发容器 2.原子类 3.AQS

Static修饰符

static可修饰变量、类、方法。不可修饰构造器。

被修饰的类,可以在不创建实例的情况下访问它的静态变量和静态方法,其他实例方法和实例对象须通过实例对象来获取。

静态方法不能用this,this随着对象创建而存在。

静态变量随着静态类加载而创建。

List和Set的区别

List和Set都是Collection接口的子接口,他们主要的区别在于元素的有序性和重复性。

list是可以有重复的有序集合,set不可重复

面向对象的理解

三大基本特征:封装继承多态 封装:隐藏类的成员变量和实现细节,不允许外部直接访问。

继承:代码共享,每个子类都有父类的方法和属性,提高代码服用。

多态:继承与同一父类的多个子类在同一方法有不同的情况,重写来实现。

Synchronized 和Lock的区别

synchronized是同步锁,可以修饰静态方法、普通方法和代码块,是Java的关键字,不可见,性能消耗大,JVM实现。Lock是一个接口,基于JDK实现,可以查看源码。Lock不会主动释放,需要手动释放锁。Lock可以通过TryLock()查看是否加锁成功,而synchronized不可以查看。

Final关键字

1.Final被用来修饰类和类的成分。

2.final修饰类不可以被继承,修饰方法,方法不能重写。修饰基本变量则值不能在改变,修饰引用变量,引用地址不能变,值可以变。

重载和重写的区别,构造方法能不能重写

重写是父子类中的关系:指的是子类可以重写父类的方法,方法名相同,参数相同。

重载是:方法名相同,参数不同,也可发生在父子类中。

构造方法不能被重写,因为构造方法要求方法名与类名相同,而父子类类名不同。

Java集合

Java集合类中主要有Collection和Map两个接口派生出的,Collection中有List、Set、Queue。

List代表有序可重复的数据列表。Set代表无需可重复的数据集合。Queue代表先进先出队列。

Map是具有关系映射的集合,Arraylist、linkedlist、hashmap、hashset是最常用得类。都是线程不安全的,线程安全的集合有ConcurrentHashMap,或者使用Synchronize方法包装成线程安全类。

访问修饰符

private、protect、public、default

private修饰的成员 只能在当前类内部被访问

default可以在相同包下的其他类访问

protected可以在同一个包下访问

public 随时都能被访问。

Java的异常处理机制

try中写业务代码

catch捕捉并处理某个异常

finally用于回收资源

Java的基本数据类型和引用类型

基本数据类型:Byte、short、long、double、float、int、char、boolean 在栈上自动分配内存空间

引用类型:String、接口、类、数组 不会被分配内存空间,只存储一个内存地址。

Java运行数据区

运行时数据区分为方法区、堆、本地方法栈、虚拟机栈、程序计数器。其中方法区和堆线程共享。

程序计数器和虚拟机栈是线程私有的。

wt()和sleep()区别

sleep是当前线程的休眠,让出cpu,但不是释放锁,它是Thread的静态方法;

wait是当前线程等待,释放锁,是Object方法。

Sleep没有释放锁,wait释放锁。两者都可以暂停线程执行。

Wait用于线程间通信,sleep用于暂停线程。

java特点、优点

1.吸收了C++的优点,摒弃了C++多继承和指针的复杂使用。不需要内存进行管理,具有垃圾回收机制。

2.面向对象,方便理解。

3.跨平台。

4.内涵大量的库,简化编程工作

5.适合Web开发。

ArrayList

基于数组实现,分装了Object数组,初始化容量为10,以1.5倍进行扩容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值