首页 文章 精选 留言 我的

精选列表

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

Python3入门(二)运算符

Python语言支持以下类型的运算符: 算术运算符 比较运算符 赋值运算符 逻辑运算符 位运算符 成员运算符 身份运算符 运算符优先级 接下来带着大家一起学习下这些 一、算术运算符 运算符 描述 + 两个对象相加 - 表示负数或者两个数相减 * 两个数相乘或者返回一个重复若干次的字符串 / 两个数相除 % 取模,返回除法的余数 ** 幂,返回一个数的几次幂,比如10**2表示10的2次方 // 取整数,两个数相除,向下取整数,比如9//2结果为4 案例: a = 2 b = 1 c = 3 # 加法 结果为:3 print(a + b) # 减法 结果为:1 print(a - b) # 乘法 结果为:2 print(a * b) # 除法 结果为:2.0 print(a / b) # 取模 结果为:0 print(a % b) # 幂 结果为:2 print(a ** b) # 除法取整 结果为:1 print(c // a) 二、比较运算符 运算符 描述 == 比较两个对象是否相等 != 比较两个对象是否不相等 > 比较一个数字是否大于另一个数字 < 比较一个数字是否小于一个数字 >= 一个数字是否大于等于另一个数字 <= 一个数字是否小于等于一个数字 案例 aa = 2 bb = 4 cc = 1 # 输出结果:aa不等于bb if aa == bb: print('aa等于bb') else: print('aa不等于bb') # 输出结果:aa不等于bb if aa != bb: print('aa不等于bb') else: print('aa等于bb') # 输出结果:aa小于bb if aa < bb: print('aa小于bb') else: print('aa大于bb') # 输出结果:aa小于bb if aa > bb: print('aa大于bb') else: print('aa小于bb') # 输出结果:aa小于等于bb if aa >= bb: print('aa大于等于bb') else: print('aa小于等于bb') # 输出结果:aa小于等于bb if aa <= bb: print('aa小于等于bb') else: print('aa大于等于bb') 三、赋值运算符 运算符 描述 = 简单的赋值运算符,比如a = 2 += 加法赋值运算符,a += b等价于a = a + b -= 减法赋值运算符,a -= b等价于a = a - b *= 乘法赋值运算符,a = b 等价于a = a b /= 除法赋值运算符 a /= b 等价于 a = a / b %= 取模赋值运算符, a %= b 等价于 a = a % b **= 幂赋值运算符,a **= b 等价于 a = a**b //= 整除赋值运算符,a //= b等价于 a = a //b 案例: aaa = 2 bbb = 3 # 输出结果:5 aaa += bbb print(aaa) # 输出结果:15 aaa *= bbb print(aaa) # 输出结果:5.0 aaa /= bbb print(aaa) # 输出结果:2.0 aaa %= bbb print(aaa) # 输出结果:8.0 aaa **= bbb print(aaa) # 输出结果:2.0 aaa //= bbb print(aaa) 四、位运算符 运算符 描述 & 按位与运算符,参与运算的两个值,如果两个相应位都为1,则该位得结果为1,否则为0 | 按位或运算符,只要对应的两个二进位有一个为1,结果位就为1 ^ 按位异或运算符,当两对应的二进位相异时,结果为1 ~ 按位取反运算符,对数据的每个二进制位取反,即把1变为0,0变成1,~x类似于-x-1 << 左移动运算符,运算数的各二进位全部左移若干位,由<<右边的数指定移动的位数,高位丢弃,低位补0 >> 右移动运算符,把>>左边的运算数的各二进制位全部右移若干位,>>右边的数指定移动的位数 案例: e = 20 f = 10 # 输出结果:0 g = e & f print(g) # 输出结果:30 g = e | f print(g) # 输出结果:30 g = e ^ f print(g) # 输出结果:-21 g = ~e print(g) # 输出结果:80 g = e << 2 print(g) # 输出结果:5 g = e >> 2 print(g) 五、逻辑运算符 运算符 逻辑表达式 描述 and x and y 如果x为False,x and y返回False,否则返回y的值 or x or y 如果x为True,返回x的值,否则返回y not not x 如果x为True,返回False,如果为False,返回True 案例: h = 10 i = 20 # 输出结果:都为true if h and i: print("都为true") else: print("有不是true的") # 输出结果:都为true,或者一个为true if h or i: print("都为true,或者一个为true") else: print("都不是true") # 输出结果:都是true的 if not(h and i): print("都为false,或其中一个为false") else: print("都是true的") 六、成员运算符 除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组 运算符 描述 in 如果在指定的序列中找到值就返回True,否则返回False not in 如果没有找到,返回True,否则返回False 案例: a = 10 b = 20 myList = [1, 2, 3, 4, 20] # 输出结果:a不在列表里 if a in myList: print("a在列表里") else: print("a不在列表里") # 输出结果:a不在列表里 if a not in myList: print("a不在列表里") else: print("a在列表里") # 输出结果:b在列表里 if b in myList: print('b在列表里') else: print('b不在列表里') 七、身份运算符 身份运算符用于比较两个对象的存储单元 运算符 描述 is is是判断两个标识符是不是引用自一个对象 is not is not是判断两个标识符是不是引用不同对象 案例: a = 20 b = 10 c = 20 # 输出结果:不是同一个对象 if a is b: print("a和b是同一个对象") else: print('不是同一个对象') # 输出结果:a和c是同一个对象 if a is c: print("a和c是同一个对象") else: print("a和c不是同一个对象") # 输出结果:a和b不是同一个对象 if a is not b: print("a和b不是同一个对象") else: print("a和b是同一个对象") is是判断两个变量引用对象是否为同一个,==是判断引用变量的值是否相等 八、运算符优先级 运算符 描述 ** 指数,优先级最高 ~、+、- 按位反转、加@、减@ *、/、%、// 乘、除、取模、取整除 +、- 减法、加法 >>、<< 右移、左移 & 位'AND' ^、| 位运算符 <=、<、>、>= 比较运算符 ==、!= 等于运算符 =、%=、/=、//=、-=、*=、**= 赋值运算符 is、is not 身份运算符 in、not in 成员运算符 and、or、not 逻辑运算符 本文到此结束啦,如有误欢迎各位指正,也欢迎大家持续关注哦!!!!

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

