计算机基础知识复习7.30

java的sorted set原理

SortedSet是set接口的子类,sortedset接口的行为类似于普通set,但他包含的元素是在内部排序的,这意味着,当迭代sortedSet的元素时,这些元素将按排序的顺序进行迭代。底层基于红黑树来实现的。

java读写锁的原理

ReadWriteLock是一个接口,定义了读写锁的基本行为,有两个实现类ReentrantReadWriteLock和StampedLock

ReentrantReadWriteLock是一个可重入的读写锁,即保证多个线程同时读的效率,同时又可以保证有写入操作时的线程安全。读写锁进行并发控制的规则:读读不互斥,读写互斥,写写互斥

ReentrantReadWriteLock其实是两把锁,一把是writeLock(写锁),一把是ReadLock(读锁) 读锁是共享锁,写锁是独占锁。底层也是基于AQS来实现

StampedLock是JDK1.8引入的性能更好的读写锁,不可重入且不支持条件变量condition

不同于一般的Lock类,stampedLock并不是直接实现Lock或readWriteLock接口,而是基于CLH锁独立实现的。分为读锁,写锁,乐观锁

写锁:独占锁,一把锁只能被一个线程获得。当一个线程获取写锁后,其他请求读锁和写锁的线程必须等待

读锁:共享锁 没有线程获取写锁的情况下,多个线程可以同时持有读锁,如果已经有线程持有写锁,则其他线程请求获取该读锁会被阻塞

乐观锁:允许多个线程获取乐观锁以及读锁,同时允许一个写线程获取写锁

java公平锁和非公平锁的原理

公平锁:锁被释放之后,先申请的线程先得到锁,性能较差,因为公平锁为了保证时间上的绝对顺序,上下文切换更频繁。

非公平锁:锁被释放之后,申请的线程可能会先获取到锁,是随机或者按照其他优先级排序的,性能更好,但可能会导致某些线程永远无法获取到锁

Redisson实现分布式锁的原理

线程1执行Lua脚本加锁,如果加锁成功,会启用一个线程作为看门狗,每隔10秒去检查一下,如果还持有锁,延长生存时间。对于线程2想要加锁,会通过while循环不停地尝试加锁

网络七层模型和四层模型的区别

OSI七层模型:

应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

TCP/IP体系结构:

应用层(各种应用层协议如FTP,SMTP),传输层(TCP/UDP),网络层IP,网络接口层

如果gc时间过长,应该怎么排查

1.对象创建的速度过高

2.young区过小,导致对象就会过早的晋升到old区,old区的垃圾回收一般比young区会花费更多的时间

3.选择合适的GC算法

4.IO负载过大

5.gc任务分配不均匀

索引的类型

按物理存储分类:聚簇索引 非聚簇索引

按字段特性分类:主键索引,唯一索引,普通索引,前缀索引

主键索引:建立在主键字段上的索引,通常在创建表的时候一起创建,一张表最多只有一个主键索引,索引列的值不允许有空值

唯一索引:建立在unique字段的索引,一张表可以有多个唯一索引,索引列的值必须唯一,但是允许有空值

普通索引:就是建立在普通字段上的索引,即不要求字段为主键,也不要求字段为unqiue

前缀索引:是指字符类型字段的前几个字符建立的索引,而不是在整个字段上建立的索引,前缀索引可以在字段类型为char,varchar,binary的列上

按字段个数分类:联合索引 单列索引

建立在单列上的索引称为单列索引,建立在多列上的索引称为联合索引

redolog的刷盘时机

Mysql正常关闭时

当redo log buffer中记录的写入量大于redo log buffer内存空间的一半时,会触发落盘

InnoDB的后台线程每隔1秒,将redo log buffer持久化到磁盘

每次事务提交时都将缓存在redo log buffer里的redo log直接持久化到磁盘

http1.0,1,1,2.0,3.0的区别

HTTP/1.0

无状态

无连接:每次请求都要建立连接,需要使用keep-alive参数建立长连接

队头阻塞:下一个请求必须在前一个请求响应到达之前才能发送,假设前一个请求响应一直不到达,那么下一个请求就不发送,后面的请求就阻塞了

HTTP/1.1:

使用长连接的方式改善了HTTP1.0短连接的性能开销

支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发送第二个请求出去,可以减少整体的响应时间

HTTP/2.0

基于HTTPS,采用头部压缩,如果同时发出多个请求,他们的头部是类似的,协议会帮助消除重复的部分。

二进制格式,头信息和数据体都是二进制,并且统称为帧

支持并发传输,引入stream,多个stream复用一条TCP连接。针对不同的HTTP请求用独一无二的stream ID来区分,接收端可以通过stream id有序组装成http消息,不同stream帧是可以乱序发送的,因此可以并发不同的stream,也就是http/2可以并行交错地发送请求和响应

采用服务端推送:服务端不再是被动地响应,可以主动向客户端推送消息

HTTP/3

采用基于UDP的QUIC协议

单例模式为什么需要双重检查

第一次校验目的,由于单例模式只需要创建一次实例,如果后面再次调用getSingleton方法时,则直接返回之前创建的实例

第二次校验目的,假设不使用第二次校验,线程1和线程2都通过了第一次校验,线程1获得了锁,并创建实例,线程2也获取到锁,又创建一份实例。

参考资料:

Java 面试指南 | JavaGuide

小林coding

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值