首页 文章 精选 留言 我的

精选列表

搜索[库存盘点],共4441篇文章
优秀的个人博客,低调大师

盘点2019年,国内电邮安全事件

在过去的一年里,国内电子邮件安全事件频频发生,包括服务器入侵、人为失误、系统漏洞、钓鱼攻击、虽原因各有不同,但动辄就是泄露上亿数据的重大安全事故,损失百万甚至达到不可估计的程度。 在此,我们一起回顾2019年关于电邮的那些安全事件。 7.73亿邮箱登录信息遭泄露 2019年1月17日,网络安全研究员 Troy Hunt披露称,7.7亿多份邮件地址及明文密码在黑客论坛上,这些邮箱密码完全被暴露。 上海交大8.4TB电子邮件元数据泄露 2019年6月,上海交通大学一个数据库因未正确配置公开访问权限,而导致泄漏了 8.4TB 的电子邮件元数据。 1691台服务器被入侵,超过3300万个邮箱密码遭到泄露 2019年7月9日,腾讯威胁情报中心发文称,有1691台服务器被攻克,已验证的邮箱帐号超过3300万个,包括Yahoo、Gmail、Google、AOL、hotmail等在内的多个知名邮箱服务商均在被攻击之列,最终可能会有上亿个邮箱帐号被验证登录。 国内两家企业因邮箱泄露损失百万 2019年6月-7月,南京、宁波两家外贸企业邮箱先后遭到入侵,被骗货款近百万,并且这两家受害者使用的是同一家企业级付费邮箱。 Sodinokibi勒索病毒邮件在国内大量传播 2019年10月,腾讯安全御见威胁情报中心检测到大量借助钓鱼邮件传播的sodinokibi勒索病毒攻击中韩两国企业。数据显示,在一天之内攻击者使用伪造的近1000个邮箱地址针对国内目标发送超过5万封钓鱼邮件,此次邮件传播的Sodinokibi勒索病毒在国内的感染最为严重地区为广东、山东、江苏、上海、北京等地。 Emotet银行木马邮件再次攻击国内企业 2019年11月,国内多家企业受到Emotet银行木马邮件攻击。此次攻击主要是利用大量群发钓鱼邮件,其邮件内容伪装成各种类型的商务往来信息,包括:发票交易、收据、会议邀请等。 “祝福”钓鱼邮件来袭 2019年11月,不明身份的恶意组织使用鱼叉邮件对国内企业进行攻击,该攻击组织可能是具有政府背景的APT攻击组织。该组织利用节假日前夕开展携带恶意文件的钓鱼攻击,诱饵内容多以祝福问候为主,包括新年祝福、元宵祝福、国庆祝福,圣诞节祝福等。 27亿邮箱数据泄露,波及国内多家邮件厂商 2019年12月,网络安全研究人员发现了一起重大邮件数据泄露事件,该泄露事件包含超过 27 亿个电邮地址,其中有 10 亿个的密码都是简单的明文,并且大多数被盗的邮件域名都来自中国。泄露事件波及到国内多家邮件提供商,如腾讯、新浪、搜狐和网易,发现了包括 qq.com,139.com,126.com,gfan.com 和 game.sohu.com 等域名,此次泄露数据量极为巨大,这些泄露的部分数据很可能会严重威胁用户的资产安全。 当今,钓鱼邮件、黑客攻击、服务器泄露等攻击层出不穷,在所有数据泄露事件中有70%发生在电子邮件中,邮件安全成为了每个企业机构必须重视的问题。 在中国,大约有50%的企业都会遭受邮箱攻击,同时94%的企业、机构已经意识到了“邮件危机”,但在防止邮件数据泄露方面仍然没有有效的防护措施。 安全防御需个人与企业共同努力 关于如何防范网络钓鱼、欺诈和其他诈骗,进行了归纳整理,帮助企业在提升邮件安全的认知度和重视度的同时,积极采取多种应对举措,有效降低邮件威胁造成的损失。 首先,提升个人防范能力,并定期进行网络钓鱼练习。 员工是抵御网络钓鱼的最强防线,如果员工能够学会直接识别网络钓鱼攻击,便可以于第一线阻止终端入侵。要提高员工防御入侵的意识,建议每月进行这些练习企业网络钓鱼防治练习,让员工亲自针对可能遇到的情况预先练习,加强员工面临网络钓鱼攻击活动时的应变能力。 第二,建议使用多因素身份验证、注意登陆请求页面的合法性,并确保软件处于最新状态等方式。 当企业邮箱账户凭证被窃取,多因素身份验证可有效阻止攻击者获得对该账户的访问权限。举例来说,有人设法获得了您的登录凭证并试图登录,通过多因素身份验证,系统会自动向拥有该凭据的个人发送一条消息,以确认他们是否刚刚尝试了登录。在这种情况下,该账户的拥有者便能够成功地阻止任何非本人的登录尝试。与此同时,像是维持软件处于最新状态、避免向陌生人汇款、注意登录请求、以及确保邮件内容读起来合理等,也是容易落实的有效防范策略。 第三,部署邮件证书,为保护客户的利益,维护客户数据安全,GDCA邮件证书对电子邮件进行数字签名并加密传输,一方面可以保证邮件发送者身份真实性,另一方面保障了邮件传输过程中不被他人阅读及篡改,并由邮件接收者进行验证,确保电子邮件内容的完整性。 在如今社会的各个行业电子邮件的应用都非常广泛,且在我们的工作生活中扮演着重要的角色,目前大多数用户都是采用明文方式进行邮件的发送与存储,但在日益复杂的互联网世界,这种方式很容易导致邮件中的商业机密及个人隐私被黑客或者木马程序所窥视以及修改,影响到用户自身的利益。

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

Spring Boot "Redis" 缓存使用姿势盘点

