首页 文章 精选 留言 我的

精选列表

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

vonce-sqlbean 1.4.0 发布,赋能 Mybatis 支持 JPA 能力

vonce-sqlbean 是一款使用 Java 面向对象思想来编写并生成 Sql 语句的工具,并在此基础上同时对Mybatis和Spring Jdbc实现了类似于JPA的轻量级插件支持。插件中内置大量常用Sql执行的方法,目的是为了提高开发效率,减少大量的Sql语句编写,让开发者更专注于业务代码的编写。 特点:零配置,自动建表,连表查询,乐观锁,分页,支持Mybatis、Spring Jdbc 环境:JDK7+,Mybatis3.2.4+,(Spring MVC 4.1.2+ 或 Spring Boot 1x 或 Spring Boot 2x) 数据库:Mysql,MariaDB,Oracle,Sqlserver2008+,PostgreSQL,DB2,Derby,Sqlite,HSQL,H2 本次更新 1:拆分独立vonce-sqlbean-core模块; 2:拆分独立vonce-sqlbean-spring模块; 3:封装sqlbean-core使其兼容安卓和Java; 4:重构部分代码; 5:新增TableService接口实现Drop、Create表、获取所有表名功能; 6:新增支持项目启动时如表不存在则自动创建; 7:新增getBeanClass()方法在SqlBeanService接口; 8:新增Select中的column和where支持子Select(Sql)传入; 9:新增autoCreate属性在@SqlTable注解,默认true,表不存在自动创建; 10:新增autoCreate总开关在SqlBeanConfig,默认ture,如果这里关闭则不生效; 11:新增generate属性在@SqlTable注解,默认true,自动生成Sql常量; 12:新增isView属性在@SqlTable注解,默认false,标注是否为视图; 13:新增notNull、type、length、decimal、def属性在@SqlColumn注解; 14:新增ReqPageHelper用于取代之前的PageHelper; 15:删除@SqlConstant注解,改为默认使用@SqlTable注解即可生成sql映射的字段常量; 16:修复orderby和groupby字段问题; 17:修复select语句字段生成的bug;

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

React Native 0.63 发布,告警系统、颜色与交互能力改进

React Native 0.63 已经发布了,此版本主要亮点包括: 默认启用 LogBox <Pressable />组件 新增使用系统定义颜色的 API 默认启用 LogBox 社区一直以来反馈错误和警告很难在 React Native 中进行调试,因此开发团队研究了 React Native 中的整个错误、警告和日志系统,从头开始对其进行了重新设计,现在使用一个新系统 LogBox 替换redbox、yellowbox 与日志记录。上一个版本中已经引入该 LogBox,此版本开始,它默认开启,并在使用 yellowbox 等一些不建议使用的模块或方法时发出警告,0.64 版本中将删除相关 API。 LogBox 目标是: 简洁:日志应提供调试问题所需的最少信息量。 格式化:日志应该格式化,可以快速找到所需的信息。 可操作性:日志应可操作,可以解决问题并继续进行。 为了实现这些目标,LogBox 设计时包括: 日志通知:重新设计了警告通知并增加了对错误的支持,以便所有 console.warn 和 console.log 消息都显示为通知,而不是覆盖应用程序。 代码帧:每个错误和警告都包括一个代码帧,可在应用程序内部显示日志的源代码,可以快速识别问题的来源。 组件栈:提供了一个一致的、不会使日志消息混乱的组件栈帧信息,只显示前三个。 折叠组件栈帧:默认情况下折叠与应用程序代码无关的调用堆栈帧,可以在应用程序中快速查看问题,而不必通过 React Native 内部筛选。 语法错误格式:改进了语法错误的格式,并通过语法高亮添加了代码帧,可以查看错误的根源进行修复,并继续进行编码。 pressable 组件 React Native 现在支持 Web、桌面和电视等平台,但是缺少对其它输入方式的支持。为了解决在所有平台上支持高质量的交互体验,此版本提供了一个新核心组件Pressable。该组件可用于检测各种类型的交互,旨在提供对交互当前状态的直接访问,而不必在父组件中手动维护状态。同时它还旨在使平台能够扩展其功能,例如悬停、模糊与聚焦等。 import { Pressable, Text } from 'react-native'; <Pressable onPress={() => { console.log('pressed'); }} style={({ pressed }) => ({ backgroundColor: pressed ? 'lightskyblue' : 'white' })}> <Text style={styles.text}>Press Me!</Text> </Pressable>; 新增使用系统定义颜色的 API 每个平台都有系统定义的颜色,尽管可以通过AppearanceAPI 或 AccessibilityInfo检测并设置其中的某些样式,但是这样的操作不仅开发成本高昂,而且还局限。 React Native 现在提供了一个开箱即用的解决方案来使用这些系统颜色。PlatformColor()是一个新的 API,可以像 React Native 中的其它任何颜色一样使用。 例如,在 iOS 上,系统提供一种颜色labelColor,可以在 React Native 中这样使用 PlatformColor: import { Text, PlatformColor } from 'react-native'; <Text style={{ color: PlatformColor('labelColor') }}> This is a label </Text>; 另一方面,Android提供像colorButtonNormal 这样的颜色,可以在 React Native 中这样使用 PlatformColor: import { View, Text, PlatformColor } from 'react-native'; <View style={{ backgroundColor: PlatformColor('?attr/colorButtonNormal') }}> <Text>This is colored like a button!</Text> </View>; 同时DynamicColorIOS是仅限于 iOS 的 API,可以定义在浅色和深色模式下使用的颜色。与PlatformColor相似,可以在任何可以使用颜色的地方使用: import { Text, DynamicColorIOS } from 'react-native'; const customDynamicTextColor = DynamicColorIOS({ dark: 'lightskyblue', light: 'midnightblue' }); <Text style={{ color: customDynamicTextColor }}> This color changes automatically based on the system theme! </Text>; 此外 0.63 版本还不再支持 iOS 9 与 Node.js 8,完整更新内容可以查看: https://github.com/facebook/react-native/releases/tag/v0.63.0 https://reactnative.dev/blog/2020/07/06/version-0.63

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

