首页 文章 精选 留言 我的

精选列表

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

python基础----动态导入模块

动态导入模块方法1: import 说明: 1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。 2. __import__(module)相当于import module 举例说明: 首先创建一个模块目录lib,然后在目录内创建一个模块为:aa.pyos.path---->lib/aa.py 模块代码为: class c(object): def __str__(self): return 'C language' 在lib目录平级新建一个测试的模块,使用 import 动态以字符串形式导入lib下的aa模块。 lib = __import__('lib.aa') # 相当于import libc = lib.aa.c()print(c) 动态导入模块方法2:import importlib 实例还是上面的lib.aa模块,这里使用importlib进行动态导入(这个方法好理解,也是官方建议使用的) import importlibaa = importlib.import_module('lib.aa')c = aa.c()print(c)

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

Spring Cloud Config 基础示例

Spring Cloud Config 简介 什么是Srping Cloud Config? Spring Cloud Config 是一种分布式配置中心框架, 为分布式系统中的外部化配置提供服务器和客户端支持。(同类技术还有vault,zookeeper,Consul) 使用Config Server,可以在所有环境中管理应用程序的外部属性。客户端和服务器上的概念映射与Spring Environment和PropertySource抽象,因此它们非常适合Spring应用程序,但可以与任何语言运行的任何应用程序一起使用。当应用程序通过部署管道从开发到测试并进入生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。服务器存储后端的默认实现使用git,因此它可以轻松支持配置环境的标记版本,以及可用于管理内容的各种工具。 Spring Cloud Config也主要由两部分组成: Config-Server: 用于配置外部的资源文件,支持对属性值进行加解密 Config-client:绑定到config server使用远程配置文件初始化spring,支持对属性值进行加解密 本文示例说明 为了更直观的理解spring cloud config,本文通过server获取整个配置,效果上与通过配置springboot的active 来切换环境一致;通过接口查询数据库以查看效果; 采用高可用架构;此处使用eureka去做服务注册发现(暂时也只会这个。。),eureka配置说明可以查看springCloud之eureka 新建ConfigServer 为了减少文章长度,尽量干货,创建过程就不截说明了,建议使用Intellij idea进行创建; POM文件: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lc.springcloud</groupId> <artifactId>config-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>config-server</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.M2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project> application.yml配置如 server: port: 8100 spring: application: name: config-server cloud: config: server: git: uri: https://github.com/lvchaogit/SpringCloud eureka: client: service-url: defaultZone: http://localhost:8081/eureka/ # 服务注册中心地址 通过配置不难理解,该配置是从git上获取配置,更多配置后续详解; application.java @SpringBootApplication @EnableConfigServer @EnableDiscoveryClient public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } } 主要是加上** @EnableConfigServer**注解,开启configserver功能 搭建 Config Client POM文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lc.springcloud</groupId> <artifactId>config-client</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>config-client</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.M2</spring-cloud.version> </properties> <dependencies> <!-- config starter begin--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- config starter end--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!-- mybatis-plus begin --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>2.1.9</version> <exclusions> <exclusion> <artifactId>tomcat-jdbc</artifactId> <groupId>org.apache.tomcat</groupId> </exclusion> </exclusions> </dependency> <!--config监控模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.13</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> </project> bootstrap.yml spring: application: name: config-client cloud: config: profile: dev label: master discovery: enabled: true service-id: config-server server: port: 2001 eureka: client: register-with-eureka: false #因此处只是消费,不提供服务,所以不需要向eureka server注册 service-url: defaultZone: http://localhost:8081/eureka/ # 服务注册中心地址 首先注意配置文件名称为:bootstartp.yml,并不是~~application.yml~~ 通过配置discovery,并设置enabled为true,使client通过服务发现去获取server,server-id为注册中心里配置的服务名称 label=git的标签;profile=配置文件版本(类似于spring boot中的active) 常用configserver配置 采用URI占位符 spring: cloud: config: server: git: uri: https://github.com/lvchaogit/{application} 使用{application} 和 {profile}(如果使用{label},请记住它是使用在git标签中的)。因此你可以轻松的支持“一个应用一个仓库”的原则 模式匹配和多仓库 spring: cloud: config: server: git: uri: https://github.com/lvchaogit/SpringCloud repos: simple: https://github.com/simple/config-repo special: pattern: special*/dev*,*special*/dev* uri: https://github.com/special/config-repo local: pattern: local* uri: file:/home/configsvc/config-repo 在{application}和{profile}参数中使用模式匹配可以支持更多复杂的需求。模式的格式是一组逗号分隔的{application}/{profile},其中的参数可以使用通配符. 如果{application}/{profile}没有匹配到任何模式,它将使用默认的仓库地址:spring.cloud.config.server.git.uri。上面的例子中,"simple"仓库匹配的是“simple/”(它仅仅匹配一个仓库simple,在所有的环境下)。"local"仓库将匹配所有{application}的名字以“local”开头的,并且也是在所有的环境下。“/”前缀自动添加到所有没有设置{profile}的模式中。 匹配仓库子目录 spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo searchPaths: foo,bar* 在foo和以bar开头的目录中,搜索配置文件。 克隆远程的仓库 spring: cloud: config: server: git: uri: https://git/common/config-repo.git repos: team-a: pattern: team-a-* cloneOnStart: true uri: http://git/team-a/config-repo.git team-b: pattern: team-b-* cloneOnStart: false uri: http://git/team-b/config-repo.git team-c: pattern: team-c-* uri: http://git/team-a/config-repo.git 服务器默认在第一次请求配置文件时克隆远程的仓库,也可以配置在启动的时候克隆仓库 team-a的仓库将在服务端启动时进行克隆,其他的仓库将在第一次请求时克隆。 仓库认证 spring: cloud: config: server: git: uri: https://github.com/spring-cloud-samples/config-repo username: trolley password: strongpassword 输入用户名密码 常用配置参考:configServer常用配置 文中示例代码:SpringCloudConfig 示例

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

