Java 面试

static 关键字

静态变量:属于类,随类存储在方法区,而不随对象存储在堆区,在访问静态变量的时候,建议是通过类名来访问(所以又叫作类变量);
静态方法:属于类
静态块:类加载的时候调用;
静态内部类:不能访问外部类的实例成员,只能访问外部类的静态成员,外部类的所有都可以访问静态内部类。

泛型

泛型的本质是参数化类型,Java 中的泛型是一种伪泛型,基于类型擦除来实现的。比如 字符串数组和整数数组,在 JVM 中二者通过 getClass 的到的是相等的。
List<?> 类型通配符
List<? super T> 泛型必须是 T 的父类
List<? extends T> 泛型必须是 T 的子类

多线程的创建方法

创建多线程的方法:继承 Thread 类并重写 run 方法;实现 runnable 接口,并且通过该实现 runnable 接口的对象来构造 thread 的对象,然后启动 thread;实现 Callable 接口

多线程的常用方法

静态方法

sleep():休眠;currentThread():当前正在执行的线程;interrupted() 是否被中断;yield() 放弃处理器;

实例方法

getId, getName
interrupt: 使线程中断;join 等待线程终止;setPriority 设置优先级

线程同步

同步方法,synchronized 锁住整个方法;同步代码块,不必要同步住整个方法,仅仅把关键部分锁住即可;volatile 关键字:volatile 关键字并不能保证原子性,只能保证每次使用的值,都是最新的,但是在使用的过程中,仍然有可能被抢夺 CPU,所以说,volatile 关键字只能保证可见性,并不能保证操作的原子性;原子变量

多线程通信

wait(): 释放对象锁,并进入阻塞; notify():唤醒一个正在等待对象锁的线程; notifiall():唤醒所有正在等待对象锁的线程;阻塞队列 & 就绪队列

sleep 和 wait 的区别

sleep 静态方法,wait 成员方法;sleep 不会释放锁,wait 会释放锁;

线程按顺序执行

Join 方法,join方法是Thread类中的一个方法,该方法的定义是等待该线程执行直到终止。其实就说join方法将挂起调用线程的执行,直到被调用的对象完成它的执行

线程阻塞的方法

sleep 主动放弃处理器资源,进入阻塞状态;
获取锁失败,会进入阻塞状态;
等待 notify 时候,也会阻塞;
suspend 挂起的时候,也会阻塞

乐观锁与悲观锁

悲观锁:假设最坏的情况,每次都加锁,通过 synchronized 关键字或者 Lock 接口实现;
乐观锁:拿的时候不会上锁,但是在更新的时候会检查一下别人有没有修改,这种比较适用于多读的场景;

锁升级

无锁、偏向锁、重量级锁、轻量级锁

进程间通信的方式

共享内存、管道、socket、信号量

进程状态

创建、就绪、执行、阻塞、终止

死锁的产生条件

互斥、不剥夺、请求和保持、循环等待

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值