1. java8的新特性
-
Lamdba表达式搭配Stream API
1、Stream自己不会存储数据。
2、Stream不会改变源对象。相反,它们会返回一个持有结果的新Stream对象
3、Stream操作时延迟执行的。这就意味着它们等到有结果时候才会执行。
4、和list不同,Stream代表的是任意Java对象的序列,且stream输出的元素可能并没有预先存储在内存中,而是实时计算出来的。它可以“存储”有限个或无限个元素。例如:我们想表示一个全体自然数的集合,使用list是不可能写出来的,因为自然数是无线的,不管内存多大也没法放到list中,但是使用Sream就可以
- 函数式接口
- 方法引用和构造引用
- 接口中的默认方法和静态方法
- 新时间日期API
- OPtional
1、 optional类是一个容器,代表一个值存在或者不存在,原来使用null表示一个值存不存在,现在使用optional可以更好的表达这个概念,并且可以避免空指针异常。
2、Optional.ofNullable(T t) :若t不为空创建一个Optional实例否则创建一个空实例;
3、isPresent() : 判断是否包含值;
4、orElse(T t) :如果调用对象包含值,返回该值,否则返回t;
2. java8四大内置函数接口
- 消费型接口 Consumer void accept(T t)
- 供给型接口 Supplier T get()
- 函数型接口 Function<T,R> R apply(T t)
- 断定型接口 Predicate boolean test(T t)
3. volatile关键字作用
- 线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
- 顺序一致性:禁止指令重排序。
Volatile与Synchronized比较
- Volatile是轻量级的synchronized,因为它不会引起上下文的切换和调度,所以Volatile性能更好。
- Volatile只能修饰变量,synchronized可以修饰方法,静态方法,代码块。
- Volatile对任意单个变量的读/写具有原子性,但是类似于i++这种复合操作不具有原子性。而锁的互斥执行的特性可以确保对整个临界区代码执行具有原子性。
- 多线程访问volatile不会发生阻塞,而synchronized会发生阻塞。
- volatile是变量在多线程之间的可见性,synchronize是多线程之间访问资源的同步性。
4. redis五种类型
- string(字符串)
- hash(哈希)
- list(列表)
- set(集合)
- sort set (有序集合)
5. MySQL底层数据结构
- 首先要知道索引存储在文件中,文件放置磁盘中,索引建多了会影响增删改效率。每查询一次索引节点都会进行一次磁盘IO读取,即要寻道和旋转。寻道需要移动磁头耗费较多时间。
- MySQL有两种常见的存储引擎:InnoDB(默认)、MyISAM(用得少,在MySQL8.0中被废弃掉了),存储引擎范围是表级别的
6. 慢sql处理
7. 索引最左匹配原则
8. synchronized如何实现同步锁
9. synchronized和lock的区别
10. springboot的核心
11. redis的持久化机制
12. redis的RDB和AOF
13. redis的缓存击透、雪崩解决方案
14. 多线程
笔试题:类加载 多线程 sql
父子类static块加载顺序 二分法查找有序数组中的数字
多线程轮流打印1和10(1到10)
sql查找某一天可以参加的活动
面试题:Dubbo jvm mybatis spring 集合(arraylist hashmap)
springboot redis mongodb ddd