流行语之外:微服务模式的简要历史

一文了解:微服务及其演进史 阅读详情

通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习。

探索过去的软件设计模式对微服务创建的影响

介绍
微服务是商业应用程序开发中的热门新事物。 微服务一词已取代敏捷,DevOps和RESTful,成为所有履历表和会议演讲都必须使用的热门新流行语。 但是微服务不只是一时的流行。 实际上,它们是所有这些先前概念的演变,并且这种方法已经开始显示出有望解决应用程序开发中许多长期存在的问题的希望。 在阅读本文的同时,我鼓励你观看MicroservicesTV第13集和第14集(请参阅下文),以掌握有关微服务的发展方式,位置和原因的牢固掌握。

从头开始
为了理解这种发展,我们需要退后一步来研究什么是微服务,它们被替换了什么以及为什么它们变得必要。让我们从1980年代初期开始,引入第一个主要的系统分发技术:远程过程调用(RPC)。 RPC是Sun Microsystems最初的ONC RPC背后的概念,也是DCE(1988)和CORBA(1991)背后的基本思想。

在每种技术中,基本思想是使开发人员可以远程调用。诺言是,如果开发人员不必关心他们调用的过程调用或方法是本地的还是远程的,那么他们可以构建更大的跨机器系统,从而避免处理和内存可扩展性问题,这些问题影响了当时的系统。 。 (请记住,此时最常见的处理器是具有64K地址空间的16位处理器!)

随着处理器的改进和本地地址空间的增大,此问题变得不那么重要了。更重要的是,DCE和CORBA的第一批大型实现向架构师传达了有关分布式计算的一个重要发现:``仅仅是因为可以分发的东西并不意味着应该分发它。

一旦大内存空间变得司空见惯,很明显,对跨机器分布方法的错误选择可能会对系统性能产生可怕的影响。早期分发所有内容的努力导致许多系统具有非常健谈的界面-甚至达到以面向对象的语言分发变量getter和setter的地步。在这样的系统中,网络开销远远超过了分配的优势。

这导致我们进入第一个模式,该模式旨在解决上述观察问题,而这是我与John Crupi和Martin Fowler独立发现的一种模式。在每种情况下,我们从Erich Gamma的书《设计模式:可重用的面向对象设计的元素》开始,并注意到了Facade模式。 Facade模式是关于将大型系统的非结构化接口封装在单个结构化的接口中,以减少“成色”。换句话说,这是关于减少系统的接口横截面。我们开发的Session Facade方法通过识别整个子系统的关键,大粒度的接口并仅公开那些用于分发的接口,将该模式应用于分布式系统。

我们使用Enterprise JavaBeans(EJB)实施了第一个会话外观,尽管你仅使用Java可以很好地实现,但是它复杂,难以调试并且不能与其他语言甚至其他供应商产品互操作。缺乏互操作性直接导致了2000年代初至中期的下一个努力:即所谓的面向服务的体系结构(SOA)。但是,SOA并不是从这样宏伟的术语开始的。它最初是由“做最简单的可能可行的工作”开始的,该工作称为简单对象访问协议(SOAP),最初由Microsoft在1999年发布。

从本质上讲,SOAP只是通过HTTP调用对象方法的一种方式。它利用了2000年代初期计算世界的两个工件:公司网络对HTTP的日益增长的支持,以及该支持包括用于记录和调试基于文本的网络调用的机制这一事实。

围绕SOAP进行的第一手工作非常有帮助,因为它很快就使你可以轻松地在以多种不同语言和多种平台实现的系统之间进行互操作。但是,整个SOA失败的地方远远超出了这个简单的开始,除了简单的方法调用之外,还增加了一层又一层的附加概念:异常处理,事务支持,安全性和数字签名都被添加到了一些已经很复杂的东西上协议。这导致了下一个主要观察结果:试图使分布式呼叫的行为像本地呼叫一样总是以眼泪结束。

整个行业逐渐开始转向拒绝SOAP和WS- *标准固有的过程性分层概念。取而代之的是,采用可追溯到Roy Fielding博士的代表性国家转移(REST)。 REST的基本原理非常简单:将HTTP视为HTTP。 REST不会通过HTTP来分层过程调用语义,而是以创建,读取,删除和更新语义的方式指定HTTP动词。它还概述了通过Web的另一个公认原则指定唯一实体名称的方法:URI。

