gradlew-permission-denied-on-Travis-CI
问题的来源我给一个gradlew项目添加Travis CI的时候遇到一个问题,gradlew没有可执行权限。具体错误如下: 1/home/travis/build.sh: line 45: ./gradlew: Permission denied 显然,gradlew没有可执行权限。 解决首先查看权限, 1ls -la | grep gradlew 或者使用git 1git ls-tree HEAD 结果 1100644 blob 39e33cd9155a732f8a4df3d105463af5af0051c5 build.gradle 644没有执行权限。所以,添加x权限 1chmod 755 gradlew 或者用git 1git update-index --chmod=+x gradlew 这时候查看git status发现有文件改变,提交就好。github显示变更记录为 10 gradlew 100644 → 100755
Java中对List去重, Stream去重
问题当下互联网技术成熟,越来越多的趋向去中心化、分布式、流计算,使得很多以前在数据库侧做的事情放到了Java端。今天有人问道,如果数据库字段没有索引,那么应该如何根据该字段去重?大家都一致认为用Java来做,但怎么做呢? 解答忽然想起以前写过list去重的文章,找出来一看。做法就是将list中对象的hashcode和equals方法重写,然后丢到HashSet里,然后取出来。这是最初刚学Java的时候像被字典一样背写出来的答案。就比如面试,面过号称做了3年Java的人,问Set和HashMap的区别可以背出来,问如何实现就不知道了。也就是说,初学者只背特性。但真正在项目中使用的时候你需要确保一下是不是真的这样。因为背书没用,只能相信结果。你需要知道HashSet如何帮我做到去重了。换个思路,不用HashSet可以去重吗?最简单,最直接的办法不就是每次都拿着和历史数据比较,都不相同则插入队尾。而HashSet只是加速了这个过程而已。 首先,给出我们要排序的对象User 123456789101112131415@Data@Builder@AllArgsConstructorpubl ...
查找git ignore的追踪
前言版本控制说简单也简单,说复杂也困难的多。作为开发者,最基础的版本管理和团队协作的功能必须掌握。而其他一些相关的信息也可以了解下。比如,这次就有同事遇到了问题。 遇到的问题在windows下,往repo里添加了一个xxx.exe文件,然后检查sourceTree却并没找到暂存的更改。 解决我由于长时间不用source tree, 也不用eclipse,对这两种工具里的git操作也不太熟悉,幸好git的操作都是基于命令行的。 我先检查了.gitignore文件,发现里面并没有忽略所添加的xxx.exe。然后就很奇怪,难道会有global的ignore?果然,真有! 可以通过以下命令确定我们的被ignore的规则: 12D:\workspace\learn\git-test>git check-ignore -v src/git-bash.exe"C:\\Users\\Ryan\\Documents\\gitignore_global.txt":6:*.exe src/git-bash.exe 从结果可以看出,果然存在一个glob ...
Java8-如何构建一个Stream
Stream的创建方式有很多种,除了最常见的集合创建,还有其他几种方式。 List转StreamList继承自Collection接口,而Collection提供了stream()方法。 123List<Integer> list = Lists.newArrayList(1, 2, 3);Stream<Integer> stream = list.stream(); 数组转stream对于数组,Arrays提供了stream()方法。 12String[] arr = new String[]{"a", "b", "c"};Stream<String> stream = Arrays.stream(arr); Map转streamMap并不是一个序列,不是集合,没办法直接转成stream(). 但entrySet()是Set,可以转 123Map<String, Object> map = Maps.newHashMap();Stream<E ...
java8-Stream之数值流
在Stream里元素都是对象,那么,当我们操作一个数字流的时候就不得不考虑一个问题,拆箱和装箱。虽然自动拆箱不需要我们处理,但依旧有隐含的成本在里面。Java8引入了3个原始类型特化流接口来解决这个问题:IntStream,DoubleStream,LongStream, 分别将流中的元素特化为int、long、doub,从而避免了暗含的装箱成本。每个接口都带来了进行常用数值归约的新方法,比如求和sum,求最大值max。此外还有必要时再把他们转换回对象流的方法。这些特化的原因就是装箱造成的复杂性–类似int和Integer之间的效率差异。 将对象流映射为数值流常用方法为mapToInt, mapToDouble, mapToLong,这些方法和map相同,只是它们返回一个特化流,而不是Stream。 1234567891011121314151617@Testpublic void testToInt() { final ArrayList<Dish> dishes = Lists.newArrayList( new Dish(& ...
Java8学习(4)-Stream流
Stream和Collection的区别是什么 Stream是内部迭代 使用流Stream的注意事项 流操作 中间操作 终端操作 使用流 最长用,最简单的用法 谓词筛选filter 去重复distinct 截短流limit 跳过元素skip 映射map 瞥一眼Peek 流的扁平化faltMap 查找和匹配 归约Reduce 归约的优势和并行化 流操作的状态:无状态和有状态 注 Stream和Collection的区别是什么流和集合的区别是什么? 粗略地说, 集合和流之间的差异就在于什么时候进行计算。集合是一个内存中的数据结构,它包含数据结构中目前所有的值–集合中的每个元素都得先计算出来才能添加到内存里。(你可以往集合里加东西或者删东西,但是不管什么时候,集合中的每个元素都是放在内存里的,元素都得计算出来才能成为集合的一部分。) 相比之下,流则是在概念上固定的数据结构(你不能添加或者删除元素),其元素则是按需计算的。这对编程有很大的好处。用户仅仅从流中提取需要的值,而这些值–在用户看不见的地方–只会按需生成。这是一种生产者 - 消费者的关系。从另一个角度来说, ...
Dubbo学习1-Hello world
前言互联网技术到今天已经非常成熟和稳定了,其中为了解决高并发、大规模的服务请求,出现了微服务、RPC这样的分布式架构。今天就从头开始学习RPC框架dubbo。 为什么要学Dubbo关于分布式的解决方案有很多,光RPC框架就有很多种,甚至有人比较了RPC框架性能, 结果显示dubbo垫底,以及spring cloud这种推崇Rest Http请求代替RPC, 那为什么还要学习RPC? 首先,RPC框架的发展并没有因为Spring Cloud的出现而变的衰弱。其次,历史悠久的市场上大部分公司都会使用RPC来解决分布式问题。 那么,为啥要选Dubbo? 只能说Dubbo在国内的流行程度远超过gRPC、thrift等,而且中文资料很多,在国内的技术圈混则必须要掌握这个技能。当然,缺点也不少,比如由于官方很长时间没有维护导致Dubbo各种落后。令人惊喜的是,Alibaba已经开始专注开源项目了,dubbo重新开启维护,进入Apache Incubating。然而,很多人也因此选择了其他RPC来代替dubbo。 Dubbo发音问题: da bou; |ˈdʌbəʊ| 什么是RPCRPC(Rem ...
深入理解JVM垃圾收集机制(JDK1.8)
垃圾收集算法标记-清除算法最基础的收集算法是“标记-清除”(Mark-Sweep)算法,分两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 不足:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能导致以后在程序运行过程需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一个的垃圾收集动作。 复制算法为了解决效率问题,一种称为复制(Copying)的收集算法出现了,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块内存用完了,就将还存活着的对象复制到另外一块上,然后再把已经使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要移动堆顶指针,按顺序分配内存即可,实现简单,运行高效。代价是内存缩小为原来的一半。 商业虚拟机用这个回收算法来回收新生代。IBM研究表明98%的对象是“朝生夕死“,不需要按照1-1的比例来划分内存空间,而是将内存分为一块较大的”Eden“空间和两块较小的Survivor空 ...
SpringCloud入门2-Springboot监控模块(actuator)
前言学习一项新技术最大的困难是什么? 是资料。让人高兴的是找到了一本系统学习Spring Cloud的教程,《Spring Cloud微服务实战》, 接下来的学习目标将以此书顺序演进。 虽然Springboot 2.0刚刚发布,鉴于当下资料都是基于1.x的,对于初学者,站在前人的肩膀上会少踩坑。因此,接下来都将采用1.5.10.RELEASE。 上一节,SpringCloud入门1-服务注册与发现(Eureka) 中已经尝试使用了spring-boot-starter-actuator模块中的健康检查端点,接下来将系统的学习该模块的功能。 Spring Boot includes a number of additional features to help you monitor and manage your application when it’s pushed to production. You can choose to manage and monitor your application using HTTP endpoints, with JMX or even ...
SpringCloud入门1-服务注册与发现(Eureka)
前言Oracle转让Java,各种动态语言的曝光率上升,Java工程师的未来在哪里?我觉得Spring Cloud让未来有无限可能。拖了半年之久的Spring Cloud学习就从今天开始了。中文教材不多,而且大多都是简单的离散的信息,想要找到企业级的一体化解决方案很少。不过,对于入门来说,简单就够了,等到用的时候自然而然的汇总起来。 目标是把springcloud的子项目过一遍。 |Component| Edgware.SR2 |Finchley.M7| Finchley.BUILD-SNAPSHOT||—|—|—|—|—||spring-cloud-aws| 1.2.2.RELEASE| 2.0.0.M4| 2.0.0.BUILD-SNAPSHOT||spring-cloud-bus| 1.3.2.RELEASE| 2.0.0.M6| 2.0.0.BUILD-SNAPSHOT||spring-cloud-cli| 1.4.1.RELEASE| 2.0.0.M1| 2.0.0.BUILD-SNAPSHOT||spr ...