首页 文章 精选 留言 我的

精选列表

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

地毯式诈骗最流行,2021年加密货币相关犯罪创新高

兼职招募 | 51CTO社区编辑加盟指南 WOT全球技术创新大会2022,门票6折抢购中!购票立减2320元!--> 近日,分析公司Chainalysis发布消息称,2021年与加密货币有关的犯罪达到了历史最高水平,非法地址获得高达140亿美元。收到的绝大部分资金是通过诈骗、盗窃和暗网市场获得的,而另一个不断增长的被盗资金来源则是赎金。 非法资金从2020年的78亿美元增长到2021年的140亿美元,而且同期的加密货币总交易量增长了567%。有了这些统计数据,Chainalysis表示,非法活动在加密货币交易量中的份额从未降低过。 据该分析公司称,流行的诈骗技术类型之一是地毯式诈骗(rug pulls)。它说这种类型的骗局是相当新的,涉及开发商建立一个看似合法的加密货币项目,拿着投资者的钱,然后干脆带着钱消失了。Thodex是去年的一个大型平台,其首席执行官在阻止资金提取后带着客户的钱消失了。 与银行业务不同的是,在银行业务中,客户享有大量的保护,免受诈骗,而持有加密货币的风险更大。首先,在大多数情况下,你必须持有私钥,如果你失去了它,你就会失去对加密货币的访问。其次,如果你真的被黑客攻击或诈骗,在大多数情况下,没有人可以取回你的资金。 鸿蒙官方战略合作共建――HarmonyOS技术社区 【责任编辑:赵宁宁 TEL:(010)68476606】

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

2021年加密货币相关犯罪创新高 规模达惊人140亿美元

兼职招募 | 51CTO社区编辑加盟指南 WOT全球技术创新大会2022,门票6折抢购中!购票立减2320元!--> 时间已正式迈入 2022 年,分析公司 Chainalysis 表示在过去一年中与加密货币有关的犯罪达到了历史最高水平,非法地址获得了惊人的 140 亿美元。收到的绝大部分资金是通过诈骗、盗窃和暗网市场获得的,而另一个不断增长的被盗资金来源则是赎金。 非法资金从 2020 年的 78 亿美元增长到 2021 年的 140 亿美元,而且同期的加密货币总交易量增长了 567%。有了这些统计数据,Chainalysis 表示,非法活动在加密货币交易量中的份额从未降低过。 据该分析公司称,流行的诈骗技术类型之一是地毯式诈骗(rug pulls)。它说这种类型的骗局是相当新的,涉及开发商建立一个看似合法的加密货币项目,拿着投资者的钱,然后干脆带着钱消失了。Thodex 是去年的一个大型平台,其首席执行官在阻止资金提取后带着客户的钱消失了。 与银行业务不同的是,在银行业务中,客户享有大量的保护,免受诈骗,而持有加密货币的风险更大。首先,在大多数情况下,你必须持有私钥,如果你失去了它,你就会失去对加密货币的访问。其次,如果你真的被黑客攻击或诈骗,在大多数情况下,没有人可以取回你的资金。

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

全国各地5G建设提速,相关产业迎最佳发展期