同时,该行业还开始拒绝Java平台,企业版(JEE)和SOA世界的另一个遗产:大型应用服务器场。自从1999年引入Enterprise Java(版本为1.2)以来,应用程序所有者和应用程序管理员之间一直存在紧张关系。
引入JEE时,许多公司开始采用应用程序服务器的概念作为许多不同应用程序的主机,因为它类似于大型机领域的现有IT模型。一个操作小组将控制,监视和维护来自Oracle或IBM的相同应用程序服务器的“服务器场”,并将不同部门的应用程序部署到该服务器场上。这种标准化和一致性对于运营团队非常有用,并降低了总体运营成本。但这与应用程序开发人员产生了冲突,因为开发和测试环境很大,难以创建,并且需要操作团队的参与。这通常意味着创建新环境可能要花费数月的时间,这会减慢项目速度并增加其开发成本。而且,由于这些环境不受团队控制,因此应用服务器版本,补丁程序级别,应用程序数据和环境之间的软件安装之间通常存在不一致之处。

开发人员更喜欢的是更小,重量更轻的应用程序平台,通常是诸如Tomcat或Glassfish之类的开源应用程序服务器。同时,随着诸如控制反转和依赖注入之类的技术的普及,JEE的复杂性正在回避,而转向了所谓的Spring平台的简单性。由此得出的结论是,开发团队发现,能够在彼此尽可能接近的开发,测试和生产环境中持续稳定地自行构建和部署应用程序的能力不仅速度更快,而且错误更少。 -容易发生,因为消除了由环境不一致引起的所有错误类别。这导致下一个观察结果:只要可能,你的程序及其运行时环境应完全独立。

这三个观察是Fowler所描述的微服务的核心。 Fowler的微服务设计原则之一是,微服务是“围绕业务功能组织的”。这直接源于一个发现,即仅仅因为你可以分发某些东西并不意味着你应该这样做。 Facade模式的各种形式的整个概念都是关于为系统或子系统定义特定的外部API。这样做的潜台词是该API将由业务驱动。 Fowler使该上下文明确。

通常,了解这对某些开发团队是一个障碍–他们只是不习惯于在业务接口方面进行设计,并且可能会发现自己很快就转移到了技术接口(例如Login或Logging)上。在这些情况下,许多团队发现适用的是Eric Evans的书《域驱动设计》中的几种模式。特别是,他的实体和聚合模式可用于识别直接映射到微服务的特定业务概念。同样,他的服务模式还提供了一种映射操作的方式,这些操作不对应于单个实体,也不聚合到微服务所需的基于实体的方法中。

同样,Fowler使用“智能端点和哑管道”的规则源于使用EJB,SOAP和其他复杂分发技术的团队的经验,结果是,人们试图使分布式系统在本地看起来总是以失败告终。最后,Fowler关于分散管理和分散数据管理的命令源于来之不易的发现,即你的程序和运行时环境应该是独立的。

这在哪里离开我们
Fowler,Adrian Cockcroft和其他人现在已经提出了令人信服的理由,说明为什么开发团队应该采用微服务。 但是,如果我们研究学习微服务架构的所有课程的方法,我们可以得出一个结论,该结论与我刚才讲的以开发人员为中心的故事有些不同。 特别是,你必须了解使微服务在现有应用程序的公司环境中工作的现实,并且还必须意识到微服务体系结构在DevOps的操作方面的额外重视。

生活在企业世界中
在Netflix,Gilt.com和Amazon等公司发布了许多成功案例之后,微服务体系结构开始引起人们的关注。但是,所有这些公司以及微服务的许多其他成功都有一个共同点-它们都是诞生于开发新应用程序或没有可替代的大量旧代码库的网络公司。当传统公司采用微服务时,选择第一个绿色应用程序来测试微服务后,他们遇到的一个问题是微服务架构的某些原则,特别是“分散数据管理”和“当你必须重构大型整体应用程序时,很难实施“分散治理”原则。

