自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(377)
  • 收藏
  • 关注

原创 想要深入理解分布式事务,看这篇就足矣

随着业务的快速发展,业务复杂度越来越高,大部分互联网公司几乎都会从单体走向分布式,特别是转向微服务架构,随之而来就必然遇到分布事务这个难题。

2022-03-17 21:22:00 648

原创 你知道什么叫金丝雀分布吗?你知道如何在Service Mesh微服务架构中实现吗?

什么是金丝雀发布既然要聊具体的实现,那么在开始之前,先科普下什么是“金丝雀发布”。金丝雀发布也叫**“灰度发布”**,具体来说就是在发布线上版本时,先将少量的生产流量打到服务的新版本,以验证新版本的准确性和可靠性,待发布的新版本得到线上流量的全面验证后,在逐步将所有流量放入新版本,以实现生产服务版本的稳定更新。为什么叫金丝雀发布呢,是因为金丝雀对矿场中的毒气比较敏感,所以在矿场开工前工人们会放一只金丝雀进去,以验证矿场是否存在毒气,这便是金丝雀发布名称的由来。在不同技术栈场景中,金丝雀发布的实现.

2021-11-11 22:16:44 543

原创 三分钟带你初步了解Service Mesh开源实现之Istio架构

Istio中的关键概念要学习Istio需要先明确以下几个关键术语。1.容器/容器镜像进入到云原生时代的服务网格架构,应用的发布、部署都是围绕Kubernetes为代表的容器基础设施展开的。这就需要对容器及容器镜像的概念有清晰的理解。实际上,容器的普及要归功于Docker技术的流行,而从本质上说容器就是运行在操作系统中的,受资源隔离限制的一组进程,也称为**“容器运行时”**。它可以将用户打包的代码及其所赖的关系完整的还原出来。通过容器化运行的应用程序,可以更快、更可靠地运行,而不受具体计算环境的影.

2021-10-15 21:20:03 436

