自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

了解➔熟悉➔掌握➔精通

为之,则难者亦易矣;不为,则易者亦难矣。

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

原创 深入详解Java动态代理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程​动态代理在Java中有着广泛的应用,比如Spring AOP、Hibernate数据查询、测试框架的后端mock、RPC远程调用、Java注解对象获取、日志、用户鉴权、全局性异常处理、性能监控,甚至事务处理等。本文主要介绍Java中两种常见的动态代理方式:JDK原生动态代理和CGLIB动态代理。

2025-10-27 14:23:49 1654 1

原创 深入详解Java反射机制

反射(Reflection)是 Java 在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。Class 类介绍:Java虚拟机为每个类型管理一个Class对象,包含了与类有关的信息,当通过 javac 编译Java类文件时,生成的同名 .class 文件保存着该类的 Class 对象,JVM 加载一个类即是加载该 .class 文件。Class和。

2025-10-27 10:57:38 1131 1

原创 MySQL的索引是如何实现的

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击http://www.captainbed.netMySQL中索引分三类:B+树索引、Hash索引、全文索引。InnoDB存储引擎中用的是B+树索引。要介绍B+树索引,不得不提二叉查找树、平衡二叉树和B树这三种数据结构。B+树是从它们三个演化来的。二叉查找树:图中为user表建立了一个二叉查找树的索引。节点中存储了键(key)和数据(data)。数据对应user表中的行数据。如果查找id=12

2022-01-04 21:39:17 38188 21

原创 MySQL日志-RedoLog、UndoLog与BinLog

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.netRedoLogRedoLog是InnoDB存储引擎层的日志,又称重做日志,用于记录事务操作的变化,记录的是数据修改之后的值,不管事务是否提交都会记录下来。在实例和介质失败(Media Failure)时,RedoLog文件就能派上用场,如数据库掉电,InnoDB存储引擎会使用RedoLog恢复到掉电前的时刻,以此来保证数据的完整性。在一条更新语句进行执

2021-12-12 21:30:47 566

原创 Java-ThreadLocal(看这一篇就够了)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net1、什么是ThreadLocalThreadLocal class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set

2020-12-17 15:13:09 23145 2

原创 Java-通俗易懂地理解HashMap的原理

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net一、HashMap的节点HashMap是一个集合,键值对的集合,源码中每个节点用Node<K,V>表示。 static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key;

2020-11-25 18:27:44 21927

原创 Java-理解volatile关键字(看这一篇就够了)

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net一、内存模型如果一个变量在多个CPU中都存在缓存(一般在多线程编程时才会出现),那么就可能出现缓存不一致的问题。缓存不一致性问题通常有以下2种解决方法:1、通过在总线加LOCK锁的方式CPU和其他部件进行通信都是通过总线来进行的,当总线上发出了LCOK锁的信号,那么只有等待代码完全执行完毕之后,其他CPU才能从变量所在的内存读取变量,然后进行相

2020-08-10 16:22:32 22104

原创 数据结构与算法之美-12:排序下-如何用快排思想在O(n)内查找第K大元素?

从我们的原理分析和伪代码可以看出,归并排序的执行效率与要排序的原始数组的有序程度无关,所以其时间复杂度是非常稳定的,不管是最好情况、最坏情况,还是平均情况,时间复杂度都是O(nlogn)。现在,我们集中精力来看快排的时间复杂度。归并排序算法是一种在任何情况下时间复杂度都比较稳定的排序算法,这也使它存在致命的缺点,即归并排序不是原地排序算法,空间复杂度比较高,是O(n)你可能会说,我有个很笨的办法,每次取数组中的最小值,将其移动到数组的最前面,然后在剩下的数组中继续找最小值,以此类推,执行K。

2026-11-11 19:35:20 47

原创 数据结构与算法之美-11:排序上-为什么插入排序比冒泡排序更受欢迎?

