自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 终于有人把“计算机组成原理“全部整理出来了

计算机程序是用某种特定的符号系统(指令或语言)对被处理的数据和实现算法的过程进行的描述,是为了解决某一问题而设计的一系列排列有序的指令或语句的集合。程序送入计算机,存放在存储器中,计算机按照程序,即按照为解决某一问题而设计的一系列排好顺序的指令或语句进行工作。指令: 指挥计算机如何工作的命令。通常由一串二进制数码组成, 即有操作码和地址码两部分组成。操作码规定了操作的类型和性质,即进行什么样的操作;地址码规定了要操作的数据以及操作结果的存放地址。计算机语言:机器语言:二进制语言,

2022-02-25 16:39:52 432

原创 终于有人把“计算机底层原理“整理出来了

计算机的历史算盘和机械计算机有很多民族自豪感爆棚的兄弟会把算盘当成计算机的起源,还有爆破天的兄弟会把阴阳当成二进制0和1的起源,我觉得这件事儿就有点儿不靠谱了如果非要追究计算机的鼻祖,那就得讲讲17世纪前欧洲的故事,最早的计算机其实是计算器,就是算数用的,在欧洲工业工业革命的时候,大量的工业模具需要计算,欧洲又没有中国传统的计算器 - 算盘,就催生了很多科学家发明自己的计算器(对,就是计算器,就是以前菜市场还在使用的那种,还不能称之为现在的计算机),这其中有个NB的人物,这个人叫布莱士帕斯卡,我

2022-02-25 16:37:41 361

原创 阿里内部第一本“凤凰架构”,手把手教你构建可靠大型分布式系统

前言:一本好的技术书不仅能告诉你某个技术点怎么做、为什么这么做,还会让你明白所有技术点如何协同配合,最终构建出一个完整的技术体系。本书是一本以“如何构建一套可靠的大型分布式系统”为叙述主线的技术手册。从5个方面全面剖析了如何构建一个可靠的分布式系统,Spring Boot、Spring Cloud、Kubernetes、Istio、AWS Lambda五种架构风格的样例工程。笔者十多年来一直从事大型企业级软件的架构研发工作,较完整地经历了从最早的大型单体系统到如今基于云原生基础设施的架构演变过.

2022-01-18 21:16:33 265

原创 计算机操作系统基础笔记

操作系统引论操作系统定义操作系统是一组控制和管理计算机软硬件资源、合理地对各类作业进行调度以及方便用户使用的程序集合。操作系统是位于硬件层之上,所有其它系统软件层之下的一个系统软件,使得管理系统中的各种软件和硬件资源得以充分利用,方便用户使用计算机系统。操作系统的目标方便性 有效性 开放性 可扩充性操作系统的作用用户与计算机硬件系统之间的接口处理机 计算机资源的管理者 扩充裸机资源的软件 计算机工作流程的组织者无操作系统时的计算机系统人工操作方式 特点:无任何软

2022-01-10 15:56:08 663

原创 从GitHub火到了CSDN,共计1658页的《Java岗面试核心MCA版》

2019年我凭借一份《Java面试核心知识点》成功拿下了阿里、字节、小米等大厂的offer,两年的时间,为了完成我给自己立的flag(拿下一线互联网企业offer大满贯),即使在职也一直在不断的学习与备战面试中!

2021-12-24 21:56:19 223 1

原创 聊聊Spring事务失效的12种场景,太坑人了

前言对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。确实,spring事务用起来贼爽,就用一个简单的注解:@Transactional,就能轻松搞定事务。我猜大部分小伙伴也是这样用的,而且一直用一直爽。但如果你使用不当,它也会坑你于无形。今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了。不

2021-12-23 20:49:09 80

原创 日调用量超三十万亿,腾讯开源百万级服务发现和治理中心北极星

目前很多企业在微服务实施和演化过程中,都会面临技术栈的多样性问题。整个微服务领域逐渐沉淀出了无数个相关组件,大家在选择上更加困难,也为企业的基础设施建设不断带来挑战。腾讯也曾面临这样的痛点,因此从 2019 年开始腾讯开创了统一的微服务解决方案“北极星”(Polaris Mesh),通过北极星对这些组件进行抽象和整合,打造公司标准化的服务发现和治理方案,帮助业务提升研发效率和运营质量。经过两年的发展,北极星在腾讯内部注册服务数量超过百万,服务实例数量超过五百万,接口日调用量超过三十万亿,腾讯音乐、腾讯视

