自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2449)
  • 资源 (1)
  • 收藏
  • 关注

原创 你不是 leader,怎么推动事情走下去?

你不是指挥官,但你是facilitator —— 促动者,让人听你不是因为你大,而是你有组织力。有时候你不说话,事情就真没人记得了。不是你说了算,但你提的方案有道理,大家就会照你说的做。为了不耽误进度,我先拟了一个初步下一步,欢迎补充修改。不是甩锅,而是聪明地引入该出现的人,顺带洗清责任。提前提醒一下,如果要推进,可能需要领导的决策。你作为这方面的专家,是不是可以牵头一下这块?这边我草拟了一个初步方案,欢迎大家补充建议。我只是想帮大家对齐一下,方便推进下一步。我把这个加进我们的进度表,方便持续关注。

2025-06-26 00:16:36 609

转载 服务端高并发分布式架构演进之路

1. 概述本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径2. 基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:分布式 系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署

2021-05-25 17:47:54 478

转载 警惕软件复杂度困局

简介:对于大型的软件系统如互联网分布式应用或企业级软件,为何我们常常会陷入复杂度陷阱?如何识别复杂度增长的因素?在代码开发以及演进的过程中需要遵循哪些原则?本文将分享阿里研究员谷朴关于软件复杂度的思考:什么是复杂度、复杂度是如何产生的以及解决的思路。较长,同学们可收藏后再看。写在前面软件设计和实现的本质是工程师相互通过“写作”来交流一些包含丰富细节的抽象概念并且不断迭代过程。另外,如果你的代码生存期一般不超过6个月,本文用处不大。一 软件架构的核心挑战是快速增长的复杂性越是...

2021-05-19 18:17:58 707

转载 常见代码重构技巧,非常实用

关于重构为什么要重构项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。造成这样的原因往往有以下几点:编码之前缺乏有效的设计 成本上的考虑,在原功能堆砌式编程 缺乏有效代码质量监督机制对于此类问题,业界已有有很好的解决思路:通过持续不断的重构将代码中的“坏味道”清除掉。什么是重构重构一书的作者Martin..

2021-05-13 10:01:52 1184

转载 JAVA线上故障排查全套路

线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。一、CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用js

2020-09-22 17:45:24 503

转载 图解+代码|常见限流算法以及限流在单机分布式场景下的思考

大家好,我是 yes。今天来说说限流的相关内容,包括常见的限流算法、单机限流场景、分布式限流场景以及一些常见限流组件。当然在介绍限流算法和具体场景之前我们先得明确什么是限流,为什么要限流?。任何技术都要搞清它的来源,技术的产生来自痛点,明确痛点我们才能抓住关键对症下药。限流是什么?首先来解释下什么是限流?在日常生活中限流很常见,例如去有些景区玩,每天售卖的门票数是有限的,例如 2000 张,即每天最多只有 2000 个人能进去游玩。题外话:我之前看到个新闻,最不想卖门票的景区“

2020-09-22 13:06:08 614

转载 springboot实现定时任务,异步操作,统一结果返回,全局异常处理,拦截器及事务处理

本文都是springboot的常用和实用功能,话不多说开始吧定时任务1.启动类开启注解@EnableScheduling //开启基于注解的定时任务@MapperScan("com.pdzx.dao")@SpringBootApplicationpublic class VideoApplication { public static void main(String[] args) { SpringApplication.run(VideoApplicatio

2020-08-26 20:22:41 2032

原创 聊聊微服务架构及分布式事务解决方案

分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。什么是事务事务(Transaction)及其ACID属性事务是由一组SQL语句组成的逻...

2020-04-21 22:34:45 671

转载 Java线程池实现原理及其在美团业务中的实践

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程...

2020-04-03 14:58:43 751

转载 Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析

一、深入JVM锁机制:synchronizedsynrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁...

2020-04-01 16:00:25 609

转载 一文带你理解Java中Lock的实现原理

当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java底层支持的,而concurrent包则是jdk实现。关于synchronized的原理可以阅读再有人问你synchronized是什么,就把这篇文章发给他。在这里...

2020-04-01 15:04:40 957

转载 业务复杂=if else?刚来的大神竟然用策略 工厂彻底干掉了他们!

对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,想要新加一个分...

2019-10-24 13:41:06 913

原创 编程中的项目结构

在编程和软件开发中,src通常是。

2025-11-09 05:00:48 652

原创 常见数据编码和哈希算法(非加解密)

URL Base64 是标准 Base64 的 “URL 友好版”,通过替换冲突字符(→→)和省略填充符,确保编码结果能在 URL/URI 中安全传输,避免解析错误。它是处理 URL 中二进制数据的首选编码方式。

2025-11-09 04:09:01 494

