quasarjava的简单介绍

今天给各位分享quasarjava的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

1、给java程序加背景音乐的代码~2、求我的世界神奇宝贝各神兽召唤指令3、GitHub上面有哪些经典的java框架源码4、kotlin语言是在java的基础上进行二次封装吗5、如何学习Kotlin编程语言6、越来越多的公司注重保密,那么商业间谍是否真存在于我们的工作中?

给java程序加背景音乐的代码~

一楼的回答说对了一部分,主要还是多线程的问题.

我的毕业设计也是做的一个小游戏程序–坦克大战,当初游戏逻辑界面都完成了想加入音频的时候也遇到了困难,最开始想到了多线程处理,也就是自身游戏的绘图线程占用着主线程,如果此时再在同一线程播放音频的话肯定会造成音频流或者绘图类paint阻塞,所以这时要为音频加入一个单独额外的线程,已达到避免线程阻塞的作用.

但是此时还是会出现音频不流畅的情况(当然,大多情况是出现短暂音效后便消失),主要问题在于Java在利用线程读取音频的时候,是通过流的方式读取的,此时可以考虑在程序加载之前先“预载”一次音频,当需要的时候再调用它的播放线程,利用流处理.这么做的好处是将音频存放在内存中,当需要的时候能正常的出现.当然,后面这段情况是在你运用到了多线程的时候才会出现的。

找了下毕设时的代码,如下:

/**

*该方法为音频流缓冲方法,在调用音频播放线程时调用

*/

public BufferedInputStream loadBomb(){

BufferedInputStream bufbomb = null;

try{

File dir = new File(“D:/java/TankWar2.6/”); //所要播放文件的路径

File fObject = new File(dir,”bomb.wav”); //音频名

FileInputStream file = new FileInputStream(fObject);

bufbomb = new BufferedInputStream(file);

}catch(IOException e) {

System.out.println(e.getMessage());

}

return bufbomb;

}

/**

* 缓冲完毕的核爆音频播放线程

*/

private class BombMusic implements Runnable{ //通过流读取声音文件

BufferedInputStream buf;

public void run(){

buf = loadBomb();

try{

AudioStream audio = new AudioStream(buf);

AudioPlayer.player.start(audio);

}catch(IOException e){

e.printStackTrace();

}

}

}

求我的世界神奇宝贝各神兽召唤指令

我的世界神奇宝贝召唤神兽指令大全:

/pokespawn Mewtwo:超梦;/pokespawn Rayquaza:裂空座;/pokespawn Groudon:古拉顿;/pokespawn Mew:梦幻;/pokespawn Dragonite:快龙;/pokespawn Articuno:急冻鸟;/pokespawn Moltres:火焰鸟。

我的世界鲜为人知的技巧:

1、末影珍珠炮应该是目前这个游戏最快的水平运动工具了,但是就数值上,它距离“最快”还差得远。最高速度应该是竖直向上发射的2147483647级的激流三叉戟,理论和实测的瞬时速度均超过了10^9 blocks/tick;

2、基岩挖不掉不等于炸不掉,把恶魂火球的爆炸威力写到86万就行了。只是,记得限制好爆炸的范围,不然就算神威太湖之光来了都不见得算得动它;

3、每一条末影龙都是9个实体,但是只有一个在记录生命和位置这些信息,这意味着如果不去刻意的选择的话,命令返回的结果很容易让人误以为龙的数量是看到的9倍;

4、Mojang早在1.10就移除了负等级效果,然而,这个所谓的“移除”并没有打扫干净,结果就是跳跃提升、漂浮依然存在负等级(虽然在effect这里是128~255级)特性。不过,这种特性只要退出重进一下就没了。

GitHub上面有哪些经典的java框架源码

Bazel:来自Google的构建工具,可以快速、可靠地构建代码。官网

Gradle:使用Groovy(非XML)进行增量构建,可以很好地与Maven依赖管理配合工作。官网

Buck:Facebook构建工具。官网

字节码操作

编程方式操作字节码的开发库。

ASM:通用底层字节码操作和分析开发库。官网

Byte Buddy:使用流式API进一步简化字节码生成。官网

Byteman:在运行时通过DSL(规则)操作字节码进行测试和故障排除。官网

Javassist:一个简化字节码编辑尝试。官网

集群管理

在集群内动态管理应用程序的框架。

Apache Aurora:Apache Aurora是一个Mesos框架,用于长时间运行服务和定时任务(cron job)。官网

Singularity:Singularity是一个Mesos框架,方便部署和操作。它支持Web Service、后台运行、调度作业和一次性任务。官网

代码分析

测量代码指标和质量工具。

Checkstyle:代码编写规范和标准静态分析工具。官网

Error Prone:将常见编程错误作为运行时错误报告。官网

FindBugs:通过字节码静态分析查找隐藏bug。官网

jQAssistant:使用基于Neo4J查询语言进行代码静态分析。官网

PMD:对源代码分析查找不良的编程习惯。官网

SonarQube:通过插件集成其它分析组件,对过去一段时间内的数据进行统计。官网

编译器生成工具

用来创建解析器、解释器或编译器的框架。

ANTLR:复杂的全功能自顶向下解析框架。官网

JavaCC:JavaCC是更加专门的轻量级工具,易于上手且支持语法超前预测。官网

外部配置工具

支持外部配置的开发库。

config:针对JVM语言的配置库。官网

owner:减少冗余配置属性。官网

约束满足问题求解程序

帮助解决约束满足问题的开发库。

Choco:可直接使用的约束满足问题求解程序,使用了约束规划技术。官网

JaCoP:为FlatZinc语言提供了一个接口,可以执行MiniZinc模型。官网

OptaPlanner:企业规划与资源调度优化求解程序。官网

Sat4J:逻辑代数与优化问题最先进的求解程序。官网

持续集成

Bamboo:Atlassian解决方案,可以很好地集成Atlassian的其他产品。可以选择开源许可,也可以购买商业版。官网

CircleCI:提供托管服务,可以免费试用。官网

Codeship:提供托管服务,提供有限的免费模式。官网

fabric8:容器集成平台。官网

Go:ThoughtWork开源解决方案。官网

Jenkins:支持基于服务器的部署服务。官网

TeamCity:JetBrain的持续集成解决方案,有免费版。官网

Travis:通常用作开源项目的托管服务。官网

Buildkite: 持续集成工具,用简单的脚本就能设置pipeline,而且能快速构建,可以免费试用。官网

CSV解析

简化CSV数据读写的框架与开发库

uniVocity-parsers:速度最快功能最全的CSV开发库之一,同时支持TSV与固定宽度记录的读写。官网

数据库

简化数据库交互的相关工具。

Apache Phoenix:HBase针对低延时应用程序的高性能关系数据库层。官网

Crate:实现了数据同步、分片、缩放、复制的分布式数据存储。除此之外还可以使用基于SQL的语法跨集群查询。官网

Flyway:简单的数据库迁移工具。官网

H2:小型SQL数据库,以可以作为内存数据库使用著称。官网

HikariCP:高性能JDBC连接工具。官网

JDBI:便捷的JDBC抽象。官网

Protobuf:Google数据交换格式。官网

SBE:简单二进制编码,是最快速的消息格式之一。官网

Wire:整洁轻量级协议缓存。官网

帮实现依赖翻转范式的开发库。 官网

Apache DeltaSpike:CDI扩展框架。官网

Dagger2:编译时注入框架,不需要使用反射。官网

Guice:可以匹敌Dagger的轻量级注入框架。官网

HK2:轻量级动态依赖注入框架。官网

开发流程增强工具

从最基本的层面增强开发流程。

ADT4J:针对代数数据类型的JSR-269代码生成器。官网

AspectJ:面向切面编程(AOP)的无缝扩展。官网

Auto:源代码生成器集合。官网

DCEVM:通过修改JVM在运行时支持对已加载的类进行无限次重定义。官网

HotswapAgent:支持无限次重定义运行时类与资源。官网

Immutables:类似Scala的条件类。官网

JHipster:基于Spring Boot与AngularJS应用程序的Yeoman源代码生成器。官网

JRebel:无需重新部署,可以即时重新加载代码与配置的商业软件。官网

Lombok:减少冗余的代码生成器。官网

Spring Loaded:类重载代理。官网

vert.x:多语言事件驱动应用框架。官网

分布式应用

用来编写分布式容错应用的开发库和框架。

Akka:用来编写分布式容错并发事件驱动应用程序的工具和运行时。官网

Apache Storm:实时计算系统。官网

Apache ZooKeeper:针对大型分布式系统的协调服务,支持分布式配置、同步和名称注册。官网

Hazelcast:高可扩展内存数据网格。官网

Hystrix:提供延迟和容错。官网

JGroups:提供可靠的消息传递和集群创建的工具。官网

Orbit:支持虚拟角色(Actor),在传统角色的基础上增加了另外一层抽象。官网

Quasar:为JVM提供轻量级线程和角色。官网

分布式数据库

对应用程序而言,在分布式系统中的数据库看起来就像是只有一个数据源。

Apache Cassandra:列式数据库,可用性高且没有单点故障。官网

Apache HBase:针对大数据的Hadoop数据库。官网

Druid:实时和历史OLAP数据存储,在聚集查询和近似查询方面表现不俗。官网

Infinispan:针对缓存的高并发键值对数据存储。官网

发布

以本机格式发布应用程序的工具。

Bintray:发布二进制文件版本控制工具。可以于Maven或Gradle一起配合使用。提供开源免费版本和几种商业收费版本。官网

Central Repository:最大的二进制组件仓库,面向开源社区提供免费服务。Apache Maven默认使用Central 官网Repository,也可以在所有其他构建工具中使用。

IzPack:为跨平台部署建立创作工具(Authoring Tool)。官网

JitPack:打包GitHub仓库的便捷工具。可根据需要构建Maven、Gradle项目,发布可立即使用的组件。官网

Launch4j:将JAR包装为轻量级本机Windows可执行程序。官网

Nexus:支持代理和缓存功能的二进制管理工具。官网

packr:将JAR、资源和JVM打包成Windows、Linux和Mac OS X本地发布文件。官网

文档处理工具

处理Office文档的开发库。

Apache POI:支持OOXML规范(XLSX、DOCX、PPTX)以及OLE2规范(XLS、DOC、PPT)。官网

documents4j:使用第三方转换器进行文档格式转换,转成类似MS Word这样的格式。官网

jOpenDocument:处理OpenDocument格式(由Sun公司提出基于XML的文档格式)。官网

函数式编程

函数式编程支持库。

Cyclops:支持一元(Monad)操作和流操作工具类、comprehension(List语法)、模式匹配、trampoline等特性。官网

Fugue:Guava的函数式编程扩展。官网

Functional Java:实现了多种基础和高级编程抽象,用来辅助面向组合开发(composition-oriented development)。官网

Javaslang:一个函数式组件库,提供持久化数据类型和函数式控制结构。官网

jOOλ:旨在填补Java 8 lambda差距的扩展,提供了众多缺失的类型和一组丰富的顺序流API。官网

游戏开发

游戏开发框架。

jMonkeyEngine:现代3D游戏开发引擎。官网

libGDX:全面的跨平台高级框架。官网

LWJGL:对OpenGL/CL/AL等技术进行抽象的健壮框架。官网

GUI

现代图形化用户界面开发库。

JavaFX:Swing的后继者。官网

Scene Builder:开发JavaFX应用的可视化布局工具。官网

