首页 文章 精选 留言 我的

精选列表

搜索[权限提升],共10000篇文章
优秀的个人博客,低调大师

Nginx 学习笔记(六)引入线程池 性能提升9倍

原文地址:https://www.cnblogs.com/shitoufengkuang/p/4910333.html 一、前言 1、Nignx版本:1.7.11 以上 2、NGINX采用了异步、事件驱动的方法来处理连接。这种处理方式无需(像使用传统架构的服务器一样)为每个请求创建额外的专用进程或者线程,而是在一个工作进程中处理多个连接和请求。 3、NGINX工作在非阻塞的socket模式下,并使用了epoll和kqueue这样有效的方法。 4、NGINX可以非常好地处理百万级规模的并发请求。 5、阻塞操作可以毁掉NGINX的性能,我们必须不惜一切代价避免使用阻塞。 6、即使在当前官方的NGINX代码中,依然无法在全部场景中避免使用阻塞,NGINX1.7.11中实现的线程池机制解决了这个问题 二、问题 1、通常情况下,NGINX是一个事件处理器,即一个接收来自内核的所有连接事件的信息,然后向操作系统发出做什么指令的控制器。 2、所谓“阻塞操作”是指任何导致事件处理循环显著停止一段时间的操作 3、操作可以由于各种原因成为阻塞操作 三、线程池 1、对NGINX而言,线程池执行的就是配货服务的功能。它由一个任务队列和一组处理这个队列的线程组成。 2、当工作进程需要执行一个潜在的长操作时,工作进程不再自己执行这个操作,而是将任务放到线程池队列中,任何空闲的线程都可以从队列中获取并执行这个任务。 3、磁盘的读取速度不能比磁盘产生数据的速度快。 4、“从磁盘读取”这个操作通常是阻塞操作最常见的示例,但是实际上,NGINX中实现的线程池可用于处理任何不适合在主循环中执行的任务。 5、线程池中执行的两个基本操作是大多数操作系统中的read()系统调用和Linux中的sendfile()。

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

提升Android下内存的使用意识和排查能力