但幸运的是,针对该问题的方法已经存在了好几年了,其形式是马丁·福勒(Martin Fowler)最初在2004年记录的,即他从事微服务工作的几年之前。他的概念称为“扼杀程序应用程序模式”,它旨在解决你几乎从未真正生活在绿色领域的事实。最需要微服务的程序是Web上最大,最讨厌的程序,但是再次利用Web的体系结构可以为我们提供管理所需重构的策略。

详细了解Martin Fowler的扼杀器应用程序。
重构到微服务,第1部分介绍了如何从传统的中间件架构过渡到微服务。

扼杀器应用程序是一个简单的概念,其基于葡萄藤将其缠绕的树扼死的类比。这个想法是,你使用Web应用程序的结构-它是从功能上映射到业务域的各个方面的单个URI构建的事实-将应用程序拆分为不同的功能域,并用新的域替换这些域基于微服务的实现,一次仅一个域。这两个方面构成了在同一个URI空间中并行存在的独立应用程序。随着时间的流逝,新重构的应用程序将扼杀或替换原始应用程序,直到你最终能够关闭整体应用程序为止。

但这并不是我们发现对使微服务方法在企业界有效的唯一模式。另一个重要方面是,在许多情况下,开发团队都无法对其数据进行分散控制。这就是我们称为Adapter Microservice的模式的原因,它是Erich Gamma等人设计模式的原始Adapter模式的扩展。

在适配器微服务中,你可以在两个不同的API之间进行调整。第一个是面向业务的API,它使用RESTful或轻量级消息传递技术构建,并使用与传统微服务相同的域驱动技术进行设计。但是它适应的第二个API是现有的遗留API或基于传统WS- *的SOAP服务。纯粹主义者可能会反对这种方法,并试图坚持认为,如果你不采用分散数据,那么你就不会使用微服务。但是,公司数据的存在是有原因的,而且除了组织惯性之外,还有很多其他原因使数据保持不变。可能是仍有大量旧应用程序仍需要访问其当前格式的数据,而这些旧应用程序无法轻松适应新的API,或者数据的绝对重量(通常以数百TB或PB为单位) )排除了迁移到单一服务拥有的新表格的可能性。

将操作放回DevOps中
微服务的另一个重要方面涉及称为DevOps的一组实践的操作方面。这源于最初为常规应用程序管理开发的许多模式。 Fowler在其关于微服务的原始论文中强调了这一点的重要性,他指出在基于持续交付和持续集成的DevOps流程中,有必要对基础架构自动化进行调整。但是,对于开始小规模采用微服务的团队而言,对此的需求并不总是很清楚。问题在于,尽管使用微服务可以更轻松地快速更改和部署单个服务,但与相应的整体应用程序相比,管理和维护一组服务的整体工作量也更大。

例如,这就是许多常见框架(例如微服务的Netflix框架和Amalgam8)采用服务注册表模式的原因之一:通过避免将特定的微服务终结点硬编码到你的代码中,不仅可以更改代码的实现,下游微服务,但它还允许选择服务位置,以在DevOps管道的不同阶段有所不同。没有Service Registry,随着对代码的更改开始通过微服务的调用链向上传播,你的应用程序将很快陷入困境。

实现更好的隔离同时又可以更轻松地调试微服务的想法是我们已经确定的几种DevOps模式的核心,特别是相关ID和Log Aggregator。在Gregor Hohpe的《企业集成模式》一书中以特定的形式识别并记录了相关ID模式,但是现在我们已经看到了在OpenTracing等项目中推广的概念,该概念允许通过多种以多种不同语言编写的微服务传播跟踪。 Log Aggregator是一种新模式,已在许多开源和商业产品(例如Cloud Foundry和开源ELK堆栈)中实现;它通过允许将来自多个不同微服务的日志聚合到一个可搜索的存储库中来补充相关性ID。总之,无论服务的数量或每个调用堆栈的深度如何,这些都允许对微服务进行高效且易于理解的调试。