1. Redis 简介Redis 是目前业界使用最广泛的内存数据存储。相比 Memcached,Redis 支持更丰富的数据结构,例如 hashes, lists, sets 等,同时支持数据持久化。除此之外,Redis 还提供一些类数据库的特性,比如事务,HA,主从库。可以说 Redis 兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。本文介绍 Redis 在 Spring Boot 中两个典型的应用场景。 2. Lettuce 简介如果在 Java 应用中使用过 Redis 缓存,那么对 Jedis 一定不陌生, Lettuce 和 Jedis 一样,都是连接 Redis Server 的客户端程序。Jedis 在实现上是直连 Redis Server,多线程环境下非线程安全,除非使用连接池,为每个 Jedis 实例增加物理连接。 Lettuce 基于 Netty 的连接实例(StatefulRedisConnection),可以在多个线程间并发访问,且线程安全,满足多线程环境下的并发访问,同时它是可伸缩的设计,一个连接实例不够的情况也可以按需增加连接实例。 3. Spring Boot 应用中使用方式 直接通过 RedisTemplate 来使用 使用 Spring Cache 集成 Redis 通过 Spring Session 做 Session 共享 工程实战4.1 工程依赖 pom.xml 如下: 代码清单:spring-boot-redis/pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> spring-boot-starter-data-redis :在 Spring Boot 2.x 后底层不再是使用 Jedis ,而是换成了 Lettuce ,如图: commons-pool2 : 用作 redis 连接池,如不引入启动会报错。 spring-session-data-redis : Spring Session 引入,用作共享 Session 。 4.2 配置文件 application.yml代码清单:spring-boot-redis/src/main/resources/application.yml server: port: 8080 servlet: session: timeout: 30m spring: application: name: spring-boot-redis cache: # 使用了Spring Cache后,能指定spring.cache.type就手动指定一下,虽然它会自动去适配已有Cache的依赖,但先后顺序会对Redis使用有影响(JCache -> EhCache -> Redis -> Guava) type: REDIS redis: host: 192.168.0.128 port: 6379 password: 123456 # 连接超时时间(ms) timeout: 10000 # Redis默认情况下有16个分片,这里配置具体使用的分片,默认是0 database: 0 lettuce: pool: # 连接池最大连接数(使用负值表示没有限制) 默认 8 max-active: 100 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1 max-wait: -1 # 连接池中的最大空闲连接 默认 8 max-idle: 8 # 连接池中的最小空闲连接 默认 0 min-idle: 0 这里的配置不多解释,需要解释的已经标注注释。 4.3 RedisTemplate 使用方式4.3.1 创建实体类 User.java代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/model/User.java @Data @AllArgsConstructor @NoArgsConstructor public class User implements Serializable { private static final long serialVersionUID = 662692455422902539L; private Long id; private String name; private int age; } 4.3.2 自定义 RedisTemplate默认情况下的模板只能支持 RedisTemplate ,也就是只能存入字符串,这在开发中是不友好的,所以自定义模板是很有必要的,当自定义了模板又想使用 String 存储这时候就可以使用 StringRedisTemplate 的方式,它们并不冲突,添加配置类 RedisCacheConfig.java ,代码如下: 代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/config/RedisCacheConfig.java @Configuration @AutoConfigureAfter(RedisAutoConfiguration.class) public class RedisCacheConfig { @Bean public RedisTemplate<String, Serializable> redisCacheTemplate(LettuceConnectionFactory redisConnectionFactory) { RedisTemplate<String, Serializable> template = new RedisTemplate<>(); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setConnectionFactory(redisConnectionFactory); return template; } } 4.3.3 测试接口 UserController.java代码清单: @RestController @Slf4j public class UserController { @Autowired private StringRedisTemplate stringRedisTemplate; @Autowired RedisTemplate<String, Serializable> redisCacheTemplate; @Autowired UserService userService; @GetMapping("/test") public void test() { stringRedisTemplate.opsForValue().set("geekdigging", "https://www.geekdigging.com/"); log.info("当前获取对象:{}",stringRedisTemplate.opsForValue().get("geekdigging")); redisCacheTemplate.opsForValue().set("geekdigging.com", new User(1L, "geekdigging", 18)); User user = (User) redisCacheTemplate.opsForValue().get("geekdigging.com"); log.info("当前获取对象:{}", user); } } 4.3.4 测试启动服务,打开浏览器访问链接:http://localhost:8080/test ,查看控制台日志打印,如下: 2019-09-24 23:49:30.191 INFO 19108 --- [nio-8080-exec-1] c.s.s.controller.UserController : 当前获取对象:https://www.geekdigging.com/ 2019-09-24 23:49:30.243 INFO 19108 --- [nio-8080-exec-1] c.s.s.controller.UserController : 当前获取对象:User(id=1, name=geekdigging, age=18) 测试成功。 4.4 使用 Spring Cache 集成 Redis4.4.1 Spring Cache 特点Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 Redis),而是一个对缓存使用的抽象,通过在既有代码中添加少量它定义的各种 annotation,即能够达到缓存方法的返回对象的效果。 Spring Cache 具备相当的好的灵活性,不仅能够使用 SpEL(Spring Expression Language)来定义缓存的 key 和各种 condition,还提供开箱即用的缓存临时存储方案,也支持和主流的专业缓存例如 EHCache、Redis、Guava 的集成。 基于 annotation 即可使得现有代码支持缓存开箱即用 Out-Of-The-Box,不用安装和部署额外第三方组件即可使用缓存支持 Spring Express Language,能使用对象的任何属性或者方法来定义缓存的 key 和 condition支持 AspectJ,并通过其实现任何方法的缓存支持支持自定义 key 和自定义缓存管理者,具有相当的灵活性和扩展性4.4.2 定义接口 UserService.java代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/service/UserService.java public interface UserService { User save(User user); User get(Long id); void delete(Long id); } 4.4.3 接口实现 UserServiceImpl.java代码清单:spring-boot-`jsredis/src/main/java/com/springboot/springbootredis/service/impl/UserServiceImpl.java @Service@Slf4jpublic class UserServiceImpl implements UserService { private static final Map<Long, User> USER_MAP = new HashMap<>(); static { USER_MAP.put(1L, new User(1L, "geekdigging.com", 18)); USER_MAP.put(2L, new User(2L, "geekdigging.com", 19)); USER_MAP.put(3L, new User(3L, "geekdigging.com", 20)); } @CachePut(value = "user", key = "#user.id") @Override public User save(User user) { USER_MAP.put(user.getId(), user); log.info("进入 save 方法,当前存储对象:{}", user); return user; } @Cacheable(value = "user", key = "#id") @Override public User get(Long id) { log.info("进入 get 方法,当前获取对象:{}", USER_MAP.get(id)); return USER_MAP.get(id); } @CacheEvict(value = "user", key = "#id") @Override public void delete(Long id) { USER_MAP.remove(id); log.info("进入 delete 方法,删除成功"); } } 为了方便演示数据库操作,直接定义了一个 Map<Long, User> USER_MAP ,这里的核心就是三个注解 @Cacheable 、 @CachePut 、 @CacheEvict 。 **4.4.3.1 @Cacheable** **根据方法的请求参数对其结果进行缓存** - key: 缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写,如果不指定,则缺省按照方法的所有参数进行组合(如:@Cacheable(value="user",key="#userName")) - value: 缓存的名称,必须指定至少一个(如:@Cacheable(value="user") 或者 @Cacheable(value={"user1","use2"}) ) - condition: 缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false,只有为 true 才进行缓存(如:@Cacheable(value = "user", key = "#id",condition = "#id < 10")) **4.4.3.2 @CachePut** 根据方法的请求参数对其结果进行缓存,和 @Cacheable 不同的是,它每次都会触发真实方法的调用 - key: 同上 - value: 同上 - condition: 同上 **4.4.3.3 @CachEvict** 根据条件对缓存进行清空 - key: 同上 - value: 同上 - condition: 同上 - allEntries: 是否清空所有缓存内容,缺省为 false,如果指定为 true,则方法调用后将立即清空所有缓存(如:@CacheEvict(value = "user", key = "#id", allEntries = true) ) - beforeInvocation: 是否在方法执行前就清空,缺省为 false,如果指定为 true,则在方法还没有执行的时候就清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存(如: @CacheEvict(value = "user", key = "#id", beforeInvocation = true) ) **4.4.4 启动主类** 代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/SpringBootRedisApplication.java @SpringBootApplication@EnableCachingpublic class SpringBootRedisApplication { public static void main(String[] args) { SpringApplication.run(SpringBootRedisApplication.class, args); } } > 这里需增加注解 @EnableCaching 开启 Spring Session。 **4.4.5 增加测试接口** 代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/controller/UserController.java @GetMapping("/test1")public void test1() { User user = userService.save(new User(4L, "geekdigging.com", 35)); log.info("当前 save 对象:{}", user); user = userService.get(1L); log.info("当前 get 对象:{}", user); userService.delete(5L); } **4.4.6 测试** 启动服务,打开浏览器访问链接:http://localhost:8080/test ,刷新页面,控制台日志打印如下: 2019-09-25 00:07:21.887 INFO 21484 --- [nio-8080-exec-1] c.s.s.service.impl.UserServiceImpl : 进入 save 方法,当前存储对象:User(id=4, name=geekdigging.com, age=35)2019-09-25 00:07:21.897 INFO 21484 --- [nio-8080-exec-1] c.s.s.controller.UserController : 当前 save 对象:User(id=4, name=geekdigging.com, age=35)2019-09-25 00:07:21.899 INFO 21484 --- [nio-8080-exec-1] c.s.s.service.impl.UserServiceImpl : 进入 get 方法,当前获取对象:User(id=1, name=geekdigging.com, age=18)2019-09-25 00:07:21.900 INFO 21484 --- [nio-8080-exec-1] c.s.s.controller.UserController : 当前 get 对象:User(id=1, name=geekdigging.com, age=18)2019-09-25 00:07:21.901 INFO 21484 --- [nio-8080-exec-1] c.s.s.service.impl.UserServiceImpl : 进入 delete 方法,删除成功 再次刷新页面,查看控制台日志: 2019-09-25 00:08:54.076 INFO 21484 --- [nio-8080-exec-7] c.s.s.service.impl.UserServiceImpl : 进入 save 方法,当前存储对象:User(id=4, name=geekdigging.com, age=35)2019-09-25 00:08:54.077 INFO 21484 --- [nio-8080-exec-7] c.s.s.controller.UserController : 当前 save 对象:User(id=4, name=geekdigging.com, age=35)2019-09-25 00:08:54.079 INFO 21484 --- [nio-8080-exec-7] c.s.s.controller.UserController : 当前 get 对象:User(id=1, name=geekdigging.com, age=18)2019-09-25 00:08:54.079 INFO 21484 --- [nio-8080-exec-7] c.s.s.service.impl.UserServiceImpl : 进入 delete 方法,删除成功 结果和我们期望的一致,可以看到增删改查中,查询是没有日志输出的,因为它直接从缓存中获取的数据,而添加、修改、删除都是会进入 UserServiceImpl 的方法内执行具体的业务代码。 **4.5 Session 共享** **4.5.1 Spring Session 简介** Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的问题。 **4.5.2 启动主类 SpringBootRedisApplication.java** 代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/SpringBootRedisApplication.java @SpringBootApplication@EnableCaching@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)public class SpringBootRedisApplication { public static void main(String[] args) { SpringApplication.run(SpringBootRedisApplication.class, args); } } > maxInactiveIntervalInSeconds: 设置 Session 失效时间,使用 Spring Session 之后,原 Spring Boot 配置文件 application.yml 中的 server.session.timeout 属性不再生效。 **4.5.3 增加测试接口** 代码清单:spring-boot-redis/src/main/java/com/springboot/springbootredis/controller/UserController.java @GetMapping("/getBlogUrl")public String getSessionId(HttpServletRequest request) { String url = (String) request.getSession().getAttribute("url"); if (StringUtils.isEmpty(url)) { request.getSession().setAttribute("url", "https://www.geekdigging.com/"); } log.info("获取session内容为: {}", request.getSession().getAttribute("url")); return request.getRequestedSessionId(); } **4.5.4 测试** 启动服务,打开浏览器访问链接:http://localhost:8080/getBlogUrl ,查看 Redis 当前存储内容,如下图: ![tian](https://yqfile.alicdn.com/90dde0afea4d922cd0831019a68a24409623787e.png) 其中 1569339180000 为失效时间,意思是这个时间后 Session 失效, b2522824-1094-478e-a435-554a551bc8bb 为 SessionId 。 **4.5.6 如何在多台服务中共享 Session** 按照上面的步骤在另一个项目中再次配置一次,启动后自动就进行了 Session 共享。胜利! 5. 参考 http://emacoo.cn/backend/spring-redis/ https://blog.battcn.com/2018/05/11/springboot/v2-nosql-redis/

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