轻松扩展机器学习能力:如何在Rancher上安装Kubeflow

随着机器学习领域不断发展,对于处理机器学习的团队来说,在1台机器上训练1个模型已经有些难以为继,并且现在业界的共识是机器学习已经不仅仅是简单的模型训练。 在模型训练之前、过程中和之后,需要进行许多活动,对于要生成自己的ML模型的团队来说尤其如此。下图常常被引用来说明此类情况: 对于许多团队来说,将机器学习的模型从研究环境应用到生产环境这一过程困难重重,背负很大的压力。糟糕的是,市面上处理每类问题的工具都数量惊人,而这些海量工具都有望解决你所有的机器学习难题。 但是整个团队学习新工具通常很耗时,并且将这些工具集成到你当前的工作流程中也并不容易。这时,或许可以考虑Kubeflow,这是为需要建立机器学习流水线的团队而打造的一个机器学习平台,它包括许多其他工具,可以用于服务模型和调整超参数。Kubeflow尝试做的是将同类最好用的ML工具整合在一起,并将它们集成到一个平台中。 来源:https://www.kubeflow.org/docs/started/kubeflow-overview/ 顾名思义,Kubeflow应该部署在Kubernetes上,既然你是通过Rancher的平台阅读到这篇文章,那么你大概率已经在某个地方部署了Kubernetes集群。 值得注意的是,Kubeflow中的“flow”并不是表示Tensorflow。Kubeflow也能够与PyTorch一起使用,甚至可以与任何ML框架一起使用(不过支持得最好的框架还是Tensorflow和PyTorch)。 在本文中,我将向你展示如何尽可能简单地安装Kubeflow。如果在你的集群上已经有GPU设置,则过程将更为简单。如果尚未设置,那么你需要执行一些额外的设置步骤,因为许多机器学习需要运行在NVIDIA GPU上。 在Kubeflow上设置GPU支持 假设你已经安装了Docker 19.x。 1、 安装NVIDIA 容器运行时 在所有带有GPU的节点上: % distribution=$(. /etc/os-release;echo $ID$VERSION_ID) % curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - % curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list % sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit % sudo apt-get install nvidia-container-runtime 现在,修改Docker守护进程(Daemon)运行时字段: % sudo vim /etc/docker/daemon.json 粘贴以下内容: { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } 现在重启Docker守护进程: % sudo systemctl restart docker 2、 安装NVIDIA设备插件 在master节点上,创建NVIDIA设备插件: % kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml 接下来,正式开始安装Kubeflow。 安装Kubeflow 注意:在撰写本文时,Kubeflow的最新版本是1.0。它与Kubernetes 1.14和1.15版本兼容。 Step0:设置动态Volume配置 在我们安装Kubeflow之前,我们需要设置动态配置。 一种方法是使用Rancher的local-path-provisioner,其中使用了基于hostPath的节点持久卷。设置非常简单:将其指向节点上的路径并部署YAML文件。缺点是无法控制volume容量限制。 另一种方法是使用网络文件系统(NFS),我将在下文展示具体步骤。 在Master节点上设置网络文件系统 假设你将大部分数据存储在本地,那么你需要设置NFS。在这里,我假设 NFS server位于master节点10.64.1.163上。 首先,为NFS安装依赖项: % sudo apt install -y nfs-common nfs-kernel-server 然后,创建一个根目录: % sudo mkdir /nfsroot 将以下条目添加到/etc/exports: /full/path/to/nfsroot 10.64.0.0/16(rw,no_root_squash,no_subtree_check) 请注意,10.64.0.0是节点的CIDR,而不是Kubernetes Pod CIDR。 接下来,通过以下命令将共享目录导出为sudo: % sudo exportfs -a 最后,要使所有配置生效,请按如下所示重新启动NFS内核服务器: % sudo systemctl restart nfs-kernel-server 另外,确保nfs-kernel-server在服务器(重新)启动时启动: % sudo update-rc.d nfs-kernel-server enable 在worker节点上设置NFS 为NFS安装依赖项: % sudo apt install -y nfs-common 安装NFS Client Provisioner 现在,我们可以安装NFS Client Provisioner——并且终于可以向你们安利我最爱的Rancher功能之一:应用商店! 默认情况下,Rancher自带了许多已经经过测试的应用程序。此外,我们还可以自行添加整个Helm Chart到应用商店里。 点击Apps,然后点击【Manage Catalogs】 然后选择【Add Catalog】: 填写以下值: 点击【Create】,回到【Apps】页面。稍微等待一会儿,你将看到helm部分有了许多应用程序。你可以点击【Refresh】来查看进程: 现在,在搜索框内输入nfs,然后你将看到2个条目: 其中一个正是我们要找的:nfs-client-provisioner。点击它,然后你将看到: 这是可用于nfs-client-provisioner的chart的所有选项,你将需要使用它们来填写以下内容: 填写完毕后,你可以点击【Launch】按钮。等待一会儿,让Kubernetes下载Docker镜像,并将一切设置完毕。所有操作都完成后,你将看到以下页面: 我真的太喜欢应用商店这个功能了,它是我最喜欢的功能之一,因为它的存在,使得在集群上安装和监控应用程序变得简单和方便。 Step1:下载并安装kfctl 这是Kubeflow的控制工具,与kubectl类似。你可以从Kubeflow的release页面下载它。 然后,解压文件并将二进制文件放入你的$PATH中。 Step2:安装Kubeflow 首先,指定一个文件夹存储所有的Kubeflow YAML文件。 $ export KFAPP=~/kfapp 下载kfctl配置文件: wget https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml 请注意:如果你已经安装了Istio,则需要编辑kfctl_k8s_istio.v1.0.2.yaml并删除istio-crds和istio-install应用程序条目。 然后,导出CONFIG_URI: $ export CONFIG_URI="/path/to/kfctl_k8s_istio.v1.0.2.yaml" 接下来,你需要指定一堆环境变量,这些环境变量将指示Kubeflow配置文件下载到的位置: export KF_NAME=kubeflow-deployment export BASE_DIR=/opt export KF_DIR=${BASE_DIR}/${KF_NAME} 安装Kubeflow: % mkdir -p ${KF_DIR} % cd ${KF_DIR} % kfctl apply -V -f ${CONFIG_URI} 你需要一些时间等待一切都设置完毕。 访问Kubeflow UI 要访问UI,我们需要知道Web UI所在的端口: % kubectl -n istio-system get svc istio-ingressgateway 返回以下内容: NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingressgateway NodePort 10.43.197.63 <none> 15020:30585/TCP,**80:31380/TCP**,443:31390/TCP,31400:31400/TCP,15029:32613/TCP,15030:32445/TCP,15031:30765/TCP,15032:32496/TCP,15443:30576/TCP 61m 在本例中,它是80:31380,这意味着你可以通过http://localhost:31380 访问Kubeflow UI: 如果你成功地看到了这个页面,那么恭喜你,你已经成功设置Kubeflow🎉 结 论 在本文中,我们首先探讨了为什么需要诸如Kubeflow这类工具——以控制机器学习本身的复杂性。接下来,我们按照步骤为集群进行机器学习工作做好了准备,尤其需要确保该集群可以利用可用的NVIDIA GPU。 在设置NFS时,我们探索了Rancher的应用商店,并将Helm Chart添加到应用商店中。它为我们提供了在Kubernetes集群上可以安装的所有Kubernetes应用程序。最后,我们完成了在集群上安装Kubeflow的步骤。

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