2021-12-23 20:43:03 134

原创 基于 MySQL 和 DynamoDB 的强一致性分布式事务实践

在单体应用向微服务架构转型的过程中,本地事务已不再满足系统一致性需求,为了解决这一问题,前人在对性能和数据一致性反复权衡的过程中总结了许多典型的协议和算法,各有优劣。本文我们将深入探讨 Freewheel 如何实现无单点故障的可扩展分布式事务实现模型。为什么需要分布式事务?当应用程序有严格的数据一致性要求时,ACID 事务是必须的,如果一个事务涉及的所有操作能够放在一个服务内部,且共用一个数据库,那么只用在一个方法里同一个事务下操作数据库即可。然而为了提升系统整体的可靠性,方便各个模块独立演化,系统

2021-12-23 20:32:02 203

原创 涨薪160%,从小厂逆袭,拿下拼多多,全靠这本阿里笔记

并发编程:所谓并发编程是指在一台处理器上"同时"处理多个任务。并发生在同一实体上的多个事件。多个事件在同一时间发生。并发编程的目标并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。常被问到的阿里六大并发编程问题并发编程是Java程序员学习之中最为重要的一部分,已经列入了大厂面试必问问题!阿里并发编程图册下面将给大家展示这份阿里的Java并发编程图册的部分内容,需要获取的小伙伴可以直接 点击此处凭截图获即可获取~...

2021-12-23 19:39:15 398

原创 关于订单库存扣减的实践

关于订单库存扣减的最佳实践一: 背景在电商的业务场景中每个商品都是有库存的,而且可能存在很多限售的运营策略。我们团队面临社区电商的业务场景更为复杂。不仅仅是库存限售,存在区域,门店,用户,运营分组,物流等的限售策略。如何面对日单量千万级别(未来更多),和多个维度的限售策略而不超卖,少卖是一个必须解决的问题。​ 下面就是库存扣减的流程图。冲图种我们可以看出,要保证整个扣减库存不出问题,限购查询和库存的扣减必须是原子性的而且要单线程执行。​​ 现在处理这种场景存在多种方案。但是要保证

2021-12-23 19:35:52 375

原创 gRPC 在跨云架构中的 mTLS 配置

传统的网络安全是基于边界的安全。通过将网络划分成外网和内网,在边界上部署防火墙,从而建立了一个基本假设——内网比外网安全。位于网络边界的前置代理服务器 (Nginx) 接收外部到达的加密 TLS 流量,将其解密为 HTTP 明文,然后再将流量转发到内网某个服务。在实践中,绝大多数内部服务都是以 HTTP 明文的方式通信。随着云计算的兴起,跨云部署等场景正在逐步模糊网络安全边界。服务与服务通信不得不跨越互联网鸿沟,明文流量显而易见不再安全。为了支持跨云部署场景下的 gRPC 服务调用,配置 mTLS

2021-12-23 19:33:56 1405

原创 一文讲透自适应微服务熔断的原理和实现

为什么需要熔断微服务集群中,每个应用基本都会依赖一定数量的外部服务。有可能随时都会遇到网络连接缓慢,超时,依赖服务过载,服务不可用的情况,在高并发场景下如果此时调用方不做任何处理,继续持续请求故障服务的话很容易引起整个微服务集群雪崩。比如高并发场景的用户订单服务,一般需要依赖一下服务:商品服务 账户服务 库存服务假如此时 账户服务 过载,订单服务持续请求账户服务只能被动的等待账户服务报错或者请求超时,进而导致订单请求被大量堆积,这些无效请求依然会占用系统资源:cpu,内存,数据连接..

2021-12-23 19:31:20 116

原创 Spring Cloud Gateway夺命连环10问?

这篇文章介绍下微服务中的一个重要角色:网关,对于网关如何选择,由于阿里系暂时未出网关,当然是选择了Spring cloud Gateway,毕竟是亲儿子。文章目录如下:为什么需要网关?传统的单体架构中只有一个服务开放给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,那么作为客户端如何去调用这些微服务呢?如果没有网关的存在,只能在本地记录每个微服务的调用地址。无网关的微服务架构往往存在以下问题:客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性。 认证