高性能计算

涵盖了从集合到特定开发库的高性能计算相关工具。

Agrona:高性能应用中常见的数据结构和工具方法。官网

Disruptor:线程间消息传递开发库。官网

fastutil:快速紧凑的特定类型集合(Collection)。官网

GS Collections:受Smalltalk启发的集合框架。官网

HPPC:基础类型集合。官网

Javolution:实时和嵌入式系统的开发库。官网

JCTools:JDK中缺失的并发工具。官网

Koloboke:Hash set和hash map。官网

Trove:基础类型集合。官网

High-scale-bli:Cliff Click 个人开发的高性能并发库官网

IDE

简化开发的集成开发环境。

Eclipse:老牌开源项目,支持多种插件和编程语言。官网

IntelliJ IDEA:支持众多JVM语言,是安卓开发者好的选择。商业版主要针对企业客户。官网

NetBeans:为多种技术提供集成化支持,包括Java SE、Java EE、数据库访问、HTML5

Imgscalr:纯Java 2D实现,简单、高效、支持硬件加速的图像缩放开发库。官网

Picasso:安卓图片下载和图片缓存开发库。官网

Thumbnailator:Thumbnailator是一个高质量Java缩略图开发库。官网

ZXing:支持多种格式的一维、二维条形码图片处理开发库。官网

im4java: 基于ImageMagick或GraphicsMagick命令行的图片处理开发库,基本上ImageMagick能够支持的图片格式和处理方式都能够处理。官网

Apache Batik:在Java应用中程序以SVG格式显示、生成及处理图像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模块,可以集成使用也可以单独使用,还可以扩展自定义的SVG标签。官网

JSON

简化JSON处理的开发库。

Genson:强大且易于使用的Java到JSON转换开发库。官网

Gson:谷歌官方推出的JSON处理库,支持在对象与JSON之间双向序列化,性能良好且可以实时调用。官网

Jackson:与GSON类似,在频繁使用时性能更佳。官网

LoganSquare:基于Jackson流式API,提供对JSON解析和序列化。比GSON与Jackson组合方式效果更好。官网

Fastjson:一个Java语言编写的高性能功能完善的JSON库。官网

Kyro:快速、高效、自动化的Java对象序列化和克隆库。官网

JVM与JDK

目前的JVM和JDK实现。

JDK 9:JDK 9的早期访问版本。官网

OpenJDK:JDK开源实现。官网

基于JVM的语言

除Java外,可以用来编写JVM应用程序的编程语言。

Scala:融合了面向对象和函数式编程思想的静态类型编程语言。官网

Groovy:类型可选(Optionally typed)的动态语言,支持静态类型和静态编译。目前是一个Apache孵化器项目。官网

Clojure:可看做现代版Lisp的动态类型语言。官网

Ceylon:RedHat开发的面向对象静态类型编程语言。官网

Kotlin:JetBrain针对JVM、安卓和浏览器提供的静态类型编程语言。官网

Xtend:一种静态编程语言,能够将其代码转换为简洁高效的Java代码,并基于JVM运行。官网

日志

记录应用程序行为日志的开发库。

Apache Log4j 2:使用强大的插件和配置架构进行完全重写。官网

kibana:分析及可视化日志文件。官网

Logback:强健的日期开发库,通过Groovy提供很多有趣的选项。官网

logstash:日志文件管理工具。官网

Metrics:通过JMX或HTTP发布参数,并且支持存储到数据库。官网

SLF4J:日志抽象层,需要与具体的实现配合使用。官网

机器学习

提供具体统计算法的工具。其算法可从数据中学习。

Apache Flink:快速、可靠的大规模数据处理引擎。官网

Apache Hadoop:在商用硬件集群上用来进行大规模数据存储的开源软件框架。官网

Apache Mahout:专注协同过滤、聚类和分类的可扩展算法。官网

Apache Spark:开源数据分析集群计算框架。官网

DeepDive:从非结构化数据建立结构化信息并集成到已有数据库的工具。官网

Deeplearning4j:分布式多线程深度学习开发库。官网

H2O:用作大数据统计的分析引擎。官网

Weka:用作数据挖掘的算法集合,包括从预处理到可视化的各个层次。官网

QuickML:高效机器学习库。官网、GitHub

消息传递

在客户端之间进行消息传递,确保协议独立性的工具。

Aeron:高效可扩展的单播、多播消息传递工具。官网

Apache ActiveMQ:实现JMS的开源消息代理(broker),可将同步通讯转为异步通讯。官网

Apache Camel:通过企业级整合模式(Enterprise Integration Pattern EIP)将不同的消息传输API整合在一起。官网

Apache Kafka:高吞吐量分布式消息系统。官网

Hermes:快速、可靠的消息代理(Broker),基于Kafka构建。官网

JBoss HornetQ:清晰、准确、模块化,可以方便嵌入的消息工具。官网

JeroMQ:ZeroMQ的纯Java实现。官网

Smack:跨平台XMPP客户端函数库。官网

Openfire:是开源的、基于XMPP、采用Java编程语言开发的实时协作服务器。 Openfire安装和使用都非常简单,并可利用Web界面进行管理。 官网GitHub

Spark:是一个开源,跨平台IM客户端。它的特性支持集组聊天,电话集成和强大安全性能。如果企业内部部署IM使用Openfire+Spark是最佳的组合。 官网 GitHub

Tigase: 是一个轻量级的可伸缩的 Jabber/XMPP 服务器。无需其他第三方库支持,可以处理非常高的复杂和大量的用户数,可以根据需要进行水平扩展。 官网

杂项

未分类其它资源。

Design Patterns:实现并解释了最常见的设计模式。官网

Jimfs:内存文件系统。官网

Lanterna:类似curses的简单console文本GUI函数库。官网

LightAdmin:可插入式CRUD UI函数库,可用来快速应用开发。官网

OpenRefine:用来处理混乱数据的工具,包括清理、转换、使用Web Service进行扩展并将其关联到数据库。官网

RoboVM:Java编写原生iOS应用。官网

Quartz:强大的任务调度库.官网

应用监控工具

监控生产环境中应用程序的工具。

AppDynamics:性能监测商业工具。官网

JavaMelody:性能监测和分析工具。官网

Kamon:Kamon用来监测在JVM上运行的应用程序。官网

New Relic:性能监测商业工具。官网

SPM:支持对JVM应用程序进行分布式事务追踪的性能监测商业工具。官网

Takipi:产品运行时错误监测及调试商业工具。官网

原生开发库

用来进行特定平台开发的原生开发库。

JNA:不使用JNI就可以使用原生开发库。此外,还为常见系统函数提供了接口。官网

自然语言处理

用来专门处理文本的函数库。

Apache OpenNLP:处理类似分词等常见任务的工具。官网

CoreNLP:斯坦佛CoreNLP提供了一组基础工具,可以处理类似标签、实体名识别和情感分析这样的任务。官网

LingPipe:一组可以处理各种任务的工具集,支持POS标签、情感分析等。官网

Mallet:统计学自然语言处理、文档分类、聚类、主题建模等。官网

网络

网络编程函数库。

Async Http Client:异步HTTP和WebSocket客户端函数库。官网

Grizzly:NIO框架,在Glassfish中作为网络层使用。官网

Netty:构建高性能网络应用程序开发框架。官网

OkHttp:一个Android和Java应用的HTTP+SPDY客户端。官网

Undertow:基于NIO实现了阻塞和非阻塞API的Web服务器,在WildFly中作为网络层使用。官网

ORM

处理对象持久化的API。

Ebean:支持快速数据访问和编码的ORM框架。官网

EclipseLink:支持许多持久化标准,JPA、JAXB、JCA和SDO。官网

Hibernate:广泛使用、强健的持久化框架。Hibernate的技术社区非常活跃。官网

MyBatis:带有存储过程或者SQL语句的耦合对象(Couples object)。官网

OrmLite:轻量级开发包,免除了其它ORM产品中的复杂性和开销。官网

Nutz:另一个SSH。官网,Github

JFinal:JAVA WEB + ORM框架。官网,Github

PDF

用来帮助创建PDF文件的资源。

Apache FOP:从XSL-FO创建PDF。官网

Apache PDFBox:用来创建和操作PDF的工具集。官网

DynamicReports:JasperReports的精简版。官网

flyingsaucer:XML/XHTML和CSS 2.1渲染器。官网

iText:一个易于使用的PDF函数库,用来编程创建PDF文件。注意,用于商业用途时需要许可证。官网

JasperReports:一个复杂的报表引擎。官网

性能分析

性能分析、性能剖析及基准测试工具。

jHiccup:提供平台中JVM暂停的日志和记录。官网

JMH:JVM基准测试工具。官网

JProfiler:商业分析器。官网

LatencyUtils:测量和报告延迟的工具。官网

VisualVM:对运行中的应用程序信息提供了可视化界面。官网

YourKit Java Profiler:商业分析器。官网

响应式开发库

用来开发响应式应用程序的开发库。

Reactive Streams:异步流处理标准,支持非阻塞式反向压力(backpressure)。官网

Reactor:构建响应式快速数据(fast-data)应用程序的开发库。官网

RxJava:通过JVM可观察序列(observable sequence)构建异步和基于事件的程序。官网

REST框架

用来创建RESTful 服务的框架。

Dropwizard:偏向于自己使用的Web框架。用来构建Web应用程序,使用了Jetty、Jackson、Jersey和Metrics。官网

Feign:受Retrofit、JAXRS-2.0和WebSocket启发的HTTP客户端连接器(binder)。官网

Jersey:JAX-RS参考实现。官网

RESTEasy:经过JAX-RS规范完全认证的可移植实现。官网

RestExpress:一个Java类型安全的REST客户端。官网

RestX:基于注解处理和编译时源码生成的框架。官网

Retrofit:类型安全的REST客户端。官网

Spark:受到Sinatra启发的Java REST框架。官网

Swagger:Swagger是一个规范且完整的框架,提供描述、生产、消费和可视化RESTful Web Service。官网

Blade:国人开发的一个轻量级的MVC框架. 它拥有简洁的代码,优雅的设计。官网

科学计算与分析

用于科学计算和分析的函数库。

DataMelt:用于科学计算、数据分析及数据可视化的开发环境。官网

JGraphT:支持数学图论对象和算法的图形库。官网

JScience:用来进行科学测量和单位的一组类。官网

搜索引擎

文档索引引擎,用于搜索和分析。

Apache Solr:一个完全的企业搜索引擎。为高吞吐量通信进行了优化。官网

Elasticsearch:一个分布式、支持多租户(multitenant)全文本搜索引擎。提供了RESTful Web接口和无schema的JSON文档。官网

Apache Lucene:是一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。官网

安全

用于处理安全、认证、授权或会话管理的函数库。

Apache Shiro:执行认证、授权、加密和会话管理。官网

Bouncy Castle,涵盖了从基础的帮助函数到PGP/SMIME操作。官网:多途加密开发库。支持JCA提供者(JCA provider)

Cryptomator:在云上进行客户端跨平台透明加密。官网

Keycloak:为浏览器应用和RESTful Web Service集成SSO和IDM。目前还处于beta版本,但是看起来非常有前途。官网

PicketLink:PicketLink是一个针对Java应用进行安全和身份认证管理的大型项目(Umbrella Project)。官网

序列化

用来高效处理序列化的函数库。

FlatBuffers:高效利用内存的序列化函数库,无需解包和解析即可高效访问序列化数据。官网

