整理Java8-stream的用法
前言 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream特点 stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。 stream不会改变数据源,通常情况下会产生一个新的集合或一个值。 stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。 Stream实例化方式通过集合12345678910111213141516public static List<Employee> getEmployeeDataList(){ List<Employee> list = new ArrayList<>(); list.add(new Employee(1,"张三",20,8500D,1)); list.add(new Employee(2,"李四",18,600D,1)); list.add(new Employee(3,"王五",21,5500D,3)); ...
fix error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
统一代理日志中出现以下错误消息1PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 原因这是Java虚拟机报告的常见错误消息。当Java环境没有适当的CA证书路径来验证HTTPS服务器是否为有效网站时,就会发生这种情况。这是一个特定于Java的错误,其他技术不会报告此类错误。 解决方案创建证书首先,你需要创建一个证书。要执行此操作,请按照以下步骤操作: 在浏览器中打开URL(即https://www.example.com/、https://saas.whitesourcesoftware.com/) 按F12访问浏览器的开发人员工具 转到“security”选项卡 单击“view...
java项目加载so/dll文件库
参考: https://stackoverflow.com/questions/1403788/java-lang-unsatisfiedlinkerror-no-dll-in-java-library-path https://www.cnblogs.com/eason-d/p/12401371.html 首先需要保证使用带有传统libc库的系统system.loadxxx的用法System.loadLibrary(“HelloWorld”);这句话是在执行java代码之前加载动态库System.load 参数必须为库文件的绝对全路径,可以是任意路径System.loadLibrary 参数为库文件名,不需要写库文件的扩展名, 注意:如果是linux系统库文件名需要以lib开头, 然后作为参数需要去掉lib例子(一般放在static代码块做加载,确保仅执行一次):1234567System.load("/user/src/app/lib/hello.dll"); // Load native library at...
Java BigDecimal的RoundingMode舍入模式
Java大数类的RoundingMode(舍入模式) java.math.RoundingMode:这是一种枚举类型,它定义了8种数据的舍入模式。它与java.math.BigDecimal类中定义的8个同名静态常量的作用相同,可用BigDecimal.setScale(int newScale, RoundingMode roundingMode)来设置数据的精度和舍入模式。 1、ROUND_UP:向远离零的方向舍入。 若舍入位为非零,则对舍入部分的前一位数字加1;若舍入位为零,则直接舍弃。即为向外取整模式。 2、ROUND_DOWN:向接近零的方向舍入。 不论舍入位是否为零,都直接舍弃。即为向内取整模式。 3、ROUND_CEILING:向正无穷大的方向舍入。 若 BigDecimal 为正,则舍入行为与 ROUND_UP 相同;若为负,则舍入行为与 ROUND_DOWN 相同。即为向上取整模式。 4、ROUND_FLOOR:向负无穷大的方向舍入。 若 BigDecimal 为正,则舍入行为与 ROUND_DOWN...
设计模式
面向对象设计原则我们在进行软件开发时,不仅仅需要将最基本的业务给完成,还要考虑整个项目的可维护性和可复用性,我们开发的项目不单单需要我们自己来维护,同时也需要其他的开发者一起来进行共同维护,因此我们在编写代码时,应该尽可能的规范。如果我们在编写代码时不注重这些问题,整个团队项目就像一座屎山,随着项目的不断扩大,整体结构只会越来越遭。 甚至到最后你会发现,我们的程序居然是稳定运行在BUG之上的… 所以,为了尽可能避免这种情况的发生,我们就来聊聊面向对象设计原则。 单一职责原则单一职责原则(Simple Responsibility Pinciple,SRP)是最简单的面向对象设计原则,它用于控制类的粒度大小。 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 比如我们现在有一个People类: 123456789101112131415161718192021222324252627282930//一个人类public class People { /** * 人类会编程 */ public void...
记录容器化后的java项目问题处理
背景: 生产环境, 项目cpu一直报警 进入容器查看cpu占用高的进程top 查看占用cpu高的线程top -Hp 90 这里得到占用资源高的线程, 假如是93 获取线程id的16进制printf "%x\n" 93 这里得到的5d 对于只有jre的镜像, 需要安装对应版本jdk然后打印堆栈信息打印堆栈信息: ./jstack -l 90 > jstack.log 查找到对应线程的信息: cat jstack.log |grep "nid=0x5d" 查看gc格式: jstat -gcutil pid interval(ms) n次 jstat -gcutil 90 5000 10 123456789101112131415161718192021222324S0 S1 E O M CCS YGC YGCT FGC FGCT GCT0.00 0.00 99.64 100.00 94.39 92.31 285 14.940 474 329.694 344.6350.00 0.00 98.78 99.99 94.40 92.31...
CompletableFuture
CompletableFuture 在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。 它可能代表一个明确完成的Future,也有可能代表一个完成阶段( CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作。 它实现了Future和CompletionStage接口 创建CompletableFuture supplyAsync 有 runAsync...
Java-HashMap底层实现原理
转自:https://mrbird.cc/Java-HashMap%E5%BA%95%E5%B1%82%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%86.html 本节用于记录Java HashMap底层数据结构、方法实现原理等,基于JDK 1.8。 底层数据结构Java HashMap底层采用哈希表结构(数组+链表、JDK1.8后为数组+链表或红黑树)实现,结合了数组和链表的优点: 数组优点:通过数组下标可以快速实现对数组元素的访问,效率极高; 链表优点:插入或删除数据不需要移动元素,只需修改节点引用,效率极高。 HashMap图示如下所示: HashMap内部使用数组存储数据,数组中的每个元素类型为Node<K,V>: 123456789101112131415161718192021222324252627282930313233343536373839static class Node<K,V> implements Map.Entry<K,V> { final int hash; ...
jvm调优相关记录
jvm调优相关jvisualvm VisualVM是集成了命令行JDK工具和轻量级分析功能的可视化工具。专为开发和生产时间使用而设计。 结合visualvm gc插件使用 修改插件 1231. 先查看java版本,再去下面链接查看应该粘贴哪个插件地址http://visualvm.github.io/pluginscenters.html2. 我的是1.8_102 https://visualvm.github.io/archive/uc/8u40/updates.xml.gz 如下是查看jmeter jvm参数,cpu内存,堆内存监控等 一些gc相关 健康的gc升之后极速下降,再继续升,下降 gc相关下文引用shiyonghm 1234567891011JVM区域总体分两类,heap区和非heap区。heap区又分为:Eden Space(伊甸园)、Survivor Space(幸存者区)、Old Gen(老年代)。非heap区又分:Code Cache(代码缓存区);Perm Gen(永久代);Jvm...
如何使用jstack分析异常线程以及线程状态
使用top命令定位异常进程。找到CPU和内存占用率都非常高的pid,假设为11268 top 此时可以再执行ps -ef | grep java,查看所有的java进程,在结果中找到进程号为11268的进程,可以查看是哪个应用占用的该进程。 ps -ef|grep java 使用top -H -p 进程号查看异常线程,(-H : 加上这个选项启动top,top一行显示一个线程。否则,它一行显示一个进程。) top -H -p 11268 使用printf "%x\n" 线程号将异常线程号转化为16进制,假设异常线程为11422 printf "%x\n" 11422 -> 2c9e 使用jstack 进程号|grep 16进制异常线程号 -A90来定位异常代码的位置(-A90是指输出的日志行数)。可以看到异常代码的位置。 jstack 11268|grep 2c9e -A90 介绍top命令在linux环境下,可以通过top命令查看各个进程的cpu使用情况,默认按cpu使用率排序 通过top -Hp...
