- 博客(2327)
- 资源 (1)
- 收藏
- 关注

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

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

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

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

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

转载 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
1904

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

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

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

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

转载 业务复杂=if else?刚来的大神竟然用策略 工厂彻底干掉了他们!
对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,想要新加一个分...
2019-10-24 13:41:06
883
转载 用户画像:怎么做才有意义
用户画像是用户增长、数据分析、用户运营、产品设计、市场研究、广告投放、智能定价等永远绕不开的话题。当然,尤其有两个地方关于用户画像及其泛滥,一个是在数据分析师的招聘JD里,另外一个是数据服务和营销咨询类的公司里,本文就从一个数据分析师的角度,集中梳理一下用户画像有关的底层逻辑和实践方法论。Again,讲清楚这个问题最重要,因为现实中有太多的用户画像是为了做而做,往往是老板“觉得”要干,产品、运营、数据等一众部门花了大量的人力和财力,但最后成果往往在墙角吃灰,例如下面这个例子。
2025-04-22 20:15:49
80
原创 架构师如何避免从入门到忘记
本文介绍了架构师在学习过程中常见的困境以及应对方法,并详细阐述了海绵学习法、Play学习法和Teach学习法的原理、技巧和应用场景。实践是学习过程中非常重要的环节,通过亲身实践,能够更深入地理解和掌握所学知识,提高学习内容的留存率。教是最好的学,通过教授他人,能够更深入地理解和巩固所学知识,提高学习内容的留存率。海绵学习法强调时间的“挤”出来,就像海绵里的水一样,只要愿意挤,总是有的。学习是一个飞轮效应的过程,积累越多,学得越快。贵在坚持,遵循二十英里法则,避免突击学习,保持学习的连续性。
2025-04-22 20:04:04
581
转载 销售运营中的生成式人工智能:发展现状、典型用例与未来展望
在销售领域,生成式人工智能能够帮助销售团队克服诸多挑战。此外,随着客户对个性化体验的需求不断攀升,通用的推广方式逐渐失去效果,生成式人工智能为销售团队提供了打造超个性化沟通的工具,使他们能够预测客户需求,并在竞争对手之前提供解决方案。通过周密的规划和遵循最佳实践,销售团队能够充分发挥生成式人工智能的潜力,提高生产力,增强客户互动,实现长期增长。潜在客户资格评分代理会根据参与度和数据自动对潜在客户进行评分,并结合人工反馈进行调整,优先筛选出高价值潜在客户,让销售团队能够专注于有意义的互动,促进更好的转化。
2025-04-22 19:59:59
41
转载 复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情自动化
复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情自动化。好几年前听到了这句话,觉得特别有道理,然后就一直有道理了好多年。直到去年公司做转盘项目,老大一直要标准化,才真正理解“标准化一直觉得这句话只对企业管理者适用,实践下来,发现这句话适用于所有人。
2025-04-22 19:57:30
41
转载 一文搞懂:信息化,数字化,智能化是三种不同的概念
信息化相对来说是最基础的。它强调的是通过硬件设施(计算机)和信息技术(在线平台),将企业在生产经营过程中产生的业务信息在电子端记录、储存和管理,常见的有办公自动化系统、企业资源计划(ERP)系统等。信息化的核心是“信息的流通与共享”,让不同部门、不同岗位清楚地了解到:“业务状态是怎样的”,“流程走到了哪一步”等。这样一来,信息孤岛减少了,企业人员更能做出有利于生产要素组合优化的决策,增强应变能力。
2025-04-22 19:52:48
69
转载 行业案例:12306亿级流量架构分析
从2012年首日瘫痪引发全民质疑,到如今支撑起世界最高并发量的铁路售票体系,12306的技术演进堪称中国互联网基础设施发展的缩影。本文从系统设计的『不可能三角』切入,解析12306如何在业务复杂性(20+种售票规则)、数据一致性(毫秒级锁票时效)、系统可用性(99.99% SLA)之间达成平衡。通过拆解其『三级缓存+流量削峰+柔性降级』的复合型架构,。
2025-04-22 19:46:57
68
转载 业务流、工作流、审批流如何区分
审批流一般会在企业中无序扩张,是流程优化重点关注的对象,如果所在价值流所创造的价值还覆盖不了管控成本,那这个审批流是绝对要被砍掉的。,是对工作过程中经过多个角色的操作“步骤”的衔接完成某个任务,工作流也是嵌入到业务流中的。比如下面这种横向流程画法,就先对业务流程分级,业务流程分解出子流程,然后对每个子流程再做细化到活动,活动下面是阶段、步骤。,等同于业务流程,业务流程,是为达到特定的价值目标而由不同的人分别共同完成的一系列活动。[ 业务流 ]是企业实际运转的过程最本源的,也是客观存在的。
2025-04-22 19:40:29
50
转载 不懂这五个系统,还敢做数字化?ERP、SCM、CRM、MES、BI一文搞懂!
零代码平台,以伙伴云为例,是指不懂技术、没有开发经验的业务人员,通过拖拽各种功能模块,就能快速构建各类企业管理系统的一种开发平台。对于中小企业来说,性价比特别高,不用再承担高试错成本的压力。
2025-04-22 19:34:59
26
转载 如何进行SQL调优
SQL调优是一个复杂的过程,需要根据具体情况进行具体分析。本文介绍的11个问题只是SQL调优中的冰山一角,实际工作中还会遇到各种各样的问题。我们需要不断学习和积累经验,才能成为一名优秀的SQL调优专家。
2025-04-21 01:09:02
28
转载 编程性能调优——字符串与集合
所以,如果你需要额外的精度,或者如果你的数字超出一个较长的范围,最好要三思。除非是必须的,否则应该避免使用split,split由于支持正则表达式,使用不恰当会引起回溯问题,很可能导致 CPU 居高不下,如果确实需要频繁的调用split,可以考虑使用apache的StringUtils.split(string,char),频繁split的可以缓存结果。如果调用 intern 方法,会去查看字符串常量池中是否有等于该对象的字符串的引用,如果没有,jdk1.8只是会把首次遇到的字符串的引用添加到常量池中;
2025-04-21 01:04:41
28
转载 性能调优方案制定模板
三个“要”的原则之间,其实是步步递进的关系。也就是首先需要查找最大性能瓶颈,然后确诊性能瓶颈产生的原因,最后针锋相对地提出最好的解决方案。而这个最优解,往往是在考虑各种情况之后提出来,并最终被选中的。(1)要优先查最大的性能瓶颈 任何一个应用程序或者系统,总会有很多地方可以优化。永远都要优先从最大的性能瓶颈入手。一般来讲,如果找到最大的性能瓶颈,并且解决了它,那这个系统的性能会得到最大的提升。(2)要确诊性能问题的根因 当确定了最大的性能瓶颈后,就需要对这一性能瓶颈做彻底的性能分析,找出资源
2025-04-21 00:58:22
38
转载 性能分析全面介绍
在完成性能测试之后,需要输出一份性能测试报告,分析系统性能测试的情况。其中测试结果需要包含测试接口的平均、最大和最小吞吐量,响应时间,服务器的 CPU、内存、I/O、网络 IO 使用率,JVM 的 GC 频率等。通过观察这些调优标准,可以发现性能瓶颈,然后我们可以通过自下而上的方式分析查找问题。首先从操作系统层面,查看系统的 CPU、内存、I/O、网络的使用率是否存在异常,再通过命令查找异常日志,最后通过分析日志,找到导致瓶颈的原因;
2025-04-21 00:53:41
110
转载 JVM性能调优实战指南
本文通过几个比较经典的示例演示了JVM进行垃圾回收的过程以及如何进行JVM内存调优,关于更多JVM调优的案例,可以参考下面几篇文章:从实际案例聊聊Java应用的GC优化:https://tech.meituan.com/2017/12/29/jvm-optimize.htmlJava中9种常见的CMS GC问题分析与解决:https://tech.meituan.com/2020/11/12/java-9-cms-gc.html听说 JVM 性能优化很难?今天我小试了一把!
2025-04-21 00:41:23
51
转载 JVM故障排查实战指南
jstack是JVM自带的工具,用于追踪Java进程线程id的堆栈信息、锁信息,或者打印core file,远程调试Java堆栈信息等。# 打印对应java进程的堆栈信息对应的option-F 当正常输出的请求不被响应时,强制输出线程堆栈-m 如果调用到本地方法的话,可以显示C/C++的堆栈-l 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况。
2025-04-21 00:38:10
19
转载 并发编程利器Java CAS原子类全解
CAS全称,是一种无锁编程算法,即比较当前的值与旧值是否相等若相等则进行修改操作(乐观锁机制),该类常用于多线程共享变量的修改操作。而其底层实现也是基于硬件平台的汇编指令,JVM只是封装其调用仅此而已。而本文会基于以下大纲展开对CAS的探讨。: 原子更新布尔类型。: 原子更新整型。AtomicLong: 原子更新长整型。
2025-04-21 00:33:37
12
转载 简明的Arthas入门教程
有时候我们测试难免会遗漏一些情况,如下所示,我们业务要求id小于1才抛出异常,但是我们因为粗心而将判断条件写成id<2,结果懵懵懂懂的就将这段代码部到了生产环境,导致业务查询出了问题。此时控制台会出现下面几个选项,它通过不同序号标明不同的Java程序,我们看到我们的目标程序ArthasExampleApplication,序号为1,所以我们输入1按回车。完成编写后,我们将项目启动并请求该地址,不久后你就会发现CPU直接飙升接近100%,此时我们的arthas就派上用场了,首先我们自然是将arthas启动。
2025-04-21 00:21:46
187
转载 JVM内存问题排错最佳实践
对象默认情况下都会包含对象头等各种信息,这在无形间对内存都有着一定的占用,考虑到我们的功能,对于查询结果的包装类型,我们完全可以改为基本类型,所以笔者将查询的。了解了问题的原因之后,我们就可以进行解决和优化了,既然上述问题是因为jdbcTemplate查询结果的映射出问题,那我们将查询映射转换换成转为专门的。上一篇的文章中分享了一个入门级别的调优实践,收到很多读者的好评,所以笔者今天再次分享一个进阶一点的案例,希望对近期在面试的读者对于。下,所以我们通过mat打开这个文件,可以看到大量的内存被。
2025-04-21 00:13:52
13
转载 写给新手的一个JVM调优入门级案例
自此我们大概知道因为大数据文件导入内存导致堆内存被打满,对于这类问题,我们首先要考虑单位时间内的内存使用率不会超过设置的堆内存大小,对于上述代码,我们对文件采用逐行批次读取一次然后解析插入的方式。进行逐行读取,每1w行进行一次插入,这样就可以保证单位时间内仅处理1w条的数据的插入,而这些数据插入之后就可以被GC,确保单位时间内不会由大量数据占用宝贵的堆空间。启动在此测试,此时我们使用jvisualvm查看进程的GC情况,可以看到堆内存非常平稳的升降,并没有占用大量堆空间,
2025-04-21 00:08:13
12
转载 简明的Arthas配置及基础运维教程
步入arthas我们就可以进行一些比较基础的操作,以下是笔者日常用的比较多的指令,和Linux差不多,读者可自行参阅了解cat:打印文件内容。cls:清空当前屏幕区域内容。grep:匹配查找。history:打印历史命令。pwd:输入当前Java进程所在的位置。quit:退出当前arthas客户端。stop:关闭arthas服务端,所有arthas客户端都会退出。这里笔者就简单的演示一下,可以看到pwd# 当前监控的进程在服务器上的目录又比如笔者通过memory点击quit会直接退出当前进程的客户端,
2025-04-19 01:17:29
53
转载 洞察 JVM 核心知识点:原理与应用
确保minor gc后,晋升的对象可以成功分配到老年代的一种机制,以jdk7之后的jvm版本为例,空间分配担保只要保证如下两种情况中的一种,就会认为担保成功,直接进行minor gc,反之进行full gc:历次晋升的平均对象小于老年代剩余最大连续空间总和。新生代存活对象总和小于老年代剩余最大连续空间总和。
2025-04-19 01:07:15
11
转载 MyBatis 核心精要探秘
mybatis是一个半ORM(对象关系映射)框架,它封装了JDBC的,使得我们在开发数据查询的业务代码时可以更加专注的去编写SQL本身,无需手动去创建驱动、建立连接、创建statement等操作,这就使得我们可以非常非常高效完成SQL操作功能,以及调优也非常的方便。当然它也是优缺点的,对于复杂的SQL还是需要自己手动编写,这就对码农SQL功底有着较高的要求了,而且它的SQL语句非常依赖数据库,这就使得可能这个数据库可以用的SQL换一个数据库就不行了。由上面的源码分析我们可知,每一个SQL转换都是通过一个。
2025-04-19 00:57:32
4
转载 MySQL常用编码格式详解utf8、utf8mb4、utf8mb4_unicode_ci 、utf8mb4_0900_ai_ci
在使用MySQL创建数据库时候免不了选择字符集和排序规则,不同的字符集对应不同的排序规则,不同的排序规则的性能和效果是不一样的。一般我们经常使用到的字符集是utf8mb4,使用到的排序规则是utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_0900_ai_ci三种。那么今天就来详细介绍下这几种字符集和排序规则,方便大家今后选用。
2025-04-19 00:41:23
70
转载 架构设计三原则
某创业公司初期采用MySQL分库分表方案而非NewSQL数据库,既控制了成本,又通过简单扩容支撑了业务增长。初创企业优先选择熟悉的技术栈(合适),用CRUD快速实现功能(简单),后续再引入缓存、队列等优化(演进)。:某金融系统初期设计“万能”风控模型,因过度预测未来需求导致开发周期过长,最终因业务变化被迫重构。大型系统在资源充足时(如阿里双十一架构),可适当突破简单性原则,通过分层设计平衡复杂性与扩展性。逻辑简化:遵循KISS原则,例如用定时任务替代实时计算,在准确性要求不高的场景下降低复杂度。
2025-04-19 00:27:49
31
转载 延迟双删如此好用,为何大厂从来不用
本文并非对延迟双删的全盘否定,而是强调在特殊场景下,延迟双删策略的弊端会被放大,进而完全盖过其优势。对于那些业务体量大伴随着流量大的应用系统,必应要从中权衡取舍。每一种策略都仅适配应用系统生命周期的一段。只不过部分企业随着业务发展逐步壮大,其研发基础设施的能力也更完善。从而为系统设计带来诸多便捷,从而使得技术决策变得与中小研发团队截然不同。所以当我们在学习他人经验的过程中,到了落地执行环节一定要结合实际团队背景、业务需求、开发周期与资金预算进行灵活适配。
2025-03-12 23:49:56
176
转载 进阶玩法:策略+责任链+组合实现合同签章
/请求@Data@Builder//响应@Data@Builder定义流程中的请求及响应类,方便处理每个责任链的请求、返回信息。
2025-03-12 23:43:44
36
转载 MyBatis-Plus优化秘籍:15招让你的代码飞起来
代码如烹小鲜,讲究的是精细和用心。MyBatisPlus的这15个优化技巧,何尝不是程序员对代码的一种尊重和雕琢?掌握这些技巧后,你的代码将不再是简单的指令堆砌,而是一首优雅的诗,一曲悦耳的交响乐。它们将像外婆的羊肉汤一样,散发着独特的魅力,让人回味无穷。愿每一位开发者,都能用MyBatisPlus,煮出属于自己的“秘制汤羹”!
2025-03-12 23:41:03
67
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人