八股文问题集合
面试必看java八股文
问题正在收录中,累了休息一会,如果有需要请,先关注,这几天会更帖子,答案后续补上
文章目录
- 八股文问题集合
- `问题正在收录中,累了休息一会,如果有需要请,先关注,这几天会更帖子,答案后续补上` @[TOC](文章目录)
- 1、Java基础
- 1.1 什么是Java?
- 1.2 JVM、JRE和JDK的关系?
- 1.3 什么是跨平台性?原理是什么?
- 1.4 Java语言有哪些特点?
- 1.5 Java应用程序与小程序之间有那些差别?
- 1.6 Java和C++的区别?
- 1.7 Oracle JDK 和 OpenJDK 的对比?
- 1.8 Java有哪些数据类型?
- 1.9 用最有效率的方法计算 2 乘以 8?
- 1.10 Math.round(11.5) 等于多少?Math.round(-11.5) 等于多少?
- 1.11 float f=3.4;是否正确?
- 1.12 short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
- 1.13 什么Java注释?
- 1.14 访问修饰符 public,private,protected,以及不写(默认)时的区别?
- 1.15 &和&&的区别?
- 1.16 final 有什么用?
- 1.17 final finally finalize区别?
- 1.18 this关键字的用法?
- 1.19 super关键字的用法?
- 1.20 this与super的区别?
- 1.21 static存在的主要意义?
- 1.22 static的独特之处?
- 1.23 static应用场景?
- 1.24 static注意事项?
- 1.25 break ,continue ,return 的区别及作用?
- 1.26 在 Java 中,如何跳出当前的多重嵌套循环?
- 1.27 面向对象和面向过程的区别?
- 1.28 面向对象三大特性?
- 1.29 什么是多态机制?Java语言是如何实现多态的?
- 1.30 面向对象五大基本原则是什么(可选)?
- 1.30 抽象类和接口的对比?
- 1.31 普通类和抽象类有哪些区别?
- 1.32 抽象类能使用 final 修饰吗?
- 1.33 创建一个对象用什么关键字?对象实例与对象引用有何不同?
- 1.34 成员变量与局部变量的区别有哪些?
- 1.35 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
- 1.36 一个类的构造方法的作用是什么?若一个类没有声明构造方法, 改程序能正确执行吗?为什么?
- 1.37 构造方法有哪些特性?
- 1.38 静态变量和实例变量区别?
- 1.39 静态变量与普通变量区别?
- 1.40 静态方法和实例方法有何不同?
- 1.41 在一个静态方法内调用一个非静态成员为什么是非法的?
- 1.42 什么是方法的返回值?返回值的作用是什么?
- 1.43 什么是内部类?
- 1.44 内部类的分类有哪些?
- 1.45 内部类的优点?
- 1.46 内部类有哪些应用场景?
- 1.47 构造器(constructor)是否可被重写(override)?
- 1.48 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- 1.49 == 和 equals 的区别是什么?
- 1.50 值传递和引用传递有什么区别?
- 1.51 为什么 Java 中只有值传递?
- 1.52 JDK 中常用的包有哪些?
- 1.53 java 中 IO 流分为几种?
- 1.54 BIO,NIO,AIO 有什么区别?
- 1.55 Files的常用方法都有哪些?
- 1.56 什么是反射机制?
- 1.57 反射机制优缺点?
- 1.58 反射机制的应用场景有哪些?
- 1.59 Java获取反射的三种方法?
- 1.60 字符型常量和字符串常量的区别?
- 1.61 什么是字符串常量池?
- 1.62 String 是最基本的数据类型吗?
- 1.63 String有哪些特性?
- 1.64 String为什么是不可变的吗?
- 1.65 是否可以继承 String 类?
- 1.66 数组有没有 length()方法?String 有没有 length()方法?
- 1.67 String 类的常用方法都有那些?
- 1.68 在使用 HashMap 的时候,用 String 做 key 有什么好处?
- 1.69 String和StringBuffer、StringBuilder的区别是什么?String 为什么是不可变的?
- 1.70 拆箱:将包装类型转换为基本数据类型; int 和 Integer 有什么区别?
- 1.71 Integer a= 127 与 Integer b = 127相等吗?
- 1.72 队列和栈是什么?有什么区别?
- 1.73 对象的创建?
- 1.74 Java会存在内存泄漏吗?
- 1.75 内存溢出,如何排查线上问题?
- 1.76 简述Java垃圾回收机制?
- 1.77 GC是什么?为什么要GC?
- 1.78 垃圾回收的优点和原理,并考虑2种回收机制?
- 1.79 Java中都有哪些引用类型?
- 1.80 怎么判断对象是否可以被回收?
- 1.81 说一下 JVM 有哪些垃圾回收算法?
- 1.82 说一下类装载的执行过程?
- 1.83 什么是双亲委派模型?
- 1.84 什么是集合?
- 1.85 集合的特点?
- 1.86 集合和数组的区别?
- 1.87 使用集合框架的好处?
- 1.88 常用的集合类有哪些?
- 1.89 List,Set,Map三者的区别?List、Set、Map 是否继 承自 Collection 接口?List、Map、Set 三个接口存取 元素时,各有什么特点?
- 1.90 集合框架底层数据结构?
- 1.91 哪些集合类是线程安全的?
- 1.92 迭代器 Iterator 是什么?
- 1.93 ==与equals的区别?
- 1.94 说一下 HashMap 的实现原理?
- 1.95 为什么HashMap中String、Integer这样的包装类适合作为K?
- 1.96 如果使用Object作为HashMap的Key,应该怎么办呢?
- 1.97 HashMap 与 HashTable 有什么区别?
- 1.98 HashMap 和 ConcurrentHashMap 的区别?
- 1.99 Array 和 ArrayList 有何区别?
- 1.100 Collection 和 Collections 有什么区别?
- 2、线程、并发相关
- 2.1 为什么要使用并发编程(并发编程的优点)
- 2.2 并发编程有什么缺点
- 2.3 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?
- 2.4 并行和并发有什么区别?
- 2.5 什么是多线程,多线程的优劣?
- 2.6 线程和进程区别 什么是线程和进程?
- 2.7 什么是上下文切换?
- 2.8 守护线程和用户线程有什么区别呢?
- 2.9 如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?
- 2.10 什么是线程死锁
- 2.11 形成死锁的四个必要条件是什么?
- 2.12 如何避免线程死锁?
- 2.13 创建线程的四种方式?
- 2.14 线程的 run()和 start()有什么区别?
- 2.15 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
- 2.16 什么是 FutureTask?
- 2.17 线程的状态和基本操作说说线程的生命周期及五种基本状态?
- 2.18 Java 中用到的线程调度算法是什么?
- 2.19 线程的调度策略?
- 2.20 什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )?
- 2.21 为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?
- 2.22 为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
- 2.23 Thread 类中的 yield 方法有什么作用?
- 2.24 为什么 Thread 类的 sleep()和 yield ()方法是静态的?
- 2.25 线程的 sleep()方法和 yield()方法有什么区别?
- 2.26 如何停止一个正在运行的线程?
- 2.27 Java 中 interrupted 和 isInterrupted 方法的区别?
- 2.28 Java 中你怎样唤醒一个阻塞的线程?
- 2.29 notify() 和 notifyAll() 有什么区别?
- 2.30 如何在两个线程间共享数据?
- 2.31 Java 如何实现多线程之间的通讯和协作?
- 2.32 什么是线程同步和线程互斥,有哪几种实现方式?
- 2.33 同步方法和同步块,哪个是更好的选择?
- 2.34 如果你提交任务时,线程池队列已满,这时会发生什么?
- 2.35 什么叫线程安全?servlet 是线程安全吗?
- 2.36 在 Java 程序中怎么保证多线程的运行安全?
- 2.37 你对线程优先级的理解是什么?
- 2.38 线程类的构造方法、静态块是被哪个线程调用的?
- 2.39 Java 中怎么获取一份线程 dump 文件?你如何在 Java 中获取线程堆栈?
- 2.40 Java 线程数过多会造成什么异常?
- 并发(下面是并发部分)
- 2.41 Java中垃圾回收有什么目的?什么时候进行垃圾回收?
- 2.42 synchronized 的作用?
- 2.43 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗?
- 2.44 说一下 synchronized 底层实现原理?
- 2.45 什么是自旋?
- 2.46 线程 B 怎么知道线程 A 修改了变量 ?
- 2.47 synchronized 和 Lock 有什么区别?
- 2.48 volatile 关键字的作用?
- 2.49 Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
- 2.50 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
- 2.51 什么是 CAS ?
- 2.52 什么是死锁?
- 2.53 产生死锁的条件是什么?怎么防止死锁?
- 2.54 死锁与活锁的区别,死锁与饥饿的区别?
- 2.55 多线程锁的升级原理是什么?
- 2.56 什么是ConcurrentHashMap?
- 2.57 什么是线程池?有哪几种创建方式?
- 2.58 线程池有什么优点?
- 2.59 线程池都有哪些状态?
- 2.60 线程池中 submit() 和 execute() 方法有什么区别?
- 3、Spring SpringMVC、Mybatis(SSM)
- 3.1 spring是线程安全的吗?
- 3.2 谈谈你对SSM框架的了解?
- 3.3 请你说说Spring框架中涉及到的设计模式有哪些?
- 3.4 请你谈谈 spring中的 IOC 和 AOP?
- 3.5 请你说说 Spring中IOC 和 DI的区别?
- 3.6 请你讲讲依赖注入的方式都有哪些?
- 3.7 请说说 Spring的流程?
- 3.8 请说说 Spring MVC的流程?
- 3.9
- 4、SpringBoot
- 5、MySQL
- 5.1 MySQL数据库事务的四大特性?
- 5.2 数据库数据去重除了 distinct 还有什么效率高点方法?
- 5.3 left join 如何优化?
- 5.4 SQL语句如何优化?
- 5.5 explain是干什么的?怎么用?
- 5.6 索引是什么?
- 5.7 索引的优势和劣势?
- 5.8 索引的分类和基本语法?
- 5.9 那些情况下需要创建索引?
- 5.10 那些情况下不要创建索引?
- 5.11 索引使用注意事项?
- 5.12 索引最大可以创建多少个?
- 5.13 B树和B+树的区别?
- 5.14 二叉树和红黑树为什么不能用在索引的结构上?
- 5.15 事物的传播特性?
- 5.16 数据库三大范式
- 5.17 、mysql中 update 修改多个字段值的时候能用and吗,为什么?
- 5.18 什么是最左前缀原则?什么是最左匹配原则?
- 6、Redis
- 6.1 什么是缓存击穿?
- 6.2 什么是缓存穿透?
- 6.3 什么是缓存雪崩?
- 6.4 Redis使用场景有哪些?
- 6.5 如何解决Redis 缓存与 MySQL的数据一致性问题?
- 6.6 RDB 和 AOF 机制
- 6.7 Redis的过期键删除策略
- 6.8 简述Redis事务实现
- 6.9 redis主从复制的核心原理
- 6.10 什么是 redis?它能做什么?
- 6.11 redis 有哪八种数据类型?
- 6.12 redis为什么这么快?
- 6.13 Redis的内存满了怎么办?
- 6.14 Redis 有哪些部署方式?
- 6.15 哨兵有哪些作用?
- 6.16 哨兵选举过程是怎么样的?
- 6.17 无硬盘复制是什么?
- 7、分布式与微服务
- 7.1 分布式id生成方案?
- 7.2 分布式锁解决方案?
- 7.3 zk和eureka的区别?
- 7.4 SpringCloud 和 dubbo的去呗?
- 7.5 什么是Hystrix?简述实现机制?
- 7.6 SpringCloud 的核心组件及其作用?
- 7.7 分布式事务解决方案
- 8、中间件 MQ
- 8.1 概述RabbitMQ的架构设计
- 8.2 RabbitMQ如何确保消息发送?消息接收?
- 8.3 RabbitMQ事务消息
- 8.4 RabbitMQ 死信队列 、延时队列
- 8.5 RabbitMQ镜像队列机制
- 8.6 简述 Kafka架构设计
- 8.7 Kafka中zk的作用?
- 8.8
- 8.9
- 8.10
- 9、花里胡哨
- 9.1 为什么很多公司接口都是post方式?
- 9.2 我们常用的请求方式有那么些?
- GET
- POST
- PUT
- DELETE
- 9.3 项目中,面对大量的if -else你通常怎么解决?
- 9.4 请你说说 git中,我们常用到的命令?
- 9.5 默认端口号你知道多少?
- 9.6
- 9.7
- 9.8
- 9.9
- 9.10
文章目录
- 八股文问题集合
- `问题正在收录中,累了休息一会,如果有需要请,先关注,这几天会更帖子,答案后续补上` @[TOC](文章目录)
- 1、Java基础
- 1.1 什么是Java?
- 1.2 JVM、JRE和JDK的关系?
- 1.3 什么是跨平台性?原理是什么?
- 1.4 Java语言有哪些特点?
- 1.5 Java应用程序与小程序之间有那些差别?
- 1.6 Java和C++的区别?
- 1.7 Oracle JDK 和 OpenJDK 的对比?
- 1.8 Java有哪些数据类型?
- 1.9 用最有效率的方法计算 2 乘以 8?
- 1.10 Math.round(11.5) 等于多少?Math.round(-11.5) 等于多少?
- 1.11 float f=3.4;是否正确?
- 1.12 short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
- 1.13 什么Java注释?
- 1.14 访问修饰符 public,private,protected,以及不写(默认)时的区别?
- 1.15 &和&&的区别?
- 1.16 final 有什么用?
- 1.17 final finally finalize区别?
- 1.18 this关键字的用法?
- 1.19 super关键字的用法?
- 1.20 this与super的区别?
- 1.21 static存在的主要意义?
- 1.22 static的独特之处?
- 1.23 static应用场景?
- 1.24 static注意事项?
- 1.25 break ,continue ,return 的区别及作用?
- 1.26 在 Java 中,如何跳出当前的多重嵌套循环?
- 1.27 面向对象和面向过程的区别?
- 1.28 面向对象三大特性?
- 1.29 什么是多态机制?Java语言是如何实现多态的?
- 1.30 面向对象五大基本原则是什么(可选)?
- 1.30 抽象类和接口的对比?
- 1.31 普通类和抽象类有哪些区别?
- 1.32 抽象类能使用 final 修饰吗?
- 1.33 创建一个对象用什么关键字?对象实例与对象引用有何不同?
- 1.34 成员变量与局部变量的区别有哪些?
- 1.35 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
- 1.36 一个类的构造方法的作用是什么?若一个类没有声明构造方法, 改程序能正确执行吗?为什么?
- 1.37 构造方法有哪些特性?
- 1.38 静态变量和实例变量区别?
- 1.39 静态变量与普通变量区别?
- 1.40 静态方法和实例方法有何不同?
- 1.41 在一个静态方法内调用一个非静态成员为什么是非法的?
- 1.42 什么是方法的返回值?返回值的作用是什么?
- 1.43 什么是内部类?
- 1.44 内部类的分类有哪些?
- 1.45 内部类的优点?
- 1.46 内部类有哪些应用场景?
- 1.47 构造器(constructor)是否可被重写(override)?
- 1.48 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
- 1.49 == 和 equals 的区别是什么?
- 1.50 值传递和引用传递有什么区别?
- 1.51 为什么 Java 中只有值传递?
- 1.52 JDK 中常用的包有哪些?
- 1.53 java 中 IO 流分为几种?
- 1.54 BIO,NIO,AIO 有什么区别?
- 1.55 Files的常用方法都有哪些?
- 1.56 什么是反射机制?
- 1.57 反射机制优缺点?
- 1.58 反射机制的应用场景有哪些?
- 1.59 Java获取反射的三种方法?
- 1.60 字符型常量和字符串常量的区别?
- 1.61 什么是字符串常量池?
- 1.62 String 是最基本的数据类型吗?
- 1.63 String有哪些特性?
- 1.64 String为什么是不可变的吗?
- 1.65 是否可以继承 String 类?
- 1.66 数组有没有 length()方法?String 有没有 length()方法?
- 1.67 String 类的常用方法都有那些?
- 1.68 在使用 HashMap 的时候,用 String 做 key 有什么好处?
- 1.69 String和StringBuffer、StringBuilder的区别是什么?String 为什么是不可变的?
- 1.70 拆箱:将包装类型转换为基本数据类型; int 和 Integer 有什么区别?
- 1.71 Integer a= 127 与 Integer b = 127相等吗?
- 1.72 队列和栈是什么?有什么区别?
- 1.73 对象的创建?
- 1.74 Java会存在内存泄漏吗?
- 1.75 内存溢出,如何排查线上问题?
- 1.76 简述Java垃圾回收机制?
- 1.77 GC是什么?为什么要GC?
- 1.78 垃圾回收的优点和原理,并考虑2种回收机制?
- 1.79 Java中都有哪些引用类型?
- 1.80 怎么判断对象是否可以被回收?
- 1.81 说一下 JVM 有哪些垃圾回收算法?
- 1.82 说一下类装载的执行过程?
- 1.83 什么是双亲委派模型?
- 1.84 什么是集合?
- 1.85 集合的特点?
- 1.86 集合和数组的区别?
- 1.87 使用集合框架的好处?
- 1.88 常用的集合类有哪些?
- 1.89 List,Set,Map三者的区别?List、Set、Map 是否继 承自 Collection 接口?List、Map、Set 三个接口存取 元素时,各有什么特点?
- 1.90 集合框架底层数据结构?
- 1.91 哪些集合类是线程安全的?
- 1.92 迭代器 Iterator 是什么?
- 1.93 ==与equals的区别?
- 1.94 说一下 HashMap 的实现原理?
- 1.95 为什么HashMap中String、Integer这样的包装类适合作为K?
- 1.96 如果使用Object作为HashMap的Key,应该怎么办呢?
- 1.97 HashMap 与 HashTable 有什么区别?
- 1.98 HashMap 和 ConcurrentHashMap 的区别?
- 1.99 Array 和 ArrayList 有何区别?
- 1.100 Collection 和 Collections 有什么区别?
- 2、线程、并发相关
- 2.1 为什么要使用并发编程(并发编程的优点)
- 2.2 并发编程有什么缺点
- 2.3 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?
- 2.4 并行和并发有什么区别?
- 2.5 什么是多线程,多线程的优劣?
- 2.6 线程和进程区别 什么是线程和进程?
- 2.7 什么是上下文切换?
- 2.8 守护线程和用户线程有什么区别呢?
- 2.9 如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?
- 2.10 什么是线程死锁
- 2.11 形成死锁的四个必要条件是什么?
- 2.12 如何避免线程死锁?
- 2.13 创建线程的四种方式?
- 2.14 线程的 run()和 start()有什么区别?
- 2.15 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
- 2.16 什么是 FutureTask?
- 2.17 线程的状态和基本操作说说线程的生命周期及五种基本状态?
- 2.18 Java 中用到的线程调度算法是什么?
- 2.19 线程的调度策略?
- 2.20 什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )?
- 2.21 为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?
- 2.22 为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
- 2.23 Thread 类中的 yield 方法有什么作用?
- 2.24 为什么 Thread 类的 sleep()和 yield ()方法是静态的?
- 2.25 线程的 sleep()方法和 yield()方法有什么区别?
- 2.26 如何停止一个正在运行的线程?
- 2.27 Java 中 interrupted 和 isInterrupted 方法的区别?
- 2.28 Java 中你怎样唤醒一个阻塞的线程?
- 2.29 notify() 和 notifyAll() 有什么区别?
- 2.30 如何在两个线程间共享数据?
- 2.31 Java 如何实现多线程之间的通讯和协作?
- 2.32 什么是线程同步和线程互斥,有哪几种实现方式?
- 2.33 同步方法和同步块,哪个是更好的选择?
- 2.34 如果你提交任务时,线程池队列已满,这时会发生什么?
- 2.35 什么叫线程安全?servlet 是线程安全吗?
- 2.36 在 Java 程序中怎么保证多线程的运行安全?
- 2.37 你对线程优先级的理解是什么?
- 2.38 线程类的构造方法、静态块是被哪个线程调用的?
- 2.39 Java 中怎么获取一份线程 dump 文件?你如何在 Java 中获取线程堆栈?
- 2.40 Java 线程数过多会造成什么异常?
- 并发(下面是并发部分)
- 2.41 Java中垃圾回收有什么目的?什么时候进行垃圾回收?
- 2.42 synchronized 的作用?
- 2.43 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗?
- 2.44 说一下 synchronized 底层实现原理?
- 2.45 什么是自旋?
- 2.46 线程 B 怎么知道线程 A 修改了变量 ?
- 2.47 synchronized 和 Lock 有什么区别?
- 2.48 volatile 关键字的作用?
- 2.49 Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
- 2.50 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
- 2.51 什么是 CAS ?
- 2.52 什么是死锁?
- 2.53 产生死锁的条件是什么?怎么防止死锁?
- 2.54 死锁与活锁的区别,死锁与饥饿的区别?
- 2.55 多线程锁的升级原理是什么?
- 2.56 什么是ConcurrentHashMap?
- 2.57 什么是线程池?有哪几种创建方式?
- 2.58 线程池有什么优点?
- 2.59 线程池都有哪些状态?
- 2.60 线程池中 submit() 和 execute() 方法有什么区别?
- 3、Spring SpringMVC、Mybatis(SSM)
- 3.1 spring是线程安全的吗?
- 3.2 谈谈你对SSM框架的了解?
- 3.3 请你说说Spring框架中涉及到的设计模式有哪些?
- 3.4 请你谈谈 spring中的 IOC 和 AOP?
- 3.5 请你说说 Spring中IOC 和 DI的区别?
- 3.6 请你讲讲依赖注入的方式都有哪些?
- 3.7 请说说 Spring的流程?
- 3.8 请说说 Spring MVC的流程?
- 3.9
- 4、SpringBoot
- 5、MySQL
- 5.1 MySQL数据库事务的四大特性?
- 5.2 数据库数据去重除了 distinct 还有什么效率高点方法?
- 5.3 left join 如何优化?
- 5.4 SQL语句如何优化?
- 5.5 explain是干什么的?怎么用?
- 5.6 索引是什么?
- 5.7 索引的优势和劣势?
- 5.8 索引的分类和基本语法?
- 5.9 那些情况下需要创建索引?
- 5.10 那些情况下不要创建索引?
- 5.11 索引使用注意事项?
- 5.12 索引最大可以创建多少个?
- 5.13 B树和B+树的区别?
- 5.14 二叉树和红黑树为什么不能用在索引的结构上?
- 5.15 事物的传播特性?
- 5.16 数据库三大范式
- 5.17 、mysql中 update 修改多个字段值的时候能用and吗,为什么?
- 5.18 什么是最左前缀原则?什么是最左匹配原则?
- 6、Redis
- 6.1 什么是缓存击穿?
- 6.2 什么是缓存穿透?
- 6.3 什么是缓存雪崩?
- 6.4 Redis使用场景有哪些?
- 6.5 如何解决Redis 缓存与 MySQL的数据一致性问题?
- 6.6 RDB 和 AOF 机制
- 6.7 Redis的过期键删除策略
- 6.8 简述Redis事务实现
- 6.9 redis主从复制的核心原理
- 6.10 什么是 redis?它能做什么?
- 6.11 redis 有哪八种数据类型?
- 6.12 redis为什么这么快?
- 6.13 Redis的内存满了怎么办?
- 6.14 Redis 有哪些部署方式?
- 6.15 哨兵有哪些作用?
- 6.16 哨兵选举过程是怎么样的?
- 6.17 无硬盘复制是什么?
- 7、分布式与微服务
- 7.1 分布式id生成方案?
- 7.2 分布式锁解决方案?
- 7.3 zk和eureka的区别?
- 7.4 SpringCloud 和 dubbo的去呗?
- 7.5 什么是Hystrix?简述实现机制?
- 7.6 SpringCloud 的核心组件及其作用?
- 7.7 分布式事务解决方案
- 8、中间件 MQ
- 8.1 概述RabbitMQ的架构设计
- 8.2 RabbitMQ如何确保消息发送?消息接收?
- 8.3 RabbitMQ事务消息
- 8.4 RabbitMQ 死信队列 、延时队列
- 8.5 RabbitMQ镜像队列机制
- 8.6 简述 Kafka架构设计
- 8.7 Kafka中zk的作用?
- 8.8
- 8.9
- 8.10
- 9、花里胡哨
- 9.1 为什么很多公司接口都是post方式?
- 9.2 我们常用的请求方式有那么些?
- GET
- POST
- PUT
- DELETE
- 9.3 项目中,面对大量的if -else你通常怎么解决?
- 9.4 请你说说 git中,我们常用到的命令?
- 9.5 默认端口号你知道多少?
- 9.6
- 9.7
- 9.8
- 9.9
- 9.10
1、Java基础
1.1 什么是Java?
1.2 JVM、JRE和JDK的关系?
1.3 什么是跨平台性?原理是什么?
1.4 Java语言有哪些特点?
1.5 Java应用程序与小程序之间有那些差别?
1.6 Java和C++的区别?
1.7 Oracle JDK 和 OpenJDK 的对比?
1.8 Java有哪些数据类型?
1.9 用最有效率的方法计算 2 乘以 8?
1.10 Math.round(11.5) 等于多少?Math.round(-11.5) 等于多少?
1.11 float f=3.4;是否正确?
1.12 short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
1.13 什么Java注释?
1.14 访问修饰符 public,private,protected,以及不写(默认)时的区别?
定义: Java中,可以使用访问修饰符来保护对类、变量、方法和构造方法的访问。Java 支持4种不同的访问权限。
分类:
private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部 类) default
(即缺省,什么也不写,不使用任何关键字): 在同一包内可见,不使用 任何修饰符。使用对象:类、接口、变量、方法。 protected :
对同一包内的类和所有子类可见。使用对象:变量、方法。 注意: 不能修饰类(外部类)。 public :
对所有类可见。使用对象:类、接口、变量、方法 访问修饰符图
1.15 &和&&的区别?
1.16 final 有什么用?
1.17 final finally finalize区别?
1.18 this关键字的用法?
1.19 super关键字的用法?
1.20 this与super的区别?
1.21 static存在的主要意义?
1.22 static的独特之处?
1.23 static应用场景?
1.24 static注意事项?
1.25 break ,continue ,return 的区别及作用?
1.26 在 Java 中,如何跳出当前的多重嵌套循环?
1.27 面向对象和面向过程的区别?
1.28 面向对象三大特性?
1.29 什么是多态机制?Java语言是如何实现多态的?
1.30 面向对象五大基本原则是什么(可选)?
1.30 抽象类和接口的对比?
1.31 普通类和抽象类有哪些区别?
1.32 抽象类能使用 final 修饰吗?
1.33 创建一个对象用什么关键字?对象实例与对象引用有何不同?
1.34 成员变量与局部变量的区别有哪些?
1.35 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
1.36 一个类的构造方法的作用是什么?若一个类没有声明构造方法, 改程序能正确执行吗?为什么?
1.37 构造方法有哪些特性?
1.38 静态变量和实例变量区别?
1.39 静态变量与普通变量区别?
1.40 静态方法和实例方法有何不同?
1.41 在一个静态方法内调用一个非静态成员为什么是非法的?
1.42 什么是方法的返回值?返回值的作用是什么?
1.43 什么是内部类?
1.44 内部类的分类有哪些?
1.45 内部类的优点?
1.46 内部类有哪些应用场景?
1.47 构造器(constructor)是否可被重写(override)?
1.48 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
1.49 == 和 equals 的区别是什么?
1.50 值传递和引用传递有什么区别?
1.51 为什么 Java 中只有值传递?
1.52 JDK 中常用的包有哪些?
1.53 java 中 IO 流分为几种?
1.54 BIO,NIO,AIO 有什么区别?
1.55 Files的常用方法都有哪些?
1.56 什么是反射机制?
1.57 反射机制优缺点?
1.58 反射机制的应用场景有哪些?
1.59 Java获取反射的三种方法?
1.60 字符型常量和字符串常量的区别?
1.61 什么是字符串常量池?
1.62 String 是最基本的数据类型吗?
1.63 String有哪些特性?
1.64 String为什么是不可变的吗?
1.65 是否可以继承 String 类?
1.66 数组有没有 length()方法?String 有没有 length()方法?
1.67 String 类的常用方法都有那些?
1.68 在使用 HashMap 的时候,用 String 做 key 有什么好处?
1.69 String和StringBuffer、StringBuilder的区别是什么?String 为什么是不可变的?
1.70 拆箱:将包装类型转换为基本数据类型; int 和 Integer 有什么区别?
1.71 Integer a= 127 与 Integer b = 127相等吗?
1.72 队列和栈是什么?有什么区别?
1.73 对象的创建?
1.74 Java会存在内存泄漏吗?
1.75 内存溢出,如何排查线上问题?
1.76 简述Java垃圾回收机制?
1.77 GC是什么?为什么要GC?
1.78 垃圾回收的优点和原理,并考虑2种回收机制?
1.79 Java中都有哪些引用类型?
1.80 怎么判断对象是否可以被回收?
1.81 说一下 JVM 有哪些垃圾回收算法?
1.82 说一下类装载的执行过程?
1.83 什么是双亲委派模型?
1.84 什么是集合?
1.85 集合的特点?
1.86 集合和数组的区别?
1.87 使用集合框架的好处?
1.88 常用的集合类有哪些?
1.89 List,Set,Map三者的区别?List、Set、Map 是否继 承自 Collection 接口?List、Map、Set 三个接口存取 元素时,各有什么特点?
1.90 集合框架底层数据结构?
1.91 哪些集合类是线程安全的?
1.92 迭代器 Iterator 是什么?
1.93 ==与equals的区别?
1.94 说一下 HashMap 的实现原理?
1.95 为什么HashMap中String、Integer这样的包装类适合作为K?
1.96 如果使用Object作为HashMap的Key,应该怎么办呢?
1.97 HashMap 与 HashTable 有什么区别?
1.98 HashMap 和 ConcurrentHashMap 的区别?
1.99 Array 和 ArrayList 有何区别?
1.100 Collection 和 Collections 有什么区别?
2、线程、并发相关
2.1 为什么要使用并发编程(并发编程的优点)
2.2 并发编程有什么缺点
2.3 并发编程三要素是什么?在 Java 程序中怎么保证多线程的运行安全?
2.4 并行和并发有什么区别?
2.5 什么是多线程,多线程的优劣?
2.6 线程和进程区别 什么是线程和进程?
2.7 什么是上下文切换?
2.8 守护线程和用户线程有什么区别呢?
2.9 如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?
2.10 什么是线程死锁
2.11 形成死锁的四个必要条件是什么?
2.12 如何避免线程死锁?
2.13 创建线程的四种方式?
2.14 线程的 run()和 start()有什么区别?
2.15 为什么我们调用 start() 方法时会执行 run() 方法,为什么我们不能直接调用 run() 方法?
2.16 什么是 FutureTask?
2.17 线程的状态和基本操作说说线程的生命周期及五种基本状态?
2.18 Java 中用到的线程调度算法是什么?
2.19 线程的调度策略?
2.20 什么是线程调度器(Thread Scheduler)和时间分片(Time Slicing )?
2.21 为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?
2.22 为什么 wait(), notify()和 notifyAll()必须在同步方法或者同步块中被调用?
2.23 Thread 类中的 yield 方法有什么作用?
2.24 为什么 Thread 类的 sleep()和 yield ()方法是静态的?
2.25 线程的 sleep()方法和 yield()方法有什么区别?
2.26 如何停止一个正在运行的线程?
2.27 Java 中 interrupted 和 isInterrupted 方法的区别?
2.28 Java 中你怎样唤醒一个阻塞的线程?
2.29 notify() 和 notifyAll() 有什么区别?
2.30 如何在两个线程间共享数据?
2.31 Java 如何实现多线程之间的通讯和协作?
2.32 什么是线程同步和线程互斥,有哪几种实现方式?
2.33 同步方法和同步块,哪个是更好的选择?
2.34 如果你提交任务时,线程池队列已满,这时会发生什么?
2.35 什么叫线程安全?servlet 是线程安全吗?
2.36 在 Java 程序中怎么保证多线程的运行安全?
2.37 你对线程优先级的理解是什么?
2.38 线程类的构造方法、静态块是被哪个线程调用的?
2.39 Java 中怎么获取一份线程 dump 文件?你如何在 Java 中获取线程堆栈?
2.40 Java 线程数过多会造成什么异常?
并发(下面是并发部分)
2.41 Java中垃圾回收有什么目的?什么时候进行垃圾回收?
2.42 synchronized 的作用?
2.43 说说自己是怎么使用 synchronized 关键字,在项目中用到了吗?
2.44 说一下 synchronized 底层实现原理?
2.45 什么是自旋?
2.46 线程 B 怎么知道线程 A 修改了变量 ?
2.47 synchronized 和 Lock 有什么区别?
2.48 volatile 关键字的作用?
2.49 Java Concurrency API 中的 Lock 接口(Lock interface)是什么?对比同步它有什么优势?
2.50 乐观锁和悲观锁的理解及如何实现,有哪些实现方式?
2.51 什么是 CAS ?
2.52 什么是死锁?
2.53 产生死锁的条件是什么?怎么防止死锁?
2.54 死锁与活锁的区别,死锁与饥饿的区别?
2.55 多线程锁的升级原理是什么?
2.56 什么是ConcurrentHashMap?
2.57 什么是线程池?有哪几种创建方式?
2.58 线程池有什么优点?
2.59 线程池都有哪些状态?
2.60 线程池中 submit() 和 execute() 方法有什么区别?
3、Spring SpringMVC、Mybatis(SSM)
3.1 spring是线程安全的吗?
spring一般是线程安全的,如果是并发修改一个全局变量就不安全了,可以使用线程同步的代替就安全了。
3.2 谈谈你对SSM框架的了解?
3.3 请你说说Spring框架中涉及到的设计模式有哪些?
Spring框架中涉及到的设计模式有很多,其中常见的包括:
- 工厂模式(Factory Pattern):工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在Spring框架中,BeanFactory就是一个典型的工厂模式的实现。
- 单例模式(Singleton Pattern):单例模式是一种创建型设计模式,它确保类只有一个实例,并提供对该实例的全局访问点。在Spring框架中,ApplicationContext是一个典型的单例模式的实现。
- 代理模式(Proxy Pattern):代理模式是一种结构型设计模式,它允许通过代理对象来控制访问另一个对象。在Spring框架中,AOP就是一种典型的代理模式的应用。
- 观察者模式(Observer Pattern):观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。在Spring框架中,事件监听器就是一种典型的观察者模式的实现。
- 模板方法模式(Template Method Pattern):模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将一些步骤的实现延迟到子类中。在Spring框架中,JdbcTemplate就是一种典型的模板方法模式的应用。
- 适配器模式(Adapter Pattern):适配器模式是一种结构型设计模式,它允许将一个类的接口转换为客户端所期望的另一种接口。在Spring框架中,适配器模式常常被用于将不同类型的数据转换为统一的格式。
- 策略模式(Strategy Pattern):策略模式是一种行为型设计模式,它定义了一系列的算法,将每一个算法封装起来,并让它们可以互相替换。在Spring框架中,BeanPostProcessor就是一种典型的策略模式的应用。
这些设计模式在Spring框架中发挥着重要的作用,帮助我们更加灵活地编写代码,并提高了系统的可扩展性和可维护性。
3.4 请你谈谈 spring中的 IOC 和 AOP?
在 Spring 框架中,IOC(Inversion of Control)和AOP(Aspect-Oriented Programming)是两个核心的概念。
- IOC
IOC,也称为依赖注入(Dependency Injection),它是一种设计模式,它的主要思想是反转控制,即由框架来控制程序之间的依赖关系。在传统的编程模型中,程序员需要自己手动创建对象并维护对象之间的依赖关系,而在 Spring 框架中,通过IOC容器来管理对象,程序员只需要提供类的定义,由IOC容器来创建对象并自动装配对象之间的关系。
Spring的IOC容器是一个对象工厂,它负责管理应用程序中的所有对象。当我们需要一个对象时,只需要向IOC容器请求,IOC容器就会返回一个该类型的对象,而不是由我们手动创建和维护对象之间的关系。
- AOP
AOP,也称为面向切面编程,它是一种编程范式,它的主要思想是将应用程序中的通用横切逻辑(如日志记录、事务处理等)从业务逻辑中分离出来,以便将它们独立管理。AOP 实现这种分离的方式是通过将通用逻辑切入到应用程序的多个不同模块中。
在 Spring 框架中,AOP 可以通过代理实现,Spring框架可以自动为我们创建代理对象,并将通用逻辑织入到业务逻辑中,从而实现对业务逻辑的增强。Spring 框架中的 AOP 可以用于实现事务管理、安全检查、缓存、日志记录等功能。
综上所述,IOC 和 AOP 是 Spring 框架的两个重要概念。IOC 实现了对象之间的解耦和依赖关系的自动装配,而 AOP 实现了通用横切逻辑的分离和模块化。在使用 Spring 框架时,IOC 和 AOP 往往是不可避免的,而它们的使用也使得 Spring 框架变得更加灵活和易于维护。
3.5 请你说说 Spring中IOC 和 DI的区别?
IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是紧密相关的概念,它们之间存在一定的区别。
简单来说,IOC是一种设计原则,它强调在软件设计中应该尽量使用对象组合,而不是继承关系来完成对象之间的依赖关系。DI则是实现IOC的一种具体方式,它通过将对象的依赖关系外部化,然后在系统启动时注入所需的依赖关系。
更具体地说,IOC是一种编程思想,它通过将对象的创建和管理控制权交给容器来实现,将应用程序中各个部分的耦合度降低到最低。而DI则是实现IOC的一种方式,它是将实例化一个类所需要的所有依赖关系全部通过构造函数、Setter方法或者其他方式进行注入。
在Spring框架中,IOC容器负责管理所有的Java对象,而DI则是Spring框架中最为常用的实现IOC的方式,它通过配置文件、注解或者其他方式来描述对象之间的依赖关系,然后在程序运行时自动注入所需的依赖关系。因此,Spring框架中经常使用的注入方式包括:构造函数注入、Setter方法注入、接口注入等。
3.6 请你讲讲依赖注入的方式都有哪些?
3.7 请说说 Spring的流程?
3.8 请说说 Spring MVC的流程?
3.9
4、SpringBoot
5、MySQL
5.1 MySQL数据库事务的四大特性?
5.2 数据库数据去重除了 distinct 还有什么效率高点方法?
5.3 left join 如何优化?
5.4 SQL语句如何优化?
5.5 explain是干什么的?怎么用?
5.6 索引是什么?
5.7 索引的优势和劣势?
5.8 索引的分类和基本语法?
5.9 那些情况下需要创建索引?
5.10 那些情况下不要创建索引?
5.11 索引使用注意事项?
5.12 索引最大可以创建多少个?
5.13 B树和B+树的区别?
5.14 二叉树和红黑树为什么不能用在索引的结构上?
5.15 事物的传播特性?
5.16 数据库三大范式
5.17 、mysql中 update 修改多个字段值的时候能用and吗,为什么?
这是一个很有意思的题哦
不可以, mysql的update 底层中 set 后的值 是 list集合,需要用 , 分割,如果 使用and 则会 被默认为表达式 进行比较。
不相等,即为 false =0, set的第一个值,就会变为0.
第二个值不做变动。 如果 varchar 类型在第一个,语法直接会被截断,不会对库进行 update的。
and可以执行成功,但是结果是不对的。
5.18 什么是最左前缀原则?什么是最左匹配原则?
6、Redis
6.1 什么是缓存击穿?
6.2 什么是缓存穿透?
6.3 什么是缓存雪崩?
6.4 Redis使用场景有哪些?
1. 活动的秒杀环节、可以当做数据库做增删改查操作、大型网站的排行榜、聊天室的留言存储、个网站文章点赞 及列表信息的存储等
2. list可以做消息流
3. hash可以做购物车
4. set可以做关注,可以做抽奖
5. zset可以做排行榜
6. 字符串数字的原子新增可以做分布式Id
7. 最基础的就是缓存,上手可用
8. 内存数据库 (登录信息、购物车信息、用户浏览记录)
9. 缓存服务器(商品数据、广告数据等)
10. 解决分布式集群架构中 session 分离问题(session共享)
11. 任务队列(秒杀、抢购、12306等等)
12. 支持发布订阅的消息模式
13. 应用排行榜
14. redis从内存读写数据,比从数据库读取速度快,数据库读写避免不了io操作,适合高并发,读写比较频繁的场景
6.5 如何解决Redis 缓存与 MySQL的数据一致性问题?
6.6 RDB 和 AOF 机制
6.7 Redis的过期键删除策略
定时过期:每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。
惰性过期:只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。
定期过期:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其中已过期的key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得CPU和内存资源达到最优的平衡效果。
6.8 简述Redis事务实现
6.9 redis主从复制的核心原理
1.当一个从数据库启动时,它会向主数据库发送一个SYNC命令,master收到后,在后台保存快照,也就是我们说的RDB持久化,当然保存快照是需要消耗时间的,并且redis是单线程的,在保存快照期间redis受到的命令会缓存起来
2.快照完成后会将缓存的命令以及快照一起打包发给slave节点,从而保证主从数据库的一致性。
3.从数据库接受到快照以及缓存的命令后会将这部分数据写入到硬盘上的临时文件当中,写入完成后会用这份文件去替换掉RDB快照文件,当然,这个操作是不会阻塞的,可以继续接收命令执行,具体原因其实就是fork了一个子进程,用子进程去完成了这些功能。
因为不会阻塞,所以,这部分初始化完成后,当主数据库执行了改变数据的命令后,会异步的给slave,这也就是我们说的复制同步阶段,这个阶段会贯穿在整个中从同步的过程中,直到主从同步结束后,复制同步才会终止。
6.10 什么是 redis?它能做什么?
redis: redis 即 Remote Dictionary Server,用中文翻译过来可以理解为远程数据服务或远程字典服务。其是使用 C 语言的编写的key-value存储系统
应用场景:缓存,数据库,消息队列,分布式锁,点赞列表,排行榜等等
6.11 redis 有哪八种数据类型?
redis 总共有八种数据结构,五种基本数据类型和三种特殊数据类型。
1.string:字符串类型,常被用来存储计数器,粉丝数等,简单的分布式锁也会用到该类型
2.hashmap:key - value 形式的,value 是一个map
3.list:基本的数据类型,列表。在 Redis 中可以把 list 用作栈、队列、阻塞队列。
4.set:集合,不能有重复元素,可以做点赞,收藏等
5.zset:有序集合,不能有重复元素,有序集合中的每个元素都需要指定一个分数,根据分数对元素进行升序排序。可以做排行榜
6.geospatial: Redis 在 3.2 推出 Geo 类型,该功能可以推算出地理位置信息,两地之间的距离。
8.hyperloglog:基数:数学上集合的元素个数,是不能重复的。这个数据结构常用于统计网站的 UV。
8.bitmap: bitmap 就是通过最小的单位 bit 来进行0或者1的设置,表示某个元素对应的值或者状态。一个 bit 的值,或者是0,或者是1;也就是说一个 bit 能存储的最多信息是2。bitmap 常用于统计用户信息比如活跃粉丝和不活跃粉丝、登录和未登录、是否打卡等。
6.12 redis为什么这么快?
官方数据 redis 可以做到每秒近10w的并发,这么快的原因主要总结为以下几点:
1:完全基于内存操作
2:使用单线程模型来处理客户端的请求,避免了上下文的切换
3:IO 多路复用机制
4:自身使用 C 语言编写,有很多优化机制,比如动态字符串 sds
6.13 Redis的内存满了怎么办?
实际上Redis定义了「8种内存淘汰策略」用来处理redis内存满的情况:
1.noeviction:直接返回错误,不淘汰任何已经存在的redis键
2.allkeys-lru:所有的键使用lru算法进行淘汰
3.volatile-lru:有过期时间的使用lru算法进行淘汰
4.allkeys-random:随机删除redis键
5.volatile-random:随机删除有过期时间的redis键
6.volatile-ttl:删除快过期的redis键
7.volatile-lfu:根据lfu算法从有过期时间的键删除
8.allkeys-lfu:根据lfu算法从所有键删除
6.14 Redis 有哪些部署方式?
单机模式:这也是最基本的部署方式,只需要一台机器,负责读写,一般只用于开发人员自己测试
**哨兵模式:**哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。它具备自动故障转移、集群监控、消息通知等功能。
cluster集群模式:在redis3.0版本中支持了cluster集群部署的方式,这种集群部署的方式能自动将数据进行分片,每个master上放一部分数据,提供了内置的高可用服务,即使某个master挂了,服务还可以正常地提供。
主从复制:在主从复制这种集群部署模式中,我们会将数据库分为两类,第一种称为主数据库(master),另一种称为从数据库(slave)。主数据库会负责我们整个系统中的读写操作,从数据库会负责我们整个数据库中的读操作。其中在职场开发中的真实情况是,我们会让主数据库只负责写操作,让从数据库只负责读操作,就是为了读写分离,减轻服务器的压力。
6.15 哨兵有哪些作用?
1.监控整个主数据库和从数据库,观察它们是否正常运行
2.当主数据库发生异常时,自动的将从数据库升级为主数据库,继续保证整个服务的稳定
6.16 哨兵选举过程是怎么样的?
1.第一个发现该master挂了的哨兵,向每个哨兵发送命令,让对方选举自己成为领头哨兵
2.其他哨兵如果没有选举过他人,就会将这一票投给第一个发现该master挂了的哨兵
3.第一个发现该master挂了的哨兵如果发现由超过一半哨兵投给自己,并且其数量也超过了设定的quoram参数,那么该哨兵就成了领头哨兵
4.如果多个哨兵同时参与这个选举,那么就会重复该过程,知道选出一个领头哨兵
选出领头哨兵后,就开始了故障修复,会从选出一个从数据库作为新的master
6.17 无硬盘复制是什么?
我们刚刚说了主从之间是通过RDB快照来交互的,虽然看来逻辑很简单,但是还是会存在一些问题,但是会存在着一些问题。
1.master禁用了RDB快照时,发生了主从同步(复制初始化)操作,也会生成RDB快照,但是之后如果master发成了重启,就会用RDB快照去恢复数据,这份数据可能已经很久了,中间就会丢失数据
2.在这种一主多从的结构中,master每次和slave同步数据都要进行一次快照,从而在硬盘中生成RDB文件,会影响性能
为了解决这种问题,redis在后续的更新中也加入了无硬盘复制功能,也就是说直接通过网络发送给slave,避免了和硬盘交互,但是也是有io消耗的
7、分布式与微服务
7.1 分布式id生成方案?
7.2 分布式锁解决方案?
7.3 zk和eureka的区别?
7.4 SpringCloud 和 dubbo的去呗?
7.5 什么是Hystrix?简述实现机制?
7.6 SpringCloud 的核心组件及其作用?
7.7 分布式事务解决方案
8、中间件 MQ
8.1 概述RabbitMQ的架构设计
8.2 RabbitMQ如何确保消息发送?消息接收?
8.3 RabbitMQ事务消息
8.4 RabbitMQ 死信队列 、延时队列
8.5 RabbitMQ镜像队列机制
8.6 简述 Kafka架构设计
8.7 Kafka中zk的作用?
8.8
8.9
8.10
9、花里胡哨
9.1 为什么很多公司接口都是post方式?
看到这个标题,你肯定觉得离谱。怎么会有公司规定所有接口都用Post,是架构菜还是开发菜。这可不是夸大其词,这样的公司不少。最起码我的上家公司就是。
- 我们都知道,get请求一半用来获取服务器信息,post一般用来更新信息。get请求能做的,post都能做,get请求不能做的,post也都能做。
- 如果你的团队都是大佬,或者有着良好的团队规范,所有人都在平均水平线之上,并且有良好的纠错机制,那基本不会制定这样的规则。
- 但如果团队成员水平参差不齐,尤其是小团队,创业团队,常常上来就开干,没什么规范,纯靠开发者个人素质决定代码质量,这样的团队就不得不制定这样的规范。
- 毕竟可以减少非常多的问题,Post不用担心URL长度限制,也不会误用缓存。通过一个规则减少了出错的可能,这个决策性价比极高。
- 有些外包公司或者提供第三方接口的公司也会选择只用Post,就是图个方便。
9.2 我们常用的请求方式有那么些?
GET
GET 方法用于从服务器检索数据。这是一种只读方法,因此它没有改变或损坏数据的风险,使用 GET 的请求应该只被用于获取数据。
GET API 是幂等的。 每次发出多个相同的请求都必须产生相同的结果,直到另一个 API(POST 或 PUT)更改了服务器上资源的状态。
POST
POST 方法用于将实体提交到指定的资源,通常导致在服务器上的状态变化或创建新资源。POST既不安全也不幂等,调用两个相同的 POST 请求将导致两个不同的资源包含相同的信息(资源 ID 除外)。
PUT
主要使用 PUT API更新现有资源(如果资源不存在,则 API 可能决定是否创建新资源)。
DELETE
DELETE 方法删除指定的资源。DELETE 操作是幂等的。如果您删除一个资源,它会从资源集合中删除。
9.3 项目中,面对大量的if -else你通常怎么解决?
若Java里业务逻辑中大批量使用if-else,则是面向过程了,因为业务逻辑里的if-else是从上往下一个if接一个if判断下去的,在各个if上打个断点,debug下去,就明白它其实是面向过程的。
- 由此可知,若项目里有大量的if-else话,着实是一件很影响性能的事情,并且代码观赏性低(问题)
- 我们可以编写内部类,方法,使用策略模式来解决
- 可以使用枚举策略来解决
- 还可以使用工厂模式来解决
9.4 请你说说 git中,我们常用到的命令?
- git init:初始化一个新的Git仓库。
- git add:将文件添加到暂存区。
- git commit:将暂存区的文件提交到版本库。
- git push:将本地的代码推送到远程仓库。
- git pull:将远程仓库中的代码拉取到本地。
- git clone:将远程仓库中的代码克隆到本地。
- git status:查看当前Git仓库的状态,包括修改过的文件和已提交的文件。
- git log:查看Git仓库的提交记录。
- git branch:管理分支,包括创建、切换、合并等操作。
- git checkout:切换分支或还原文件。
- git merge:合并分支。
- git stash:保存当前的工作进度,以便稍后继续。
- git tag:打标签,标记某个提交的版本号。
- git diff:查看文件或者分支之间的差异。
9.5 默认端口号你知道多少?
1. *oracle 默认的端口号是1521。*
2. sqlserver默认端口号为:1433
3. mysql 默认端口号为:3306
4. Nacos默认端口为8848,启动成功后,通过 http://127.0.0.1:8848/nacos
5. redis默认端口号是6379。
6. RabbitMQ默认端口号是15672
7. Mycat默认端口是:8066
8. nginx默认端口是:80
9. Tomcat默认端口是:8080
10. http协议默认端口是:80