2020/12/08背题笔记
反射怎么创建对象,构造器里的参数是什么?
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
/**
* @Author:Frank
* @Date:2020/12/8 15:38
*/
public class Reject {
public static void main(String[] args) {
try {
Class tree=Class.forName("TreeNode");
Constructor constructor=tree.getConstructor(new Class[]{int.class});
//Constructor []constructors=tree.getConstructors();
Object arr[]=new Object[]{1,2};
//TreeNode s=(TreeNode) constructor.newInstance(123);
Method go=tree.getMethod("go",new Class[]{int.class,int.class});
System.out.println(go.invoke(constructor.newInstance(123),arr));
//System.out.println(go.invoke(null,arr));
} catch (Exception e) {
e.printStackTrace();
}
}
}
-
Class.forName或者TreeNode.class获取class
-
获取构造函数,可以指定参数获取哪个构造函数,或者可以直接数组全都获取
-
如果要创建对象,直接newInstance,构造器传入构造函数的参数
-
如果只是想用方法,定义一个Method传入想要获取函数的参数来指定获取的方法
-
通过invoke来实现方法,如果是静态方法,传入null,如果传入多个参数,需要以Object数组的形式传入
线程池参数有哪些,拒绝策略讲一下?
-
线程池七大参数
-
核心线程数
-
最大线程数
-
空闲线程等待时间
-
空闲线程等待时间的单位
-
阻塞队列
-
拒绝策略
-
创建线程的工厂
-
-
拒绝策略
- 丢弃任务抛出异常
- 丢弃任务不抛出异常
- 丢掉队列最前面的任务,然后再提交一次任务
- 由提交任务的线程处理该任务
spring事务传播机制
-
支持当前事务的
- required----当前存在事务则加入,不存在创建一个
- supports----当前存在事务则加入,不存在那就非事务放hi运行
- mandatory----存在事务则加入,不存在那就报错
-
不支持当前事务的
- required_news----创建一个新事务----如果当前存在事务则挂起
- not_supported----以非事务方式运行----如果当前存在事务则挂起
- never----以非实物方式运行-----如果当前存在事务报错
-
其他情况
- nested----如果当前存在事务,则创建一个新事务作为当前事务的嵌套事务运行,否则和requird等价
数据库索引的底层原理,B树和B+树有什么区别
- B树,数据不下沉也存储数据,会导致索引存储量下降
- b+树,数据存在叶子节点,并且还有底层链表存在
那你是认为b树不适合作为索引么?(面试官:其实这两个都作为索引,只不过各有优点的)
- 大坑!面试的时候不要把b树喷得一无是处,mongodb用的是b树
- b树内,每个节点都存储数据,因此在查询单条数据的时候,有可能o(1)就查到,也有可能会更高,所以做单一数据查询时,b树平均性能更好,但是不适合做数据遍历操作
- b+树,数据出现在叶子节点上,查询比较稳定,单一数据查询平均性能不如b树,但是数据便利又优点,叶子节点有指针相连,这个特性使得b+树非常适合做范围查询
- 所以没准是Mysql数据遍历操作比较多,所以用b+,monnodb单一查询过多,用b
hashmap的hashcode为什么一定要重写?
- 可以理解为hashcode是在定位元素应该分配给数组的哪个下标里,如果不重写,那么默认hashcode是内存地址的id,业务上认为相等,但是地址不等
那为什么equals也要重写?
- 如果不重写,那么equals就是默认的==,进行地址的判断,那么必定不是业务上的同一个对象,所以也要重写
inputstream/reader的区别
inputstream是字节流byte,reader是字符流,所以inputstream传输中文可能乱码,但是reader可能不会
字节和字符的区别是什么?
字节通常用来描述大小的,可以理解为byte,而字符,通常我们称为一个char字符,一个int字符这种,他们分别占2个字节,4个字节大小
MD5是对称加密,还是非对称加密?
两者都不是,MD5无法解密,根本谈不上对称和非对称
进程间通信的方式
- 管道(半双工,如果需要双方通信,需要创建两个管道)
- 有名管道
- 共享内存(需要自定义)
- 信号
- 信号量
- 消息队列
- 套接字
线程间通信的方式
- 锁机制:互斥锁,条件变量,读写锁
- 信号量机制Semaphore
- 信号机制Signal
list和set区别
- list不允许重复元素的存在,set允许重复元素存在,list是有序集合保持插入顺序,set是无序集合,list可以通过下标访问,set不能
解决哈希冲突的常用方法
- 开放定址法(线性探测)
- 链地址法(拉链法)
- 再哈希法(冲突就再hash一遍)
- 建立公共溢出区

浙公网安备 33010602011771号