阿里巴巴,果然开始拥有“预测未来“的能力了

文|史中 顶灯闪烁,笛声响彻。 救护车载着病人,冲向茫茫车海,在时间的赛道上狂奔。 高德地图、GPS 卫星导航、路面磁感线圈、1300 个路口摄像头同时开动,为这辆救护车勘探最快路线; GPS 传回实时数据,后台根据辅助数据纠偏,锚定救护车每一刻的精确位置; 救护车将要经过的沿途,车辆情况被实时计算。确保路口绿灯提前亮起,在救护车通过之前,刚好所有社会车辆已经行驶一空。 这不是演习,这是杭州城市大脑每天都在执行的任务。依靠计算,一辆救护车到达医院的速度,平均缩短了 50%。在这座城市,靠鸣笛和闯红灯开道的悲壮彻底成为历史。 说人同蝼蚁,其实并不为过。两百多万辆车奔跑在城市里,他们的行踪像风里的落叶一样叵测。但通过对 1300个路口的摄像头的实时计算,城市大脑就可以精确地预测出未来十五分钟、未来半小时那哪个路段将会拥堵,从而第一时间指挥路口信号灯

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

阿里巴巴,果然开始拥有“预测未来”的能力了

文 | 史中 顶灯闪烁,笛声响彻。 救护车载着病人,冲向茫茫车海,在时间的赛道上狂奔。 高德地图、GPS 卫星导航、路面磁感线圈、1300 个路口摄像头同时开动,为这辆救护车勘探最快路线; GPS 传回实时数据,后台根据辅助数据纠偏,锚定救护车每一刻的精确位置; 救护车将要经过的沿途,车辆情况被实时计算。确保路口绿灯提前亮起,在救护车通过之前,刚好所有社会车辆已经行驶一空。 这不是演习,这是杭州城市大脑每天都在执行的任务。依靠计算,一辆救护车到达医院的速度,平均缩短了 50%。在这座城市,靠鸣笛和闯红灯开道的悲壮彻底成为历史。 说人同蝼蚁,其实并不为过。两百多万辆车奔跑在城市里,他们的行踪像风里的落叶一样叵测。但通过对 1300个路口的摄像头的实时计算,城市大脑就可以精确地预测出未来十五分钟、未来半小时那哪个路段将会拥堵,从而第一时间指挥路口信

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