盘点2018云栖大会的黑科技

9月19日至22日,2018杭州·云栖大会将在杭州云栖小镇举办。每一届云栖大会都是黑科技的竞技场,今年又会有哪些黑科技亮相? 阿里黑科技 科技感的第一步从入场开始。基于钉钉的智能会务,与会者在前期注册环节就扫过脸,在现场可以凭着自己这张脸“秒过”闸机。结合先进的人脸识别算法,系统将自动完成人员的身份核对校验,而这套系统背后的数据库可支持超过10万组人脸数据,在规模、多场景运用方面都是业内领先。 在集中展示阿里巴巴最新科技成果的C馆,左侧的沙盘恐怕会是今年最抢眼的设计了。这块沙盘由4万块乐高积木搭建而成,结合中央控制系统及AR等工具,你只需要用ipad瞄准相应的场景点击,就可以看到阿里巴巴在城市治理、农业、工业、服务业等领域的技术驱动能力展示。 比如,在屏幕上点击沙盘中的金融街二号楼,大楼就会“起火”。阿里云ET城市大脑就会

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

赛门铁克盘点近期勒索软件犯罪档案

从2015年年中说起,5月,赛门铁克安全专家发现,一种被植入了很多《绝命毒师》元素的新型恶意软件,另外,犯罪分子还在发给受害人的邮件中使用了"theonewhoknocks"的名字,这同样也取自《绝命毒师》的经典场景。澳大利亚的用户成为了该恶意软件的首批受害者。获悉,该恶意软件后缀名为Trojan.Cryptolocker.S,它只对Windows设备发起攻击,受感染用户必向攻击者支付450澳元(折合人民币约为2207元)才能解密所有加密文件。 赛门铁克指出,首先,该恶意软件会利用一种叫做高级加密标准(AES)的密匙加密文件,之后利用RSA公共密匙进一步加密,这时候,如果受害人想要解密文件就必须要从攻击者那里获得私人密匙才行。赛门铁克提醒用户,如果不想感染“绝命毒师”恶意软件或其他恶意软件的话,用户一定不要从网络上下载任何未经认证或可疑的文件。 并且,赛门铁克认为,随着技术的发展,网络罪犯将进一步扩展勒索软件可攻击的范围,将延伸至例如娱乐、暖通空调、安全等领域的家庭技术。此外,交通工具也受到了影响,智能汽车也被发现容易受到黑客的攻击。 赛门铁克建议用户应采取基本的预防措施,以降低恶意软件在可穿戴设备上的感染风险。首先要避免从未知或不信任的来源安装应用,并在安装应用时查看许可,确保该许可适用于所安装的应用类型。同时在移动设备上使用合适的安全解决方案,并确保软件为最新版本,以及持续备份重要数据。 说归今年,在移动设备安全方面,赛门铁克发现了已知勒索软件家族Android.Lockdroid.E的若干变种,这些变种利用 Andriod集成开发环境 (AIDE)可在Android设备上直接开发而成。目前,Lockdroid.E的变种已经开始针对中文用户,并且正在通过垃圾邮件或设备上已安装的浏览器劫持程序进行传播。Lockdroid.E与典型勒索软件的作用方式如出一辙——锁定受害者屏幕,一旦移动设备上安装了一种变种,恶意软件便会在感染设备的用户界面顶部创建一种特定窗口,并会告之用户,若想解锁设备,需要通过即时通讯工具QQ联系攻击者,并要求受害者支付一定赎金来解锁其设备。 赛门铁克建议用户及时更新移动设备的软件和操作系统,切勿安装来自未知或不信任来源的应用,同时应密切注意手机应用的请求权限,并经常备份您的设备,为保安全最好安装一款移动安全应用来保护移动设备与数据,例如 Norton Mobile Security。 另,在上个月,网络安全业界发现首个以Mac OS X操作系统为攻击目标的恶意软件KeRanger。据赛门铁克调查了解,KeRanger (OSX.Keranger)通过已经遭受感染的Transmission BitTorrent客户端的安装程序快速进行传播,并表示,在2016年3月4日和5日下载Transmission的Mac OS X用户有可能面临该恶意软件的威胁。 关于此勒索软件,赛门铁克提示用户定期备份电脑中的文件,如果用户的电脑确实被勒索软件感染,在移除恶意软件后,文件便可恢复。及时更新升级操作系统和其他软件,使用最新版本的安全软件,以避免遭受新型恶意软件的攻击,还要删除收到的所有可疑邮件,尤其是包含链接或附件的邮件。 面对勒索方式仍以绑架用户数据为主的勒索软件,普通用户必须提高安全防范意识,及时更近系统和软件并备份,更好的是下载专门的防御产品来专门保护自己不受勒索软件的危害。而对于企业用户来说,针对勒索软件类的安全威胁防护可从预警、防御、保护、处置和审计几个步骤来进行有效防御和处理,企业只有安装侧重于保护数据安全的工具,或部署针对企业安全特点的安全产品,才能尽量避免给勒索软件以可乘之机。 原文发布时间为:2016-04-21 本文作者:杨昀煦 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

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