的排序算法中,冒泡排序、选择排序,可能就纯粹停留在理论的层面了,学习的目的也只是为了开拓思维,实际开发中应用并不多,但是插入排序还是挺有用的。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,我们不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。插入排序是同样的,不管怎么优化,元素移动的次数也等于原始数据的逆序度。在插入排序中,对于值相同的元素,我们可以选择将后面出现的元素,插入到前面出现元素的后面,这样就可以保持原有的前后顺序不变,所以插入排序是稳定的排序算法。

2026-11-06 11:21:12 382

原创 数据结构与算法之美-10:递归-如何用三行代码找到“最终推荐人”?

在时间效率上,递归代码里多了很多函数调用,当这些函数调用的数量较大时,就会积聚成一个可观的时间成本。在空间复杂度上,因为递归调用一次就会在内存栈中保存一次现场数据,所以在分析递归代码空间复杂度时,需要额外考虑这部分的开销,比如我们前面讲到的电影院递归代码,空间复杂度并不是O(1)比如,堆栈溢出、重复计算、函数调用耗时多、空间复杂度高等,所以,在编写递归代码的时候,一定要控制好这些副作用。对于递归代码,你有什么好的调试方法呢?递归,本质并没有变,而且也并没有解决前面讲到的某些问题,徒增了实现的复杂度。

2026-11-06 09:36:16 153

原创 数据结构与算法之美-09:队列-队列在线程池等有限资源池中的应用

在数组实现队列的时候,会有数据搬移操作,要想解决数据搬移的问题,我们就需要像环一样的循环队列。),队列的大小有限,所以线程池中排队的请求超过队列大小时,接下来的请求就会被拒绝,这种方式对响应时间敏感的系统来说,就相对更加合理。除此之外,我们还讲了几种高级的队列结构,阻塞队列、并发队列,底层都还是队列这种数据结构,只不过在之上附加了很多其他功能。前面我们讲了阻塞队列,在多线程情况下,会有多个线程同时操作队列,这个时候就会存在线程安全问题,那如何实现一个线程安全的队列呢?原子操作,可以实现非常高效的并发队列。

2026-11-05 16:02:11 158

原创 数据结构与算法之美-08:栈-如何实现浏览器的前进和后退功能?

每进入一个函数,就会将临时变量作为一个栈帧入栈,当被调用函数执行完成,返回之后,将这个函数对应的栈帧出栈。这里也可以用栈来解决。前面我讲的都比较偏理论,我们现在来看下,栈在软件工程中的实际应用。如果比运算符栈顶元素的优先级低或者相同,从运算符栈中取栈顶运算符,从操作数栈的栈顶取2。如果扫描的过程中,遇到不能配对的右括号,或者栈中没有数据,则说明为非法格式。,所以把耗时多的入栈操作的时间均摊到其他入栈操作上,平均情况下的耗时就接近O(1)我们再来看栈的另一个常见的应用场景,编译器如何利用栈来实现表达式求值。

2026-11-05 14:56:15 175

原创 数据结构与算法之美-07:链表下-如何轻松写出正确的链表代码?

链表代码写得好坏,可以看出一个人写代码是否够细心,考虑问题是否全面,思维是否缜密。所以,这一节讲到的东西,你一定要自己写代码实现一下,才有效果。而且,当我们写完代码之后,也可以举几个例子,画在纸上,照着代码走一遍,很容易就能发现代码中的Bug。你只要把这几个操作都能写熟练,不熟就多写几遍,我保证你之后再也不会害怕写链表代码。一样,其实也没有什么技巧,就是把常见的链表操作都自己多写几遍,出问题就一点一点调试,熟能生巧!因为,链表代码到处都是指针的操作、边界条件的处理,稍有不慎就容易产生Bug。

2026-11-05 14:13:08 206

原创 数据结构与算法之美-06:链表上-如何实现LRU缓存淘汰算法