原创 你知道近来年大火的DDD是如何兴起的吗?以及与微服务的关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DshedVsA-1634217530084)(https://upload-images.jianshu.io/upload_images/15462057-f0aa9a5e2e43746e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]DDD为什么能火起来?我们先不讨论DDD的定义,先梳理一下DDD火起来的背景,根据我学习的套路,永远是为什么为先,再是解决什

2021-10-14 21:28:15 204

原创 简述Kubernetes容器日志收集原理!

概述关于容器日志Docker的日志分为两类,一类是Docker引擎日志;另一类是容器日志。引擎日志一般都交给了系统日志,不同的操作系统会放在不同的位置。本文主要介绍容器日志,容器日志可以理解是运行在容器内部的应用输出的日志,默认情况下,docker logs显示当前运行的容器的日志信息,内容包含 STOUT(标准输出)和STDERR(标准错误输出)。日志都会以json-file的格式存储于 /var/lib/docker/containers/<容器id>/<容器id&gt.

2021-06-25 17:11:07 360 2

原创 你知道什么是CI/CD吗?不懂?五分钟让你彻底理解!

在CI/CD和DevOps领域中,持续交付和持续部署是一个老生常谈的话题。持续集成这个术语最早是在1994年由Grady Booch提出。微服务提出者Martin Flower在2014年发表的论文《Microservice》中也对软件开发持续集成提供了可参考原则。持续集成是借助工具对软件项目进行持续的自动化的编译打包构建测试发布,来检查软件交付质量的一种行为。而持续部署是基于持续交付的优势自动将经过测试的代码推入生产环境的过程。下文从细节描述了持续集成和持续部署各阶段的关键步骤。本文将探讨CI(持..

2021-06-17 15:06:10 907

原创 面试中你有遇到这些Spring Cloud常问题吗?知道如何完美解答吗?

为什么需要学习Spring Cloud不论是商业应用还是用户应用,在业务初期都很简单,我们通常会把它实现为单体结构的应用。但是,随着业务逐渐发展,产品思想会变得越来越复杂,单体结构的应用也会越来越复杂。这就会给应用带来如下的几个问题:**代码结构混乱:**业务复杂,导致代码量很大,管理会越来越困难。同时,这也会给业务的快速迭代带来巨大挑战;**开发效率变低:**开发人员同时开发一套代码,很难避免代码冲突。开发过程会伴随着不断解决冲突的过程,这会严重的影响开发效率;**排查解决问题成本高.

2021-06-15 15:46:56 265

原创 风水轮流转,三年前因迟到被主管骂退,三年后我竟面试了我的主管

都说三十年河东,三十年河西,一时运气不好不要紧,风水轮流转,总有一天好运会转到自己头上。一个被幸运之神眷顾的网友就分享了自己的经历:曾经当过一个产品组组长,组里有5名小伙伴,跟大家相处很好。有一天自己上班迟到了25分钟,被上级当着组内所有小伙伴大骂一顿,骂得很难听,自己当晚就提了离职。谁能想到三年后的一天,现公司HRBP推过来一个简历,打开一看,竟然是之前骂过自己的那个主管!楼主问大家:要面他吗?会不会尴尬?看了楼主的经历,小编只想说,大千世界无奇不有,这就是猿粪啊!有网友说,这不就是赘婿的现实版

2021-06-11 15:51:04 235 1

原创 必收藏干货!Kubernetes集群搭建超详细总结(CentOS版)

学习Kubernetes的关键一步就是要学会搭建一套k8s集群。在今天的文章中作者将最近新总结的搭建技巧,无偿分享给大家!废话不多说,直接上干货!01、系统环境准备要安装部署Kubernetes集群,首先需要准备机器,最直接的办法可以到公有云(如阿里云等)申请几台虚拟机。而如果条件允许,拿几台本地物理服务器来组建集群自然是最好不过了。但是这些机器需要满足以下几个条件:要求64位Linux操作系统,且内核版本要求3.10及以上,能满足安装Docker项目所需的要求;机器之间要保持网络互通,这.

2021-06-02 15:44:31 1122

原创 在数据库分库分表之后,你该如何解决事务问题?

一、概述随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进行拆分到多个数据库中的多张表中。本篇文章是基于非事务消息的异步确保的方式来完成分库分表中的事务问题。二、需要解决问题2.1 原有事务由于分库分表之后,新表在另外一个数据库中,如何保证主库和分库的事务性是必须要解决的问题。解决办法:通过在主库中创建一个流水表,把操作数据库的逻辑映射为一条流水记录。当整个大事务执行完毕后(流水被插入到流水表),然后通过其他方式来执行这段流.

2021-05-30 17:04:51 566 3

原创 你知道为什么要选择B+树作为数据库索引结构?谈谈你的理解

背景首先,来谈谈B树。为什么要使用B树?我们需要明白以下两个事实:【事实1】不同容量的存储器,访问速度差异悬殊。以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的。有个形象的比喻,若一次内存访问需要1秒,则一次外存访问需要1天。所以,现在的存储系统,都是分级组织的。最常用的数据尽可能放在更高层、更小的存储器中,只有在当前层找不到,才向更低层、更大的存储器中寻找。这也就解释了,当处理大规模数据的时候(指无法将数据一次性存入内存),算法的实际运行时间,往往取决于数据在不同存储.

2021-05-27 14:00:43 275

原创 Netty面试常驻题:你知道Netty的零拷贝机制吗?

理解零拷贝 零拷贝是Netty的重要特性之一,而究竟什么是零拷贝呢?WIKI中对其有如下定义:“Zero-copy” describes computer operations in which the CPU does not perform the task of copying data from one memory area to another.从WIKI的定义中,我们看到**“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。**而它通常是指计算机在网络上发.

2021-05-25 16:23:28 227 2

原创 中高级面试常驻题:简单说下Java面向对象设计的六大原则

这篇文章主要讲的是面向对象设计中,我们应该遵循的六大原则。只有掌握了这些原则,我们才能更好的理解设计模式。我们接下来要介绍以下6个内容。单一职责原则——SRP开闭原则——OCP里式替换原则——LSP依赖倒置原则——DIP接口隔离原则——ISP迪米特原则——LOD单一职责原则单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情。如果一个类负责了方法M1,方法M2两个不同的事情,当M1方法发生变化的时候,我们需要修改这个类的M1方法,但是这个时候.

2021-05-20 14:19:45 169

原创 你真的懂并发吗?谈谈对JUC线程池ThreadPoolExecutor的认识吧

前提很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章。之前在分析扩展线程池实现可回调的Future时候曾经提到并发大师Doug Lea在设计线程池ThreadPoolExecutor的提交任务的顶层接口Executor只有一个无状态的执行方法:public interface Executor { void execute(Runnable command);}而ExecutorService提供了很多.

2021-05-18 14:35:43 171

原创 Java序列化素质三连:是什么?为什么需要?如何实现?

遇到这个 Java Serializable 序列化这个接口,我们可能会有如下的问题什么叫序列化和反序列化作用,为啥要实现这个 Serializable 接口,也就是为啥要序列化serialVersionUID 这个的值到底是在怎么设置的,有什么用。有的是1L,有的是一长串数字,迷惑ing。我刚刚见到这个关键字 Serializable 的时候,就有如上的这么些问题。在处理这个问题之前,你要先知道一个问题,这个比较重要。这个Serializable接口,以及相关的东西,全部都.

2021-05-17 14:49:23 174

原创 Java四种引用类型原理你真的搞明白了吗?五分钟带你深入理解!

Java中一共有4种引用类型(其实还有一些其他的引用类型比如FinalReference):强引用、软引用、弱引用、虚引用。其中强引用就是我们经常使用的Object a = new Object(); 这样的形式,在Java中并没有对应的Reference类。本篇文章主要是分析软引用、弱引用、虚引用的实现,这三种引用类型都是继承于Reference这个类,主要逻辑也在Reference中。问题在分析前,先抛几个问题?1.网上大多数文章对于软引用的介绍是:在内存不足的时候才会被回收,那内存不足是怎.

2021-05-13 14:42:56 177

原创 百度二面:@Component,@Service等注解是如何被解析的?

前言@Component和@Service都是工作中常用的注解,Spring如何解析?一、@Component解析流程找入口Spring Framework2.0开始,引入可扩展的XML编程机制,该机制要求XML Schema命名空间需要与Handler建立映射关系。该关系配置在相对于classpath下的/META-INF/spring.handlers中。如上图所示 ContextNamespaceHandler对应context:… 分析的入口。找核心方法浏览ContextName.

2021-05-12 14:12:13 277

原创 Java常见并发编程方式和手段解密,看这篇就足够了!

今天的文章将给大家分享Java并发编程相关的知识点,虽然类似的文章已有很多,但本文将以更贴近实际使用场景的方式进行阐述。具体将对Java常见的并发编程方式和手段进行总结,以便可以从使用角度更好地感知Java并发编程带来的效果,从而为后续更深入的理解Java并发机制进行铺垫。Java多线程概述在Java中使用多线程是提高程序并发响应能力的重要手段,但同时它也是一把双刃剑;如果使用不当也很容易导致程序出错,并且还很难直观地找到问题。这是因为:1)、线程运行本身是由操作系统调度,具有一定的随机性;2)、Ja.

