首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
02-25 17:41
复旦大学 Java
实习优化篇-手把手教你如何写实习简历
大家好,我是@程序员花海_,今天来看一份实习简历的描述。大家看完这份简历,感受是啥?我相信很多牛友应该会有个感觉就是:不知道具体做了什么。写实习简历的大忌就是写流水账,让面试官抓不到你的工作量。AVM相关产品产业内领先,这个和你做的工作有什么关系???负责C++代码的开发工作?做的什么工作?本来不就是代码开发么??BUG解决,具体怎么解决的,为什么判断它是BUG,还有什么兜底策略么??与客户对接,对外部BUG提出解决方案,方案具体是什么??写简历并不是阐述你做了什么,而是把你的工作和你在工作背后的思考写到简历上,给面试官埋下钩子,让他针对性的问你问题,把主动权掌握在自己手里。ok,今天这期先到...
实习生活中那些难忘的瞬间
点赞
评论
收藏
分享
02-23 08:09
蚌埠坦克学院 嵌入式软件开发
虹软科技 嵌入式开发软件 二面
1. 深入聊聊你的项目,从需求分析到系统设计的完整过程项目背景我做的是一个智能环境监测系统,用于工业现场的温湿度、气体浓度等参数的实时监测和数据上报。系统部署了50个监测节点,每个节点每分钟采集一次数据并上报到云平台。需求分析项目的核心需求:实时采集多种传感器数据通过4G网络上报到云平台支持远程配置和固件升级对功耗有要求,要支持电池供电,续航至少3个月对可靠性有要求,要保证数据不丢失,设备故障要能自动恢复硬件选型主控芯片: STM32F407有丰富的外设接口性能足够,功耗可接受通信模块: 4G模块支持TCP/IP和MQTT协议传感器: 数字接口传感器使用I2C或SPI通信精度和稳定性都比较好电...
嵌入式面试八股文全集
点赞
评论
收藏
分享
02-25 17:58
吉首大学张家界学院 Python
这种简历可以吗,大四
这种简历可以吗想进个小公司就可以了,只想有个稳定的工作有点结巴
最喜欢秋天的火龙果很...:
第一份工作一定要往大的去,工资低点没事。后面换工作会更好找,即使你去小公司,你也不可能不会换工作的。所以找大的去
点赞
评论
收藏
分享
02-25 20:12
门头沟学院 Java
好痛苦,来世不学计算机
楼主本来是混了一个实习,准备寒假沉淀下3月开投的,结果过年老家事情太多了,从2/10到今天2/25大概只学了一周,且大多数时间在算法上,简历八股完全没怎么准备,今年暑期还超级提前,简直想死了,想问下大佬们,直接备战秋招和春招可行吗
点赞
评论
收藏
分享
02-26 07:25
Windsor Institute of Commerce & Languages 算法工程师
网易春季招聘(含假期实习),全国,先到先得!!!
http://www.aitrade888.com/zhaopin/campus 网易 民企 互联网 春招 杭州 2024届,2025届,2026届 人工智能、经营/数据分析、产的、市场渠道、GPT]、教研、策略、市场营销、主讲、投放、运营、AI(公告内扫码显示的是社招,实际明确注明21届-25届12份前毕业的均可投递)
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
32分钟投了18家网申,效率如何?
1.5W
2
...
秋招以来的AI面经问题
8204
3
...
面试官视角聊聊:如何在AI浪潮中找到好工作?
7250
4
...
C++ MySql 常考面试题总结
2629
5
...
面试被问到“agent的记忆机制怎么设计”,该怎么回答?
2416
6
...
拒绝无效的努力
2217
7
...
润科通用Java实习
1980
8
...
没算力,能搞大模型吗?
1958
9
...
29届小登选前端还是后端
1864
10
...
二十多岁,谁不是一边混乱一边找答案
1776
创作者周榜
更多
正在热议
更多
#
xx岗简历求拷打
#
14731次浏览
140人参与
#
如何看待offer收割机的行为
#
1049359次浏览
6610人参与
#
开工第一帖
#
49692次浏览
902人参与
#
互联网回暖,腾讯要招5000人!
#
25407次浏览
598人参与
#
有转正机会的小厂实习值得去吗?
#
10944次浏览
114人参与
#
产运销实习日记
#
88285次浏览
688人参与
#
这些公司卡简历很严格
#
88817次浏览
395人参与
#
硬件人求职现状
#
506285次浏览
4803人参与
#
掌握什么AI技能,会为你的求职大大加分
#
11547次浏览
460人参与
#
聊聊这家公司值得去吗
#
886103次浏览
4720人参与
#
携程求职进展汇总
#
892940次浏览
5933人参与
#
求职季如何保持心态不崩
#
214802次浏览
1473人参与
#
面试反问你会问什么
#
169878次浏览
1744人参与
#
机械人还在等华为开奖吗?
#
316364次浏览
1586人参与
#
你最讨厌面试被问什么
#
11734次浏览
136人参与
#
机械人的秋招小目标
#
29137次浏览
244人参与
#
如何看待应届生身份?
#
229154次浏览
2297人参与
#
远程面试的尴尬瞬间
#
329364次浏览
1919人参与
#
金三银四,你有感觉到吗
#
697444次浏览
6099人参与
#
制造业的秋招小结
#
145149次浏览
2095人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务