盘点物联网数据云存储方式

近年来,全球各地无论是政府组织还是知名企业,频繁被爆出大规模数据泄露事件,尤以信息化程度发达的国家更为严重。据业内分析机构预测,到2017年底,62%的企业都将在公共云上部署应用和服务,其中绝大多数集中在数据存储和防护上。就物联网数据存储来说,公共云是最简便的选择,适合大多数公司进行备份和数据保护。 目前主流的包括私有云、混合云、云代管、原生云这么几种,下面我们就来分析这几种方式的优缺点,看看该如何保护你的数据安全。 私有云 私有云是为一个客户单独使用而构建的,因而提供对数据、安全性和服务质量的最有效控制。将数据防护托管在本地部署的纯私有云上,相当于运营第二个数据中心,专门为了备份业务数据而设。 优点:你的地盘你做主,可以随意控制、配置、升级。 缺点:首先,硬件限制会影响存储空间和计算可用性。其次,就像把所有的鸡蛋放在一个篮子里,数据如果都放在一个地方,一旦断电或硬件故障就会造成数据丢失! 分析:如果你的数据非常敏感且重要,那么私有云将是一个极具竞争力的选项。混合云 混合云将公有云和私有云进行混合和匹配,以获得最佳的效果,达到了既省钱又安全的目的。 优点:备份数据存储在远程位置,可以避免本地硬件故障而导致数据丢失的问题,并且用户企业无需进行远程硬件的维护和升级,只需管理数据中心内的设备即可。 缺点:缺少数据的冗余,并且由于所有往来于云端的数据都要经过该设备,而每个位置都需要一台设备,在这种模型下,云的存储效率低下,云存储成本上升。 分析:混合云融合了公有云和私有云,是近年来云计算的主要模式和发展方向。云托管 云托管指用户拥有自己的服务器等IT设备,并把它放置在云数据中心的高标准机房环境中 ,由客户自己/其他的签约人进行维护。 优点:比传统的服务器托管要便宜,当甩手掌柜后,用户比较轻松,该模式还将确保断电和其他灾难不会影响业务的责任加在了托管厂商身上。 缺点:托管解决方案的架构将无法利用公共云环境的可扩展性和灵活性。另外,云托管在构建和管理上较贵,除了存储开销还有其他云提供商费用要支付。而且,托管服务通常都是单租户而非多租户模式,意味着运营厂商必须针对每个实例分别更新或修复,这就意味着更高出错概率和更大回滚复杂性。除此之外,你还得考虑到数据安全和服务连接权限的问题。 分析:适合企事业单位、公司及网站用户。原生云 真正的原生云SaaS数据防护解决方案,是从零开始设计构造的,利用公有云的种种优势,比如全局重复数据删除、自动分层和动态分配存储、运行时间保证和灵活计算可用性。 优点:原生云可根据业务需求而改变,无需额外的资源来维持合规,也不用经常性维护来对抗安全威胁,因为这些维护上的负担都落到了SaaS提供商身上。对用户来说,最吸引的地方是可预测的订阅费用结构,可以需要什么买什么。 缺点:除非一开始某家创业公司的云战略全面正确,否则迁移到原生云模式的工作并不如想象中简单,你可能会遇到原生云应用与旧有设备的整合问题。分析:对于许多小型企业而言,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。企业在数据安全防护方面(例如安全设备管理和监控,事件的响应和缓解,数据容灾备份等)的持续投入,已经引起全球数据安全服务市场总体份额的显著增长。作为物联网解决方案提供商航大物联(www.leadtorch.com)认为随着数据量的快速增加,祈祷数据不会“生病”显然是一个不太现实的事情,数据安全是一个长期工作。

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