PHP 对象基础知识

最近开始重新学习对象知识,其实也算是初步深入学习对象和设计模式,希望自己会坚持下去,保持更新 初识PHP对象 还记得,刚开始学习 PHP 的时候,学到到方法和对象时有一个很大的疑问,对象与方法相比较那么麻烦(需要设置属性,给属性赋值,实例化类,调用)为什么还要用对象呢?随着逐步的深入才发现,自己之前的想法是有多可笑,下面给一个简单的示例。 function get_max($val_1, $val_2) { return $val_1 > $val_2 ? $val_1 : $val_2; } $max = get_max(23,34); echo $max; echo '<br>======================这是华丽的分隔符======================<br>'; // 类 class Test { // 属性 public $val_1; public $val_2; // 类的方法 public function __construct($val_1, $val_2) { $this->val_1 = $val_1; $this->val_2 = $val_2; } public function get_max() { return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; } } // 实例化类,$test 是由类 Test 生成的对象 $test = new Test(83, 34); echo $test->get_max(); 可以看到使用对象比单纯的方法多了很多代码,但是为什么还要使用对象呢,我们下一节详细介绍,别走开,往下看 为什么使用对象 什么是对象?什么是类?很多人会把两个搞混淆,我们可以把类看做一个工厂,产出的产品就是对象,也就是对象是类的实现。 一个类通常包含属性、方法。举个:有一个生产面包的机器(类),生成面包需要一些材料(属性),材料包含面粉、鸡蛋、水(不熟悉)。有了材料就可以运作生成面包了,这时机器会把准备好的材料放一起处理(方法)生成面包。 关键字也是很重要的概念,用来决定声明的属性或方法的可见性,包含: public、protected、private。一个属性或方法设置为 public 就代表无论在对象内还是对象外都可以被使用,比如面包机里如果有一个搅拌机(仅限如果),如果这个搅拌机设置为public,则这个搅拌机可以被任何品牌的面包机使用。如果设置为 protected,则只能在同品牌的面包机中使用(继承的类)。如果设置为private则只能被自己用。 回到上节问题,对比方法,问什么使用对象?因为方便,没错真的方便。因为对象有以下几个特点: 封装性 继承 多态 封装性 封装:顾名思义,就是把类的属性和方法封装起来,设置权限(public|protected|private),如下: class Test { public $val_1; protected $val_2; public function __construct($val_1, $val_2) { $this->val_1 = $val_1; $this->val_2 = $val_2; } protected function get_max() { return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; } } $test = new Test(83, 34); echo $test->get_max(); 封装的好处是安全、可控。以上代码因为引用了 protected 声明的方法,因此会报如下的错误 Fatal error: Uncaught Error: Call to protected method StudyDesignModeTest::get_max() from context '' in ... 继承 同样顾名思义,就是继承分类的方法或属性,只能继承 public | protected 关键字声明的方法或属性。继承的主要作用是多个不同的类都需要同样的一个方法,可以使用继承。比如多个网站页面(每个页面都是单独的类)都需要验证是否登录,这时候可以定义一个父类,里面验证是否登录,再由需要验证登录的类继承,这样就不需要每个类都写一次验证。 class Test { private $val_1; private $val_2; protected function set_value($val_1, $val_2) { $this->val_1 = $val_1; $this->val_2 = $val_2; } protected function getMax() { return $this->val_1 > $this->val_2 ? $this->val_1 : $this->val_2; } protected function getMin() { return $this->val_1 > $this->val_2 ? $this->val_2 : $this->val_1; } } class TestSub extends Test { public function __construct($val_1, $val_2) { $this->set_value($val_1, $val_2); } // 简单功能测试 public function printMaxValue() { echo $this->getMax(); } public function printMinValue() { echo $this->getMin(); } } $test = new TestSub(83, 34); echo '<br>======================这是华丽的分隔符 获取最大值======================<br>'; echo $test->printMaxValue(); echo '<br>======================这是华丽的分隔符 获取最小值======================<br>'; echo $test->printMinValue(); 结果:======================这是华丽的分隔符 获取最大值======================83======================这是华丽的分隔符 获取最小值======================34 多态 就是让具有继承关系的不同类对象重写类中的方法(两个类中有相同名称的方法),典型的应用是抽象类(abstract)和接口类(interface)。如下: abstract class Vehicle { abstract public function run(); } class Car extends Vehicle { public function run() { echo '速度100'; } } class Bicycle extends Vehicle { public function run() { echo '速度15'; } } $car = new Car(); echo $car->run(); echo '<br>======================这是华丽的分隔符======================<br>'; $bicycle = new Bicycle(); echo $bicycle->run(); 结果:速度100======================这是华丽的分隔符======================速度15

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

