Java面试题记录(含答案)

1. java8的新特性

    Lamdba表达式搭配Stream API 1、Stream自己不会存储数据。 2、Stream不会改变源对象。相反,它们会返回一个持有结果的新Stream对象 3、Stream操作时延迟执行的。这就意味着它们等到有结果时候才会执行。 4、和list不同,Stream代表的是任意Java对象的序列,且stream输出的元素可能并没有预先存储在内存中,而是实时计算出来的。它可以“存储”有限个或无限个元素。例如:我们想表示一个全体自然数的集合,使用list是不可能写出来的,因为自然数是无线的,不管内存多大也没法放到list中,但是使用Sream就可以
  1. 函数式接口
  2. 方法引用和构造引用
  3. 接口中的默认方法和静态方法
  4. 新时间日期API
  5. OPtional 1、 optional类是一个容器,代表一个值存在或者不存在,原来使用null表示一个值存不存在,现在使用optional可以更好的表达这个概念,并且可以避免空指针异常。 2、Optional.ofNullable(T t) :若t不为空创建一个Optional实例否则创建一个空实例; 3、isPresent() : 判断是否包含值; 4、orElse(T t) :如果调用对象包含值,返回该值,否则返回t;

2. java8四大内置函数接口

  1. 消费型接口 Consumer void accept(T t)
  2. 供给型接口 Supplier T get()
  3. 函数型接口 Function<T,R> R apply(T t)
  4. 断定型接口 Predicate boolean test(T t)

3. volatile关键字作用

  1. 线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
  2. 顺序一致性:禁止指令重排序。
Volatile与Synchronized比较 Volatile是轻量级的synchronized,因为它不会引起上下文的切换和调度,所以Volatile性能更好。 Volatile只能修饰变量,synchronized可以修饰方法,静态方法,代码块。 Volatile对任意单个变量的读/写具有原子性,但是类似于i++这种复合操作不具有原子性。而锁的互斥执行的特性可以确保对整个临界区代码执行具有原子性。 多线程访问volatile不会发生阻塞,而synchronized会发生阻塞。 volatile是变量在多线程之间的可见性,synchronize是多线程之间访问资源的同步性。

4. redis五种类型

  1. string(字符串)
  2. hash(哈希)
  3. list(列表)
  4. set(集合)
  5. sort set (有序集合)

5. MySQL底层数据结构

  1. 首先要知道索引存储在文件中,文件放置磁盘中,索引建多了会影响增删改效率。每查询一次索引节点都会进行一次磁盘IO读取,即要寻道和旋转。寻道需要移动磁头耗费较多时间。
  2. 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

经验分享 程序员 微信小程序 职场和发展