我们上一节课讲过,当我们往支持动态扩容的数组中插入一个数据时,如果数组中没有空闲空间了,就会申请一个更大的空间,将数据拷贝过去,而数据拷贝的操作是非常耗时的。别着急,刚刚的分析比较偏理论,很多数据结构和算法书籍中都会这么讲,但是这种说法实际上是不准确的,或者说是有先决条件的。对于第一种情况,不管是单链表还是双向链表,为了查找到值等于给定值的结点,都需要从头结点开始一个一个依次遍历对比,直到找到值等于给定值的结点,然后再通过我前面讲的指针操作将其删除。不过,数组和链表的对比,并不能局限于时间复杂度。

2026-11-05 11:02:10 74

原创 数据结构与算法之美-05:数组-为什么很多编程语言中数组都从0开始编号?

但如果你是做一些非常底层的开发,比如开发网络框架,性能的优化需要做到极致,这个时候数组就会优于容器,成为首选。数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点就是支持随机访问,但插入、删除操作也因此变得比较低效,平均情况时间复杂度为O(n)在平时的业务开发中,我们可以直接使用编程语言提供的容器类,但是,如果是特别底层的开发,直接使用数组可能会更合适。个数据需要存储到数组中时,我们就需要重新分配一块更大的空间,将原来的数据复制过去,然后再将新的数据插入。如果我们申请了大小为10的数组,当第。

2026-11-05 09:30:45 321

原创 数据结构与算法之美-不定期福利第一期:数据结构与算法学习书单

我们就来聊一聊数据结构和算法学习过程中有哪些必读书籍。很多人一提到算法书就会搬出《算法导论》和《算法》。很多同学让我推荐一些学习数据结构与算法的书籍。这本书最大的特色就是讲了很多针对海量数据的处。除此之外,留言区很多人问到算法的实现语言。这种答疑的方式也会成为我们之后的固定动作,我也只看过比较简单的几卷,比如《基本算法。每节课中有需要代码实现的数据结构和算法,能让你对数据结构和算法有个大概的认识。跟《大话数据结构》走的是同样的路线,这也是我把它归到面试这一部分的原因。你可以把它当作你算法学习的终极挑战。

2026-11-04 19:01:46 114

原创 数据结构与算法之美-04:复杂度分析下-浅析最好、最坏、平均、均摊时间复杂度

你可以先用我们刚讲到的三种时间复杂度的分析方法来分析一。那究竟如何使用摊还分析法来分析算法的均摊时间复杂度呢?最好情况时间复杂度和最坏情况时间复杂度对应的都是极端。糕情况下对应的时间复杂度就是最坏情况时间复杂度。今天我会继续给你讲四个复杂度分析方面的知识点,你应该已经掌握了算法复杂度分析的大部分内容了。为了表示代码在不同情况下的不同时间复杂度,这段代码实现了一个往数组中插入数据的功能。看是否能将较高时间复杂度那次操作的耗时,今天我们学习了几个复杂度分析相关的概念,上一节我举的分析复杂度的例子都很简单,

2026-11-04 14:12:37 383

原创 数据结构与算法之美-03:复杂度分析上-如何分析、统计算法的执行效率和资源消耗?

只要跟着我的思路学习、练习,你很快就能和我一样,每次看到代码的时候,简单的一眼就能看出其复杂度,难的稍微分析一下就能得出答案。复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。谁的量级大,所以我们在表示复杂度的时候,就不能简单地利用加法法则,省略掉其中一个。类型数组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是O(n)现在,我把代码稍微改下,你再看看,这段代码的时间复杂度是多少?

2026-11-04 10:53:43 838

原创 数据结构与算法之美-02:如何抓住重点,系统高效地学习数据结构与算法?

学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。除此之外,我还给你分享了我总结的一些学习技巧,比如边学边练、多问、多思考,还有两个比较通用的学习方法,打怪升级法和沉淀法。我也会力争每节课都最大限度地给你讲透,帮你扫除知识盲点,而你要做的就是,避免一知半解,要想尽一切办法去搞懂我讲的所有内容。

2026-11-03 16:03:10 132

原创 数据结构与算法之美-01:为什么要学习数据结构和算法?

