首页 文章 精选 留言 我的

精选列表

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

区块链架构设计和知识图谱

ajax不是什么新技术,但组合在一起就成就了产品谷歌地球,与之类似,区块链也不是什么新技术,但与加密解密技术、P2P网络等组合在一起,就诞生了比特币。区块链作为比特币背后的技术,无需中心服务器。比特币等加密货币存储数据的一种独特方式,是一种自引用的数据结构,用来存储大量交易信息。区块链是一项技术,加密货币是其开发实现的一类产品(含有代币,也有不含代币的区块链产品)。与加密货币相比,区块链这个名字抛开了代币的概念,更加形象化、技术化、去政治化,更适合作为一门技术去研究、去推广。 架构图:从架构设计上来说,区块链可以简单的分为三个层次,协议层、扩展层和应用层。其中,协议层又可以分为存储层和网络层,它们相互独立但又不可分割。如图: 协议层 所谓的协议层,就是指代最底层的技术。这个层次通常是一个完整的区块链产品,类似于我们电脑

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

工作中的一些知识总结

判断h5页面是否App内打开 HybridMethod.isApp() 跳转 部分功能已封装至srcstatich5jsjshybridcomponent.js,可以直接调用 页面跳转 topage为跳转页面地址,若下表未给出目标页参数,topage直接为目标链接地址,否则为目标页参数 方法一 RainbowBridge.callMethod('JsInvokeAppScope', 'forward', { type: 'h5Web', //跳转类型native或h5Web或h5Native topage: 'showMallShake' }); 方法二 <div data-forwardBox> <div data-forwardNoRight-topage="<% webpath.h5 %>/help/qalist.html?q=0&a=2" data-forwardNoRight-title="产品计划" data-forwardNoRight-type="h5Web">加入的计划是如何计息和派息的?</div> </div> 弹窗 RainbowBridge.callMethod('JsInvokeAppScope','showAlert',obj,function(result){}) 显示loading loading:function(status){ RainbowBridge.callMethod('JsInvokeAppScope','loading',{status:status}); }, 弹出ActionSheet showThemeDialog:function(obj){ //参数是一个对象,只有一个属性dialog,属性值是一个数组,数组每项又是一个对象,分别有两个属性:link,title RainbowBridge.callMethod('JsInvokeAppScope','showThemeDialog',{ dialog : obj.dialog }); }, 结束刷新 RainbowBridge.callMethod('JsInvokeAppScope','endIntegralLoad',{}); 跳转登陆页 if(HybridMethod.isApp()) { RainbowBridge.callMethod('JsInvokeAppScope', 'goLogin'); } else { var _index = window.location.href.indexOf('event'); window.location.href = HybridParams.pc + '/event/login.html?backUrl=' + window.location.href.substring(_index); } 跳转注册页 if(HybridMethod.isApp()){ RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'register' }) }else{ window.location.href = HybridParams.pc + '/event/register/beginnerwelfare/indexh5.html'; } or RainbowBridge.callMethod('JsInvokeAppScope','goRegister',{}); 跳转到app页面的时候可以给页面添加标题和其他文字 if(HybridMethod.isApp()){ RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'register', UIHeader: { title: "分享领奖", //标题 right:{ //标题栏右边的显示 type:"word",//类型文字word或类型icon图片或share content:"中奖记录",//内容为文字或icon图片地址 action:{ //这个type点击后的跳转 type: 'h5Web',//跳转类型native或h5Web或h5Native topage: LOCATIONORIGIN + '/integral/prizeRecord.html', UIHeader:{ //点击后侧type内容跳转后的页面显示 title:"中奖记录"//标题 } } } } }) }else{ window.location.href = HybridParams.pc + '/event/register/beginnerwelfare/indexh5.html'; } 跳转个人中心 if(HybridMethod.isApp()){ RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'user' }) }else{ window.location.href = HybridParams.h5 + "/download"; } 跳转投资页 if (HybridMethod.isApp()) { RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native', topage: 'invest' }); }else{ window.location.href = HybridParams.h5 + "/download"; } 已登录跳转到首页,没登录跳转到登录页 if(HybridMethod.isApp()){ if(HybridParams.token){ RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'home' //首页 }) }else{ RainbowBridge.callMethod('JsInvokeAppScope','goLogin'); } }else{ window.location.href= HybridParams.h5+'/download/'; } 跳转到充值 RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'recharge' }) 跳转到账户安全(设置页面) RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'showSettingActivity' }) 跳转到积分商城 RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'native',//跳转类型native或h5Web或h5Native topage: 'showMall' }) 关闭当前页面 if(HybridMethod.isApp()) { RainbowBridge.callMethod('JsInvokeAppScope','finish'); } 跳转到提现页面 var _li = $(this).closest('li'); if(HybridMethod.isApp()){ //这个页面已经不用了 RainbowBridge.callMethod('JsInvokeAppScope','goForwardWithParams',{ type : 'withdraw', lhhnum : '提现值' }); } 其他跳转例子 if(HybridMethod.isApp()){ var topage = params.h5 + "/user/bonus_receive.html?rcode="+rcode; RainbowBridge.callMethod('JsInvokeAppScope','forward',{ type: 'h5Web',//跳转类型native或h5Web或h5Native topage: topage, UIHeader:{ //跳转后页面的显示 title:"好友邀你领红包",//标题 } }); }else{ window.location.assign(params.h5 + "/user/bonus_receive.html?rcode="+rcode); } 设置当前页的标题 if(HybridMethod.isApp()){ RainbowBridge.callMethod('JsInvokeAppScope','setWebTitle',{ title: 'demo3-sub页面一前端设置当前页的标题', }); } 其他跳转总结: "experianceInvest"; 体验标投资"feedback"; 意见反馈"aboutUs"; 关于我们"myNotice"; 公告"message"; 消息 "myPrivilege"; 我的特权"productDetail"; 计划详情 -------------需要参数 参数key : id"getMoreByInvite";// 跳转多邀多的;页面为H5 但是因为有二级页面参数不好跳转 , 走本地页面流程"showMallShake"; //积分商城摇一摇 页面为H5 但是因为有二级页面参数不好跳转 , 走本地页面流程"moneyRecord";//资金明细 帮助中心功能 app内h5页面是否有“下拉刷新”功能 & “上拉加载更多”功能 type:1 下拉 type:2 上拉 type:3 both两个都有 RainbowBridge.callMethod('JsInvokeAppScope','setRefeshType',{ type : 1 }) 显示通用弹出框 var refreshdata = { "type": 9, "message": "线下充值可能延至48小时到账建议使用在线通道充值", "largebuttontext": "返回在线充值", "extraclicktext": "继续刷新余额", }; 复制操作 RainbowBridge.callMethod('JsInvokeAppScope','copyContent',{content:content}); 复制邮箱 $('.kefu_email').click(function(){ var txt = $(this).find('span').text(); HybridMethod.invokeEmail(txt); }) 调起邮箱 invokeEmail:function(email){ RainbowBridge.callMethod('JsInvokeAppScope','invokeEmail',{email:email}); } 粘贴到剪贴板 copyH5Content:function(content){ RainbowBridge.callMethod('JsInvokeAppScope','copyH5Content',{content:content}); } 复制微信号 $('.ylb_weixin').click(function(){ HybridMethod.copyH5Content('yonglibao'); }) 跳转在线客服界面 $('.kefu_online').click(function(){ RainbowBridge.callMethod('JsInvokeAppScope','toContactUs'); }) 拨打电话 $('.ylb_phone').click(function(){ HybridMethod.toCallUs('400-615-5566'); }) or toCallUs:function(phone){ RainbowBridge.callMethod('JsInvokeAppScope','toCallUs',{phone:phone}); }, 照相机 camera:function(callback){ RainbowBridge.callMethod('JsInvokeAppScope','camera',{},callback); } 判断android和ios isAndroid: function(){ var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端或者uc浏览器 return isAndroid; }, isIOS: function(){ var u = navigator.userAgent; var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 return isiOS; } 获取APP版本号 getAppVersion: function(){ var that = this; if(HybridMethod.isApp()){ RainbowBridge.callMethod('JsInvokeAppScope','getAppVersion',{},that.getAppVersionCallBack); } else{ window.location.href= HybridParams.h5+'/landing/'; } }, //获取APP版本号回调 getAppVersionCallBack: function(result){ var that = this; // result = { version: '5.1.4' }; alert('版本号为'+result.version); } 下载app function weixin(){ var ua = navigator.userAgent.toLowerCase(); //navigator是HTML中的内置对象,包含浏览器的信息;userAgent是navigator的属性方法,可以返回由客户机发送服务器的头部的值,作用就是返回当前用户所使用的是什么浏览器,toLowerCase()是将转换为小写 return ua.match(/MicroMessenger/i)=="micromessenger"; }; function ios(){ return /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent); } function downloadway(){ var self = this; if(!weixin()){ $('.download-btn').attr("href","http://a.app.qq.com/o/simple.jsp?pkgname=com.yonglibao.android"); }else if(ios()){ $('.download-btn').attr('href','https://itunes.apple.com/us/app/yong-li-bao-tou-zi-li-cai/id874240991?l=zh&ls=1&mt=8'); $('.download-btn').click(function(){ ga('send', 'event', '下载', 'iOS', { 'metric3': 1 }); }); }else{ //android $.ajax({ type:"POST", dataType:"json", url:params.url + '/option/getConfig', success:function(response){ console.log(response) if(response.code == 1000){ $("#device-browser").html("Andriod"); $('.download-btn').attr("href","https://yonglibao-app.oss-cn-hangzhou.aliyuncs.com/yonglibao_" + response.data.updateVersion.android_channel_version + ".apk"); $(".download-btn").click(function(){ ga('send', 'event', '下载', '安卓', { 'metric3': 1 }); }); }else{ alert(response.msg); } }, error:function(response){ alert(response.msg); } }) } } 分享 不需要回调的右上角分享 share: function () { var self = this; if (HybridMethod.isApp()) { //右上角分享 RainbowBridge.callMethod('JsInvokeAppScope', 'setShare', { 'needShare': 1 // 1: 需要分享按钮(默认); 2: 不需要分享按钮 }); HybridMethod.showAndSetRightShareBtn({ title: '“辞旧辞旧迎新送金喜 新榜提名赢好礼', content: '年终盛宴,延续惊2018鸿运当投,品牌金饰天天送,上榜更有豪礼拿,苹果手机 、投资金条、2018现金大红包,就等你来!', imgUrl: "https://pc104.ylb.net//event/2017/newyear/images/share.jpg", needShare: 1, shareUrl: "http://pc104.ylb.net/event/2017/newyear/index.html", useDefault:0, //0:分享内容由前端自定义;1:分享内容由app抓取 stayWhich: 'wechat,wx,qq', //分享支持哪几种方式;朋友圈,微信,qq delayShare:1, //延迟分享,默认为0,即调用方法就分享,为1时即只传分享的参数,不立即分享,用户点击默认分享按钮时才分享 isNeedCreate: 1 }); } } 需要回调的右上角分享 share: function () { var self = this; if (HybridMethod.isApp()) { //右上角分享 RainbowBridge.callMethod('JsInvokeAppScope', 'setShare', { 'needShare': 1 // 1: 需要分享按钮(默认); 2: 不需要分享按钮 }); HybridMethod.showAndSetRightShareBtn({ title: '“辞旧辞旧迎新送金喜 新榜提名赢好礼', content: '年终盛宴,延续惊2018鸿运当投,品牌金饰天天送,上榜更有豪礼拿,苹果手机 、投资金条、2018现金大红包,就等你来!', imgUrl: "https://pc104.ylb.net//event/2017/newyear/images/share.jpg", needShare: 1, shareUrl: "http://pc104.ylb.net/event/2017/newyear/index.html", callback: self.shareCallBack }); } }, // 分享回调 shareCallBack: function (res) { //在分享后点击返回永利宝会给res传值1,所以必须在分享后点击返回永利宝才成功 if (res == 1 && !this.isAct1End) { var zhis = this; $.ajax({ url: HybridParams.url + '/activity/ShareOpportunity', type: 'POST', headers: { 'Authorization': HybridParams.token }, dataType: 'json', success: function (res) {}, error: function (e) {}, complete: function () {} //ajax请求完成后执行 }); } } 页面中按钮分享 RainbowBridge.callMethod('JsInvokeAppScope','share',{ title: 'demo1页面中的分享按钮', content: 'demo1页面中的分享按钮', useDefault:0, stayWhich: 'wechat,qq', imgUrl:HybridParams.pc + '/event/2017/sharedemo/images/demo1.png', shareUrl:HybridParams.pc + '/event/2017/sharedemo/demo1.html?a=1&b=2\#asd', }); 微信分享 我们项目中用到的微信分享方法的调用; var weixin = require("../modules/weixin.jdk.js");//调用微信jdk weixin.config({ title: "标题", desc: "内容", imgUrl: 图片地址, link: 链接地址' },false); 积分商城 积分记录明细页面:https://h5.yonglibao.com/integral/integralRecord.html 登录状态通过url传参 参数名 描述 类型 token 用户登录token String dbnewopen 新窗口打开 Number App-H5相关 名称 链接 银行限额 https://h5.yonglibao.com/limit/limit.html 平台数据 https://h5.yonglibao.com/platformdata/dataindex.html 通过获取url参数定义相关页面跳转参数 比如:http://www.yonglibao.com/?towhichpage = produky var id = that.GetQueryString('towhichpage')||'', native = '', topage = '', id = '', number = '', title = '' if(id == 'produky'){//跳产品页 native = true; topage = productDetail; id = id; number = 2; }else if(id == 'baidu'){//跳百度页面 native = false; topage = 'http://www.baidu.com'; title = '百度一下'; }else if(id == 'recharge'){//跳充值页 native = true; topage = 'recharge'; } 安卓端 if (native == 'false') { window.location.href = 'yonglibao://JsInvokeAppScope:10025/forward?{"type":"web","topage":"'+ topage +'","UIHeader":{"title":"'+title+'"}}"'; }else{ if(str != ""){ window.location.href ='yonglibao://JsInvokeAppScope:10025/forward?{"type":"native","topage": "'+topage+'","params":{"'+id+'" : "'+number+'"}}'; }else{ window.location.href = 'yonglibao://JsInvokeAppScope:10025/forward?{"type":"native","topage":"'+ topage +'"}'; } } ios终端 if (native == 'false') { window.location.href = 'yonglibao://JsInvokeAppScope?port=10025&forward={"type":"web","topage":"'+ topage +'","UIHeader":{"title":"百度一下"}}"'; }else{ if(str != ""){ window.location.href ='yonglibao://JsInvokeAppScope?port=10025&forward={"type":"native","topage": "'+topage+'","params":{"'+id+'" : "'+number+'"}}'; }else{ window.location.href = 'yonglibao://JsInvokeAppScope?port=10025&forward={"type":"native","topage":"'+ topage +'"}'; } } 感悟:闲谈莫论他人非,每个人都有自己的思维,只有合不合适,没有对不对,不要把自己的观点强加给别人

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

Android——进程通信/ AIDL/Message相关知识总结贴

Android 多进程通信 http://www.apkbus.com/android-83462-1-1.html Android 跨进程通信(一) http://www.apkbus.com/android-2393-1-1.html Android 跨进程通信(二) http://www.apkbus.com/android-2394-1-1.html Android 中 AIDL 实现(跨进程通信) http://www.apkbus.com/android-15211-1-1.html Android 进程间通信 http://www.apkbus.com/android-91355-1-1.html Android 系统进程间通信 Binder 机制 http://www.apkbus.com/android-112500-1-1.html 使用AIDL实现进程间的通信 http://www.apkbus.com/android-114839-1-1.html Android进程间通信(IPC)机制Binder简要介绍和学习计划 http://www.apkbus.com/android-99739-1-1.html 服务组件的进程间通信模型 http://www.apkbus.com/android-83850-1-1.html 使用AIDL实现进程间的通信之复杂类型传递 http://www.apkbus.com/android-114840-1-1.html 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client http://www.apkbus.com/android-99743-1-1.html android 组件间的交互和进程间 IPC 通信 http://www.apkbus.com/android-20707-1-1.html Android 之 Binder与进程间通信 http://www.apkbus.com/android-43314-1-1.html Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析 http://www.apkbus.com/android-99747-1-1.html Android进程间通信--消息机制及IPC机制实现 http://www.apkbus.com/android-3944-1-1.html 本文转自qianqianlianmeng博客园博客,原文链接:http://www.cnblogs.com/aimeng/p/3298609.html ,如需转载请自行联系原作者

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

【iOS知识学习】_iOS动态改变TableView Cell高度

在做tableView的时候,我们有时候须要依据cell的高度动态来调整。近期在网上看到一段代码不错。跟大家Share一下。 在 -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{ 类中获取cell的高度: CGSize boundSize = CGSizeMake(216, CGFLOAT_MAX); cell.textLabel.text = @"12345678900123456789"; cell.userInteractionEnabled = NO; cell.textLabel.numberOfLines = 0; CGSize requiredSize = [cell.textLabel.text sizeWithFont:[UIFont systemFontOfSize:13] constrainedToSize:boundSize lineBreakMode:UILineBreakModeWordWrap]; CGRect rect = cell.frame; rect.size.height = requiredSize.height+5; cell.frame = rect;这时候获取到了cell的高度,然后在 - (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath { 类中改变cell的高度: UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; NSLog(@"cell height %f",cell.frame.size.height); return cell.frame.size.height; 这样以来cell的高度就依据cell里label的内容自己主动改变啦。 其主要出发点就是我有一个label。然后我要把这个label展示出来。我依据字体的大小还有行数来获取一个高度,这样cell的高度就有啦。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5350356.html,如需转载请自行联系原作者

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

spark入门知识和job任务提交流程

spark是Apache开源社区的一个分布式计算引擎,基于内存计算,所以速度要快于hadoop. 下载 地址spark.apache.org 安装 复制一台单独的虚拟机,名c 修改其ip,192.168.56.200 修改其hostname为c,hostnamectl set-hostname c 修改/etc/hosts加入对本机的解析 重启网络服务 systemctl restart network 上传spark安装文件到root目录 解压spark到/usr/local下,将其名字修改为spark 本地运行模式 使用spark-submit提交job cd /usr/local/spark ./bin/spark-submit --class org.apache.spark.examples.SparkPi ./examples/jars/spark-examples_2.11-2.1.0.jar 10000 使用spark-shell进行交互式提交 创建root下的文本文件hello.txt ./bin/spark-shell 再次连接一个terminal,用jps观察进程,会看到spark-submit进程 sc sc.textFile("/root/hello.txt") val lineRDD = sc.textFile("/root/hello.txt") lineRDD.foreach(println) 观察网页端情况 val wordRDD = lineRDD.flatMap(line => line.split(" ")) wordRDD.collect val wordCountRDD = wordRDD.map(word => (word,1)) wordCountRDD.collect val resultRDD = wordCountRDD.reduceByKey((x,y)=>x+y) resultRDD.collect val orderedRDD = resultRDD.sortByKey(false) orderedRDD.collect orderedRDD.saveAsTextFile("/root/result") 观察结果 简便写法:sc.textFile("/root/hello.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortByKey().collect 使用local模式访问hdfs数据 start-dfs.sh spark-shell执行:sc.textFile("hdfs://192.168.56.100:9000/hello.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortByKey().collect (可以把ip换成master,修改/etc/hosts) sc.textFile("hdfs://192.168.56.100:9000/hello.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).sortByKey().saveAsTextFile("hdfs://192.168.56.100:9000/output1") spark standalone模式 在master和所有slave上解压spark 修改master上conf/slaves文件,加入slave 修改conf/spark-env.sh,export SPARK_MASTER_HOST=master 复制spark-env.sh到每一台slave cd /usr/local/spark ./sbin/start-all.sh 在c上执行:./bin/spark-shell --master spark://192.168.56.100:7077 (也可以使用配置文件) 观察http://master:8080 spark on yarn模式 本文转自 ChinaUnicom110 51CTO博客,原文链接:http://blog.51cto.com/xingyue2011/1968175

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

Linux 小知识翻译 - 「i386」是什么?

i386是指 *CPU* 的种类,也可以指 *CPU* 的架构(architecture)。 现在的 CPU 一般都用 「Core 2 Duo」或者「Athlon」,「Xeon」,「Opteron」之类的比较酷的名称来称呼。 Linux诞生的时候,CPU作为一个重要的组件,一般用型号来称呼它。 i386的i代表 Intel。 Intel公司最先生产的,从4004开始的CPU系列中,386(80386)是第一个32位的CPU。 Linux刚开始就是作为386架构上兼容POSIX的内核来开发的。之后CPU的性能虽然越高,但是一直都兼容「386」架构的, 所以Linux上运行的各种程序,只要在「386」上编译之后,就可以在大部分的PC上运行了。 但是,「386」诞生于1985年,现在来看已经很古老了。 现在很多Linux发行版都是是针对「Pentium」之后的CPU的。 名称中包含「i586」的软件包就是针对「Pentium」架构的CPU的。 Linux中用 uname 命令看到的「i686」则是指「Pentium Pro」之后的架构。 可能我们会认为在「i586」或者「i686」架构CPU的机器上,使用针对「i586」或者「i686」编译的二进制应用程序会比兼容「386」架构的二进制应用程序更好。 但在实际使用中,在「i586」或者「i686」架构CPU的机器上,使用「i586」或者「i686」下编译的二进制应用程序并没有发现大幅度的性能提升。 因此,倒不如为了通用性,只在安装Linux时,选择和CPU架构相同的内核,而在Linux内核上运行的各种程序就可以直接使用在「i386」架构下编译好的软件包就行, 现在很多Linux发行版中的软件包就是这么做的,能够正常运行是最重要的。 本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/p/3751387.html,如需转载请自行联系原作者

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Sublime Text

Sublime Text

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

用户登录
用户注册