首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
冲冲冲冲冲冲呀
上海交通大学 Java
发布于上海
关注
已关注
取消关注
mark
@FrankMe:
重点八股总结
[赞]感恩牛客的各位大佬给我的各种面经,把我自己整理的重点面经也发出来给后来人看看。其实,到后面才发现这些不过是非常简单的问题,所以不妨把战线拉长一点。切不要为暂时的得失而胆怯!重点的知识CMS(Concurrent Mark-Sweep)垃圾回收器CMS(Concurrent Mark-Sweep)是一种以最小化停顿时间为目标的垃圾回收器,适用于低延迟的应用场景。它主要用于老年代的垃圾回收。CMS 的工作过程分为四个阶段:初始标记(Initial Mark):标记直接与 GC Roots 相连的对象,这个阶段会触发“Stop The World(STW)”,但时间很短。并发标记(Concurrent Mark):在该阶段,GC 线程和应用程序线程并发运行,标记从 GC Roots 可达的对象。应用程序可以继续运行,因此不会有明显的停顿。重新标记(Remark):为了处理并发标记过程中新增的对象或修改的引用关系,需要一次重新标记,这个阶段也会触发 STW,不过时间较短。并发清除(Concurrent Sweep):在该阶段,GC 线程并发清理未被标记的对象空间,不会影响应用线程。优点:并发标记和清除阶段几乎不会停止应用程序运行,停顿时间较短。缺点:清理时不会对内存进行整理,容易产生碎片,可能导致老年代无法分配大对象。需要更多的 CPU 资源,特别是在并发阶段,GC 线程和用户线程争夺资源。G1垃圾回收器G1 收集器不采用传统的新生代和老年代物理隔离的布局方式,仅在逻辑上划分新生代和老年代,将整个堆内存划分为2048个大小相等的独立内存块Region,每个Region是逻辑连续的一段内存,具体大小根据堆的实际大小而定。G1收集器通过跟踪Region中的垃圾堆积情况,每次根据设置的垃圾回收时间,回收优先级最高的区域,避免整个新生代或整个老年代的垃圾回收,使得stop the world的时间更短、更可控,同时在有限的时间内可以获得最高的回收效率。三色标记算法三色标记算法是并发收集阶段的重要算法,它是描述追踪式回收器的一种有用的方法,利用它可以推演回收器的正确性。 首先,我们将对象分成三种类型的。黑色:根对象,或者该对象与它的子对象都被扫描了灰色:对象本身被扫描,但还没扫描完该对象中的子对象白色:未被扫描对象,扫描完成所有对象之后,最终为白色的为不可达对象,即垃圾对象MVCC 在 InnoDB 的实现方案MVCC(多版本并发控制)是 InnoDB 用于实现事务隔离的技术。其核心是通过保存数据的多个版本来避免读写冲突。具体实现包括:为每行记录添加两个隐藏字段:一个表示数据版本的创建时间戳,一个表示删除时间戳。当读数据时,根据事务的时间戳判断当前事务能否看到该数据版本,来实现快照读和当前读。MVCC 主要用于实现 READ COMMITTED 和 REPEATABLE READ 两种隔离级别。Redis 除了缓存,还有什么应用场景消息队列:通过列表或发布订阅模式实现消息队列。分布式锁:通过 setnx 和过期时间实现分布式锁。计数器:Redis 的自增操作非常适合实现高并发场景下的计数器。会话管理:通过 Redis 存储会话,保证分布式系统中会话的共享。排行榜:使用有序集合存储用户排名数据。Redis 实现超时订单取消可以使用 Redis 的延时队列,或通过 setnx 设置订单的超时时间,当订单超时后通过定时任务扫描未支付订单并取消。Redis 实现分布式锁1. setnxRedis 实现分布式锁常用 SET key value NX EX time 命令:NX 保证锁只会被一个客户端获取。EX 设置锁的过期时间,防止死锁。2. Redisson 分布式锁Redisson 是一个基于 Redis 的高级客户端库,提供了许多实用的 Redis 功能,包括分布式锁。相比于原生的 SETNX,Redisson 实现了一个更加复杂和完善的分布式锁机制。高抽象封装:Redisson 提供了类似 Java 中的 ReentrantLock 的分布式锁实现,API 简单且易用,隐藏了底层细节。自动续期:Redisson 实现了锁的自动续期功能,当持有锁的线程仍在执行时,Redisson 会不断延长锁的过期时间,防止锁过期失效导致其他线程误拿锁。公平锁和非公平锁:支持公平锁(多个线程按照获取锁的顺序排队)和非公平锁。可重入锁:Redisson 支持可重入锁(Reentrant Lock),即同一个线程可以多次获取同一把锁,而不会发生死锁。3. Redlock 分布式锁目的是在一个分布式环境中,使用多个 Redis 实例来实现一个高可用的分布式锁。多实例加锁:假设有 5 个 Redis 节点(推荐奇数个节点,至少 3 个)。在每个节点上执行 SETNX 操作。多数派锁定:如果客户端能在大多数节点(至少 3 个节点)上成功加锁,并且加锁操作的总耗时小于锁的过期时间,则认为加锁成功。解锁:当任务执行完毕后,客户端需要在所有节点上解锁优点:容错性强:即使部分 Redis 节点宕机,只要大多数节点成功加锁,仍可以认为加锁成功。可靠性高:相比单个 Redis 实例的锁,在 Redis 实例出现网络分区或节点故障时,Redlock 能提供更高的可靠性。缺点:实现复杂,需要维护多个 Redis 实例。因为需要在多个节点上执行锁定操作,性能较 SETNX 和 Redisson 略低。Spring 什么时候初始化 BeanSpring 默认在容器启动时(应用启动时)初始化单例 Bean,使用懒加载时则在第一次使用时才初始化。AOP 的底层原理AOP(面向切面编程)通过动态代理机制实现。Spring 使用 JDK 动态代理(基于接口)和 CGLIB 动态代理(基于类)来实现切面逻辑,将横切关注点(如日志、事务)分离出来。计网的分层计算机网络通常分为五层:应用层、传输层、网络层、数据链路层和物理层。在 OSI 七层模型中,多了表示层和会话层。HTTP 和 HTTPS 属于哪一层HTTP 和 HTTPS 属于应用层。TCP 和 UDP 属于哪一层,TCP 如何实现可靠连接TCP 和 UDP 属于传输层。TCP 通过三次握手建立连接,通过确认应答机制、超时重传、流量控制、拥塞控制等手段保证连接的可靠性。以下是对你提供问题的简要解答:线程池拒绝策略当线程池中的任务队列已满且所有线程都在忙碌时,会触发拒绝策略,主要有四种常见的拒绝策略:AbortPolicy:默认策略,直接抛出 RejectedExecutionException 异常,阻止系统正常工作。CallerRunsPolicy:由提交任务的线程来执行该任务,降低任务的提交速度,减轻线程池的负担。DiscardPolicy:直接丢弃无法处理的任务,不抛异常。DiscardOldestPolicy:丢弃任务队列中最旧的任务,然后尝试重新提交当前任务。开发者也可以通过实现 RejectedExecutionHandler 接口自定义拒绝策略。让我做一个订单搜索怎么做,通过商品名搜索订单在 MySQL 中可以通过 全文索引(Full-Text Index)来提高文本搜索效率。创建全文索引的步骤:首先,确保数据库表的存储引擎为 InnoDB 或 MyISAM。对 商品名 字段创建全文索引:然后使用 MATCH() 和 AGAINST() 函数来搜索商品名匹配的订单:通过这种方式,MySQL 会使用索引加速商品名的模糊匹配搜索。G1 怎么设置它的区大小G1 GC(Garbage First Garbage Collector)中的堆内存分成了多个相同大小的 Region。这些 Region 的大小可以通过 JVM 参数配置:-XX:G1HeapRegionSize=n:设置每个 Region 的大小,取值范围是 1MB 到 32MB,必须是 2 的幂。默认大小根据堆的大小自动确定。G1 的区大小越大,垃圾回收的开销越小,但可能会造成内存浪费。单机为什么用redis缓存?redis的读写比mysql快很多,基于内存、数据结构优化、基于单线程;对于变动少、查询时间长的数据是比较合适放在redis中如何解决redis和mysql双写一致性问题旁路缓存策略(CashAside方法)一般在项目中都是此案用旁路缓存策略,具体思想是先更新数据库,再删除缓存。那么就有两个问题(1)为什么不是先更新数据库,再更新缓存。假设我们有两个线程A和B,分别执行更新数据库、更新缓存,两个操作,如果是顺序执行,自然是没有问题;如果是两个线程同时执行,考虑网络等问题,会出现A更新数据库,B更新数据库,B更新缓存,A更新缓存,这样数据库就是B的数据,缓存是A的数据。这样读取的就是脏数据,如果是删除缓存,就不会出现这个问题。而且写的操作消耗IO也比较多,不推荐这个。(2)为什么不能先删除缓存,再更新数据库尼?继续考虑这样的场景,A线程:写操作,需要1.删除缓存;2.更新数据库; B线程:读操作,1.查询缓存 2. 若缓存未命中,查询数据库并更新缓存。这样的话,A删除缓存后,B执行完,读取缓存,缓存未命中,更新缓存,A再更新数据库。这样数据库和缓存的数据就不一致了。(3)当然先更新数据库、再删除缓存也存在很多问题:A:更新数据库,删除缓存;B:查询缓存,缓存未命中查询数据库,更新缓存。B查询缓存未命中,查询数据库为10,准备写入缓存时,A线程来了,更新数据库为20,删除缓存一气呵成,然后B再更新缓存为之前的10,也有数据不一致的问题,但是写入缓存只有几毫秒的时间,这种情况下需要更新数据库和删除缓存,很难得。所以是弱一致性。如果删除数据库失败了怎么办?引入延迟双删操作,就是1.更新数据库,2.删除数据库3.定时任务,过几百毫秒后再次尝试删除数据库。目的是删除缓存中可能出现的旧数据。或者失败重试机制,或者监听binlog数据变更情况,异步删除。也就是引入多次删除的策略,强制刷新缓存。缓存击穿、缓存穿透、缓存雪崩分别对应什么场景?缓存击穿:hot key失效,由于采用先更新数据库,再删除缓存的操作,所以大量的操作会查询数据库,更新缓存,所以我们可以加锁,让第一个获得互斥锁的线程,查询数据库,更新缓存。其他的线程重试,看看缓存是否更新了,但是这样就会有大量的线程空转,浪费资源。所以可以采用逻辑删除+异步更新。给hot key设置逻辑过期时间,每次获取hot key都检查是否过期,如果过期,开启一个线程异步更新,这个线程和其他线程正常返回老的数据即可,但是这样也有数据不一致的情况,但是资源消耗很少。缓存穿透:查询的数据,压根在缓存和数据库中不存在,属于恶意访问。所以最简单的直接记录key和value,返回null值,但是这样会增加缓存压力。所以可以在参数层做校验,将所有可能的参数的hash到布隆过滤器,这样可以极大的防止无效的访问,但是也存在的误判率,比如你的布隆过滤器开的长度很小,参数又多,直接全为1了,布隆过滤器就失效了。所以在分布式架构中,对这种高QPS的请求做一定的限流,做好预警的工作。缓存雪崩:大量key同时失效或者redis服务宕机。减少key,采用更多的静态化页面。给key设置不同的预期过期时间。采用多级缓存机制,L2Cache机制(本地缓存之王Caffine+redis)。构建redis服务集群。redis为什么快内存高效的数据结构单线程IO多路复用https://www.cnblogs.com/coderacademy/p/18099027redis的数据结构和持久化策略接口幂等性https://www.cnblogs.com/coderacademy/p/18082540UUID,雪花算法,自定义唯一的标识符业务判断,更新论文的审核状态,某个时间是从未批改改为已经审核,update 强制让status=1兜底的话,就是定时查询,及时更新状态MQ如何解决消息堆积问题引入惰性队列,接收到消息后直接存入磁盘而非内存,消费者消费需要从磁盘加载到内存中支持百万级别的消息存储超时消费延迟队列ES什么是倒排索引正排索引就是根据文档查找词条,判断文档中是否有该词条,不适合模糊查询。倒排索引就是根据分词的结果(词条)来查询文档,拿到文档id后到正向索引中查找文档常用的分词器是IK分词器,支持扩展词典,Redis集群
点赞 32
评论 3
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-28 12:55
北京科技大学 C++
时间过得好快 马上秋招就要开始了
作为25届的小菜鸡给大家一些建议。一、一定要明确自己的求职方向先思考自己想做什么职业/行业和自己适合什么样的行业/职业;各位同学可以也观察自己专业以往的就业趋势,思考自己专业的就业方向,也可以多和同专业的学长学姐沟通交流;要自己有一个大致的求职方向,明白自己适合什么样的工作。怎样才能知道自己适合什么样的工作呢?其实最直白的方法还是!实习!不管你是要从事自身专业的工作还是想要跨专业求职,只有深入实践,对你的职业规划进行一个先行体验的大动作,你才能晓得你到底适不适合,你所学的专业知识和技能,是否能够运用在工作生活中。所以还没有实习经历的26届同学们,抓住毕业前的机会,多积累含金量较高的实习~不仅可...
点赞
评论
收藏
分享
07-26 11:56
门头沟学院 Java
计算机方向,你被公司挂掉的原因有哪些?
计算机方向,你被公司挂掉的原因有哪些? 大家好,我是程序员小白条,今天来给大家围绕公司挂人的原因来展开一篇文章,有的公司初筛分HR和部门,一般HR就是看学历和目标院校了,部门可能要看实习经历是否对口,技术是否符合预期。 正文 简历关被挂 1)学历/学校不符合目标公司筛选标准 2)大厂通常有目标院校列表,非目标院校容易被系统自动过滤 3)部分岗位(如算法)对硕士学历有硬性要求,新能源等汽车,现在很多要求硕士起步了,甚至是测试行业! 项目经历缺乏竞争力 1)全是课程作业/培训班项目 2)项目描述过于简单,没有体现技术深度 3)缺乏可量化的成果展示 其实项目写的不好,本质上很多人本来就是速成的,或者...
八股传道之路
点赞
评论
收藏
分享
06-09 23:07
已编辑
湖北工程学院新技术学院 运营
求捞一手
有没有哥哥姐姐捞一手啊,我一周内想去北京发展。°(°¯᷄◠¯᷅°)°。
我在牛客求捞
点赞
评论
收藏
分享
07-02 22:46
门头沟学院 Java
先发制人这一块
码农索隆:
hr:“管你投没投,先挂了再说”
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
07-30 14:54
干活最少的实习生因为长得漂亮转正了
这是一个吐槽,愤怒的吐槽,对社会不公平的吐槽!去年10月份的时候,我一路过关斩将,面了六轮,才拿到现在待的这个互联网大厂的暑期实习offer,到现在已经实习了半年多,结果今年3月底来了一个人,三面之后就直接进来了......(我为什么知道,是因为mt跟我说的)mt也觉得他简历挺水的,给我看了简历,双非只有一段小厂实习经验,我看不到任何的业务闪光点,但耐不过leader直接offer,等来了我才知道,原因是什么,原来是因为长得帅,身高180,三线爱豆脸,比较会穿后来他入职了,干活了,活被分的最少,难度也是最低的。但是他每天看着还挺忙,忙什么呢,忙着给领导提供情绪价值。比如每天早上给leader带...
一表renzha:
如果一个人认识不到颜值的重要性只能说他还没长大,从小到大的教育都告诉我们心灵美才是真的美,内在美大于外在美,但是现实会告诉你,外在美是绝对远远大于内在美的,好看的人就是会得到优待
工作中哪个瞬间让你想离职
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
4665
2
...
虾皮秋招一面
3175
3
...
QQ提前批一面凉经
2965
4
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
2600
5
...
百度提前批 三面
2317
6
...
7.30滴滴提前批一面凉经
2104
7
...
7.30百度提前批一面
1801
8
...
小鹏offer
1468
9
...
上班一周,工资还没拿,先欠公司两千
1457
10
...
百度7.30二面
1346
创作者周榜
更多
正在热议
更多
#
简历上的经历如何包装
#
27282次浏览
784人参与
#
秋招被确诊为……
#
162876次浏览
735人参与
#
中兴秋招
#
204766次浏览
2288人参与
#
工作中哪个瞬间让你想离职
#
62169次浏览
558人参与
#
你最希望上岸的公司是?
#
134816次浏览
702人参与
#
和同事相处最忌讳的是__
#
23043次浏览
232人参与
#
你最近一次加班是什么时候?
#
70943次浏览
350人参与
#
26届的你,投了哪些公司?
#
41139次浏览
465人参与
#
你遇到最难的面试题目是_
#
16111次浏览
196人参与
#
我对___祛魅了
#
45913次浏览
420人参与
#
研究所VS国企,该如何选
#
194735次浏览
1819人参与
#
地平线求职进展汇总
#
52596次浏览
369人参与
#
如果校招重来我最想改变的是
#
271674次浏览
2849人参与
#
你跟室友的关系怎么样?
#
6734次浏览
105人参与
#
你最讨厌面试问你什么?
#
27197次浏览
304人参与
#
如果可以选,你最想从事什么工作
#
565726次浏览
4699人参与
#
柠檬微趣工作体验
#
6625次浏览
40人参与
#
什么样的背景能拿SSP?
#
35179次浏览
211人参与
#
海康威视求职进展汇总
#
493976次浏览
3625人参与
#
秋招前后对offer的期望对比
#
302958次浏览
2229人参与
#
如何快速融入团队?
#
15851次浏览
194人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务