内存问题一直是大型App的开发人员比较头痛的问题,特别是像手淘这种超级的App,App中到处都是带有图片和视频的界面,而且这些功能都是由不同的团队甚至不同的事业部开发的,要整体上去管控和排查内存的问题变得相当的复杂。之前,我们多个线上版本都存在着严重的Activity等内存泄漏和不合理内存使用。这不是偶然,一个很重要的原因就是我们很多的开发测试人员侧重业务开发,忽略内存和性能,而且没有站在全局性的角度去考虑资源的使用。认为我自己的模块多缓存一些就会加快速度,以空间换时间看似正确,但是在手淘这样的超级App中是不可取的,需要严格限制,否则不要说里面几百个模块,有几十个模块这样来做,其结果都会是灾难性的,不但没有加快速度,反而会拖慢速度以及带来很多稳定性问题。 经过一年多的更新,现在的Android Studio所带的工具已经相当的成熟。以前我们还停留在使用MAT来分析内存,但是现在Android Studio的内存分析工具已经相当的强大,已经完全可以抛开MAT来实现更为直观的内存检测。我想,作为一个大型App的开发人员和测试人员,掌握这些技能都是必不可少的,也是提高整个App质量的关键所在。 在使用工具分析内存之前,我们需要了解一下内存回收上的一些策略,否则很多时候排查到的可能都不是真正的问题。 1、没有强引用不代表这块内存就会马上回收 我们知道,Java的内存回收如果有强引用存在,那么这个对象的内存不会回收。那么这个对象的引用如果不存在,是不是这块内存就会回收呢?答案是否定的,VM有自己的回收策略,不会因为一个对象的引用为空了就立马对它进行回收。也就是说,回收策略需要达到一定的触发阈值。我们可以看一个Demo,写如下的分配对象的方法: void onButtonClick(){ for (int i = 0; i < 1000; i++) { View view = new ImageView(this); } } 在内存充足的情况下,我们点击按钮4次,执行了4遍该函数,这个时候可以看到堆内存呈现了4次增长。如下图所示: 静置在那半个小时,内存仍然会维持现状,VM并不会来执行实际的GC。我们可以Dump内存看看内存中的对象: 我们可以看到,4000个ImageView对象仍然毫发无损的在内存中残留,系统没有回收其内存。不管是Dalvik还是ART环境,包括最新的Android N,都可能出现这样的情况, 具体是否每次都保持(等量)增长等还要看手机内存剩余情况和手机的GC策略 。 所以,我们在检测内存占用或者内存泄漏之前,一定要执行工具自带的GC触发功能,否则结果会不准确。明明没有泄漏或者没有占用,而Dump出来的堆中提示占用很大或者泄漏。 通过MemoryMonitor工具,我们可以看到其引用的情况。点击其中一个ImageView,我们看下它的引用情况: 可以看到,其引用路径是被一个FinalizerReference所持有。该对象已经标记为红色,表明我们自己的代码中已经没有其他引用持有该对象,状态是等待被回收。 通过手动触发GC,我们可以来主动回收这块内存,点击如下图所示的按钮,触发GC。 当然,这里还有一个问题存在,因为刚才创建的属于Finalizer对象,该对象前面的文章已经分析过,需要至少两次GC才能真正回收其内存。所以,第一次触发GC的时候,我们可以看一下内存的变化。 第一次触发GC后,内存只是部分的下降,这个时候Finalize链表中的对象被回收,但是ImageView还没有回收(在不同Rom和Android 版本下可能会存在少许差异,在Dalvik下的差异会更大一些)。我们可以看一下堆内存: 该对象的引用链路全部标记为红色,已经没有强引用指向该对象,刚才的FinalizerReference已经执行了清理。但是第一次GC只是执行了Finalizer清理,而没有真正的回收这部分对象。所以还需要再一次的触发GC,再次执行GC后,我们可以看到堆内存下降,这些对象被回收了。 我们可以通过Dump堆内存来验证是否已经回收,如下图所示,对内存中已经没有了刚才的ImageView对象,确实已经被回收了。 通过前面的分析我们可以知道,并不是引用释放了,内存就会回收。在实际使用手机淘宝的过程中,我们也可以观察堆内存的变化,在退出一个界面的时候很可能是不会有GC的,堆内存不会变化。如果这个时候用MAT工具去Dump内存,那结果很多是不够正确的。而如果后续再做其他操作,引发GC后,才会使得结果更加准确,当然我们可以手动的去触发GC。 2、调用GC时的策略变化 在前面的文章中已经提到过,代码调用GC,只是告诉VM需要GC,但是是否真正的去执行GC还是要看VM的配置和是否达到阈值。前面也提到,在执行手动GC的时候,Dalvik和ART下会有比较明显的差异。Android 5.0开始增加了更多的GC方式,到了6.0,7.0在GC方面有了更多的优化。特别是在执行Finalizer对象方面,Android 5.0开始回收就没有那么快,单次执行GC,并不会导致失去引用的Finalizer对象进行完全回收,如果要更好的回收Finalizer对象,需要执行System.runFinalization()方法来强制回收Finalizer对象。 我们将测试代码后面加上主动调用GC的代码,如下: void onButtonClick(){ for (int i = 0; i < 1000; i++) { View view = new ImageView(this); } System.gc(); } 在不同的Android版本上看下执行效果,点击按钮执行多次。在Android 4.4.4版本的设备上,内存基本已经回收,如果将1000次修改为10次,偶尔可以看到有ImageView已经没有引用存在,但是仍然没有回收。如下图所示: 从这里可以看出来,在该版本下,大部分的对象在没有强引用后,调用System.gc()就会被回收。我们再看下ART上的情况,在ART下,却发生了不一致的表现。在调用后没有进行GC。查看堆内存,我们也可以看到,4000个ImageView仍然存在,并未执行GC。 看来在ART后,这部分的GC策略做了调整,System.gc()没有内存回收。我们可以看下源码,在Android 4.4.4下的源码: /** * Indicates to the VM that it would be a good time to run the * garbage collector. Note that this is a hint only. There is no guarantee * that the garbage collector will actually be run. */ public static void gc() { Runtime.getRuntime().gc(); } 我们可以看到,在调用gc函数后,直接调用了运行时的gc。再来看下5.0上的代码: /** * Indicates to the VM that it would be a good time to run the * garbage collector. Note that this is a hint only. There is no guarantee * that the garbage collector will actually be run. */ public static void gc() { boolean shouldRunGC; synchronized(lock) { shouldRunGC = justRanFinalization; if (shouldRunGC) { justRanFinalization = false; } else { runGC = true; } } if (shouldRunGC) { Runtime.getRuntime().gc(); } } /** * Whether or not we need to do a GC before running the finalizers. */ private static boolean runGC; /** * If we just ran finalization, we might want to do a GC to free the finalized objects. * This lets us do gc/runFinlization/gc sequences but prevents back to back System.gc(). */ private static boolean justRanFinalization; /** * Provides a hint to the VM that it would be useful to attempt * to perform any outstanding object finalization. */ public static void runFinalization() { boolean shouldRunGC; synchronized(lock) { shouldRunGC = runGC; runGC = false; } if (shouldRunGC) { Runtime.getRuntime().gc(); } Runtime.getRuntime().runFinalization(); synchronized(lock) { justRanFinalization = true; } } 从源码我们可以发现,System.gc()函数,已经有了变化,从5.0开始,多了一些判断条件。是否执行gc,是依赖于justRanFinalization变量,而变量justRanFinalization在runFinalization后才会变为true。也就是说,直接调用System.gc()方法并没有调用Runtime.getRuntime().gc(),只是做了一个标记将runGC变量设置为true。 在runFinalization函数中,如果标记了runGC的,会先执行一次gc,然后清理Finalizer对象,并标记为依据清理过了Finalizer对象。这样在下次gc调用的时候,就会真正执行一次gc,以回收Finalizer对象。 在Android ART的设备上,我们将调用gc的方式做下变更: void onButtonClick(){ for (int i = 0; i < 2000; i++) { View view = new ImageView(this); } Runtime.getRuntime().gc(); } 这里直接调用了Runtime.getRuntime().gc()。这个时候内存回收确实会有变化。但是Finalizer对象仍然可能存在,在Android 5.0的时候会回收一部分,但是从6.0开始,单次调用gc,Finalizer对象却不一定回收。如下图所示,虽然所有引用链路已经不复存在,但是内存仍然没有回收: 那么执行2次gc是否就都能把内存回收了呢?我们修改下代码: void onButtonClick(){ for (int i = 0; i < 2000; i++) { View view = new ImageView(this); } Runtime.getRuntime().gc(); Runtime.getRuntime().gc(); } 这里连续2次调用了gc,按理是可以回收Finalizer对象的,但是由于两次调用gc的间隔太短,而Finalizer对象是由专门的线程执行回收的,所以也不一定能完全回收。这个和线程的调度情况有关系。例如执行上面代码可能出现的结果是部分回收: 如果想要全部回收,可以在中间停顿一些间隔,或者增加System.runFinalization()方法的调用。这样就能将当前可以回收的内存基本都回收了。我们在Android Studio的触发GC的按钮,也是通过BinderInternal$GcWatcher等代码来执行内存回收的。 当然,在实际的业务代码中,不要主动调用gc,这样可能会导致额外的内存回收开销,在检测代码中,如果需要检测内存,最好按照gc,runFinalization,gc的顺序去回收内存后,再做内存的Dump分析。 3、使用Android Studio的Memory分析内存占用 MemoryMonitor工具比起MAT一个很大的优势就是可以非常简单的查看内存占用,而且可以迅速找到自己的模块所占用的堆内存,所以希望开发和测试人员都能够迁移到Android Studio所带的工具上来。如何查看内存占用?真的是非常的简单,而且可以找到很细小的内存占用情况。 例如,这里自定义一个类,然后创建该类,代码如下: public class MyThread extends Thread{ @Override public void run() { View view = new View(MainActivity.this); view = null; } } void onButtonClick(){ new MyThread().start(); } 这里只是创建了一个该对象,但是也很容易可以跟踪到该对象的内存情况。通过MemoryMonitor的【Dump Java Heap】按钮可以把当前堆内存显示出来,如下图所示: 这里是默认查看方式,我们可以切换到以包名的形式查看。这样就可以很容易的找到我们自己的代码了。如下所示: 切换查看方式后,我们可以很容易的就找到自己所写的代码内存占用情况。这里可以看到实例的个数,占用内存的大小等情况。 例如在打开手机淘宝,简单操作一会后再来观察内存占用情况。按照包名查看后,我们很容易就可以看到整个堆内存的占用情况,如下图所示: 通过上图我们很容易看到,在com.taobao包名下占用了近240多M的内存。继续往下看,聚划算模块,图片库模块占了大头。点击ju模块,展开后,又可以看到该包名下的内存占用: 通过上图我们可以清晰的看到,在ju包名下的内存分布情况。 所以,在内存占用的检查上,Android Studio已经给我们提供了强大的工具,各个开发和测试人员已经可以很简单的查看到自己开发的模块占据的内存大小,然后对内存的使用做一些改进等措施。这里也可以通过右侧的Instance窗口检查各个实例的引用以及排查不合理的内存强制占用。 4、排查内存泄漏 Memory Dump下来后,我们可以检查Java堆的Activity内存泄漏和重复的String。很多人还习惯于MAT分析工具,其实Memory Monitor已经包含了这个功能,而且使用非常简单。 首先dump内存,如前面分析的那样,在右侧可以看到【Analyzer Tasks】按钮。 然后,我们点击该按钮,就可以看到分析泄漏的工具。 这里可以只勾选 检测泄漏Activity选项,然后选择执行。这样就可以看到泄漏的Activity了。 通过引用指向,我们可以比较容易的判断出不该持有的强引用关系,而且该工具从上到下的排序,已经做了初步的判断。 当然在检测泄漏和占用之前,需要点击2次GC的按钮,这样结果才会相对准确。 对于Android Studio提供的内存分析工具,使用起来非常简单,会比Mat工具要快捷,排查问题也更加容易。所以Android的开发和测试人员,应该尽可能的都迁移到该工具上来,并能够熟练的掌握内存分析工具,这样才能让自己开发的模块质量更加的优秀。 以上主要是针对Android Studio 2中的使用方式,在今年的Android Studio 3 Preview版本中,内存这块的分析工具更加强大,可以在面板上直接看到更细粒度的内存占用,不仅仅是Java的对内存了。 对于需要更细粒度和更全面的分析一些内存的细节,本文所涉及的内存知识还是不够的,还需要了解Linux下的内存机制以及Android下的一些内存机制,例如按页分配,共享内存,GPU内存等等。

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

