- 博客(34)
- 收藏
- 关注
原创 【微服务注册中心nacos与consul对比】
最终建议:新项目优先 Nacos(功能全面+易用),跨国/强一致场景选 Consul。健康检查 TCP/HTTP/MySQL 等多协议,支持自定义脚本 TCP/HTTP/gRPC/脚本,检查类型更丰富。架构 中心化架构,模块化设计(服务发现、配置管理分离) 客户端-服务器架构(Server/Client节点)动态推送 长轮询主动推送,实时性高(毫秒级) Watch 机制拉取,需客户端监听(秒级延迟)注册方式 自动注册(SDK 监听) + 手动注册 显式注册(HTTP API/SDK)
2025-08-21 19:12:28
600
原创 常用Linux 指令清单
1.vim2.管道是 Linux 的灵魂!将前一个命令的输出作为后一个命令的输入。。3.大幅提高输入速度和准确性,减少路径敲错。4.知道命令在做什么比死记硬背更重要。遇到新命令,多用查看手册。5.*对rm -rfchmod -Rchown -Rkill -9jmap -dumpdd等有破坏性或高风险命令保持警惕!敲回车前再三确认命令和路径!*尽量在操作前备份重要文件或目录。*使用sudo时明确知道自己在做什么。6.以上列出的只是最常用的一部分。
2025-08-19 23:39:40
826
原创 【保障服务高可用的多维度策略】
保障高可用绝非一日之功,而是持续投入、不断优化、敬畏生产的过程。它要求架构师具备:理解基础设施、应用、数据、流程间的复杂关联。精通分布式原理、网络、数据库、Java 生态、云原生等。时刻思考“如果这个挂了怎么办?依靠监控、日志、指标指导优化和容量规划。任何重复性、易出错的操作都应被自动化取代。高可用是整个团队共同的目标和责任。“高可用”是一个相对的、动态的目标(SLA)。追求 100% 可用性既不经济也不现实。
2025-08-19 23:15:15
898
原创 Java 的内存模型(二)
线程对共享变量的所有操作(读取、赋值等)都必须在自己的工作内存中进行,不能直接读写主内存。JMM 实现(编译器、JVM、处理器)使用内存屏障(Memory Barriers / Fences)来禁止特定类型的编译器重排序和处理器重排序,确保指令执行顺序符合要求。(注意:指的是单线程的执行结果顺序,不代表指令实际执行顺序不能重排序,只要重排序的结果与程序顺序执行一致即可)。一个线程修改了共享变量,另一个线程可能看不到修改后的值(因为修改可能只在 CPU 缓存中,还没写回主内存)。更大范围的原子性需要通过。
2025-08-19 23:09:17
551
原创 G1(Garbage-First)垃圾回收器
当 G1 无法在 Mixed GC 中跟上对象分配的速度(例如并发标记跟不上应用线程修改对象引用的速度,导致回收策略失效),或者堆中没有足够的空闲 Region 容纳复制的存活对象时,G1 会退回到一个单线程、STW 的 Serial Old GC 式的 Full GC,这时停顿会非常长,应尽量避免。虽然 CMS 尽量避免 Full GC,但如果发生(通常是并发模式失败或晋升失败),它使用的是并行、多线程的 Mark-Sweep-Compact(Serial Old 的多线程版),相对高效一些。
2025-08-19 23:03:19
1135
原创 synchronized 关键字
能用 synchronized 就先用:JDK6 后性能大幅优化锁对象要私有化锁范围最小化:同步块优于同步方法避免锁嵌套:防止死锁高竞争场景:考虑 ReentrantLock 的高级特性📌终极口诀共享资源访问处,加上 sync 保平安对象级别实例锁,静态方法类锁跟同步代码范围小,私有锁对象最稳妥高并发下性能考,锁升级机制来兜底synchronized 是 Java 并发的基石,理解它的原理和使用场景,是成为 Java 高手的必经之路!有任何疑问欢迎随时提问。
2025-08-14 22:19:43
1075
原创 Elasticsearch 插入与删除流程
写入优先日志所有操作先记录事务日志(Translog)确保数据安全后再内存操作近实时搜索(NRT):文件系统缓存作为"临时货架"默认1秒刷新实现准实时搜索延迟物理删除标记删除代替立即清除段合并时批量物理删除批量合并优化小包裹合并成大包裹减少仓库空间碎片通过这个快递仓库的比喻,您应该能理解:ES 的插入就像快递入库(先登记后上架),删除就像退货处理(贴标签等定期清理)。这种设计在保证数据安全的同时,实现了高性能的读写操作!
2025-08-13 23:54:52
388
原创 MySQL MVCC 超通俗详解:时光照相馆的故事
多版本= 每张照片的多个历史状态并发控制= 通过"时光眼镜"控制每位顾客看到的版本读不阻塞写= 顾客看旧照片时,摄影师可拍新照片写不阻塞读= 摄影师修改时,顾客仍可看旧照片最终技术定义MVCC 是通过在数据库中维护数据的多个历史版本,使得读操作可以访问特定时间点的数据快照,而无需加锁,从而实现了高并发下的读写分离。通过这个比喻,您应该能形象地理解:为什么在 MySQL 中,您可以一边修改数据,一边查询数据,而两者不会互相阻塞。这就是 MVCC 带给数据库的"时光魔法"!
2025-08-13 22:04:54
456
原创 Java内存模型
Java内存模型(Java Memory Model, JMM)是Java并发编程的,定义了多线程环境中变量的访问规则,解决了三大并发难题。
2025-08-13 21:48:24
626
原创 垃圾回收器核心算法
回收器新生代算法老年代算法核心特点适用场景Serial标记-复制标记-整理单线程STW,简单高效嵌入式设备、客户端应用ParNew标记-复制(并行)需搭配CMS多线程并行,STW时间缩短JDK8前Web应用Parallel标记-复制(自适应)标记-整理(并行)吞吐量优先 (>99%)批处理、数据分析CMS标记-清除最小化停顿,但产生碎片老系统低延迟需求G1标记-复制+整理标记-整理分区回收,可预测停顿(200ms)JDK9+默认,4-50GB堆内存ZGC并发标记-整理。
2025-08-13 21:02:35
742
原创 【线程池的执行流程】
涉及任务调度、线程管理、资源分配等核心机制。理解线程池的任务执行流程,是编写高性能并发程序的基础。和监控工具实时观察线程池状态,根据业务特点合理配置参数。2. 创建新Worker线程。线程池执行任务的过程是一个。Worker循环获取任务。3. 启动线程执行任务。7. 循环获取任务执行。5. 创建非核心线程。[线程数已达max]
2025-08-13 19:42:57
841
原创 【Java中的线程池】
通过合理选择线程池类型和参数配置,可以显著提升Java应用的并发处理能力。建议在复杂场景中优先使用。CachedThreadPool+限制maxSize。ThreadPoolExecutor+有界队列。在 Java 中,线程池的实现主要通过。:阿里Java规范强制禁止使用。创建线程池,推荐手动构造。
2025-08-13 19:42:31
791
原创 RabbitMQ重复消费如何解决
消费者处理完消息后手动发送 ACK,避免消息因异常重新入队。:设置消息 TTL,超时未处理则转入死信队列,避免无限重试。利用业务字段(如订单号)的唯一性约束,避免重复插入数据。:为每条消息分配唯一 ID,消费者记录已处理 ID。:在数据库中维护一张去重表,记录已处理的消息 ID。使用 Redis 记录已处理消息的 ID,通过。:确保同一消息多次处理的结果与一次处理相同。:处理前检查 ID 是否已存在。:发送消息时附加唯一 ID。命令实现原子性检查。
2025-03-12 18:58:45
1150
原创 Redis 数据结构详解
数据结构特点典型场景String简单键值对缓存、计数器List有序、支持双向操作消息队列、最新列表Hash对象存储用户信息、商品详情Set无序、唯一标签、共同好友ZSet有序、唯一排行榜、延迟任务Bitmap位操作用户活跃统计基数估算UV统计Stream消息队列事件日志、实时数据处理。
2025-03-12 18:34:54
920
原创 MySQL 存储引擎与事务详解
InnoDB 是 MySQL 默认的存储引擎,它支持事务的 ACID(原子性、一致性、隔离性、持久性)特性,提供了行级锁和外键约束,适合处理大量的事务操作,保证数据的完整性和一致性。InnoDB使用聚簇索引来存储数据,数据和索引存储在一起,主键索引的叶子节点存储了完整的数据行,这使得基于主键的查询非常高效。聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。它决定了表中数据在磁盘上的物理存储顺序,即数据行按照聚簇索引键的值进行排序并存储。
2025-03-11 06:13:40
799
原创 MySQL 技术浅析(聚簇索引、UndoLog、RedoLog、MVCC)
InnoDB 中,聚簇索引的叶子节点直接存储,数据按主键值物理排序存储。
2025-03-11 03:36:30
771
原创 MySQL 存储引擎与事务深度解析
特性定义技术实现原子性事务操作要么全成功,要么全回滚Undo Log 记录操作逆过程一致性事务执行后数据必须满足约束(如外键、唯一性)通过原子性、隔离性和持久性共同保障隔离性并发事务相互隔离,避免脏读、不可重复读等问题MVCC(多版本并发控制)+ 锁机制持久性提交后的数据永久保存Redo Log 先写日志后刷盘优先选择 InnoDB:适用于 99% 的 OLTP 场景(事务、高并发、数据安全)MyISAM 适用场景:只读数据表、临时日志表、全表扫描密集型查询。
2025-03-11 02:59:38
877
原创 Java 数组与 List 浅析
数组是固定长度连续内存空间存储相同类型元素的数据结构。特点长度不可变:创建后无法动态扩容。内存连续:支持快速随机访问(时间复杂度O(1)类型固定:所有元素类型必须一致(支持基本类型和对象类型)。List是 Java 集合框架中的接口,代表有序、可重复的元素集合。核心功能按索引访问元素(动态增删元素(add()remove()迭代遍历(iterator()可通过继承实现自定义的 List 结构(如固定长度列表)。数组:简单、高效,适合固定长度和基本类型操作。List。
2025-03-09 01:53:48
1062
原创 RESTful风格接口设计规范性建议
前言对于后端开发的程序员来说,开发接口可能是最日常且最普通不为过的事情。但是在开发的过程中其实是有很多因素需要考虑。比如:接口的业务定位、安全性、可扩展性、稳定性、跨域性、协议规则、路有规则、单一原则、接口过滤、接口组合等等多方面因素。职责原则: 在设计接口时,必须首先明确接口的职责,接口需要解决什么类型的业务问题及具体问题是什么。单一性原则: 在明确接口职责的条件下,尽量做到接...
2020-02-24 16:18:46
768
原创 springAOP之调用失效与解决方案
前言在spring 中使用 @Transactional 、 @Cacheable 或 自定义 AOP注解时,会发现个问题:在对象内部的方法中调用该对象的其他使用AOP注解的方法,被调用方法的AOP注解失效。问题描述前些天做一个第三方服务的开关,为了灵活应用,我设计了一个自定义注解,通过注解属性去匹配数据库记录查找配置是否开启。然而调用的时候出了问题。原代码如下:@Transact...
2020-02-22 19:14:45
628
原创 算法笔记no.1之杨氏矩阵查找
如题:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。时间小于等于2s 所占内存小于等于64M解题思路:左下角开始与target整数比对 如果大于target 向上走 小于target向右走遍历利用从左到右递增 从上到下递增的特点。从左下角开始 ...
2020-02-22 16:04:29
227
原创 GPS轨迹压缩之Douglas-Peucker算法
前言最近在做的IOT平台涉及到画轨迹线的业务。谈到轨迹线,设备上报上来的数据量巨大,甚至活跃的设备一天上报来的数据都甚至几十万。前端没法对这个数据去处理进行画线取轨迹图像。所以就有了轨迹压缩。轨迹压缩算法轨迹压缩算法分为两大类,分别是无损压缩和有损压缩,无损压缩算法主要包括哈夫曼编码,有损压缩算法又分为批处理方式和在线数据压缩方式,其中批处理方式又包括DP(Douglas-Peucker)算...
2020-02-22 15:54:30
4813
1
原创 maven中的scope与systemPath
scope的分类包括以下 :maven中scope的默认值是compile。compile表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去。test 表示依赖项目仅仅参与测试相关的工作,包括测试代码的编译,执行。比较典型的如junitruntime 表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。...
2020-02-22 15:47:30
3685
原创 关于并发自增计数引发的探索与发现
前言关于并发,一直都有所了解,但并没有真正认真深入的学习过。今天开始探索一下Java并发篇,玩一下多线程。了解了一下关于计数器的多线程下的四种情况。第一种情况编写一个类Counter里面有一个成员变量count,写一段简单的i++的代码完成计数的功能,为了暴露多线程下的问题,让每次自增之前睡100mspublic class Counter { private int count...
2020-02-22 15:25:19
502
原创 基于mongo的地理位置索引
前言最近新入职的公司做的是LBS相关的项目,一般会对一些地理位置及相关数据做操作。一般存储每个地点的经纬度的坐标,组成点坐标或是多边形、矩形、圆形等区域,也可能是球面。会有一些应用场景,比如一辆车越过电子围栏区域触发报警,就比如查询一个点是否在指定区域内。或查询某个坐标点附近的地理位置场所坐标,而Mongodb专门针对这种查询建立了地理空间索引,主要分为2d和2dsphere两种分别是针对平面和...
2020-02-22 15:23:05
365
原创 面试篇之SQL优化
前言 面试的时候经常会问的一个问题就是有没有做过sql优化,每每问到这个问题我的答案都不太理想,今天就总结一下。SQL优化的一些方法写明查询具体某几列,减少*的使用,表名过长时,尽量使用表的别名少用模糊查询like,尽量少用%例如:关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%二者都能使用尽量使用where (与hav...
2020-02-22 15:15:24
228
原创 一家小而美的外企公司面试体验
前言第一篇博客,呵呵,写下最近一次的面试经历吧。3月末,像我这种年轻浮躁的程序员心里的魔鬼被放了出来。跳槽!跳槽!实际上我也有了offer,可能是offer不够吸引我吧,或者说我还有梦想。最近去了一家外企面试,公司规模不大,但是通过看简介以及跟HR沟通,觉得公司是难得遇见的优秀的公司,可能会遇到很nice很open的人。废话多了,接入正题。面试经历优秀的公司HR之前跟我沟通了下午4点...
2020-02-22 15:06:02
1537
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