随着目前5G商用部署的持续推进,国内新一轮5G建设正进入加速期,产业链业绩也将迎来持续释放。 各地5G新基建规划陆续出炉 新型基础设施建设投资进入快速扩张期。近日,地方版新基建“十四五”规划陆续出台,聚焦发展数字经济,拓展5G应用,加快工业互联网、数据中心等加快建设。 多省份列出了到2025年的规划:贵州省明确,届时大数据产业集群规模达3000 亿元,同时全省建成5G基站13万个,每万人拥有5G基站数达到33个,5G网络实现城市和乡镇全面覆盖、重点应用场景深度覆盖;江西省表示,全省所有设区市建成千兆城市,5G基站超过10万个,实现城市和乡镇5G网络全面覆盖、重点应用场景深度覆盖;四川省表态,5G基站数量将达到25万个,数据中心机架规模达到50万架;江苏省提出,5G基站数将增长到25.5万个,省级工业互联网平台达到100个,大数据中心在用标准机架数达到70万架。 运营商开启大规模5G集采 作为5G建设的主力军,近期,运营商都在加速5G设备的集采。 光纤光缆是5G信息传输网络的重要基石。10月12日,中国电信发布了2021年室外光缆集采信息,预估采购规模为4300万芯公里;而在2020年,中国电信集采了7500万芯公里的室外光缆。10月11日,中国移动2021年—2022年普通光缆集采也尘埃落定,最终长飞、富通、亨通、中天、烽火等14家厂商入围;中国移动本次招标最高限价98.6亿元,成交均价超过60元/芯公里,而去年则约为40元/芯公里,涨幅超过50%,开始恢复到2019年的水平,“V”型反转趋势明显;今年中国移动的普缆集采呈现量价齐升的局面。 除了光纤光缆集采,此前运营商还进行了5G设备集采。6月25日,中国移动发布5G 700M无线网主设备集采招标公告,涉及48万个5G基站发标;8月1日,中国电信和中国联通2.1G 5G无线主设备集采落地,集采规模共约24.2万个,释放了国内5G建设再次加速的信号。 5G产业迎来全新发展机遇 5G时代正在加速到来。根据工信部最新公布的数据来看,截至9月底,我国的5G基站建站数量已经达到了115.9万个,到今年底全国有望建成约140万个5G基站,将覆盖所有县级以上城市和发达乡镇。另外,在5G建设上,我国一贯坚持适度超前的原则,持续推进,并通过5G虚拟专网,混合虚拟专网等方式,建设重点行业5G应用。 中国电子信息产业发展研究院规划所工业投资研究室副主任樊蒙表示,5G、工业互联网、人工智能等新型基础设施建设及其带动的5G、大数据等行业的快速发展,将产生长期性、大规模的投资需求,极大拉动有效投资新增量。 东吴证券表示,伴随5G建设稳步推进、投入持续加大,主要设备商将继续受益;5G持续渗透下,运营商C端业务企稳回升,B端业务收入快速起量,运营商板块投资机会凸显。 5G网络的逐步完善,催生5G终端和新应用新场景,超高清视频、云游戏、AR/VR、物联网、车联网、工业互联网等将迎来快速爆发期。通信设备、物联网、云计算硬件、IDC等细分领域被业内人士普遍看好,5G产业迎来全新的发展机遇。

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

go-carbon 1.4.1 版本发布,新增农历相关方法和韩语翻译文件

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm。 如果您觉得不错,请给个 star 吧 github:github.com/golang-module/carbon gitee:gitee.com/go-package/carbon 更新日志 新增韩语翻译文件kr.json 新增Lunar().Year()方法获取农历年份 新增Lunar().Month()方法获取农历月份 新增Lunar().LeapMonth()方法获取农历闰月月份 新增Lunar().Day()方法获取农历日期 新增Lunar().ToChineseYearString()方法获取农历年字符串 新增Lunar().ToChineseMonthString()方法获取农历月字符串 新增Lunar().ToChineseDayString()方法获取农历日字符串 新增Lunar().ToGanZhiYearString()方法获取干支纪年字符串 新增Lunar().ToGanZhiMonthString()方法获取干支纪月字符串 新增Lunar().ToGanZhiDayString()方法获取干支纪日字符串 新增Lunar().IsLeapYear()方法判断是否是闰年 新增Lunar().IsLeapMonth()方法判断是否是闰月 修复Tomorrow()、Yesterday()、AddMonths()方法缺少时区的bug database.go文件拆分成database.go和json.go两个文件

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

使用C#完成常用神经网络,并理解相关每个步骤和计算

