首页 文章 精选 留言 我的

精选列表

搜索[java],共10000篇文章
优秀的个人博客,低调大师

Java script中的函数使用方法

前言 什么是函数,就是把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在开发中可以反复调用,函数的作用就是封装一段代码,可以重复使用。 1. 函数的声明及调用 1.1声明 关键字声明 function 函数名(){ // 函数体 } 表达式声明 var fn = function() { // 函数体 } 特点: 函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。 一个函数一般都特定的用来干 一件 事情 1.2 调用 调用函数的语法: 函数名(); 特点: 函数体只有在调用的时候才会执行,调用需要()进行调用。 可以调用多次(重复使用) // 声明函数 function sayHi() { console.log("吃了没?"); } // 调用函数 sayHi(); // 求1-100之间所有数的和 function getSum() { var sum = 0; for (var i = 0; i < 100; i++) { sum += i; } console.log(sum); } // 一段代码可以多次调用 getSum(); getSum(); getSum(); 1.2 参数 为什么要有参数 function getSum() { var sum = 0; for (var i = 1; i <= 100; i++) { sum += i; } console.log(); } // 虽然上面代码可以重复调用,但是只能计算1-100之间的值 // 如果想要计算n-m之间所有数的和,应该怎么办呢? 语法: // 函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部 // 带参数的函数声明 function 函数名(形参1, 形参2, 形参...){ // 函数体 } // 带参数的函数调用 函数名(实参1, 实参2, 实参3); *形参和实参 * 形式参数:在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。 实际参数:如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。 function fn(a, b) { console.log(a + b); } var x = 5, y = 6; fn(x,y); // x,y实参,有具体的值。 // 函数执行的时候会把x,y复制一份给函数内部的a和b, // 函数内部的值是复制的新值,无法修改外部的x,y JS 函数在调用时,允许传多个实参,就是实参个数可以比形参个数多; 1.3 函数的返回值 当函数执行完的时候,并不是所有时候都要把结果打印。我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个值 返回值语法: //声明一个带返回值的函数 function 函数名(形参1, 形参2, 形参...){ //函数体 return 返回值; } //可以通过变量来接收这个返回值 var 变量 = 函数名(实参1, 实参2, 实参3); 返回值详解: 如果函数没有显示的使用 return语句 ,那么函数有默认的返回值:undefined 如果函数使用 return语句,那么跟在return后面的值,就成了函数的返回值 如果函数使用 return语句,但是return后面没有任何值,那么函数的返回值也是:undefined 函数使用return语句后,这个函数会在执行完 return 语句之后停止并立即退出,也就是说return后面的所有其他代码都不会再执行。 作业: 求1-n之间所有数的和 求n-m之间所有数的和 求2个数中的最大值 1.4 函数相关的其它事情 1.4.1 匿名函数与自调用函数 匿名函数:没有名字的函数 匿名函数如何使用: 将匿名函数赋值给一个变量,这样就可以通过变量进行调用 匿名函数如果没有任何变量来表示它,那么就不能直接调用来执行,因此可以通过匿名函数的自调用的方式来执行 (function () { alert(123); })(); 关于自执行函数(匿名函数自调用)的作用:防止全局变量污染。 1.4.2 函数本身也是值 function fn() {} console.log(typeof fn); 函数作为参数 因为函数也是一种值类型,可以把函数作为另一个函数的参数,在另一个函数中调用 function f1(f){ //f = function f2(){ // console.log(2); //} f(); } function f2(){ console.log(2); } f1(f2); //2 函数做为返回值 因为函数是一种类型,所以可以把函数可以作为返回值从函数内部返回。 function fn(b) { var a = 10; return function () { alert(a+b); } } var f = fn(5); f(); //15

优秀的个人博客,低调大师

Java描述设计模式(19):模板方法模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 通常一款互联网应用的开发流程如下:业务需求,规划产品,程序开发,测试交付。现在基于模板方法模式进行该过程描述。 public class C01_InScene { public static void main(String[] args) { DevelopApp developApp = new DevelopApp() ; developApp.templateMethod() ; } } /** * 软件开发抽象类 */ abstract class SoftDevelop { public void templateMethod(){ //调用基本方法 doBiz (); doProduct(); doDevelop(); doTest(); } public abstract void doBiz () ; public abstract void doProduct () ; public abstract void doDevelop () ; public abstract void doTest () ; } /** * APP开发具体类 */ class DevelopApp extends SoftDevelop { @Override public void doBiz() { System.out.println("整理App业务"); } @Override public void doProduct() { System.out.println("输出App产品"); } @Override public void doDevelop() { System.out.println("进行App开发"); } @Override public void doTest() { System.out.println("进行App测试"); } } 二、模板方法模式 1、基础概念 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以用不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。简单说,模板方法模式定义流程中的核心的框架,而将实际的业务操作延迟到子类中,使得子类可以不改变流程的结构,但可以重定义业务程序。 2、模式图解 3、核心角色 抽象模板角色 类中实现了模板方法(template),定义流程结构,具体业务需求子类需要去实现。 具体模板角色 实现父类所定义的一个或多个抽象方法,是整个流程的组成方法。抽象模板角色都可以有任意多个具体模板角色与之对应,具体模板角色都可以给出这些抽象方法的不同实现。 4、源码实现 /** * 抽象模板角色 */ abstract class AbstractTemplate { /** * 模板方法 */ public void templateMethod(){ //调用基本方法 abstractMethod(); hookMethod(); concreteMethod(); } /** * 相关基本方法 */ protected abstract void abstractMethod(); protected void hookMethod(){} private final void concreteMethod(){} } /** * 具体模板角色 */ class ConcreteTemplate extends AbstractTemplate{ /** * 基本方法的实现 */ @Override public void abstractMethod() { } /** * 重写父类的方法 */ @Override public void hookMethod(){ } } 5、不同方法描述 模板方法 定义在抽象类中的,把基本操作方法组合在一起形成一个总流程的方法,可以有任意多个模板方法。 基本方法 抽象方法:抽象方法由抽象类声明,由具体子类实现。 具体方法:具体方法由抽象类声明并实现,而子类并不实现。 钩子方法:钩子方法由抽象类声明并实现,而子类可以加以扩展。 三、JavaEE应用 HttpServlet担任抽象模板角色,模板方法:由service()方法担任。基本方法:由doPost()、doGet()等方法担任。service()方法流程,省略了部分判断逻辑。该方法调用七个do方法中的一个或几个,完成对客户端请求的响应。这些do方法需要由HttpServlet的具体子类提供,在JavaEE中使用时,通常会自己实现相关方法。在API的封装是典型的模板方法模式。 protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (method.equals("GET")) { this.doGet(req, resp); } else if (method.equals("HEAD")) { this.doHead(req, resp); } else if (method.equals("POST")) { this.doPost(req, resp); } else if (method.equals("PUT")) { this.doPut(req, resp); } else if (method.equals("DELETE")) { this.doDelete(req, resp); } else if (method.equals("OPTIONS")) { this.doOptions(req, resp); } else if (method.equals("TRACE")) { this.doTrace(req, resp); } else { String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[]{method}; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(501, errMsg); } } 四、源代码地址 GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

优秀的个人博客,低调大师

Java描述设计模式(17):调停者模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景 1、场景描述 在公司的日常安排中,通常划分多个部门,每个部门又会分为不同的小组,部门经理的一项核心工作就是协调部门小组之间的工作,例如开发小组,产品小组,小组的需求统一汇总到经理,经理统一安排和协调。 2、场景图解 3、代码实现 public class C01_InScene { public static void main(String[] args) { Manager manager = new Manager() ; EmployeeA employeeA = new EmployeeA("张三",manager) ; EmployeeB employeeB = new EmployeeB("李四",manager) ; employeeA.sendMsg(employeeA.name,"需要产品文档",employeeB); } } /** * 部门协调接口 */ interface Department { void coordinate (String userName,String msg,Employee employee) ; } /** * 部门经理 */ class Manager implements Department { @Override public void coordinate (String userName,String msg,Employee employee) { System.out.println("经理接收【"+userName+"】的协调任务:" + msg); System.out.println("经理转发【"+userName+"】协调任务,@【"+employee.name+"】"); employee.getMsg(userName,msg); } } /** * 员工抽象类 */ abstract class Employee { public String name ; private Department department ; public Employee (String name,Department department){ this.name = name ; this.department = department ; } public void getMsg (String userName,String msg){ System.out.println("【"+this.name+"】收到"+"【"+userName+"】协调任务:["+msg+"]"); } public void sendMsg (String name,String msg,Employee employee){ System.out.println("【"+name+"】发起协调任务:"+ msg); department.coordinate(name,msg,employee); } } /** * 具体员工 */ class EmployeeA extends Employee { public EmployeeA(String name, Department department) { super(name, department); } } class EmployeeB extends Employee { public EmployeeB(String name, Department department) { super(name, department); } } 执行结果 【张三】发起协调任务:需要产品文档 经理接收【张三】的协调任务:需要产品文档 经理转发【张三】协调任务,@【李四】 【李四】收到【张三】协调任务:[需要产品文档] 二、调停者模式 1、基本概念 调停者模式是对象的行为模式。调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互显式引用,通过一个中介对象进行引用通知,从而对象之间解耦。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的对象间的相互作用。保证这些相互作用可以彼此独立地变化。 2、模式图解 3、核心角色 抽象调停者角色 定义出同事对象到调停者对象的接口,其中主要方法是一个或多个事件方法。 具体调停者角色 实现了抽象调停者所声明的事件方法。具体调停者持有所有的具体同事类,并负责协调各具体同事对象的交互信息。 抽象同事类角色 定义出调停者到同事对象的接口。同事对象只持有调停者而不知道具体的同事对象。 具体同事类角色 所有的具体同事类均从抽象同事类继承而来,需要与其他同事通信的时候,就与持有的调停者通信,调停者会负责与其他的同事对象交互。 4、源码实现 /** * 抽象调停者类 */ interface Mediator { void notify (Colleague colleague); } /** * 抽象同事类 */ abstract class Colleague { /* 持有调停者对象 */ private Mediator mediator; public Colleague(Mediator mediator){ this.mediator = mediator; } public Mediator getMediator(){ return mediator; } } /** * 具体调停者类 */ class ConcreteMediator implements Mediator{ private ConcreteColleagueA colleagueA ; private ConcreteColleagueB colleagueB ; public void setColleagueA(ConcreteColleagueA colleagueA) { this.colleagueA = colleagueA; } public void setColleagueB(ConcreteColleagueB colleagueB) { this.colleagueB = colleagueB; } @Override public void notify(Colleague colleague) { System.out.println("协调通知消息"); } } /** * 具体同事类 */ class ConcreteColleagueA extends Colleague{ public ConcreteColleagueA(Mediator mediator) { super(mediator); } public void operate(){ getMediator().notify(this); } } class ConcreteColleagueB extends Colleague{ public ConcreteColleagueB(Mediator mediator) { super(mediator); } public void operation(){ getMediator().notify(this); } } 三、调停者模式总结 松散耦合 调停者模式通过把多个同事对象之间的交互封装到调停者对象里面,从而使得同事对象之间松散耦合。 集中管理交互 多个同事对象的交互,被封装在调停者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改调停者对象就可以了。 简化对象间关系 没有使用调停者模式的时候,同事对象之间的关系通常是多对多的,引入调停者对象以后,调停者对象和同事对象的关系通常变成双向的一对多。 模式的缺点 调停者模式的一个潜在缺点是,过度集中化,当同事对象很多,交互非常、复杂时,会导致调停者对象变得十分复杂,而且难于管理和维护。 四、源代码地址 GitHub·地址 https://github.com/cicadasmile/model-arithmetic-parent GitEE·地址 https://gitee.com/cicadasmile/model-arithmetic-parent

优秀的个人博客,低调大师

JAVA设计模式(3)外观模式(门面模式)

2019年阿里云双11活动拼团:https://www.aliyun.com/1111/2019/group-buying-share 针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。 一、概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 二、角色及使用场景 简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。 1).门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。 2).子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。 3).客户角色:通过调用Facede来完成要实现的功能。 使用场景: 1- 为复杂的模块或子系统提供外界访问的模块; 2- 子系统相互独立; 3- 在层析结构中,可以使用外观模式定义系统的每一层的入口。 三、实例 下面,我们就通过一个简单的例子来实现该模式。 每个Computer都有CPU、Memory、Disk。在Computer开启和关闭的时候,相应的部件也会开启和关闭,所以,使用了该外观模式后,会使用户和部件之间解耦。如: 包体的创建: 代码实现 首先是子系统类: 【代码清单--1】 1 package com.huawei.facadeDesign.children; 2 3 import org.apache.log4j.Logger; 4 5 /** 6 * cpu子系统类 7 * @author Administrator 8 * 9 */ 10 public class CPU 11 { 12 public static final Logger LOGGER = Logger.getLogger(CPU.class); 13 public void start() 14 { 15 LOGGER.info("cpu is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("CPU is shutDown..."); 21 } 22 } 【代码清单--2】 1 package com.huawei.facadeDesign.children; 2 3 import org.apache.log4j.Logger; 4 5 /** 6 * Disk子系统类 7 * @author Administrator 8 * 9 */ 10 public class Disk 11 { 12 public static final Logger LOGGER = Logger.getLogger(Disk.class); 13 public void start() 14 { 15 LOGGER.info("Disk is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("Disk is shutDown..."); 21 } 22 } 【代码清单--3】 1 package com.huawei.facadeDesign.children; 2 3 import org.apache.log4j.Logger; 4 5 /** 6 * Memory子系统类 7 * @author Administrator 8 * 9 */ 10 public class Memory 11 { 12 public static final Logger LOGGER = Logger.getLogger(Memory.class); 13 public void start() 14 { 15 LOGGER.info("Memory is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("Memory is shutDown..."); 21 } 22 } 然后是,门面类Facade 【代码清单--4】 1 package com.huawei.facadeDesign.facade; 2 3 import org.apache.log4j.Logger; 4 5 import com.huawei.facadeDesign.children.CPU; 6 import com.huawei.facadeDesign.children.Disk; 7 import com.huawei.facadeDesign.children.Memory; 8 9 10 /** 11 * 门面类(核心) 12 * @author Administrator 13 * 14 */ 15 public class Computer 16 { 17 public static final Logger LOGGER = Logger.getLogger(Computer.class); 18 19 private CPU cpu; 20 private Memory memory; 21 private Disk disk; 22 public Computer() 23 { 24 cpu = new CPU(); 25 memory = new Memory(); 26 disk = new Disk(); 27 } 28 public void start() 29 { 30 LOGGER.info("Computer start begin"); 31 cpu.start(); 32 disk.start(); 33 memory.start(); 34 LOGGER.info("Computer start end"); 35 } 36 37 public void shutDown() 38 { 39 LOGGER.info("Computer shutDown begin"); 40 cpu.shutDown(); 41 disk.shutDown(); 42 memory.shutDown(); 43 LOGGER.info("Computer shutDown end..."); 44 } 45 } 最后为,客户角色。 【代码清单--5】 1 package com.huawei.facadeDesign; 2 3 import org.apache.log4j.Logger; 4 5 import com.huawei.facadeDesign.facade.Computer; 6 7 /** 8 * 客户端类 9 * @author Administrator 10 * 11 */ 12 public class Cilent { 13 public static final Logger LOGGER = Logger.getLogger(Cilent.class); 14 public static void main(String[] args) 15 { 16 Computer computer = new Computer(); 17 computer.start(); 18 LOGGER.info("================="); 19 computer.shutDown(); 20 } 21 22 } 【代码清单--6】运行结果 从上面的实例来看,有了这个Facade类,也就是Computer类,用户就不用亲自去调用子系统中的Disk,Memory、CPU类了,不需要知道系统内部的实现细节,甚至都不用知道系统内部的构成。客户端只需要跟Facade交互就可以了。 四、优点 - 松散耦合 使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护; - 简单易用 客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。 - 更好的划分访问层次 有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。 五、延伸及应用(补充) ...

优秀的个人博客,低调大师

java设计模式之外观模式(门面模式)

针对外观模式,在项目开发和实际运用中十分频繁,但是其极易理解,下面就简要介绍一下。 一、概念介绍 外观模式(Facade),他隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。这种类型的设计模式属于结构性模式。为子系统中的一组接口提供了一个统一的访问接口,这个接口使得子系统更容易被访问或者使用。 二、角色及使用场景 简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的使用。这个模式中,设计到3个角色。 1).门面角色:外观模式的核心。它被客户角色调用,它熟悉子系统的功能。内部根据客户角色的需求预定了几种功能的组合。 2).子系统角色:实现了子系统的功能。它对客户角色和Facade时未知的。它内部可以有系统内的相互交互,也可以由供外界调用的接口。 3).客户角色:通过调用Facede来完成要实现的功能。 使用场景: 1- 为复杂的模块或子系统提供外界访问的模块; 2- 子系统相互独立; 3- 在层析结构中,可以使用外观模式定义系统的每一层的入口。 三、实例 下面,我们就通过一个简单的例子来实现该模式。 每个Computer都有CPU、Memory、Disk。在Computer开启和关闭的时候,相应的部件也会开启和关闭,所以,使用了该外观模式后,会使用户和部件之间解耦。如: 包体的创建: 代码实现 首先是子系统类: 【代码清单--1】 1 package com.huawei.facadeDesign.children; 2 3 import org.apache.log4j.Logger; 4 5 /** 6 * cpu子系统类 7 * @author Administrator 8 * 9 */ 10 public class CPU 11 { 12 public static final Logger LOGGER = Logger.getLogger(CPU.class); 13 public void start() 14 { 15 LOGGER.info("cpu is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("CPU is shutDown..."); 21 } 22 } 【代码清单--2】 1 package com.huawei.facadeDesign.children; 2 3 import org.apache.log4j.Logger; 4 5 /** 6 * Disk子系统类 7 * @author Administrator 8 * 9 */ 10 public class Disk 11 { 12 public static final Logger LOGGER = Logger.getLogger(Disk.class); 13 public void start() 14 { 15 LOGGER.info("Disk is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("Disk is shutDown..."); 21 } 22 } 【代码清单--3】 1 package com.huawei.facadeDesign.children; 2 3 import org.apache.log4j.Logger; 4 5 /** 6 * Memory子系统类 7 * @author Administrator 8 * 9 */ 10 public class Memory 11 { 12 public static final Logger LOGGER = Logger.getLogger(Memory.class); 13 public void start() 14 { 15 LOGGER.info("Memory is start..."); 16 } 17 18 public void shutDown() 19 { 20 LOGGER.info("Memory is shutDown..."); 21 } 22 } 然后是,门面类Facade 【代码清单--4】 1 package com.huawei.facadeDesign.facade; 2 3 import org.apache.log4j.Logger; 4 5 import com.huawei.facadeDesign.children.CPU; 6 import com.huawei.facadeDesign.children.Disk; 7 import com.huawei.facadeDesign.children.Memory; 8 9 10 /** 11 * 门面类(核心) 12 * @author Administrator 13 * 14 */ 15 public class Computer 16 { 17 public static final Logger LOGGER = Logger.getLogger(Computer.class); 18 19 private CPU cpu; 20 private Memory memory; 21 private Disk disk; 22 public Computer() 23 { 24 cpu = new CPU(); 25 memory = new Memory(); 26 disk = new Disk(); 27 } 28 public void start() 29 { 30 LOGGER.info("Computer start begin"); 31 cpu.start(); 32 disk.start(); 33 memory.start(); 34 LOGGER.info("Computer start end"); 35 } 36 37 public void shutDown() 38 { 39 LOGGER.info("Computer shutDown begin"); 40 cpu.shutDown(); 41 disk.shutDown(); 42 memory.shutDown(); 43 LOGGER.info("Computer shutDown end..."); 44 } 45 } 最后为,客户角色。 【代码清单--5】 1 package com.huawei.facadeDesign; 2 3 import org.apache.log4j.Logger; 4 5 import com.huawei.facadeDesign.facade.Computer; 6 7 /** 8 * 客户端类 9 * @author Administrator 10 * 11 */ 12 public class Cilent { 13 public static final Logger LOGGER = Logger.getLogger(Cilent.class); 14 public static void main(String[] args) 15 { 16 Computer computer = new Computer(); 17 computer.start(); 18 LOGGER.info("================="); 19 computer.shutDown(); 20 } 21 22 } 【代码清单--6】运行结果 从上面的实例来看,有了这个Facade类,也就是Computer类,用户就不用亲自去调用子系统中的Disk,Memory、CPU类了,不需要知道系统内部的实现细节,甚至都不用知道系统内部的构成。客户端只需要跟Facade交互就可以了。 四、优点 - 松散耦合 使得客户端和子系统之间解耦,让子系统内部的模块功能更容易扩展和维护; - 简单易用 客户端根本不需要知道子系统内部的实现,或者根本不需要知道子系统内部的构成,它只需要跟Facade类交互即可。 - 更好的划分访问层次 有些方法是对系统外的,有些方法是系统内部相互交互的使用的。子系统把那些暴露给外部的功能集中到门面中,这样就可以实现客户端的使用,很好的隐藏了子系统内部的细节。 五、延伸及应用(补充) ...

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册