2021-12-23 17:05:51 103

原创 恕我直言:你可能一直用错了 kafka 的重试机制

Apache Kafka 已成为跨微服务异步通信的主流平台。它有很多强大的特性,让我们能够构建健壮、有弹性的异步架构。同时,我们在使用它的过程中也需要小心很多潜在的陷阱。如果未能提前发现可能发生(换句话说就是迟早会发生)的问题,我们就要面对一个容易出错和损坏数据的系统了。在本文中,我们将重点介绍其中的一个陷阱:尝试处理消息时遭遇失败。首先,我们需要意识到消息消费可能会,而且迟早会遭遇失败。其次,我们需要确保在处理此类故障时不会引入更多问题。Kafka 简介阅读本文的读者应该都对 Kafka

2021-12-22 17:03:40 1028

原创 2022最新解微服务架构

什么是微服务?微服务是一种面向服务的体系结构模式,其中应用程序被构建为各种最小的独立服务单元的集合。它是一种软件工程方法,侧重于将应用程序分解为具有良好定义接口的单个功能模块。这些模块可以由拥有整个服务生命周期的小型团队独立部署和操作。术语“micro”指的是一个微服务的规模,它必须由一个开发团队(5到10个开发人员)管理。在这种方法中,大型应用程序被划分为最小的独立单元。什么是单体结构?通俗地说,单机体系结构就像一个大容器,应用程序的所有软件组件都集中在一个包中。让我们在单机体系结构的

2021-12-21 17:09:48 398

原创 悟了,原来这才是分布式事务的正确打开方式

分布式事务的概念1,什么是事务事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。2,本地事务数据库事务的四大特性 ACID:A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。 C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。比如:张三向李四转100元,转账前和转账后的数据是正确状态这叫一致性,如果出现张三转出100元,李四账户没有增加100元这...

2021-12-21 17:06:04 218

原创 分布式事务之LCN、TCC特点、事务补偿机制缘由以及设计重点

在亿级流量架构之分布式事务解决方案对比中, 已经简单阐明了从本机事务到分布式事务的演变过程, 文章的最后简单说明了TCC事务, 这儿将会深入了解TCC事务是原理, 以及理论支持, 最后会用Demo举例实现。XA协议在上面提到的文章中, 分布式事务直接将二阶段提交, 思维逻辑有些断层, 但是那毕竟是比较解决方案, 在这儿从理论上推导分布式事务的根基, 也就是为什么要二阶段提交。在单体应用中, 往往由自己来保证事务的一致性, 但是分布式中, 涉及到跨网络调用就难以保证, 从理论上讲两台机器理论上无法

2021-12-21 17:04:19 252

原创 微服务体系架构浅谈:原来这才叫微服务

微服务体系结构描述了一种使用松散耦合服务集合开发应用程序的方法。以前,应用程序是基于集中式多层体系结构的。在大型机和台式机的时代,这种方法很有效。但在云计算和移动设备中,后端必须随时可用于各种设备。Bug修复和特性必须在不停机或不部署整个应用程序的情况下快速交付。微服务是独立部署的,通过webapi或消息队列进行通信以响应传入事件。它们协同工作以提供各种功能,如用户界面前端、推荐、物流、计费等。微服务通常在容器中运行。容器简化了微服务的部署,但即使没有容器,微服务也可以运行。微服务是封装...

2021-12-21 17:00:39 229

原创 学会这10种定时任务,我有点飘了

前言最近有几个读者私信给我,问我他们的业务场景,要用什么样的定时任务。确实,在不用的业务场景下要用不同的定时任务,其实我们的选择还是挺多的。我今天给大家总结10种非常实用的定时任务,总有一种是适合你的。一. linux自带的定时任务crontab不知道你有没有遇到过这种场景:有时需要临时统计线上的数据,然后导出到excel表格中。这种需求有时较为复杂,光靠写sql语句是无法满足需求的,这就需要写java代码了。然后将该程序打成一个jar包,在线上环境执行,最后将生成的excel文件下载到本地

2021-12-21 16:58:59 142

原创 腾讯二面:MySQL的半同步是什么?

前言年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后不是两阶段提交,然后面试官看我连问的是啥都不知道,就直接跳过这个问题,直接聊下一个问题了。所以这次总结一下这部分的知识内容,文字内容比较多,可能会有些枯燥,但对于这方面感兴趣的人来说还是比较有意思的。MySQL的主从复制我们的一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的。主要是可以通过为服务器配置一个