Kryo:快速、高效的对象图形序列化框架。官网

FST:提供兼容JDK的高性能对象图形序列化。官网

MessagePack:一种高效的二进制序列化格式。官网

应用服务器

用来部署应用程序的服务器。

Apache Tomcat:针对Servlet和JSP的应用服务器,健壮性好且适用性强。官网

Apache TomEE:Tomcat加Java EE。官网

Jetty:轻量级、小巧的应用服务器,通常会嵌入到项目中。官网

WebSphere Liberty:轻量级、模块化应用服务器,由IBM开发。官网

WildFly:之前被称作JBoss,由Red Hat开发。支持很多Java EE功能。官网

模板引擎

在模板中替换表达式的工具。

Apache Velocity:提供HTML页面模板、email模板和通用开源代码生成器模板。官网

FreeMarker:通用模板引擎,不需要任何重量级或自己使用的依赖关系。官网

Handlebars.java:使用Java编写的模板引擎,逻辑简单,支持语义扩展(semantic Mustache)。官网

Thymeleaf:旨在替换JSP,支持XML文件的工具。官网

测试

测试内容从对象到接口,涵盖性能测试和基准测试工具。

Apache JMeter:功能性测试和性能评测。官网

Arquillian:集成测试和功能行测试平台,集成Java EE容器。官网

AssertJ:支持流式断言提高测试的可读性。官网

Awaitility:用来同步异步操作的DSL。官网

Cucumber:BDD测试框架。官网

Gatling:设计为易于使用、可维护的和高性能负载测试工具。官网

Hamcrest:可用来灵活创建意图(intent)表达式的匹配器。官网

JMockit:用来模拟静态、final方法等。官网

JUnit:通用测试框架。官网

Mockito:在自动化单元测试中创建测试对象,为TDD或BDD提供支持。官网

PowerMock: 支持模拟静态方法、构造函数、final类和方法、私有方法以及移除静态初始化器的模拟工具。官网

REST Assured:为REST/HTTP服务提供方便测试的Java DSL。官网

Selenide:为Selenium提供精准的周边API,用来编写稳定且可读的UI测试。官网

Selenium:为Web应用程序提供可移植软件测试框架。官网

Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官网兼容JUnit框架,支持衍生的Groovy范的语言。

TestNG:测试框架。官网

Truth:Google的断言和命题(proposition)框架。官网

Unitils:模块化测试函数库,支持单元测试和集成测试。官网

WireMock:Web Service测试桩(Stub)和模拟函数。官网

通用工具库

通用工具类函数库。

Apache Commons:提供各种用途的函数,比如配置、验证、集合、文件上传或XML处理等。官网

args4j:命令行参数解析器。官网

CRaSH:为运行进行提供CLI。官网

Gephi:可视化跨平台网络图形化操作程序。官网

Guava:集合、缓存、支持基本类型、并发函数库、通用注解、字符串处理、I/O等。官网

JADE:构建、调试多租户系统的框架和环境。官网

javatuples:正如名字表示的那样,提供tuple支持。尽管目前tuple的概念还有留有争议。官网

JCommander:命令行参数解析器。官网

Protégé:提供存在论(ontology)编辑器以及构建知识系统的框架。官网

网络爬虫

用于分析网站内容的函数库。

Apache Nutch:可用于生产环境的高度可扩展、可伸缩的网络爬虫。官网

Crawler4j:简单的轻量级网络爬虫。官网

JSoup:刮取、解析、操作和清理HTML。官网

Web框架

用于处理Web应用程序不同层次间通讯的框架。

Apache Tapestry:基于组件的框架,使用Java创建动态、强健的、高度可扩展的Web应用程序。官网

Apache Wicket:基于组件的Web应用框架,与Tapestry类似带有状态显示GUI。官网

Google Web Toolkit:一组Web开发工具集,包含在客户端将Java代码转为JavaScript的编译器、XML解析器、RCP 官网API、JUnit集成、国际化支持和GUI控件。

Grails:Groovy框架,旨在提供一个高效开发环境,使用约定而非配置、没有XML并支持混入(mixin)。官网

Ninja:Java全栈Web开发框架。非常稳固、快速和高效。官网

Pippo:小型、高度模块化的类Sinatra框架。官网

Play:使用约定而非配置,支持代码热加载并在浏览器中显示错误。官网

PrimeFaces:JSF框架,提供免费和带支持的商业版本。包括若干前端组件。官网

Ratpack:一组Java开发函数库,用于构建快速、高效、可扩展且测试完备的HTTP应用程序。官网

Spring Boot:微框架,简化了Spring新程序的开发过程。官网

Spring:旨在简化Java EE的开发过程,提供依赖注入相关组件并支持面向切面编程。官网

Vaadin:基于GWT构建的事件驱动框架。使用服务端架构,客户端使用Ajax。官网

Blade:国人开发的一个轻量级的MVC框架. 它拥有简洁的代码,优雅的设计。官网

业务流程管理套件

流程驱动的软件系统构建。

jBPM:非常灵活的业务流程管理框架,致力于构建开发与业务分析人员之间的桥梁。官网

Activity:轻量级工作流和业务流程管理框架。官网 github

资源

社区

kotlin语言是在java的基础上进行二次封装吗

为什么说 Kotlin 是优秀的

本文不会像一般介绍语言的文章那样,一开头就罗列出语言那些酷炫的特性,我们稍后再来探讨这些内容。

首先我将介绍一些其它的信息,因为2013 年一项研究显示,当开发者评估一种编程语言时生态系统要比语言特性更重要。这符合我个人的经验,下面就让我开始介绍吧:

Kotlin 被编译成 JVM 字节码或者 JavaScript 代码。Java 开发者将会是对它最感兴趣的人,不过对于使用垃圾收集运行时语言的开发者而言它也具有一定的吸引力,比如 Scala、Go、Python、Ruby 和 JavaScript 等语言。

Kotlin 来自业界,而不是学术界。它解决了开发者现今面临的实际问题。例如它的类型系统可以帮助你避免空指针异常。

切换到 Kotlin 无需成本!它是开源的但这不是重点,重点是它提供了一个高质量的一键从 Java 转换到 Kotlin 的工具,并且十分关注 Java 二进制文件的兼容性。你可以将现有 Java 项目的一次性转换成 Kotlin 项目,而该项目仍将可以正常编译,即使这是一个包含上百万行代码的复杂程序。

显然你可以从上文得知,Kotlin 程序能够使用所有现存的 Java 框架和库,甚至那些依赖注解处理的高级框架。它们之间的交互是无缝的,不需要包装或者适配层。Kotlin 可以整合 Maven,Gradle 以及其它构建系统。

它十分平易近人,语法精炼直观,仅仅是阅读语言参考文档几个小时就能学会使用。Kotlin 看起来十分像 Scala 但是更加简洁并且兼顾了可读性。

它不遵循特定的编程哲学,例如极度的函数式编程或者面向对象编程风格。

它不会增加运行时的开销。Kotlin 的标准库十分小巧紧凑:专注于扩展 Java 标准库,编译阶段的大量内联操作意味像 map/filter/reduce 等管道结构函数将被编译成类似于命令式语言的代码。

Anko 与 Kovenant 等框架的出现意味着在 Android 开发者中 Kotlin 开始变得流行起来。如果你正在从事 Android 相关的工作,相信你很快就会获得好的工作。你可以阅读这份 Square 公司开发者 JakeWharton 的报告,了解用 Kotlin 进行 Android 开发的体验。

Kotlin 允许你继续使用你的工作效率提升工具。IntelliJ 的 IDE 对 Kotlin 的支持十分完善:你可以对代码进行重构、搜索、导航以及使用自动完成,而且 IDE 充分支持调试、单元测试、性能分析等等功能。

除了 Android,我认为 Kotlin 还非常适用于企业中 Java 的应用场景。如果你的工作是整天埋头于大公司的代码库中,那么当 Kotlin 1.0 版本正式发布时你应该尽快去了解一下:

由知名公司为它提供强大的商业支持。 JetBrains 这家公司 有一个高度称职的大团队致力于该项目,有稳定的商业模式甚至在自己的部分旗舰产品中使用 Kotlin,这表明短期内 Kotlin 不会被放弃。

使用 Kotlin 风险较低:可以由一两个感兴趣的团队成员在项目中小范围的试验 Kotlin,这并不会扰乱你的项目,因为 Kotlin 的类对外提供的 Java API 看起来就与普通的 Java 代码一样。

因为 Kotlin 十分注重语法的可读性,代码审查不会成为问题,对 Kotlin 不熟悉的团队成员仍然能够完成该工作。

Kotlin 基于 Java 6,所以假如你难以在项目中升级使用新版本的 JVM,你可以使用 Kotlin。

今年早些时候我向 Swiss Re 这家瑞士再保险公司的团队(他们使用 Java 和 .NET)展示了 Kotlin。首先我定义了一个简单的 Java 类包含一些字段以及 toString、equals、hashCode 等方法,大概有 50 行代码。然后我将它转换成 Kotlin 代码(大部分是自动完成的),结果仅剩 1 行代码,接着我还演示了其它节省时间的特性。他们看过后对 Kotlin 充满了热情并且认为 Kotlin 是它们项目中 C# 语言的一个潜在竞争对手。

我认为 Kotlin 正中企业 Java 开发者的红心,所以尽管 Kotlin 是免费的,JetBrains 还是能够通过它增加商业版本 IDE 的销售来赚大钱。这将激励他们根据用户的意愿持续改进它。

与此相比,对于那些由不相关产品资助的语言开发者来说,当用户需求与之前的设计理念冲突时,他们很少会因此作出调整。

特性

Kotlin 作为一门新的编程语言能够脱颖而出,是因为它关注生态系统:JetBrains 懂得生产力的高低更多的取决于生态系统而不是便捷的语法。

尽快如此,Kotlin 还是有许多有用的特性能让你编码的过程变得愉快:

我们已经提过 null 安全(可选),它能够让编译器系统的标记潜在的空指针引用。与一些语言不同的是它不涉及 option 类,因此是零开销的,并且还有其它语言特性确保它不会造成不便。

精炼的语法:无处不在的类型推断、简单的函数只需要一行、简单的结构以及 JavaBeans 也只需要一行就能声明、真正的属性——可以在背后自动生成 getFoo/setFoo 方法用于与 Java 进行交互、函数可以独立存在于类之外。

异常均为非检查型。(译者注:感兴趣的可以阅读一下Java 理论与实践: 关于异常的争论)

使用 data class 关键字创建数据类会自动生成通用方法,例如 equals、hashCode、toString 以及 copy 和 componentN(同时声明多个变量时会调用该方法)。这将帮助你在不使用构建器的情况下便捷的获得不变类(immutable classes)。

但如果你需要构造复杂的结构体,借助类型安全的构建器这个特性可以简洁的实现。如果你使用 Google Protocol Buffers 来存储结构化数据, 通过 KBuilders 这个库也能很轻易做到。

支持函数式编程以及零开销的 lambda 表达式,能够在 Java 的集合中做 Map、Filter、Folder 等处理。Kotlin 的类型系统能够自动识别可变或者不可变的集合。

扩展函数特性能够让你在不改动源码的情况下为类添加方法。乍眼一看以为是为了避免写出像 FooUtils 这种风格工具类的语法糖,不过随着使用的加深,你会认识到它不仅能帮你更加容易的通过自动完成使用方法,还能协助你集成现有的 Java API 以及借助其它 Kotlin 特性构建功能强大的扩展。