Python基础系列-闭包

版权声明:如需转载,请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81979656 第一次调用line_conf 外部函数return的是内部函数line的内存地址,也就是line1。第二次line1(5),才是执行的内部函数line,并return了a*x+b的值,此时内部函数是可以用到之前我们传入的变量a和b的,第二次line1(5)传入的变量是x 。 这里有个知识点,就是python的内存机制,它是将一个变量的值放在内存,然后变量名引用这个值的地址。所以两个变量的值相同,可能引用的是同个内存地址噢。 区别在哪呢: 1、普通的函数都是我们传变量进去,执行并返回,引用释放,内存清掉。 2、闭包是将变量绑定给内部函数,然后返回一个内部函数的内存引用。等到我们二次执行该闭包函数的内部函数后,内存才会释放。 #!/usr/bin/python # -*- coding: UTF-8 -*- """ Created by liaoyangyang1 on 2018/8/23 下午1:41. """ #装饰器也是一种闭包 #闭包函数的实例 def line_conf(a, b): def line(x): return a*x + b return line line1 = line_conf(1, 1) print(line1(5))

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

Python基础系列-异步IO

版权声明:如需转载,请注明转载地址。 https://blog.csdn.net/oJohnny123/article/details/81980259 涉及到几个概念: 1、协程是为了解决高并发用的东西。 2、协程的优点:无需线程上下文切换的开销,由此可以提高性能。无需原子操作锁定及同步的开销。也就是说,开销小。 asyncio就是一种异步IO 协程 import threading import asyncio import requests # 把 generator 标记为 coroutine 类型,便于执行 EventLoop @asyncio.coroutine def func(port): result = requests.get('http://10.0.53.129:{0}'.format(port)) print('Start %s! code: %s (%s)' % (port,result.status_code, threading.currentThread())) # 获取 EventLoop loop = asyncio.get_event_loop() tasks = [] for i in range(8000,9000): tasks.append(func(i)) # 执行 coroutine loop.run_until_complete(asyncio.wait(tasks)) loop.close()

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

Java基础之SPI机制