盘点本周存储新闻:你家“中招”没

下面是本周的存储新闻集锦,Cisco Live和Microsoft Partners' Conference上产生了一些公布,其他则是独立的消息: • Acronis推出了一个Backup Cloud Extension for Microsoft Azure and Azure Stack。微软Cloud Services Providers (CSPs)可以跨物理环境和虚拟环境配置和管理一系列混合云备份服务。 • 管理服务提供商ATOS正在于Syncplicity合作,提供安全的、策略为渠道的文件同步与共享服务。西门子利用该合作为150多个国家的用户、全球4座数据中心的3PB数据提供服务。 • CommVault已经与思科合作打造了一个参考架构,使用CommVault软件和UCS服务器,提供一个易于购买的、经过验证的数据保护和恢复选择。CommVault还将支持思科的HyperFlex产品。 • Dropbox的企业客户数已经突破20万。 • 端点备份和云备份厂商Druva在截止于3月31日的2016财年实现了订购业务的100%增长,第6年实现三位数增长。 • 飞康推出了一种云连接器,让FreeStor用户可以在云中--如AWS和Azure--迁移、保护和恢复数据,而不用捆绑到特定硬件、网络或者协议。它实现"云跳跃"将会给云或者MSP厂商带来改变。MSP可以利用FreeStor提供DRaaS(灾难恢复即服务)。 • Qubole正在于WANdisco合作提供一个Cloudera迁移计划。Cloudera现有客户可以将他们的数据和分析迁移到云中,使用WANdisco的复制功能。 • StorPool升级了自己的软件为公有云和私有云提供块存储技术、原生的CloudStack集成、更低的CPU功耗、最高30%的IOPS提升、增加数据容量最高节约15%的空间、提升可扩展性超过1PB,每个集群将有20000个卷和快照。 • Tegile的IntelliStack与思科UCS Director集成。IntelliStack组件包括计算、网络、虚拟化和存储,外加Amazon和Azure这样的公有云。原文发布时间为:2016年7月15日本文作者:刘新萍本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

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

盘点:视频监控行业的潜在商机