支持运算符重载,但是不会像 Scala 或者 Perl 那样出现难以理解的代码。运算符被映射成相应名字的方法,通过重写这些方法改变运算符的行为(包括函数调用),但是不能定义新的运算符。这使得程序能够兼顾功能与可读性。

Kotlin 没有宏或者其它的方式来重定义语言,但是通过这些精心设计的特性能够使第三方库自由的对它进行扩展,官方对集合类进行的扩展也只是小试牛刀而已,请看以下例子。

想使用 fibers、actors 和 Go 风格的 channels?一个名为 Quasar 的库已经为你实现了。

使用 Markdown 替代 HTML 来编写 API 文档,这样编写 JavaDocs 可比以前舒适多了。(译者注:JetBrains 提供了相应的文档生成器 Dokka)

更好用的泛型。如果你没有完全掌握泛型参数中 super 以及 extends 的含义,别担心,这不是你的错。Java 的泛型的确令人费解,Kotlin 解决了这个问题。

委托是一个大家都知道的设计模式,Kotlin 原生支持它。

== 运算符的行为符合预期(译者注:简单来说 a == b 相当于 a.equals(b);新增了 === 运算符,用来判断运算符两边是否指向同一个对象)

想快速便捷的进行异步编程吗?当然!

字符串插值“可以使用这样的写法在字符创中直接引用变量 {this.example}”

函数中的参数可以指定默认值、使用可变长度以及通过参数名传参。

还有许多的调整与优化。假如 Java 中有某些让你觉得困扰的问题,我相信 Kotlin 一定已经把它处理好了。

现在就来试用一下!

跟很多现代编程语言一样,Kotlin 可以通过网页浏览器来进行体验。不过跟其他语言不一样的是,Kotlin 的实验网站提供了一个成熟的 IDE,包括响应很快的自动完成,实时的后台编译,甚至还有在线的静态分析!

在线试用一下吧

好了,让我们继续接下来的内容

目前存在哪些问题?

生活中没有什么是完美的,包括 Kotlin。以下是我尝试这门语言时遇到的一些问题。

最大的问题是不够成熟,因为 Kotlin 目前还处于 Beta 阶段,这意味着:

每更新一个版本,语法、ABI 以及标准库就变一次。好消息是这些变化通常比较微小,可以借助 IntelliJ IDE 来自动升级你的代码,所以这个过程并不会太麻烦。

Java-to-Kotlin 的转换工具(J2K)还没有完成。它偶尔会大规模的破坏和默默地擦除 Java 8 中的 Lambdas(修改:2015 年 10 月:M13 版本的转换工具已经可以正确地处理 Java 8 的特性了)。由它转换而成的代码并不总是最好的写法,但是 JetBrains 为这个工具付出了大量努力,它已经是我用过的语言转换工具中最好的了。所以我并不太担心这个问题,这个转换器正在迅速的改进中,变得越来越成熟。

你会遇到编译器错误。尽管我的程序并不大,但还是会发生无法编译的情况,甚至错误的编译结果。诊断这些问题并不难,但终归还是影响了开发的体验。

你会遇到 IDE 内部错误。当这个错误发生时,IntelliJ IDE 会弹出一个悬浮窗口,附带向 JetBrains 报告的选项。大部分错误无需理会,不过依然会使人厌烦。

偶尔会出现无法加载提示文档的错误(修改:M14 版本发布后,这个问题已被修复)

目前 JetBrains 正致力于完善发布 1.0 版本而不是添加新的功能,期待这些问题能够得到修复。

第二个我遇到的比较大的问题是,有时与 Java 的交互会受到局限。

一个典型的 Bug 是 Java 的类型系统无法防止你改变 Map 中 Key 的类型。按理来说,这样操作应该导致编译器报错,例如使用类型错误的 Key 删除元素。有些 JDK 中的集合使用了泛型,它们某些重要方法的泛型参数是 Obejct,所以编译器不会提示。当在 IntelliJ IDE 中编写 Java 代码时会有静态分析的警告,但是目前 Kotlin 环境还没有这个功能。因为 Kotlin 使用的是 Java 的集合框架没有自己实现,所以这导致了一些类型安全方面的问题,我已经遇到好几次了。

(修改:1.0 Beta 版本中这个问题已经解决了,Java 中集合框架的类型安全缺陷在 Kotlin 已经不复存在。哟呵!)

另一个例子是,当调用或使用 Java 代码时 Kotlin 的 Null 安全特性无法发挥作用(可以借助注解弥补)。作为 Kotlin 的初学者,刚开始你可能会写许多调用 Java 库的代码,但是因为以上的问题它们并没有你想象中那么好用。这种情况的改善只能等待 Kotlin 使用人数的增长。JetBrains 一直在尝试使 Null 安全特性能体现在 Java 交互中,这种想法是好的,但有时考虑并太周全。(修改: 从 M13 版本开始,在 Java 代码中将自动以 @NotNull @Nullable 等注解实现 Kotlin 的 Null 安全特性)

虽然有以上的问题存在,但同时也使得我们能更流畅的使用 Java API,我觉得这种权衡是值得的,只是在开发中要注意。

其它需要考虑的问题:

Kotlin 的社区还比较小。虽然目前没有多少 Kotlin 的库可以使用,但是凭借优秀的 Java 交互能力,Kotlin 可以使用现有成熟的 Java 库。

如果你喜欢看书来学习,那么你需要等到今年晚些时候才能看到 Kotlin 开发者写的书(译者注:Kotlin in Action)

纯粹的函数编程风格开发者可能会觉得类型系统中缺乏一些 Scala 或 Haskell 拥有的高级功能。如果你对类型系统一些功能比较看重,那么 Kotlin 可能不适合你。

Kotlin 还能编译成 Javascript 代码,但是比较少用,所以可能会遇到更多的问题,这是我从论坛中得到的印象。(修改: 目前 Kotlin 的开发重心在于完成 1.0 版本并使其稳定运行在 JVM 中,Javascript 方面的问题将会在 1.0 发布后着手解决)

没有标准的编程风格指南,目前 Kotlin 提供了多种语法可供选择。不同人写出来的 Kotlin 代码很可能完全不一样。这与 Go 严格的风格形成了鲜明的对比。(修改: Kotlin 1.0 版本开始,一些灵活的语法已经被移除了,例如现在重载运算符以及定义中缀函数时必须分别使用 operator 和 infix 关键字进行标记)

Kotlin 的编译速度稍稍慢于 Java,以及 IntelliJ IDE 的智能提示反应有点缓慢,不算严重而且比 Scala 快多了。(修改:Kotlin 1.0 开始编译速度有了明显提升)

Kotlin 有一个 Eclipse 插件,但是很明显没有 IntelliJ 的好用。

Kotlin 在某些方面比 Java 要严格。它不会自动将 Int 转换为 Long 类型,需要开发者显示的转换。这是因为 Kotlin 关注正确性和试图解决《Java Puzzlers》一书中提出的问题。JetBrains 声称他们已经搞定一半了。

Kotlin 基于 Java 6,因此会受到它的局限。Kotlin 与 C# 在很多领域都很相似甚至比 C# 做得更好,但是它缺少一些功能,例如 Java 平台尚未支持的某些数据类型。

为什么应该开始考虑使用 JVM

最近一段时间我遇到了很多使用动态脚本语言(JavaScript 或者 Go —— 译者注:Go 应该是静态编译型语言)的创业公司。

我在 Bitcoin Space 工作的时候,使用动态语言是非常痛苦的事情。在这些语言里没有安全性的类型,这已经导致了巨大的货币损失。Go 比较少出错,但是在基础层面上给人的体验依然很差,比如说缺少好的调试工具,快速 GC 机制,稳健的管理器以及可靠的分析工具。

过去 15 年或者更长时间里,Java 变得越来越健壮,越来越冗长,甚至有过度设计的迹象,这些变化很大程度上源于它的声誉。企业级 Java 类的名字 PathVariableMapMethodArgumentResolver 就是例证。在很长一段时间里我没有考虑 JVM,我确信这种环境并不适合我。

最终我因为 Android 被迫回到 Java,发现 Java 的开发环境已经改变了。虽然 XML 仍然不合时宜的频繁出现在各种场合,但是一些基础功能十分完善,令人印象深刻。 IntelliJ 是比 Eclipse 更快并且更智能的 IDE。Maven 一出现就得到了迅速的发展,拥有许多原本我想要其它构建 / 依赖系统增加的功能。较新的 Web 框架像 Ninja 和 Play 从类似 Ruby on Rails 的框架中学到了轻量简洁。有大量的库可供使用。硬件性能变得更高以及 JVM 变得更有效率,等等转变。

没有真正改变的是语言本身,Java 代码写起来依然是令人不快的冗长。

现在有了 Kotlin,完全无需承受离开 Java 现有的生态系统的疼苦。你可以编写更富有表现力的代码,但是却比脚本语言更简洁,同时拥有更好的性能和更少的错误。

如果你喜欢 JavaScript,可以尝试 Kotlin 的 JS 后端,或者在 Nashorn JS 引擎里运行你现有的代码。

最后,如果你喜欢 Go 语言是因为它可以编译独立运行的程序,那么试试 javapackager 工具。Kotlin 在本地为每个平台创建了捆绑包,这意味着在 linux 上不需要 JRE 的依赖就可以独立自主的获取 DEBs(linux 的安装包)或者压缩包。当然,它拆包之后不是单个文件而是单个目录,从部署的角度来看并不难操作。

简而言之:如果你之前因为看 Java 不顺眼而忽略了 JVM 的生态系统,那么你应该借着 Kotlin 这门新语言进入这个世界瞧瞧。

quasarjava的简单介绍

如何学习Kotlin编程语言

为什么说 Kotlin 是优秀的

本文不会像一般介绍语言的文章那样,一开头就罗列出语言那些酷炫的特性,我们稍后再来探讨这些内容。

首先我将介绍一些其它的信息,因为2013 年一项研究显示,当开发者评估一种编程语言时生态系统要比语言特性更重要。这符合我个人的经验,下面就让我开始介绍吧:

Kotlin 被编译成 JVM 字节码或者 JavaScript 代码。Java 开发者将会是对它最感兴趣的人,不过对于使用垃圾收集运行时语言的开发者而言它也具有一定的吸引力,比如 Scala、Go、Python、Ruby 和 JavaScript 等语言。

Kotlin 来自业界,而不是学术界。它解决了开发者现今面临的实际问题。例如它的类型系统可以帮助你避免空指针异常。

切换到 Kotlin 无需成本!它是开源的但这不是重点,重点是它提供了一个高质量的一键从 Java 转换到 Kotlin 的工具,并且十分关注 Java 二进制文件的兼容性。你可以将现有 Java 项目的一次性转换成 Kotlin 项目,而该项目仍将可以正常编译,即使这是一个包含上百万行代码的复杂程序。

显然你可以从上文得知,Kotlin 程序能够使用所有现存的 Java 框架和库,甚至那些依赖注解处理的高级框架。它们之间的交互是无缝的,不需要包装或者适配层。Kotlin 可以整合 Maven,Gradle 以及其它构建系统。

它十分平易近人,语法精炼直观,仅仅是阅读语言参考文档几个小时就能学会使用。Kotlin 看起来十分像 Scala 但是更加简洁并且兼顾了可读性。