戴尔收购StatSoft 以提升大数据解决方案业务

ZDNet至顶网服务器频道 03月25日 新闻消息:3月25日消息,据国外媒体报道,戴尔已经收购预测分析软件公司StatSoft以增强其日益增长的软件产品组合。StatSoft销售分析、数据库管理和集成软件。这个收购交易的金融条款没有披露。 StatSoft的产品提供数据挖掘和分析等能力,如通过社交网络发现趋势。这些能力旨在帮助企业发展和更好地利用跨服务器和云资源的结构化和非结构化数据。StatSoft的主要产品是Statistica。该产品为数据分析和预测是统计和算法。 戴尔周一在声明中称,StatSoft软件将与戴尔x86服务器打包销售。 戴尔主要是一家硬件公司。但是,由于x86服务器和PC的利润率下降,戴尔在过期的三年里已经把重点转向软件。戴尔收购了大量的软件公司,包括Quest Software、Wyse、Boomi、AppAssure、SonicWall、Clerity和Make。 戴尔负责信息管理的总经理马特·沃尔肯(Matt Wolken)在博客中谈到这个收购交易时称,戴尔已经销售Kitenga分析软件。这是戴尔收购的Quest Software公司的一部分。StatSoft的产品能够与Kitenga产品一起使用,并且增加对数据分析的自然语言处理等能力。 沃尔肯表示,戴尔的服务器还将包含第三方软件。StatSoft工具将与SAP的Hana以及甲骨文和微软的数据库软件一起使用。 StatSoft的客户包括百思可乐、联想和斯伦贝谢公司(Schlumberger)。 原文发布时间为:2014年03月25日 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

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

