- zk工作原理
广播 恢复(Paxos)
- tcp/ip五层模型
数据链路层,网络层,传输层,物理层,应用层
- osi 7层
2+会话层和表示层
- 如果我们登录一个web,获取到自己身份对应的权限,这些权限信息是存储在session还是存储在cookie
all
- springmvc原理
(1) Http请求:客户端请求提交到DispatcherServlet。
(2) 寻找处理器:由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller。
(3) 调用处理器:DispatcherServlet将请求提交到Controller。
(4)(5)调用业务处理和返回结果:Controller调用业务逻辑处理后,返回ModelAndView。
(6)(7)处理视图映射并返回模型: DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图。
(8) Http响应:视图负责将结果显示到客户端。
- ThreadLocal作用
保证线程安全,因为实例是线程私有的
- io,bio,nio,aio
io同步阻塞
bio同步非阻塞 单线程
aio异步非阻塞
nio异步阻塞 单/多
- ThreadLocal原理
每个Thread维护着一个ThreadLocalMap的引用
ThreadLocalMap是ThreadLocal的内部类,用Entry来进行存储
调用ThreadLocal的set()方法时,实际上就是往ThreadLocalMap设置值,key是ThreadLocal对象,值是传递进来的对象
调用ThreadLocal的get()方法时,实际上就是往ThreadLocalMap获取值,key是ThreadLocal对象
ThreadLocal本身并不存储值,它只是作为一个key来让线程从ThreadLocalMap获取value。
9. socket比起dubbo的劣势在哪
socket的底层还是tcp协议,不同的语言,实现的tcp协议,解析数据的方式是不一样的,java就是Serializable,其他的语言都其他的解析规则,所以数据可以传送,但是无法识别,但是dubbo使用的http协议作为底层,大多数语言都能实现http协议,而且http的解析规则是相同的,所以可以让数据正常传输识别
- 什么是线程安全,什么是线程不安全
多个线程在执行同一段代码的时候,每次的执行结果都是一样的,这就是线程安全,反之就是线程不安全。
- 谈谈你对线程池的理解
线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程(提高线程复用,减少性能开销),线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中然后等待下一次分配任务
- 线程池有几种
4
- 谈谈进程和线程都是啥?
进程里面有很多线程,资源调度的单位是进程,程序执行的单位是线程
- 创建线程池的几种方式?
一:创建大小不固定的线程池
二:创建固定数量线程的线程池
三:创建单线程的线程池
四:创建定时线程
- 什么是并发,什么是分布式
并发就是宏观同时执行多个操作,微观是存在先后的。
分布式是,把一件大事情分成多个小事情,类似于分治算法。
- java4种引用
幻象(PR),强(new)弱(null)软()
- synchronized和Lock的区别
可以说,Lock的功能会更多一些,是一个接口,且Lock下的方法加锁方式一定要有一个lock和unlock的体现,也就是加锁和解锁。
sync是一个关键字,被括起来的是代码块或者方法,括号里是锁住的对象,自带加锁和解锁过程。
- CountDownLatch和CyclicBarrier的区别
- java的浅拷贝和深拷贝的区别
浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。
8种基本类型的赋值操作均为浅拷贝,对象之间的直接复制也是浅拷贝(不改变存储地址)
深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。
重写clone方法将super.clone修改成a.clone强转一下就是深拷贝
- @Builder lombok的作用
创建静态内部类,并且重写set操作且创建内部构造方法,返回set的对象,作用是防止外部写入