2021-12-21 16:57:02 99

原创 DDD领域驱动设计理论与方法

DDD由来与优势软件架构设计的真正目的是解决软件复杂度带来的问题,软件复杂度由来主要由三方面:高并发场景下的对软件高性能要求、业务场景对软件高可用要求、持续变化的业务以及业务扩张和增加需求对软件扩展性的要求,除此外,对低成本、安全、软件规模也一定程度上增加了软件设计的复杂度。在解决每个复杂度维度上,分别有各自的应对解决方案:在高性能方面,可以通过单机和集群两个维度提升系统性能:在单机方面通过多进程、多线程等技术解决单机高并发,在集群方面通过任务拆解、分解,将任务调度到每个Worker节点执行,从

2021-12-21 16:55:28 111

原创 MySQL调大sort_buffer_size,并发量一大,查询排序为啥又会变慢

导读大家可以想看看这条SQL语句思考一下:SELECT * FROM user WHERE user_name LIKE "%am%" AND age >= 18 AND age <= 24 AND sex = 0 ORDER BY age, user_name LIMIT 0, 50复制代码这条SQL使用了快速排序对age,username排序,有没有更好的办法,提升排序的性能?你可能已经发现,这条SQL其实只需要取前50个排好序的用户,但是,上面的执行过程确对...

2021-12-21 16:52:17 1348

原创 Java开发,内存泄漏不会排查,这下溴大了

什么是内存泄漏内存泄漏:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC

2021-12-21 16:21:23 105

原创 阿里Java面试:你必须了解的分布式事务解决方案,你知道多少呢?

什么是事务想必大多数朋友应该都很清楚了,不清楚的可以看前面的文章《就这?一篇文章让你读懂 Spring 事务》。分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单来说,就是一个大的操作由 N 个小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。比如存在一个订单的微服务,一个库存的微服务,当订单完

2021-12-21 16:15:35 94

原创 字节架构师:你真的熟悉ASP.NET MVC的整个生命周期吗?

一、介绍    我们做开发的,尤其是做微软技术栈的,有一个方向是跳不过去的,那就是MVC开发。我相信大家,做ASP.NET MVC 开发有的有很长时间,当然,也有刚进入这个行业的。无论如何,如果有人问你,你知道ASP.NET MVC的生命周期吗?你知道它的来世今生吗?你知道它和 ASP.NET WEBFORM 有什么区别吗?估计,这些问题,有很多人会答不上来,或者说不清楚。今天,我就把我的理解写出来,也是对我自己学习的一次回顾和总结吧。当然,由于本人能力有限,在写的过程中也可能会有一些错误,希望大家多多

2021-12-20 20:32:06 202

原创 为什么越来越多程序员使用SpringSecurity,这些原因你都知道吗?

1|2 什么是安全框架安全框架顾名思义,就是解决系统安全问题的框架。任何应用开发的计划阶段都应该确定一组特定的安全需求,如身份验证、授权和加密方式。不使用安全框架之前,我们需要手动处理每个资源的访问控制,针对不同的项目都需要做不同的处理,此时就会显得非常麻烦,并且低效率引起的额外开销会延缓开发周期。使用安全框架,使开发团队能够选择最适合这些需求的框架,可以通过配置的方式实现对资源的访问限制,使得开发更加的高效。1|2常用的安全框架Spring Security: Spring 家族一员,是一个

2021-12-20 20:30:38 2531

原创 面试官:并发编程系列之如何正确使用线程池?

并发编程系列之如何正确使用线程池?在上一章节的学习中,我们掌握了线程的基本知识,接着本博客会继续学习多线程中的线程池知识1、线程是不是越多越好?在学习多线程之前,读者可能会有疑问?如果单线程跑得太慢,那么是否就能多创建多个线程来跑任务?并发的情况,线程是不是创建越多越好?这是一个很经典的问题,画图表示一下创建很多线程的情况,然后进行情况分析。创建线程和销毁线程都是需要时间的,如果创建时间+销毁时间>执行任务时间就很不划算 创建后的线程是需要内存去存放的,创建的线程对应一个Thre

2021-12-20 20:28:32 100

原创 如果早知道SpringMVC可以这样学,我也不至于被面试官虐的这么惨