Quarkus框架入门之二:依赖注入

前言 Spring框架最开始被我熟知就是AOP和IOC,其中IOC在开发过程中更是被广泛使用,如果切换到一个新的框架没有了依赖注入和控制反转,那么可以说一夜回到解放前了。那么,Quarkus框架中有没有对应的功能呢? 当然也有,Quarkus基于CDI规范提供了依赖注入的相关功能,本文将进行简单介绍。 CDI-Contexts and Dependency Injection 简单介绍 CDI(Contexts and Dependency Injection),即上下文依赖注入,是J2EE6发布的一个标准规范,用于对上下文依赖注入的标准规范化,思想应该是来源于Spring的IOC,存在的年头已经挺久远。但是之前一直没怎么关注这个规范,都是用Spring Framework打天下。 以前以为只能在J2EE中使用,但是在写这篇文章的时候,发现在J2SE8.0已经可以使用CDI了,只需要明确引导CDI容器即可。 简单使用示例(J2SE) 以下以在一个简单的Java项目中使用weld实现依赖注入进行简单示例,依赖包如下: <dependency> <groupId>org.jboss.weld.se</groupId> <artifactId>weld-se-core</artifactId> <version>3.1.0.Final</version> </dependency> 首先,编写接口类和实现类; HelloService.class /** * Created at 2019/5/18 by centychen<292462859@qq.com> */ public interface HelloService { /** * example method. * * @return */ String sayHello(); } HelloServiceImpl.class import cn.centychen.examples.j2se.cdi.service.HelloService; import javax.enterprise.inject.Default; /** * Created at 2019/5/18 by centychen<292462859@qq.com> */ @Default public class HelloServiceImpl implements HelloService { /** * Example method implement. * * @return */ @Override public String sayHello() { return "Hello,This is an example for CDI."; } } 其次,添加beans.xml定义文件,内容如下: 实际上添加一个空白文件也可以正常运行。 <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="all"> </beans> 最后,编写测试启动类 import cn.centychen.examples.j2se.cdi.service.HelloService; import javax.enterprise.inject.se.SeContainer; import javax.enterprise.inject.se.SeContainerInitializer; /** * Created at 2019/5/18 by centychen<292462859@qq.com> */ public class Application { /** * main method. * * @param args */ public static void main(String[] args) { SeContainer container = SeContainerInitializer.newInstance().initialize(); HelloService helloService = container.select(HelloService.class).get(); System.out.println(helloService.sayHello()); } } 运行测试,输入日志如下,HelloService的实现类已经正确注入。 objc[13831]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/bin/java (0x10d96e4c0) and /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/libinstrument.dylib (0x10e9934e0). One of the two will be used. Which one is undefined. 五月 18, 2019 12:37:36 下午 org.jboss.weld.bootstrap.WeldStartup <clinit> INFO: WELD-000900: 3.1.0 (Final) 五月 18, 2019 12:37:36 下午 org.jboss.weld.bootstrap.WeldStartup startContainer INFO: WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously. 五月 18, 2019 12:37:37 下午 org.jboss.weld.environment.se.WeldContainer fireContainerInitializedEvent INFO: WELD-ENV-002003: Weld SE container 3f7714f9-0cea-48a0-b217-1147420967e0 initialized Hello,This is an example for CDI. Weld SE container 3f7714f9-0cea-48a0-b217-1147420967e0 shut down by shutdown hook Quarkus依赖注入 Quarkus的依赖注入管理使用的是io.quarkus:arc,实际上就是CDI的一种实现。以下上一篇文章示例进行简单改造,实现依赖注入。 编写业务接口HelloService及其实现类HelloServiceImpl,参考代码如下: HelloService.class: /** * Created at 2019/5/18 by centychen<292462859@qq.com> */ public interface HelloService { /** * Say hello method. * * @param name * @return */ String sayHello(String name); } HelloServiceImpl.class: import cn.centychen.quarkus.example.service.HelloService; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Default; /** * Created at 2019/5/18 by centychen<292462859@qq.com> */ @ApplicationScoped //标志Bean的作用域为一个应用一个实例。 @Default //默认,接口多实现时必须 public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return String.format("Hello,%s!", name); } } 改造GreetingResource类,增加依赖注入以及业务接口调用,参考如下: import cn.centychen.quarkus.example.service.HelloService; import javax.inject.Inject; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; /** * @author: cent * @email: chenzhao@viomi.com.cn * @date: 2019/5/4. * @description: */ @Path("/hello") public class GreetingResource { @Inject private HelloService helloService; @GET @Produces(MediaType.APPLICATION_JSON) @Path("/{name}") public CompletionStage<String> hello(@PathParam("name") String name) { //使用异步响应 return CompletableFuture.supplyAsync(() -> helloService.sayHello(name)); } } 启动应用,访问接口,返回如下,证明依赖注入已经成功: 总结 Quarkus的上下文依赖注入使用的是CDI标准规范,实现依赖注入可以避免从Spring框架切换到Quarkus框架的使用上的不习惯,因为本人还没特别深入地使用Quarkus框架,特别是并没有在真实生产环境中使用过Quarkus框架,所以说Quarkus Arc能否达到Spring IOC的高度,还需要时间验证。 示例源码 码云:centychen/quarkus-simple-example 参考文章 CDI(JSR 299)介绍——JavaEE平台的上下文与依赖注入 An Introduction to CDI Quarkus

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