WeaveNetC#编写的用于神经网络的计算图框架,点这里了解。 这是一个由c#编写的神经网络,可以看到内部任何细节的实现,可以对学习神经网络,以及理解其中的计算方式。此架构不包含自动 Backward 向后传播,为了展示更多的计算细节。 源码包含cnn,bp,fcn,lstm,convlstm,GRU等示例内容,包含示例所用的数据内容。 LOSS支持:MESLOSS,cross-entropy 激活函数支持:ReLu,Tanh,Sigmod,Softmax 数据类型支持: float[][] 与 float[][][,],二维与四维 池化支持:平均池化Averpooling,最大池化Maxpooling 其他支持:ConvLayer,Conv2DLayer,MulLayer,ConvTranspose2DLayer 每个支持类都包含了向前传播Forward,与Backward向后传播的方法 以下几个小例子 CNN的训练实现 public class CNN { Conv2DLayer cl; Conv2DLayer cl2; Conv2DLayer cl3; //TanhLayer sl = new TanhLayer(); //TanhLayer sl2 = new TanhLayer(); //TanhLayer sl3 = new TanhLayer(); Maxpooling ap1; Maxpooling ap2; SigmodLayer sl = new SigmodLayer(); SigmodLayer sl2 = new SigmodLayer(); //SigmodLayer sl3 = new SigmodLayer(); Softmax sl3 = new Softmax(); //Averpooling ap2; //Averpooling ap1; public CNN() { cl = new Conv2DLayer(1, 0, 5, 1, 6); //ap1 = new Averpooling(2); ap1 = new Maxpooling(2); cl2 = new Conv2DLayer(1, 0, 5, 6, 12); // ap2 = new Averpooling(2); ap2 = new Maxpooling(2); cl3 = new Conv2DLayer(in_channels: 12, out_channels: 10, _inSize: 4,_full:true ); } public dynamic Forward(float[][][,] matrices) { dynamic data = cl.Forward(matrices); data = sl.Forward(data); data = ap1.Forward(data); data = cl2.Forward(data); data = sl2.Forward(data); data = ap2.Forward(data); data = cl3.Forward(data); data = sl3.Forward(data); return data; } dynamic cl3grid; dynamic cl2grid; dynamic clgrid; public void backward(dynamic grid) { dynamic grid2 = sl3.Backward(grid); cl3grid = cl3.backweight(grid2);//获取cl3的权重 //-------------------------------- grid2 = cl3.Backward(grid2); grid2 =ap2.Backward(grid2); grid2 = sl2.Backward(grid2); cl2grid = cl2.backweight(grid2);//获取cl2的权重 //------------------------------------- grid2 = cl2.Backward(grid2); grid2 = ap1.Backward(grid2); grid2 = sl.Backward(grid2); clgrid = cl.backweight(grid2);//获取cl的权重 } float lr = 1.0f; public void update() { // int channl = cl3grid.grid.Length; cl3.wdata = Matrix.MatrixSub(cl3.wdata, Matrix.multiply(cl3grid.grid, lr)); cl3.basicData = Matrix.MatrixSub(cl3.basicData, Matrix.multiply(cl3grid.basic, lr)); cl2.weights = Matrix.MatrixSub(cl2.weights, Matrix.multiply(cl2grid.grid, lr)); cl2.basicData = Matrix.MatrixSub(cl2.basicData, Matrix.multiply(cl2grid.basic, lr)); cl.weights = Matrix.MatrixSub(cl.weights, Matrix.multiply(clgrid.grid, lr)); cl.basicData = Matrix.MatrixSub(cl.basicData, Matrix.multiply(clgrid.basic, lr)); } } LSTM 实现例子 public class LSTMCELL { ConvLayer convLayerih; ConvLayer convLayerhh; int input_size; int hidden_size; public LSTMCELL(int _input_size, int _hidden_size) { input_size = _input_size; hidden_size = _hidden_size; convLayerih = new ConvLayer(input_size, hidden_size * 4 ); //convLayerih.weights = JsonConvert.DeserializeObject<float[][]>(util.getstr("D:\\lstmihw.json")); //convLayerih.basicData = JsonConvert.DeserializeObject<float[]>(util.getstr("D:\\lstmihb.json")); convLayerhh = new ConvLayer( hidden_size, hidden_size * 4); //convLayerhh.weights = JsonConvert.DeserializeObject<float[][]>(util.getstr("D:\\lstmhhw.json")); //convLayerhh.basicData = JsonConvert.DeserializeObject<float[]>(util.getstr("D:\\lstmhhb.json")); } SigmodLayer input_gate_s = new SigmodLayer(); SigmodLayer forget_gate_s = new SigmodLayer(); SigmodLayer output_gate_s = new SigmodLayer(); TanhLayer cell_memory_tl = new TanhLayer(); TanhLayer cell_tl = new TanhLayer(); MulLayer c_next_mul = new MulLayer(); MulLayer mulin_gate_mul = new MulLayer(); MulLayer h_next_mul = new MulLayer(); public dynamic Forward(float[][] input, float[][] h_prev, float[][] c_prev) { //a_vector = np.dot(x, self.weight_ih.T) + np.dot(h_prev, self.weight_hh.T) //a_vector += self.bias_ih + self.bias_hh Xinput = input; xh_prev = h_prev; xc_prev = c_prev; var ih = convLayerih.Forward(input); var hh = convLayerhh.Forward(h_prev); var a_vector = Matrix.MatrixAdd(ih, hh); List<float[][]> liast = Matrix.chunk(a_vector,4,1); var a_i = liast[0]; var a_f = liast[1]; var a_c = liast[2]; var a_o = liast[3]; input_gate = input_gate_s.Forward(a_i); forget_gate = forget_gate_s.Forward(a_f); cell_memory = cell_memory_tl.Forward(a_c); output_gate = output_gate_s.Forward(a_o); var c_next_temp = c_next_mul.Forward(forget_gate, c_prev); var mulin_gate = mulin_gate_mul.Forward(input_gate, cell_memory); var c_next = Matrix.MatrixAdd(c_next_temp, mulin_gate); var h_next = h_next_mul.Forward(output_gate, cell_tl.Forward(c_next)); // dh_prev = Matrix.zroe(h_next.Length, h_next[0].Length); return (h_next,c_next);//上次的状态,上次的记忆 } dynamic Xinput, xh_prev, xc_prev, input_gate, forget_gate, cell_memory, output_gate; // dynamic dh_prev; dynamic ihweight, hhweight; public dynamic backward(dynamic grid) { var dh = h_next_mul.BackwardY(grid); var d_tanh_c = cell_tl.Backward(dh); //var dc_prev=c_next_mul.backwardY(d_tanh_c); var d_input_gate = mulin_gate_mul.Backward(d_tanh_c); var d_forget_gate=c_next_mul.Backward(d_tanh_c); var d_cell_memory = mulin_gate_mul.BackwardY(d_tanh_c); var d_output_gate = h_next_mul.Backward(grid);// d_tanh_c var d_ai = input_gate_s.Backward(d_input_gate); var d_af = forget_gate_s.Backward(d_forget_gate); var d_ao = output_gate_s.Backward(d_output_gate); var d_ac = cell_memory_tl.Backward(d_cell_memory); var temp=Matrix.cat(d_ai, d_af, 1); var temp2 = Matrix.cat( d_ac, d_ao, 1); var da= Matrix.cat(temp, temp2, 1); // var daT=Matrix.T(da); ihweight = convLayerih.backweight(da); hhweight = convLayerhh.backweight(da); return convLayerih.backward(da); } float lr = 0.1f; public void update() { convLayerih.weights = Matrix.MatrixSub(convLayerih.weights, Matrix.multiply(ihweight.grid, lr)); convLayerih.basicData = Matrix.MatrixSub(convLayerih.basicData, Matrix.multiply(ihweight.basic, lr)); convLayerhh.weights = Matrix.MatrixSub(convLayerhh.weights, Matrix.multiply(hhweight.grid, lr)); convLayerhh.basicData = Matrix.MatrixSub(convLayerhh.basicData, Matrix.multiply(hhweight.basic, lr)); } } FCN实现例子 public class FCN { Conv2DLayer cl; Conv2DLayer cl2; Conv2DLayer cl3; ConvTranspose2DLayer Tcl1; Maxpooling mpl = new Maxpooling(); Maxpooling mpl2 = new Maxpooling(); SigmodLayer sl = new SigmodLayer(); SigmodLayer sl2 = new SigmodLayer(); SigmodLayer sl3 = new SigmodLayer(); Softmax sl4 = new Softmax(); public FCN(int weightssize) { cl = new Conv2DLayer(1, weightssize / 2, weightssize, 1, 6, bias: false); cl2 = new Conv2DLayer(1, weightssize / 2, weightssize, 6, 12, bias: false); cl3 = new Conv2DLayer(1, weightssize / 2, weightssize, 12, 24, bias: false); Tcl1 = new ConvTranspose2DLayer(2, 1, weightssize + 1, 24, 1, bias: false); } public dynamic Forward(dynamic data) { dynamic data2= cl.Forward(data); data2=sl.Forward(data2); data2=mpl.Forward(data2); data2 = cl2.Forward(data2); data2 = sl2.Forward(data2); data2 = mpl2.Forward(data2); data2 = cl3.Forward(data2); data2 = sl3.Forward(data2); data2=Tcl1.Forward(data2); data2 = sl4.Forward(data2); return data2; } public dynamic backward(dynamic grid) { var grid2 = sl4.Backward(grid); grid2= Tcl1.Backward(grid2); grid2 = sl3.Backward(grid2); grid2 = cl3.Backward(grid2); grid2 = mpl2.Backward(grid2); grid2 = sl2.Backward(grid2); grid2 = cl2.Backward(grid2); grid2 = mpl.Backward(grid2); grid2 = sl.Backward(grid2); grid2 = cl.Backward(grid2); return grid2; } }

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