一直以来,视频监控在安防行业占据着绝大部分江山,因此面对互联网环境下网络化、信息化、智能化、数字化对安防的冲击,视频监控领域的动作就显得尤其瞩目。透过2016上半年安防各上市企业的半年报发现,视频监控行业持续着景气态势,规模化应用正在平安城市等大项目中得到落地。 大环境的变化可以带动各个行业领域的革新,最初的视频监控不能传输太远的距离,只能应用于小范围的监控,但随着宽带网络的普及,视频监控逐渐从本地监控向远程监控发展,提供了有网络就能图像传输的可能性。 如今,技术的不断发展又对视频监控提出了智能化的要求,使计算机能够通过数字图像处理和分析来理解视频画面中的内容,这对我国正在加速建设的平安城市、智慧城市项目,以及银行、社区、车站等监控重地提供了保障,一些新商机也在其中悄然生长。 4K技术:对“大场景+小细节”的智能监控 只要是和图像或者视频有关的领域,我们都能看到4K的身影,如手机、摄像机、电脑显示器、平板电脑等。据研究显示,全球安防行业超高清(4百万像素以上)市场到2018年将增长5倍以上,得益于高分辨率、宽角度和高编解码视频系统等特点,4K将以其独特的优势占大多数份额。 目前,4K超高清技术主要应用在火车站等“大场景+小细节”的环境中,除了能实现更广角度的监控,4K画面丰富的细节还能让各个部门进行信息共享,不用为了看清不同区域而架设多台摄像机,达到节约投资成本的目的。 编解码技术:从H.264到H.265 除了在前端采集数据外,视频监控还需要在后端进行编解码、智能分析,虽然目前市场上的主力依然是H.264技术,但其编码效率潜力总有被挖掘殆尽的时候,无法满足从高清走向智能化的需求,在这种情况下,被认为4K未来的编解码技术——H.265应运而生。 有人说H.265将会推动安防产业到达一个新高度,这不无道理,无论是用户成本还是利润空间都有极大的看头。如用以往的H.264技术,4个200万存一个月大概需要60G×4×20=6T,即需要2个3T的硬盘,而用H.265的技术只需要:30G×4×20=2.4T,只需要1个3T的硬盘,足足能节约一块千元级别的监控硬盘! 机器视觉:让机器“看懂”识别目标 机器视觉是人工智能的分支之一,在国外多半应用在半导体及电子行业,如今,我国凭借“全球制造业加工中心”的身份成为了机器视觉应用最活跃的地区之一,并在2010年迎来了爆发式增长。 简单说来,机器视觉就是用机器代替人眼来做测量和判断,通过图像摄取装置将被摄取的目标转换成图像信号。在摄取目标中,目标识别技术和稳定的追踪方法是机器视觉发展的关键因素之一,它在很多领域都得到了大量的应用,例如人脸识别,以及在智能交通管理、机动车检测、停车场管理等场合的车牌识别等。 以摄像机为核心的视频监控系统是机器视觉的代表应用之一,目前已广泛应用于安保、交通、楼宇、工业等各个行业领域,而机器视觉乐观的增长率也将给视频监控带来良好的前景。 星光摄像机:找出黑暗中的罪恶 众所周知,光线昏暗的环境容易隐藏危险,犯罪嫌疑人往往在这类地点作案,而视频监控作为安全防范和事后取证的主要设施,其对昏暗环境下的成像效果更是大家关注的焦点。 作为近两年安防监控市场上的主流产品,星光摄像机区别于只能显示黑白图像的普通摄像机,在无任何辅助光源的环境下都可以显示清晰的彩色图像。尤其在天地伟业提出“星光级”等概念后,低照成像技术开始发展并逐步成熟,越来越多公司都推出了各种款型的高清星光级摄像机。 结语 无论在公共场合的哪个角落,或者在各种城市级的应用中,视频监控都是首当其冲的重要设施之一。如今,4K、H.265等技术的突破使得大场景和超高像素的应用越来越多,视频监控领域正焕发出勃勃生机,尽管一些技术和应用或多或少存在缺陷,短时间内还不能成为主流,但随着市场需求的不断提升,期待这些难点能走过磨合期得到攻克。 本文转自d1net(转载)

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

OpenTiny 开源社区2025年度盘点!