转载 Java 常用数据编码以及加密解密算法

MD2、MD4、MD5 等,已经不被推荐使用。

2025-11-09 03:54:44 33

转载 数据安全及各种加密算法对比

至此数据安全和加解密相关结算完毕,写博客的过程,也是学习的过程,断断续续的写了三四天,总算写完了,同时也对原来一些模糊的概念有了更清晰的认识,写的这篇文章看了小码哥文顶顶老师同时渴望遇到一些希望进步、不甘平凡的同行!!!共勉!!!

2025-11-09 03:40:55 35

原创 字符、字节、编码,字节码、机器码

字节是计算机中 “承载信息的基本单元”,由 8 个二进制位组成,是数据存储、传输和处理的基础。无论是文本中的一个字符、图像中的一个像素,还是程序中的一条指令,最终都会被拆解为字节的组合。维度字节(Byte)字符(Character)本质物理存储单位(二进制容器)抽象信息单元(人类可识别符号)单位字节(B)、KB、MB 等个(无固定存储单位)与编码关系编码的结果(字节序列)编码的输入(需转换为字节)核心作用计量存储 / 传输的数据量表示人类可理解的符号或信息。

2025-11-09 03:10:27 1045

原创 计算机病毒

了解病毒的技术原理,核心目的是更好地理解网络安全防护的重要性(如及时更新系统补丁、安装杀毒软件、不打开可疑文件等)。网络空间的安全需要每个人遵守法律和道德,共同维护。

2025-11-08 00:29:14 623

原创 K8s 与 Spring Cloud

K8s 中,是 Pod 的 “稳定访问入口”(类似 “固定门牌号”)。简单说:Pod 是 “流动的员工”,Service 是 “公司总机”,不管员工怎么换,打总机就能找到对应服务。

2025-11-02 02:01:38 907

原创 Error日志如何打印

内容三要素:业务场景 + 关键参数 + 完整堆栈;级别不滥用:仅核心错误用 Error,预期异常用 Warn;异常不吞漏:不丢堆栈、不重复打印;配置易检索:时间戳 + 请求 ID + 单独文件;安全要牢记:敏感信息绝对不打印。→ 封装持有e→调用解析堆栈为字符串→整合 msg 与堆栈→Appender输出到控制台 / 文件。

2025-11-01 02:25:06 610

转载 项目计划的五大核心概念

每个里程碑要有明确的验收标准,比如“需求文档已评审并通过”,而不是“需求差不多了”。说到底,项目管理的本质就是降低不确定性,让团队少踩坑、多交付。很多项目经理的精力要优先放在关键路径上,这就是“抓主要矛盾”。你可以等家具采购慢几天,但施工延误一天,整体工期就得延一天。保留缓冲时间,别把计划排得死死的,一点风吹草动就会全盘崩溃。非关键任务如果晚一点,整体项目还能缓冲,但关键路径没余量。要预留风险点,比如“供应商可能延迟交货”,提前写进时间表。找出关键路径后,要重点盯紧这些任务,确保它们不掉链子。

2025-10-28 01:04:50 40

转载 七大核心管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则

每一项工作,都是一个PDCA循环,都需要计划、实施、检查结果,并进一步进行改进,同时进入下一个循环,只有在日积月累的渐进改善中,才可能会有质的飞跃,才可能取得完善每一项工作,完善自己的人生。” 按事情的“重要程度”编排事务优先次序的准则是建立在“重要的少数与琐碎的多数”的原理的基础上。帮您清晰地把握全局,分析自己在资源方面的优势与劣势,把握环境提供的机会,防范可能存在的风险与威胁,对我们的成功有非常重要的意义。对工作要有前瞻能力,防患于未然,如果总是在忙于救火,那将使我们的工作永远处理被动之中。

2025-10-28 00:57:18 438

转载 内存可见性、MESI协议、volatile关键字一文搞通

volatile首先在编译期就告知JIT编译器,禁止对volatile的相关变量的代码优化(这些优化包括重排),同时编译器和解释器在处理volatile字段的读写时,都会插入一些内存屏障语句得益于这些内存屏障语句,当CPU在执行到对这些变量的读写时,也会执行内存屏障语句,保证读取或更新都是实时的,即更新能被其他核心立即察觉,也即实现了可见性上面是有volatile修饰时,会做的一些操作。还有一些有益于可见性的基础逻辑,即使是没有volatile,也是存在的。

2025-10-28 00:48:58 25

原创 final关键字的应用

常量定义:用定义类级常量(如配置项、枚举值),名称全大写,清晰标识不可变。依赖注入:被注入的服务(如ServiceRepository)通常为单例且无需更换,用final修饰确保引用不变。final。

2025-10-28 00:25:56 565

