跳至主要內容
StudyNote - 个人学习笔记

StudyNote - 个人学习笔记

昨夜西风凋碧树,独上高楼,望尽天涯路。

衣带渐宽终不悔,为伊消得人憔悴。

众里寻他千百度,蓦然回首,那人却在,灯火阑珊处。

学习
学习笔记
IDEA
IDEA学习
Linux
Linux学习
脚本
各种脚本
Java Stream 实现数据分组统计、排序、最大值、最小值、平均值、总数、合计

Java Stream 实现数据分组统计、排序、最大值、最小值、平均值、总数、合计

Java8对数据处理可谓十分流畅,既不改变数据,又能对数据进行很好的处理,今天给大家演示下,用Java8的Stream如何对数据进行分组统计,排序,求和等

这些方法属于java 8的汇总统计类:

  • getAverage(): 它返回所有接受值的平均值。
  • getCount(): 它计算所有元素的总数。
  • getMax(): 它返回最大值。
  • getMin(): 它返回最小值。
  • getSum(): 它返回所有元素的总和。

xlc520JavaJava大约 3 分钟
Java性能优化小技巧

Java性能优化小技巧

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。

1. 尽量在合适的场合使用单例

使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:

第一,控制资源的使用,通过线程同步来控制资源的并发访问;

第二,控制实例的产生,以达到节约资源的目的;

第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。


xlc520codingcoding大约 17 分钟
Java Stream两个List取出不同的对象

Java Stream两个List取出不同的对象

可以使用Java8的Stream API来比较两个List的差异,并取出不同的对象。

方式一具体步骤如下:

  1. 将两个List转换为Stream类型;
  2. 调用Stream的filter方法,将不同的对象过滤出来;
  3. 将过滤出的不同的对象转换为List类型。
List<String> list1 = Arrays.asList("A", "B", "C", "D");
List<String> list2 = Arrays.asList("B", "C", "E", "F", "A", "D");
List<String> diff = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());
List<String> diff1 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());
diff.addAll(diff1);

diff.forEach(x -> System.out.println(x));

xlc520JavaJava大约 3 分钟
Backblaze B2 + CloudFlare + 反代 + PicGO 实现快速免费图床

Backblaze B2 + CloudFlare + 反代 + PicGO 实现快速免费图床

前言

之前图床和静态文件一直使用的腾讯云COS老用户免费套餐,因为它是大陆的服务器,而且有免费额度。免费额度是一个月免费10G流量,免费额度如下:

img
img

xlc520otherother大约 9 分钟
通用的JVM参数模板

通用的JVM参数模板

基于4C8G系统的ParNew+CMS回收器模板(响应优先),新生代大小根据业务灵活调整!

-Xms4g  
-Xmx4g  
-Xmn2g  
-Xss1m  
-XX:SurvivorRatio=8  
-XX:MaxTenuringThreshold=10  
-XX:+UseConcMarkSweepGC  
-XX:CMSInitiatingOccupancyFraction=70  
-XX:+UseCMSInitiatingOccupancyOnly  
-XX:+AlwaysPreTouch  
-XX:+HeapDumpOnOutOfMemoryError  
-verbose:gc  
-XX:+PrintGCDetails  
-XX:+PrintGCDateStamps  
-XX:+PrintGCTimeStamps  
-Xloggc:gc.log  

xlc520JavaJava大约 24 分钟
Linux 安全

Linux 安全

1.bootloader配置权限检查

检测类型:bootloader配置权限

风险等级:中危

风险描述:以下关键文件或目录权限错误:/boot/grub/grub.cfg 当前权限: 444 : root 安全权限: 600 : root

解决方案:

1、对【/boot/grub2/grub.cfg】文件,配置对应权限
2、

chmod 600 /boot/grub2/grub.cfg

chown root /boot/grub2/grub.cfg

xlc520LinuxLinux大约 4 分钟
Java CompletableFuture例子

Java CompletableFuture例子

既然CompletableFuture类实现了CompletionStage接口,首先我们需要理解这个接口的契约。它代表了一个特定的计算的阶段,可以同步或者异步的被完成。你可以把它看成一个计算流水线上的一个单元,最终会产生一个最终结果,这意味着几个CompletionStage可以串联起来,一个完成的阶段可以触发下一阶段的执行,接着触发下一次,接着……

除了实现CompletionStage接口, CompletableFuture也实现了future接口, 代表一个未完成的异步事件。CompletableFuture提供了方法,能够显式地完成这个future,所以它叫CompletableFuture


xlc520JavaJava大约 10 分钟
WIN10 安装 WSA

WIN10 安装 WSA

要求:

主板BIOS中开启了VT-X(虚拟化)

Windows 10必须是22H2,版本高要于19045.2311 :Win+R运行,输入winver回车,查看一下自己的当前Windows 10的系统版本是否符合

需要虚拟机平台支持,在安装之前,还必须在系统程序功能中开启:控制面板——>程序——>启用或关闭Windows功能


xlc520pcpc大约 1 分钟
SpringBootBean的异步初始化

SpringBootBean的异步初始化

AsyncTaskExecutionListener:

public class AsyncTaskExecutionListener implements PriorityOrdered,
                                       ApplicationListener<ContextRefreshedEvent>,
                                       ApplicationContextAware {
    private ApplicationContext applicationContext;

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (applicationContext.equals(event.getApplicationContext())) {
            AsyncTaskExecutor.ensureAsyncTasksFinish();
        }
    }

    @Override
    public int getOrder() {
        return Ordered.HIGHEST_PRECEDENCE + 1;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

xlc520JavaJava小于 1 分钟
2
3
4
5
...
32