阿里宣布Atlas开源,提升大规模团队移动开发效率

继 Weex 之后,阿里在移动技术领域又有开源大动作。 3月13日,手机淘宝安卓客户端容器化框架 Atlas 正式宣布开源。Atlas 由阿里巴巴移动团队自研,以容器化思路解决大规模团队协作问题,实现并行开发、快速迭代和动态部署,适用于 Android 4.x 以上系统版本的大小型 App 开发。 Atlas 适用于大规模团队的协同开发。通过提供组件化、动态性、解耦化的支持,Atlas 能够实现每个业务在开发阶段独立编译、独立调试、独立运行,最后再以一个组件的形式集成到客户端中,每个业务之间并行开发互不影响。此外,还具备客户端动态发版和快速修复的能力。 据悉,目前手机淘宝20个协作团队开发的60+业务组件,数百万行代码都运行在 Atlas 上。快速迭代让应用真正实现了随时更新,有效降低了版本频繁发布给用户带来的困扰。 与业内的一些组件化框架方案对比,Atlas 的优势是遵循安卓系统的设计规范,保持 Android 开发人员的开发习惯,通过反射和轻量的 hook 方案来实现模块的组件化,从而减少适配成本,并将大量的工作放到了编译期,提高稳定性。 谈到为何要开源如此有价值的移动开发工具,阿里巴巴无线技术资深技术专家玄黎表示,“Atlas 是为了解决手淘大规模团队协作,快速交付而生,并在过去几年的手淘发展中得到验证。随着移动端的快速发展,越来越多团队会碰到手淘之前的问题,我们很愿意把我们的方案共享给业界,共同完善在 Android 端上快速迭代交付的能力。” 同时,阿里还表示,开源只是第一步,后续会一直不断完善 Atlas,让 Atlas 为整个开源业界做共享。 本文作者:佚名 来源:51CTO

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