最后,Fowler在他的文章中指出,DevOps的另一个方面是两者之间的关键桥梁:为失败而设计的重要性。尤其是,由于Netflix的Hystrix框架实现了Circuit Breaker模式,因此它已成为许多微服务实现中的重要组成部分。断路器最早记录在迈克尔·尼加德(Michael Nygard)的2007年的《释放!使用Circuit Breaker,你可以避免浪费时间处理下游故障(如果你知道下游故障已在发生),并且可以通过在上游服务调用中植入代码的Circuit Breaker部分来处理,以检测下游服务何时发生故障并避免尝试称呼它。这样做的好处是每个调用都会“快速失败”,当你知道下游调用注定会失败时,你可以为用户提供更好的整体体验,并避免对线程和连接池等资源进行错误的管理。

这种资源管理曾经是DevOps运营方面的专属工作,但是微服务体系结构可以更有效地将双方融合在一起,因为它们都致力于使最终的应用程序更加可靠,高效和灵活。

下一步是什么
在本文和随附的视频中,我们探索了微服务的历史先例,并研究了微服务体系结构是如何产生的。 我们还讨论了在企业界成功应用微服务需要遵循的模式,以及在应用微服务体系结构时可能遇到的挑战。

喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
如果你对java技术很感兴趣也可以交流学习,共同学习进步。
不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代

文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货

Debezium发布历史106 鉴于距离上次社区通讯已经过去了很长时间,值得一提的是今年4 月发布的Debezium 1.5 中添加的一些新功能:MySQL 连接器进行了实质性重写,现在还支持事务标记事件、Debezium 基于 LogMiner 的 CDC Oracle 的实现已宣布稳定,并且我们已向 Debezium Server 添加了对 Redis Streams 的支持。如果您是 Debezium 的用户,并且希望加入其中,请向我们发送 GitHub 拉取请求,或通过此处找到的社区渠道直接与我们联系。 阅读详情

相关推荐

软件架构设计核心:4+1视图模型与五大经典风格解析

软件架构是构建复杂系统的蓝图,其核心在于通过一套结构化的设计原则来组织系统组件、规范交互方式并管理复杂性。从原理上看,架构设计旨在实现关注点分离,确保系统的可维护性、可扩展性与可靠性。其技术价值体现在为团队提供统一的沟通语言和设计约束,从而高效应对需求变化与技术演进。在应用场景上,无论是传统的企业应用、高并发Web服务,还是新兴的物联网与机器人系统,都需要选择合适的架构风格作为基础。本文聚焦于经典的4+1视图模型,它从逻辑、进程、开发、物理及场景五个维度完整描述架构,并结合管道-过滤器、调用-返回等五大传统

weixin_30940783的博客 398

什么是微服务

本文系统梳理了Java Web开发技术演进历程。从早期基于Servlet的单体架构,到SSH/SSM框架时代的技术分层,最终演进为当前主流的微服务架构。重点分析了微服务架构的特点:将单体应用拆分为独立部署的小型服务单元,每个服务聚焦单一业务功能,通过轻量协议通信。文章对比了不同架构的优劣势,指出微服务具有松耦合、技术栈灵活、容错性强等优势,但也带来了分布式系统复杂性的挑战。技术发展从Servlet到SpringBoot/SpringCloud的演进,体现了Java生态对开发效率和系统可扩展性的持续优化。

LSL666_的博客 470

DeepSeek-R1 API开发指南:从入门到实战应用

大语言模型(LLM)作为人工智能领域的重要突破,正在重塑人机交互和内容生成的方式。DeepSeek-R1作为新一代中文大模型API,通过先进的深度学习架构实现了接近人类水平的语言理解与生成能力。其核心技术原理基于Transformer架构,通过海量数据训练获得强大的语义表征能力。在工程实践中,该API特别适合构建智能客服、内容生成系统和知识问答平台等应用场景。开发者可以通过简单的RESTful接口快速集成,利用其128k tokens的大上下文窗口处理复杂任务。热词分析显示,'中文语境理解'和'长文本连贯性

weixin_30915951的博客 328

一.微服务发展史