2021-05-10 15:52:29 224

原创 花了一个月梳理总结万字微服务核心架构,原来没你想的那么难...

在公司学习了接近一个月。一个月内,从0开始开始接触分布式微服务架构,给了我不小的收获。今天,我来从头到尾梳理一下,有关微服务架构的核心内容(全是干货)。下文,你将看到业界主流微服务框架的核心原理,包括服务发现,网关,配置中心,监控等组件,功能和架构原理的简单介绍。感谢阅读!????什么是微服务微服务Microservices之父,马丁.福勒,对微服务大概的概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition

2021-05-07 15:23:37 251

原创 深入解析,快速教会你 SQL 子查询优化!

子查询 (Subquery)的优化一直以来都是 SQL 查询优化中的难点之一。关联子查询的基本执行方式类似于 Nested-Loop,但是这种执行方式的效率常常低到难以忍受。当数据量稍大时,必须在优化器中对其进行去关联化 (Decoorelation 或 Unnesting),将其改写为类似于 Semi-Join 这样的更高效的算子。前人已经总结出一套完整的方法论,理论上能对任意一个查询进行去关联化。本文结合 SQL Server 以及 HyPer 的几篇经典论文,由浅入深地讲解一下这套去关联化的理论体系

2021-05-06 14:46:41 228

原创 某程序员吐槽大龄程序员“太水”:水平低不服管理,网友:笑了!

