- 博客(85)
- 收藏
- 关注
原创 百度(商业)测开面经
总体来说不是特别难,但是问的很细致,而且重在广度。如果你的项目用某个技术实现了对应功能,请好好思考使用当前技术的原因、传统技术的问题、当前技术带来的优化、以及当前技术带来的新的问题和应对策略。定时任务轮询、轮询带来的问题、引入 mq 的延时消息和死信交换机、带来的新的问题、怎么解决新的问题、效果。功能测试:测试传入链表,功能是否成功执行。边界值测试,如果传入空链表,是否会提示请输入有效数据。功能测试、性能测试、兼容性测试、安全性测试,其他可以自己想到啥,说一下。简单介绍了下 agent 开发。
2025-11-22 13:41:28
386
原创 又是秒杀又是高并发,你的接口真的扛得住吗?
我们平时能看到很多简历,写就是秒杀,问就是高并发。结果面试官一问 Qps 多少、响应时间多少、能抗住多大并发量,却支支吾吾说不出来。没有进行测试的接口又怎么能称为高并发呢?
2025-11-18 18:59:20
1062
原创 一问线程池就发懵?一文说清楚常见考点
线程池常见面试问题总结: 核心参数:包括核心线程数、最大线程数、空闲存活时间、工作队列、拒绝策略等7个关键参数。 工作原理:任务优先由核心线程执行,队列满时创建非核心线程,达到最大线程数后触发拒绝策略。线程池不区分核心与非核心线程,空闲超时线程会被随机销毁。 拒绝策略:包括AbortPolicy(抛异常)、CallersRunsPolicy(提交者执行)、DiscardOldestPolicy(丢弃最旧任务)、DiscardPolicy(静默丢弃)四种。 队列类型:无界队列(如LinkedBlockingQ
2025-11-13 22:58:09
762
原创 Java基础与集合小压八股
反之,如果 hashcode()相等,不要求 equals()相等。在这种情况下,如果只修改 equals(),可能导致两个 equals()的对象的 hashCode() (散列值)不同,导致集合中包含两个元素,而不是一个。性能不同,ArrayList 中间插入的时间复杂度为 O(n),因为需要移动后续元素。LinkedList 插入的时间复杂度为 O(n),在首尾降为 O(1)。当桶中链表长度超过 8 并且数组长度达到 64 时,会触发树化,将链表结构转为红黑树,以提升查找效率。
2025-10-25 22:14:22
580
原创 【八股笔记】SSM
Spring框架总结: 单例Bean默认非线程安全,需处理可变成员变量 AOP用于日志、缓存等场景,通过环绕通知实现 事务基于AOP拦截实现,注意失效场景(异常捕获、检查异常、非public方法) Bean生命周期包含实例化、属性注入、初始化等阶段 循环依赖通过三级缓存解决,代理对象需三级缓存 SpringMVC流程:DispatcherServlet→HandlerMapping→HandlerAdapter→Controller SpringBoot自动配置原理:@EnableAutoConfigura
2025-10-15 22:18:18
766
5
原创 【力扣 Hot100】 刷题日记
这道题目最重要的就是边读字符串边处理,这样才能处理到内部括号,如果全部压栈,再取将无法解决多括号嵌套。这个题目实际上就是找出最大子连续递增序列的和,当然这个子序列也可以是本身。
2025-10-10 17:31:54
288
原创 今日八股——JVM篇
JVM 是 Java 程序的运行环境,具有"一次编写,到处运行"和自动内存管理的特点。JVM 主要由程序计数器、堆、虚拟机栈、方法区和直接内存组成。程序计数器是线程私有的,记录字节码行号;堆是共享区域,存储对象实例;虚拟机栈存储方法调用信息;方法区保存类信息和常量池。类加载采用双亲委派机制,保证类加载的安全性和唯一性。JVM 内存管理包括垃圾回收机制,主要针对堆内存进行回收。
2025-10-08 21:30:13
1300
2
原创 今日八股——JUC篇(二)
本文主要介绍了Java多线程编程中的关键知识点。首先讲解了volatile的作用,包括保证线程间可见性和禁止指令重排序,并提供了相关解决方案。其次详细分析了AQS(AbstractQueuedSynchronizer)框架,包括其工作机制、公平锁与非公平锁实现以及常见实现类。在线程池部分,重点介绍了核心参数、执行原理、阻塞队列类型、线程池种类及使用场景。最后还提及了ThreadLocal的基本使用。文章通过图文结合的方式,系统性地讲解了这些多线程核心概念及其应用场景,为Java并发编程提供了实用的参考指南。
2025-10-07 19:56:50
609
原创 今日八股——JUC篇
线程基础摘要: 线程是进程内的执行单元,共享进程内存空间,比进程更轻量。并发是单核CPU通过时间片切换模拟多任务,并行是多核CPU真正同时执行多任务。创建线程可通过继承Thread类、实现Runnable/Callable接口或使用线程池。Runnable无返回值,Callable可返回结果和抛异常。start()启动新线程,run()直接调用则在当前线程执行。线程状态包括新建、可运行、阻塞、等待、超时等待和终止。wait()释放锁,sleep()不释放锁。notify()随机唤醒一个线程,notifyAl
2025-10-05 20:22:02
1472
原创 AOP还不会用?一个案例学会
本文介绍了基于AOP实现系统操作日志记录的方法,主要包含以下内容:1) 创建系统操作日志表结构;2) 自定义OperationType枚举和OperationLog注解;3) 定义日志实体类SysLog;4) 实现AOP切面拦截,通过环绕通知记录方法执行参数、耗时和状态;5) 使用Spring内置线程池实现异步日志写入;6) 在业务方法上添加注解实现日志记录。该方案利用Spring AOP和@Async注解,实现了对业务方法执行的自动化日志记录,同时通过异步处理避免影响主流程性能,生成的日志包含操作类型、参
2025-10-02 23:47:22
1135
原创 关于Java的几个小问题
Java 语言的特点有:①面向对象,主要是封装,继承,多态②平台无关性,“一次编写,到处运行”,因此采用 Java 语言编写的程序具有很好的可移植性。③支持多线程。C++ 语言没有内置的多线程机制,因此必须调用操作系统的 API来完成多线程程序设计,而Java却提供了封装好多线程支持;④支持 JIT 编译,也就是即时编译器,它可以在程序运行时将字节码转换为热点机器码来提高程序的运行速度。JVM、 JDK 和 JRE 有什么区别?JVM。
2025-09-30 22:44:09
739
原创 【从零开始学习RabbitMQ】
延迟消息:生产者发送消息时指定一个时间,消费者不会立刻收到消息,而是在指定时间之后才收到消息。延迟任务:设置在一定时间之后才执行的任务。
2025-09-30 22:38:22
865
原创 关于AOF的重写机制,你真的了解吗?
当父进程或者子进程向内存发起写操作时,CPU 会发生写保护中断,这个写保护中断是由于违反权限操作引起的,然后操作系统会在【写保护中断处理函数】复制物理内存并重新设置内存的映射关系,将父子进程的内存读写权限设置为可读写,最后对内存进行写操作,这个过程叫做写时复制(Copy On Write)。意义呢?其实这里要解释的话就得说一下 AOF 重写的整个过程。在子进程重写 AOF 文件时,会扫描整个数据库,将存在的键值对按照指令格式写入到新的 AOF 文件中,这样 Redis 宕机恢复时只需要执行对应的命令。
2025-09-29 21:53:25
773
原创 【从零开始学习RabbitMQ】交换机类型+如何保证消息的可靠性
其次,可以开启生产者消息确认机制,开启之后,发送消息到达 MQ 时会给 ACK 回执,表示消息成功被接收。当消费者出现异常后,消息会不断requeue(重新入队)到队列,再重新发送给消费者,然后再次异常,再次requeue,无限循环,导致mq的消息处理飙升,带来不必要的压力。但是,以上手段还会增加系统的负担和资源开销,在大多数场景下还是尽量不要开启确认机制,除非对于消息的可靠性有较高的要求。通过配置我们可以开启连接失败的重连机制。会出现 pageout,也就是消息积压,而处理积压消息时,MQ 是阻塞的。
2025-09-29 21:35:38
697
原创 【力扣 Hot100】刷题日记
BFS 基本题型,配合队列解决,要注意内层 for 循环要用倒序,否则如果当前节点如果有左右子节点,就会导致 queue.size()变大,那么 for 循环停止条件在变大,就会导致循环次数错误。本意是为了遍历这一层的节点数目。
2025-09-28 22:02:02
571
原创 【从零开始学习RabbitMQ】
这个课程是基于黑马商城的业务场景讲的,不用担心要不要补上黑马商城,技术是一定的,我们本来就是学习 MQ 的使用。
2025-09-28 18:53:17
1037
原创 【力扣 Hot100】 刷题日记
gap > 1 时,需要考虑的就多了,不仅仅是子串前后得相等,而且再往里一层前后也得相等,也就是说如果里面那层前后相等,得出 dp[i][j] = true,判断条件为 dp[i+1][j-1]=true。按照 gap 的实际意义,二维 dp 所有对角线序列全部为 true,对角线以上序列全部为 false(因为 i>j),子串的起始下标比结束下标还大,与实际意义不符,所以只需要看对角线以下序列。当 gap 为 1 时,表示子串长度为 2,这是只要前后相同,那么就是回文子串。
2025-09-27 17:54:31
303
原创 【从零开始学习Redis】Feed_GEO_BitMap_HyperLogLog
黑马课程的代码其实是有 bug 的,不知道大家这个 Stream 消息队列实现代码测试,关闭 Spring Boot 项目时有没有报以下错误之后一番摸索,意识到当前报错是只在关闭 SpringBoot 项目时才发生,最后找到了问题所在:查看代码发现消费 Stream 阻塞队列的线程是自己用创建的。线程阻塞读取乍一看好像没问题,其实问题就出在, 自己创建的线程是独立线程,是不受 Spring 容器管的。所以在关闭 SpringBoot 项目时, Lettuce 内部 Netty 线程池已经关闭。
2025-09-27 11:10:59
1945
原创 【力扣 Hot100】 刷题日记
这里要注意的是,只要有一个链表的 list 指向 null,就可以停止,直接将另一个链表接到当前新链表后面即可。这个题目的思路很简单,新建一个新链表用于储存答案,每次都比较两个链表的当前 val 值,谁更小就接到新链表之后,这样得到的就是合并后的升序链表。如果遇到的第一个节点不记录,那么就永远找不到了,head 需要指定一个入口,cur 再拼接。递归的第一个要素是 基准情况,也就是不用再递归、可以直接返回结果的情况。● 含义:如果某个链表已经空了,剩下的链表直接接上即可。● 最终一定会到 list1。
2025-09-26 22:44:11
488
原创 【力扣 Hot100】 刷题日记
已知当前元素小于 pivot,而且 lt 部分的是小于 pivot 区域的元素,所以不需要检查,本身两元素都是小于 pivot 的元素。问题 1:递归处理其他部分时,边界错误。但是这种方法效率不高,因为频繁的创建 ArrayList、不断地 addAll 合并数组、递归深度对大数组较深。那么到底是哪出了问题,我犯了什么样的错误?这个题目其实就是手撕排序,这里选择的是快速排序,选择它的原因是面试常考!问题 2:三路划分指针使用错误。而 gt 部分是未处理元素,但是交换过来的。:小于 pivot 区域右边界。
2025-09-25 23:09:31
703
原创 CSP认证练习题目推荐(4)
这道题目不算难,但是不注意还是会出现很多错误,比如结构体的书写。以及自定义结构体排序。还有这里做的优化,使用前缀和记录打水的等待时间,但是这里很容易出错的点在于等待时间是应该是记录的前一个人的前缀和。因为它不需要等待自己打水的等待时间。双指针,高精度,离散化。
2025-09-15 22:45:00
446
原创 字节一面 面经(补充版)
RabbitMQ 是一个基于 AMQP(高级消息队列协议)实现的开源消息中间件,它的核心功能是消息的可靠投递和异步解耦。它支持生产者(Producer)发送消息、消息存储与路由、消费者(Consumer)订阅与消费。提供可靠性(持久化、确认机制)灵活的路由策略(Exchange + Binding)和消息堆积削峰能力。(结合项目中的使用引导面试官)可靠性: RabbitMQ 使用一些机制来保证可靠性, 如持久化、传输确认及发布确认等。灵活的路由: 在消息进入队列之前,通过交换器来路由消息。
2025-09-11 22:31:42
1996
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