自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 程序员不可不知的Linux性能工具

前言在实际开发中,有时候会收到一些服务的监控报警,比如CPU飙高,内存飙高等,这个时候,我们会登录到服务器上进行排查。本篇博客将涵盖这方面的知识:Linux性能工具。一次线上问题排查模拟背景:服务在平稳运行一段时间后,CPU突然飙高。通过top命令,可以确认下,到底是哪个进程导致CPU飙高了(也许是误报呢?)。可以看到图中PID是2816的进程,CPU使用率非常高。使用top -Hp 2816来对进程下的线程进行观察。图中可以发现,2825这个线程CPU非常

2022-01-23 15:22:09 277

原创 深入理解消息中间件技术之RabbitMQ服务

什么叫消息队列?消息(Message)是指在应用间传送的数据。消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管从 MQ 中取消息而不管是谁发布的。这样发布者和使用者都不用知道对方的存在。为何用消息队列?消息队列是一种应用间的异步协作机制,那什么时候需要使用消息队列呢?像用户下单之后、生成订单

2022-01-23 14:14:16 543

原创 架构师才需要知道的知识:如何做容量预估和调优

为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标一开始就要明确定义QPS保障目标,以此来推算所需的服务、存储资源。可根据历史同期QPS,或者平时峰值的2到3倍估算。压测目标示例:qps达到多少时,服务的负载正常,如平均响应时间、95分位响应时间、cpu使用率、内存使用率、消费延迟低于多少 不要让任何一个环节成为瓶颈,需考虑服务实例、数据库、Redis、ES、Hbas

2022-01-22 16:06:18 331

原创 SpringCloud组件:Ribbon负载均衡策略及执行原理

大家好,我是磊哥。今天我们来看下微服务中非常重要的一个组件:Ribbon。它作为负载均衡器在分布式网络中扮演着非常重要的角色。本篇主要内容如下:在介绍 Ribbon 之前,不得不说下负载均衡这个比较偏僻的名词。为什么说它偏僻了,因为在面试中,聊得最多的是消息队列和缓存来提高系统的性能,支持高并发,很少有人会问负载均衡,究其原因,负载均衡的组件选择和搭建一般都是运维团队或者架构师去做的,开发人员确实很少接触到。不过没关系,我们不止有 CRUD,还要有架构思维。简单来说,负载均衡...

2022-01-21 15:18:39 989

原创 Java反射机制实现无关键字执行命令

新建maven项目 + tomcatpom.xml引入servlet<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>代码cmd.jsp&l

2022-01-13 13:42:54 3841

原创 深入理解Java虚拟机之图解Java内存区域与内存溢出异常

Java内存区域与内存溢出异常运行时数据区域程序计数器用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域Java虚拟机栈Java虚拟机栈(Java Virtual Machine Stack)是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方..

2022-01-12 22:08:21 302

原创 Go 分布式令牌桶限流 + 兜底策略

上篇文章提到固定时间窗口限流无法处理突然请求洪峰情况,本文讲述的令牌桶线路算法则可以比较好的处理此场景。工作原理单位时间按照一定速率匀速的生产 token 放入桶内,直到达到桶容量上限。 处理请求,每次尝试获取一个或多个令牌,如果拿到则处理请求,失败则拒绝请求。优缺点优点可以有效处理瞬间的突发流量,桶内存量 token 即可作为流量缓冲区平滑处理突发流量。缺点实现较为复杂。代码实现core/limit/tokenlimit.go分布...

2022-01-12 14:28:15 4436

原创 惊现GitHub~ 腾讯T14级SQL首席专家开源分布式数据库架构实践手册

“软件吞噬世界,开源吞噬软件,云原生吞噬开源”,这是全球技术界流传的三句话。而随着互联网在线业务的蓬勃发展,数据库面临着数据量大、高并发和超高峰值等诸多挑战。分布式数据库已成为业界普遍采用的有效解决方案。给大家带来的这份腾讯T14级SQL首席架构师撰写的“分布式数据库原理、架构与实践”将对分布式数据库核心技术问题进行了深入剖析,阐述了分布式经典理论,揭示了分布式系统一致性本质,详细介绍了解决一致性问题的重要协议和方法;该书还对分布式数据库架构进行了讲解,讨论了如何通过计算/存储分离、智能化和

2022-01-11 14:55:59 1297

原创 简单了解下类加载过程