原创 内存充足频繁fullgc问题

在内存充足的情况下,频繁 Full GC 的核心原因通常是,或,导致即使总内存充足,也无法为新晋升的对象分配连续空间,触发 Full GC。

2025-10-28 00:17:27 287

原创 常用的算法技巧

树的遍历是处理树结构的基础,常见的有深度优先搜索(DFS)和广度优先搜索(BFS),衍生出前序、中序、后序遍历(DFS)和层序遍历(BFS)。:通过递归将问题分解为子问题,同时用缓存(如哈希表)存储已解决的子问题结果,避免重复计算(本质是动态规划的 “自顶向下” 实现)。:直接操作二进制位,利用位运算的特性(如与、或、异或、左移、右移)解决问题,效率极高(时间 / 空间复杂度低)。,递归解决子问题后合并结果,适合处理具有 “分治特性” 的问题(如问题可拆分、子问题独立、合并简单)。

2025-10-28 00:03:56 884

转载 走上管理岗位,必须死磕的一个能力

前几天和广州一家电商公司的张经理聊天,他一开口就倒苦水:“上周让下属做双十一的活动方案,我明明把要求说的明明白白,结果交上来的东西全是废的——预算表漏了物流成本,活动流程没考虑客服衔接,这根本没法用!我反问他:“方案写了一周,你中间看过哪怕一次草稿吗?张经理突然卡住,半天憋出一句:“我以为他能搞定,等着最后看结果就行。这不是个例。这些年接触过的管理者里,至少六成都会犯同样的错:把任务交出去就当甩了包袱,直到最后才发现问题,可这时早就来不及补救了。

2025-10-27 00:55:30 23

转载 团队管理就看这4点

管理最大的痛点,。说白了,就是怎么点燃一群人,共同为一个目标而拼命干。很多管理者一看到员工躺平、执行力差,第一反应是“这人不行,态度不好”,进而从员工身上找问题,却很少反求诸己。但其实,。一个团队有没有战斗力,业绩能不能打,氛围好不好,关键还真就看带头的那个领导。那么,怎么判断一个领导到底会不会带人?我认为,做好以下4件事很重要。

2025-10-27 00:48:22 35

转载 订单履约系统的状态机设计

从if-else到表驱动引擎的演进,本质是思维方式的转变:把流程当数据来管理。状态机就是这个思想的载体。它是一种将复杂抽象为简单、将混乱转化为秩序的工具。状态机设计的精髓不在代码实现,而在"把流程当数据管理"的思维跃迁。从if-else到表驱动,订单系统就从"哑巴"变成了"会说话"的活系统。

2025-10-27 00:24:25 48

原创 ConfigMap(K8s)对比Nacos

完全替代?→否。ConfigMap无法覆盖动态推送、多环境治理、灰度发布等 Nacos 核心功能。适用场景→ 选择 ConfigMap:静态配置 + 纯 K8s 环境 + 无实时更新需求。→ 选择 Nacos:微服务架构 + 多环境配置 + 需动态热更新或灰度能力。混合架构二者可共存:Nacos 管理业务动态配置,ConfigMap 管理 K8s 基础设施配置。最终决策需结合业务场景:若已深度依赖 Nacos 的动态能力,强行替换为 ConfigMap 将导致显著功能降级和运维负担。

2025-10-24 18:43:45 643

原创 JVM入门到实战-原理篇(六 垃圾回收器原理)

1、着色指针(Colored Pointers)着色指针将原来的8字节保存地址的指针拆分成了三部分,不仅能保存对象的地址,还可以保存当前对象所属的状态。不支持32位系统、不支持指针压缩2、读屏障(Load Barrier)在获取对象引用判断对象所属状态,如果所属状态和当前GC阶段的颜色状态不一致,由用户线程完成本阶段的工作。会损失一部分的性能,大约在5%~10%之间。

2025-10-19 22:12:05 647

原创 JVM入门到实战-原理篇(五 JIT即时编译器)

根据JIT即时编器优化代码的特性,在编写代码时注意以下几个事项,可以让代码执行时拥有更好的性能:1、尽量编写比较小的方法,让方法内联可以生效。2、高频使用的代码,特别是第三方依赖库甚至是JDK中的,如果内容过度复杂是无法内联的,可以自行实现一个特定的优化版本。3、注意下接口的实现数量,尽量不要超过2个,否则会影响内联的处理。4、高频调用的方法中创建对象临时使用,尽量不要让对象逃逸。文章来源:黑马JVM教程。

2025-10-19 21:54:09 718

原创 JVM入门到实战-原理篇(四 异常捕获的原理)