Android架构纵横谈之——软件自愈能力 (3)

By LiAnLab.org / 宋宝华 最近马不停蹄往返进行Linux技术讲座,所以本回delay了一周。上回书说到Android中生死与共的Zygote和SystemServer,今回书我们讲SystemServer的watchdog,也为软件架构自愈系列的总结篇。 第三只狗:朝廷鹰犬 2012 年7月,网名为“吴法天”、人称中国十大“五毛”的中国政法大学副教授吴丹红,和网名为“此是燕云”的四川电视台记者周燕,“微博约架”北京朝阳公园南 门。众多网友前去围观,一场鸡飞狗跳的闹剧就此上演。吴法天被打,天朝为之轰动。笔者观此视频,对于吴被打,稍有振动,而最震慑心灵的是,视频中,吴被众 人齐呼“走狗”,却是有相当的讽刺意味。“走狗”,基本上是与“朝廷鹰犬”同等的概念,可笑的是,替现政府说话的人,目前成为“走狗”,换回70年前,又 是怎样的观景?当年彼是绿林,今日彼为走狗,想起小时候看过的电影《金镖黄天霸》,黄天霸曾经是伟大的无产阶级领袖,绿林好汉的三统领,后投靠清廷,于是 成为“鹰犬”,成功升级为与明朝东厂同等的地位。政治是个卑鄙的把戏,历史上屡次的成功者,基本上都是最卑鄙者。 “走 狗”、“鹰犬”的特点是,对主人卑躬屈膝,对民间进行秘密监控、暴力镇压、实施酷刑等,搞到人人自危。在Android的世界里,这样的“走狗”也必然存 在。在SystemServer启动一些service后,它需要不断监视一些重要service的状况,一旦发现某个service有异动,思想上与统 治者长期不一致,势必要采取行动。在SystemService的众多service中,重点监控对象包括ActivityManagerService 、PowerManagerService、WindowManagerService等,这个监控透过Android的watchdog实现 。 在 一个典型的嵌入式系统中,会存在一个硬件看门狗,正常运转的系统会周期喂狗,否则证明系统hang了。硬件看门狗存在相当大的局限性,它只能监控整个系统 而不能监控单个的进程或者线程。于是发明软件看门狗意义重大。SystemServer会用到软件看门狗来确保AM 、PM、WM这几个服务hang住之后,退出SystemServer进程,从而进入上回书中的Zygote与SystemServer的生死与共。注意 service是hang而不是死,绕到个死胡同里出不来了。镜湖女侠决定了革命,你再怎么去说服她也没有用了。这些重要的service运行于 SystemServer的进程空间,在祖国的怀抱里长大,它们热爱祖国热爱人民,只是步调偏了,不按照当局规定的方式“爱国”,当局透过Java里面去 synchronized某锁的时候长时间拿不到。 我们随便读一下PowerManagerService.java的源代码,会发现几乎所有的重要操作都会透过synchronized其中的mLocks进行,咱们抓几个看看: 很 显然,如果我们故意去synchronizedmLocks这个锁,如果长时间拿不到,基本可认定PowerManagerService在某个操作里面 hang了,短时间或者直接就拿到了,证明一切正常。PowerManagerService里面实现了monitor成员函数来 synchronized mLocks: // for watchdog public void monitor() { synchronized (mLocks) { } } 同样的道理,对于其他的几个service,我们也可以用类似的方法来验证它们是否hang。同志们啊,很多国内的书或者文档里面把这个侦测hang的过 程说成是侦测死锁,含义其实是大错特错了,也把广大的读者搞地不知所云。因为死锁只是引起hang的一种可能,hang的含义则更加广泛。缓刑或者监外执 行的罪犯,周期性地会去派出所报告工作,如果没去报告,很可能不是被家里人死锁在房间里打不开门了,更可能是跑路了。 同样,国内很多的教科书以内核cs8900驱动为例讲解网络设备驱动,我也反复在各大公司澄清过cs8900 那就是一反面教材,是一个平台相关信息渗透入与平台无关驱动代码的典型错误范例,需要拨乱反正啊有木有? 了 解了侦测service hang的原理,我们需要一套方法来实现这个侦测,这个过程透过watchdog来实现。在Android中,watchdog继承于thread类,代 码位于frameworks/base/services/java/com/android/server/Watchdog.java。采用单例模 式,提供getInstance() 接口,同时在watchdog创建的过程中,会创建一个用于消息处理的HeartbeatHandler: public static Watchdog getInstance() { if (sWatchdog == null) { sWatchdog = new Watchdog(); } return sWatchdog; } private Watchdog() { super("watchdog"); mHandler = new HeartbeatHandler(); } SystemServer会调用watchdog的start函数,从而让继承于thread的Watchdog的run函数在一新线程被执行: public void run() { boolean waitedHalf = false; while (true) { mCompleted = false; mHandler.sendEmptyMessage(MONITOR);//引发HeartbeatHandler在相应线程处理MONITOR消息 synchronized (this) { long timeout = TIME_TO_WAIT;//周期性等待 long start = SystemClock.uptimeMillis(); while (timeout > 0 && !mForceKillSystem) { try { wait(timeout); } catch (InterruptedException e) { Log.wtf(TAG, e); } timeout = TIME_TO_WAIT - (SystemClock.uptimeMillis() - start); } if (mCompleted && !mForceKillSystem) { // monitor都返回了,mCompleted为真 waitedHalf = false; continue; } if (!waitedHalf) { // monitor没有都返回,再进行第二次等待判断 waitedHalf = true; continue; } } // 第2次了,monitor还没都返回,确实hung了 if (!Debug.isDebuggerConnected()) { //SystemServer自杀 Process.killProcess(Process.myPid()); System.exit(10); } else { Slog.w(TAG, "Debugger connected: Watchdog is *not* killing the system process"); } waitedHalf = false; } } 这个run函数实现比较简单, 周期性地设置mCompleted变量为假,通知心跳handler去调用各个monitor,而心跳handler会调用各个service的 monitor,如果各个monitor都返回了,心跳handler会将mCompleted设置为真(这个过程是不是和使用硬件看门狗的情况下把定时 器复位惊人的相似?因此,我们可以把这个过程看做“喂狗”)。否则,经过2次等待watchgod的run()发现mCompleted还为假,就证明 hang了。我们看看心跳handler调用各个monitor的过程并“喂狗”的过程: final class HeartbeatHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case MONITOR: { //调用每个monitor final int size = mMonitors.size(); for (int i = 0 ; i < size ; i++) { mCurrentMonitor = mMonitors.get(i); mCurrentMonitor.monitor(); } synchronized (Watchdog.this) { mCompleted = true; //修改mCompleted为true mCurrentMonitor = null; } } break; } } } 而PowerManagerService等service如何进入上面代码中的for循环呢?那是因为他们正好实现了 这个Watchdog.Monitor接口,并透过Watchdog.getInstance().addMonitor(this)加到了 monitor列表里面。 结合第一回和第二回,我们基本可以看出整个Android软件自愈过程的“环环相扣”,成为一个多么完美的体系 啊!SystemServer监控重要service,重要service hang则SystemServer死,SystemServer死则Zygote监控到,Zygote也死并且杀死整个Java世界,Zygote死则 init监控到,init重新启动Zygote,之后SystemServer、service又进入重生过程,与死亡的过程相反。 这个过程我们 看到了多进程之间的千丝万缕的联系,以及多进程模型的魅力和设计哲学,程序员喜欢孤立的去看待自己的程序而不是总揽全局,而从体系架构的角度去思考问题, 我们更加能清楚我们位于整个软件的哪个组成部分。和宇宙大爆炸比起来,咱屌丝们的房子、车子都不过是过眼云烟,所以我们要尽快把自己的人生理想调整到配合 宇宙大爆炸的方向上来。从Android的init、Zygote、SystemServer和重要service的彼此关联中,我们至少体会到了一些什 么,整天盯着自己的几个函数玩,不在宇宙里玩,玩地多不过瘾啊?关系上是“宇宙大爆炸->Android-> 程序员”,不是“函数->模块->Android”,这是研究Android的方法学。谁可以帮我p一副图?把下面这个宇宙大爆炸图中p出个 Android,旁边再p出个苦B程序员呢? 在朝廷鹰犬的监控之下,无法与中央保持一致的service革命者就这样被watchdog给揪了出来。鹰犬问道,你只要放弃你的信念,保持喂狗,就可以活。而他(她)毅然选择了慷慨负死。威廉·华莱士道:“跟着我,你们将失去生命,但是,你们将获得自由” 。 谨以本回,献给中国历史上前赴后继的伟大的为天下人谋求永福的人们。 汝体吾此心, 于啼泣之余, 亦以天下人为念, 当亦乐牺牲吾身与汝身之福利, 为天下人谋永福也。 汝其勿悲! 本文转自 21cnbao 51CTO博客,原文链接:http://blog.51cto.com/21cnbao/931682,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

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

用户登录
用户注册