java 随机数生成器Random、ThreadLocalRandom、SecureRandom
简述java中常用的三个随机数类:
Random
ThreadLocalRandom
SecureRandom
Random 是最常用的类,ThreadLocalRandom 性能快,SecureRandom 注重安全。下面简单分析3个类的使用。
Random伪随机数生成器,可以传一个种子来生成随机数。种子就是一个指定的变量,用来参与生成随机数,如果什么都不传,默认使用System.nanoTime() 来参与生成。特点:Random 是线程安全的、不是加密安全的,因为是伪随机数。Random用到了compareAndSet + synchronized来解决线程安全问题,虽然可以使用ThreadLocal<Random>来避免竞争,但是无法避免synchronized/compareAndSet带来的开销。
生成指定范围随机数12345678910111213141516public class Test { //指定随机数范围 public static void getRandom1() { Random random = new R ...
spring boot @Bean源码分析
1.先看下 Bean 注解的内容
123456789101112@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Bean { @AliasFor("name") String[] value() default {}; @AliasFor("value") String[] name() default {}; Autowire autowire() default Autowire.NO; String initMethod() default ""; String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;}
Target 中指定了 ...
NIO-02 NIO和BIO的区别
模型BIO 和 NIO 的区别BIO 好比是通道传输,一来一回NIO 好比是管道传输,一堆来一堆回。
BIO 模型1234567________ _________| |-----------------------| || |-----------输入--------| || | | || |-----------输出--------| || |-----------------------| ||-------| |-------|
输入和输出都需要建立一条管道。也就是说,数据的传输是单向的,出去从输出流通道走,回来从输入流通道走。面向流,通道传输的是流
NIO 模型1234567_________ _________| |-----------------------| ...
NIO-01 概述
简述服务器实现模式为一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
Java NIO(Non-blocking / New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO 和 IO 的区别在于,IO 是面向流,NIO 是面向缓存。是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。
传统面向流的,单向的三个核心组件
Channels
Buffers
Selectors
1.Channels 负责传输白话: 就是数据传输用的通道。作用是打开到IO设备的连接,文件、套接字都行。绕绕话: 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
2.Buffers 负责存储缓冲区,用来存放具体要被传输的数据,比如文件、scoket 等。这里将 ...
闽南语-文读白话汇总
简述闽南语分:文读和白话两种读音。区别还是不小,完全可以做一种区分,我这里把常用的一些做一些汇总,持续更新。这个难点在于,要怎么让只明白普通话的人能读懂这个发音。。。很多音汉语拼音是没有这种拼法。为种更多的只能通过音频的方式进行展示,否则很容易搞不明白。而且文读和白话也完基本不一样。。。。第二个问题,各地发音、用字也不相同,无法一一展示。
闽南语常用词汇对照表
整理更新中...
读音
字
白话
文读
训读
用法
一
一方
二
三
三个(白)三国(文)
四
五
六
七
八
九
十
百
千
万
亿
字
白话
文读
训读
用法
天
天兵天将(文)、一天(白)
地
人
敌人(文)
东
西
西瓜(白)、西方(文)
南
北
日
一日、
月
月娘(白)、风月(文)
...
shell-判断奇偶数
前言不能直接除2的就不是偶数,比较简单。
123456789101112131415161718192021#!/bin/bashdataArr=(012345678910)for i in ${!dataArr[@]}do if [[ $(($i%2)) = 0 ]]; then echo "index: $i, data: ${dataArr[$i]}" fidone
结果:index: 0, data: 0index: 2, data: 2index: 4, data: 4index: 6, data: 6index: 8, data: 8index: 10, data: 10
需要注意的是,$(($i%2)) = 0 等号中间是有空格的,不能连着写,否则结果不正确。这可真是垃圾的设计!!
spring boot 解决生产环境下多线程调用FTP流被关闭问题
前言在 spring boot 下把 FTP 工具类以类的型式注入到 spring 容器中。FTP 工具类在实际应用过程中,如果是单例的对象会出现问题:当线程 A 调用FTP工具时调用连接,线程B 同时调用FTP并使用完闭关闭流,这时A的连接会就被关闭了。
解决方案将 Bean 置为多例对象。这样当线程每次调用该 Bean 就会生成一个新对象,互相之间不影响。
12public class FtpUtil {}
12345678910111213@Configurationpublic class FtpUtilConfig { @Autowired private FtpProperties ftpProperties; @Bean @Scope("prototype") public FtpUtil ftpUtil () { FtpUtil ftpUtil = new FtpUtil(); return ftpUtil; }}
1234 ...
docker安装prometheus
前言安装基于docker的prometheus来监控java微服务的各项目性能指标。使用docker来安装最简单省事。
安装拉取镜像,并查看一下本地镜像
12docker pull prom/prometheusdocker images
12REPOSITORY TAG IMAGE ID CREATED SIZEprom/prometheus latest 467da9b74cee 5 days ago 223MB
j## 拿下默认配置文件,用来挂载
将配置文件拷到$PWD/prometheus下,一会挂载用
1234# 启动docker run -idt --name=docker-prometheus prom/prometheus# 持配置文件docker cp -a docker-prometheus:/etc/prometheus/ $PWD/prometheus
prometheus目录下,有这些文件:主要的就是 prometheus.yml 这个配置文件。
123console_libraries ...
闽南语与普通话日常用语对照表
前言不包含发音方法,只对照日常口语中的用字不同。在跟北京的朋友翻译闽南语的时候发现很多日常用语原来普通话的字是完全不一样的,然后就开始整理。早期没有闽南语这个概念,都叫福建语,1930年代国民党执政后,福州人林森等人当权,认为凭什么闽南语可以叫福建话,把福州话放哪里, 硬把“福建话”改成“闽南话”,从此开始有闽南语这个概念。东南亚依然称自己说的是福建话。
各个市、区、县、镇、村用会有出入,同一个场景会有不同用法,这里我只把我主观上遇见用法较多的总结出来。泉州、漳州、潮汕、海南、台湾、浙江、海南、新加坡、越南使用闽南语的我都遇见过,我们村有很多越南新妇,从小讲在越南讲闽南语,后来嫁过来,口音用法完全不同,但是交流没问题。马来西来讲的闽南语感觉最难听懂。厦门有很多台湾人,讲话仔细也未必能听出来,但是台湾人说话习惯参加普通话,台湾普通话口音非常明显。
我本人讲的是泉州以北,莆田以南的交界处,讲的闽南语更加小众,属于泉州人能懂一半,莆田人完全听不完的方言,反过来我能讲、听懂其它两种,更接近厦门口音。我兄弟是隔壁镇,讲莆仙话,我们近20年都是半方言半普通话对话,除了去对方家里跟长辈讲用对方方言, ...
shell 数组
shell 也支持数组,就是写法跟平时的开发语言不太一样,反正我是觉得挺别扭。
声明数组数组数据使用一对括号( var )包起来,就能成为数组。
1234arr=(10 20 30 40)echo $arrecho $arr[1]echo $arr[2]
结果:
1020
打印数组打印数组的话要注意,直接打印数组,只会打印出第一条数数据,必须加上* 或 #,才能全部输出。
12345678910111213141516171819#!/bin/bash#数组取值days=(one two three 4)echo ${days}echo ${days[0]}echo ${days[1]}echo ${days[@]}echo ${days[*]}echo "**********"# 重置数组names=()names[1]=tomnames[2]=jackecho ${names}echo ${names[1]}echo ...