Servlet生命周期了解Servlet的生命(周期)是由容器(eg:Tomcat)管理的,换句话说,Servlet程序员不能用代码控制其生命。加载和实例化:时机取决于web.xml的定义,如果有x则在容器启动时(eg:SSM),反之则在第一次针对这个Servlet的请求发生时(eg:Spring Boot)。初始化(init):实例化后会立马进行初始化,也就是执行init方法,init方式只会执行一次。请求处理:初始化后,Servlet就可以接受请求了,基本方式是执行Servlet接口中的servic

2021-12-20 20:09:41 88

原创 从零开始实现简单 RPC 框架 6:网络通信之 Netty

网络通信的开发,就涉及到一些开发框架:Java NIO、Netty、Mina等等。理论上来说,类似于序列化器,可以为其定义一套统一的接口,让不同类型的框架实现,事实上,Dubbo就是这么干的。但是,作为一个简单的 RPC 框架,ccx-rpc就先不统一了,因为基本上网络框架是不会换的,而且统一起来代码量巨大。ccx-rpc选择的网络框架是Netty,Netty是一款大名鼎鼎的异步事件驱动的网络应用程序框架,支持快速地开发可维护的高性能的面向协议的服务器和客户端。Netty在 JDK ...

2021-12-20 20:07:21 117

原创 华为二面被问“Zookeeper-分布式锁”,教你一招怒怼面试官

1. 简介我们在之前的博文中讲解了如何使用redis实现分布式锁,其实除了 redis 还有 zookeeper 也能实现分布式锁。废话不多说,直接上图。从整个流程中可以看出,zk实现分布式锁,主要是靠zk的临时顺序节点和watch机制实现的。2. quick startCurator 是 Netflix 公司开源的一套 zookeeper 客户端框架,解决了很多 Zookeeper 客户端非常底层的细节开发工作,包括连接重连、反复注册 Watcher 和 NodeExists

2021-12-20 20:05:28 101

原创 阿里面试官常问的docker,你真的搞明白了吗

一. 为什么会出现docker?不用说, 肯定是时代进步的产物. 那么, 他为什么能火? 一定是解决了痛点问题. docker也不是一下子就火起来了, 他的火也是有一个过程的, 我们先来看看为什么会出现docker, 他解决了什么样的问题.第一种情况: 解决环境不一致的问题通常, 程序员开发的时候是在开发环境, 提测阶段部署到测试环境. 那么常常会遇到一个现象, 在开发环境运行的好好的, 怎么一部署到测试环境就有问题了呢? 开始各种排查, 最后发现, 可能是机器配置不一样, 导致tomc

2021-12-20 19:58:32 1012

原创 阻塞IO,非阻塞IO,IO复用,信号驱动IO,异步IO,这你真的分得清楚吗?

要想彻底弄清楚这五种IO模型,我们需要先弄清楚几个基本概念。基本概念什么是IO什么是IO?维基百科上面是这样解释的:I/O(英语:Input/Output),即输入/输出,通常指数据在存储器(内部和外部)或其他周边设备之间的输入和输出,是信息处理系统(例如计算机)与外部世界(可能是人类或另一信息处理系统)之间的通信。输入是系统接收的信号或数据,输出则是从其发送的信号或数据。这是IO一个完整的定义,不是特别好理解,要厘清IO这个概念,我们需要从如下两个视角来理解它。计算机视角理解I

2021-12-20 19:55:32 160

原创 MySQL中如何选择合适的备份策略和备份工具

数据库备份的重要性毋庸置疑,可以说,它是数据安全的最后一道防线。鉴于此,对于备份,我们通常会做以下要求:多地部署对于核心数据库,我们通常有两地三中心的部署要求。对于备份来说,也是如此。一个备份应该有多个副本,每个副本存储在不同区域。 多介质部署一个备份的多个副本应存储在不同介质上,如磁盘和磁带,防止单一介质失效。 定期检查备份的有效性备份只是在做正确的事情,有没有把事情做对,还得依靠备份的有效性检查。前两项,在条件允许的情况下,建议做。第三项必须做。接下来,我们聊聊备份的相关话题,主要包括以下

2021-12-20 19:51:39 258

原创 工厂模式--摆脱你日复一日new对象却依旧单身的苦恼