微服务文档原文链接微服务文档译文链接2014年,微服务的概念传入中国,微服务架构是一种架构模式(架构风格),它将一个单体架构的应用按照业务划分为一个个的独立运行的程序,也就是服务,它们之间通过HTTP协议进行通信,可以根据实际业务采用不同的编程语言和存储技术(如:MySql,SqlServcer),自动化部署减少人为控制,降低出错概率。

java_qianmo的博客 887

软件设计师考试复习大全:深入解析与实践

在编程语言领域,随着时间的发展,涌现了多种流行语言,每种语言都有其独特的特点和适用场景。从早期的C语言到如今的JavaScript,每一种语言都在其擅长的领域扮演着重要的角色。本节将详细介绍编程语言的发展历程以及各语言的特性与适用场景,帮助读者更好地理解各种编程语言。网络技术的应用涉及到生活的方方面面,从家庭网络到企业信息系统,再到全球互联网的互联互通。学习和掌握网络技术的各个方面,不仅能够帮助我们更好地使用网络资源,也能够在遇到问题时迅速应对,保证网络的正常运行。

weixin_35761094的博客 885

Qlib数据获取避坑指南:从CSV导入到自定义数据源的完整解决方案

本文详细解析了Qlib数据获取的完整解决方案,从CSV导入到自定义数据源,涵盖了股票数据处理的关键技巧和常见陷阱。特别针对Qlib平台的数据格式要求和复权处理提供了实用指南,帮助量化投资者高效整合Wind等第三方数据源,确保数据质量与模型性能。

weixin_29047919的博客 304

微服务发展的历史_技术分享|微服务模式发展简史

微服务是商业应用程序开发中最热门的新事物。微服务这个词取代了敏捷、DevOps和RESTful,成为了所有简历和大会演讲中都必须提及的新热门词。但微服务并不只是一个流行词或人们一时的兴趣。事实上,它们是所有这些以前的概念的演化结果,是一种开始表现出巨大潜力的,有望解决应用程序开发中许多长期存在的问题的方法。了解微服务是如何发展的、为何获得发展,以及朝哪个方向发展。接下来,为大家分享一篇关于微服务模...

weixin_39898733的博客 1345

EBSD数据转ABAQUS的inp文件实操指南

晶体塑性有限元模拟中,如何将材料微观组织表征数据转化为可计算的有限元模型,是连接实验与仿真的关键环节。EBSD技术能够获取材料表面的晶体取向、晶粒形貌和晶界分布信息,但这类数据需要经过格式解析、欧拉角转换、网格生成等步骤,才能被ABAQUS等有限元软件读取。通过将扫描点坐标映射为节点、按像素邻域生成单元,并将Bunge约定欧拉角变换为局部坐标系方向余弦,用户可以准确构建包含真实微观结构的inp文件模型。这一流程广泛应用于金属材料形变、织构演化及应力集中分析等研究场景,有效提升仿真结果与实验的一致性。围绕数据

weixin_42509513的博客 310

从单体架构到微服务的发展历程

架构的演变过程: 单体架构——>垂直架构——>soa面向服务架构——>微服务架构 单体架构:   特点:     ①所有功能集中在一个项目中     ②所有功能都要达成war包部署到服务器       ③ 通过集群(session共享集群)来提高服务器的性能 优点:     ①.项目架构简单,前期开发的成本低,周期短,小型企业首先.缺点:     ①全部的功...

qq_41531324的博客 7453

PSpice 导入 LTspice 仿真实验 --(如何解决PSpice模型无法使用的错误)

参考了网上第三方器件导入LTspice的博客和资料,不论是哪个公司下载的SPICE模型导入LTspice的方法都类似。如果遇到导入报错的情况可以先看一下报错提示,如果通过语法修改实现功能的则说明可以进行仿真,当然性能可能与官方给的模型存在一点出入,但做一个基本的功能验证本人认为还是可以的,总比做出板子用不了或者完全不匹配的要好一些。

伊丽莎白的学习之路 8998

PowerBuilder 9.0安装组件全解析:Adaptive Server Anywhere、PowerDynamo、InfoMaker到底怎么选?