一般而言,在一个行业里深耕的时间越长,经验越丰富,技术越纯熟,越会被人尊重,但许多人却觉得大龄程序员不受欢迎,这是为什么呢?一个程序员发帖吐槽组里的大龄程序员:1.技术水平相当于应届一两年,对技术毫无兴趣,够用就行,一年的经验用了十年。2.觉得自己经验丰富,看不起新人,不服从管理。楼主说,那位大哥比自己加班多50%,产出却不高,给他提了几次技术上的建议他都没听。楼主感叹,突然理解了为啥有些大龄程序员不受欢迎,都是有原因的!有人表示赞同,许多大龄程序员使用着多年前已经被淘汰的技术,而且学习速度确实跟刚

2021-04-14 14:38:15 445 1

原创 某程序员吐槽培训班简历造假,应届变三年,拿阿里外包高薪offer

关于程序员速成培训班的传言和八卦很多,近日,又有一个程序员发帖吐槽培训班简历造假,两个大四学生报了个培训班,竟然给包装成有三年工作经验的人,更离谱的是,竟然还拿到了阿里外包26k的offer……许多网友表示自己也有类似经验,有人说之前有培训班也让自己包装经历,他当时是一个还没毕业的应届生,培训班就让他包装成大厂实习生。有人说自己认识一个专科毕业、有一年工作经验的程序员,面试oppo时把自己包装成有六年经验的IT小管理,目前已经入职了。总之培训班简历都造假,十年前就已经是公开的秘密了。也有人质

2021-04-13 14:59:03 5000 5

原创 案例分享:只因在 update 语句中误用一个双引号,生产数据竟然都变成了 0

一、前言最近经常碰到开发误删除误更新数据,这不,他们又给我找了个麻烦,我们来看下整个过程。二、过程由于开发需要在生产环节中修复数据,需要执行120条SQL语句,需要将数据进行更新于是开发连上了生产数据库,首先执行了第一条SQLupdate tablename set source_name = "bj1062-北京市朝阳区常营北辰福第" where source_name = "-北京市朝阳区常营北辰福第"我们仔细看了下,这个SQL,的确没有什么问题,where条.

2021-04-12 14:42:19 124

原创 快速了解Service Mesh微服务架构实现服务间gRPC通信

在前面的文章之中我们介绍了基于Kubernetes及Istio如何一步一步把Service Mesh微服务架构玩起来!在该文章中,我们演示了一个非常贴近实战的案例,这里回顾下该案例的结构,如下图所示:该案例所演示的就是我们日常使用微服务架构开发时,服务间最普遍的通信场景。在Spring Cloud微服务体系中,服务间可以通过Fegin+Ribbon组合的方式,实现服务间负载均衡方式的Http接口调用;但在Service Mesh架构中,服务发现及负载均衡等治理逻辑已经由SideCar代理,如果还希望延.

2021-04-07 15:08:47 280

原创 实战|如何优雅地自定义Prometheus监控指标