欢迎访问陈同学博客原文 在前几天的译文 Java中的类加载器 中有部分关于ContextClassLoader的内容,涉及到SPI机制,本文将学习下相关知识。 什么是SPI? SPI全称为 Service Provider Interface,直译为 服务提供者接口,翻译成中文后比较拗口,难以理解。 简单来说,SPI通过将服务的接口与实现分离以实现解耦,提高程序拓展性的机制,达到插拔式的效果。相同的标准,各服务厂商可以提供不同的实现。这尤其适合于面对未知的实现或者对拓展开放的系统,可以先行制定标准,服务提供者根据标准提供实现即可。 Java中使用SPI机制的例子很多,例举几个: 数据库驱动 ( java.sql.Driver ),各数据库厂商(Mysql、Oracle等)可以遵守规范独立开发自己的驱动 Servlet容器初始化接口( javax.servlet.ServletContainerInitializer ),Tomcat提供了实现 Apache common-logging 中提供的日志接口,许多日志框架做了实现 稍微延伸一下,其实不仅仅是Java,像计算机行业的各种规范、协议也是类似的。甚至生活中的例子,如: 命题作文:设立标题,大家各自发挥成文 手机壳:根据手机尺寸标准,实现各式各样的手机壳 喜剧:以逗笑观众为标准,各表演者以不同的作品与形式为观众送去欢乐 扯的有点远,下面以一个简单例子演示下。 SPI HelloWorld 首先,了解下SPI机制的约定(约定优于配置理念): 在 META-INF/services/ 目录下创建一个以 接口全限定名 命名的文件,文件内容为 实现类的全限定名 使用 java.util.ServiceLoader 来动态加载 META-INF/services/ 下的实现类 实现类必须有一个无参构造器 假设森林动物园举行歌唱比赛,各参赛动物选手需高歌一曲。我们定义一个接口 Animal,标准为 sing() 唱歌。 创建一个普通maven项目,创建以下对象。 // Animal接口, 制定了 sing() 标准 public interface Animal { void sing(); } 三位参赛选手,分别实现了sing() 标准 Cat.java public class Cat implements Animal { public void sing() { System.out.println("喵~"); } } Cuckoo.java public class Cuckoo implements Animal { public void sing() { System.out.println("布谷~"); } } Dog.java public class Dog implements Animal { public void sing() { System.out.println("汪~"); } } 在resource下创建META-INF/services目录,下面创建以接口全限定名org.utopiavip.spi.Animal命名的文件,内容为三位实现者: org.utopiavip.spi.Cat org.utopiavip.spi.Dog org.utopiavip.spi.Cuckoo 将项目打成jar包。 在另一个项目中引入该jar包,测试类如下: public class SpiDemo { public ServiceLoader<Animal> serviceLoader = ServiceLoader.load(Animal.class); public static void main(String args[]) { SpiDemo spiDemo = new SpiDemo(); spiDemo.sing(); } public void sing() { for (Animal singer : serviceLoader) { singer.sing(); } } } 运行后输出如下: 喵~ 汪~ 布谷~ 小例子就完成了。 Mysql驱动Demo Mysql驱动包中对 java.sql.Driver 的实现类为 com.mysql.fabric.jdbc.FabricMySQLDriver 再看看接口和实现类的ClassLoader。 System.out.println(java.sql.Driver.class.getClassLoader()); System.out.println(com.mysql.fabric.jdbc.FabricMySQLDriver.class.getClassLoader()); 输出结果如下: null sun.misc.Launcher$AppClassLoader@135fbaa4 null表示Bootstrap class loader(SPI的接口都由Bootstrap class loader加载),而实现类是由AppClassLoader加载的。 ContextClassLoader 类加载规则中有这么一点:一个类中所关联的其他类都由当前类的加载器进行加载。 仍然以Driver为例,Java中使用DriverManager来获取JDBC连接,DriverManager 位于 rt.jar 中,由Bootstrap class loader负责加载。 java.sql.DriverManager.getConnection("url", "user", "pwd") 在getConnection()的调用过程中,需要加载 java.sql.Driver 的实现类 com.mysql.fabric.jdbc.FabricMySQLDriver,可Bootstrap class loader无法找到该实现类,因为FabricMySQLDriver由System class loader加载。 这是由于类加载的委派原则及可见性制约,Bootstrap class loader将无法获取子加载器System class loader中加载的FabricMySQLDriver类。 为了解决这个问题,提出了 ContextClassLoader 概念,绕开委派原则,既然当前的加载器是Bootstrap class loader,导致无法加载FabricMySQLDriver类,那就变更当前的class loader,想加载谁就加载谁!虽然有点流氓派头,但确实是这么干的。规则是人定的,变更规则成本太高,就搞点特殊化。 java.lang.Thread 有个NB的方法 setContextClassLoader(),用来变更当前线程的class loader。 public void setContextClassLoader(ClassLoader cl) { SecurityManager sm = System.getSecurityManager(); if (sm != null) { sm.checkPermission(new RuntimePermission("setContextClassLoader")); } contextClassLoader = cl; } contextClassLoader 取名也很有趣,当前线程的 context ClassLoader。特殊化也就搞一小会,不大范围搞。 /* The context ClassLoader for this thread */ private ClassLoader contextClassLoader; 小结 BB这么多,SPI其实非常简单:大佬们定规矩(规范),兄弟们实现后放到约定的地方(META-INF/service/),包装上写好是啥东西(接口全限定名),包装里写清楚东西放哪儿了(实现类全限定名)。 欢迎关注陈同学的公众号,一起学习,一起成长

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

Java 基础 之 while 循环

http://www.verejava.com/?id=16992618818220 /* while 循环 while(表达式){} 如果表达式为true 继续执行,否则退出循环 */ public class Test1 { /** * @param args the command line arguments */ public static void main(String[] args) { // 输出 1 - 5 之间(包括 1,5 本身)的数. int n=1; while(n<=5) // while 判断条件true 执行循环代码, 否则终止循环 { System.out.println(n); n++; } } } http://www.verejava.com/?id=16992618818220

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

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

Rocky Linux

Rocky Linux

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册