前言 2025年,前端开发领域迎来智能化转型的浪潮,OpenTiny作为企业级前端开源解决方案的践行者,开始了从组件生态到智能开发平台的跨越式升级。这一年,我们拥抱变化,我们突破创新,我们把"智能化"写进了基因里;这一年,我们持续打磨组件库,我们持续优化低代码,我们持续完善图表、富文本、中后台管理系统等衍生项目;这一年,我们汇聚在HDC、HC大会,走过多个城市,与多位开发者进行深入交流,输出了90+技术文章,只为与大家分享前沿的"前端+AI"经验,沉淀更优质的技术产品,让前端开发更高效。 以下,是OpenTiny与开发者一起写下的2025答卷。 一、技术演进情况 1、2025年OpenTiny在开源领域不断扎根,共计发布16个大版本,累计修复800+缺陷问题,新增代码916000+行,共提交2700+个commits,同时有150+外部贡献者参与项目共建,共建次数达1700+人次。 2、TinyVue 智能组件库在传统组件库基础上,支持在生成式 UI 场景中使用,AI 智能体可以根据用户意图,按需灵活选择 TinyVue 的组件,呈现给用户可视化的效果,并支持实时互动和交互。 3、TinyEngine智能低代码引擎在25年引入AI能力,结合Web MCP技术能力,持续演进,应用于多个应用系统。 二、核心里程碑事件 2025年,OpenTiny重磅推出OpenTiny NEXT前端智能化解决方案,以生成式UI + WebMCP两大技术为核心,革新传统前端应用的交互模式,实现"自然语言驱动任务自主完成"的智能化升级,为企业应用智能化改造提供了低成本、高效率的落地路径。 技术革新:打破人机交互边界 OpenTiny NEXT的核心创新在于构建了前端应用与AI智能体的标准化交互桥梁。通过WebMCP(Web Model Context Protocol)协议,开发者可将企业前端应用的功能封装为AI智能体可调用的MCP工具,再借助OpenTiny NEXT SDK连接Web Agent Server,让智能体能够精准识别用户意图并自主调用对应功能。相较于传统RPA方案,该技术在执行效率、准确率和成本控制上均实现质的提升,且完全兼容现有MCP生态,无需改动后端API服务及前端人机交互逻辑,大幅降低改造门槛。 了解官网详情:https://opentiny.design/ 三、线上线下联动,链接全球开发者 2025年,OpenTiny以"技术交流+实践体验"为核心,构建线上线下联动等多种活动形式,通过行业盛会参与、专题训练营、线上技术分享等多种形式,与全球开发者深度互动,传递开源理念与技术成果。 HDC开发者大会 其中HDC 2025作为年度重点活动,OpenTiny围绕前端智能化解决方案设置四大核心环节:专题论坛中,华为云高级前端开发工程师曾令卡发表《基于MCP协议:快速解锁AI操作Web组件》主题分享,深度解析TinyVue智能组件库的实践逻辑;展览展示区通过互动演示吸引300+名开发者、研究人员及企业代表交流;产品体验官活动让开发者亲身感受AI对话框与Web组件的语音/文字交互能力;两场CodeLabs训练营分别聚焦TinyVue智能组件开发与TinyEngine AI搭建能力,助力开发者快速上手实操。 HC华为全联接大会 HC大会正式推出OpenTiny NEXT 企业前端智能解决方案,展台接待人数600+人。 同时在华为云AI工具助力智能化编程Codelabs训练营中:基于企业办公场景,让开发者了解OpenTiny NEXT 实现智能体代替用户操作页面的能力,接待高校开发者100+人。 GOSIMHANGZHOU2025 本次活动通过议题分享、展台交流形式参与。引导开发者了解OpenTiny NEXT 企业前端智能化解决方案的核心技术及能力。在本次智能体互联网论坛中,华为Web前端框架专家、OpenTiny项目负责人莫春辉老师以《探索与实践智能体Web应用开发》为题,展开了一场关于下一代Web应用范式的分享。他提出:生成式UI与WebMCP技术的深度融合,将成为未来3-5年Agentic Web应用开发的核心基础设施,动态交互的AI原生应用将加速取代传统静态交互模式,重新定义人机协作边界。除主线演讲外,OpenTiny还设立了互动展位,工程师们系统拆解了OpenTiny NEXT前端智能化解决方案的技术底座:通过设计架构图直观呈现了基础设施层(IaaS)中WebAgent如何作为"连接 Agent 智能体与企业应用内置的 MCP 服务的手臂" 西安电子科技大学高校行 通过参与开源之夏官方组织的高校行活动,对接计算机学院100+名学生,通过议题分享的方式,在线下与学生建立联系,进行TinyVue智能组件库技术布道,建立100+人学生交流群,视频号观看量5000+ 开源之夏 2025年OpenTiny社区参与中国科学院软件研究所发起的暑期编程活动开源之夏2025,创建赛题,吸引多位高校开发者共同参与共建,引导12个优秀作品提交至OpenTiny代码库。 结项公示: https://summer-ospp.ac.cn/final?name=&orgName=OpenTiny&pageNum=1&pageSize=50&programName 线上体验官活动 联合开发者联盟上线OpenTiny产品体验官活动,让线上开发者体验项目当前的智能化能力。共引导74位开发者报名参与 活动地址: https://developer.huaweicloud.com/signup/4f8b07903ef2415f924e959d4947e5a1 四、让"OpenTiny的声音"被世界听见 持续推进体系化建设,打造系列技术课程。当前已完成《开发者技术实战课程》,《TinyEngine低代码引擎实战教程》、《OpenTiny前端解决方案技术解读》、《OpenTiny开源之夏项目解读》等技术课程,推出90+篇技术文章,包含《TinyVue智能组件库:基于MCP协议实现AI代替人操作Web组件》、《TinyVue表格重构逐帧拆解,虚拟滚动体验大提升!》、《产品经理要"通过大小、时间范围筛选"搜索?我 15 分钟用 SearchBox 交差!》等等。并通过运作12个社媒渠道,整体传播量达96.7W+,并荣获2025年开源中国共创社区荣誉。 优质内容推荐: 从千问灵光 App 看生成式 UI 技术的发展 不止按钮和表格!TinyVue 偷偷上线 Space 组件,直接搞定「弹性+间距」布局 TinyVue 表格重构逐帧拆解,虚拟滚动体验大提升! 产品经理要"通过大小、时间范围筛选"搜索?我 15 分钟用 SearchBox 交差! 如何使用 TinyEditor 快速部署一个协同编辑器 TinyEngine2.9版本发布:更智能,更灵活,更开放! TinyEngine 2.8 正式上线:AI能力就位、Docker一键起飞! TinyEngine 2.7 版本发布!注册表功能重大更新,开启低代码新范式 TinyEngine2.6版本焕新发布:实现页面树折叠!设计器 UI 及多项功能点升级! ...... 系列课程: 2025OpenTiny技术分享 TinyEngine低代码引擎实操教程 OpenTiny社区开发者技术分享 OpenTiny开源之夏2025专题 ...... 五、听听你的心里话 这一年,我们也采访了10+位开发者,了解用户在使用过程中的各种问题与疑惑。开发者们也表示从实际体验可知,相较于以往,页面渲染速度有了显著提升,在开发过程中能明显感知到这一变化。另外,采用TinyVue组件库进行页面开发后,也提高了本地开发的效率和响应速度,整体表现也能看出实用性很强。当然也有开发者提到:希望官方能持续优化,例如文档网站能支持多版本切换功能,让开发者能够便捷查阅不同版本的API,降低版本适配的认知负担。同时,也建议在文档中清晰划分时间节点,提供版本切换入口,以便团队在维护旧项目或升级新版本时更高效地获取对应版本的文档支持等等内容。 致谢|与开发者同行 感谢所有社区开发者、企业伙伴、所有粉丝们,是你们的每一行代码、每一次 PR、每一个 Star,让 OpenTiny 从"小而美"走向"强而大"。 同时,也非常感谢所有投稿的开发者,包含Node.js系列文章作者屈金雄、曹杨毅;前端性能优化作者董福俊;字体性能优化作者张庭岑;AI知识科普作者合艳春;TinyVue相关内容作者曾令卡、郑志超、申君健、岑灌铭、刘坤等;TinyEngine相关内容作者伍其和、李锦浩、胡靖、王莉纯、李璇、李坤、观默等;OpenTiny开源之夏项目相关作者周天意、夏雯斐、张筠、张颢严、程锴、龚昱帆、宋子文、王晨光、周泽龙、张珈瑜、申曜枫、曹里林及其导师。 2026,我们继续"用 AI 重新定义前端",愿与所有开发者携手,让前端未来更智能、更开放! 关于OpenTiny 欢迎加入 OpenTiny 开源社区。添加微信小助手:opentiny-official 一起参与交流前端技术~ OpenTiny 官网:https://opentiny.design OpenTiny 代码仓库:https://github.com/opentiny TinyVue 源码:https://github.com/opentiny/tiny-vue TinyEngine 源码: https://github.com/opentiny/tiny-engine 欢迎进入代码仓库 Star🌟TinyEngine、TinyVue、TinyNG、TinyCLI、TinyEditor~ 如果你也想要共建,可以进入代码仓库,找到 good first issue 标签,一起参与开源贡献~

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