今天要和大家分享的是在实际工作中**“如何优雅地自定义Prometheus监控指标”**!目前大部分使用Spring Boot构建微服务体系的公司,大都在使用Prometheus来构建微服务的度量指标(Metrics)类监控系统。而一般做法是通过在微服务应用中集成Prometheus指标采集SDK,从而使得Spring Boot暴露相关Metrics采集端点来实现。但一般来说,Spring Boot默认暴露的Metrics数量及类型是有限的,如果想要建立针对微服务应用更丰富的监控维度(例如TP90/TP.

2021-04-06 14:45:26 1251 1

原创 干货|如何步入Service Mesh微服务架构时代

今天要和大家分享的是关于新一代微服务架构——Service Mesh的具体玩法!在微服务架构盛行的今天,作为一名互联网技术从业人员,对于微服务的概念相信大家都已经耳熟能详了!而至于像Spring Cloud这样的微服务框架,因为大部分互联网公司都在此基础上构建过第一代微服务体系,所以对于做Java 的同学来说,Spring Cloud微服务体系应该是非常熟悉了!这里并不是说其他语言栈就没有构建微服务体系的框架,例如Go语言也有像Go-Micro这样的微服务框架,只不过目前除了像头条这样重度使用Go语言的.

2021-03-19 14:40:13 745 1

原创 微服务架构中如何快速构建一个数据报告服务?

场景描述在微服务架构中,每个微服务负责自己的数据库,微服务A是不允许直接连接微服务B的数据库进行操作的。现在有2个微服务,一个是订单服务,一个是用户服务。有一个数据报告的需求:生成一份包含用户信息的订单报告。这就需要获取2个服务中的数据,进行连接汇总。如何构建这个数据报告的服务呢?方案1 直接连接数据库直接连接订单服务、用户服务的数据库,获取所需的数据,拿到后进行加工处理即可。非常简单,但有明显的问题。首先是破坏了上面所说的微服务的那个原则,直接去连别人的数据库,太粗暴了。还有一个.

2021-03-12 14:41:36 159

原创 k8s微服务接入SkyWalking,三分钟教你怎么玩!

前面我给大家分享了关于分布式链路追踪的基本原理和SkyWalking的k8s部署玩法,如果还没来得及看的朋友可以看我上篇文章。今天要给大家分享是我们日常工作中最常见的一种场景,那就是部署在k8s环境下的Java微服务,要接入SkyWalking的具体玩法,通过这个过程咱们可以更深入的理解SkyWalking进行数据采集的逻辑,也能更深刻地从运维角度理解日常工作中所写的Java微服务被无侵入的方式接入分布式链路追踪系统的过程!废话不多说,接下来就让我们开启干货模式吧!Java微服务接入SkyWalki.

2021-03-08 14:15:53 2559

原创 别说不会微服务了,五分钟教你巧妙玩转分布式下链路追踪!

本篇文章我将给大家介绍“分布式链路追踪”的内容,对于目前大部分采用微服务架构的公司来说,分布式链路追踪都是必备的,无论它是传统微服务体系亦或是新一代Service Mesh的微服务架构!而具体介绍的内容,本文不是完全讲理论,而是希望从理论到实践,引导大家去操作,因为只有这样才能真正从技术层面有深刻的认识和了解!分布式链路追踪概述在具体介绍分布式链路追踪系统之前,我们首先需要理解下什么是链路追踪?在本专栏前面关于监控系统的介绍中可以知道,监控系统的观测数据主要来源于统计指标、日志以及链路追踪这三个方面。.

2021-03-07 16:13:36 289

原创 五分钟教你如何优雅的统计代码耗时,让你知道你的程序到底慢在哪!

一、前言代码耗时统计在日常开发中算是一个十分常见的需求,特别是在需要找出代码性能瓶颈时。可能也是受限于 Java 的语言特性,总觉得代码写起来不够优雅,大量的耗时统计代码,干扰了业务逻辑。特别是开发功能的时候,有个感受就是刚刚开发完代码很清爽优雅,结果加了一大堆辅助代码后,整个代码就变得臃肿了,自己看着都挺难受。因此总想着能不能把这块写的更优雅一点,今天本文就尝试探讨下“代码耗时统计”这一块。在开始正文前,先说下前提,“代码耗时统计”的并不是某个方法的耗时,而是任意代码段之间的耗时。这个代码段,可能.

2021-02-19 14:09:30 255

原创 腾讯元老赚够钱后辞职到安徽农村隐居,亲手建造200亩农场

财富自由之后你想过什么生活?腾讯元老魏震给出了自己的答案:隐居农村,建造一个属于自己的农场。让我们来看看他的履历:2003年毕业于中国科技大学的计算机专业,进入华为;从华为离职后加入腾讯,当时的腾讯还没有上市,也不是今天这样的互联网巨头,魏震是腾讯的600多号员工,因为工作能力出众被不断提拔,很快成为腾讯的CTO,负责公司的技术部分;从腾讯辞职后,魏震和几个同事合伙创办了淘米网,依然担任CTO。这是一家面向儿童寓教于乐的家庭互动娱乐企业,开发了《摩尔庄园》、《赛尔号》等游戏,三年后,淘米网就上市了

2021-02-01 15:16:30 345 2

原创 分布式架构高可用与高并发那些在工作中常用到的那些变态应用

反向代理服务上图展示了一个典型的三层架构的高性能 Web 应用。这种成熟的架构多年以来已被广泛部署于包括 Google、Yahoo、Facebook、Twitter、Wikipedia 在内的诸多大型 Web 应用中。位于三层构架中最外层的反向代理服务器负责接受用户的接入请求,在实际应用中,代理服务器通常至少还要完成以下列表中的一部分任务:连接管理:分别维护客户端和应用服务器的连接池,管理并关闭已超时的长连接。攻击检测和安全隔离:由于反向代理服务无需完成任何动态页面生成任务,所有与业务逻辑相关的请.

2021-01-25 14:26:29 176

原创 操作系统的那些灵魂概念,你弄懂了几个?

一、进程进程与程序操作系统之中最为通用的概念就是「进程」。与此相关的面试题以及各种技术优化策略也层出不穷,足以够证明它对于理解操作系统中举足轻重的地位。事实上,通过「进程」,程序员可以更为直观的理解自己所开发的软件,并且能够从中深刻的认识到操作系统在软件运行做了些什么。简单来讲,进程就是正在执行的程序。每个进程都包含有属于自己的一段地址空间,可以看作是一部分内存空间。在这样的地址空间中,进程能够根据需要进行内存的读写。地址空间里面一般包含可执行程序,以及对应程序的数据及其堆栈。与每个进程相关的还有.

2021-01-13 14:26:03 170 1

原创 Java面试中常问的八大排序算法及代码实现你都会了吗?

一、直接插入排序经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列。对第四个数、第五个数……直到最后一个数,重复第二步。如何写成代码:首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。< span>设定插入数和得到已经排好序列的最后一个数的位数。insertNum和j=i-1。从最后一个数.

2021-01-12 14:32:17 194 1

原创 应该没人比我更细了吧:带你深入剖析Redis分布式锁!

什么是分布式锁说到Redis,我们第一想到的功能就是可以缓存数据,除此之外,Redis因为单进程、性能高的特点,它还经常被用于做分布式锁。锁我们都知道,在程序中的作用就是同步工具,保证共享资源在同一时刻只能被一个线程访问,Java中的锁我们都很熟悉了,像synchronized 、Lock都是我们经常使用的,但是Java的锁只能保证单机的时候有效,分布式集群环境就无能为力了,这个时候我们就需要用到分布式锁。分布式锁,顾名思义,就是分布式项目开发中用到的锁,可以用来控制分布式系统之间同步访问共享资源,.

2021-01-11 15:06:53 372 1

原创 我把 Spring Cloud 给拆了!带你详细了解各组件原理!

我们先认识一下SpringCloud的各个组件,然后知其所以然。原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下:创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”扣减相应的商品库存通知仓储中心,进行发货给用户的这次购物增加相应的积分如上,微服务的应用场景和核心竞争力:降低耦合:每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持

2021-01-07 13:56:54 131

原创 深入浅出MySQL灵魂十连问,你真的有把握吗?

一、SQL语句执行流程MySQL大体上可分为Server层和存储引擎层两部分。Server层:连接器:TCP握手后服务器来验证登陆用户身份,A用户创建连接后,管理员对A用户权限修改了也不会影响到已经创建的链接权限,必须重新登陆。查询缓存:查询后的结果存储位置,MySQL8.0版本以后已经取消,因为查询缓存失效太频繁,得不偿失。分析器:根据语法规则,判断你输入的这个SQL语句是否满足MySQL语法。优化器:多种执行策略可实现目标,系统自动选择最优进行执行。执行器:判断是否有权限,将最终任务提.

2021-01-06 14:12:04 989

原创 领统Java并发半壁江山的AQS你真的懂了吗?

一、JUC的由来synchronized 关键字是JDK官方人员用C++代码写的,在JDK6以前是重量级锁。Java大牛 Doug Lea对 synchronized 在并发编程条件下的性能表现不满意就自己写了个JUC,以此来提升并发性能,本文要讲的就是JUC并发包下的AbstractQueuedSynchronizer。在JUC中 CountDownLatch、ReentrantLock、ThreadPoolExecutor、ReentrantReadWriteLock 等底层用.

2021-01-04 16:03:21 258

原创 不会数据结构?24张图让你彻底弄懂它,还不会你来打我!

数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。常用的数据结构可根据数据访问的特点分为线性结构和非线性结构。线性结构包括常见的链表、栈、队列等,非线性结构包括树、图等。数据结构种类繁多,本文将通过图解的方式对常用的数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。一、数组数组可以说是最基本最常见的数据结构。数组一般用来

2020-12-31 14:15:30 438 1

原创 你了解Spring事务传播行为吗?多个方法之间调用事务如何传播?

前言:Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。基础概念:1. 什么是事务传播行为?事务传播行.

2020-12-30 15:57:11 962 1

空空如也

空空如也

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

TA关注的人

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