1. ConcurrentHashMap锁机制进化的考量 原文链接
主要内容就是讲的ConcurentHashMap在1.7和1.8的不同之处,从1.7的分段锁,到1.8的采用CAS和synchronized针对hash桶。还包括了1.8的帮助扩容的机制。
2. mysql的分布式事务 原文链接
首先介绍了mysql的单机事务,通过ACID来保证单机的mysql事务。
mysql的分布式事务,介绍了CAP理论,以及Base理论,介绍了两阶段的提交的XA协议,TCC理论(注意cacel的幂等一定要保证),本地消息表适用于对一致性要求不高的场景。MQ事务主要就是针对本地消息表的封装,需要保证下游消费的幂等性(失败就一直重试)。由于下游消费失败,且一直重复消费的情况不是很多,一般不需要单独的去设计复杂的流程。
3. TCP包和UDP包的不同 原文链接
TCP是面向字节流的,他本身是没有长度的限制(当然这也是粘包拆包发生的原因)。UDP是面向报文段,它传递的包是有长度的限制的。从理论上说,包含报头在内的数据报的最大长度为65535字节(64K)。所以UDP传输的文件太大,超过了64K就会发生错误。TCP可以发无限的长度,因为它的数据部分本质是一长串字节流而已。
4. 银行家算法 原文链接
银行家算法主要是用来检测系统的安全性,防止死锁的。
有一个公式需要记住
当前还需要的资源数<=系统所剩余的资源量以及其他所有进行当前占有资源量之和。
5 CloseWait与TimeWait的区别 原文链接
核心思想就是close_wait是被连接方的问题,time_wait是连接方的问题。出现time_wait,需要去设置参数,出现close_wait需要去看服务方的代码有没有问题。就是让服务器能够快速回收和重用那些TIME_WAIT的资源。
6按下ctrl +c 后发生了什么原文链接
如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。
终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一个SIGINT信号给该进程)。
当某个时刻要从内核返回到该进程的用户空间代码继续执行之前,首先处理PCB中记录的信号,发现有一个SIGINT信号待处理,而这个信号的默认处理动作是终止进程,所以直接终止进程而不再返回它的用户空间代码执行。
7.select,poll,epoll的区别链接1链接2
前面的大概的讲了IO,后面的文章具体讲了epoll。IO的分类主要是从两个角度
1.等待数据准备。
2.将数据从内核缓冲区复制到用户空间缓冲区。
五种io方案:阻塞IO,非阻塞Io,事件驱动IO(多路复用)Io,信号驱动Io,AIO
select,返回三个位图,读,写,异常。监听的文件描述符有最大值限制1024,但是可以通过修改宏重新编译内核的方式修改
poll,返回的是一个注册的事件的数组,虽然没有上限,但是连接数太多时,需要遍历很久
epoll,使用的是三个函数,crete代表是创建一个预大小为n的描述符集合,ctl可以针对事件描述符红黑树,进行增删改查操作,然后wait函数得到一个就绪的描述符的列表
epoll涉及边缘触发和水平触发
边缘触发,只触发一次(无论事件是否处理完毕,仅触发一次)
水平触发,是这一次触发了,下一次还触发(只要事件没有处理完毕,每一次epoll_wait都触发该事件)
当使用epoll的ET模型来工作时,当产生了一个EPOLLIN事件后,读数据的时候需要考虑的是当recv()返回的大小如果等于请求的大小,那么很有可能是缓冲区还有数据未读完,也意味着该次事件还没有处理完,所以还需要再次读取
8.TCP/IP五层,OSI七层协议链接
五层,物理层,数据链路层,网络层,传输层,应用层
OSI多的两层,会话层(建立维护,管理会话连接),表示层(数据格式化,加密解密)
9接口调用一致性 如何保证客户端->a->b过程中,任意一部分处理失败都要回滚呢? 链接
主要就是通过两阶段提交,B预执行,prepare状态,A执行成功写状态,B通过反查A执行的过程,来定义自己的终态是提交还是回滚
10.线程池的死锁线程池死锁
一般的多线程有死锁,线程池会引出一种特殊的 死锁,队列是无界队列
核心线程数是1,假如这个正在执行着一个任务,然后此时这个线程想抛一个任务到线程池中,并且需要等待这个任务的结果,此时由于此时线程池只有一个核心线程,并且已经被使用了,所以队列的任务不会执行。导致死锁。
解决方式:每个线程抛任务时不要抛到自己的线程池,应该新搞一个线程池。
11.nacao注册中心原理链接
1.服务提供者将服务的协议,地址注册到注册中心
2.服务消费者需要获取到服务提供者的信息
3.注册中心要感知服务提供者的状态
4.服务消费者需要知道服务提供者的状态
nacao在注册中心与消费者之间采取推拉相结合的方式,消费者每隔10秒钟去注册中心拉取配置,注册中心检查心跳,如果心跳失败就使用udp进行推送
秒级上下线其实也是有坑的,如果消费者刚拉完,就下线了,客户端不一定可以实施感知到。
12 DOS攻击链接
主要的问题就是服务器不能很容易区分哪些是正常的请求,哪些是攻击的请求。攻击者伪造大量的请求,从而使畅通的网络受阻,或者使服务器耗尽资源。
13.常用的排查linux的命令链接
查看进程 ps-ef
查看进程端口 netstat -nap | grep 进程pid
查看端口进程 netstat -nap|grep 端口号
14.分布式id的解决方法链接
主要是uuid,mysql自增,号段模式,雪花算法
15 kafka的offset的存储链接
旧版的在zookeeper中,新版的在broker中保存
16 kafka的基础知识链接
kafka的基础知识介绍
17 僵尸进程和孤儿进程 具体的区别 链接
孤儿:父进程死了,子进程没地方收养,交给1号进程做善后,一般没有什么影响
僵尸:子进程死了,父进程不知道,无法释放进程号等相关资源,拖累系统的运行。这时用ps命令就能看到子进程的状态是“Z”。
解决方法就是,找到这些产生僵尸进程的父进程,把他kill掉,这样的话,僵尸进程就变成了孤儿进程,这样就会被1号进程处理
如何找到子进程的父进程连接
pstree -aps 子进程进程号
18 linux查看文件被占用 命令
链接
lsof命令
19 http 1.0 1.1 2.0 3.0区别 链接
20 基础的操作系统 问题添加链接描述
链接
21 redis 看门狗机制链接
主要的原因就是在使用分布式锁的时候,为了防止线程执行错误,无法释放锁,而设置过期时间,但是可能在过期时间内还没有执行完,锁被抢走了,所以采用看门狗的机制,如果到期就可以自动续期。
22 索引的名字链接
聚集索引,辅助索引,覆盖索引,联合索引(复合索引)
23。 shift +g 跳到文件底部
24.单机Mysql可以支持什么样的数据量链接
myisam没有限制,innodb表空间大小为64T,一个表空间里所有表的内容不能大于64T,其中二千万五千万有良好的索引的情况下应该是极限。
25.https链接
ssl握手,三个随机数,中间人攻击,CA证书,对称加密,非对称加密
26.mysql的中文乱码问题
浏览器编码,socket编码,tomcat编码,以及mysql编码
一一核对
浏览器编码:gb2312
socket:utf-8
tomcat编码
cmd默认GBK编码
InnoDB默认使用latin1_swedish_ci
25 数据库范式链接
一范式:每一列都是原子的不可再分
二范式:每一列都需要依靠主键,而不是主键的一部分
三范式:每列都和主键直接相关而不是间接相关。
反范式:逻辑设计层面使用三范式,具体实施上可以降低,比如增加字段,减少表的连接的操作。
26.cpu负载链接
27审计日志链接
什么是数据库的审计功能链接
审计的一些实现链接
28.post与get的安全性
POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这 里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击
29.binlog相关链接
binlog是推模式
循环复制
- h5如何获取用户的open_id
用户在一个公众号下的唯一信息就是open_id
拿到code之后,需要把code传给后端,后端去请求微信获取openid等参数,前端是获取不到的,微信开发文档中是这么写的:
31.h5如何获取用户的union_id
1.如果用户关注了公众号,就可以直接静默获取。如果用户未关注旗下的公众号,就需要申请用户授权去获取。
32.oatho授权机制添加链接描述
主要是四类角色的交互
1.资源持有者,终端的用户(比如这个微信号的主任)
2.资源服务器,服务厂商提供的资源访问服务,需要令牌才可以进入
3.client:客户端,需要使用这些资源的第三方
4.授权服务器,在验证资源所有者并获得授权成功后,将发放访问令牌给客户端。
34.MySQL索引在什么时候失效连接
or,“%”,联合索引(不在首位),全表扫描比索引快
36.char可以用来存储汉字嘛
java(两字节)中可以(),c++(一字节)中不行
37.进程调度算法
先来先服务,最短进程优先,优先级,最短剩余时间优先,最高响应比优先,.多级反馈队列调度算法
就绪态,运行态,等待态
38TCP重传时间连接
自适应算法,RTT
计算RTT时,如何判定此报文段是对先发送的报文段的确认,还是对后来重传的报文段的确认?在计算加权平均RTTs时,只要报文段重传了,就不采用其往返时间样本。
Karn算法进行修正Karn算法进行修正,方法是:报文段每重传一次,就把超时冲传时间RTO增大一些。典型的做法是:取新的重传时间为2倍的旧的重传时间。当不再发生报文段的重传时,才根据上面给出公式计算超时重传时间
39 AQS相关
Segment(分段锁)继承的是reentrantlock
reentrantlock加锁的关键在于CAS
ABA问题之一可能是比较的是个引用,但是把引用值改了引用仍然一样,就会导致一些错误。
40 最左前缀失效case链接
mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配
41.http 1.0 1.1 2.0 3.0 链接
1.X的缺陷:连接无法复用, HOLB
HOLB是指一系列包(package)因为第一个包被阻塞;当页面中需要请求很多资源的时候,HOLB(队头阻塞)会导致在达到最大请求数量时,剩余的资源需要等待其他资源请求完成后才能发起请求。
HTTP/2 二进制传输 多路复用 Header 压缩 Server Push
HTTP/3 基于 UDP 协议的 QUIC 协议
42 常见的http状态码 链接
43分库分表 链接
根据容量(当前容量和增长量)评估分库或分表个数 -> 选key(均匀)-> 分表规则(hash或range等)-> 执行(一般双写)-> 扩容问题(尽量减少数据的移动)。
44 Kafka为什么这么快添加链接描述
1.分区不同的机器上,本身就是一种负载均衡的体现
2.每个分区都是顺序写,删除的时候,kafka有个segement文件, 可以直接删除物理文件文件
3.page cache 如果担心瞬间掉电的page cache的副本没有保存的话,可以使用Replication 机制解决。
Replication 机制 很重要哦,就是至少有leader和一个flower同步成功,才会算写入成功链接
4零拷贝技术
一般是四次,使用mmap文件映射就是三次,缺点是可能不可靠,因为文件内容并没有真正的写盘
5.磁盘文件通过网络发送(Broker 到 Consumer) sendFile
6批处理 在一个批处理中累积多条记录 (包括读和写) 分摊网络开销
7.数据压缩
45 kafka如何保证顺序型链接
单partition有序 Producer ID(即PID 生产者编号)和Sequence Number(消息编号) 大,拒绝写入(InvalidSequenceNumber),小,直接丢弃 (DuplicateSequenceNumber)
46 kafka中zk的作用链接 - Broker注册 (IP地址和端口信息)
- Topic注册(分区信息及与Broker的对应关系)
- 生产者负载均衡
- 消费者负载均衡
- 分区 与 消费者 的关系
- 消息 消费进度Offset 记录
- 消费者注册
47 kafka广播和单播链接
单播:在一个组 广播:每个组一个
48 rebalance的多个条件 链接
- 新消费者加入
- 消费者掉线
- 消费者主动退出
- 订阅的topic分区出现变化
- 取消了topic的订阅
49 Kafka 的容灾性添加链接描述
通过副本replication的设置和leader/follower的的机制实现的。
50.快重传之前都理解错了链接
以前是捎带确认,这边需要快重传(在收到三个连续的ack时,因为这个时候大概率丢包了)
51 这个太重要了
52java的四个核心思想链接 - netty零拷贝添加链接描述
避免数据流经用户空间 transferTo()
避免VM到堆空间的复制 使用直接内存
用户业务上的复制 CompositeByteBuf
54.kafka的消费的三种模式 链接
至少一次 (手动提交)
至多一次 (自动提交)
刚好一次 (手动提交,但要保证幂等)
需要搭配自动提交和手动提交
55 java nio出现的问题添加链接描述
主要就是由于socket链接突然断开,会将是否有事件就绪的标志位唤醒,但实际并没有什么事件到来。
56.netty 相关 链接
连接
selector 轮询注册在上面的chanel
57 netty 为什么可以解决NIO的bug连接
记录空轮训的次数,然后到达了一定的阈值,就将旧的selectkey中的key的channel注册到新的selector中解决旧的selector空轮训的问题
58.netty的组件连接
eventloop 分为boss和woker 一个分发 一个工作
Channel
ChannelFuture
ChannelHandler
ChannelPipeline
Bootstrapping 客户端Bootstrap 服务端serverbootstrap
一个EventLoop周期由一个线程进行处理
一个EventLoop要处理多个它上面的channel
59 reactor模式连接
四个组件:多路事件分离器(boss),初始事件分发器,系统处理程序,事件处理器
60 GC的一次流程连接
可达性分析 (root:主要是非堆对象)
新生代GC 主要是eden区空间不够,或者是survivor区复制
老年代GC fullGC 老年代空间不足
61 GC监控连接
jps jstat statd
62 永久代是什么连接
64 java8新特性连接
65 同步 异步 阻塞 非阻塞添加链接描述
66 为什么要有双亲委派机制
67 Happens-before
68 springmvc的流程添加链接描述
69 两种动态代理
70 通过kafka问如何实现一个延迟消费的消息队列添加链接描述
71 kafka的rebalance机制连接
72 三范式
73 innodb与myisam 区别 他们都是b+树哦,可千万别记错了
74如何实现一个延迟处理的等待队列。(我回答的不好,提及了阻塞队列和优先级阻塞队列,然后面试官就说就是基于优先级阻塞队列的。)
75 分库分表连接
76 mysql使用B+树作为索引存储,优点(相同的页,m会大,树高会小,很好的支持范围查询) 缺点(1所有数据都在叶子节点,导致靠近根的数据也要到叶子节点才可以,2有冗余,每一层的节点数据最后都会在叶子节点中)
77 dns居然也会用tcp
78 共享内存的生命周期 连接
随内存
79 如何定义自定义加载器,什么时候使用自定义加载器连接
80 drop delete truncate
当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.
81 unnion和union_all的区别
,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复
82 内外连接区别
内连接:只返回左右两表比较的列相等的记录
外连接:左右两表的记录都需要返回
83 包装类
拆箱,装箱,缓存机制
84 hashmap扩容 连接
- 两倍扩容,第一次的时候要找到第一个比指定值大的2*n次方
- 1.7,扩容需要重新hash,1.8可以直接根据高位
- 1.7 头插法 1.8尾插法
85 wait和sleep,如何唤醒?连接
wait释放同步锁,sleep不释放同步锁
86 内存泄漏 与 threadlocal
87 redis内存淘汰策略连接
88 Transactional注解,事务什么时候会失效添加链接描述
89 mybatis #{}与${};
#{} 占位符 &{} 拼接符添加链接描述
90 程序计数器为空 添加链接描述
91 三种垃圾回收算法分别作用于什么代
标记清除 : 老年代
标记整理:年轻代
标记复制:年轻代
92 wait和notify/All必须放在同步锁里
93 Treemap
按照字典序排序
94 慢sql优化添加链接描述
95 设计模式 责任链 代理模式 策略模式 模板模式 单例模式
96 如何打破双亲委派机制链接
spi原理
重写findClass()
线程上下文件类加载器
97 kafka partition的数据存放在哪添加链接描述
98 violate关键字
99 重载和重写在jvm的实现添加链接描述
100 事务什么时候会失效
101 索引最左前缀原则
102 tcp/ip 几层 四层哦
数据链路层,网络层,传输层,应用层
103 内存屏障
104 synchronized怎么实现可重入锁
synchronized 就是可重入锁呀
105 synchronized新特性了解吗?(锁升级,锁消除,锁粗化,要讲锁升级吗?添加链接描述
106 MySQL为什么主键自增好?
107 SpringAOP
108 为什么主键要自增,从索引角度说,应该是防止B+树频繁分裂和合并节点?
范围查询效率 排序效率 io效率(页)如果主键为自增 id 的话,mysql 在写满一个数据页的时候,直接申请另一个新数据页接着写就可以了。
109 zk的选举机制
110 为什么使用ProtocBuf
添加链接描述
111 哪些区域会有OOM错误
堆 栈 直接内存 方法区
112 Minor GC 和 Full GC 流程触发
添加链接描述
minorGC major GC Full GC
113 多线程共用一个进程资源,共用不同进程的资源?
114 多线程 共用不同进程的资源
115 三台服务器不同服务并发共享一个进程资源?
对资源加分布式锁
116 redission 添加链接描述
117 new一个会放在哪个区
118 死锁解决办法及监测方法 检测方法 ?
jstack -l pid 可以检测死锁
119 .说一下aqs是怎么阻塞线程的添加链接描述
如果当前节点的前驱节点的等待状态为SIGNAL,则返回true
如果当前节点的前驱节点的等待状态为CALCLE,则表示该线程的前驱节点已经被中断或者超时,需要从CHL中删除,直到回溯到ws <= 0,返回false
若果当前节点的前驱节点的等待状态为非SIGNAL,非CANCLE,则以CAS的方式设置其前驱节点为的状态为SIGNAL,返回false.
120 线程中的异常如何处理添加链接描述
121 跳表节点晋升机制 添加链接描述
主要就是随机数的方式,1/2概率第一层,1/4概率第二层,。。
122 锁对应linux的是什么机制
linux 四种锁机制添加链接描述
123 布隆过滤器后面的优化
124 java个类型的大小
125 java泛型添加链接描述
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉,专业术语叫做类型擦除。
126 zookeeper是AP还是CP型
zookeeper是cp的
127 一致性哈希扩容怎么做连接
128 CMS为什么不整理内存,G1为什么要整理内存连接
CMS要时刻小心内存碎片引起的老年代full GC,因为发生了FULL gc后优势就没有了
连接 添加链接描述
129 rpc的网络协议可以用哪些(http,tcp,udp)
rpc网络协议的选取:考虑更倾向选择 IO 多路复用的方式,考虑零拷贝
130 golang里面协程间通信的方式
Channel模型
131 io的本质连接
,任何涉及到计算机核心(CPU和内存)与其他设备间的数据转移的过程就是IO。
132 是不是所有场景都B+树适用连接
不是,比如不需要范围查询,或者非关系数据库(MongoDB)
为什么用b不用hash,因为有时候也需要范围遍历,hash这样就是on了
为什么 MongoDB 使用 B 树(二)
原文链接: https://www.infoq.cn/article/ovcb2zviaofkrfp4obgd)
133 当前读和快照读及使用场景连接
快照读:不加锁的读
当前读:插入,删除,更新
select … lock in share mode (共享读锁)
select … for update (写锁)
134 mvcc线程安全连接
mvcc 快照读 ,三个值 当前活跃事务(未提交)最小id,最大id+1,当前活跃事务id集合
135 EXPLAIN各个字段连接
10 行
136 CAS原理连接
比较交换
总线锁
缓存锁
137 线程池四大拒绝策略连接
丢弃抛异常
丢弃不抛异常
丢弃队列最开头的那个
丢给提交任务的线程,让它去处理
138 ConcurrentHashmap的层的vector,和lock的原理
139 分布式Session如何实现连接
主要就是搞一session服务中心
140 遇见过什么Error
OutOfMemoryError
141 OOM你是怎么排查的添加链接描述
主要是看是内存泄漏还是内存溢出
内存泄漏的排查 添加链接描述
jps + jmap 查看存活对象的数量和大小 不正常的数据进行分析
142 我可以自己实现一个包名和类名都一样的Integer类吗 添加链接描述
自定义String类为什么不会被加载,自定义java.lang包下的类会报错 (java.lang.SecurityException: Prohibited package name: java.lang)
143 40亿个不重复、未排序的unsigned int,给一个x,有2G内存,如果判断x是否在这40亿个数之中?
144 FTP
FTP工作在TCP/IP模型的应用层,基于的传输协议是TCP 20(数据连接)和21(控制连接)
连接
145 不写不做任何操作可以用post吗
146 二进制文件和文本文件的区别连接
主要是编码方式的不同,二进制文件是直接将内存中的值放入文件中
147 Java中断机制 添加链接描述
Java 中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。
148 解决hash冲突 拉链法 开放定制法 公共冲突区 再hash法
149 Redis主从复制过程中发生宕机了怎么办 连接
要针对主库宕机还是从库宕机来讲
150 快排稳定嘛
151 tcp协议如果发生丢包了,滑动窗口要发的包存在哪里
152 为什么抛出异常和返回值类型需要有范围限制
153 反射的原理?
classdloader与class.forName
反射原理:连接
154 反射获得某个类的成员变量的过程虚拟机做了什么连接 静态编译和动态编译
155 nextkey什么情况下会退化成行锁 添加链接描述
唯一索引的等值查询
156 硬中断和软中断 连接 硬中断软中断
157 为什么协程只要几KB的内存,都存放了哪些东西(不会),线程里又存放了哪些东西 连接 分段栈和连续栈
158 tcp半连接 连接 半连接队列,全连接队列
159 最终一致性的一些解决方案连接
160 trace_id 和 span_id连接
trace_id 调用链最开始的地方生成
span_id 调用的位置
161 trace_id如何传递连接
服务间传递 服务内传递 多线程间传递
162 java线程池连接
163 BIO在操作系统的底层实现连接
read操作同步阻塞
164 502与504的区别
502 主要是网关收到不理解的响应
504 网关调用超时
165 http响应码 这篇文章讲的挺好的 连接
166 mysql的乐观锁和悲观锁 连接
一直认为是数据库实现的,没想到还是我们业务自己实现的呀
167 数据库存金额用什么存连接
decimal(m,n)因为double,float精度是不准的
168 setnx key value 不能设置过期时间,高版本的set有设置 过期时间的功能
169 ThreadFactory与BlockQueue链接
170GC线上排查链接
171 三种生成线程方式的区别
172. kafka和redis做消息队列时的对比连接
173.redis 热key的处理连接
174 分页查询 offset过大会导致什么问题连接
175 @Autowired(bytype) @Resource(by name bytype均可,默认使用byName) 的区别
176 mysql为什么提议使用自增主键添加链接描述
主要是为了防止页分裂吧
177 协程碰到阻塞式IO,底层线程会被挂起添加链接描述
178 协程底层的hook添加链接描述
碰到线程阻塞后,就将上面的协程挂载到新的线程下面
179 AOF与RDB的两种机制 添加链接描述
180 加密与hash连接
为什么有了hash,还要公钥私钥加密呢?我想是为了加密用户的信息吧,不然的话,别的人拿到了用户名和hash后的密码照样可以登录。
181 美团高可用架构 连接
182 数据库 vip(虚拟ip)的作用 添加链接描述
183 kafka宕机 不丢数据的原因 添加链接描述
至少有一个flowe和kafka同步了才会修改自己的位移吧?
184 最好记一下编辑距离,因为我们在论文那个项目中用到了
185 APP的保活 添加链接描述
186 String.intern方法详解连接
187 mysql主从是推还是拉 是推添加链接描述
推模式,因为推模式更加的及时。
188 redis和mysql的双写一致性 添加链接描述
189 延时双删的过程
先删缓存,再更新数据库,过一段时间后再删缓存
190 thread的状态 添加链接描述
六种状态 初始化 可运行 阻塞 等待 定时等待 死亡
sleep,join都是阻塞,不释放锁 wait会释放锁
191 Runtime.addShutdownHook的使用 连接
可以在关闭前实现一些比较优雅的做法
193 nacos是有健康监测的,一小段时间联系不上服务器就会自动的注销添加链接描述
这样就保证了无论是节点是否是主动下线还是宕机了,注册中心均可以察觉到,进而推送给客户端。
194 rpc相关问题总结连接
195 nacos的健康策略和心跳保持
Nacos的健康检查
Nacos中临时实例基于心跳上报方式维持活性,基本的健康检查流程基本如下:Nacos客户端会维护一个定时任务,每隔5秒发送一次心跳请求,以确保自己处于活跃状态。Nacos服务端在15秒内如果没收到客户端的心跳请求,会将该实例设置为不健康,在30秒内没收到心跳,会将这个临时实例摘除
196 kafka rebalance机制连接
加入 同步 两个过程
197 如何设计rpc异步调用连接
针对每一个request设置一个唯一的ID
198 腾讯云数据订阅 至少要两个SDK为什么?添加链接描述主备SDK
对一个订阅通道中,接了两个SDK消费下游,这两个SDK互为主备,同一个时间内,只有主SDK能订阅并消费到增量数据。当主SDK异常或是出现网络连接异常时,DTS会自动failover漂移到备SDK上,同时使用最后消费的时间点启动备SDK。主SDK每消费一条数据,会向DTS控制系统汇报一个ACK,即向控制系统汇报消费时间点。
199 SDK客户端的使用模式
SDK客户端的使用模式,取值为
ConsumerContext.ConsumerSubscribeMode.ASSIGN:ASSIGN模式,即一个消费组下仅支持一个SDK客户端消费订阅数据,详细说明,请参见SDK使用模式说明。
ConsumerContext.ConsumerSubscribeMode.SUBSCRIBE:SUBSCRIBE模式,即支持在同一个消费组下同时启动多个SDK客户端实现灾备,详细说明,请参见SDK使用模式说明。
SUBSCRIBE模式:DTS为了保证消息的全局有序,每个订阅Topic只有一个partition,且固定分配至partition 0中。当SDK客户端的使用模式为SUBSCRIBE模式时,您可以在一个消费组下同时启动多个SDK客户端,以实现灾备。实现原理是当消费组下的正常消费数据的客户端发生故障后,其他的SDK客户端将随机且自动地分配到partition 0,继续消费。
200 rd.forward( request , response
201 go的channel原理连接
缓冲区
等待队列是缓冲区满了,将要写入的元素放在等待队列里
里面的逻辑挺重要的
202 序列化方式的对比连接
json慢的原因是,序列化太大了,io
203 javac运行的原理添加链接描述
①解析与填充符号表过程:
主要进行词法、语法分析,词法分析是将源代码的字符流转变为token集合,语法分析是根据token构造抽象语法树的过程。
②插入式注解处理器的注解处理过程:
注解是在运行期间发挥作用
③分析与字节码生成过程:
标记检查》》数据及控制流分析》》解语法糖》》字节码生成
添加链接描述
204 sql语句如何优化
205 java为什么需要包装类 连接
面向对象的统一,以及集合不支持对基本数据类型的操作
206 如果一个有N个节点的平衡二叉树,深度是多少
207 kafka与rocketMQ的选型连接
208 线程池的线程是如何回收的添加链接描述
ThreadPoolExecutor回收工作线程,一条线程getTask()返回null,就会被回收。
一共有两种情况会返回null,见红框处 。
第一种情况,线程池的状态已经是STOP,TIDYING, TERMINATED,或者是SHUTDOWN且工作队列为空;
第二种情况,工作线程数已经大于最大线程数或当前工作线程已超时,且,还有其他工作线程或任务队列为空。这点比较难理解,总之先记住,后面会用。
209 excute和submit的区别 连接
210 缓存击穿的话,除了设置热点数据用不过期外还可以通过加锁的方式,如果没有从redis中获取数据,就对数据库的访问加锁,直到将缓存的内容写回到redis中
211 WebSocket协议 这个具体的内容还未理解
212 当catch代码块有continue,break,return关键字时,final代码段是否还会继续运行
答案:都会执行
public class Main {
void method(){
int[] arr=new int[5];
for (int i=0;i<5;i++){
try{
System.out.println(arr[6]);
}catch (Exception e){
continue;
}finally {
System.out.println("sss");
}
}
}
void method1(){
int[] arr=new int[5];
for (int i=0;i<5;i++){
try{
System.out.println(arr[6]);
}catch (Exception e){
break;
}finally {
System.out.println("sss");
}
}
}
public static void main(String[] args) {
Main m=new Main();
m.method1();
}
}
213 ScheduledThreadPool 连接
可以周期性的执行任务
这个队列也可以支持扩容,所以最大线程数也没啥用
延迟阻塞队列 连接
214 狂神juc连接
215 java反射原理解析添加链接描述
动态加载类和静态加载类主要是讲的如果采用new的方式在编译的时候就确定了这个类,如果不存在的话就编译不通过,而反射的话,可以通过执行到这一行时通过全限定名进行加载。好处是,我们可以将这个地方的全限定名通过配置的方式进行处理,这样我们具体加载哪个类就是可配置的了
216 线程池的线程数如何确定连接
cpu密集型=机器核心数+1(加1是为了等待空闲)
IO密集型=2*机器核心数+1
217 只有在使用当前读的时候,才会出现幻读。删除会产生幻读嘛,不会,因为那一行已经加锁了。
218 ArrayList扩容 连接
1.5 倍扩容 扩容调用的是grow方法
grow方法里面有 Arrays.copyOf 用于将以前数据的内容拷贝到新数组里
219 引用的大小添加链接描述
java并没有明确的规定,HotsPot虚拟机上一般是四个字节,32位
220 linux查询日志的方式 连接
tail 文件默认显示10行
221 数据库注入连接
222 DNS 原理 添加链接描述
223 查看磁盘连接
df -lh
224 GC调优的主要参数添加链接描述
-XX:NewRatio=3 设置老年代与新生代的比值 扩大新生代可以减少Minor GC的频率
-xx:MaxTenuringThreshold 通过设置晋升年龄,young区对象晋升老年代 其实,并不是完全等到这个参数才晋升,可能age<的对象大于了一半,也会晋升
CMSScavengeBeforeRemark 保证Remark前强制进行一次GC
-XX:PermSize参数与-XX:MaxPermSize设置的一样大,禁止Perm区扩容
因为Perm区内存不足发生扩容也会导致STW
225 系统可用性几个9
0.9 0.99 0.999 。。。。
226 mysql的异步复制 同步复制 半同步复制
高深的文章,目前看不太懂
227 autowire注解和@resource注解
autowire注解: 默认byType required参数 开启自动装配
@autowire注解搭配@qulifier注解 实现byName
@resource注解 java标准,大部分框架都支持 默认byName 可以指定type设置为byType
228 sql语句调优总结连接
select(*) ,limit ,函数,计算放在右边,减少or的操作,减少in的操作,join的时候,注意由小表去驱动大表,避免%放在前头,避免对null的判断
229 什么是rst包链接
230 task_struct的结构 添加链接描述
1 进程的基本信息
2 内存地址信息
3文件系统信息
4文件信息
5接受的信号
6信号处理信息
7父进程信息
231 处理文件的接口
open read write close
232 如何设计一个异步的RPC框架
使用CompletableFuture
1.服务调用方发起 RPC 调用,直接拿到返回值 CompletableFuture 对象,之后就不需要
任何额外的与 RPC 框架相关的操作了
2.在服务端的业务逻辑中创建一个返回值 CompletableFuture 对象,之后服务端真正的业
务逻辑完全可以在一个线程池中异步处理,业务逻辑完成之后再调用这个CompletableFuture 对象的 complete 方法,完成异步通知
3.调用端在收到服务端发送过来的响应之后,RPC 框架再自动地调用调用端拿到的那个返回值 CompletableFuture 对象的 complete 方法,这样一次异步调用就完成了。
233 在我们的rpc框架中,注册中心的选型?
1.首先如果是使用zookeeper,我们知道zookeeper是CP的,那么如果同一时间可能会有大批的服务上线,这样可能会给zookeeper造成过大的压力,导致注册中心不可用。
2 注册中心倾向于选择Ap的,那么这样一来的话,个人感觉nacos比较合适,因为支持AP的模式。而且,我们其实也可以接受,服务在上线一小段时间内,访问的还是原来的。只要保证最终一致性就好了。
234 线程的工作内存对应的硬件在哪添加链接描述
现代计算机系统都在CPU与内存之间加入一层高速缓存(Cache)作为缓冲
235 cpu的缓存一致性解决 添加链接描述
注意缓存的一些状态就好
236 服务变慢了如何分析 连接
237 进程与线程所占用的资源 添加链接描述
238 linux内核笔记链接
239 什么是短轮询,什么是长轮询?添加链接描述
其实就是在于是否hold住连接
240 旁路缓存相关链接
241 websocket相关 链接
242