题源地址:https://blog.csdn.net/weixin_48726357/article/details/107662362
一面(问了数据结构、jvm、锁等): 1. 自我介绍和项目 2. HashMap底层如何实现?数组+链表+红黑树
断点1 : 如果数组是空直接new一个节点进去
断电2 : 如果已经有了节点了判断是否已经到转换为红黑树的阈值(链表->红黑树)
传统: 对key名取模服务器台数 余数决定访问那台 实现分区的效果 缺点不能动态添加服务器
hash一致性: 2^32(ipv4的大小)构建一个hash环,将服务器计算后分布在hash环中,在两台服务器之间的就是属于它的请求, 如果服务器分布不平均, 虚拟节点–实际节点的复制品,用于构建均匀到节点分布
ConcurrentHashMap CAS控制并发安全
TreeMap 红黑树
TreeSet 使用 TreeMap 红黑树
1.标记-清除算法 : 效率低,标记清除后会产生大量不连续的内存
2.标记-整理算法 : 相比标记-清除算法多了整理,相对的更加复杂
3.复制算法 : 简单高效,代价是将内存缩小为原来的一半,代价高
4.分代收集算法
5.非分代收集算法
相比 GMS 更注重吞吐量 GMS注重响应
G1 初始标记(独占)->并发标记(并发)->最终标记(并行)->筛选回收(并行)
空间整合,没有内存碎片产生 利用多核性能 控制停顿时间(G1选择回收region,达到预期时间)
最短回收停顿 老年代 标记-清理(减少减少停顿时间) 失败后SerialOld收集器
初始标记(独占)->并发标记(并发)->重新标记(并行)->并发清理(并发)
缺点 内存碎片 会触发fullgc
1.当程序时间运行当中,在运行功能下,同时产生了多条程序分支,同时工作叫并行。(某一时间节点)
2.(某一时间段)多个线程对同一个功能模块进行访问叫并发。
1次 初始标记
10. java栈什么时候会内存溢出,java堆呢,说一种场景?调用方法过多,比如递归调用
对象过多,数组过大,内存泄漏
软:在内存不够的时候才会被回收
弱:在下一次gc的时候被回收
AQS synchronized关键字
13. synchronized锁升级的过程(偏向锁到轻量锁再到重量级锁),分别#### 1. 如何实现的,解决的是哪些问题?在为发生锁竞争的时候是偏向锁 对象头里
发生锁竞争后升级轻量锁 cas
cas一定次数后升级重量锁
提高性能
Server : 整个服务器 1个
Service : 提供具体服务
Service -> Connector : 用于处理连接相关的事情,并提供Socket与Request和Response相关的转化;
Service -> Container : 用于封装和管理Servlet,以及具体处理Request请求;
Service -> Container-> Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine;
Service -> Container-> Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点;
Service -> Container-> Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件;
Service -> Container-> Wrapper:每一Wrapper封装着一个Servlet;
加载类的 有三种 系统类加载器 扩展类加载器 应用类加载器
16. 说说双亲委派模型机制?每种类加载器都有自己的加载范围,
系统类加载器加载jdk里的一些类
扩展类加载器加载jdk下 ext下的类
应用类加载用户编写的类
如果用户创建了一个类叫 java.land.String 这应该是不被允许的
故加载类时会最高优先级系统->扩展->应用类加载器,只有系统类和扩展类加载器没有这个方法才会使用应用类加载,当然也可以通过重写类加载器打破委派机制
可达性分析 引用计数
18. 未来的职业规划? 二面 1. 讲一下项目 2. 线程池由哪些组件组成?1、线程池管理器(ThreadPoolManager):用于创建并管理线程池
2、工作线程(Worker): 线程池中线程 主要状态 执行对象 和 线程对象 其中的 run 方法调用了runWorker(),该方法在执行任务后仍然会循环从队列获取任务执行.
3、任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
4、任务队列:用于存放没有处理的任务。提供一种缓冲机制。
源码解析 https://blog.csdn.net/chenaima1314/article/details/78875942
拒绝策略
CallerRunsPolicy(调用者运行策略)当触发拒绝策略时,只要线程池没有关闭,就由提交任务的当前线程处理。
AbortPolicy(中止策略)当触发拒绝策略时,直接抛出拒绝执行的异常,中止策略的意思也就是打断当前执行流程
DiscardPolicy(丢弃策略)直接静悄悄的丢弃这个任务,不触发任何动作
DiscardOldestPolicy(弃老策略)如果线程池未关闭,就弹出队列头部的元素,然后尝试执行
string list hash set zset bitmap geo hyperLogLog
reactor模型 多线程接受请求 内部队列执行命令
volatile-lru :从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中随机挑选数据淘汰。
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰。
allkeys-random:从数据集(server.db[i].dict)中随机挑选数据淘汰。
no-envivtion(驱逐):禁止驱逐数据。
————————————————
版权声明:本文为CSDN博主「王小二(海阔天空)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_29229567/article/details/87971925
先更新数据库 后删除缓存 延迟双删 canal管控
8. Redis的分布式怎么做?集群 槽点 hash一致性
9. RPC讲一下?远程服务调用 调用者 注册中心 提供服务者 tcp Dubbo
dubbo 倾向服务调用
springcloud 倾向微服务时代一整套服务治理
三次握手 第一次告诉对方自己的发送能力正常 第二次 接收方告诉发送方自己的接收和发送能力正常 第三次 告诉接收方自己的接收能力正常
11. Http请求过程,DNS解析的过程? 12. InnoDB支持的四种事务隔离级别名称是什么?有什么区别?说说MySQL隔离级别?1.读未提交 - 脏读、不可重复读、幻读
2.不可重复读 - 不可重复读、幻读
3.可重复读 - 幻读
4.串行化
ACID 原子性Atomic 一致性Consistent 隔离性Insulation 持久性Duration
[mysqlId]
slow_query_log:是否开启慢查询日志,1表示开启,0表示关闭
slow-query-log-file:慢查询记录保存地址
B-tree是一种多路自平衡搜索树,它类似普通的二叉树,但是Btree允许每个节点有更多的子节点
b+tree
1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;
2.不可能在非叶子结点命中;
3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;
4.更适合文件索引系统;
btree和B+tree的区别:
(1)B+tree的非叶子节点不存储真正的data,而btree可以
(2)增加了一个链指针
(3)btree支持数据的延展性,B+tree支持数据的扩展性
索引
explain 执行计划
有序优先使用 between 代替in
in 代替 or
最左原则 避免><在组合索引查询的前面
like 通配符放最右
尽量不要使用表达式 如 id+1=2
c 一致性 a 可用性 p 分区容错性
zookeeper cp redis ap
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
4. 负载均衡怎么实现?为什么这么做?一般服务器的负载均衡功能 内部服务负载均衡功能 穿透 数据库没数据 缓存不过期,boolean过滤器 MySQL 主从复制有三种方式: 基于语句 遇到类似时间函数这种就会出现偏差 https://blog.csdn.net/qq_38380025/article/details/105842788 计数器 VS 滑动窗口 漏桶算法 VS 令牌桶算法 令牌桶算法由于实现简单,且允许某些流量的突发,对用户友好,所以被业界采用地较多。当然我们需要具体情况具体分析,只有最合适的算法,没有最优的算法。 ———————————————— https://blog.csdn.net/weixin_30381793/article/details/98554684 productor retries 重试策略 ack应答策略(all所有节点备份成功) 一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的; 能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目; 和面试官聊基础知识比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是 如何使用的; 建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。 另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
性能 LVS(四层)>Haproxy(四七层)>Nginx(七层)
功能 LVS(四层)
注册中心配合 openfeign ribban
击穿 缓存没数据 数据库有数据
雪崩 大量的击穿
基于SQL语句的复制(statement-based replication,SBR),
基于行的复制(row-based replication,RBR),
混合模式复制(mixed-based replication,MBR)。
对应的bin-log文件的格式也有三种:STATEMENT, ROW, MIXED。
————————————————
版权声明:本文为CSDN博主「小七mod」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cy973071263/article/details/104508211
基于行复制 容易产生日志比如一口气修改了一千条 就会产生一千条日志
混合模式复制 由mysql进行智能识别优化bin-log存储
计数器算法是最简单的算法,可以看成是滑动窗口的低精度实现。滑动窗口由于需要存储多份的计数器(每一个格子存一份),所以滑动窗口在实现上需要更多的存储空间。也就是说,如果滑动窗口的精度越高,需要的存储空间就越大。
漏桶算法和令牌桶算法最明显的区别是令牌桶算法允许流量一定程度的突发。因为默认的令牌桶算法,取走token是不需要耗费时间的,也就是说,假设桶内有100个token时,那么可以瞬间允许100个请求通过。
版权声明:本文为CSDN博主「小小工匠」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yangshangwei/article/details/88373985
consumer enable.auto.commit=false(在批处理时手动提交 处理到一半出现异常,处理多少提交多少offset)
broker replication-factor 3(副本的个数)
————————————————
版权声明:本文为CSDN博主「零零后小码农」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_48726357/article/details/107662362