前言每每谈及到Java,就不免会想到一个悲伤的事实:你是否每天都在new对象,却依然坚守在单身岗上屹立不倒。(所谓面向对象编程的"缺点"hhh),这篇来学一下工厂模式,摆脱new对象的苦恼!知识点传统工厂抽象类和子类们 生产和使用放在一起了没有分离开,使用时传名字,然后来生产相应的产品public class OrderPizza { // 构造器 public OrderPizza() { Pizza pizza = null; String orderType; //

2021-12-20 19:50:02 89

原创 技能篇:关于缓存数据的一致性探讨

缓存的意义数据的保存,离不开磁盘或者内存的操作。为了永久性的保存,数据最终还是会同步到磁盘上,小流量小并发的系统,直接使用 mysql 进行数据的操作即可满足需求。但面对高并发大流量时,又应该怎么去更新保存读取数据呢?使用内存作为缓冲区,即缓存。CPU 操作内存空间的速度是比磁盘快一个大级别的,内存操作就是在公路上开汽车,磁盘读写则在小道上骑自行车基于内存去做缓存,有两种方案:一是基于本地内存实现,如简单使用 HashMap,guava 的 LoadCache,Caffeine;二是依赖局域...

2021-12-18 20:43:13 103

原创 RocketMQ架构原理解析:消息存储

一、概述由前文可知,RocketMQ有几个非常重要的概念:broker 服务端,负责存储、收发消息 producer 客户端1,负责产生消息 consumer 客服端2,负责消费消息既然是消息队列,那消息的存储的重要程度不言而喻,本节我们聚焦broker服务端,看下消息在broker端是如何存储的,它的落盘策略是怎样的,又是如何保证高效另:后文的RocketMQ都是基于版本4.9.3二、写入流程RocketMQ的普通单消息写入流程如下简单可以分为三大块:写入前准备

2021-12-18 20:41:18 144

原创 Spring注解驱动之后再说事务啊

问题引入Spring中事务传播有哪几种,分别是怎样的? 理解注解事务的自动配置? SpringBoot启动类为什么不需要加@EnableTransactionManagement注解? 声明式事务的实现原理?(待补充)1 声明式事务系统开发中必然与数据打交道,事务管理必不可少。Spring支持声明式事务,通过*@Transactional注解控制方法是否支持事务。声明式事务,基于AOP实现,将具体业务和业务逻辑解耦。Spring提供了@EnableTransactionManageme

2021-12-18 20:39:27 95

原创 如何掌握Netty?先看看实例动图下介绍的JavaNIO编程模型

一、Java NIO 基本介绍Java NIO 全称 java non-blocking IO,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的NIO 相关类都被放在 java.nio 包及子包下,并且对原 java.io 包中的很多类进行改写。NIO是面向缓冲区 ,或者面向 快 编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使

2021-12-18 20:33:52 97

原创 关于订单库存扣减的实践

关于订单库存扣减的最佳实践一: 背景在电商的业务场景中每个商品都是有库存的,而且可能存在很多限售的运营策略。我们团队面临社区电商的业务场景更为复杂。不仅仅是库存限售,存在区域,门店,用户,运营分组,物流等的限售策略。如何面对日单量千万级别(未来更多),和多个维度的限售策略而不超卖,少卖是一个必须解决的问题。​ 下面就是库存扣减的流程图。冲图种我们可以看出,要保证整个扣减库存不出问题,限购查询和库存的扣减必须是原子性的而且要单线程执行。​​ 现在处理这种场景存在多种方案。但是要保证

2021-12-17 21:48:11 332

原创 深入理解Java虚拟机——JMM(Java内存模型)

1、 为什么要有Java内存模型?1.1、 CPU和缓存一致性1. 缓存一致性问题出现的原因CPU的执行速度和内存的读取速度差距越来越大,导致CPU每次操作内存都要耗费很多等待时间。为解决这个问题,早期的程序员大佬提出了“CPU和物理内存上新增高速缓存”。将运算所需要的数据从主内存复制一份到CPU的高速缓存中,当CPU进行计算时就可以直接从高速缓存中读数据和写数据了,当运算结束再将数据刷新到主内存就可以了。 在多核 CPU和多线程的情形 中,每个线程都有自己的缓存,关于同一个线程共享...

2021-12-17 21:31:34 186

空空如也

空空如也

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

TA关注的人

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