本文列举了 GitHub 上最受欢迎的 5 个 Java 项目,从 Mockitos 到 Guava,以及 java-design-patterns 等。 GitHub 上有大约有 744K 多的 Java 项目,但是最让开发人员感兴趣的有哪些项目? 1. Mockito Mockito 并不是无酒精混合饮料的意思。Mockito 是一个针对 Java 的 mocking 框架。它与 EasyMock 和jMock 很相似,但是通过在执行后校验什么已经被调用,它消除了对期望行为(expectations)的需要。其它的 mocking 库需要你在执行前记录期望行为(expectations),而这导致了丑陋的初始化代码。 Mockito 2.0 为高级框架集成提供了更好的 API。这不是针对编写单元测试的用户,而是针对需要使用定制逻辑扩展或包装 Mockito 的其他测试工具和模拟框架。 2. java-design-patterns java-design-patterns 这个项目在不断的完善,正是因为如此,java-design-patterns 允许开发人员用Java 实现设计模式。设计模式是帮助开发人员在设计应用程序或系统时解决常见问题的正式最佳实践。它们通过提供经过验证和验证的开发范例来帮助加快开发进程。此外,重复使用模式可以帮助防止小的错位问题成为大问题。 3. RxJava RxJava 是 GitHub 上最受欢迎的 Java 项目之一,也是一个流行的框架。基于 ReactiveX API,RxJava 是一个用于使用 Java VM 的可观察序列编写异步和基于事件的程序的库。 RxJava 扩展了观察者模式用以支持数据和事件序列。它还增加了运算符,允许开发人员声明性地组合序列的同时,抽象出对低级线程,同步,线程安全和并发数据结构等问题的关注。 4. MpAndroidChart MPAndroidChart 是一个功能强大且易于使用的 Android 图表库,可在 API 8 及更高版本上运行。使用 MPAndroidChart,开发人员可以为 Android 应用程序绘制各种图形。 MPAndroidChart 被视为移动开发人员的数据可视化工具,得到了 ’em:LineChart,BarChart(垂直,水平,堆叠,分组),PieChart,ScatterChart,CandleStickChart(用于财务数据),RadarChart(蜘蛛网图),BubbleCharts 和组合图。 5. Guava Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。它仍然是一个对开发人员非常有用的开源工具。Java 语言的基本实用程序使用起来更加方便,扩展了JDK 集合生态系统。不仅如此,它允许开发人员在 ComparisonChain 中将收集的内容与非常先进的排序功能进行比较。 来自:jaxenter from:https://www.oschina.net/news/94928/top-5-most-popular-java-projects-github
View Details1、任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。因为只有该字段中有null值,即使创建了索引其实也 是没有用的,所以创建索引应该在有值的字段上创建; 2、使用该sql语句将不会使用索引:select * from employee where last_name like ‘%cliton%'; 这样的话会使用索引: select * from employee where last_name like ‘cliton%'; 3、Order by语句 ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制,也可以将函数加入列中(象联接或 者附加等)。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。仔细检查order by语句以找出非索引项或者表达式,它们 会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立另外一个索引,同时应绝对避免在order by 子句中使用表达式。 4、 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句 中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. 5、 SELECT子句中避免使用 ‘ * ‘: ORACLE在解析的过程中, 会将’*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间 6、 减少访问数据库的次数,能使用一条sql语句查询出来的最好使用一条语句直接查询出来。 整合简单,无关联的数据库访问: 如果你有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系) 7、通过内部函数提高SQL效率.: 复杂的SQL往往牺牲了执行效率. 能够掌握上面的运用函数解决问题的方法在实际工作中是非常有意义的 8、 使用表的别名(Alias): 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起 的语法错误. 9、 用EXISTS替代IN、用NOT EXISTS替代NOT IN: 在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接.在这种情况下, 使用EXISTS(或NOT EXISTS)通常将提高查询的 效率. 在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个 全表遍历). 为了避免使用NOT IN ,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS. 例: […]
View Details背景 之前写了系列的shell实战的文章,得到了挺多小伙伴的关注,遇到有些对shell不太熟悉小伙伴,所以有个想法写一篇shell入门的文章。 时间流逝,再回头去看看过去的东西,才会发现哪些东西比较重要,故撰此文,记录我在过去学习和使用shell语言过程中我个人觉得比较重要的部分,做一个小总结和分享。 文章中使用到的代码位置:https://gitee.com/dhar/YTTInjectedContentKit/tree/master/DevPods/InjectedContentKit/Example/injectContentShell 和 https://gitee.com/dhar/ShellLearning/tree/master/helloshell 文章内容结构如下: 语法 变量 打印 运算 控制 循环 容器 方法 文件 文件读取 文件写入 sed流编辑 模块 工具模块 流程模块 输入和菜单 获取输入 菜单 语法 变量 变量的定义 定义一个变量和其他语言的类似,shell是弱类型语言所以不需要使用类型限定,并且变量可以修改类型,下面的例子定义了一个字符串类型的str变量,之后修改为数值类型 注意点:变量等号两边不能有空格出现
1 2 3 4 5 |
str="string" echo $str echo ${str} str=123 echo $str |
变量使用 变量可以赋值给另一个变量和打印,当变量被使用的时候需要在变量名称前面加上$符号,还有另一种方式是把变量名放在${}括号中使用,可以把命令执行结果作为右值赋值给变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
str2=$str echo $str2; str3=${str} echo ${str3} curDir=$(pwd) echo "curDir = ${curDir}" curDirCon=`ls` echo "curDirCon = ${curDir2}" # 输出: =======变量======= string string 123 123 123 curDir = /Users/aron/git-repo/ShellLearning/helloshell curDirCon = data syntax.sh |
打印 因为shell没有单步调试和其他功能强大的IDE,所以打印功能就经常使用到,此外打印功能还可以当做函数的返回值,比return作为函数的返回值功能更强大,shell 使用echo打印,内容默认输出到控制台中,echo可以打印字符串、变量、以及字符串中嵌入变量的混个内容,echo有几重要的参数选项 -e 转义字符处理,比如\t显示为制表符而不是显示输出\t -n 把文本字符串和命令输出显示在同一行中
1 2 3 4 5 6 7 8 9 10 |
str4="string4" echo $str4 echo "str4=$str4" echo "str4=${str4}str3=${str3}" # 输出: =======打印======= string4 str4=string4 str4=string4str3=123 |
运算 使用expr执行算术运算 注意点:*乘法运算符号需要转义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
echo "=======运算=======" result=$(expr 5 + 5) echo ${result} result=$(expr 16 - 5) echo ${result} result=$(expr 5 \* 5) echo ${result} result=$(expr 28 / 5) echo ${result} # 输出: =======expr运算======= 10 11 25 5 |
使用[]执行算术 []执行算术比expr简单多了,并且*乘法运算符号不需要转义
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
echo "=======[]运算=======" result=$[5 + 5] echo ${result} result=$[16 - 5] echo ${result} result=$[5 * 5] echo ${result} result=$[28 / 5] echo ${result} # 输出: =======[]运算======= 10 11 25 5 |
控制 数值比较 控制使用if/else/fi语法,典型的数值比较如下
1 2 3 4 5 6 7 8 |
if [[ 3 > 7 ]]; then echo "hehe" else echo "yes" fi # 输出: yes |
还可以使用下面的比较符号: 比较符 描述 n1 -eq n2 检查n1是否与n2相等 n1 -ge n2 检查n1是否大于或等于n2 n1 -gt n2 检查n1是否大于n2 n1 -le n2 检查n1是否小于或等于n2 n1 -lt n2 检查n1是否小于n2 n1 -ne n2 检查n1是否不等于n2 一个简单的9*9乘法口诀表的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
echo "9*9=======" i=1 j=1 line="" while [[ i -lt 10 ]]; do j=1 line="" until [[ j -eq 10 ]]; do if [[ j -le i ]]; then result=$(expr $i \* $j) resultStr="$j X $i = $result" line=${line}${resultStr}"\t" fi j=$(expr $j + 1) done echo -e ${line} i=$(expr $i + 1) done # 输出: 9*9======= 1 X 1 = 1 1 X 2 = 2 2 X 2 = 4 1 X 3 = 3 2 X 3 = 6 3 X 3 = 9 1 X 4 = 4 2 X 4 = 8 3 X 4 = 12 4 X 4 = 16 1 X 5 = 5 2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25 1 X 6 = 6 2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30 6 X 6 = 36 1 X 7 = 7 2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35 6 X 7 = 42 7 X 7 = 49 1 X 8 = 8 2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40 6 X 8 = 48 7 X 8 = 56 8 X 8 = 64 1 X 9 = 9 2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45 6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81 ======= ======= |
[…]
View DetailsLua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。 Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。 Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
View DetailsOpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。 OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。 from:http://openresty.org/cn/
View DetailsTensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程。TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统。 TensorFlow可被用于语音识别或图像识别等多项机器学习和深度学习领域,对2011年开发的深度学习基础架构DistBelief进行了各方面的改进,它可在小到一部智能手机、大到数千台数据中心服务器的各种设备上运行。TensorFlow将完全开源,任何人都可以用。
View Details4月5日,Pivotal 发布了 Spring Framework 存在多个安全漏洞的公告: (1)spring-messaging 模块远程代码执行漏洞 对应CVE编号:CVE-2018-1270 漏洞公告链接:https://pivotal.io/security/cve-2018-1270 (2)运行于 Windows 系统的 Spring MVC 存在目录遍历漏洞 对应CVE编号:CVE-2018-1271 漏洞公告链接:https://pivotal.io/security/cve-2018-1271 (3)Spring MVC 或 Spring WebFlux 服务器存在 Multipart 类型污染漏洞 对应CVE编号:CVE-2018-1272 漏洞公告链接:https://pivotal.io/security/cve-2018-1272 漏洞描述 CVE-2018-1270漏洞:Spring Framework的5.*版本、4.3.*版本以及不再支持的旧版本,通过spring-messaging和spring-websocket模块提供的基于WebSocket的STOMP,存在被攻击者建立WebSocket连接并发送恶意攻击代码的可能,从而实现远程代码执行攻击,建议尽快更新到新的版本。 CVE-2018-1271漏洞:Spring Framework的5.*版本、4.3.*版本以及不再支持的旧版本,Spring MVC允许应用程序对其配置提供静态资源,在Windows系统上实现该功能时,攻击者通过请求构造的特定资源URL,可能导致目录遍历的效果产生,建议尽快更新到新的版本。 CVE-2018-1272漏洞:Spring Framework的5.*版本、4.3.*版本以及不再支持的旧版本,当Spring MVC或Spring WebFlux服务器接受把客户端请求再转向另一台服务器的场景下,攻击者通过构造和污染Multipart类型请求,可能对另一台服务器实现权限提升攻击,建议尽快更新到新的版本。 漏洞影响范围 Spring spring-messaging远程代码执行漏洞(CVE-2018-1270)、(CVE-2018-1271)、(CVE-2018-1272)等影响版本如下: (1)Spring Framework 5.*(5.0到5.0.4)版本,建议更新到5.0.5版本 (2)Spring Framework 4.3.*(4.3到4.3.14)版本,建议更新到4.3.15版本 (3)以及不再受支持的旧版本,建议更新到4.3.15版本或5.0.5版本 官方历史安全公告列表,请参考: https://pivotal.io/security/ https://spring.io/blog/2018/04/05/multiple-cve-reports-published-for-the-spring-framework from:https://www.oschina.net/news/94947/multiple-cve-reports-published-for-the-spring-framework
View Details