作为程序员的你,一年看几本技术相关的书

阅读本文大概需要 3.9 分钟。 这几天想起之前的一次面试,对方问我一年看几本书。 我一年看的书大概在3到10本之间,不过绝大部分都跟计算机技术无关(小说偏多)。很不好意思地回答说:“跟技术有关的,很少”。 之所以不怎么看这方面的专业书,有两个主要的原因:一是因为当时还没有这个学习意识,工作之余不是小说就是游戏,要不就是刷刷抖音;二是因为技术书都比较枯燥,简单浏览下,都不是很感兴趣。 从去年开始,我自己不断发生一些好的改变(经历了某件事),可能在那么一瞬间长大了,也变成熟了。突然间不在喜欢玩游戏,不在沉迷小说(偶尔还是会刷下抖音,玩玩游戏),这些再也对我没什么吸引力了。得益于对这些东西的不感冒,我拥有了大量可支配的时间,奢侈的将它们全部用在了学习上。 学习中的一项规划就是看书,买了很多书籍,计算机类的,技术类的,心理类的,管理类的等等。书作为一种信息的容器,虽然讲心理学的书、讲社会学的书跟讲编程的书、讲计算机技术的书很不一样,但都有着不少的共同点。 写这篇文章,希望能跟大家分享一些阅读过程中的思考和感想。 1、烂书很多 很多程序员买了书不看,不是因为懒,而是因为有些书太烂。 好书有各种各样的好,而烂书的特征却几乎都是相同的,它们的缺点基本上都是一模一样。 阅读体验差。不知道是不是因为想省钱,书的质地跟盗版书有的一拼。书页泛黄,字体难看,排版糟糕;作者的表达能力低下,连简洁和准确地讲述一个核心概念都做不到,让人很难有继续看下去的心情。 逻辑性弱。一本好的书,应该做到章节与章节之间有连贯性,使得阅读坡度平缓,信息密度才会高。但是很多烂书是东讲一点,西谈一些,整本书看下来不知所云。 思想层次低。讲解各种著名开源框架、开源组件的书非常多,但是其中很多书都只是在讲怎么用,简直就像精简版的说明文档翻译。其实,把“为什么要用”和“这样用有什么好处”这两个问题讲清楚,更有价值。 2、好书不少 在所有书当中,好书所占的相对比例肯定不高。但是在绝对数量上,值得我们买回来看、花时间学习的好书却不少。 如何判断一本书是不是好书呢?基本上只要花最多半个小时翻一遍,就能确定答案,准确率随着你阅读数量的增加而升高。 阅读体验好。基本上看完前言和第一章就能知道好不好,就像我们用一个手机上的软件,只需要很短的时间就知道用户体验是不是及格。 逻辑性强。看完整本书,如果章节与章节之间联系紧密,读完前一个章节有助于读后一个章节,基本上可以判断这是一本有条理的书。 思想层次高。我们看的很多书都是讲某一项或某一类具体的技术,但是如果它们在讲解技术细节之余还能拔高到更高的层次,提取技术之间的共性,谈论技术的思想,则有助于我们更深入理解这些技术,而且在学习其他的新技术时也更为容易。 3、看书的基本方法 在最近看技术书的时间里,我经常会跟之前看非专业书时的阅读经历做对比。下面谈谈我自己认为在阅读技术书籍时可以借鉴的几个基本方法。 一、浏览。现在我们都基本是在网上买书,所以可以先看看别人的评论和网站给出的目录、书摘。在一轮筛选完之后,把买回来的书都快速看一遍。看第一遍的时候要快,不要看得太仔细。如果是烂书,立刻扔在一边或者申请退货。如果是好书,你就能有一个大概的印象,有助于进行下一个环节。 二、细读。在把书浏览过一遍之后,我们可以开始认真地读,阅读速度也要相应地降下来。在阅读的过程中,我会习惯于把认为重要的句子和内容划线,也会把暂时看不明白的部分做上记号。这不仅可以强迫自己保证阅读的投入程度,还对进一步的学习有帮助。 三、研究。能经过筛选进入到这个环节的书已经相对不多了,基本上能确定这是一本对你来说非常重要非常有用的书。我读书一般最多读三遍,在读第三遍的时候花时间是最多的,而且远比前两遍要多得多。这个时候要做笔记,把你认为重要的内容都摘抄下来,或者裁切下来。虽然现在笔记类应用很多,例如印象笔记、One Note和Bear等,但是我还是比较推荐大家考虑使用纸质笔记本来做读书笔记,记忆效果特别显著。 结束语 程序员很多都有看技术博客的习惯,而且也有很多优秀的博客达人为我们提供优质的内容。但是,书籍作为另一种信息容器,跟博客这种形式的信息容器是有本质区别的,而且能发挥的作用也不一样。 下面推荐几本我认为值得读的好书: 《未来简史》 尤瓦尔·赫拉利 《暗时间》 刘未鹏 《深入理解Java虚拟机》 周志明 《架构探险-从零开始写Java Web框架》 黄勇 《架构探险-轻量级微服务架构》(上下册) 黄勇 《MyBatis从入门到精通》 刘增辉 前两本不是专业书,但是我还是推荐程序员们都看一看,非常值得一读。剩下的都跟Java有关,因为我本身是Java开发方向的。 书单纯属抛砖引玉,希望你们可以在评论区说一说自己认为好的技术书有哪些。 ·END· 路虽远,行则必至 往期精彩回顾 程序员接私活的7大平台利器 面试字节跳动,我被怼了.... 为啥程序员下班后只关显示器从不关电脑? 送给程序员们的经典电子书大礼包 面试时如何优雅地自我介绍? 支撑百万并发的数据库架构如何设计? 为何IntelliJ IDEA比Eclipse更好 巧用这19条MySQL优化,效率至少提高3倍 IDEA一定要懂的32条快捷键 世上最污技术解读,我竟然秒懂了 一千行MySQL详细学习笔记 七点建议助您写出优雅的Java代码

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

Mybatis Plus 2 升到 Mybatis Plus 3 时,oracle 自增序列的相关问题

一、Mybatis Plus 2,oracle 自增序列配置 1. config.yml 配置文件 #mybaits-plus配置,修改主键类型,mapper.xml、type 别名等 mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml global-config: #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID"; id-type: 1 # Sequence序列接口实现类配置 key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator 2. Mybatis

资源下载

更多资源
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等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册