gitbook 入门教程之主题插件

主题插件 目前 gitbook 提供三类文档: Book 文档,API 文档和 FAQ 文档. 其中,默认的也是最常使用的就是 Book 文档,如果想要了解其他两种文档模式,需要引入相应的主题插件. 官方主题插件文档: https://toolchain.gitbook.com/themes/ Book 文档 theme-default 主题 插件地址: https://plugins.gitbook.com/plugin/theme-default theme-default 是 3.0.0 引入的默认主题,大多数插件针对的都是默认主题,如果切换到其他主题或者自定义主题,可能会造成某些情况下不兼容,甚至报错. 默认情况下,左侧菜单不显示层级属性,如果将 showLevel 属性设置为 true 可以显示层级数字. 示例: "pluginsConfig": { "theme-default": { "showLevel": true } } 效果: 默认情况下左侧菜单树不显示目录层级 开启层级显示设置后,左侧菜单树显示当前目录层级 theme-comscore 主题 插件地址: https://plugins.gitbook.com/plugin/theme-comscore default 默认主题是黑白的,而 comscore 主题是彩色的,即标题和正文颜色有所区分. 示例: "plugins": [ "theme-comscore" ] 效果: 默认情况下各级标题颜色均是黑色,不同级别的标题仅仅是大小区别. 设置 comscore 主题后,各级标题颜色不同,不仅仅是大小不同. API 文档 theme-api 插件 插件地址: https://plugins.gitbook.com/plugin/theme-api 如果文档本身是普普通文档模式,切换成 api 文档模式后并不会有太大变化,除非一开始就是接口文档,那样使用 theme-api 插件才能看出效果. 示例: { "plugins": ["theme-api"], "pluginsConfig": { "theme-api": { "theme": "dark" } } } 语法: 方法区 {% method %} 方法区: 接口说明 {% endmethod %} 语法区 {% sample lang="特定语言" %} {% common %} 示例: {% method -%} ## Simple method {% sample lang="js" -%} This text will only appear for JavaScript. {% sample lang="go" -%} This text will only appear for Go. {% common -%} This will appear for both JavaScript and Go. {% endmethod %} 效果: 添加 api 相关方法后的文档效果,正常会两列显示并在右上角增加语言切换工具. FAQ 文档 theme-faq 插件 插件地址: https://plugins.gitbook.com/plugin/theme-faq theme-faq 可以帮助我们构建问答中心,预设好常见问题以及相应答案模式,同时为了方便搜索到问题或答案,一般需要搜索插件的配合. 示例: { "plugins": [ "theme-faq", "-fontsettings", "-sharing", "-search", "search-plus" ] } 帮助中心没有工具栏,因此涉及到工具类的插件一律失效或主动移除,同时默认搜索插件也会失效. 语法: 增加文章间的关联 --- related: - some/other/page.md - another_related_article.md --- Content of my article! 在当前页面底部显示延伸阅读,支持 yaml 语法关联到其他页面. 增加头部 logo {% extends template.self %} {% block faq_header_brand %} <img src="https://mywebsite.com/logo.png" height="30" /> {% endblock %} 新建 _layouts/website/page.html 文件,用于扩展当前主题插件来增加自定义 logo. 增加导航栏链接 {% extends template.self %} {% block faq_menu %} <ul class="nav navbar-nav navbar-right"> <li><a href="#">Contact us</a></li> <li><a href="#">Return to SuperWebsite</a></li> </ul> {% endblock %} 新建 _layouts/website/page.html 文件,用于扩展当前主题插件来增加自定义导航栏链接. 示例: {% extends template.self %} {% block faq_header_brand %} <img src="https://upload.jianshu.io/users/upload_avatars/16648241/57aebe62-b5b5-491a-a9fd-f994d5be7dda.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240" /> {% endblock %} {% extends template.self %} {% block faq_menu %} <ul class="nav navbar-nav navbar-right"> <li><a href="https://snowdreams1006.github.io/other/me.html">联系我</a></li> <li><a href="https://snowdreams1006.github.io/">返回主页</a></li> </ul> {% endblock %} 新建 _layouts/website/page.html 文件,增加自定义 logo 和导航栏链接. 效果: 小结 本节主要讲解了常用的三种文档模式,其中 default 主题插件,适合一般的博客类网站或静态网站,api 主题插件适合接口文档的编写,faq 主题插件则适合帮助中心. 三种主题插件分别对应不同的应用场景,默认情况下使用的是 default 主题插件,平时介绍的大多数功能插件也大多适合这种主题,另外两种主题可能就不能很好兼容第三方插件,需要亲身体验.

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

