- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 RocketMQ分布式事务
业务场景:用户A转账100元给用户B,这个业务比较简单,具体的步骤:1、用户A的账户先扣除100元2、再把用户B的账户加100元如果在同一个数据库中进行,事务可以保证这两步操作,要么同时成功,要么同时不成功。这样就保证了转账的数据一致性。但是在微服务架构中,因为各个服务都是独立的模块,都是远程调用,都没法在同一个事务中,都会遇到分布式事务问题。
2025-04-15 14:36:47
726
原创 Dubbo线程模型
Dubbo 的线程模型通过I/O 线程与业务线程的分离,实现了高吞吐与低延迟的平衡。合理配置线程池参数、选择合适的Dispatcher策略,并结合监控工具及时调整,是保障服务稳定性的关键。Provider 端:根据业务类型选择线程池,监控队列堆积。Consumer 端:异步回调使用独立线程池,避免阻塞。通用原则:避免在 I/O 线程执行阻塞操作,优化超时与重试策略。扩展思考:Dubbo 3.0 引入的虚拟线程(Virtual Threads)支持,如何进一步提升性能?
2025-03-03 11:10:11
935
原创 Dubbo RPC 原理
是一款高性能、轻量级的开源 RPC 框架,支持服务治理、协议扩展、负载均衡、容错机制等核心功能,广泛应用于微服务架构。其核心目标是解决分布式服务之间的高效通信与服务治理问题。Dubbo 通过高度可扩展的架构设计,结合高效的通信协议和灵活的服务治理能力,成为构建分布式系统的利器。深入理解其 RPC 原理,有助于优化服务性能、提升系统稳定性。建议结合源码(如)进一步研究。扩展阅读:Dubbo 3.0 应用级服务发现、Triple 协议(兼容 gRPC)。
2025-02-25 15:55:00
1048
原创 SpringBoot框架关键点
Spring Boot 是一个用于快速构建 Spring 应用的框架,其核心目标是简化配置和开发流程。通过掌握以上关键点,开发者能够高效使用 Spring Boot 构建应用,充分利用其自动化配置和模块化设计,快速响应业务需求。建议结合官方文档和实际项目实践,深入理解各机制的实现细节。从高到低:命令行参数 > 系统环境变量 >
2025-02-21 09:48:57
588
原创 RocketMQ消息重试机制
生产者消费者NameServer - 收集broker的信息(IP、端口等)、客户端从NameServer上获取Broker的信息并找到可用Broker去发/拉消息;主要负责服务发现和路由功能,而Broker则负责消息的存储和路由分发。这两个组件共同协作,确保RocketMQ能够高效、可靠地处理消息的产生、存储和消费。Broker - 实际处理消息的服务,响应客户端请求的。
2024-12-25 16:59:09
1104
原创 基于ChatMemory打造AI取名大师
以上就是关于ChatMemory的作用和实现原理,在实际应用开发中,ChatMemory的作用是重要的,下一节将介绍LangChain4j的工具机制时,其中也离不开ChatMemory的应用的,敬请期待。
2024-06-27 16:37:14
1234
2
原创 基于AiService实现智能文章小助手
本节我们学习了什么是AiService以及基本应用,我们制作了一个用户可以指定字数和标题的作家应用,同时我们还研究了AiService的基本工作原理和源码,其中我们再次提到了ChatMemory,那么下节内容我们就来介绍到底什么是ChatMemory。
2024-06-27 16:12:17
997
原创 LangChain4j之HelloWorld
它是Java版本的LangChain,随着大模型的不断发展,如何在程序中更好的利用大模型的能力来提高编程效率是一种趋势,LangChain是这么自己介绍自己的:意思是:LangChain提供了一个开发框架,使得开发者可以很容易的用来构建具有LLM能力的应用程序。LLM就是Large Language Model,也就是常说的大语言模型,简称大模型。个人认为:大模型时代,如何将大模型能力和传统应用相结合,使得传统应用更加智能,是人工智能时代的趋势。
2024-06-27 16:05:59
1461
原创 MyBatis-Plus为简化开发而生
简称 MP是一个的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。他们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P,基友搭配,效率翻倍。
2023-10-11 14:11:05
209
原创 RxJava介绍及基本原理
RxJava是ReactiveX家族的重要一员,ReactiveX是的缩写,一般简写为Rx。ReactiveX官方给RxRx是一个使用可观察数据流进行异步编程的编程接口。ReactiveX不仅仅是一个编程接口,它是一种编程思想的突破,它影响了许多其它的程序库和框架以及编程语言。它拓展了观察者模式,使你能够自由组合多个异步事件,而不需要去关心线程同步,线程安全并发数据以及I/O阻塞。RxJava在Java环境下使用,它通过Observable(可观测对象)和Subscriber(订阅者)来实现异步编程模型。
2023-10-11 14:05:53
1410
原创 Redis布隆过滤器
布隆过滤器判断存在的不一定存在,但是判断不存在的一定不存在。Falase is always false. True is maybe true. 在高并发情况下,是避免缓存穿透的一把利器。
2022-09-06 18:16:26
1624
原创 Netty&即时通讯案例XIM
1 TCP基础在介绍Netty高性能通信框架之前,先回顾一下TCP的基本理论。1.1 Socket基本概念Socket又称套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求Socket、ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,不因为在服务器端或在客户端而产生不同级别。不管是Soc
2022-01-05 11:47:07
1170
原创 阿里云专有网络内网互通
您好,要互通的实例需要加入到一个云企业网中,不是各自加入一个云企业网。跨账号VPC互通可以授权后加入一个云企业网后可以互通。(不是把VPC各自加入一个云企业网)1、创建CEN可以参考:https://help.aliyun.com/document_detail/128625.html2、(如果是同账号VPC可以忽略这一步)授权可以参考:https://help.aliyun.com/document_detail/73645.html3、添加云企业网可以参考:https://help.aliyun
2021-08-10 10:10:47
1145
原创 Docker详解
2013年发布至今, Docker 一直广受瞩目,被认为可能会改变软件行业。但是,许多人并不清楚 Docker 到底是什么,要解决什么问题,好处又在哪里?今天就来详细解释,帮助大家理解它,还带有简单易懂的实例,教你如何将它用于日常开发。...
2021-08-04 11:11:20
993
原创 JVM-垃圾收集器ParNew&CMS与底层三色标记算法详解
垃圾收集算法分代收集理论当前虚拟机的垃圾收集都采用分代收集算法,这种算法没有什么新的思想,只是根据对象存活周期的不同将内存分为几块。一般将java堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。比如在新生代中,每次收集都会有大量对象(近99%)死去,所以可以选择复制算法,只需要付出少量对象的复制成本就可以完成每次垃圾收集。而老年代的对象存活几率是比较高的,而且没有额外的空间对它进行分配担保,所以我们必须选择“标记-清除”或“标记-整理”算法进行垃圾收集。注意,“标记-清
2021-03-21 23:01:27
1988
原创 JVM-对象创建与内存分配机制深度剖析
引子,对象的创建对象创建的主要流程:1 类加载检查虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。new指令对应到语言层面上讲是,new关键词、对象克隆、对象序列化等。2 分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类 加载完成后便可完全确定,为对象分配空间的任务等同于把 一块确定大小的内存从Java堆中划分出来。
2021-03-12 17:28:58
1670
原创 HTML&CSS再出发—在线教育从后端到APP全链路学习实战
1 Web概念概述1.1 javaWebJava Web,是用Java技术来解决相关web互联网领域的技术栈。web包括:web服务端和web客户端两部分。Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。Java技术对Web领域的发展注入了强大的动力。就是使用Java语言开发基于互联网的项目。1.2 软件架构C/S:Client/Server 客户端/服务器端:在用户本地有一个客户端程序,在远程有一个服
2021-03-09 14:32:14
4186
4
原创 JDBC从心出发— 在线教育从后端到APP全链路学习实战
1 概述客户端操作数据库的方式主要是三种:使用第三方客户端访问MySQL(比如:Navicat、MySQLWorkbench等)、使用MySQL自带的命令方式、通过Java来访问MySQL数据库。在Java中,数据库存取技术可分为如下几类:JDBC直接访问数据库JDO技术(Java Data Object)第三方O/R工具,如Hibernate, Mybatis 等。JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。1.1 什么是JDBCJDB
2021-03-09 14:17:10
3678
6
原创 JVM-内存模型深度剖析与优化
JDK体系结构Java语言的跨平台特性JVM整体结构及内存模型补充一个问题:在minor gc过程中对象挪动后,引用如何修改?对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。minor gc在
2021-03-07 09:11:58
1461
3
原创 JVM-从JDK源码级别彻底剖析JVM类加载机制
类加载运行全过程当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到JVM。package cn.maya.jvm;public class Math { public static final int initData = 666; public static User user = new User(); public int compute() { //一个方法对应一块栈帧内存区域 int a = 1;
2021-03-06 18:34:56
406
原创 MySQL基础不牢地动山摇— 在线教育从后端到APP全链路学习实战
数据库基础1.1 为什么要使用数据库持久化(Persistence):把数据保存到可掉电式存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件、XML数据文件中。 方便管理数据(例如:快速的检索等);在iOS端App中的持久化方案:Plist文件、Preference、NSKeyedArchiver、SQLite、FMDB、CoreData。1.2 什么是数据库DB:数据库(Database)即存储数据的“仓库”。它保存了一系列有组织的数据。DBM
2021-02-24 09:41:21
1152
1
原创 开发环境搭建—在线教育从后端到APP全链路学习实战
目录1 iOS App开发环境1.1 XCode1.1.1 Xcode下载并安装1.1.2 Command Line Tools安装1.2 CocoaPods1.2.1 查看当前Ruby版本1.2.2 升级Ruby环境,首先需要安装rvm1.2.3 查看rvm版本1.2.4 列出ruby可安装的版本信息1.2.5 安装一个ruby版本1.2.6 设置ruby的默认版本1.2.7 由于一道墙的原因,需要更换源1.2.8 查看本地Ruby镜像1.2.9 CocoaPods安装1.3.0 安装本地库1.3.1 切
2021-01-14 19:48:08
1771
原创 专栏&技术栈&业务简介—在线教育从后端到APP全链路学习实战
大家好我是Tony,从业IT行业8年由于,最近6年时间一直在教育领域的头部企业里工作,参与了若干大型教学系统的研发,包括电商、班课、互动课堂、作业系统、支付系统等;涉足的技术栈包括:Java后端、移动端、跨平台领域。1、为什么开这个专栏最近五年也一直在教育行业,从App到后端都有实战,也有一些心得。那么为什么会想着开这个专栏呢?因为做App有时会让人局限于一点,无法了解整个数据的流转,然后学习后端可能又会遇到无从下手的尴尬。这些也是在我团队工作中发现的问题,所以在实际工作中,总能听得一些移动端的研发
2021-01-13 16:52:50
2733
1
原创 数据绑定(订阅)
在 RxSwift 里有一个比较重要的概念就是数据绑定(订阅)。就是指将可监听序列绑定到观察者上:我们对比一下这两段代码:let image: UIImage = UIImage(named: ...)imageView.image = imagelet image: Observable<UIImage> = ...image.bind(to: imageView.rx.image)第一段代码我们非常熟悉,它就是将一个单独的图片设置到imageView上。.
2020-12-04 16:10:39
1497
原创 函数式编程 -> 函数响应式编程
现在大家已经了解我们是如何运用函数式编程来操作序列的。其实我们可以把这种操作序列的方式再升华一下。例如,你可以把一个按钮的点击事件看作是一个序列:// 假设用户在进入页面到离开页面期间,总共点击按钮 3 次// 按钮点击序列let taps: Array<Void> = [(), (), ()]// 每次点击后弹出提示框taps.forEach { showAlert() }这样处理点击事件是非常理想的,但是问题是这个序列里面的元素(点击事件)是异步产生的,传统序列是无法描叙
2020-12-04 16:09:53
1504
翻译 阿里架构总监一次讲透中台架构,13 页 PPT 精华详解,建议收藏!
本文整理了阿里几位技术专家,如架构总监 谢纯良,中间件技术专家 玄难等几位大牛,关于中台架构的几次分享内容,将业务中台形态、中台全局架构、业务中台化、中台架构图、中台建设方法论、中台组织架构、企业中台建设实施步骤等总共13页PPT精华的浓缩,供大家学习借鉴。01阿里业务中台架构图基础设施服务,即IAAS层,提供硬件底层支持。基础服务层,即PAAS层,包括分布式服务框架、分布式数据库、分布式消息、分布式存储、分布式事务、实时监控服务等等。互联网业务中台,包括各服务中心的抽象出来的各种业务
2020-12-04 16:07:55
895
原创 函数式编程
函数式编程函数式编程是种编程范式,它需要我们将函数作为参数传递,或者作为返回值返还。我们可以通过组合不同的函数来得到想要的结果。我们来看一下这几个例子:// 全校学生let allStudents: [Student] = getSchoolStudents()// 三年二班的学生let gradeThreeClassTwoStudents: [Student] = allStudents .filter { student in student.grade == 3 &&a
2020-12-04 16:05:36
1475
翻译 [译]RxSwift + MVVM: 怎样搞定 ViewModels
简介我们开始使用RxSwift和Model-View-ViewModel(MVVM)架构开发BlaBlaCar将近一年了。我们对于结果非常激动。我们用这个方式写的代码非常容易看懂,维护,测试以及衡量。然而,开始的几周却不是一件轻松的事情:我们不得不重复搞MVVM+RxSwift架构的某些方面让事情弄对。其中一件事就是就是给ViewModel提供输入的方式。让我们看看两种为ViewModel提供输入(RxEvents)的不同的方法。首先让我们过一遍ViewModel。ViewModelViewMod
2020-12-04 16:04:05
1857
原创 RxSwift系列—销毁者Dispose
七、销毁者Dispose一般来说,一个可观察序列发出了 error 或者 completed 事件,那么所有内部资源都会被释放。但是如果你需要提前释放这些资源或者取消订阅的话,那么你可以对返回的 Disposable(可被清除的资源) 调用 dispose 方法。 调用 dispose 方法后,订阅将被取消,并且内部资源都会被释放掉。7.1 案例引入// 创建序列let ob = Observable<Any>.create { (observer) -> Disposable i
2020-12-04 15:50:53
1744
原创 RxSwift序列—Subject
六、Subject来看一个非常特殊的类型-Subject,为什么说它特殊呢?原因很简单:**Subject既可以做序列,也可以做观察者!**正是因为这一特性,所以在实际开发中被大量运用。下面我们一起来解读一下这个特殊的Subject。6.1 基本原理首先我们来看看:SubjectType的原理!public protocol SubjectType : ObservableType { // 关联了观察者类型,具备这个类型的能力 associatedtype SubjectObs
2020-12-04 15:41:16
1773
原创 RxSwift系列—Driver
五、Driver5.1 案例引入请求一次网络,绑定到UI上5.1.1 采用Observerablelet result0 = inputTF.rx.text.skip(1) .flatMap { [weak self](input) -> Observable<Any> in return (self?.dealwithData(inputText:input ?? ""))! .observeOn(MainSchedule
2020-12-04 15:32:56
2586
原创 RxSwift系列—RxSwift调度者
四、RxSwift调度者4.1 案例引入Schedulers 是RxSwift实现多线程的核心模块。它主要用于控制任务在哪个线程或队列运行。咱们在平时的开发过程中,肯定都使用过网络请求,网络请求是在后台执行的,获取到数据之后,再在主线程更新UI。先来一段代码引入/// 子线程DispatchQueue.global().async { print("请求数据") let _ = self.actionBtn.rx.tap .subscribe(onNext: { () in
2020-12-02 21:00:27
1757
原创 RxSwift系列—RxSwift高阶函数
3.1 组合操作符3.1.1 startWith在开始从可观察源发出元素之前,发出指定的元素序列print("*****startWith*****")Observable.of("1", "2", "3", "4") .startWith("A") .startWith("B") .startWith("C", "a", "b") .subscribe(onNext: { print($0) }) .disposed(by: disposeBag)//
2020-12-01 19:34:44
1638
原创 RxSwift系列—RxSwift核心逻辑
二、RxSwift核心逻辑2.1 RxSwift使用三步曲第一步:创建序列let ob = Observable<String>.create { (observer) -> Disposable in return Disposables.create()}第二步:订阅信号let _ = ob.subscribe(onNext: { (text) in print("订阅信息: \(text)")}, onError: { (error) in p
2020-12-01 19:22:14
1701
原创 RxSwift系列—基本概念
一、基本概念1.1、函数响应式编程1.1.1 函数式函数式编程简称FP(Functional Programming),函数式编程就是一种抽象程度很高的编程范式,它将计算机运算看做是数学中函数的计算,而纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。函数式编程的一个特点就是:允许把函数本身作为参数传入另一
2020-12-01 19:09:29
1454
原创 App组件化架构设计实践V1.0
1、基本概念与共识业务组件化(或者叫模块化)作为移动端应用架构的主流方式之一,近年来一直是业界积极探索和实践的方向。在组件化过程中我们深刻体会到“没有绝对正确的架构,只有最合适的架构”这句话的意义。很多通用方案只是组件化的冰山一角,实际落地过程中还有相当多的东西需要考量。本文讨论的『库』是『功能库』(比如:图片库,网络库),统称为『库』,与具体的产品业务无关;区别于功能库,本文讨论的模块是『业务模块/组件』(比如订单模块,商品模块)。业务模块的名称,相比组件(Component),我们觉得称之为模块
2020-11-28 16:48:39
2561
1
原创 App客户端架构演化之路
2015年入职新东方参与留留学iOS端的研发,至今,参与了好几个项目(留留学、掌上新东方、SL、乐听说等),最近负责乐听说iOS App端。不同项目的经历,让我接触到了不同的项目架构和代码风格,也让我对App的项目架构有所思考与心得。1、App早期架构1.02015年6月留留学App iOS端1.0.0版本诞生,当时采用的架构很简单,就是在传统的MVC架构基础上,封装了一个网络服务层构...
2018-01-29 15:51:14
25214
1
原创 iOS8: Ignore manifest download, already have bundleID新发现『问题bundleID缓存在iOS系统"文件系统"下的数据库中』
1、网上现有的方案(方案一,可以搜索到详细的文章)最近客户老是让针对『iOS8: Ignore manifest download, already have bundleID』给出解决方案,很多资料都说是iOS 8.0的一个bug,当前解决方案是如大多数文章所建议的那样....方案如下:The biggestissue for us is that we can not repr
2015-02-06 00:52:58
2624
原创 Java开发防止表单重复提交三大解决方案
1、什么是重复提交及重复提高带来的什么问题在开发中,有很多也没设计表单数据的提交,如登录、注册等等;但如果用户点击了『登录』或『注册』时,点击浏览器『刷新按钮』刷新页面,如果不做处理此时会对同一组数据进行重复提交...2、解决方案在此,我将给大家提供三大解决方案。2.1 通过js脚本来防止思路是:当用户点击了『登录』或『注册』等按钮后,通过js脚本将按钮状态置为不可点击的状
2015-02-05 10:48:15
2095
原创 iOS终端数据持久化
iOS有很多数据持久化技术,包括传统的数据库,但也有一些较新的技术,它主要的持久化技术有:数据库、属性列表、对象归档和。本节将分别介绍这四种持久化方式,辅助本文在设计与实现中针对不同的需求选择合适的数据持久化方式。1、Lite数据库技术数据库技术被广泛的使用在各大系统中,数据库也是一个系统的核心部分,数据库管理系统如今发展已经很成熟,主要有:SQLite、Oracle、Mysql等
2015-02-05 00:52:50
548
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人