- 博客(121)
- 收藏
- 关注
原创 分布式常见面试题整理
对比Kafka(高吞吐但延迟高)、RabbitMQ(低延迟但吞吐低),RocketMQ平衡吞吐、延迟、事务消息、中文生态。容错与成本平衡:n节点集群容忍(n-1)/2个故障。吞吐量(Kafka/RocketMQ)、延迟(RabbitMQ)、可靠性、功能(事务/延迟消息)、生态和运维成本。支持临时节点和Watcher机制,服务注册(创建节点)、下线(节点自动删除)、发现(监听节点变化)实时通知。对CAP中一致性和可用性的权衡,强调基本可用(BA)、软状态(S)和最终一致性(E),适用于高可用场景。
2025-09-05 14:06:11
989
原创 Java场景题面试合集
优势:Redis 单线程原子操作保证并发安全,性能高(支持每秒 10 万 + 请求),适合高并发场景。优势:新增优惠类型时,只需新增策略类并配置规则,符合 “开闭原则”,灵活支持业务迭代。:若业务允许短暂不一致(如 1 分钟内),可通过 RocketMQ 等中间件实现。,支持新增优惠类型时无需修改核心代码,核心是 “策略模式 + 配置化”。保证一致性,核心是 “要么全成,要么全败”。核心是 “定时触发库存释放”,需兼顾实时性与性能,推荐。,在发放前拦截重复请求,避免同一用户重复领取。
2025-09-04 22:40:04
1021
原创 场景题:如果一个大型项目,某一个时间所有的CPU的已经被占用了,导致服务不可用,我们开发人员应该如何使服务器尽快恢复正常
面对这种情况,我的首要原则是快速止损,恢复服务。会立即采取扩容或分批重启的策略,同时并行进行服务降级和限流以保障核心业务。在恢复过程中,我会第一时间抓取现场信息(如topjstack),定位消耗CPU的元凶,是死循环、GC问题还是外部依赖导致。服务恢复后,我会立即组织复盘,从根本上解决问题,并通过完善监控告警压测和熔断降级机制,防止未来再次发生同类事故。这个回答展现了你作为开发人员不仅懂代码,更具备全局的系统观念、应急处理能力和工程化方法论,这正是高级工程师和架构师所需要的素质。
2025-09-03 21:17:50
1210
原创 BFS解救刺客逃脱路径问题
棋盘的每个格子可能是空的('.'),可能有障碍物('X'),或者可能有一个角色。给定 B = ["X.....", "......", "....A.", "......"],应返回 true,因为第二排的守卫阻挡了另一个守卫看向右下角格子的视线。给定 B = ["X.....", "......", "....A.", "...v.."],应返回 false,因为所有可用路径都会被守卫的视线覆盖。对于每个守卫,根据其朝向('^','v','<','>')标记其视线范围内的所有格子。
2025-08-07 15:06:36
267
原创 Java Stream API 详解(Java 8+)
/ 结果:{'a': ["apple", "avocado"], 'b': ["banana"], 'o': ["orange"]}// 转为 List。// 结果:["APPLE", "BANANA", "AVOCADO", "ORANGE"]// 结果:["apple", "avocado", "banana", "orange"]// 结果:["apple", "banana", "orange", "avocado"]// 结果:["AVOCADO", "BANANA", "ORANGE"]
2025-08-06 22:29:50
1127
原创 Java高频方法总结
移除元素:list.remove(index) 或 list.remove(object), set.remove(object), map.remove(key)过滤:list.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList())聚合操作:list.stream().count(), list.stream().mapToInt(Integer::parseInt).sum()// 得到 ["a", "b", "c"]
2025-08-06 21:34:10
1158
原创 分隔串处理方法
trim()(包括空格、制表符\t、换行符\n等)。。javajava// 输出: "Hello World"(仅去首尾空格):仅处理字符串两端。:只能移除 Unicode 值 ≤ 32 的空白字符。split(),返回字符串数组。常用于按分隔符(如空格、逗号)拆分字符串。javajava// 输出: ["A", "B", "C"]java// 按一个或多个空格分割: ["A", "B", "C"]java// 只分割一次: ["A", "B-C-D"]trim()
2025-08-06 21:27:27
656
原创 多线程:并行计算模拟
/ 记录每个Worker的迭代次数。模拟6个并行 Worker 异步执行梯度下降(Gradient Descent),每个 Worker 独立计算梯度并更新全局参数。// 计算梯度 (f(w) = w^2 的导数是 2w)// 模拟计算延迟 (0~100ms)// 加锁更新全局参数。:记录每个 Worker 的实际迭代次数(因异步性可能不同)。// 创建6个Worker线程。输出最终参数值和各 Worker 的迭代次数。:全局参数,所有 Worker 共享,需用。// 等待所有线程完成。
2025-08-06 13:56:31
715
原创 Java、Android及计算机基础面试题总结
实现步骤继承View或其子类处理自定义属性:重写关键方法:// 计算视图大小// 使用Paint进行绘制性能优化避免在onDraw中分配对象使用canvas.clipRect()限制绘制区域考虑硬件加速特性。
2025-08-05 20:39:56
1184
原创 安卓基础布局核心知识点整理
onMeasure ():测量子 View 尺寸onLayout ():放置子 View 位置java@Override// 测量所有子View// 计算自身尺寸@Override// 放置每个子View的位置自定义属性:xmljava。
2025-07-31 09:40:39
676
原创 大厂(阿里、字节、拼多多、腾讯)Java后端面试记录合集
HotSpot虚拟机新生代采用8:1:1的Eden:Survivor比例:大多数对象朝生夕死(在Eden区分配)10%空间作为Survivor区(两个Survivor各占10%)经验表明这个比例能很好地平衡内存利用率和GC效率8的设定依据基于泊松分布统计:链表长度达到8的概率极低(约0.00000006)红黑树查询时间复杂度O(log n),链表O(n),在n=8时两者性能相当超过8后红黑树优势更明显退化为6的原因避免频繁转换带来的性能开销设置差异(6和8)防止临界点附近频繁转换(抖动)
2025-07-29 22:02:59
1423
原创 Shopee虾皮笔试类似题记录
它满足所有的要求:2 个不同的字母,长度为 3 (在 minSize 和 maxSize 范围内)。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。子串 "aaa" 在原字符串中出现了 2 次,且它们有重叠部分。数组可以分割成 [1, 5, 5] 和 [11]。子串 "aab" 在原字符串中出现了 2 次。,请你返回满足以下条件且出现次数最大的。数组不能分割成两个元素和相等的子集。,请你返回其中出现频率前。
2025-07-27 09:21:48
341
原创 不同场景[特殊字符]下的Activity 生命周期
掌握 Activity 生命周期的关键在于理解其状态转换的触发条件和数据保存的正确时机标准流程:启动→可见→前台→后台→销毁。极端情况:内存不足回收、多窗口模式、配置变化。数据持久化:优先用 ViewModel,临时数据用 onSaveInstanceState。避坑指南:避免内存泄漏、处理异步任务、优化配置变化。
2025-07-25 11:25:08
1100
原创 Android UI 控件详解实践
创建-- 填充色 -->-- 圆角半径 --><padding-- 内边距 --></shape><Buttonandroid:text="圆角按钮"理解基础概念(View/ViewGroup、尺寸单位、资源引用)。熟悉核心控件属性(特别是文本、按钮、图片控件)。精通布局容器(LinearLayout 权重、ConstraintLayout 约束)。多实践多试错(遇到问题先查官方文档,再看 Stack Overflow)。
2025-07-25 10:51:45
987
原创 Java开发岗面试记录合集
对比 B 树:B 树叶子节点和非叶子节点都存数据,单节点存储键数少,树高更高,I/O 效率低。:基于动态代理,在不修改源码的情况下为方法添加额外功能(如日志、事务)。会锁定 10 以上的间隙)防止其他事务插入新行,避免幻读。:AOF 文件开头为 RDB 快照,后续为增量命令,兼顾两者优点(:InnoDB 在 RR 级别通过。:A 依赖 B,B 依赖 A。)、权限校验、性能监控。:日志记录、事务管理(CPU核心数 + 1。CPU核心数 * 2。
2025-07-23 21:39:15
964
原创 Java中List<int[]>()和List<int[]>[]的区别
多个班级的学生成绩(每个班级有多个学生,每个学生有多门课成绩)。:一个班级的所有学生成绩(每个学生有多门课成绩)。:表示一个有向图,每个节点的邻居及其边的权重。是两种不同的数据结构,它们的区别主要体现在。:存储多个二维坐标点(x, y)。
2025-07-20 16:19:44
699
原创 Java拓扑排序:2115 从给定原材料中找到所有可以做出的菜
我们可以做出 "burger" ,因为我们有原材料 "meat" 且可以做出原材料 "bread" 和 "sandwich"。我们可以做出 "sandwich" ,因为我们有原材料 "meat" 且可以做出原材料 "bread"。我们可以做出 "sandwich" ,因为我们有原材料 "meat" 且可以做出原材料 "bread"。我们可以做出 "bread" ,因为我们有原材料 "yeast" 和 "flour"。我们没法做出任何菜,因为我们只有原材料 "yeast"。同时给你一个字符串数组。
2025-07-20 14:50:31
380
原创 Java超全八股文精简核心[问答背诵版]
核心特性ReentrantLock 是 JUC 提供的可重入互斥锁,基于 AQS 实现,支持以下高级功能核心定义垃圾回收时,所有应用线程暂停执行的现象,目的是让 GC 线程在 “静止” 环境中安全回收对象。影响表现为应用卡顿(如网页无响应、接口超时);老式收集器(如 Serial GC)STW 时间长,现代收集器(ZGC)可控制在 10ms 内。优化方案选择低延迟收集器(ZGC、Shenandoah);控制堆大小,避免过大堆导致 STW 时间长;优化对象创建速率,减少 GC 频率。
2025-07-20 11:10:48
975
原创 Java机考题:815. 公交路线 图论BFS
最优策略是先乘坐第一辆公交车到达车站 7 , 然后换乘第二辆公交车到车站 6。出发,每次尝试乘坐当前车站的所有公交车,并记录到达新车站的最小换乘次数。车站出发(初始时不在公交车上),要前往。:一旦某辆公交车的路线被遍历过,就标记为。,表示一系列公交线路,其中每个。如果不可能到达终点车站,返回。记录每个车站有哪些公交车经过。辆公交车将会在上面循环行驶。期间仅可乘坐公交车。表示一条公交线路,第。没有公交车经过,返回。
2025-07-19 13:49:48
481
原创 java 机考题: 3243. 新增道路查询后的最短距离 I
给你一个整数n和一个二维整数数组queries。有n个城市,编号从0到n - 1。初始时,每个城市i都有一条道路通往城市i + 1表示新建一条从城市ui到城市vi的道路。每次查询后,你需要找到从城市0到城市n - 1的的。返回一个数组answer,对于范围中的每个ianswer[i]是处理完i + 1个查询后,从城市0到城市n - 1的最短路径的长度。[3, 2, 1]新增一条从 2 到 4 的道路后,从 0 到 4 的最短路径长度为 3。
2025-07-19 13:27:37
438
原创 Java 位运算与整数操作必备方法大全
运算符名称用途按位与掩码、判断奇偶按位或设置特定位按位异或交换变量、加密按位取反取反所有位<<左移快速乘以2^n>>带符号右移快速除以2^n(保留符号)>>>无符号右移处理无符号数一、核心位操作方法方法签名功能说明示例计算二进制中1的个数101保留最高位的1,其余置0100保留最低位的1,其余置010计算最低位1之后的0的个数循环左移(低位补高位)循环右移(高位补低位)反转所有位(0101→1010反转字节顺序(大端 ↔ 小端)二、进制转换与字符串处理方法签名功能说明。
2025-07-17 21:41:41
428
原创 Android开发知识点总结合集
自定义View是安卓中的一个重要技术,可以实现灵活的UI界面。自定义View需要了解View的测量、布局和绘制流程,以及Canvas、Paint等相关知识。自定义View的属性 编写attr.xml文件在layout布局文件中引用,同时引用命名空间在View的构造方法中获得我们自定义的属性 ,在自定义控件中进行读取(构造方法拿到attr.xml文件值)重写onMesure重写onDrawonLayout()onDraw()。
2025-07-16 20:48:54
2084
原创 java 知识点表格
线程修改后先写入本地缓存(工作内存),再刷回主内存,其他线程可能读取旧值。默认隔离级别(RR)下,通过间隙锁(Gap Lock)+ MVCC。:修改后直接刷回主内存,并强制其他线程重新从主内存读取最新值。:文件操作或特殊需求(如Windows的IOCP)。:处理与业务无关的通用逻辑(如全局编码、跨域)。:处理与业务相关的逻辑(如登录验证、参数校验)。功能基础(如统一设置编码、过滤非法字符)。功能更灵活(如校验权限、记录业务日志)。:简单场景(如内部管理后台)。:主流高并发(如IM、网关)。
2025-07-16 20:12:38
620
原创 百度移动开发实习面试合集2
Java有8种基本数据类型整型byte(1字节)、short(2字节)、int(4字节)、long(8字节)浮点型float(4字节)、double(8字节)字符型char(2字节,Unicode)布尔型boolean(JVM依赖,通常1字节)原因确保最后一个ACK到达对方(防止对方重发FIN)。让本次连接的所有报文从网络中消失,避免影响新连接。特性抽象类接口(Java 8+)方法可包含实现方法默认方法(default字段可有实例变量仅常量(继承单继承多实现适用场景模板方法设计模式。
2025-07-16 07:11:31
1198
原创 百度移动开发面经合集
实现方式特点线程安全防反射饿汉式类加载时初始化,可能浪费资源✅❌懒汉式第一次调用时初始化,需加锁解决线程问题❌(需同步)❌双重检测锁延迟加载 + 同步块优化性能✅❌静态内部类利用类加载机制保证线程安全,延迟加载✅❌枚举最安全,JVM 保障唯一性,天然防反射和序列化破坏✅✅略三次握手(建立连接)SYN客户端发送(随机序列号)。SYN+ACK服务端返回(确认客户端的x,并发送自己的yACK客户端发送(确认服务端的y✅目的:确保双方都有发送和接收能力,防止历史连接干扰。
2025-07-15 21:09:16
1049
原创 0-1 BFS 双端队列 解1368:使网格图至少有一条有效路径的最小代价
到达 (3, 3) 的路径为: (0, 0) --> (0, 1) --> (0, 2) --> (0, 3) 花费代价 cost = 1 使方向向下 --> (1, 3) --> (1, 2) --> (1, 1) --> (1, 0) 花费代价 cost = 1 使方向向下 --> (2, 0) --> (2, 1) --> (2, 2) --> (2, 3) 花费代价 cost = 1 使方向向下 --> (3, 3)的代价修改一个格子中的数字,但每个格子中的数字。一开始,你会从最左上角的格子。
2025-07-14 22:12:15
302
原创 0-1 BFS :双端队列+动态规划 LCP 56. 信物传送
时间复杂度优化至 O(mn),优于 Dijkstra 的 O(mn log mn)。:保证优先处理 0 成本的移动,类似 Dijkstra 的贪心策略。欢迎各位勇者来到力扣城,本次试炼主题为「信物传送」。变更一处传送带的方向,在物品经过后传送带恢复原方向。信物会随传送带的方向移动。:边权只有 0 或 1 的最短路径问题。解释:勇者无需施法,信物将自动传送至。处,请返回勇者施法操作的最少次数。,每个格子的移动成本为 0 或 1。:O(mn),每个格子最多处理一次。存储待处理的坐标,按。列的传送带运作方向,
2025-07-14 22:08:43
398
原创 23种设计模式解释+记忆
观策命责状,模访中备迭解(想象“观察策略命令的责任状,模仿访问中备用的迭代解决方案”)。:观察者、策略、命令、责任链、状态、模板方法、访问者、中介者、备忘录、迭代器、解释器。:6适配器、7桥接、8组合、9装饰器、10外观、11享元、12代理。:遥控器(抽象)和电视(实现)分离,遥控器可以控制不同品牌电视。:酒店前台(门面)帮你处理订房、订餐、叫车,你无需对接多个部门。:餐厅点餐,顾客点单(命令)交给服务员,服务员再通知厨师执行。:组装电脑,分步骤选CPU、内存、硬盘,最后拼成整机。
2025-05-18 22:15:23
1483
原创 关于Java八股中那些应知必会的事
ThreadLocal内存泄漏是什么?想象一个场景:你辞职了(线程任务结束),但你的私人储物柜(ThreadLocal)里还堆满了东西(数据)。由于柜子的钥匙(引用)和你的工牌(线程对象)没被销毁,清洁工(垃圾回收器GC)以为这些垃圾还有用,不敢清理。久而久之,公司(JVM)的储物区(内存)被塞满,最终爆仓(OOM内存溢出本质使用不当,导致无用数据无法被GC回收,占满内存。AQS 是什么?想象一个银行排队办业务AQS = 银行排队系统它管理着一个队列(排队的人),和一个状态变量。
2025-05-18 12:44:09
1005
原创 打家劫舍3树型DP Java版详解
你是一个经验丰富的小偷,经过上次在街边和湖边得手后你准备挑战一次自己,你发现了一个结构如二叉树的小区,小区内每个房间都存有一定现金,你观察到除了小区入口的房间以外每个房间都有且仅有一个父房间和至多两个子房间。问,给定一个二叉树结构的小区,如之前两次行动一样,你无法在不触动警报的情况下同时偷窃两个相邻的房间,在不触动警报的情况下最多的偷窃金额。小区入口的房间的值是2 ,偷窃第一层2和第三层 2,1 是最优方案。样例2:小区入口的房间的值是3 ,偷窃第二层 2,10 是最优方案。思路:递归+树型DP。
2025-05-09 23:16:40
256
原创 java中PriorityQueue优先队列的思想及用法
优先队列(Priority Queue)是一种特殊的队列数据结构,它的特点是。优先级可以是元素自身的值,也可以是自定义的排序规则。:堆顶元素是最小值(默认实现)。:堆顶元素是最大值(可通过逆序比较实现)。插入(push):O(log n)取出最值(pop):O(log n)查看最值(peek):O(1)Java的默认基于最小堆实现。offer(e)add(e)poll()peek()isEmpty()操作系统中的进程调度(优先级高的任务先执行)。用于高效获取当前最短路径的节点。
2025-05-09 15:29:42
551
原创 Dijkstra 算法代码步骤[leetcode.743网络延迟时间]
有n个网络节点,标记为1到n。给你一个列表times,表示信号经过边的传递时间。,其中ui是源节点,vi是目标节点,wi是一个信号从源节点传递到目标节点的时间。现在,从某个节点K发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回-1。2邻接矩阵g存储边权。dis数组存储源点到各点的最短距离,初始为INF。done数组标记节点是否已确定最短路径。选择当前未处理的、距离最短的节点x。如果x不可达,返回-1。更新maxDis为dis[x](因为dis[x]是递增的)。
2025-04-27 21:05:17
953
原创 Java位运算符大全
所有位向右移动,高位补符号位(正数补 0,负数补 1)。处理无符号整数(Java 没有无符号类型,但可以用。:两个位都为 1 时,结果才为 1,否则为 0。:所有位向右移动,高位补 0(不考虑符号位)。:两个位有一个为 1 时,结果就为 1。:两个位不同时,结果为 1,否则为 0。:所有位取反(0→1,1→0)。:所有位向左移动,低位补 0。(任何数与 0 异或不变)。Java 使用补码表示负数,(相同数异或为 0)。
2025-04-27 20:50:12
1271
原创 动态规划求解leetcode300.最长递增子序列(LIS)详解
给你一个整数数组 ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如, 是数组 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7,7,7,7,7,7]输出:1关键点 双重循环结构:外层
2025-04-26 17:01:06
1304
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