也有很多人说,自己实际工作中根本用不到数据结构和算法。我们平时可能更多的是利用已经封装好的现成的接口、尽管计算机相关专业的同学在大学都学过这门课程,里面的有序集合是用什么数据结构来实现的呢?很多程序员对数据结构和算法依旧一窍不通。性能几乎是开发过程中时刻都要考虑的问题。甚至很多培训机构也会培训这方面的知识,公司只能考察他们的基础知识是否牢固。至人生之路打开一扇通往新世界的大门。如何评估代码的性能和资源的消耗呢?排这些最最基本的数据结构和算法,很少需要自己实现数据结构和算法。

2026-11-03 11:02:20 114

原创 数据结构与算法之美-开篇词:从今天起,跨过“数据结构与算法”这道坎

我们整个专栏都是围绕数据结构和算法在具体软件实践中的应用来讲的,我根据自己研读数十本算法书籍和多年项目开发的经验,空间复杂度分析是数据结构和算法中非常重要的知识点,我尝试做一个让你能真正受用的数据结构与算法课程,这部分我会讲一些不是那么常用的数据结构和算法。我都会结合具体的软件开发实例,由浅入深进行讲。我希望这个专栏也能成为你的一个人生转折点。我很感激师兄当年给我的那本《算法导论》,核心和本质的东西其实就是当初学的那些知。这是我自己学习数据结构与算法的经历,我都会结合真实的软件开发案例来讲解,

2026-11-03 10:02:23 101

原创 从0开始学架构-架构师必读书单:“华仔,放学别走!”第5期

不管是普通程序员还是架构师,实践工作中都需要有一定的业务理解能力,而架构师的业务理解能力要求更高。一句话推荐:全面理解Java虚拟机,原理介绍得深入浅出,很少有技术书籍我会优先推荐国内作者,而这本是我大力推荐的。一句话推荐:结合宝洁的经验,提出了一套完善的战略规划和落地方法,理论与实践兼备,架构师。端程序员的渲染知识,以及所有程序员都要求的算法知识等。

2026-11-02 17:23:19 272

原创 从0开始学架构-结束语:坚持,成就你的技术梦想

看到专栏的内容能够帮助你理解架构设计这个看起来高大上的技术,专栏的结束意味着你已经完成整套架构设计方法论的学习,一定要坚持自己的梦想,因为所有的这些问题都是正常的,《大牛养成指南:吃的草够多,你也能成为大牛》几乎每个技术人员心中都有一个架构师的梦想,那种创造的感觉真的是让人感到喜悦和自豪,所以在专栏结束之际聊聊我对坚持的理解。前面的山路越崎岖,山顶的风景才会越美!坚持学习的一个典型难题就是时间的投入,毕竟架构师代表了技术路线发展的巅峰。就是我想跟你分享的除了技术本身以外,也曾遇到自己开发的系统上线就回滚,

2026-11-02 16:40:25 424

原创 从0开始学架构-架构师成长之路:“华仔,放学别走!”第4期

分析和总结自己团队甚至公司的各种系统的架构设计优缺点,这样在做具体方案设计的时候才能选择合适的数据结构。级架构师的角色,因为在系统复杂度相对不高的情况下,结构的实现原理,因为只有深入掌握了这些实现原理,的文档中就有关于消息队列架构设计的分析和取舍。接下来我们看看从程序员到架构师的成长过程中,杂度的不同,中级架构师面对的系统复杂度要高于。够涵盖这么多的设计点,因此更多的是依靠自己。中级架构师与初级架构师的典型区别在于系统复。构师可能发现其实没有哪个开源项目是合适的,是几个关键技术细节决定整个架构设计的成败,

2026-10-30 18:01:53 101

原创 从0开始学架构-50:架构实战架构设计文档模板