本文从技术架构师视角详细解析PowerBuilder 9.0安装组件选型策略,包括Adaptive Server Anywhere、PowerDynamo和InfoMaker的核心功能与应用场景。通过分析组件间的依赖关系和安装冲突机制,提供针对不同开发需求的最佳安装方案,帮助开发者高效配置PB9.0开发环境。

weixin_28700593的博客 441

2024年10大软件开发趋势

随着 2024 年的到来,技术进步和不断变化的市场需求正在推动软件开发领域继续呈指数级增长。对于组织和工程师来说,及时了解这些模式不仅有用,而且是保持残酷和有效的基础。在本文中,我们研究了预计将在 2024 年产生巨大影响的关键编程改进模式。2024年计算机编程通用标准作为 2024 年 IT 业务特征的整体编程改进方法将进一步结合人工智能和 ML 进步、区块链的使用和多运行时微服务。AR 和 VR 的广泛使用同样将继续塑造业务。此外,软件工程师将更加强调网络保护和经济编程改进。

一览无遗 3132

(一)PyBullet机器人仿真入门:从环境搭建到实例解析

本文详细介绍了PyBullet机器人仿真平台从零开始的完整入门指南。内容涵盖环境搭建、官方示例解析、核心操作(连接、世界与模型)、关节控制与状态读取,以及碰撞检测、传感器模拟等高级功能,帮助读者快速掌握这一强大的机器人仿真工具。

weixin_29062865的博客 1379

Java Annotated Monthly - 2019年2月

1月份有很多文章总结了2018年并预测了2019年的事情,所以本月的Java Annotated Monthly回顾了去年,并期待着新版本。由于某种原因,本月我们还有大量的Java教程,也许每个人的新年决心都是开始写博客! 2018年摘要和2019年预测 2019年:年度安全加入DevOps派对- 我认为DevSecOps已经是一件事了吗? DevOps在2018年教给我们什么- 它...

weixin_43923408的博客 206

uniapp - H5网页打包运行报错Failed to load resource: net::ERR_FILE_NOT_FOUND(uniApp打包成H5部署到服务器,打包h5白屏并报错页面空白)

Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp 坑之打包之后白屏,uniapp打包h5,HBuilderX 打包H5后空白报错 Failed to load resource: net::ERR FILE NOT_FOUND,UNI-APP H5应用白屏(空白页)解决方案,白屏并报错Failed to load resource: net::ERR_FILE_NOT_FOUND,uniapp开发,打包成H5部署到服务器,uniapp打包之后首页

🏆 前端领域优质创作者 3578