喜迎双十一 西数助你全面提升存储解决方案

一年一度的“双十一”又来啦,剁手党乃们的购物车准备好了么?钱包准备好了么?作为全球领先的数字家庭与个人存储解决方案提供商西部数据此次也将加入双十一促销大军,为消费者带来超大福利。本次活动中,西部数据携旗下外置系列My Passport和My Cloud全系列,以及内置的黑盘和红盘都参与此次双十一网络大促,最大降幅将达到10%。你做好准备升级你的存储解决方案来吗? WD My Passport系列 还在使用沉闷无趣的外置存储产品么。WD新一代便携智能存储设备My Cloud Passport Ultra系列,拥有全新的设计和配色,打破沉闷技术宅的外壳,让你转身升级为色彩潮人。该移动硬盘更搭配了2TB超大容量和便捷的备份软件,帮您更轻松安全的保留每一个重要时刻。更低的价格,更多彩的颜色,还等什么,快来将移动硬盘也变成你生活的配饰吧。 WD智能云存储系列 随着“云”的概念不断的深入人心,越来越多的用户选择了共有云存储来保存信息。然而越来越多的网络泄密事件发生,你确定还是愿意将你的珍贵资料存在公有云上么?WD推出的个人云存储产品My Cloud系列,为你打造家庭私有云,更配有简单易懂的操作系统,联通家里的各类移动终端,让家人、朋友更轻松安全的上传、访问和分享每一个精彩瞬间。My Cloud系列更为中小企业主打造了企业版My Cloud,轻松搭建企业小型数据库,且能更有效的通过备份、加密等手段保护数据安全。趁着双十一“剁手节”,赶紧将你的公有云升级为私有云,更轻松、安全的享受生活和工作中的每一刻吧! 不管是生活中还是工作中,西数智能云存储产品始终贯彻智能分享、数据安全的理念。旗下的My Cloud系列,打通生活和工作的界限,让你随时随地时刻与云相连,安全的上传、访问和共享每一个精彩时刻。自动备份,更是为数据安全添加保障。 WD内置硬盘 WD内置硬盘存储解决方案,一直是装机爱好者的首选。最为游戏狂热粉,相信专为游戏而生的WD 黑盘一定让你垂涎已久。最新的西数黑盘拥有更大的容量和更强劲的性能,带给你不同凡响的游戏体验。此次双十一,WD首次针对黑盘产品进行了降价促销,更低的价格,更强劲的性能,让你更畅快的漫游在游戏世界中。对于中小企业主和专业级人士,屡获大奖的WD红盘,一直是建立自建云的必备产品。通过WD红盘创建的NAS,不仅无月租,还更加能保障数据的安全,并且能够通过计算机随时随地访问数据或进行系统备份。超大容量和最新的技术丝毫没有因为此次降价促销而打折扣,依然是你保存珍贵数据,建立家庭或者小企业NAS的首选。 本次双十一天猫大促西部数据还提供了更多力度惊人的促销产品和丰富的现金抵用券,更多双十一剁手攻略请登陆西部数据天猫旗舰店:http://wdc.tmall.com/或登录西部数据双十一活动页面:https://wdc.tmall.com/campaign-3731-2.htm准备好给你家的存储生活升级了吗? 关于西部数据 西部数据集团旗下子公司西部数据(WD)是存储行业长期的创新者和领导者。作为存储技术领域的先锋,该公司为客户生产可靠的高性能传统硬盘及固态硬盘。其提供的硬盘产品被各大OEM及集成商应用于桌面及移动计算、企业级计算系统、嵌入式系统及消费电子应用。同时WD也为客户提供自主品牌的存储产品。WD领先的存储设备与系统、网络产品、媒体播放器及软件解决方案使全球用户可以便捷地使用、存储、保护、共享及体验其保存在各种设备上的内容。WD成立于1970年,总部位于加利福尼亚尔湾市。请访问公司官方网站www.wd.com获取更多详细信息。 总部位于加利福尼亚尔湾市的西部数据集团(纳斯达克股票代码:WDC)是一家为客户创建、管理、体验及存储数据信息提供产品与服务的全球供应商。西部数据集团旗下子品牌WD、HGST及G-Technology从事设计并生产存储设备、网络设备及家庭娱乐产品。查询各种财务和投资信息,请浏览该公司网站的投资者部分:www.westerndigital.com 作者:佚名 来源:51CTO

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

