目录

  • 一、JavaSE
  • 二、JVM
    • 1.Java内存区域
    • 2.内存溢出异常
    • 3.gc算法
    • 4.类加载
  • 三、多线程/锁/并发
    • 1.线程入门
    • 2.线程安全
  • 四、数据库
  • 五、操作系统
  • 六、计算机网络
  • 七、框架
    • 1.Spring
    • 2.SpringMVC
    • 3.Mybatis
    • 4.ssm运作流程
  • 七、JavaWeb
  • 八、设计模式
    • 1.讲一下设计模式的分类?七大原则?常用设计模式?
    • 2.单例模式
      • (1)饿汉式单例模式
      • (2)懒汉式单例模式
      • (3)双重检验-懒汉式
      • (4)volatile有什么作用?
    • 3.原型模式,深拷贝和浅拷贝
    • 4.代理模式,静态/动态/Cglib代理
      • (1)静态代理
      • (2)动态代理
      • (3)Cglib代理
    • 5.职责链模式 SpringMVC-HandlerExecutionChain
    • 6.spring单例模式怎么实现的
    • 7.设计模式在JDK有哪些使用场景,spring中用了哪些设计模式
  • 九、其他
  • 十、算法题
  • 十一、数据结构与算法
  • 十二、场景题
  • 十三、redis
  • 十四、即将学习

复习博客

一、JavaSE

面向对象的设计思想
Java三大特性
HashMap、ConcurrentHashMap,是否可以存储null值
怎么把hashmap中的数据和最小堆做映射,根据什么建堆
HashMap和TreeMap结构?HashMap为什么要述化?线程安全吗?怎么使之安全?
一个HashMap跟面试官扯了半个小时
hashset是怎么实现的? hashmap是怎么实现hashset的?
HashMap和ConcurrentHashMap哪个效率更高?为什么?
HashMap初始容量多少?(16)为啥要设计初始为16?如果传入容量10会怎么样?(还是会构建16容量的);
Java怎么与数据库交互
JDK8的新特性有哪些
JDK8的stream的操作
Java集合
Arraylist和linkedlist区别
CopyOnWriteArrayList的相关特性?
ArrayList遍历的时候能删除元素吗? 删除的时候会报什么异常?
list,set集合在iterator输出的时候能删去值吗?
重载、重写区别
Object、泛型、通配符区别
队列、栈
StringBuilder StringBuffer区别,Java8的StringBuffer是不是也用了Synchronized
String为什么设计成final不可变? 是怎么实现不可变的?
HashSet原理
sleep,wait区别
TreeMap与HashMap区别?怎么实现的?
优先队列构建过程
java异常?有哪些常见的RuntimeException和非RuntimeException?
异常都有几大类?运行时的空指针会抛异常吗?IO Exception异常发生需要自己去捕获?编译期间需要捕获,运行时不需要捕获,异常捕获处理
int型的变量,如何将它转成String?区别?Integer.toString(xx) ;(new Integer(xx)).toString() ; String.valueOf(xx),第一个是静态方法,第二个要实例化对象
hash冲突怎么解决
类修饰词default和protected关系
抽象类和接口有什么不同
可以不通过构造函数创建对象吗? object.clone() 反序列化
重写equals方法,为什么一定要重写hashcode方法?
equals 和 hashcode 为什么要一起重写?如果不重写hashcode会出现什么问题?
SimpleDateFormat是线程安全的吗?
Java反射原理?

二、JVM

怎么查看Java程序堆的信息

1.Java内存区域

2.内存溢出异常

什么情况下遇到OutOfMemoryError

3.gc算法

JDK1.8默认的垃圾回收器是?HotSpot
新生代大小参数是啥,堆的分类新生代老年代
Full GC发生在什么时候,导致Full GC的原因怎么分析, full gc怎么触发,怎么排查fullgc
高吞吐量的话用哪种gc算法

4.类加载

(1)JVM如何加载类
加载、验证、准备、解析、初始化、使用、卸载
(2)JVM双亲委派模型,为什么要这样做
类加载器:启动类加载器、扩展类加载器、应用类加载器、自定义加载器
类加载机制和类加载的过程:
双亲委派模型的工作过程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载。
ClassLoader原理和应用

三、多线程/锁/并发

1.线程入门