华为OD机考双机位C卷 - 手机App防沉迷系统(Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 手机App防沉迷系统(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 2061

Simula语言的移动应用开发

Simula的诞生可追溯到1962年,当时Dahl和Nygaard在诺尔电信公司工作,主要用于描述和模拟复杂系统,如排队理论和交通流分析。Simula不仅仅是一种编程语言,它还是一种模拟语言,能够方便地表达动态系统的行为模式。这种能力,使得Simula在科学计算和工程模拟中取得了极大的成功。

2501_90485730的博客 423

【光伏风电功率预测】偏差考核每月少几十万:STL-VMD + Informer-LSTM 在某基地的落地案例

摘要:某风光一体化基地通过STL-VMD二次分解与Informer-LSTM并行残差模型,在不推翻现有预测系统的情况下,将风光功率预测的综合nRMSE降低了1.2-1.5个百分点。该方案通过分解预测误差为多个子序列,并采用不同模型处理各频段特征,显著改善了关键时段的预测精度。实施后,风电nRMSE从9.0%降至7.6%,光伏从10.2%降至8.8%,每月减少偏差考核费用30-50万元。项目经验表明,数据质量优化、参数调优及与业务目标对齐是关键成功因素,该技术路线具有可复制性,为风光基地预测精度提升提供了有效

专注AI大模型,软件混淆,授权 264

Street coder 1.4.1 -1.4.2

原文:https://livebook.manning.com/book/street-coder/chapter-1/19译:祝坤荣Cátia Matos图片: https://www.pexels.com/zh-cn/photo/1072179/1.4.1 太多的技术我们持续对于最佳技术的追求源自银弹的谬论。我们认为有一种技术能成倍提升我们的生产力。其实并没有。比如,Python是一种解释语...

祝坤荣的随想 352

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

亚马逊的云原生故事

从 20 世纪 90 年代初开始,经过 20 年的发展,总部设在西雅图的亚马逊已经从网络书店成长为世界上最大的在线零售商。 今天,它就像著名的“亚马逊河”一样,销售的东西远不仅仅是书籍了。在 2015 年,亚马逊超过了沃尔玛成为美国最有价值的零售商。 在亚马逊耀眼的成长故事中,最有趣的一部分可以简单地归纳成一个问题 : 作为一个简单的在线书店网站,在没有设立任何零售网点的前提下,是...

博文视点(北京)官方博客 1087

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

搜索引擎技术在后端开发中的核心应用与优化

搜索引擎技术是现代后端系统的核心组件,通过倒排索引等数据结构实现高效检索。其核心原理包括分词处理、相关性排序和模糊匹配,能显著提升用户体验和系统性能。在电商、内容平台等应用场景中,搜索引擎需要处理复杂的查询需求,如多义词识别和个性化排序。Elasticsearch作为主流开源搜索引擎,提供了丰富的功能如BM25算法和聚合分析。结合微服务架构,搜索服务可实现高可用和弹性扩展。性能优化和安全防护是生产环境部署的关键考量,包括查询调优、JVM监控和HTTPS配置。随着AI发展,向量搜索等新技术正推动搜索引擎向智能

weixin_33778544的博客 368

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

基于智能体的用户自适应过滤系统:从NLP分类到个性化内容安全

在内容安全领域,传统的基于规则和关键词的过滤方法难以应对动态、隐晦的骚扰内容,常导致误伤或漏判。其核心原理在于缺乏对上下文语义的理解和个性化的适应能力。随着自然语言处理(NLP)和机器学习技术的发展,智能体架构为解决这一问题提供了新思路。通过构建多层次、细粒度的骚扰分类体系(如意图、表达、目标层),并结合预训练语言模型进行深度语义理解,系统能够更精准地识别从显性辱骂到隐性讽刺的各类内容。其技术价值在于实现了从“一刀切”到“千人千面”的个性化过滤,通过动态用户画像和在线学习机制,使过滤策略能随用户反馈自适应调

weixin_30905981的博客 434

深度回顾2006:Web 2.0技术浪潮与社交网络奠基之年

Web 2.0作为互联网发展的关键阶段,其核心原理在于通过用户参与、数据驱动和平台化架构,实现了从单向信息传递到双向交互的转变。这一技术架构的价值在于降低了创业门槛,催生了全新的商业模式和内容生态。在应用场景上,它直接推动了社交网络、云计算和用户生成内容平台的兴起。回顾2006年,正是Web 2.0从概念走向现实的关键节点,AJAX技术的成熟应用改善了用户体验,API经济的萌芽为现代云计算和微服务架构奠定了基础。同时,社交网络领域迎来了标志性事件,Twitter的诞生创造了异步社交模型,Facebook开放

weixin_34162228的博客 473

Go语言十周年 | Go精华资料整理

◆ ◆ ◆◆十岁生日快乐,Go!Happy 10th Anniversary, Golang!◆ ◆ ◆◆这个月,是 Go 语言正式发布 10 周年,这也是 Go 作...

Java团长的博客 282

智能客服多轮对话意图识别验收:软件测试从业者实用指南

本文探讨了人工智能客服系统中多轮对话意图识别的测试验收方法。文章指出意图识别准确度直接影响用户体验和业务效率,测试需关注准确性、鲁棒性和响应速度。验收流程分为需求分析、测试设计、执行评估和缺陷管理四个阶段,强调使用多样化测试用例和自动化工具。针对常见挑战如上下文丢失和歧义处理,提出了状态机验证和同义词测试等解决方案。未来测试趋势将向AI驱动转变,需关注大语言模型集成和伦理合规性。测试不仅是质量保障,更是产品创新的重要环节。

2501_94480392的博客 1051
上一篇: Java中的常见并发陷阱
下一篇: JVM和Docker默认设置中的陷阱
程序员plus
博客等级 码龄8年 41粉丝 151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值