面试宝典基础知识

单例

饿汉式 线程安全 一开始就初始化

饱汉式 非线程安全 延迟初始化

双检锁 线程安全 延迟初始化

volatile:
1、保证可见性
2、禁止指令重排序

反射

三种方式

每个对象.getClass()

类.class

Class.forName()

JDK1.8的新特性 没遇到过就先没背

          

异常

分为Error 和Exception 

Exception 又分为

运行时异常NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等

非运行时异常(编译异常)  IOException、SQLException等以及用户自定义的Exception异常         

BIO NIO AIO

BIO 同步阻塞

NIO 同步非阻塞 使用了channel

AIO  异步非阻塞 异步IO基于事件和回调机制

ThreadLocal 原理 

为共享变量创建一个副本 每个线程都可以访问自己的共享变量 通过threadlocal保证线程安全性

 threadlocal内部有一个静态内部类 threadlocalmap  存储每一个线程的变量副本 其中key为当前的threadlocal对象 value是对应线程的变量副本 

但是threadlocal本身并不存储值 只是作为一个key存到map里边  而且是一个弱引用

也就是可能会存在当一些key为null的键值对的时候gc回收 但是entry因为key为null访问不到了 所以会造成内存泄漏

同步锁 死锁 乐观锁 悲观锁

同步锁 加sychronize关键字同一时刻 只允许一个线程访问共享数据

死锁  多个线程同时被阻塞 全部都在等待某个资源被释放

乐观锁 总是假设最好的情况 每次都认为共享资源没有被占用 只有在最后提交修改的时候检测一下共享资源有没有被更新

悲观锁 总是假设最坏的情况 每次都认为数据会被修改  所以会在操作之前加锁

        比如行锁 表锁 读锁 写锁

sychronize的底层实现原理

sychronize可以保证方法或者代码块在运行的时候 同一时刻只有一个方法进入临界区 同时还可以保证共享变量的内存可见性

每个对象都可以加锁

        普通同步的方法 锁当前实例对象

        静态同步方法 锁类的class对象

        同步方法块 锁括号里边的对象

sychronize和volatile的区别

sychronize和lcok的区别

sychronize是java内置关键字 但是lock 在jvm层面就是一个java类

sychronzie适合少量同步 lock锁适合大量代码的同步问题

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值