(1)线程start 、 run方法区别
系统调用线程类的start()方法来启动一个线程,此时该线程处于就绪状态,而非运行状态,也就意味着这个线程可以被JVM来调度执行。在调度过程中,JVM通过调用线程类的run()方法来完成实际的操作,当run()方法结束后,此线程就会终止。
​ 如果直接调用线程类的run()方法,这会被当做一个普通的函数调用,程序中仍然只有主线程这一个线程,也就是说,start()方法能够异步地调用run()方法,但是直接调用run()方法却是同步的,因此也就无法达到多线程的目的。
​ 只有通过调用线程类的start()方法才能真正达到多线程的目的。
(2)进程和线程的区别
进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
进程是多个线程的集合。
(3)线程创建方式
五种:1.继承Thread类2.实现Runnable接口3.实现callable接口4.使用匿名内部类5.使用线程池
与继承Thread类的方法相比,使用Runnable接口的方式比较好,面向接口编程,别忘了new Thread(demo类).start()才真的启动线程;
企业上使用线程池的方式创建线程
(4)线程的状态
线程状态?什么时候进入阻塞态什么时候进入等待状态?wait之后的状态可以直接回到Runnable吗
新建、准备/就绪、运行、休眠/阻塞、停止/死亡

新建(new Tread-->就绪(start(),等cpu调度) -->运行--> 死亡(stop或结束)
							/\					|
							 |				   \/				
							休眠(sleep() wait()

(5)守护线程/非守护线程
守护:比如gc线程,和主线程一起销毁
非守护:用户线程,与主线程互不影响。t1.setDaemon(true)设置为守护线程
(6)join()
join()方法A线程里run方法写B.join(),指的是A线程等待B之后再继续执行,A主动让B线程执行

2.线程安全

(1)死锁四个条件
互斥条件:
进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
不可剥夺条件:
进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。
请求与保持条件:
进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
循环等待条件:
存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被 链中下一个进程所请求。
(2)多线程三大特征
原子性:一致性,保证线程安全问题
可见性
有序性:join,wait,notify(多线程之间通讯)
(3)Java内存模型
主内存(存放共享全局变量)、私有本地内存(本地线程私有变量,存放主内存共享副本)
(3)volatile,volatile的内存语义
volatile的底层如何实现,怎么就能保住可见性了?
保证可见性,不能保证原子性

线程之间的交互方式有哪些?有没有线程交互的封装类 (join)
线程池原理,核心参数,线程池的底层原理和实现方法
线程池有哪些创建方式和安全性问题
有哪些线程池的类型
线程池中LinkedBlockingQueue满了的话,线程会怎么样

一个synchronized跟面试官扯了半个小时
线程池的拒绝策略有哪些
线程池的TheadPoolExcutor核心参数,什么时候创建线程,什么时候不创建,线程达到最大上限是什么策略?什么时候加入缓存队列?
锁有哪些
Java的锁的了解,Sychronzed有哪些方法?一个类中两个Sychronized方法被两个线程锁住,分别去调用会阻塞吗?
乐观锁VS悲观锁 CAS和synchronized关键字还说了说AQS、和对synchronized关键字优化(偏向锁、轻量锁、重量级锁)
两个线程交替打印数字

synchronized和reentrantlock的区别
说了ReentrantLock和Sychronized,CAS机制;Sychronized可以修饰代码块,实例方法,静态方法,类(都是作用于对象)
synchronized和reentrentlock哪个效率高?
reentrantlock实现原理
synchronized锁升级
JUC就是java.util .concurrent
三个线程如何实现交替打印ABC
高并发会带来什么问题?死锁的解决办法?
有很多个任务,需要拿到它们的处理结果并汇总,怎么做?
可以采用线程池 + Future更新:感谢牛友@q147258134,用CountDownLatch也是可以实现的
在这个场景下,你会选用哪种线程池模型?
newCachedThreadPool
线程池有哪些核心参数?新任务提交运行之后线程内的线程数是如何变化的?
corePoolSize、maximumPoolSize (如何变化略)
静态变量线程安全吗?
线程阻塞态的定义,等待阻塞和锁阻塞有什么区别?
讨论各种同步锁的性能,i++操作用Synchronize锁吗?
多线程讲一下,FutureTask
多线程:并发和并行,原子类,CAS操作
乐观锁和悲观锁概念 乐观锁、悲观锁
悲观锁的实际例子。 select * from table for update …
乐观锁实际上有没有加锁?
用两个线程去操作数据库,乐观锁具体是什么实现的?演示一遍,画一画
数据库常用存储引擎,区别,锁范围。

四、数据库

Mysql索引数据结构,B+树,时间复杂度
为啥B+树最后叶子节点需要用链表相连接? 便于区间查找
B+树的优势,红黑树特性
mysql的索引:B+树底层实现?B树的底层实现?为什么要用B+树而不用B树?
(a,b,c)联合索引,为什么不能单用(b),而一定要用(a,b)?B+树是怎么实现的?
最左前缀匹配具体是怎么实现查找的?最左前缀匹配用了B+树的哪些特性?
mysql引擎 为什么MyISAM不支持行锁,而InnoDB支持,还有他俩的区别,InnoDB的优势
如果sql语句中有like,会不会走索引
说说索引,如果对每一列都建索引有什么不好?
mysql建表和写sql时有什么需要注意的
一致性哈希
分布式数据一致性
写sql,手写左连接。,
聚合函数
结合数据库三大范式聊聊,项目的表设计
数据库中间件了解吗
放弃使用索引 大概是七八个的情况
数据库原理,数据库中间件,索引优化
MySQL执行SQL的流程,当执行一条查询语句时,MySQL内部经历了什么?
当执行一条查询语句时,MySQL内部经历了什么?

Mysql是怎么实现的(连接器,缓存,分析器,优化器,执行器,引擎)
数据库事务四大特性,数据库的ACID
mysql事务隔离级别,有哪些问题,解决的问题;从sql语句层面说明;分别解决哪些问题
什么是幻读,不可重复读?这些概念是在事务内还是事务外? 事务内
数据库方面除了项目之外还有哪些深入学习?试验RR级别下出现幻读?
MySQL如何避免幻读?如何实现SERIALIZABLE?
mysql怎么实现可重复读?设置了可重复读隔离级别底层是怎么实现的? (MVCC)
了解MVCC吗?怎么实现的?什么是快照读?快照读能读取到最新的吗?快照读和当前读的区别?
MySQL日志种类 undolog redolog分别是做什么的?
谈谈对mongo和mysql的理解
大数据量,高并发请求,如何设计DB
MYSQL如何实现MVCC
数据库MVCC原理
MYSQL优化,Explain 有哪些信息
MySQL锁机制
如何防止sql注入
myql间歇锁的实现原理
把乐观锁加在数据库上面,怎么实现

五、操作系统

操作系统进程、线程,进程和线程的使用场景
内存管理说一下你的了解。进程调度算法。
进程之间怎么通信的,进程通信中的管道原理
操作系统I/O模型了解吗?epoll模型了解吗?
手写LRU

六、计算机网络

从网页输入一个url到得到回应的过程说一说;从计算机网络到服务器内部技术实现流程。
三次握手、四次挥手,TCP四次挥手的时候close-wait过多怎么办
五层网络模型,HTTP属于哪一层
各层协议
TCP和UDP区别
tcp为什么是可靠的
TCP状态转换图,画一下。
哪些可以用udp
七层协议理解
HTTP、HTTP2.0、HTTPS,http请求头,有状态无状态?
Http协议了解吗?
Http状态码302、204、500、504
http的状态码说几个。403是什么状态?
谈谈对cookie的理解,里面的sessionId或者token会被其他程序拿到伪造请求吗,安全性怎么解决
用户验证的信息,直接发送到服务端吗,要怎么处理
OSI7层次模型

七、框架

参考:Spring特点与工作原理

1.Spring

Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系。它是一种容器框架,用于创建bean,维护bean之间的关系,它可以管理web层,持久层,业务层等,可以配置各个层的组件并且维护各个层的关系。
1…Spring bean创建的方法
将Bean类添加到Spring IOC容器有三种方式:一种方式是基于XML的配置文件, xml配置 ;一种方式是基于注解的配置@Service ;一种方式是基于Java的配置。@bean
Spring 创建Bean的6种方式
2.Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?
Spring管理的Bean对象默认是单例模式,怎么解决线程安全问题
Spring单例模式多线程安全问题-有状态的Bean
Spring的并发问题——有状态Bean和无状态Bean
3.Spring bean的生命周期
请别再问Spring Bean的生命周期了!
SpringBean 工作原理详解
bean生命周期
4.Spring事务传播机制(事务嵌套)
5.Spring 中事务@Tranctional,出现异常回滚是怎么实现的
6.Spring 设计模式 模板方法,单例模式
设计模式 Spring里用的最经典的一个设计模式就是:模板方法模式。
Spring中的模板方法
7.xml怎么解析
spring xml解析详解
8.IOC原理详细讲讲,源码看过么
Spring的IOC和AOP?
Spring的IOC原理[通俗解释一下]
Spring IoC容器初始化过程学习
9.依赖注入的三种方式
Spring系列之依赖注入的三种方式
10.IoC自动注入的注解?
spring的IOC注解方式注入各种注入标记
11.@Autowired的功能?
@Autowired的用法和作用 这个注解就是spring可以自动帮你把bean里面引用的对象的setter/getter方法省略,它会自动帮你set/get
12.注解原理
Spring 中常用注解原理剖析

13.AOP
AOP和IOC是怎么实现的,用到了哪些设计模式aop原理和应用
如何利用AOP实现日志,写过吗?
Spring AOP怎么实现的,原理
彻底征服 Spring AOP 之 理论篇
14.AOP实现日志
AOP实现日志记录(Aspect)

2.SpringMVC

Spring MVC的原理和流程
Spring原理和SpringMVC流程
DispatcherServlet:前端控制器,接受客户端请求
HandlerMapping:处理器映射,基于URL找到Handler
HandlerAdapter:处理器适配,基于Handler找到对应适配器,返回执行链
Handler类型:Controller,Servlet,HTTPRequest,注解
ViewResolver:视图解析,基于ViewName查找View
View:具体解析视图,渲染
HandleExceptionResolver:异常解析器,执行链
HandleInterception:拦截器

mvc的dispatch机制
除了@ResponseBody,controller层如何标准返回给前端所要的数据类型?你会怎么实现?

3.Mybatis

mybatis如何进行类型转换
mybatis的xml有什么标签
二级缓存

4.ssm运作流程

ssm运作流程
RPC了解吗

七、JavaWeb

秒杀系统,架构设计
单点登录
多点登录怎么实现
Cookie的传输过程?Cookie失效,cookie解释一下
客户端禁用cookie怎么办? 你说的实现方式安全吗?
session解释一下,问session应该存什么样子的信息
get和post的区别
GET POST请求,url里面的参数

八、设计模式

1.讲一下设计模式的分类?七大原则?常用设计模式?

说一说你了解的设计模式,平时怎么用的
设计模式知道哪些?设计原则有哪些?常用设计模式
(1)分为三类:
创建型:单例模式、简单工厂、工厂方法、抽象工厂、原型模式、建造者模式
结构型:适配器模式、代理模式
行为型:责任链模式
(2)设计原则:
1.单一职责:一个类只负责一个职责
2.接口隔离:一个依赖接口,建立在最小接口
3.依赖倒转:依赖接口编程
4.里氏替换:尽量不要重写父类方法
5.开闭原则:对扩展开放,对修改关闭
6.迪米特法则:最少知道原则
7.合成复用:尽量合成/聚合方式,而不是集成

2.单例模式

单例模式构造函数有何特点?静态方法初始化具体操作?为什么要加volatile?
单例模式的volatile有什么作用

(1)饿汉式单例模式

class Singleton {
	//1. 构造器私有化
	private Singleton() {
	}
	//2.本类内部创建对象实例
	private final static Singleton instance = new Singleton();

	//--------------代码块的方式-----------
	//private	static Singleton instance;
	//static { // 在静态代码块中,创建单例对象
		//instance = new Singleton();
	//}
	//---------------------------------

	//3. 提供一个公有的静态方法,返回实例对象
	public static Singleton getInstance() {
		 return instance;
	}
}
  1. 优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。
  2. 缺点:在类装载的时候就完成实例化,没有达到 Lazy Loading 的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费
  3. 这种方式基于 classloder 机制避免了多线程的同步问题,不过,instance 在类装载时就实例化,在单例模式中大多数都是调用 getInstance 方法, 但是导致类装载的原因有很多种,因此不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化 instance 就没有达到 lazy loading 的效果
  4. 结论:这种单例模式可用,可能造成内存浪费

(2)懒汉式单例模式

// 懒汉式(线程安全,同步方法)
class Singleton {
	private static Singleton instance;
	private Singleton() {}
	//提供一个静态的公有方法,加入同步处理的代码,解决线程安全问题
	//即懒汉式
	public static synchronized Singleton getInstance() {
		 if(instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}

  1. 解决了线程安全问题
  2. 效率太低了,每个线程在想获得类的实例时候,执行 getInstance()方法都要进行同步。而其实这个方法只执行一次实例化代码就够了,后面的想获得该类实例,直接 return 就行了。方法进行同步效率太低
  3. 结论:在实际开发中,不推荐使用这种方式

(3)双重检验-懒汉式

// 懒汉式(线程安全,同步方法) 
class Singleton {
	private static volatile Singleton instance;
	private Singleton() {}
	//提供一个静态的公有方法,加入双重检查代码,解决线程安全问题, 同时解决懒加载问题
	//同时保证了效率, 推荐使用
	public static synchronized Singleton getInstance() {
		if(instance == null) {
			synchronized (Singleton.class) { 
				if(instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

(4)volatile有什么作用?

被volatile关键字修饰的变量是被禁止重排序的。
单例模式中volatile关键字的作用

加了volatile之后,就保证new 不会被指令重排序。

3.原型模式,深拷贝和浅拷贝

原型模式(Prototype 模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。
浅拷贝:对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递;对于数据类型是引用数据类型的成员变量,比如说成员变量是某个数组、某个类的对象等,那么浅拷贝会进行引用传递,也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象。
深拷贝:

  1. 复制对象的所有基本数据类型的成员变量值
  2. 为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的对象,直到该对象可达的所有对象。也就是说,对象进行深拷贝要对整个对象(包括对象的引用类型)进行拷贝
  3. 深拷贝实现方式 1:重写 clone 方法来实现深拷贝
  4. 深拷贝实现方式 2:通过对象序列化实现深拷贝(推荐)

4.代理模式,静态/动态/Cglib代理

代理模式,有静态代理&动态代理,静态代理和动态代理的区别
cglib 和 JDK的动态代理实现有什么区别?

(1)静态代理

静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类

  1. 优点:在不修改目标对象的功能前提下, 能通过代理对象对目标功能扩展
  2. 缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类
  3. 一旦接口增加方法,目标对象与代理对象都要维护

(2)动态代理

  1. 代理对象,不需要实现接口,但是目标对象要实现接口,否则不能用动态代理
  2. 代理对象的生成,是利用 JDK 的 API,动态的在内存中构建代理对象
  3. 动态代理也叫做:JDK 代理、接口代理
  4. 代理类所在包:java.lang.reflect.Proxy
  5. JDK 实现代理只需要使用 newProxyInstance 方法,但是该方法需要接收三个参数,完整的写法是:
    static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h )

(3)Cglib代理

  1. 静态代理和 JDK 代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是 Cglib 代理
  2. Cglib 代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展, 有些书也将Cglib 代理归属到动态代理。
  3. Cglib 是一个强大的高性能的代码生成包,它可以在运行期扩展 java 类与实现 java 接口.它广泛的被许多 AOP 的框架使用,例如 Spring AOP,实现方法拦截

5.职责链模式 SpringMVC-HandlerExecutionChain

  1. 职责链模式(Chain of Responsibility Pattern), 又叫 责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。
  2. 职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
    SpringMVC-HandlerExecutionChain 类就使用到职责链模式

6.spring单例模式怎么实现的

spring怎么实现单例模式

7.设计模式在JDK有哪些使用场景,spring中用了哪些设计模式

设计模式在jdk、spring中的应用

九、其他

服务器CPU利用率过高怎么排查
OOM怎么排查
跑程序时候发现服务器系统内存占用100%怎么办
负载均衡是怎么做的,如果有10几个服务实例
数组里50个数,排好序,怎么把他打乱,可以使用random
自己设计消息中间件
项目,项目里的难点
单元测试介绍一下,多模块依赖怎么单元测试。Mockito
消息队列原理介绍
大数据相关,MapReduce
白盒测试、黑盒测试

十、算法题

前序和后序遍历构建二叉树
最短路径算法
KMP
排序算法,快排时间复杂度,为什么不稳定
TOP K问题,时间复杂度
堆排序
单例模式
最多会议场数问题
字符串翻转
写个死锁

处理日志,获取error的日志,去重,排序
写个LRU
堆排序
栈实现队列
反转链表
数组A和数组B,求 A并B - A交B;
算法题:矩阵搜索(说完之后问优化,没想到,提示二分搜索);
实现一个四则运算计算器(两个栈 + 优先级) , 冒泡排序
实现一个缓存队列
二叉树的镜像
树的节点最大距离
区间覆盖 例 [1 3] [2 5] [3 6]能否覆盖[2 6]

十一、数据结构与算法

红黑树为什么插入效率高
选择排序原理,时间、空间复杂度
插入排序、时间复杂度

十二、场景题

有1G数据,但是只有128M内存,要排序,怎么排
两个超大的文件,里面各装有上百万个数,还有无序的,数字的大小范围是0-500w左右。如何求两个文件中的重复的数据
1T个数找重复最多的10个,这里自己和上一面的大数集合一样一点一点优化出来了
2T的数据,找出频率最高的10个
海量数据,找重复数量前几的数据(口述思路)
如何防止超卖
有一个字符串池(比如一亿条),现在有一个新的字符串,如何判断这个字符串是否在字符串池中呢?map reduce
大量商品信息,一个商品一个id,每下一次单就在日志里记录id并且次数是1,统计次数最多的100个订单的id
一张(数据量很大的)表有大量的访问请求
登录请求背后的逻辑流程
海量集合A和B求交集
A和B两个线程同时访问一个数据库数据,如何保证不会被覆盖(CAS的思想)
海量数据问题
你会怎么设计数据库表结构
多个服务端上下线怎么感知
缓存和数据一致性,怎么处理。流式计算
两次点击,怎么防止重复下订单
1亿个手机号码,判断重复
秒杀场景设计,应付突然的爆发流量
分布式系统设计:现在有一个方法,可以给10台服务器调用,如何统计一天内10台电脑调用的次数和?
分布式锁的设计:每天早上8:00输出前一天的业务报表发到老板邮箱。如果现在有10台服务器,如果设计这个定时任务?
法1:分布式锁。法2:通过外部发来一个http请求,传给ngnix,通过ngnix自动进行分配到某一台服务器上。

十三、redis

为什么高并发使用redis不用mysql
redis的数据结构
redis数据类型,集群的原理
分布式事务了解吗
热点数据请求量太多,而redis负载均衡都会在hash到一个实例,如何处理
redis为什么快?在多核cpu下redis单线程浪费?
为什么说Redis是单线程的以及Redis为什么这么快!
redis击穿
redis与mysql数据同步
redis集群
redis分布式锁的实现
redis与MySQL数据同步
访问量太大redis支撑不住怎么办?
redis zset set区别
redis 持久化策略
AOF RDB 区别
redis线程
redis在增删改查时为什么单线程 还那么快?io模型?
redis集群
edis的热点key问题
redis的更新策略(先操作数据库还是先操作缓存)

十四、即将学习

分布式事务,如果2pc和3pc使用代价太高,有没有其他的解决方案
分布式事务解决方案
kafka消费模式,消息会重复消费吗
分布式一致性
CAP理论
tomcat处理解决一个请求,和spring boot怎么交互的
微服务架构
介绍一下zookeeper
考了一个细节点,zk宕机,dubbo中的consumer还能否通信
介绍一下你还知道的动态代理的方法(javassist,dubbo用的)
使用的切换数据源的方式
如何确保消息发送到消息队列中
从消费者端保证幂等
微服务为什么是微服务,什么样子的微服务架构是好的
dubbo的负载均衡
rpc中序列化的作用
Redis的缓存淘汰策略有哪些?
如何修改linux的文件权限
rpc原理
分布式一致性讲一讲
分布式锁的实现方式,zk实现和redis实现哪个比较好
降级处理hystrix了解过么
dubbo、netty介绍原理
限流算法
zk挂了怎么办
降级策略和降级框架

更多推荐

Java后端开发 校招实习面试准备