![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
技术整理
文章平均质量分 94
黄老师-
这个作者很懒,什么都没留下…
展开
-
简单聊聊限流(Sentinel vs Hystrix ;滑动窗口 vs 漏桶 vs 令牌桶)
文章目录1、限流需求场景2、Sentinel vs Hystrix3、Sentinel功能介绍3.1、如何使用3.2、关于隔离的设计3.3、业务实践分享4、限流算法分析4.1、滑动窗口算法4.2、漏桶算法4.3、令牌桶算法4.4、三者对比1、限流需求场景(本文主要讲述服务端限流,不涉及客户端和网关限流策略)大家经常会在2C互联网公司的技术场景上听到高并发,说到限流、熔断、降级。其实,在2B领域同样也用“限流、熔断、降级”。任何生产级的平台型系统,线上稳定性都是生命线,都要防范于未然。.原创 2021-02-10 20:55:35 · 2941 阅读 · 6 评论 -
剖析LinkedHashMap 和 LRU实现的种种
文章目录1、LinkedHashMap数据结构2、LinkedHashMap知识要点2.1、LinkedHashMap构造方法的accessOrder参数2.2、LinkedHashMap在HashMap基础上额外维护一个双向链表2.3、put(key, value)新增数据时2.4、get(key)访问数据时3、实现一个LRU3.1、LinkedHashMap是天生的LRU3.2、线程安全的LRU3.3、可以设置过期时间的LRU3.4、Guava怎么做的1、LinkedHashMap数据结构一图便原创 2021-01-31 23:10:29 · 433 阅读 · 0 评论 -
从MySQL事务和故障恢复角度,清晰弄懂 Undo log、Binlog、Redo log的作用和原理
文章目录1、从MySQL的WAL说起2、再说说Crash-Safe3、三大核心日志模块4、两阶段提交5、组提交6、"双1"设置7、崩溃与数据恢复流程8、Bin log vs Redo log9、附录9.1、MySQL执行架构9.2、Redo log文件格式9.3、Binlog写入机制1、从MySQL的WAL说起WAL技术:全称“Write-Ahead Logging”技术关键思路:内存里修改,先写日志,再写磁盘。【问题】:为什么不直接更改磁盘中的数据,而要在内存中更改,然后还需要写日志,最后原创 2021-01-31 16:12:01 · 1939 阅读 · 7 评论 -
一文掌握MySQL锁机制(共享锁/排他锁/意向锁/间隙锁/临键锁等)
文章目录1、数据库为什么要有锁机制2、锁的分类3、锁详细介绍3.1、表-共享锁(S)3.2、表-排他锁(X)3.3、表-自增锁(Auto-Inc Lock)3.4、行 - 记录锁(Record Lock)3.5、表 - 意向共享锁(IS)/ 意向排他锁(IX)3.6、行 - 间隙锁(Gap Lock)3.7、行 - 临键锁(Next-Key Lock)3.8、行 - 插入意向锁(Insert Intention Lock)3.9、总结-要点4、对应SQL场景5、锁与事务的关系6、死锁和死锁检测处理6.1、死原创 2021-01-30 18:19:19 · 1052 阅读 · 2 评论 -
三目运算类型取值原则(避坑)
在云笔记无意翻到这个N年前的小笔记,挺有意思的。PO一下### 三目运算语法:源于某次帮团队成员看NPE问题的梳理:String result = 100 < a ? "可以" : null ;orint pos = 10;Integer up = null;Integer v = 100 < a ? pos : up; 《《《《 运行结果是什么?NPE哦1、三目运算第二部分和第三部分类型一样,那么返回结果的类型也一样2、三目运算第二部分和第三部分,.原创 2021-01-24 21:28:24 · 1052 阅读 · 0 评论 -
【精】元数据驱动SaaS 架构的技术思考
引言作为业务系统技术开发同学,面向当下: 首先应该是快速搭建业务通路,让线上业务跑起来,快速试错,解决生存问题; 第二步是在链路畅通、业务基本跑起来的基础上,如何支撑业务跑得更快,就需要解决快速增长问题; 第三步,在完成支撑业务快速增长的基础上,要进行精细化提升,通过在支撑业务快跑间隙挤时间打磨系统功能和体验,踏踏实实花时间去抽象能力,沉淀产品,提升效能; 同时我们也必须面向未来,如何在抽象能力以及沉淀了产品的基础上,把所承载和沉淀的业务能力...原创 2021-01-24 15:09:54 · 1027 阅读 · 0 评论 -
元数据驱动的业务表单定制中心 思想和实践介绍
文章目录1、业务开发中常见需求本质2、元数据驱动的思想3、表单中心架构图4、表单元数据5、具体实现分解5.1、表单基础服务5.2、表单SDK5.3、应用场景:独立页面 + 自定义扩展逻辑5.4、应用场景:嵌入其他页面 + 操作联动5.5、表单数据检索/分析需求5.6、表单数据校验需求6、业界方案对比6.1、相比 纷享销客6.2、相比 阿里宜搭7、表单中心的难点1、业务开发中常见需求本质尤其是在2B的系统中,表单功能会非常常见。从一套被设计被定义的数据模型开始(业务对象)编写基于业务对象的各类操作原创 2021-01-23 21:28:15 · 1460 阅读 · 2 评论 -
RocketMQ的关键知识笔记
6种消息类型普通消息顺序消息广播消息延时消息批量消息事务消息2种消费模式集群消费:一个Group ID内只消费一次广播消费:一个Group ID内所有Consumer都消费部署架构Name Server + broker(主/备) + producer + consumer【broker】与所有Name Server建立长连接【producer】与某个Name Server建立连接,查询topic所在broker,并与broker master建立连接【consu原创 2021-01-09 21:41:04 · 234 阅读 · 0 评论 -
ThreadLocal内存泄露知识点详解
ThreadLocal内存泄露详解1、ThreadLocal常规用法public class ThreadLocal<T> { public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> supplier); public void set(T value); public T get(); public void remove()原创 2021-01-09 16:48:18 · 320 阅读 · 1 评论 -
手把手教你Java字节码Demo
手把手教你Java字节码Demo接触中间件的开发来说,了解像Pinpoint(https://github.com/naver/pinpoint)、BTrace(https://github.com/btraceio/btrace)、阿里的JVM-SANDBOX(https://github.com/alibaba/jvm-sandbox)、Java在线问题诊断工具Greys(https://github.com/oldmanpushcart/greys-anatomy)等,都是通过字节码技术,无侵入的干原创 2021-01-01 17:26:59 · 431 阅读 · 1 评论 -
CGLIB中的常用API
CGLIBCGLIB,即Code Generation Library,是一个开源项目。Github地址:https://github.com/cglib/cglib。CGLIB的github简介:CGLIB - 字节码生成库,是用于生成和转换Java字节码的高级API。它被AOP、测试、数据访问框架用于生成动态代理对象和拦截字段访问。CGLIB提供两种类型的JAR包:cglib-nodep-x.x.x.jar:使用nodep包不需要关联ASM的jar包,jar包内部包含ASM的类库。cglib原创 2020-12-31 14:30:10 · 351 阅读 · 0 评论 -
slf4j MDC是个好东西
slf4j MDC是个好东西简介MDC 全拼 Mapped Diagnostic Contexts,是SLF4J类日志系统中实现分布式多线程日志数据传递的重要工具。同时,用户也可利用MDC将一些运行时的上下文数据打印出来。什么意思呢?常规情况下,写打日志的代码时,一般都是log.info、log.warn、log.error将想要打的日志进行拼装和格式化,打到日志输出中。MDC能干什么呢?能在不改动log.xxx打日志代码的情况下,在最终的日志输出的指定位置打印额外的信息。而这,就是靠MDC进行原创 2020-12-19 20:26:57 · 1920 阅读 · 2 评论 -
Java 生成随机数的 5 种方式
先说结论试测数据:基于常见场景:在一个数据范围区间内生成随机数。1000万的随机数范围,for循环生成50万个随机数。无其他额外操作。SDK包性能耗时评价java.util.Random9毫秒1、编写简单,方法较多,也快速。很多SDK包都基于此扩展。2、随机性重度依赖seed的情况,seed一样,分配的随机数和顺序一样。3、线程不安全。ThreadLocalRandom8毫秒1、继承于java.util.Random2、与线程绑定,一个线程一个,多线程下安原创 2020-12-16 15:11:27 · 749 阅读 · 0 评论 -
你不得不知的Spring事务失效 8 大原因
文章目录1、数据库引擎不支持事务2、没有被 Spring 管理3、方法不是 public 的4、类内部自身调用问题5、数据源没有配置事务管理器6、不支持事务7、异常被吃了8、异常类型错误1、数据库引擎不支持事务这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。根据 MySQL 的官方文档:https://dev.mysql.com/doc/refman/5.5/en/storage-engine-sett原创 2020-12-15 23:25:30 · 317 阅读 · 0 评论 -
分布式系统 之 分布式事务问题
分布式系统 之 分布式事务问题1、你怎么分享分布式事务?分布式事务问题是分布式系统绕不开的技术话题。“谈谈你对分布式事务的理解”、“分享下你团队在分布式事务上的解决方案”、“你用过哪几种分布式事务的中间件”?在技术交流/面试中很容易讨论到这些个话题,得到的反馈大概率是这样的:“额~~ ~~ ~~ ~~”,一时语噻 《《《 平时没有梳理和认知分布式事物的问题,一时不知如何组织语言。“我们没有使用分布式事务”《《《 分布式事务裸奔状态。“我知道有CAP和BASE理论,分别是XXX意思” 《《《原创 2020-11-29 18:29:42 · 2009 阅读 · 1 评论 -
Mybatis实现框架解读
SQL 执行代码路径Mybatis 层次结构Mybatis 抽象架构原创 2020-11-18 21:59:14 · 97 阅读 · 0 评论 -
【精】一文就明白 并发编程/多线程
《一文就明白Java并发编程》一文系列 之 并发编程。行文3万余字,包含了多线程方方面面的知识点,相信对你会有所帮助!黄老师文章目录《一文就明白Java并发编程》1、进程&线程2、JUC并发包2.1、JUC包介绍2.2、Atomic原子类2.2.1、Atomic原子类的细分2.2.2、Atomic原子类的实现原理2.3、JUC包中的锁2.3.1、顶层抽象类:AbstractQueuedSynchronizer(AQS)2.3.2、顶层抽象类:AbstractOwnableSynchr原创 2020-11-15 13:03:38 · 501 阅读 · 0 评论 -
JVM实战 之 一次内存溢出排查经历
源于线上应用事件某天团队同学收到线上系统报警,web-abc真线有一台机down掉了。为保留事故现场,做剩余应用做了dump。然后开始分析问题排查1、 经过对线上出问题周期内的应用日志逐条排查,未发现明显异常。2、分析当时的dump快照,发现有两个类的实例数和总大小异常,这两个类是跟poi解析excel有关!这个很关键。3、再翻事发时间的真线日志,有所发现,16点11分51秒的时候,确实有流量请求一个上传excel的接口4、对比常规接口的日志,事发情况下,只有start没有finish原创 2020-10-15 23:09:11 · 367 阅读 · 0 评论 -
【精】一文就让你精通JVM
《一文就让你精通JVM》网上有关JVM的知识贴多如牛毛,其中有纷杂的零碎知识贴,也有整理优秀的长贴。信息量非常充分。但作为复习或整理JVM知识的而言,还可以有更好的学习用户体验和高效的方式。因此,就想尝试写一篇有关JVM知识点的“秘籍”,让初学者仅读此文就能快速精通JVM的知识脉络以及关键知识,也能让复习着快速反查知识和经验之谈。黄老师文章目录《一文就让你精通JVM》1、背景知识铺垫1.1、JRE、JVM、JDK1.2、HotSpot Client/Server模式2、JVM体系结构2.1、Cla原创 2020-10-04 22:55:02 · 736 阅读 · 0 评论 -
java中方法不要写太长的真正原因
java中一般建议一个方法不要写的过长,不方便维护和阅读是其中的一个原因,但是其真正性能的原因大家知道吗?我们知道,JVM一开始是以解释方式执行字节码的。当这段代码被执行的次数足够多以后,它会被动态优化并编译成机器码执行,执行速度会大大加快,这就是所谓的JIT编译。hotsopt源码中有一句if (DontCompileHugeMethods && m->code_size() > HugeMethodLimit) return false;当DontCompileHu转载 2020-10-03 22:53:31 · 1022 阅读 · 0 评论 -
Java 三目运算的类型取值原则
1、三目运算第二部分和第三部分类型一样,那么返回结果的类型也一样2、三目运算第二部分和第三部分,其中一个是原始类型T,一个是原始类型的装箱。那么返回结果的类型是原始类型T。即对象会做自动拆箱。3、三目运算的第二部分和第三部分,其中一个是null,另外一个是对象。那么返回结果的类型是对象的类型。...原创 2020-09-24 21:48:00 · 243 阅读 · 0 评论 -
Java反射为什么性能差
解释反射内部是使用Unsafe这种JNI API的。JVM无法预知JNI的行为带来的影响,就把很多优化隔绝了。而非反射方式的代码,JVM经常会做很多优化和JIT,所以性能影响还是蛮大的。反射,将Java加载期该做的事情,延后到了运行期做。相比来说,做的事情也更多。例如:安全检查,访问控制反射的缺点相比非反射的代码,性能开销大。反射尤其不能用在执行频率高的代码段。曝光了Class的内部实现。破坏了Class不想公开的信息内容的设计。反射功能在运行时,会涉及要求更多的权限。对原创 2020-09-24 21:45:21 · 3210 阅读 · 0 评论 -
Jar包原理解读
可执行jar包 与 不可执行jar包我的理解:差别在于有没有引导文件,即main方法。靠运行main主(线程)方法去联动其他方法、业务。部分jar包并非加个引导文件main方法就能运行的,需要考虑到这个jar对于容器、环境等方面的依赖。Maven默认打的包是不可被执行的在SpringBoot的代码工程pom.xml中,靠依赖如下插件,实现将SpringBoot代码工程打成SpringBoot风格的可执行Jar包。<plugin> <groupId>原创 2020-09-24 21:42:17 · 1842 阅读 · 0 评论 -
Spring数据库原理 之 事务管理
知识点分解核心类对象对象一句话介绍PlatformTransactionManagerSpring事务的核心底层interface,定义了事务核心方法AbstractPlatformTransactionManagerSpring标准事务处理流程的抽象基类,定义了Spring事务处理框架TransactionDefinition事务属性相关。事务隔离级别;超时;传播行为;等TransactionStatus事务实例状态对象,可供查询,用于回滚、SavePoi原创 2020-09-23 09:15:52 · 162 阅读 · 0 评论 -
Spring数据库原理 之 DataSource
DataSource引言用Spring进行Web应用开发时,我们经常会做datasource的配置。而且datasource的配法风格各异。那么他们到底有哪些异同点呢?DataSource作用DataSource是javax.sql包中的类,是Java原生rt.jar包中的类。public interface DataSource extends CommonDataSource, Wrapper { Connection getConnection() throws SQLExce原创 2020-09-23 09:13:56 · 8482 阅读 · 1 评论 -
Dubbo源码解析 之 Consumer启动
Dubbo Consumer的启动过程和Provider一样,以DubboNamespaceHandler为起点,去解析代码配置中的ReferenceBean。public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean, ApplicationContextAware, InitializingBean, DisposableBean {ReferenceBean同样既继承.原创 2020-09-23 09:11:03 · 207 阅读 · 0 评论 -
[翻译] REST API必须是超文本驱动的
原文地址:Roy T. Fielding: REST APIs must be hypertext-drivenI am getting frustrated by the number of people calling any HTTP-based interface a REST API. Today’s example is the SocialSite REST API. That is RPC. It screams RPC. There is so much coupling on di原创 2020-09-23 09:08:54 · 192 阅读 · 0 评论 -
RESTful API命名实践
文章目录引言REST 的诞生Web 技术发展REST 的诞生REST 详解REST 架构风格解读 REST1. 资源(Resources)2. 表现层(Representation)3. 状态转化(State Transfer)4. 综述REST 与 RESTfulREST 风格优点REST实践体会1. URI命名难度变大2. 用不用HTTP PATCH引言在互联网高度普及的今天,作为一名Web开发者,如果你还没听说过“REST”这个技术名词,出门都不好意思跟人打招呼。尽管如此,对于REST这个泊来品的原创 2020-09-23 09:07:20 · 597 阅读 · 0 评论 -
MySQL 之 索引合并
历史背景MySQL 5.0版本之前,一个表一次只能选择并使用一个索引。MySQL 5.1版本开始,引入了Index Merge Optimization技术,使得MySQL支持一个表一次查询同时使用多个索引。官方文档:MySQL Index Merge OptimizationIndex Merge Optimization支持三种合并算法The Index Merge Intersection Access Algorithm对应SQL 中的 AND 场景The Index Merg原创 2020-09-23 09:05:33 · 1126 阅读 · 0 评论 -
Dubbo源码解析 之 Provider暴露服务
文章目录前言ServiceBean核心流程doExportUrlsFor1Protocol(ProtocolConfig protocolConfig, List registryURLs) 是真正执行export暴露服务的代码区DubboProtocol#Export核心流程DubboProtocol核心数据Dubbo Service是哪个时机注册到注册中心的?Netty ServerServiceConfig作用(见代码注释)Dubbo 启动ServiceBean实例化Export暴露服务前言Dub原创 2020-09-23 08:58:43 · 338 阅读 · 0 评论 -
服务端业务处理不成功,应该返回HTTP 200 还是 HTTP 4XXX系列?
场景其实,纠结只出现在例如保存表单的场景,如果服务端因各种业务上的原因(校验不通过,状态不满足等)导致保存未成功,并要返回对应的提示信息,此时服务端回应此HTTP 请求时,是用 “200 + json” 还是用“400 + 错误信息”?在公司内不同项目间,两种风格都有,且小伙伴们各执己见。我这么看首先,我先表达我赞同“200 + json”的方式。更具体些,服务端所有的Controller Method对返回值做统一的Response包装样例1:{ "code": 200, "d原创 2020-09-22 23:03:15 · 1653 阅读 · 0 评论 -
Dubbo源码解析 之 Spring Bean注册
相信大家对于Dubbo Provider/Consumer的配置非常熟练,但这背后的实现原理清楚吗?如果有不太清楚的朋友,可以再往下阅读下。知识点自定义 Spring XML Bean机制背景据我们所知Spring 注解方式声明Bean的方式是在Class上打上@Component注解(@Component的扩展注解也可),当Spring容器启动时,Spring会自动扫面所有带有@Component注解的Class,自动注册到Bean容器中。例如:@Componentpublic cl原创 2020-09-22 23:01:00 · 735 阅读 · 0 评论 -
Dubbo源码解析 之 Dubbo可以这么学
最近面试工作颇多,Dubbo作为的微服务主流技术架构,也是分布式系统中面试的高频考题之一。但从面试的过程中得到的反馈,大家对于Dubbo的关注以及掌握程度基本都处于会基本使用的程度,基本没遇到有对Dubbo框架做学习研究的求职者。求职者一般只会聊下面两个话题:Dubbo 是什么东西?答:RPC框架/微服务框架,在实际工作中用Dubbo做业务功能服务化。Dubbo的工作原理是什么样的?答:Provider端将服务注册到Zookeeper中,Consumer端从Zookeeper获取Prov原创 2020-09-22 22:59:13 · 130 阅读 · 0 评论 -
Netty 核心对象梳理-1
《Netty In Action》阅读笔记摘要What is NettyNetty是一款用于快速开发高性能的网络应用程序的Java框架它封装了网络编程的复杂性Key words:是一款Java语言的开发框架封装、提供程序快速网络编程的能力高性能Netty是完全异步和事件驱动的Netty 核心组件ChannelChannel 是Java NIO的一个基本构造可以将Channel 看作是连接的载体。因此,它可以被打开、被关闭、连接、断开连接。事件Channel连接上发生的原创 2020-09-22 22:55:35 · 165 阅读 · 0 评论