iOS10新特性提升安全 连接WiFi弹出提醒

WiFi现在已经成为人们严重依赖的一项技术,除了在家使用WiFi进行休闲娱乐外,我们在商场、咖啡厅、景区等公共场合也经常使用商家提供的免费WiFi进行上网。而且WiFi还成为了不少商家的营销工具,通过免费连接WiFi的方式,向顾客推销自己。但是,这些公共场合的WiFi暗藏风险,许多不法分子通过设置钓鱼WiFi来窃取我们手机中的隐私信息和个人财产。 公共场合连接WiFi需谨慎(图片来源:互联网) 对网络安全非常上心的人,会自己判断周围WiFi热点的安全性。但是大部分的用户都会在不经意间,接入不安全的钓鱼热点,或者在看到名称相同的WiFi热点时非常纠结,严重影响了人们使用WiFi上网的体验。对于WiFi热点的接入问题,苹果在将于秋季发布的iOS 10系统中,加入了全新的WiFi热点安全检测功能。当用户连接到不安全的WiFi时,系统将会自动弹出提醒信息。 WiFi连接提醒界面 最新的WiFi检测功能已经出现在iOS 10的测试版本中,加入这一功能后,在iOS的WiFi设置界面会出现提醒信息。如“开放网络存在安全风险,您的个人隐私可能会被窃取”,同时在界面中也会提醒用户查看WiFi热点是否开启了AES加密。不过,该功能仅仅可以对用户产生信息警示作用,并不会干预用户的操作。但至少系统会对用户进行提醒,惊醒用户。 免费WiFi暗藏风险 最后我们建议大家,在公共场合,我们应该尽量避免使用免费的WiFi网络。如果不得已需要使用时,必须要和商家核对好无线网络的详细信息,以免接入伪造热点。在不使用无线网络时,可以选择关闭移动端的无线网络开关,避免其自动连接无线网络。4G时代,运营商的网络速度也很快,千万别因为心疼流量而造成更大的损失! ====================================分割线================================ 本文转自d1net(转载)

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

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部分的功能。

用户登录
用户注册