Ajax面试 参考 https://juejin.im/post/5aa2b26b518825556020873f
Java 后端 https://juejin.im/entry/5aa69dc851882555602093b2
1、Java的双亲委派机制 内存被分为六个区 堆划分 GC收集算法
除了Bootstrap ClassLoader外,其余的类加载器都应当有自的父加载器
当前 classLoader 的缓存中没有找到被加载的类的时候,委托父类加载器去加载,父类加载器采用同样的策略,首先查看自己的缓存,然后委托父类的父类去加载,一直到 bootstrap ClassLoader.
主要是为了安全性
,避免用户自己编写的类动态替换 Java 的一些核心类,比如 String,同时也避免了重复加载
,因为 JVM 中区分不同类,不仅仅是根据类名,相同的 class 文件被不同的 ClassLoader 加载就是不同的两个类,如果相互转型的话会抛java.lang.ClassCaseException. 类加载器 classloader 是具有层次结构的,也就是父子关系。其中,Bootstrap 是所有类加载器的父亲
2、ReentrantLock可以与Condition的配合使用,Condition为ReentrantLock锁的等待和释放提供控制逻辑
使用ReentrantLock加锁之后,可以通过它自身的Condition.await()方法释放该锁,线程在此等待Condition.signal()方法,然后继续执行下去。await方法需要放在while循环中,因此,在不同线程之间实现并发控制,还需要一个volatile的变量,boolean是原子性的变量
3、Executor线程池
Executor框架是一个根据一组执行策略调用,调度,执行和控制的异步任务的框架,目的是提供一种将”任务提交”与”任务如何运行”分离开来的机制。
J.U.C中有三个Executor接口:
- Executor:一个运行新任务的简单接口;
- ExecutorService:扩展了Executor接口。添加了一些用来管理执行器生命周期和任务生命周期的方法;
- ScheduledExecutorService:扩展了ExecutorService。支持Future和定期执行任务。