Java基础与进阶(面试重点整理)

&抽象类是他的所有子类的公共属性的集合,!抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类!

&抽象类不能用来创建对象,即抽象类不能被直接实例化(new),要通过其普通子类进行实例化

&·静态变量一般来说是由类直接调用

&·静态方法只能访问静态成员,不能访问实例成员;而实例方法可以访问静态成员和实例成员

&ArrayList的特点:

       1.ArrayList的底层是数组

       2.ArrayList使用new去创建它的时候,它的初始大小是多少?10

       注:双击shift的时候,可以在IEDA中打开一个对类进行搜索的小窗口

       3.ArrayList的扩容机制是怎么样的呢?

          扩容操作最容易新增元素的时候触发。原因:如果元素过多,导致原本list装不下。扩容

          机制和数组扩容机制相同,也是复制数组的原理

       注:通过ctrl+F12来对当前类的属性和方法进行一个大概的查看

&&&HashMap的特点

       1.HashMap是以数组+链表的形式存在

       2.HashMap的初始容量--------->16(1 << 4)

       3.HashMap的负载因子。现有元素个数/HashMap的容量=负载因子       (和扩容操作相关)

              DEFAULT_LOAD_FACTOR =  0.75f

       4.Hash中桶值的含义(HashMap中,桶值为8)

       5.HashMap在JDK1.8之后,如果桶值大于8,就会将链表转换为红黑树

              目的:

                     1.降低时间复杂度,提升查询效率(TREELFY_THRESHOLD = 8))

       5.HashMap的扩容机制(每次扩容扩容多少?)原容量的两倍

       6.Hash的含义:Hash(哈希)是一种操作,HashCode(哈希值)是数据通过哈希操作得到的

       7.哈希值的作用是确定数据在哈希表中的位置

       8.哈希表:我们学习过程中,带有Hash名称的,我们都可以将他简单看作一个哈希表

       9.哈希冲突:多个不同的数据,通过hash操作,却得到了相同的哈希值。这种现象就称为哈希冲突

       10.哈希冲突危害:降低查询、增删的性能

       11.降低哈希冲突的手段之一:reHash(类似于递归操作,将上一次的hash操作的结果作为下一次hash操作的参数)

&&值传递和引用传递

值传递和引用传递的概念:

       1.两种传递方式和方法的参数有关

       &2.大部分情况下,在数据做为参数传递的时候,基本数据类型采用的是值传递,引用数据类型是引用传递

       3.包装类,String类虽然是引用传递,但是还是值传递的形式参与方法的操作

              原因:final关键字所修饰

       &4.值传递:传递的数据的值的副本,方法内部对方法参数的修改,不会影响方法体外部的变量的值(基本数据类型)

       &5.引用传递:传递的是数据的地址,方法内部对方法参数的修改,会影响方法题外部的变量的值

&throw出现在方法体中,用来抛出一个异常。程序会在throw语句后停止,如果存在catch

          语句,则会执行catch中的代码块

                                                 Java中线程的生命周期

新建状态:建立一个线程对象后该线程对象就处于新建状态。它保持这个状态直到执行start() 方法

就绪状态:当线程调用了start()方法之后,就会进入就绪状态。此时的线程处于就绪队列(默认先入先出)中,等待JVM的调度。

运行状态:就绪状态的线程获取 CPU 资源,就可以执行 run()方法,此时线程便处于运行状态。处于运行状态的线程较为复杂,它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态:如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。进入阻塞的几种方法:wait()、synchronized、sleep()、join()、sleep()

Java多线程中的线程优先级

Java 线程的优先级是一个整数,取值范围是 1 (Thread.MIN_PRIORITY ) - 10 (Thread.MAX_PRIORITY )。

默认情况下,每一个线程都会分配一个优先级 NORM_PRIORITY(5)。

具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序

synchronized保证原子性操作,许多源码也有用到它

volatile不保证原子性操作

synchronized存在对象锁和非对象锁,同一对象锁之间存在互斥,其他类似的锁也是同理

关于线程常见的面试题:

公平锁和非公平锁:核心区别就是抢占。

ReentrantLock和synchronized的区别:可以实例化对象;含有更多丰富的方法;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值