消息队列系统需要输出日志给公司已有的监控平台,通过监控平台监控消息队列系统的健康状态,包括发送消息的数量、发送消息的大小、积压消息的数量等,详细监控指标在后续设计方案中列出。通常情况下,规划和设计的需求比较完善,但如果一次性全部做完,项目周期可能会很长,因此可以采取分阶段实施,即:第一期做什么、第二期做什么,以此类推]消息队列系统的服务器和数据库服务器采取混布的方式部署,即:一台服务器上,部署同一分组的主服务器和主MySQL。消息队列系统这部分内容很简单,但有的业务系统1H就是具体的用例了,

2026-10-30 16:37:09 105

原创 从0开始学架构-49:谈谈App架构的演进

如果某个组件依赖其他组件,组件之间通过消息系统进行通信,通过这种方式来实现组件隔离,从而避免各个团队之间的互相依赖和影响,以提升团队开发效率和整个系统的可扩展性。站在企业的角度来讲,当然希望能够减少人力投入成本(虽然我站在程序员的角度来讲是不希望程序员被减少的),因此最近几年各种跨平台方案不断涌现,比较知名的有Facebook的。的,区别在于发布方式,组件化采用的是静态发布,即所有的组件各自独自开发测试,然后跟随。移动互联网此时已经成为明确的大趋势,团队需要考虑的不是要不要转移动互联网的问题,

2026-10-30 11:20:18 147

原创 从0开始学架构-48:再谈开源项目如何选择、使用以及二次开发

这就是今天的全部内容,留一道思考题给你吧,目前的云计算厂商很多都提供了和开源项目类似的。当我们发现开源项目有的地方不满足我们的需求时,自然会有一种去改改的冲动,软件领域和硬件领域最大的不同就是软件领域没有绝对的工业标准,速度就是生命,引入开源项目可以节省大量的人力和时间,一般开源项目都会把采用了自己项目的公司列在主页上,运气不好可能遇到一个之前全世界的使用者从来没遇到的。人工恢复都没办法,只能接一个用户投诉处理一个,主要聊了我在学习开源项目的一些看法和步。一个头疼的问题就是相似的开源项目较多,

2026-10-29 19:28:28 145

原创 从0开始学架构-47:架构重构内功心法第三式运筹帷幄

我提到架构师需要从一大堆问题中识别关键的复杂度问题,备或者有的问题没解决的情况下就是不能做架构重构。最难的问题解决起来耗时都比较长,占用资源比较多,导致最后做了大半年,回头一看好像做了很多事情,今天我为你讲了架构重构中分阶段有序推进的技巧,这样做首先是效率高,因为阶段目标比较明确,每个阶段的改动不会太大,降低了总体风险。如果只针对这个复杂度问题进行架构重构,重构阶段将原来的单点数据库改为多中心。是今天的全部内容,留一道思考题给你吧,识别出架构的核心复杂度体现在庞大的系。就需要评估每个阶段所需要耗费的时间,

2026-10-29 17:16:28 565

原创 从0开始学架构-46:架构重构内功心法第二式合纵连横

部分重构的系统并不是到了火烧眉毛非常紧急的时候才开始启动的,还是运营人员,明显就看出系统的可用性有问题了。所以这部分的沟通协调其实相对来说要容易一些,今天我为你讲了架构重构中的沟通和推动方法,这就是今天的全部内容,留一道思考题给你吧,找出真正需要通过架构重构解决的核心问题,有的重构还需要和其他相关或者配合的系统。如果对方真的是因为有其他更重要的业务,沟通和推动的事情让项目经理做就可以了!有的人会简单理解为这是自私的表现,然后再拿其他系统的数据进行对比,除了上面讨论的和上下游沟通协调,

2026-10-29 15:59:38 118

原创 从0开始学架构-45:架构重构内功心法第一式有的放矢

团队上需要架构师能够与其他团队达成一致的架构重构计划和步骤;新架构也会受到旧架构的约束和影响,因为业务在旧架构上产生的数据是不能推倒重来的,但绝大部分的架构演化都是通过架构重构来实现的。期望通过架构重构来解决所有问题当然是不现实的,今天我为你讲了架构重构的时候需要做到有的放矢,拆分到不同的子系统中,降低单个系统的复杂度。此时可能有人想到了系统的架构是否存在问题,有的架构师一上来搜集了系统当前存在的问题,系统为例,当时我们接手后遇到的问题有很多,架构重构对架构师的综合能力要求非常高,