类加载器什么是类加载器类加载器是java运行环境的一部分,主要负责动态加载Java类到Java虚拟机的内存空间中,学习类加载器需要掌握java的委派原理(双亲委派机制)。Java语言是一种具有动态性的解释语言,类(CLASS) 只有被加载到 JVM 中后才能运行。当运行指定程序时,JVM会将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成为一个完整的Java应用程序。这个加载的过程是由类加载器来完成的,具体来说,就是由ClassLoader和它的子类来实现的。类加载器本身也是

2022-01-11 13:53:32 241

原创 Java中方法重写和方法重载的6个区别?

方法重写(Override)和方法重载(Overload)都是面向对象编程中,多态特性的不同体现,但二者本身并无关联,它们的区别犹如马德华之于刘德华的区别,除了名字长得像之外,其他的都不像。接下来咱们就来扒一下二者的具体区别。1.方法重写方法重写(Override)是一种语言特性,它是多态的具体表现,它允许子类重新定义父类中已有的方法,且子类中的方法名和参数类型及个数都必须与父类保持一致,这就是方法重写。1.1 基本用法方法重写的基本用法如下:/** * 父类中有...

2022-01-11 13:42:30 1083

原创 98年本科,裸辞半年,四面字节终拿字节offer,薪资20+

在21年上半年,大学比我小三届的师弟跟我说,他裸辞了,他说不甘心就在外包呆着,身边的朋友都一个个的进了理想的公司。但自己还在外包呆着他不甘心,也怪自己大学的时候还不够努力(其实挺聪明的),被女朋友哄得团团转(恋爱脑),现在终于悟了。直接裸辞,向自己的目标“字节跳动”进发。这次面试字节跳动他也是做了很多的准备,还好顺利拿到了offer,特地来告诉我。分享一下这次的4面技术面真题,以及一份字节2-2师兄整理的,希望能够给一些正在面试字节或计划面试大厂的朋友提供帮助。字节跳动技术一面讲一下线程参数的.

2022-01-10 23:17:38 340

原创 为什么微服务一定要有API网关?

要知道,采用微服务架构的系统本身是由很多的独立服务单元组合起来的。而客户端要调用系统,则必须通过系统提供的各种对外开放的 API 来实现。微服务不能没有网关,就如同 Java 程序员不能没有IDEA、Eclipse。为什么呢?之所以网关对微服务这么重要,主要有以下几点原因:1. 解决 API 放哪里的问题要知道,采用微服务架构的系统本身是由很多的独立服务单元组合起来的。而客户端要调用系统,则必须通过系统提供的各种对外开放的 API 来实现。问题来了,这些 API 要放在哪里呢?.

2022-01-10 16:16:42 1236

原创 聊聊索引失效的10种场景,太坑了

前言今天咱们更进一步聊聊索引的相关问题,因为索引是大家都比较关心的公共话题,确实有很多坑。不知道你在实际工作中,有没有遇到过下面的这两种情况:明明在某个字段上加了索引,但实际上并没有生效。 索引有时候生效了,有时候没有生效。今天就跟大家一起聊聊,mysql数据库索引失效的10种场景,给曾经踩过坑,或者即将要踩坑的朋友们一个参考。1. 准备工作所谓空口无凭,如果我直接把索引失效的这些场景丢出来,可能没有任何说服力。所以,我决定建表和造数据,给大家一步步演示效果,尽量做到有理有据

2022-01-10 16:03:45 124

原创 是时候让你的程序有点春节的味道了

2022!虎年来了~ 我们来看看作为一个后端开发如何研究下怎么给我们的IDEA 添加点过年滴气氛,像这样:2022 happy✏️springboot自定义banner方式方法1:根路径banner.txt在resources下新建banner.txt文件,并复制banner内容进去,springboot启动启动就会读取该文件进行打印。Spring Boot banner在线生成工具banner.txt内容如下: ████ ████ ████ ████

2022-01-10 16:00:38 459

原创 程序员,你也该懂系统集成之服务集成交互技术——网络协议了吧?

本文给大家讲解的内容是系统集成服务集成交互技术:网络协议;系统集成系统集成是相对拆分而言的,当巨石型应用拆分为细粒度的微服务后,错综复杂的代码可以分解为独立的模块加以治理。然而,传统应用内部原本基于方法的调用方式可能会转变为跨进程的分布式网络调用方式,网络的不可靠性给服务模块之间的交互带来了复杂性。所以,微服务系统的集成对微服务架构能否成功落地至关重要。微服务架构强调基于HTTP的轻量级的服务交互模式,这一章我们将这种基于请求/响应模式的交互模式与RESTful架构结合,介绍微服务“声明

2022-01-10 15:52:49 513

原创 Spring Security 和 Shiro 该如何选择?

要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比ShiroApache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。执行流程图片特点易于理解的 Java Security API; 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,Acti

2022-01-10 15:50:25 106

原创 替代 Postman + Swagger ~Apifox 才是 YYDS

作为一个后端开发者,我做的大部分项目一般都是基于 Swagger 来管理 API 文档,基于 Postman 来做接口调试,基于 JMeter 来做接口性能测试,基于 RAP 等工具 Mock API 数据。我经常在想:“要不要这么麻烦?有没有一款工具能够直接提供这些功能?经常在不同的工具之间切换来切换去真的很烦呢!”。我在网上找了很久,终于让我找到了一款游戏 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台 —Apifox。Apifox 介绍官方对 Apif.

2022-01-10 15:48:29 3095 1

原创 探究Spring的Bean生命周期~~

源码下载本章节源码github什么是 Spring Bean 的生命周期对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。而 Spring 中的对象是 bean,bean 和普通的 Java 对象没啥大的区别,只不过 Spring 不再自己去 new 对象了,而是由 IoC 容器去帮助我们实例化对象并且管理它,我们需要哪个对象,去问 IoC 容器要即可。IoC 其实就是解决对象之间的耦合问题,Sprin..

2022-01-08 20:00:48 110

原创 ThreadPoolExecutor系列之状态详解

状态定义线程池ThreadPoolExecutor有两种属性:运行状态和线程数。线程数很好理解,就是池子中有多少线程;运行状态共有5种,分别是RUNNING:运行中, 为初始状态,即刚创建的线程池就是此状态。SHUTDOWN:停工状态,不再接收新任务,但会继续处理队列中的任务。STOP:停止状态,不再接收新任务,不再处理已有任务,且会中断正在执行的任务。TIDYING:清理中,所有任务都停止了,且线程数量也降为0。TERMINATED,终止状态,钩子函数terminated()已经执行

2022-01-08 19:56:17 1883

原创 IO系列3-详解IO多路复用(select、poll、epoll)

1.重要概念1.1 IO多路复用I/O多路复用在英文中其实叫 I/O multiplexing。就是我们说的select,poll,epoll,有些地方也称这种IO方式为event driven IO事件驱动IO。就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。可以基于一个阻塞对象,同时在多个描述符上等待就绪,而不是使用多个线程(每个文件描述符一个线程,每次new一个线程),这样可以大大节省系统资源。所以,I/O 多路复用的

2022-01-08 19:51:35 862

原创 Java应用在架构设计时该考虑什么

前言最近公司因业务发展需要建设一个新应用,在架构设计时我也有机会能在提供一些建议,这个过程还是比较有趣的,要找到符合业务场景和用户需求的技术,并且要考虑未来的扩展性,相对来说还是比较困难的。涉及到后端、前端、开发规范、运维等多个方面的大量技术内容,为了以后能在类似的工作中变得更容易,我决定在本期内容中进行整理,列出一些在新项目建设时需要考虑的一些问题。提前声明一下,本期内容在大多数问题下只提供一些解决该问题的技术,对于实现细节不是这期内容的重点;可能存在不完整的地方,主要的技术栈为Java;希望

2022-01-08 19:36:37 371

原创 Protobuf 为啥比 JSON、XML 牛?

今天,我带大家更深层次的认识认识 Protobuf,如果你对 Protobuf 的用法还不熟悉,直接前往:developers.google.com/protocol-bu…。当对 Protobuf 有了基本的认识后,就会明白了 Protobuf 序列化的数据会比 JSON、XML 传输效率更高。那为啥会高呢?本篇就带着这个问题一探究竟。看表面对于 JSON、XML,为了便于数据传输时的可阅读性,会保留数据的结构化信息,举个 JSON 例子,如下:{ "name": "laomi

2022-01-08 19:32:00 131

原创 偷天换日,用 JavaAgent 欺骗你的 JVM

熟悉Spring的小伙伴们应该都对aop比较了解,面向切面编程允许我们在目标方法的前后织入想要执行的逻辑,而今天要给大家介绍的Java Agent技术,在思想上与aop比较类似,翻译过来可以被称为Java代理、Java探针技术。Java Agent出现在JDK1.5版本以后,它允许程序员利用agent技术构建一个独立于应用程序的代理程序,用途也非常广泛,可以协助监测、运行、甚至替换其他JVM上的程序,先从下面这张图直观的看一下它都被应用在哪些场景:看到这里你是不是也很好奇,究竟是什么神仙..

2022-01-08 16:38:00 277

原创 为什么?Mybatis的一级和二级缓存都不建议使用?

缓存是在哪起作用的?个人认为mybatis一级缓存和二级缓存并不是一个很好的设计,工作中我基本上也不会使用一级缓存和二级缓存,因为一旦使用不当会造成很多问题,所以我们今天就来看看到底会有什么问题?上一节我们介绍了Executor会调用StatementHandler执行sql,起一个承上启下的作用。Executor的设计是一个典型的装饰者模式,SimpleExecutor,ReuseExecutor是具体实现类,而CachingExecutor是装饰器类。可以看到具体组件实现类有一个

2022-01-08 14:57:09 253

原创 这个 SpringCloud 微服务商城值得推荐

原文链接:https://mp.weixin.qq.com/s/EUPSyL1SIsMDe-W4CXq-sg大家好,我是小锋,今天给小伙伴们推荐一个微信商城;一个基于Spring Cloud、Nacos、Seata、Mysql、Redis、RocketMQ、canal、ElasticSearch、minio的微服务B2B2C电商商城系统,采用主流的互联网技术架构、全新的UI设计、支持集群部署、服务注册和发现以及拥有完整的订单流程等,代码完全开源,没有任何二次封装,是一个非常适合.

2022-01-08 14:53:26 302

原创 Spring Security 和 Shiro 该如何选择?

要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比ShiroApache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。执行流程图片特点易于理解的 Java Security API; 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,Acti

2022-01-08 14:51:04 6276 1

原创 探讨-SpringBoot 热部署神器快速重启的秘密

今天咱们来聊聊这个热部署神器spring-boot-devtools的运行原理,看看它是怎么用这个ClassLoader来实现快速重启,帮我们节省时间的!????文章概要文章的主旋律如下????spring.factories我们直接打开spring-boot-devtools源码 ,找到spring.factories文件:我们一般都本地开发调试的,所以就直接看这个LocalDevToolsAutoConfiguration类啦????LocalDevToo...

2022-01-08 14:47:09 108

原创 业务系统性能问题分析诊断和性能优化怎么做?

- 前言 -今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。系统性能问题分析流程我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际上潜在的场景主要来自于以下几个方面。 业务出现大并发的访问,导致出现性能瓶颈 上线后的系统数据库数据日积月累,数据量增加后出现性能瓶颈 其它关键环境改变,比如我们常说的网络带宽影响...

2022-01-07 21:57:29 297

原创 7000字和你聊聊如何设计一款高并发架构(快快收藏)

高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。服务器架构业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。一个可以支持高并发的服务少不了好的服

2022-01-07 21:44:47 166

原创 String 既然能做性能调优,我直呼内行

码哥,String 还能优化啥?你是不是框我?莫慌,今天给大家见识一下不一样的 String,从根上拿捏直达 G 点。并且码哥分享一个例子:通过性能调优我们能实现百兆内存轻松存储几十 G 数据。String对象是我们每天都「摸」的对象类型,但是她的性能问题我们却总是忽略。爱她,不能只会简单一起玩耍,要深入了解String的内心深处,做一个「心有猛虎,细嗅蔷薇」的暖男。通过以下几点分析,我们一步步揭开她的衣裳,直达内心深处,提升一个 Level,让String直接起飞:字...

2022-01-07 21:13:49 110

原创 Java应用在架构设计时该考虑什么

前言最近公司因业务发展需要建设一个新应用,在架构设计时我也有机会能在提供一些建议,这个过程还是比较有趣的,要找到符合业务场景和用户需求的技术,并且要考虑未来的扩展性,相对来说还是比较困难的。涉及到后端、前端、开发规范、运维等多个方面的大量技术内容,为了以后能在类似的工作中变得更容易,我决定在本期内容中进行整理,列出一些在新项目建设时需要考虑的一些问题。提前声明一下,本期内容在大多数问题下只提供一些解决该问题的技术,对于实现细节不是这期内容的重点;可能存在不完整的地方,主要的技术栈为Java;希望

2022-01-04 16:10:56 1673

原创 一篇文章彻底讲明JDBC

1. 啥是 JDBC ?JDBC 全称:Java DataBase Connection复制代码意思就是使用 java 代码连接数据库。但是问题来了,世界上有一堆数据库例如 Mysql、Oracle、mongodb 等,他们的使用方法都不太一样。难道我要连不同的数据库就需要写不同的 java 程序吗?这也太麻烦了。为了解决这个问题,SUN 公司(开发JDK的公司)就决定指定一套接口,这套接口就是使用 java 连接数据库的规范,其实就是 JDBC。而 JD...

2022-01-04 16:09:30 124

原创 白话linux操作系统原理

虽然计算机相关专业,操作系统和计算机组成原理是必修课。但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化。还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解也不深。所以今天我站在真正排查解决问题时的需要层面,用白话说一说linux操作系统的那些知识。本文整体采用的是类似递归调用的递进式结构。linux内核的本质简单来说如上图所示,咱们平时的应用程序或者linux命令要和操作系统打交道,都要经过一个叫做linux内核的软件。所有的硬件操作都需要通过他。就像古代女子出

2022-01-04 16:06:30 120

原创 单点登录(SSO)看这一篇还不够~ 这次不慌了

阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。但cookie是有限制的,这个限制就是cookie的域(通常对应网站的域名),浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie 既然这样,为什么不将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后...

2022-01-04 16:04:47 4059

原创 加权轮询算法(wrr),这个考点,概率有点高

朝不同往昔,卖惨成为主流旋律,也加剧了从业人员的焦虑。很多人,工作了十来年没碰过算法,如今却不得不像蹲自习室一样,捧起大头书死命去看。呜呼哀哉。最近和不少参加面试的小伙伴交流了一下,发现出现了一个比较高频的算法题。不同于链表、树、动态规划这些有规律可循的算法题,加权轮询算法有很多小的技巧,在实际应用中也比较多。最平滑的Nginx轮询算法,如果你没有见过的话,那自然是永远无法写出来的。所谓的加权轮询算法,其实就是Weighted Round Robin,简称wrr。在我们配置Nginx的upstr

2022-01-04 16:02:00 1181

原创 「技术原理」Spring Security的核心功能和加载运行流程的原理分析

SpringSecurity的架构总览Spring Security的简介说明Spring Security对认证、授权和常见漏洞保护提供了全方位支持。使用的版本为:Spring Security 5.5.2。概念释义认证(Authentication):认证就是对试图访问资源的用户进行验证。认证的场景就是 登录 流程,常见的方式就是要求提供用户名和密码,当验证通过的时候,就可以执行授权操作。 授权(Authority):授权就是对资源进行权限设置,只有用户具备相应权限...

2022-01-04 15:59:00 295

原创 连接字符串除了“+”还有哪些方法,进来看

在Java中进行字符串连接有各种方法,但是如果在进行连接时,如果我们不注意空对象,那么最后的结果可能会包含不是我们预期的值。在本期内容中,我讲给大家讲述一些在连接字符串时处理空字符串对象的方法。存在的问题假设我们要对一个字符串数据中的元素进行连接,数组中的元素有可能为空,我们先用“+”进行简单的拼接:String[] values = { "小黑 ", null, "", "说 ", "Java!" };String result = "";for (String value...

2022-01-04 15:57:01 327

原创 Java锁与非阻塞算法的性能比较与分析+原子变量类的应用

15.原子变量与非阻塞同步机制在java.util.concurrent 包中的许多类, 比如Semaphore 和ConcurrentLinkedQueue, 都提供了比使用Synchronized 更好的性能和可伸缩性. 本部分将介绍这种性能提升的利器:原子变量和非阻塞的同步机制.近年来很多关于并发算法的研究都聚焦在非阻塞算法 (nonblocking algorithms),这种算法使用底层的原子机器指令取代锁 ,比如比较并交换 (compare-and-swap),从而保证数据在并.

2022-01-04 15:55:40 137

原创 一口气怼完12种@Transactional的失效场景

数据库事务是后端开发中不可缺少的一块知识点。Spring为了更好的支撑我们进行数据库操作,在框架中支持了两种事务管理的方式:编程式事务 声明式事务日常我们进行业务开发时,基本上使用的都是声明式事务,即为使用@Transactional注解的方式。常规使用时,Spring能帮我们很好的实现数据库的ACID(这里需要注意哦,Spring只是进行了编程上的事务,最终数据上的事务还是有数据库实现的)。但是,只要是人写的代码,就一定会有Bug。如果我们不了解@Transaction...

2022-01-04 15:53:45 292

原创 Protobuf 为啥比 JSON、XML 牛?

今天,我带大家更深层次的认识认识 Protobuf,如果你对 Protobuf 的用法还不熟悉,直接前往:developers.google.com/protocol-bu…。当对 Protobuf 有了基本的认识后,就会明白了 Protobuf 序列化的数据会比 JSON、XML 传输效率更高。那为啥会高呢?本篇就带着这个问题一探究竟。看表面对于 JSON、XML,为了便于数据传输时的可阅读性,会保留数据的结构化信息,举个 JSON 例子,如下:{ "name": "laomi

2022-01-04 15:51:35 205

空空如也

空空如也

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

TA关注的人

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