当触发异常的字节码的索引值在某个异常表条目的监控范围内,Java 虚拟机会判断所抛出的异常和该条目想要捕获的异常是否匹配。在位置2到4字节码指令执行范围内,如果出现了Exception对象的异常或者子类对象异常,直接跳转到位置7的指令。2、如果遍历完都不能匹配,说明异常无法在当前方法执行时被捕获,此方法栈帧直接弹出,在上一层的栈帧中进行异常捕获的查询。异常表在编译期生成,存放的是代码中异常的处理信息,包含了异常捕获的生效范围以及异常发生后跳转到的字节码指令位置。跳转PC:异常捕获之后,跳转到的字节码位置。

2025-10-17 00:29:19 343

原创 JVM入门到实战-原理篇(三 方法调用的原理)

在JVM中,一共有五个字节码指令可以执行方法调用:1、invokestatic:调用静态方法。静态绑定2、invokespecial: 调用对象的private方法、构造方法,以及使用 super 关键字调用父类实例的方法、构造方法,以及所实现接口的默认方法。静态绑定3、invokevirtual:调用对象的非private方法。非final方法使用动态绑定,使用虚方法表找到方法的地址,子类会复制父类的虚方法表,如果子类重写了方法,会替换成重写后方法的地址。

2025-10-17 00:23:15 858

原创 JVM入门到实战-原理篇(二 对象在堆上是如何存储的)

在64位的Java虚拟机中,Klass Pointer以及对象数据中的对象引用都需要占用8个字节,为了减少这部分的内存使用量,64 位 Java 虚拟机使用指针压缩技术,将堆中原本 8个字节的 指针压缩成 4个字节 ,此功能默认开启,可以使用-XX:-UseCompressedOops关闭。在不同的对象状态(有无锁、是否处于垃圾回收的标记中)下存放的内容是不同的,同时在64位(又分为是否开启指针压缩)、32位虚拟机中的布局都不同。1、需要进行内存对齐,指的是将对象的内存占用填充至8字节的倍数。

2025-10-17 00:13:51 641

原创 JVM入门到实战-原理篇(一 栈上的数据存储)

将a保存在堆上(使用static),使用ASM框架修改字节码指令,将iconst1指令修改为iconst2和iconst3,并测试验证结果。a = true;if(a){System.out.println("a为true");}else{System.out.println("a为false");System.out.println("a为true");}else{System.out.println("a为false");

2025-10-17 00:04:39 754

原创 JVM入门到实战-高级篇(三 揭秘Java工具)

Arthas这款工具用到了什么Java技术,有没有了解过?回答:Arthas主要使用了Java Agent技术,这种技术可以让运行中的Java程序执行Agent中编写代码。Arthas使用了Agent中的动态加载模式,可以选择让某个特定的Java进程加载Agent并执行其中的监控代码。监控方面主要使用的就是JMX提供的一些监控指标,同时使用字节码增强技术,对某些类和某些方法进行增强,从而监控方法的执行耗时、参数等内容。APM系统是如何获取到Java程序运行中的性能数据的?

2025-10-16 02:52:00 979

原创 JVM入门到实战-高级篇(二 新一代的GC)

ZGC 在垃圾回收过程中,STW的时间不会超过一毫秒,适合需要低延迟的应用。Shenandoah 是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah 并发执行大部分 GC 工作,包括并发的整理,堆大小对STW的时间基本没有影响。{gcc*-glibc*, msvc*}:编译器的版本,选择较高的版本性能好一些,如果兼容性有问题(无法启动),选择较低的版本。在内存不是特别充足的情况下, Shenandoah GC表现更好,并行垃圾回收的时间较短,用户请求的执行效率比较高。

2025-10-16 02:25:17 685

原创 JVM入门到实战-高级篇(一 GraalVM)

GraalVM是Oracle官方推出的一款高性能JDK,使用它享受比OpenJDK或者OracleJDK更好的性能。GraalVM的官方网址:https://www.graalvm.org/ 官方标语:Build faster, smaller, leaner applications。更低的CPU、内存使用率官方标语:Build faster, smaller, leaner applications。更低的CPU、内存使用率更快的启动速度,无需预热即可获得最好的性能。

2025-10-16 02:09:43 1049

原创 JVM入门到实战-实战篇(三 性能调优)

应用程序在运行过程中经常会出现性能问题,比较常见的性能问题现象是:1、通过top命令查看CPU占用率高,接近100甚至多核CPU下超过100都是有可能的。2、请求单个服务处理时间特别长,多服务使用skywalking等监控系统来判断是哪一个环节性能低下。3、程序启动之后运行正常,但是在运行一段时间之后无法处理任何的请求(内存和GC正常)。

2025-10-16 01:43:47 668

Java8 新特性.rar

Java8新特性,包含代码实例与技术文档。

2020-03-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除