- 博客(76)
- 收藏
- 关注
原创 JDK11新特性
在了解新特性之前,需要说明Java 11带来的一些重要变更:- 自Java 11起,Oracle JDK不再免费用于商业用途,需要购买许可证- 如需免费使用,可以选择OpenJDK版本(由Oracle或其他提供商如AdoptOpenJDK、Azul等提供)- Java 8的免费支持在2019年1月结束,后续安全更新需要付费- JavaFX已从JDK中移除,作为独立模块提供
2025-05-19 10:05:11
770
原创 Docker编排工具详解:Docker Compose与Docker Swarm
随着容器技术的普及,单个容器已经无法满足复杂应用部署的需求。在实际应用场景中,我们通常需要协调多个容器共同工作,这就是容器编排的概念。Docker提供了两个强大的编排工具:Docker Compose和Docker Swarm。本文将深入探讨这两个工具的特性、使用方法以及最佳实践。
2025-05-12 10:18:00
1092
原创 Docker组件详解:核心技术与架构分析
Docker作为一种容器化技术,已经彻底改变了软件的开发、交付和部署方式。要充分理解和利用Docker的强大功能,我们需要深入了解其核心组件以及它们如何协同工作。本文将详细介绍Docker的主要组件、架构设计以及它们之间的关系。
2025-05-09 17:57:37
1306
原创 Docker基础入门:容器化技术详解
Docker是一个开源的容器化平台,它允许开发者将应用及其依赖打包到一个可移植的容器中,从而确保应用在不同环境中的一致运行。Docker于2013年发布,迅速成为软件开发领域的革命性工具,解决了传统开发中"在我的机器上能运行"的经典问题。
2025-05-09 17:46:02
774
原创 设计模式(构建者模式)
建造者模式(Builder Pattern)是一种创建型设计模式,它允许我们分步骤创建复杂对象。这种模式特别适合那些需要多个步骤才能构建出来的、有很多配置选项的对象。
2025-04-30 16:42:18
559
原创 设计模式(工厂模式)
工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,而是通过使用一个共同的接口来指向新创建的对象。简单工厂模式(Simple Factory)工厂方法模式(Factory Method)抽象工厂模式(Abstract Factory)工厂设计模式是一种非常实用的创建型设计模式,它通过封装对象的创建过程,使客户端代码与具体产品的实现细节解耦。根据不同的需求和场景,我们可以选择使用简单工厂、工厂方法或抽象工厂。
2025-04-29 17:42:50
1071
原创 MCP,看这一篇就够
MCP(模型上下文协议)是一个开放标准,用于规范化应用程序如何向大型语言模型(LLM)提供上下文信息。简单来说,MCP就像AI应用的USB-C接口 —— 正如USB-C为设备提供了与各种外设连接的标准方式,MCP为AI模型提供了与不同数据源和工具连接的标准方式。MCP由Anthropic公司于2024年底推出并开源,旨在解决AI助手与数据源集成的问题。无论你是在开发AI驱动的IDE、增强聊天界面,还是创建自定义AI工作流,MCP都提供了一种标准化的方式,将LLM与它们所需的上下文连接起来。
2025-04-29 11:38:20
851
原创 Open Manus源码分析-Tool
OpenManus的工具系统采用了一种高度模块化的设计,它为AI代理提供了一组结构化的"工具"接口,使代理能够执行诸如网络搜索、命令执行、文件操作等超出纯语言模型能力范围的任务。抽象统一:所有工具遵循相同的接口规范功能隔离:工具之间相互独立,职责明确可组合性:工具可以被灵活组合使用安全边界:工具执行受到权限控制和错误处理保护。
2025-04-28 11:17:49
967
原创 设计模式(状态模式)
在实际的软件开发中,状态模式并不是很常用,但是在能够用到的场景里,它可以发挥很大的作用。从这一点上来看,它有点像我们之前讲到的组合模式。状态模式一般用来实现状态机,而状态机常用在游戏、工作流引擎等系统开发中。不过,状态机的实现方式有多种,除了状态模式,比较常用的还有分支逻辑法和查表法。今天,我们就详细讲讲这几种实现方式,并且对比一下它们的优劣和应用场景。有限状态机,英文翻译是Finite State Machine,缩写为FSM,简称为状态机。
2025-04-28 10:44:12
897
原创 OpenManus源码分析-Flow
在前两篇文章中,我们分析了OpenManus的整体架构和核心Agent模块。今天我们深入探讨OpenManus的Flow模块,这是整个框架中负责编排工作流的关键组件。通过本文,你将了解OpenManus如何组织复杂的任务流程,以及如何利用其灵活的流程设计构建智能应用。
2025-04-27 10:57:26
1073
原创 设计模式(观察者模式)
观察者模式(Observer Design Pattern)也被称为发布订阅模式。模式定义:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有的依赖对象都会自动收到通知。一般情况下,被依赖的对象叫做被观察者(Observeable),依赖的对象叫作观察者(Observer)。
2025-01-10 16:48:36
755
原创 ThreadLocal、ITL、TTL的区别和使用
本文章简单介绍ThreadLocal、InheritableThreadLocal(ITL)、TransmittableThreadLocal(TTL)的区别和使用。
2024-11-06 10:13:10
1018
1
原创 React新人小白上手教程(适合后端选手食用)
本文适合前端新手以及需要进行前端开发的后端开发者阅读。所涉及的知识点覆盖全面,即使没有前端基础的读者也可以轻松理解。部分内容参考了 React 官方文档(Link),官方文档详细且易于理解,建议有兴趣深入学习的同学查阅。作为一名刚开始接触 React 前端开发的学习者,如果文中存在不足或错误之处,欢迎大家给予批评和指正。下面开始我们的React上手之旅。HTML是一种用于创建网页的标准标记语言。它是一种标记语言,用于描述网页的结构。CSS是一种样式表语言,用于描述HTML文档的展示。
2024-11-06 10:11:32
1176
原创 Flink中任务(Tasks)和任务槽(Task Slots)详解
在之前不做共享的时候,每个任务都平等地占据了一个slot,但其实不同的任务对资源的占用是不同的。所以对于第一个任务节点source→map,它的6个并行子任务必须分到不同的slot上(如果在同一slot就没法数据并行了),而第二个任务节点keyBy/window/apply的并行子任务却可以和第一个任务节点共享slot。另外,同一个任务节点的并行子任务是不能共享slot的,所以允许slot共享之后,运行作业所需的slot数量正好就是作业中所有算子并行度的最大值。而不同的任务节点的子任务可以共享slot。
2024-03-19 16:46:25
1632
原创 Flink中JobManager与TaskManage的运行架构以及原理详解
TaskManager是Flink中的工作进程,数据流的具体计算就是它来做的,所以也被称为“Worker”。当然由于分布式计算的考虑,通常会有多个TaskManager运行,每一个TaskManager都包含了一定数量的任务槽(task slots)。TaskManager启动之后,JobManager会与它建立连接,并将作业图(JobGraph)转换成可执行的“执行图”(ExecutionGraph)分发给可用的TaskManager,然后就由TaskManager具体执行任务。
2024-03-19 15:32:30
2894
1
原创 [leetcode 189][轮转数组]
输入: nums = [1,2,3,4,5,6,7], k = 3。输入:nums = [-1,-100,3,99], k = 2。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]向右轮转 2 步: [3,99,-1,-100]输出: [5,6,7,1,2,3,4]输出:[3,99,-1,-100]
2024-03-08 16:42:36
259
原创 [leetcode 26][删除有序数组的重复项]
解释:函数应返回新长度 length = 7, 并且原数组的前七个元素被修改为 0, 0, 1, 1, 2, 3, 3。不需要考虑数组中超出新长度后面的元素。解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3。输入:nums = [0,0,1,1,1,1,2,3,3]输出:7, nums = [0,0,1,1,2,3,3]输出:5, nums = [1,1,2,2,3]输入:nums = [1,1,1,2,2,3]
2024-03-07 16:54:14
269
1
原创 [leetcode 169][多数元素]
如果新来到的士兵不是同一阵营,则前方阵营派一个士兵和它同归于尽。如果新来的士兵和前一个士兵是同一阵营,则集合起来占领高地,领主不变,winner 依然是当前这个士兵所属阵营,现存兵力 count++;当下一个士兵到来,发现前方阵营已经没有兵力,新士兵就成了领主,winner 变成这个士兵所属阵营的旗帜,现存兵力 count ++。第一个到来的士兵,直接插上自己阵营的旗帜占领这块高地,此时领主 winner 就是这个阵营的人,现存兵力 count = 1。输入:nums = [2,2,1,1,1,2,2]
2024-03-07 15:50:32
344
原创 [leetcode 128][最长连续序列]
[leetcode 128][最长连续序列]给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。示例 1:输入:nums = [100,4,200,1,3,2]输出:4解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。示例 2:输入:nums = [0,3,7,2,5,8,4,6,0,1]输出:9class Solution { public int longestConsecutive(int[] nums
2021-10-26 16:26:52
152
原创 [leetcode 130][被围绕的区域]
[leetcode 105][被围绕的区域]给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充示例 1:输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]输出:[[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[
2021-10-26 16:24:09
2945
原创 [leetcode 105][[从前序与中序遍历序列构造二叉树]
[leetcode 105][[从前序与中序遍历序列构造二叉树]给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]class Solution {
2021-10-25 16:57:45
101
原创 [leetcode 116][填充每个节点的下一个右侧节点指针]
[leetcode 116][填充每个节点的下一个右侧节点指针]给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。输入:root = [1,2,3,4,5,6,7]输出:[1,#,2,3,#,4,5,6,7,#]解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 n
2021-10-25 16:53:55
89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人