2024 最热门开源 GitOps 工具盘点

GitOps 是一种侧重于自动化、协作和持续交付的基础设施管理现代方法。它的核心理念是将 Git 作为配置和代码的唯一真理源。在 GitOps 实践中,对基础设施的任何更改都必须通过 Pull Request(合并请求)来进行,这些合并请求需要在并入主分支之前得到团队其他成员的审查和同意。 在这篇文章里,我们将介绍几款开源的 GitOps 工具: 基础设施即代码(IaC):Terraform 基础设施即代码(IaC):Pulumi 为 Kubernetes 设计的持续交付工具:ArgoCD 快速、兼具 Git 友好性的 API 客户端:Bruno 全方位人到数据库操作管理:Bytebase Terraform Terraform 是一款开源的基础设施即代码(IaC)工具,它使得构建、修改以及版本控制基础设施变得既安全又高效。它覆盖了从低级组件(如计算实例、存储和网络)到高级组件(如 DNS 配置和 SaaS 功能)的广泛需求。 Terraform 采用 HashiCorp 配置语言(HCL)作为主要的配置语言,并同时支持 JSON 格式,以满足不同用户的编写习惯。 为了实施 GitOps,你需要创建一个含有 Terraform 配置的 Git 仓库,通过 Terraform 定义你的基础设施,并通过流水线和 Pull Request 来管理基础设施的更新。这样不仅能保证基础设施配置的版本控制,还能通过代码审查机制保障更改的质量。 Pulumi Pulumi 是一款开源的基础设施即代码(IaC)工具,它独特之处在于允许开发者使用他们偏好的编程语言——如 Python、JavaScript 或 Go——来创建、部署和管理云基础设施。这一特性使得 Pulumi 与 Terraform 有所不同,后者主要使用专用的配置语言。 类似于 Terraform,Pulumi 也支持 GitOps 的实施方式。你可以创建一个含有 Pulumi 配置文件的 Git 仓库,利用 Pulumi 定义你的云基础设施,并通过流水线和 Pull Request 来管理这些基础设施的更新。这种方法不仅有助于基础设施配置的版本控制,而且能够通过代码审查机制来提高变更的质量和安全性。 ArgoCD ArgoCD 是一款专为 Kubernetes 设计的声明式 GitOps 持续交付工具。 它采用 GitOps 的方式,将 Git 仓库作为定义应用目标状态的核心依据。Kubernetes 的部署清单可以通过多种形式进行指定,包括但不限于 kustomize 应用、helm 图表以及 jsonnet 文件。 通过 Argo CD,可以自动化地将应用的目标状态部署到特定的运行环境中。这个过程支持跟踪分支、标签的最新更新,或者可以指定部署到某个 Git 提交对应的特定版本,以确保部署的一致性和准确性。 Bruno Bruno 是一个快速、兼具 Git 友好性的开源 API 客户端,目标是改变 Postman、Insomnia 等流行工具所代表的传统做法。 它通过 Bru 这种纯文本标记语言,直接在你的文件系统上的一个文件夹中存储 API 请求相关的信息,使得管理 API 请求集成简洁且高效。 在 GitOps 实践中,Bruno 让你可以通过 Git 或任意版本控制系统,轻松地与团队成员共享和协作开发 API 请求集。这种方式无疑为 API 开发带来了更高的灵活性和团队协作效率。 Bytebase Bytebase 是一款开源的数据库 DevOps 工具,被誉为数据库管理领域的 GitLab/GitHub,它支持应用程序开发生命周期中的数据库管理。这款工具为数据库管理员(DBA)、开发人员和平台工程师提供了一个集中的网络协作平台,将 DBeaver、Liquibase、Flyway 等多种数据库工具整合在一起,方便使用。 除了直观的 UI 工作流,Bytebase 还引入了 GitOps 工作流程来管理数据库变更。允许通过 Pull Request 来启动数据库变更请求。并且,Bytebase 提供了 SQL 审核、自定义的审批流程以及部署策略,从而能够以更先进的 GitOps 方式来管理数据库变更。这不仅提高了数据库管理的效率和安全性,也为团队协作带来了新的可能性。 上述介绍的每一款工具都有其特色和强项。通过了解你的特定需求,可以挑选最适合自己场景的工具。 💡 更多资讯,请关注 Bytebase 公号:Bytebase

资源下载

更多资源
Mario

Mario

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

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等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册