它不遵循特定的编程哲学,例如极度的函数式编程或者面向对象编程风格。

它不会增加运行时的开销。Kotlin 的标准库十分小巧紧凑:专注于扩展 Java 标准库,编译阶段的大量内联操作意味像 map/filter/reduce 等管道结构函数将被编译成类似于命令式语言的代码。

Anko 与 Kovenant 等框架的出现意味着在 Android 开发者中 Kotlin 开始变得流行起来。如果你正在从事 Android 相关的工作,相信你很快就会获得好的工作。你可以阅读这份 Square 公司开发者 JakeWharton 的报告,了解用 Kotlin 进行 Android 开发的体验。

Kotlin 允许你继续使用你的工作效率提升工具。IntelliJ 的 IDE 对 Kotlin 的支持十分完善:你可以对代码进行重构、搜索、导航以及使用自动完成,而且 IDE 充分支持调试、单元测试、性能分析等等功能。

除了 Android,我认为 Kotlin 还非常适用于企业中 Java 的应用场景。如果你的工作是整天埋头于大公司的代码库中,那么当 Kotlin 1.0 版本正式发布时你应该尽快去了解一下:

由知名公司为它提供强大的商业支持。 JetBrains 这家公司 有一个高度称职的大团队致力于该项目,有稳定的商业模式甚至在自己的部分旗舰产品中使用 Kotlin,这表明短期内 Kotlin 不会被放弃。

使用 Kotlin 风险较低:可以由一两个感兴趣的团队成员在项目中小范围的试验 Kotlin,这并不会扰乱你的项目,因为 Kotlin 的类对外提供的 Java API 看起来就与普通的 Java 代码一样。

因为 Kotlin 十分注重语法的可读性,代码审查不会成为问题,对 Kotlin 不熟悉的团队成员仍然能够完成该工作。

Kotlin 基于 Java 6,所以假如你难以在项目中升级使用新版本的 JVM,你可以使用 Kotlin。

今年早些时候我向 Swiss Re 这家瑞士再保险公司的团队(他们使用 Java 和 .NET)展示了 Kotlin。首先我定义了一个简单的 Java 类包含一些字段以及 toString、equals、hashCode 等方法,大概有 50 行代码。然后我将它转换成 Kotlin 代码(大部分是自动完成的),结果仅剩 1 行代码,接着我还演示了其它节省时间的特性。他们看过后对 Kotlin 充满了热情并且认为 Kotlin 是它们项目中 C# 语言的一个潜在竞争对手。

我认为 Kotlin 正中企业 Java 开发者的红心,所以尽管 Kotlin 是免费的,JetBrains 还是能够通过它增加商业版本 IDE 的销售来赚大钱。这将激励他们根据用户的意愿持续改进它。

与此相比,对于那些由不相关产品资助的语言开发者来说,当用户需求与之前的设计理念冲突时,他们很少会因此作出调整。

特性

Kotlin 作为一门新的编程语言能够脱颖而出,是因为它关注生态系统:JetBrains 懂得生产力的高低更多的取决于生态系统而不是便捷的语法。

尽快如此,Kotlin 还是有许多有用的特性能让你编码的过程变得愉快:

我们已经提过 null 安全(可选),它能够让编译器系统的标记潜在的空指针引用。与一些语言不同的是它不涉及 option 类,因此是零开销的,并且还有其它语言特性确保它不会造成不便。

精炼的语法:无处不在的类型推断、简单的函数只需要一行、简单的结构以及 JavaBeans 也只需要一行就能声明、真正的属性——可以在背后自动生成 getFoo/setFoo 方法用于与 Java 进行交互、函数可以独立存在于类之外。

异常均为非检查型。(译者注:感兴趣的可以阅读一下Java 理论与实践: 关于异常的争论)

使用 data class 关键字创建数据类会自动生成通用方法,例如 equals、hashCode、toString 以及 copy 和 componentN(同时声明多个变量时会调用该方法)。这将帮助你在不使用构建器的情况下便捷的获得不变类(immutable classes)。

但如果你需要构造复杂的结构体,借助类型安全的构建器这个特性可以简洁的实现。如果你使用 Google Protocol Buffers 来存储结构化数据, 通过 KBuilders 这个库也能很轻易做到。

支持函数式编程以及零开销的 lambda 表达式,能够在 Java 的集合中做 Map、Filter、Folder 等处理。Kotlin 的类型系统能够自动识别可变或者不可变的集合。

扩展函数特性能够让你在不改动源码的情况下为类添加方法。乍眼一看以为是为了避免写出像 FooUtils 这种风格工具类的语法糖,不过随着使用的加深,你会认识到它不仅能帮你更加容易的通过自动完成使用方法,还能协助你集成现有的 Java API 以及借助其它 Kotlin 特性构建功能强大的扩展。

支持运算符重载,但是不会像 Scala 或者 Perl 那样出现难以理解的代码。运算符被映射成相应名字的方法,通过重写这些方法改变运算符的行为(包括函数调用),但是不能定义新的运算符。这使得程序能够兼顾功能与可读性。

Kotlin 没有宏或者其它的方式来重定义语言,但是通过这些精心设计的特性能够使第三方库自由的对它进行扩展,官方对集合类进行的扩展也只是小试牛刀而已,请看以下例子。

想使用 fibers、actors 和 Go 风格的 channels?一个名为 Quasar 的库已经为你实现了。

使用 Markdown 替代 HTML 来编写 API 文档,这样编写 JavaDocs 可比以前舒适多了。(译者注:JetBrains 提供了相应的文档生成器 Dokka)

更好用的泛型。如果你没有完全掌握泛型参数中 super 以及 extends 的含义,别担心,这不是你的错。Java 的泛型的确令人费解,Kotlin 解决了这个问题。

委托是一个大家都知道的设计模式,Kotlin 原生支持它。

== 运算符的行为符合预期(译者注:简单来说 a == b 相当于 a.equals(b);新增了 === 运算符,用来判断运算符两边是否指向同一个对象)

想快速便捷的进行异步编程吗?当然!

字符串插值“可以使用这样的写法在字符创中直接引用变量 {this.example}”

函数中的参数可以指定默认值、使用可变长度以及通过参数名传参。

还有许多的调整与优化。假如 Java 中有某些让你觉得困扰的问题,我相信 Kotlin 一定已经把它处理好了。

现在就来试用一下!

跟很多现代编程语言一样,Kotlin 可以通过网页浏览器来进行体验。不过跟其他语言不一样的是,Kotlin 的实验网站提供了一个成熟的 IDE,包括响应很快的自动完成,实时的后台编译,甚至还有在线的静态分析!

在线试用一下吧

好了,让我们继续接下来的内容

目前存在哪些问题?

生活中没有什么是完美的,包括 Kotlin。以下是我尝试这门语言时遇到的一些问题。

最大的问题是不够成熟,因为 Kotlin 目前还处于 Beta 阶段,这意味着:

每更新一个版本,语法、ABI 以及标准库就变一次。好消息是这些变化通常比较微小,可以借助 IntelliJ IDE 来自动升级你的代码,所以这个过程并不会太麻烦。

Java-to-Kotlin 的转换工具(J2K)还没有完成。它偶尔会大规模的破坏和默默地擦除 Java 8 中的 Lambdas(修改:2015 年 10 月:M13 版本的转换工具已经可以正确地处理 Java 8 的特性了)。由它转换而成的代码并不总是最好的写法,但是 JetBrains 为这个工具付出了大量努力,它已经是我用过的语言转换工具中最好的了。所以我并不太担心这个问题,这个转换器正在迅速的改进中,变得越来越成熟。

你会遇到编译器错误。尽管我的程序并不大,但还是会发生无法编译的情况,甚至错误的编译结果。诊断这些问题并不难,但终归还是影响了开发的体验。

你会遇到 IDE 内部错误。当这个错误发生时,IntelliJ IDE 会弹出一个悬浮窗口,附带向 JetBrains 报告的选项。大部分错误无需理会,不过依然会使人厌烦。

偶尔会出现无法加载提示文档的错误(修改:M14 版本发布后,这个问题已被修复)

目前 JetBrains 正致力于完善发布 1.0 版本而不是添加新的功能,期待这些问题能够得到修复。

第二个我遇到的比较大的问题是,有时与 Java 的交互会受到局限。

一个典型的 Bug 是 Java 的类型系统无法防止你改变 Map 中 Key 的类型。按理来说,这样操作应该导致编译器报错,例如使用类型错误的 Key 删除元素。有些 JDK 中的集合使用了泛型,它们某些重要方法的泛型参数是 Obejct,所以编译器不会提示。当在 IntelliJ IDE 中编写 Java 代码时会有静态分析的警告,但是目前 Kotlin 环境还没有这个功能。因为 Kotlin 使用的是 Java 的集合框架没有自己实现,所以这导致了一些类型安全方面的问题,我已经遇到好几次了。

(修改:1.0 Beta 版本中这个问题已经解决了,Java 中集合框架的类型安全缺陷在 Kotlin 已经不复存在。哟呵!)

另一个例子是,当调用或使用 Java 代码时 Kotlin 的 Null 安全特性无法发挥作用(可以借助注解弥补)。作为 Kotlin 的初学者,刚开始你可能会写许多调用 Java 库的代码,但是因为以上的问题它们并没有你想象中那么好用。这种情况的改善只能等待 Kotlin 使用人数的增长。JetBrains 一直在尝试使 Null 安全特性能体现在 Java 交互中,这种想法是好的,但有时考虑并太周全。(修改: 从 M13 版本开始,在 Java 代码中将自动以 @NotNull @Nullable 等注解实现 Kotlin 的 Null 安全特性)

虽然有以上的问题存在,但同时也使得我们能更流畅的使用 Java API,我觉得这种权衡是值得的,只是在开发中要注意。

其它需要考虑的问题:

Kotlin 的社区还比较小。虽然目前没有多少 Kotlin 的库可以使用,但是凭借优秀的 Java 交互能力,Kotlin 可以使用现有成熟的 Java 库。

如果你喜欢看书来学习,那么你需要等到今年晚些时候才能看到 Kotlin 开发者写的书(译者注:Kotlin in Action)

纯粹的函数编程风格开发者可能会觉得类型系统中缺乏一些 Scala 或 Haskell 拥有的高级功能。如果你对类型系统一些功能比较看重,那么 Kotlin 可能不适合你。

Kotlin 还能编译成 Javascript 代码,但是比较少用,所以可能会遇到更多的问题,这是我从论坛中得到的印象。(修改: 目前 Kotlin 的开发重心在于完成 1.0 版本并使其稳定运行在 JVM 中,Javascript 方面的问题将会在 1.0 发布后着手解决)

没有标准的编程风格指南,目前 Kotlin 提供了多种语法可供选择。不同人写出来的 Kotlin 代码很可能完全不一样。这与 Go 严格的风格形成了鲜明的对比。(修改: Kotlin 1.0 版本开始,一些灵活的语法已经被移除了,例如现在重载运算符以及定义中缀函数时必须分别使用 operator 和 infix 关键字进行标记)

Kotlin 的编译速度稍稍慢于 Java,以及 IntelliJ IDE 的智能提示反应有点缓慢,不算严重而且比 Scala 快多了。(修改:Kotlin 1.0 开始编译速度有了明显提升)

Kotlin 有一个 Eclipse 插件,但是很明显没有 IntelliJ 的好用。

