自学内容网 自学内容网

面试宝典基础知识

单例

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

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

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

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锁适合大量代码的同步问题

                


原文地址:https://blog.csdn.net/m0_48362854/article/details/142848201

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!