git 入门教程之分支总览

分支就是一条独立的时间线,既有分支,必有主干,正如一棵树谈到树枝,必有树干一样的道理.我们先前对git 的全部操作默认都是在主干上进行的,这个主干也是一种特殊的分支,名为 master 分支. 无论是穿越历史还是撤销更改,我们都或多或少接触过时间线,git 管理的版本串在一起就组成了这个时间线,其中master 分支是当前分支,HEAD 指向master ,因此HEAD 相当于指向了最新的版本. 基于分支上的操作,每一次 commit 都会提交一个新版本,并且新的 commit 指向原来的 commit,这来最新的 commit 就可以往前找,直到找到最初的commit.这就是 git 的时间线. 当我们打算开辟新的时间线时,git 在当前 HEAD 指向的 master 分支的 commit 处新建一个 dev 分支.如果主角没有主动进入时间线的话,那么仍然处于 master 分支,进入的方法就是 HEAD指向新建的 dev 分支. 不考虑孙悟空的分身特效,主角不能同时处于不同的时空下,git 也是如何,HEAD 只能指向某一个 commit ,既然刚刚已经指向了 dev 分支,所以原来的 master 分支就没有 HEAD 了,因为相当于master 分支静止了. 当主角在 dev 分支独自闯荡干出一番事业时,决定回到故乡 master 分支,并将出门在外所学的本领带回家乡,建设美好家园.master 分支因为合并了 dev 分支,所以一下子增添了很多内容,家乡焕然一新! 主角这次携带 dev 分支归来,HEAD 分支自然又回到了 master 分支上,年轻的心向往外面的世间,相信不久后还会有同样的故事发生... 下面详解分支相关命令 创建分支 创建 dev 分支,列出分支已验证是否创建成功 # 创建分支 $git branch dev # 列出分支 $ git branch dev * master $ * master 前面的 * 标记表明当前仍然处于 master 分支 切换分支 切换到新分支以便在分支上开展工作 # 切换分支 $ git checkout dev Switched to branch 'dev' # 列出分支 $ git branch * dev master $ 现在,我们在 dev 分支上奋笔疾书,先后提交两个版本后完成分支开发工作: # 查看当前文件列表 $ ls LICENSE README.md test.txt # 查看目标文件内容 $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html # 第一个版本: learn git branch $ echo "learn git branch" >> test.txt $ git add test.txt $ git commit -m "learn git branch" [dev 9c30e50] learn git branch 1 file changed, 1 insertion(+) # 第二个版本: see https://snowdreams1006.github.io/git/usage/branch-overview.html $ echo "see https://snowdreams1006.github.io/git/usage/branch-overview.html" >> test.txt $ git add test.txt sunpodeMacBook-Pro:git-demo sunpo$ git status On branch dev Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: test.txt $ git commit -m "see https://snowdreams1006.github.io/git/usage/branch-overview.html" [dev 413a4d1] see https://snowdreams1006.github.io/git/usage/branch-overview.html 1 file changed, 1 insertion(+) 此时,再从 dev 分支切换回 master 分支,合并dev分支前看一下当前文件内容: # 切换回 master 分支 $ git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. sunpodeMacBook-Pro:git-demo sunpo$ git status On branch master Your branch is up to date with 'origin/master'. nothing to commit, working tree clean # 查看当前文件列表 $ ls LICENSE README.md test.txt # 查看文件内容: 无 dev 分支更改 $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html $ 合并分支 切换回 master 分支并没有我们在 dev 分支的更改,因为两条时间线是独立的,现在合并 dev 分支,再看一下当前文件内容: # 合并 dev 分支 $ git merge dev Updating b3d8193..413a4d1 Fast-forward test.txt | 2 ++ 1 file changed, 2 insertions(+) # 查看文件内容: 已经存在 dev 分支的更改! $ cat test.txt add test.txt see https://snowdreams1006.github.io/git/usage/remote-repository.html learn git branch see https://snowdreams1006.github.io/git/ 删除分支 合并分支后,dev 分支的历史使命已经完成,应该及时清空不必要分支. # 删除 dev 分支 $ git branch -d dev Deleted branch dev (was 413a4d1). # 列出当前分支: 只剩下 master 分支 $ git branch * master $ 以上场景包括了分支的常用操作,创建分支(git branch <name>),切换分支(git checkout <name>),删除分支(git branch -d <name>)一系列操作十分流畅,因此 git 鼓励我们大量使用分支! 小结 列出分支 git branch 创建分支 git branch <name> 切换分支 git checkout <name> 创建并切换分支 git checkout -b <name> 合并指定分支到当前分支 git merge <name> 删除分支 git branch -d <name>

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