Kotlin 在某些方面比 Java 要严格。它不会自动将 Int 转换为 Long 类型,需要开发者显示的转换。这是因为 Kotlin 关注正确性和试图解决《Java Puzzlers》一书中提出的问题。JetBrains 声称他们已经搞定一半了。

Kotlin 基于 Java 6,因此会受到它的局限。Kotlin 与 C# 在很多领域都很相似甚至比 C# 做得更好,但是它缺少一些功能,例如 Java 平台尚未支持的某些数据类型。

为什么应该开始考虑使用 JVM

最近一段时间我遇到了很多使用动态脚本语言(JavaScript 或者 Go —— 译者注:Go 应该是静态编译型语言)的创业公司。

我在 Bitcoin Space 工作的时候,使用动态语言是非常痛苦的事情。在这些语言里没有安全性的类型,这已经导致了巨大的货币损失。Go 比较少出错,但是在基础层面上给人的体验依然很差,比如说缺少好的调试工具,快速 GC 机制,稳健的管理器以及可靠的分析工具。

过去 15 年或者更长时间里,Java 变得越来越健壮,越来越冗长,甚至有过度设计的迹象,这些变化很大程度上源于它的声誉。企业级 Java 类的名字 PathVariableMapMethodArgumentResolver 就是例证。在很长一段时间里我没有考虑 JVM,我确信这种环境并不适合我。

最终我因为 Android 被迫回到 Java,发现 Java 的开发环境已经改变了。虽然 XML 仍然不合时宜的频繁出现在各种场合,但是一些基础功能十分完善,令人印象深刻。 IntelliJ 是比 Eclipse 更快并且更智能的 IDE。Maven 一出现就得到了迅速的发展,拥有许多原本我想要其它构建 / 依赖系统增加的功能。较新的 Web 框架像 Ninja 和 Play 从类似 Ruby on Rails 的框架中学到了轻量简洁。有大量的库可供使用。硬件性能变得更高以及 JVM 变得更有效率,等等转变。

没有真正改变的是语言本身,Java 代码写起来依然是令人不快的冗长。

现在有了 Kotlin,完全无需承受离开 Java 现有的生态系统的疼苦。你可以编写更富有表现力的代码,但是却比脚本语言更简洁,同时拥有更好的性能和更少的错误。

如果你喜欢 JavaScript,可以尝试 Kotlin 的 JS 后端,或者在 Nashorn JS 引擎里运行你现有的代码。

最后,如果你喜欢 Go 语言是因为它可以编译独立运行的程序,那么试试 javapackager 工具。Kotlin 在本地为每个平台创建了捆绑包,这意味着在 linux 上不需要 JRE 的依赖就可以独立自主的获取 DEBs(linux 的安装包)或者压缩包。当然,它拆包之后不是单个文件而是单个目录,从部署的角度来看并不难操作。

简而言之:如果你之前因为看 Java 不顺眼而忽略了 JVM 的生态系统,那么你应该借着 Kotlin 这门新语言进入这个世界瞧瞧。

越来越多的公司注重保密,那么商业间谍是否真存在于我们的工作中?

重要事件回顾,智览网安行业发展。近日国内外网安行业发生了哪些重要事件,呈现出了怎样的发展态势呢?中国网安科技情报研究团队将从行业大角度出发,带领大家回顾近日国内外行业的重要事件,探究其中的发展态势。

事件概览:

1、腾讯发布主机安全旗舰版

2、《上海市反间谍安全防范条例》发布

3 、网络安全技术应用试点示范工作启动

4、国标《重要数据识别指南》起草发生重大修改

5、瑞士军队要求其人员使用Threema即时通讯应用程序

6、取证专家在PC上保留了谋杀快照入狱

7、网络窃贼突袭Grass Valley

8、超过一半的中小企业经历过网络安全漏洞攻击

9、美国对商业间谍软件发出警告

10、研究人员在十几个广泛使用的URL解析器库中发现了错误

11、Abcbot僵尸网络链接到Xanthe Cryptomining恶意软件的运营商

12、APT黑客在最近的恶意软件攻击中达成自己的目标

13、组织每周遭受925次攻击,创历史新高

14、新的ZLoader恶意软件活动袭击了111个国家的2000多名受害者

国内

01 腾讯发布主机安全旗舰版

2022年1月9日下午,“腾讯主机安全旗舰版”发布会在线上召开。焕新升级的云主机安全旗舰版,以新引擎、新能力、新体验为特点的云原生安全能力,助力入侵检测、入侵溯源、文件查杀、漏洞管理及安全预警,为企业打造云上安全防护闭环。

据腾讯安全资深产品专家张殷介绍,腾讯安全基于用户核心需求,从“预防→防御→检测→响应”四个阶段构建主机安全防护体系。同时,云主机安全旗舰版依托七大核心引擎、百万级终端防护、百亿威胁数据,帮助企业实时防护核心资产安全,满足等保合规、资产风险管理及入侵防护需求。

张殷表示:“旗舰版新增安全播报、安全防护模块,支持混合云统一管理,帮助企业实现资产可视化,并提供一键检测、自动修复、镜像快照功能,实现分钟级漏洞检测效率,在优化扫描性能的同时提升精准度,让安全更简单!”

目前,腾讯云主机安全产品已广泛覆盖于金融、媒体、汽车、交通、电商、教育等泛互联网行业,并在头豹沙利文《2021年中国云主机市场安全报告》中蝉联领导者象限。

02 《上海市反间谍安全防范条例》发布

近日,上海市第十五届人民代表大会常务委员会第三十八次会议正式通过《上海市反间谍安全防范条例》(以下简称“《条例》”),自2022年1月1日起施行。《条例》共七章三十五条,进一步完善了反间谍安全防范法律体系,依法维护国家安全。

《条例》在第一章总则中指出,国家安全机关是反间谍安全防范工作的主管机关。公安、保密以及网信、经济信息化、商务、教育、科技、民族宗教、规划资源、住房城乡建设管理、农业农村、文化旅游、金融监管、外事、国资、海关等有关部门应当与国家安全机关密切配合,在各自职责范围内做好反间谍安全防范工作。

有关部门及其工作人员对履行反间谍安全防范职责中知悉的国家秘密、工作秘密、商业秘密、个人隐私和个人信息等,应当严格保密。同时,上海市加强与长江三角洲区域和国内其他省、自治区、直辖市反间谍安全防范工作的协作交流,推动实现信息互通、资源共享、处置联动,增强反间谍安全防范工作实效。

《条例》在第二章工作职责中指出,上海市加强对经济、金融、科技、生物、网络、通信、数据等领域的反间谍安全风险防范。国家安全机关应当会同行业主管部门定期开展反间谍安全风险评估,动态调整反间谍安全防范重点事项和重点范围。

政府有关部门与国家安全机关应当建立综合监管工作机制,在审查和监管涉及国家安全事项的建设项目时,开展执法联动,加强数据信息共享,并在各自职责范围内,依法督促建设项目的建设、所有、使用和管理方落实相关安全防范工作。

《条例》在第三章安全防范中指出,反间谍安全防范重点单位以外的涉及经济安全、科技安全、新型领域安全等重点领域的单位,除遵守本条例第十六条规定外,还应当履行下列反间谍安全防范义务:

(1)涉及国民经济命脉的重要行业和关键领域的单位,应当加强反间谍安全风险管控,定期开展资金流向、数据处理、技术应用、人才交流、货物流通等方面的反间谍安全防范工作自查;(2)涉及科技安全的高等院校、科研机构、国防军工等单位,应当加强涉密专家、高新技术项目、试验场所等方面的反间谍安全防范管理;(3)涉及生物、数据等新型领域安全的单位,应当在国家安全机关和有关行业主管部门的指导下,根据新的安全需要加强相应领域的反间谍安全防范工作。

《条例》在第四章宣传教育中指出,上海市在每年4月15日全民国家安全教育日等重要时间节点组织开展反间谍安全防范宣传教育活动。

国家安全机关应当加强爱国主义教育、国家安全教育,开展有关反间谍安全防范的普法教育、风险警示教育、防范常识教育,指导机关、人民团体、企业事业组织和其他社会组织开展反间谍安全防范宣传教育培训工作;会同有关部门,组织、动员居民委员会、村民委员会开展反间谍安全防范宣传教育工作。

03 网络安全技术应用试点示范工作启动

工业和信息化部、国家互联网信息办公室、水利部、国家卫生健康委员会、应急管理部、中国人民银行、国家广播电视总局、中国银行保险监督管理委员会、中国证券监督管理委员会、国家能源局、国家铁路局、中国民用航空局等十二部门近日联合印发通知,组织开展网络安全技术应用试点示范工作,将面向公共通信和信息服务、能源、交通、水利、应急管理、金融、医疗、广播电视等重要行业领域网络安全保障需求,从云安全、人工智能安全、大数据安全、车联网安全、物联网安全、智慧城市安全、网络安全共性技术、网络安全创新服务、网络安全“高精尖”技术创新平台9个重点方向,遴选一批技术先进、应用成效显著的试点示范项目。

04 国标《重要数据识别指南》起草发生重大修改

《数据安全法》和《网络数据安全管理条例(征求意见稿)》(以下简称《条例》)均提出,国家建立数据分类分级保护制度。按照数据对国家安全、公共利益或者个人、组织合法权益的影响和重要程度,将数据分为一般数据、重要数据、核心数据,不同级别的数据采取不同的保护措施。不仅如此,《条例》还专设第五章“重要数据安全”。这意味着,我国正在通过立法建立重要数据安全监管制度,重要数据处理者要履行一系列法定义务。因此,什么是“重要数据”,成为我国数据安全工作中急迫需要解决的问题。2020年,全国信息安全标准化技术委员会立项制定国家标准《重要数据识别指南》。2021年9月,标准起草组在小贝说安全公布了最新的标准草案。《条例》在2021年11月14日公开征求意见后,根据全国信息安全标准化技术委员会秘书处的工作安排,标准起草组又对《重要数据识别指南》作了修改。本次修改后,标准内容发生重大变化,起草组在此公开标准草案最新版,并披露了修改思路。需要指出,该版本是经《重要数据识别指南》编制组授权,在小贝说安全首发,仅供各方参考和提出意见、建议。据悉,标准即将在全国信息安全标准化技术委员会官方网站正式征求意见。

近期,起草中的国家标准《重要数据识别指南》发生重大修改。2022年1月7日,全国信息安全标准化技术委员会秘书处组织了对该标准的审议,根据会议意见,编制组已修改形成征求意见稿。本期文章将介绍此次重大修改的基本思路,并经编制组授权首次公布标准当前进展情况。标准正式文本以近期官方网站公布为准。

标准的主要改动体现在,取消了对重要数据的“特征”说明,因为这些特征依然不可避免地涉及行业分类,对各地方、各部门制定部门、本行业以及本系统、本领域的重要数据识别细则带来了不必要的约束。为此,标准编制组进一步调研了全球其他国家在网络安全、数据安全领域制定类似标准的情况,并选择了美国制定的《国家安全系统识别指南》作为参照。该指南已运行13年之久,其可操作性已得到充分证明。目前,《重要数据识别指南》的起草思路与其类似。

国外

01 瑞士军队要求其人员使用Threema即时通讯应用程序

据1月 9日报,瑞士军队已经禁止了Signal、Telegram和WhatsApp等外国即时通讯应用程序,只允许其成员使用在瑞士开发的Threema消息传递应用程序。