2026-10-27 10:34:56 226

原创 从0开始学架构-44:互联网架构模板“平台”技术

传统手工运维方式效率低下的一个主要原因就是要执行大量重复的操作,重复工作很多,因此需要统一的管理平台来管理所有的系统的权限。任务管理的主要职责是将测试用例分配到具体的资源上执行,今天我为你讲了互联网企业常见的平台以及基本的平台功能,测试自动化的主要手段就是通过脚本或者代码来进行测试,式与传统的数据挖掘方式差异较大,因此数据平台在实。个过程中需要执行大量的重复或者类似的操作。这就是今天的全部内容,留一道思考题给你吧,容易出错,因此需要在运维标准化的基础上,表盘的指针偏离幅度及指针指向的区域颜色,

2026-10-26 17:06:40 278

原创 从0开始学架构-43:互联网架构模板“用户层”和“业务层”技术

相信经过深度思考的回答,也会让你对知识的理解更加深刻。互联网业务的一个典型特征就是通过互联网将众多分散的用户连接起来,因此用户管理。多,已经没有人能够说清楚业务的调用流程了,出了问题排查也会特别复杂。今天我为你讲了互联网架构模板中的用户层技术和业务层技术,连接保活是整个消息推送设计中细节和黑科技最多的地方,由于用户特征变化很大,复杂度越来越高的一个主要原因就是系统越来越庞大,拆的方式你可以查看专栏前面可扩展架构模式部分的分。这就是今天的全部内容,留一道思考题给你吧,用户管理系统面临的主要问题是用户数巨大,

2026-10-26 16:23:09 86

原创 从0开始学架构-42:互联网架构模板“网络层”技术

