面试
文章平均质量分 83
熬夜加班写代码
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
把Redis当作队列来用,真的合适吗?
好了,总结一下。这篇文章我们从「Redis 能否用作队列」这个角度出发,介绍了 List、Pub/Sub、Stream 在做队列的使用方式,以及它们各自的优劣。之后又把 Redis 和专业的消息队列中间件做对比,发现 Redis 的不足之处。最后,我们得出 Redis 做队列的合适场景。这里我也列了一个表格,总结了它们各自的优缺点。原创 2025-11-11 21:53:28 · 546 阅读 · 0 评论 -
MySQL面试整理:MySQL日志15连问(带解析)
WAL,中文全称是Write-Ahead Logging,它的关键点就是日志先写内存,再写磁盘。MySQL执行更新操作后,在真正把数据写入到磁盘前,先记录日志。好处是不用每一次操作都实时把数据写盘,就算crash后也可以通过redo log恢复,所以能够实现快速响应SQL语句。其实所谓的两阶段就是把一个事务分成两个阶段来提交。两阶段提交两阶段提交主要有三步曲:redo log在写入后,进入prepare状态执行器写入bin log进入commit状态,事务可以提交。为什么需要两阶段提交呢?原创 2025-11-11 21:43:30 · 838 阅读 · 0 评论 -
面试官:CPU狂飙900%,该怎么处理?
不推荐在这种CPU使用过高的情况下进行慢日志的开启。因为大量的请求,如果真是慢日志问题会发生日志磁盘写入,性能贼低。直接通过MySQL show processlist命令查看,基本能清晰的定位出部分查询问题严重的SQL语句,在针对该SQL语句进行分析。一般可能就是索引、锁、查询大量字段、大表等问题导致。再则一定要使用缓存系统,降低对MySQL的查询频次。对于内存调优,也是一种解决方案。原创 2025-11-03 21:56:45 · 541 阅读 · 0 评论 -
RocketMQ为什么这么快?我从源码中扒出了10大原因!
在传统IO中,如果想将用户缓存区的数据放到内核缓冲区,需要经过CPU拷贝而基于零拷贝技术可以减少CPU拷贝次数,常见的有两种:mmap()sendfile()mmap()是将用户缓冲区和内核缓冲区共享,操作用户缓冲区就好像直接操作内核缓冲区,读写数据时不需要CPU拷贝Java中可以使用MappedByteBuffer这个API来达到操作内核缓冲区的效果sendfile()主要是用于文件传输,可以通过sendfile()将一个文件内容传输到另一个文件中或者是网络中。原创 2025-11-03 21:55:20 · 574 阅读 · 0 评论 -
Synchronized原理解析!
synchronized,是解决并发情况下数据同步访问问题的一把利刃。那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟。同步代码块是通过monitorenter和monitorexit来实现,当线程执行到monitorenter的时候要先获得monitor锁,才能执行后面的方法。当线程执行到monitorexit的时候则要释放锁。原创 2025-11-03 21:53:51 · 265 阅读 · 0 评论 -
MySQL进程CPU飙升到900%,怎么处理?
陈某提示:大家介绍场景的时候,就说自己主要涉及了两个场景, Java进程飙升900%、MySQL进程飙升900%两种场景,其实,这两个场景就足够讲半天了, 其他的,使用规避技巧规避一下就行。转换后的结果分别为7665,由于导出的线程快照中线程的nid是16进制的,而16进制以0x开头,所以对应的16进制的线程号nid为0x7665。但是,一旦高并发场景,要么走到了死循环,要么就是在做大量的 GC, 容易出现这种 CPU 飙升的情况,CPU飙升900%,是完全有可能的。目测数据量不大,也就几百万条而已。原创 2025-11-02 21:25:09 · 665 阅读 · 0 评论 -
字节一面:MySQL主从架构数据同步方式有哪些?
其实,mysql主从相关的八股文考点,还有很多,比如数据库主从延迟的原因与解决方案有哪些?MySQL是怎么保证主从一致的等等,你们知道怎么回答嘛?原创 2025-11-02 21:22:53 · 291 阅读 · 0 评论 -
字节Java一面:kafka为什么这么快?
有朋友去字节面试。?其实这不就送分题嘛,哈哈~~ 我梳理了一下答案:批量处理思想磁盘顺序读写零拷贝技术页缓存加速消息读写分区与并行处理数据压缩。原创 2025-11-02 21:21:49 · 787 阅读 · 0 评论 -
elasticSearch 是什么?工作原理是怎么样的?
elastic Search, 也就是 es,是一个开源的搜索引擎。它介于应用和数据之间,只要将数据写入 es,应用就可以通过一些关键词搜索到数据。效果就像某度搜索一样。那它是怎么做到的呢?我们从倒排索引聊起。回到文章开头的例子。依次遍历文本匹配是否含有"xiaobai",确实低效。那有更高效的解法吗?有,我们可以对文本进行切分,比如"I like xiaobai"切分为"I"、"like"、"xiaobai"三部分,这个操作叫分词,分词后的每部分,我们称为一个词项,也就是term。原创 2025-11-02 21:18:57 · 277 阅读 · 0 评论 -
Java面试题:一次B+树索引树查找过程,是怎样的?
如果插入关键字后,叶子节点当前含有的关键字数目等于阶数m,则插,该节点开始「分裂」为两个新的节点,一个节点包含⌊m/2⌋ 个关键字,另外一个关键字包含⌈m/2⌉个关键值。最后插入28,发现当前节点关键字也是不小于阶数4了,于是分裂,于是分裂, 第 ⌈4/2⌉=2个,也就是36上移到父节点,因父子节点只有2个关键值,还是小于4的,所以不用继续分裂,插入完成。将主键索引树的磁盘块3加载内存,在内存遍历,找到id=400的记录,拿到R4这一行的数据,好的,大功告成。分裂后,需要将⌈m/2⌉的关键字上移到父结点。原创 2025-10-31 19:22:03 · 388 阅读 · 0 评论 -
面试官:如何优雅的实现在线人数统计功能?
这种方案的核心逻辑就是,创建一个在线用户身份集合为key,利用用户身份为member,利用过期时间为score,然后对这个集合进行增删改查,实现起来还是比较巧妙和简单的,大家有兴趣可以试试看。如果网站是公开的,是那种不需要登录就可以浏览的,那么这种网站一般就需要自定一个规则来识别用户,也有很多方式实现如IP、deviceId、浏览器指纹,推荐使用浏览器指纹的方式实现。我这里的逻辑是:每次添加一个在线用户时,利用当前时间加上过期时间计算出一个分数,可以有效保证当前用户只会存在一个最新的登录态。原创 2025-10-31 17:26:55 · 292 阅读 · 0 评论 -
京东一面:InnoDB如何用MVCC和Next-Key Lock实现RR隔离?看完顿悟!
在深入隔离级别之前,我们必须先统一共识:什么是事务?为什么需要它?事务是数据库操作的一个最小逻辑工作单元,其内的所有操作要么全部成功,要么全部失败。一个经典的例子就是银行转账:从 A 账户扣款和向 B 账户加款,这两个操作必须作为一个整体,不能分割。原子性 (Atomicity): 事务是一个不可分割的整体,就像原子一样。它要么全部完成,要么全部不完成,不存在中间状态。InnoDB 通过Undo Log来实现原子性。如果事务失败,Undo Log 会将已经修改的数据恢复到事务开始前的状态。原创 2025-10-31 17:22:47 · 679 阅读 · 0 评论 -
RocketMQ为什么这么快?我从源码中扒出了10大原因!
在传统IO中,如果想将用户缓存区的数据放到内核缓冲区,需要经过CPU拷贝而基于零拷贝技术可以减少CPU拷贝次数,常见的有两种:mmap()sendfile()mmap()是将用户缓冲区和内核缓冲区共享,操作用户缓冲区就好像直接操作内核缓冲区,读写数据时不需要CPU拷贝Java中可以使用MappedByteBuffer这个API来达到操作内核缓冲区的效果sendfile()主要是用于文件传输,可以通过sendfile()将一个文件内容传输到另一个文件中或者是网络中。原创 2025-10-28 21:22:56 · 627 阅读 · 0 评论 -
高并发场景下,到底先更新缓存还是先更新数据库?
学了这么多,相信大家对缓存更新的策略都已经有了清晰的认识。最后稍稍总结一下。缓存更新的策略主要分为三种:Cache aside 通常会先更新数据库,然后再删除缓存,为了兜底通常还会将数据设置缓存时间。Read/Write through 一般是由一个 Cache Provider 对外提供读写操作,应用程序不用感知操作的是缓存还是数据库。Write behind简单理解就是延迟写入,Cache Provider 每隔一段时间会批量输入数据库,优点是应用程序写入速度非常快。原创 2025-10-23 21:29:16 · 628 阅读 · 0 评论 -
2025版最新Java面试整理+答案(Redis篇)
PS:这是多年黄历的老八股了,一定要理解清楚。原创 2025-10-23 21:28:15 · 1028 阅读 · 0 评论 -
2025版最新Java面试整理+答案(微服务篇)
微服务(Microservices)是一种软件架构风格,将一个大型应用程序划分为一组小型、自治且松耦合的服务。每个微服务负责执行特定的业务功能,并通过轻量级通信机制(如HTTP)相互协作。每个微服务可以独立开发、部署和扩展,使得应用程序更加灵活、可伸缩和可维护。在微服务的架构演进中,一般可能会存在这样的演进方向:单体式-->服务化-->微服务。单体服务(Monolithic Service)是一种传统的软件架构方式,将整个应用程序作为一个单一的、紧耦合的单元进行开发和部署。原创 2025-10-23 21:25:04 · 727 阅读 · 0 评论 -
深入浅出MyBatis【8】MyBatis动态Sql之foreach标签的用法
上面的例子中只有一个集合参数,我们把collection属性的值设置为了list,其实也可以写成collection,为什么呢?假设有这样1个需求:根据传入的用户id集合查询出所有符合条件的用户,此时我们需要使用到Sql中的IN,如 id in (1,1001)。如果参数是一个数组参数,collection可以设置为默认值array,看了上面的源码,应该不难理解。通过日志会发现,foreach元素中的内容最终生成的Sql语句为(1,1001)。假设有这样1个需求:根据传入的Map参数更新用户信息。原创 2025-06-19 21:43:57 · 1071 阅读 · 0 评论 -
深入浅出MyBatis【7】MyBatis动态Sql之choose,where,set标签的用法
本篇博客主要讲解如何使用choose,where,set标签生成动态的Sql。原创 2025-06-19 21:42:29 · 1070 阅读 · 0 评论 -
深入浅出MyBatis【6】MyBatis动态Sql之if标签的用法
假设有这样1个需求:根据用户的输入条件来查询用户列表,如果输入了用户名,就根据用户名模糊查询,如果输入了邮箱,就根据邮箱精确查询,如果同时输入了用户名和邮箱,就用这两个条件去匹配用户。假设有这样1个需求:往数据库表中插入数据的时候,如果某一列的参数值不为空,就使用传入的值,如果传入的参数值为空,就使用数据库中的默认值(通常是空),而不使用传入的空值。4)当有多个判断条件时,使用and或or进行连接,嵌套的判断可以使用小括号分组,and相当于Java中的与(&&),or相关于Java中的或(||)。原创 2025-06-19 21:39:43 · 1237 阅读 · 0 评论 -
深入浅出MyBatis【4】MyBatis XML方式的基本用法之增删改
在1.1的例子中,新增完数据,我们并没有拿到数据库中自增的id值,但有些场景中,我们需要先拿到数据库中自增的值,然后再处理其余的逻辑,那么如何拿到数据库中的自增的id值呢?1)为了防止类型错误,对于一些特殊的数据类型,建议指定具体的jdbcType值。通过上面的测试,说明数据库的datetime类型可以存储DATE(时间部分默认为00:00:00)和TIMESTAMP这两种类型的时间,不能存储TIME类型的时间。报错的原因是,数据库中的字段类型为datetime,但是这里只有time部分的值。原创 2025-06-18 21:02:59 · 955 阅读 · 0 评论 -
深入浅出MyBatis【3】MyBatis XML方式的基本用法之多表查询
TRACE [main] - <== Row: 1, 管理员, 1, 1, 2019-06-27 18:21:12.0, admin, admin@mybatis.tk。但有些场景下,比如只有2个参数,没有必要为这2个参数再新建一个对象,比如我们现在需要根据用户的id和角色的状态来获取用户的所有角色,那么该如何使用呢?书中推荐的是方式3,方式4是我个人认为更好的方式,因为实体类一般由工具自动生成,增加了字段后,后续容易忘记导致被覆盖掉。然后,打开对应的SysUserMapper.xml文件,添加如下代码。原创 2025-06-18 21:01:02 · 673 阅读 · 0 评论 -
深入浅出MyBatis【2】MyBatis XML方式的基本用法之Select
找到src/main/java目录下的包com.zwwhnly.mybatisaction.mapper,在该包下创建XML文件对应的接口类,分别为SysUserMapper.java,SysRoleMapper.java,SysPrivilegeMapper.java,SysUserRoleMapper.java,SysRolePrivilegeMapper.java。要返回结果的类型,使用此种方式需要设置查询列的别名,别名要和resultType指定对象的属性名保持一致,原创 2025-06-18 20:59:53 · 1032 阅读 · 0 评论 -
深入浅出MyBatis【1】MyBatis入门
2001年,Clinton Begin发起了一个名为iBATIS的开源项目,最初侧重于密码软件的研发,后来发展成为一款基于Java的持久层框架。 2004年,Clinton将iBATIS的名字和源码捐赠给了Apache软件基金会。 2010年,核心开发团队决定离开Apache软件基金会,并且将iBATIS改名为MyBatis。 MyBatis是一款优秀的支持自定义SQL查询、存储过程和高级映射的持久层框架,消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。原创 2025-06-18 20:55:22 · 597 阅读 · 0 评论 -
你了解ConcurrentHashMap吗?ConcurrentHashMap九连问!
多线程环境下,使用Hashmap进行put操作会造成数据覆盖,应该使用支持多线程的 ConcurrentHashMap。原创 2025-06-17 20:22:28 · 842 阅读 · 0 评论 -
面试官问线程安全的List,看完再也不怕了!
下次面试官问你线程安全的 List,你可以从 Vector > SynchronizedList > CopyOnWriteArrayList 这样的顺序依次说上来,这样才有带入感,也能体现你对知识点的掌握程度。看完有没有收获呢?下次面试应该能秒杀面试官了吧!原创 2025-06-17 19:52:55 · 249 阅读 · 0 评论 -
Java面试:SpringBoot 工程启动以后,希望将数据库中已有的固定内容提前加载到 Redis 缓存中,应该如何处理?
这两个是Springboot中新增的扩展点,之所以将这两个扩展点放在一起,是因为它两个功能特性高度相似,不同的只是名字、扩展方法形参数类型、执行先后的一些小的不同。这两个接口触发时机为整个项目启动完毕后,自动执行。如果有多个,可以利用@Order来进行排序。CommandLineRunner和ApplicationRunner都有一个扩展方法run(),但是run()形参数类型不同;原创 2025-05-28 17:09:21 · 684 阅读 · 0 评论 -
为什么重写equals一定也要重写hashCode方法?
"==" 是运算符如果比较的对象是基本数据类型,则比较的是其存储的值是否相等;如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等(是否是同一个对象)。int b = 10;//true//显然不是同一个对象,false。原创 2025-05-27 21:25:58 · 728 阅读 · 0 评论 -
Java面试官:讲讲深拷贝和浅拷贝?
在clone()后,克隆后的对象开始也是指向的原来引用地址值(刚克隆完检查a1.category == a2.category 为true),但是一旦String的值发生改变(String作为不可更改的类——immutable class,在新赋值的时候,会创建了一个新的对象)就改变了克隆后对象指向的地址,让它指向了一个新的String地址,不会影响原对象的指向和值,原来的String对象还是指向的它自己的的地址。当类中含有引用类型的属性时,新对象和旧对象的引⽤类型属性指向的是同⼀个对象,即为浅拷贝。原创 2025-05-27 21:11:05 · 794 阅读 · 0 评论 -
面试官:TCC解决方案是什么?如何解决TCC幂等问题?
面试官:TCC解决方案是什么?如何解决TCC幂等问题?原创 2022-10-29 15:26:53 · 1021 阅读 · 0 评论 -
面试官:CAP定理是什么?
CAP定理,又叫布鲁尔定理。指的是:在一个分布式系统中,最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。原创 2022-10-29 15:12:25 · 258 阅读 · 0 评论 -
BATJ和字节跳动这些大厂的内部面试解析,面试重难点超出你的想象
BATJ和字节跳动这些大厂的内部面试解析,面试重难点超出你的想象!原创 2022-07-04 16:45:40 · 191 阅读 · 0 评论 -
分布式锁三连问:分布锁有哪些解决方案?Redis如何做分布式锁?MySQL如何做分布式锁?
分布式锁三连问:分布锁有哪些解决方案?Redis如何做分布式锁?MySQL如何做分布式锁?原创 2022-07-04 15:47:24 · 236 阅读 · 0 评论 -
面试官:2PC提交协议是什么?
面试官:2PC提交协议是什么?原创 2022-06-29 21:42:41 · 200 阅读 · 0 评论 -
面试官:3PC提交协议是什么?
面试官:3PC提交协议是什么?原创 2022-06-29 21:39:29 · 181 阅读 · 0 评论 -
面试官:幂等有哪些技术解决方案?
面试官:幂等有哪些技术解决方案?原创 2022-06-29 21:37:54 · 282 阅读 · 0 评论 -
面试官:双写一致性问题如何解决?
面试官:双写一致性问题如何解决?原创 2022-06-29 21:35:09 · 1635 阅读 · 0 评论 -
面试官:分布式ID的生成方案有哪些?雪花算法生成的ID由哪些部分组成?
面试官:分布式ID的生成方案有哪些?雪花算法生成的ID由哪些部分组成?原创 2022-06-29 21:31:07 · 404 阅读 · 0 评论 -
Kafka面试三连:kafka架构设计?kafka是pull还是push及优劣分析?kafka的rebalance机制是什么?
Kafka面试三连:kafka架构设计?kafka是pull还是push及优劣分析?kafka的rebalance机制是什么?原创 2022-06-21 19:57:34 · 469 阅读 · 0 评论 -
Redis面试题:Redis缓存如何回收?击穿、穿透、雪崩、预热解决方案?
Redis面试题:Redis缓存如何回收?击穿、穿透、雪崩、预热解决方案?原创 2022-06-21 19:36:06 · 308 阅读 · 0 评论 -
面试官:什么是Java多线程的 等待(wait)/通知(notify)模式?
最近在看一些JUC下的源码,更加意识到想要学好Java多线程,基础是关键,比如想要学好ReentranLock源码,就得掌握好AQS源码,而AQS源码中又有很多Java多线程经典的一些应用;再比如看了线程池的核心源码实现,又学到了很多核心实现,其实这些都可以提出来慢慢消化并变成自己的知识点,今天这个Java等待/通知模式其实是Thread.join()实现的关键,还有线程池工作线程中线程跟线程之间的通信的核心所在,故在此为了加深理解,做此记录!...原创 2022-06-16 21:25:13 · 611 阅读 · 0 评论
分享