Threema是即时通讯工具,旨在生成尽可能少的用户数据。所有通信都是端到端加密的,并且该应用程序是开源的。Threema不要求用户在注册时提供电话号码或电子邮件地址,这意味着无法通过这些数据链接用户的身份。

最近,媒体分享了一份联邦调查局的培训文件,该文件揭示了美国执法部门的监视能力,详细说明了可以从加密的消息应用程序中提取哪些数据。

该文件分析了对多个加密消息传递应用程序的合法访问,包括iMessage、Line、Signal、Telegram、Threema、Viber、WhatsApp、WeChat或Wickr。

培训文件中报告的信息提供了执法部门访问流行消息传递应用程序内容的能力的最新情况。联邦调查局无法访问Signal、Telegram、Threema、Viber、WeChat和Wickr的消息内容,同时他们可以有限地访问来自iMessage、Line和WhatsApp的加密通信内容。

无论如何,根据单个加密消息传递应用程序,执法部门可以提取不同的元数据,从而可以揭开最终用户的面纱。

奇怪的是,瑞士军队要求军事人员使用Threema作为私人用户,而不是使用称为Threema Work的商业版本。

02 取证专家在PC上保留了谋杀快照入狱

据1月10日报道,一名警方法医专家因将数千张来自警方计算机系统的严峻图像下载到他自己的计算机上而被送进英国的监狱。

斯塔福德附近小海伍德的56岁的达伦·柯林斯(Darren Collins)承认非法访问犯罪现场的照片和对谋杀受害者进行的尸检。

皇家检察院(CPS)表示,柯林斯利用他的数字专业知识创建了自己的访问数据库的途径,而他无权这样做,被描述为一种’后门’技术,避免了适当和合法的访问程序。

柯林斯将这些图像复制到USB记忆棒上,将存储设备带回家,然后将其内容传输到他自己的个人电子设备上。

在2014年1月至2018年12月期间,数字取证专家柯林斯非法访问了存储在警方计算机系统上的3000多张图像。

03 网络窃贼突袭Grass Valley

据1月10日报道,对加利福尼亚州一个城市的网络攻击导致属于供应商、城市员工及其配偶的个人和财务数据泄露。

Grass Valley发布的一份数据安全事件通知指出,去年有四个月,一名未知的攻击者能够访问该市的一些IT系统。

该市表示,攻击者利用他们在2021年4月13日至7月1日期间享受的未经授权的访问来窃取属于未指定数量的数据。

受数据泄露影响的受害者包括Grass Valley员工、前员工、配偶、家属以及该市雇用的个人供应商。其他受害者包括可能已向Grass Valley警察局提供资料的个人,以及在贷款申请文件中向Grass Valley社区发展部提供资料的个人。

12 月 1 日,对威胁参与者访问了哪些文件以及哪些数据遭到入侵的审查已经结束。在攻击期间暴露的信息被发现包括社会安全号码、驾驶执照号码、供应商名称以及有限的医疗或健康保险信息。

对于可能已向Grass Valley警察局提供信息的个人,受影响的数据包括姓名和以下一项或多项:社会安全号码、驾驶执照号码、财务帐户信息、支付卡信息、有限的医疗或健康保险信息、护照号码以及在线帐户的用户名和密码凭据。

那些申请社区发展贷款的人可能的姓名和社会安全号码、驾驶执照号码、财务帐号和支付卡号遭到入侵。

04 超过一半的中小企业经历过网络安全漏洞攻击

据1月10日报道,根据保险公司Markel Direct的一项新研究,英国超过一半(51%)的中小企业和自雇工人经历过网络安全漏洞攻击。

调查结果来自对英国1000家中小企业和自雇人士的调查,突显了人们的担忧,即由于缺乏资源和网络安全专业知识,这些组织面临特别高的网络攻击风险,COVID-19期间加剧了这个问题。

这些组织面临的最常见的攻击方法是与恶意软件/病毒相关的(24%)、数据泄露(16%)和网络钓鱼攻击(15%)。超过三分之二(68%)的受访者表示,他们经历的违规行为成本高达5000英镑。

该研究还分析了中小企业和自雇人士采取的网络安全措施的程度。近九成(88%)的受访者表示,他们至少有一种形式的网络安全,如防病毒软件、防火墙或多因素身份验证,70%的受访者表示,他们对自己的网络安全安排相当有信心或非常有信心。

在这些组织和个人中,53%拥有防病毒/恶意软件,48%的人投资了防火墙和安全网络。此外,近三分之一(31%)的受访者表示,他们每月进行风险评估和内部/外部审计。

令人担忧的是,11%的受访者表示他们不会在网络安全措施上花任何钱,认为这是”不必要的成本”。

Markel Direct的直接和合作伙伴关系总监Rob Rees评论说:”对大公司的网络攻击通常是头条新闻,特别是考虑到过去几年发生的一些重大违规行为。然而,中小企业和自雇人士也面临风险,其后果可能对小型企业造成毁灭性打击,这些企业可能无法从网络漏洞的财务影响中恢复过来或失去客户的信任。

网络犯罪分子通常以自雇人士和中小企业为目标,因为他们缺乏大型企业在网络安全方面投资的资源。中小企业和自雇人士成为网络攻击的目标,最终可能面临财务和运营后果,其中一些人可能永远无法从中恢复过来。

05 美国对商业间谍软件发出警告

据1月10日报道,美国政府安全专家发布了针对商业间谍软件可能目标的新指南,以保护自己免受不必要的监视。

“一些政府正在使用商业监控软件来瞄准全球的持不同政见者、记者和其他他们认为是批评者的人,”美国国家反情报和安全中心(NCSC)在Twitter帖子中警告说。

“商业监视工具的使用方式也对美国人员和系统构成严重的反间谍和安全风险。

该通知解释说,间谍软件正在使用Wi-Fi和蜂窝数据连接部署到移动和其他互联网连接设备。

“在某些情况下,恶意行为者可以在设备所有者不采取行动的情况下感染目标设备。在其他情况下,他们可以使用受感染的链接来访问设备,”它说。

该指导文件由NCSC和国务院联合发布,警告间谍软件可以监控电话、设备位置和设备上的几乎任何内容,包括短信、文件、聊天、消息传递应用程序内容、联系人和浏览历史记录。

针对潜在目标的建议包括定期更新软件,切勿点击未经请求的消息中的链接,加密和密码保护设备,并定期重新启动设备以帮助删除恶意软件植入物。

06 研究人员在十几个广泛使用的URL解析器库中发现了错误

据1月 10报道,对16个不同的统一资源定位器(URL)解析库的研究发现了不一致和混乱,这些不一致和混乱可以被利用来绕过验证,并为各种攻击媒介打开大门。

在网络安全公司Claroty和Synk联合进行的深入分析中,在用C,JavaScript,PHP,Python和Ruby语言编写并被多个Web应用程序使用的许多第三方库中发现了八个安全漏洞。

使用多个解析器是发现这八个漏洞的两个主要原因之一,另一个是当库遵循不同的URL规范时不一致引起的问题,有效地引入了可利用的漏洞。

滥用范围包括涉及包含反斜杠(”\”)的URL的混淆,斜杠的不规则数量(例如,[。]com)或URL 编码数据(”%”),以指向缺少 URL 方案的 URL,这些 URL 可能被利用来获得远程代码执行,甚至阶段性拒绝或服务 (DoS) 和开放重定向网络钓鱼攻击。

发现的八个漏洞列表如下,所有这些漏洞都已由各自的维护者解决 –

· Belledonne的SIP堆栈(C,CVE-2021-33056))

· 视频.js(JavaScript,CVE-2021-23414)

· Nagios XI (PHP, CVE-2021-37352)

· Flask-security(Python,CVE-2021-23385)

· Flask-security-too (Python, CVE-2021-32618)

· Flask-unchained (Python, CVE-2021-23393)

· Flask-User (Python, CVE-2021-23401)

· 清除(Ruby,CVE-2021-23435)

07 Abcbot僵尸网络链接到Xanthe Cryptomining恶意软件的运营商

据1月10日报道,对名为Abcbot的新兴DDoS僵尸网络背后的基础设施的新研究发现了与2020年12月曝光的加密货币采矿僵尸网络攻击的联系。

奇虎360的Netlab安全团队于2021年11月首次披露了涉及Abcbot的攻击,该攻击是通过恶意shell脚本触发的,该脚本针对由华为、腾讯、百度和阿里云等云服务提供商运营的不安全云实例,以下载将机器选择到僵尸网络的恶意软件,但在此之前不会终止来自竞争威胁参与者的进程并建立持久性。

有问题的shell脚本本身就是趋势科技在2021年10月最初发现的早期版本的迭代,该版本攻击了华为云中易受攻击的ECS实例。

但有趣的是,通过映射所有已知的入侵指标(IoC),包括IP地址、URL和样本,对僵尸网络的持续分析揭示了Abcbot的代码和功能级别与称为Xanthe的加密货币挖掘操作的代码和功能级别相似性,该操作利用错误配置的Docker实现来传播感染。

“同一个威胁行为者同时负责Xanthe和Abcbot,并正在将其目标从在受感染的主机上挖掘加密货币转移到传统上与僵尸网络相关的活动,例如DDoS攻击,”Cado Security的Matt Muir在与The Hacker News分享的一份报告中说。

两个恶意软件系列之间的语义重叠范围从源代码的格式化方式到为例程提供的名称,某些函数不仅具有相同的名称和实现(例如,”nameservercheck”),而且还将单词”go”附加到函数名称的末尾(例如,”filerungo”)。

“这可能表明该函数的Abcbot版本已经迭代了几次,每次迭代都会添加新功能,”Muir解释说。

此外,对恶意软件的深入检查揭示了僵尸网络通过使用通用的、不显眼的名称(如”自动更新器”,”记录器”,”sysall”和”系统”)来创建多达四个自己的用户以避免检测,并将它们添加到sudoers文件中,以使流氓用户对受感染的系统具有管理权限。

“代码重用甚至类似复制经常出现在恶意软件家族和任何平台上的特定样本之间,”Muir说。”从发展的角度来看,这是有道理的。正如合法软件的代码被重用以节省开发时间一样,非法软件或恶意软件也是如此。

08 APT黑客在最近的恶意软件攻击中达成自己的目标

据1月9日报道,威胁猎人已经揭示了一个名为Patchwork的印度裔黑客组织所采用的策略、技术和程序,这是2021年11月下旬开始的新运动的一部分,该运动针对巴基斯坦政府实体和个人,研究重点是分子医学和生物科学。

“具有讽刺意味的是,我们收集的所有信息都是可能的,这要归功于威胁行为者用自己的[远程访问特洛伊木马]感染自己,导致捕获到他们的击键和他们自己的计算机和虚拟机的屏幕截图,”Malwarebytes威胁情报团队在周五发布的一份报告中说。

成功渗透的突出受害者包括巴基斯坦国防部、伊斯兰堡国防大学、UVAS拉合尔生物科学学院、国际化学和生物科学中心(ICCBS),H.E.J.化学研究所和萨利姆哈比卜大学(SBU)。

该间谍组织主要以打击巴基斯坦、中国、美国智囊团以及位于印度次大陆的其他目标而闻名,其名称来自以下事实:其所用恶意软件工具大部分代码都是从网络上公开的各种来源复制和粘贴的。