注意这里的网络层和通常理解的如何搭建一个局域网这种概念不一样,业务上需要做一定的妥协和兼容,比如不需要数据的实时强一致性,互联网业务的高性能和高可用需要从更高的角度去设计,多机房设计最核心的因素就是如何处理时延带来的影响,需要基于业务的特性进行详细的分析和设计。不一定所有业务都能实现多中心,目前国内的银行、水灾等自然灾害,同城多机房也是有很大风险的。这就是今天的全部内容,留一道思考题给你吧,里强调的是站在网络层的角度整体设计架构,这种切换操作允许一定时间的中断(例如,支付的多中心方案都需要独立设计和实现。

2026-10-26 15:15:36 122

原创 从0开始学架构-41:互联网架构模板“开发层”和“服务层”技术

业界已经有很多成熟的开源实现方案,如果要求不高,基本上拿来用即可,例如,RocketMQ。由于其相对比较简单,很多公司也会花费人力和时间重复造一个轮子,这样也有好处,因为可以根据自己的业务特点做快速的适配开发。这就是今天的全部内容,留一道思考题给你吧,使用统一的开发框架和开发语言可以让团队开发效率更高,但这样做会带来什么问题?但如果业务对消息的可靠性、时序、事务性要求较高时,则要深入研究这些开源方案,否则很容易踩坑。传统的异步通知方式是由消息生产者直接调用消息消费者提供的接口进行通知的,

2026-10-26 14:34:52 278

原创 从0开始学架构-40:互联网架构模板“存储层”技术

所以大数据存储和处理这块反而是最简单的,因为你没有太多选择,前面的架构模式部分有所涉及,因此就不再详细展开技术细节了,的这两个特点很好地弥补了关系数据库的不足,因此在互联网行业。让架构师对一个公司的整体技术架构有一个完整的全貌认知。所以互联网公司流行的做法是业务发展到一定阶段后,由于互联网行业基本上每个业务都会有大量的小数据,的基础上封装一个小文件存储平台并不是太难的事情。得益于开源运动的发展和最近几年大数据的火爆,今天我为你讲了互联网架构模板中的存储层技术,这就是今天的全部内容,留一道思考题给你吧,

2026-10-26 11:18:20 242

原创 从0开始学架构-39:互联网技术演进的模式

以互联网企业最常用的。两者合力的一个典型后果就是系统数量在原来的基础上又增加了很多。业务快速发展时期的主要目的是将原来不完善的业务逐渐完善,因此。新业务的创新给技术带来的典型压力就是新的系统会更多,同时,到了一个临界点后就产生了质变,即系统数量的量变带来了。无法给出一个统一的模板让所有的架构师拿来就套用,此时原来不完善的业务就进入了一个快速发展的时期。主要是将原来的大系统拆分为多个互相配合的小系统。常见的做法是通过消息队列来完成系统间的异步通知,的方式在刚开始的时候好用,因为系统还比较简单,

2026-10-22 20:31:15 123

原创 从0开始学架构-38:架构师应该如何判断技术演进的方向?

保守派的主要问题是不能享受新技术带来的收益,因为新技术很多都是为了解决以前技术存在。答案在于用户选择一个产品的根本驱动力在于产品的功能是否能够更好地帮助自己完成任务。互联网的出现不但改变了普通人的生活方式,同时也促进了技术圈的快速发展和开放。可选工具,同时也可以通过学习业界先进的技术来提升自己的技术实力。准确就会导致投入大量的人力和时间做了对业务没有作用的事情,但是这样做并没有意义,因为用户选择的是淘宝的整套网络购。将自己的技术分享出来,以此来提升自己的技术影响力,完成服务而提供给用户使用的一个载体。

2026-10-22 20:10:31 107

原创 从0开始学架构-37:微内核架构详解

规则引擎的规则之间进行通信的方式就是数据流和事件流,由于单个规则并不需要依赖其他规则,因此规则之间没有主动的通信,规则只需要输出数据或者事件,由引擎将数据或者事件传递到下一个规则。等语言,规则引擎也规定了规则开发的语言,业务人员需要基于规则语言来编写规则文件,然后由规则引擎加载执行规则文件来完成业务功能,因此,规则引擎的插件连接实现机制其实就是规则语言。提供了规则管理的知识库,通过它可以实现规则的版本控制,以及规则的在线修改与编译,使得开发人员和系统管理人员可以在线管理业务规则。

2026-10-22 19:03:12 93

原创 从0开始学架构-36:微服务架构最佳实践-基础设施篇

高级软件工程师组成的开发团队,采用自研的方式,完成所有的微服务基础设施开发,你预测需要多长时间?自理式服务发现实现比较简单,因为这部分的功能一般通过统一的程序库或者程序包提供给各个微服务调用,今天我为你讲了微服务架构相关的基础设施的概要介绍和关键设计点,希望对你有所帮助。而不是所有的微服务都可以访问,因此需要设计服务安全机制来保证业务和数据的安全性。服务监控需要搜集并分析大量的数据,因此建议做成独立的系统,系统拆分为微服务后,内部的微服务之间是互联互通的,它不需要也没办法理解这么多微服务的职责分工和边界,

2026-10-21 15:02:49 85

原创 从0开始学架构-35:微服务架构最佳实践-方法篇

核心服务可以是一个也可以是多个,只要最终的服务数量满足。理论(每个团队的人数不能多到两张披萨都不够吃的地步。不是快刀砍乱麻随便拆分成指定数量的微服务就可以了,导致这种困惑的主要根因在于从业务的角度来拆分的话,第一个原因是已经有开源的微服务基础设施全家桶了,虽然建设完善的微服务基础设施是一项庞大的工程,将可靠性要求高的核心服务和可靠性要求低的非核。以根据目的的不同灵活地选取不同的拆分方式。将性能要求高或者性能压力大的模块拆分出来,这就是今天的全部内容,留一道思考题给你吧,

2026-10-21 14:41:33 190

空空如也

空空如也

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

TA关注的人

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