Golang 入门系列(八) cron定时任务

1、cron 表达式的基本格式 Go 实现的cron 表达式的基本语法跟linux 中的 crontab基本是类似的。cron(计划任务),就是按照约定的时间,定时的执行特定的任务(job)。cron 表达式 表达了这种约定。 cron 表达式代表了一个时间集合,使用 6 个空格分隔的字段表示。如果对cron 表达式不清楚的,可以看看我之前介绍quartz.net 的文章, Quartz.NET总结(二)CronTrigger和Cron表达式。 2、使用的包 github.com/robfig/cron 3、示例 创建最简单的最简单cron任务 package main import ( "github.com/robfig/cron" "fmt" ) func main() { i := 0 c := cron.New() spec := "*/5 * * * * ?" c.AddFunc(spec, func() { i++ fmt.Println("cron running:", i) }) c.Start() select{} } 启动后输出如下: D:\Go_Path\go\src\cronjob>go runsinglejob.go cron running: 1 cron running: 2 cron running: 3 cron running: 4 cron running: 5 多个定时cron任务 package main import ( "github.com/robfig/cron" "fmt" ) type TestJob struct { } func (this TestJob)Run() { fmt.Println("testJob1...") } type Test2Job struct { } func (this Test2Job)Run() { fmt.Println("testJob2...") } //启动多个任务 func main() { i := 0 c := cron.New() //AddFunc spec := "*/5 * * * * ?" c.AddFunc(spec, func() { i++ fmt.Println("cron running:", i) }) //AddJob方法 c.AddJob(spec, TestJob{}) c.AddJob(spec, Test2Job{}) //启动计划任务 c.Start() //关闭着计划任务, 但是不能关闭已经在执行中的任务. defer c.Stop() select{} } 启动后输出如下: D:\Go_Path\go\src\cronjob>go run multijob.go cron running: 1 testJob1... testJob2... testJob1... cron running: 2 testJob2... testJob1... testJob2... cron running: 3 cron running: 4 testJob1... testJob2... 4、最后 以上,就将Golang中如何创建定时任务做了简单介绍,实际使用中,大家可以可结合toml yaml 配置需要定时执行的任务。

资源下载

更多资源
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文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册