“这个威胁行为者使用的代码是从各种在线论坛复制粘贴的,以一种让我们想起拼凑被子的方式,”现已倒闭的以色列网络安全初创公司Cymmetria的研究人员在2016年7月发表的调查结果中指出。

多年来,他们进行的连续秘密行动试图放弃并执行QuasarRAT以及名为BADNEWS的植入,该植入充当攻击者的后门,使他们能够完全控制受害者机器。2021年1月,还观察到威胁组织利用Microsoft Office中的远程执行代码漏洞(CVE-2017-0261)在受害计算机上提供有效载荷。

最新的活动没有什么不同,因为对手用RTF文件吸引潜在目标,这些文件冒充巴基斯坦当局,最终充当部署BADNEWS木马新变种Ragnatela的渠道 – 在意大利语中意为”蜘蛛网” – 使操作员能够执行任意命令,捕获击键和屏幕截图,列出和上传文件,并下载其他恶意软件。

新的诱饵据称来自卡拉奇的巴基斯坦国防军官住房管理局(DHA),包含微软方程式编辑器的漏洞,该漏洞被触发以破坏受害者的计算机并执行Ragnatela有效载荷。

但是在OpSec失败的情况下,威胁行为者最终也用RAT感染了他们自己的开发机器,因为Malwarebytes能够揭示其许多策略,包括使用双键盘布局(英语和印度语)以及采用虚拟机和VPN,如VPN Secure和CyberGhost来隐藏其IP地址。

09 组织每周遭受925次攻击,创历史新高

据1月10日报道,研究人员发现2021年网络攻击同比增长50%,由于Log4j漏洞引发网络攻击在12月达到顶峰。

2021年在Log4Shell引发的闪电战中将自己拖入尾声。自上个月发现该漏洞以来,每小时有数百万次针对Log4j的攻击,全球每个组织每周有925次网络攻击的破纪录峰值。

这个数字来自Check Point Research(CPR)的周一报告,该报告发现Log4Shell攻击是2021年企业网络上每周整体攻击次数同比增长50%的主要原因。

截至10月,CPR报告增加了40%,早期的数据显示,全球每61个组织中就有一个每周受到勒索软件的攻击。

CPR研究人员表示,教育/研究是2021年遭受攻击量最高的行业,平均每个组织每周有1,605次攻击:比2020年增加了75次。举个例子:截至12月30日,高级持续威胁(APT)Aquatic Panda正在使用Log4Shell漏洞利用工具瞄准大学,试图窃取工业情报和军事机密。

第二受欢迎的部门是政府/军队,每周发生1,136次袭击:增加了47%。接下来是通信行业,每个组织每周有1,079次攻击:增加了51%。

非洲去年经历了最多的攻击,每个组织平均每周有1,582次攻击:比2020年增加了13%。

亚太地区每个组织的每周攻击增加了25%,平均每周攻击次数为1,353次。拉丁美洲每周有1,118次攻击,增长了38%;欧洲每周有670次攻击,增加了68%;北美每个组织平均每周有503次攻击,比2020年增加了61%。

CPR的建议是:”在混合环境中,边界现在无处不在,安全性应该能够保护一切。该公司表示,电子邮件、网页浏览、服务器和存储”仅仅是基础”:移动应用程序、云和外部存储也是”必不可少的”,连接的移动和端点设备以及物联网(IoT)设备的合规性也是如此。

此外,CPR建议,”多云和混合云环境中的工作负载、容器和无服务器应用程序应始终成为清单的一部分。

最佳安全实践标准:及时了解安全补丁以阻止利用已知缺陷的攻击,对网络进行分段,在网段之间应用强大的防火墙和 IPS 保护措施,以遏制感染在整个网络中传播,并教育员工识别潜在威胁。

“很多时候,用户意识可以在攻击发生之前阻止攻击,”CPR研究人员建议。”花点时间教育你的用户,并确保如果他们看到异常情况,他们会立即向你的安全团队报告。用户教育一直是避免恶意软件感染的关键因素。

最后,实施先进的安全技术,CPR说。”没有一种银弹技术可以保护组织免受所有威胁和所有威胁媒介的侵害。但是,有许多伟大的技术和想法可用 – 机器学习、沙盒、异常检测等等。

CPR 建议考虑两个关键组件:威胁提取(文件清理)和威胁模拟(高级沙盒)。”每个元素都提供不同的保护,当一起使用时,提供了一个全面的解决方案,可以在网络级别和直接在端点设备上防止未知恶意软件侵害。

10 新的ZLoader恶意软件活动袭击了111个国家的2000多名受害者

据1月10日报道,Check Point Research的专家于2021年11月初发现了一个新的ZLoader恶意软件活动。恶意软件活动仍然活跃,截至2022年1月2日,威胁行为者已经窃取了111个国家/地区2000多名受害者的数据和凭据。

Zloader是一种银行恶意软件,至少自2016年以来一直活跃,它从臭名昭着的Zeus 2.0.8.9银行木马中借用了一些功能,并用于传播类似宙斯的银行木马(即Zeus OpenSSL)。

攻击链利用合法的远程管理软件 (RMM) 来获取对目标系统的初始访问权限。感染链从在受害者的机器上安装Atera软件开始。Atera 是一种合法的企业远程监控和管理软件,可以使用包含所有者电子邮件地址的唯一.msi文件安装代理并将端点分配给特定帐户。攻击者使用临时电子邮件地址”Antik.Corp@mailto.plus”创建了此安装程序。与之前的 Zloader 活动一样,该文件伪装成 Java 安装。

然后,恶意软件利用Microsoft的数字签名验证方法将其有效负载注入已签名的系统DLL中,以逃避检测。

威胁行为者利用一个漏洞,跟踪为CVE-2013-3900,该漏洞于2013年被发现并修复,但在2014年微软修订了该修复程序。

WinVerifyTrust 函数处理PE文件的 Windows Authenticode 签名验证的方式中存在一个远程执行代码漏洞。匿名攻击者可以通过修改现有的已签名可执行文件来利用此漏洞,以利用文件的未经验证的部分,从而在不使签名无效的情况下向文件添加恶意代码。 成功利用此漏洞的攻击者可以完全控制受影响的系统。

在调查过程中,专家们发现了一个开放目录,托管在teamworks455.com上,它持有一些下载在广告系列中的文件。恶意软件操作员每隔几天就会更改文件,对文件”条目”的分析允许检索感染Zloader及其原籍国的受害者列表。

“这里看到的两种值得注意的方法是使用合法的RMM软件作为对目标机器的初始访问,并将代码附加到文件的签名中,同时仍然保持签名的有效性并使用mshta.exe运行它。

将代码附加到文件签名的能力已经存在多年,并且如上所述分配了多个CVE。”为了缓解此问题,所有供应商都应遵守新的 Authenticode 规范,以将这些设置作为默认设置,而不是选择加入更新。在此之前,我们永远无法确定我们是否可以真正信任文件的签名。

quasarjava的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、quasarjava的信息别忘了在本站进行查找喔。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月30日 18:57:26
下一篇 2024年3月30日 19:09:45

相关推荐

  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4400
  • javascriptcanvas的简单介绍

    如何使用js在画布上绘制图形 1、可以使用 drawImage()方法把一幅图像绘制到画布上。 以使用三种不同的参数组合。最简单的调用方式是传入一个 HTML 元素,以及绘制该图像的起点的 x 和 y 坐标。 2、效果图:使用JavaScript在画布中绘制文本图形首先我们来看看要在画布上绘制文本图形,需要用到的最重要的属性和方法:font属性:定义文本的字…

    2024年5月23日
    4200
  • cortexm4linux的简单介绍

    Cortex-M4的主要功能 Cortex-M4提供了无可比拟的功能,以将[1] 32位控制与领先的数字信号处理技术集成来满足需要很高能效级别的市场。 Cortex-M4核心具有浮点单元(FPU)单精度,支持所有Arm单精度数据处理指令和数据类型。它还实现了一套完整的DSP指令和一个提高应用程序安全性的内存保护单元(MPU)。 主要是m4比m3多了dsp的支…

    2024年5月23日
    4300
  • 3desjavaphp的简单介绍

    php的3des加密结果与java不一致 他们的加密算法都是通用的,是可以解开的,只要你des的模式,加密长度,初始向量什么的都一样就可以。 JAVA写RSA加密,私钥都是一样的,公钥每次加密的结果不一样跟对数据的padding(填充)有关。Padding(填充)属性定义元素边框与元素内容之间的空间。padding简写属性在一个声明中设置所有内边距属性。 要…

    2024年5月23日
    4700
  • 黑客代码软件学习推荐歌曲的简单介绍

    我想自学编程代码,,目地是“黑”网站,开发出破解代码。有没有这方面的… 这个迭代周期不应该以周为周期或以月为周期发生,而是应该以日为周期。知识等待使用的时间越久,知识这把斧头就越钝。等待学习新知识的时间越长,你就越难以将其融入到代码中。 我认为这个问题问得本身就显得有点矛盾,想学却担心自己看不懂代码学不来,试问哪个编程人员不是从零开始的。坚定信念…

    2024年5月23日
    4700
  • java8种基本类型范围的简单介绍

    java中常用的数据类型有哪些 1、java数据类型分为基本数据类型和引用数据类型,基本数据类型有boolean 、long 、int 、char、byte、short、double、float。引用数据类型有类类型、接口类型和数组类型。 2、java中包含的基本数据类型介绍:\x0d\x0aJava共支持8种内置数据类型。内置类型由Java语言预先定义好,…

    2024年5月23日
    4700
  • linux系统与gpt的关系的简单介绍

    linux下查看分区是不是gpt 看分区会报错,比如:WARNING: GPT (GUID Partition Table) detected on /dev/sda! The util fdisk doesnt support GPT. Use GNU Parted.所以这个sda就是gpt的。 选择“管理”;在“磁盘管理”中,右键“磁盘0”,在弹出的右键…

    2024年5月23日
    5400
  • 北京黑客学习培训的简单介绍

    现在学什么好啊 包括建筑设计、服装设计、珠宝首饰设计等,选择适合自己的设计专业,好好学习,就业容易且收入高。学前教育专业:很多女生喜欢小孩子,且女生一般细心且有耐心,教育行业假期宽裕,工作环境单纯,就业机会多。 现在比较热门好就业的专业有人工智能、机械专业、电子商务专业、人力资源专业、金融学专业、小语种类专业等等。人工智能:人工智能领域的研究包括机器人、语言…

    2024年5月23日
    4100
  • javaee要学那些东西的简单介绍

    java主要学习哪些内容 1、学java最重要的是下面四个内容:掌握Java语言的使用:语言语法、程序逻辑,OOP(面向对象)思想,封装、继承、多态,集合框架、泛型、File I\O技术,多线程技术、socket网络编程,XML技术。 2、Java基础:了解Java的基本语法、数据类型、控制流程、数组、字符串等基础概念。学习面向对象编程(OOP)的原则和概念…

    2024年5月23日
    4200
  • excel自杀的简单介绍

    excel表格中宏代码,具有自杀功能,密码输入错误3次就自动删除表格_百度… 我给楼主一个建议,利用excel自身的密码保护,保护此工作簿的结构,将sheet提前隐藏。这样如果有人将同一份excel打开时,如果不能输入正确的密码,就不能将sheet取消隐藏,就能达到楼主所说的保护了。 如果你还有源文件的话,可以这样试试:打开其他的excel文件,…

    2024年5月23日
    8100

发表回复

登录后才能评论



关注微信