Java
文章平均质量分 80
Java
cuiyaonan2000
躬身入局,高在造势。 器不锐,可磨。 术不静,可学。 道不强,可悟。 法不高,可练。 时不逢,可待。谋事在人,成事在天。
展开
-
ThreadFactory
ThreadFactory原创 2024-09-11 10:09:56 · 842 阅读 · 0 评论 -
MDC And NDC
slf4j是Java简单日志的门面(The Simple Logging Facade for Java),如果使用slf4j日志门面,必须要用到slf4j-api.logback是直接实现的,所以不需要其他额外的转换以及转换带来的消耗,而slf4j要调用log4j的实现,就需要一个适配层,将log4j的实现适配到slf4j-api可调用的模式。原创 2023-09-15 10:47:03 · 103 阅读 · 0 评论 -
ClassLoad Of Java
简单学习下ClassLoad的过程cuiyaonan2000@163.com。原创 2023-08-24 16:05:45 · 155 阅读 · 0 评论 -
The Commands Of Launch Java System
用的比较多的是java -jar ,你说非要把引用的jar、相关的配置文件、业务Jar都分开放置,以节省后期不同版本的业务Jar上传的时间,我个人觉得没有必要. 同时也在跟其它技术想冲突了,比如配置文件现在都用配置中心, 我们的业务Jar都会生成Docker 镜像 . 如果没有使用配置中间以及Docker技术这样子玩还可以cuiyaonan2000@163.com。原创 2023-05-30 16:58:09 · 314 阅读 · 0 评论 -
Jdk8ToJdk17
模块化在jdk9中加入,模块化的好处就是开发者可以根据需要引用某个依赖的指定部分,而不是引入这个依赖的全部。否则限制引入的功能不能实现,即取出module-info.java即使testmodel1中有限制,但是在testmodel2中还是能全部引用.如果你的设备中安装了JDK9即以上的版本,可以在终端中输入jshell,进入JShell,并编写脚本进行测试,同时按tab键可以调出候补提示。表示引用了testmoudle1.jar的工程只开发cui.yao.nan.domain包下的类.原创 2023-03-23 11:05:26 · 399 阅读 · 0 评论 -
Join&CountDownLatch
CountDownLatch: 主线程运行到latch.await()时,停止运行,直到CountDownLatch初始化的数值,被调用latch.countDown();减少到0的时候,主线程继续运行。join(): 主线程在遇到子线程执行join()时,停止运行直到子线程运行结束。这里整理下join()与CountDownLatch的应用场景。原创 2023-03-10 16:28:01 · 144 阅读 · 0 评论 -
HashedWheelTimer
main线程是用户线程,当在main线程中创建了线程A,B,C(同理也是用户线程),当main线程执行完毕,A,B,C尚未执行完毕的时候JVM会等待A,B,C执行完毕.创建定时任务,每秒钟执行一次,根据当前执行的时间的秒数来处理对应的数组对象,比如当前是52秒就获取数组下标[51] 来处理Set中的任务,处理完成就清空Set。如下2个图,表示在main方法中创建线程Thread-3,首先在main方法中sleep,且此时Thread-3还没有创建,可以看到main线程。原创 2023-02-14 16:03:48 · 691 阅读 · 0 评论 -
The Number Of ThreadPoolExecutor
这种任务消耗的主要是 CPU 资源,可以将线程数设置为 N(CPU 核心数)+1,比 CPU 核心数多出来的一个线程是为了防止线程偶发的缺页中断,或者其它原因导致的任务暂停而带来的影响。基于如上的描述可以了解到,设置线程池的数量需要根据业务操作类型进行分类,不同类型的线程池的线程数量设置规则是有差距的,侧面也说明不同业务的线程池应该分别创建,而不是一个线程池应用到所有类型的计算任务上。最优线程数 = N(CPU 核数)*(1/(1+WT(线程等待时间)/ST(线程时间运行时间)))具体的计算方法是 2N。原创 2023-02-13 16:01:33 · 674 阅读 · 0 评论 -
intern() of String
如上new 出来的String对象 一定不会等于 intern()出来的String对象,即new String("")一定不会从字符串常量池中找对象.而是重新创建一个对象.如上intern()对象的流程是: 先在字符串常量池中查找是否有相同的字符串,如果有就返回,如果没有就在字符串常量池中创建,并返回给new String("")参考JDK8的intern()的方法介绍。原创 2023-02-13 14:30:08 · 215 阅读 · 0 评论 -
加密&签名算法
而且这样的协议还有其他的优点。我们比较熟悉的校验算法有奇偶校验和CRC校验,这2种校验并没有抗数据篡改的能力,它们一定程度上能检测并纠正数据传输中的信道误码,但却不能防止对数据的恶意破坏。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。如下的鉴权协议又被称作"挑战--认证模式:在传输信道是可被侦听,但不可被篡改的情况下,这是一种简单而安全的方法。算法将普通的信息或者可以理解的信息与一串数字,转换成不可理解的密文的步骤。原创 2023-02-01 10:37:57 · 692 阅读 · 0 评论 -
JDK8: Collection
整理下JDK的集合的设计思路,以便我们在开发过程中创建自己的数据结构cuiyaonan2000@163.com。原创 2022-10-24 13:44:36 · 1212 阅读 · 0 评论 -
JDK: JRE
这个跟类加载有关.其它的没啥好说的,直接说重点吧。原创 2022-10-20 09:29:32 · 770 阅读 · 0 评论 -
Java:javaagent
不同于于我们之前使用-Djava.library.path 指定其它的非Java类包用于实现JNIjavaagent本身就是命令的一个选项,用于Java类在加载前,做一些不可告人的事情cuiyaonan2000@163.com,这里所说的不可告人的事情其实就是:字节码插桩字节码插桩 听起来似乎很高大上的样子,实际上就是在Java应用启动加载类前通过某种机制在执行的字节码实现嵌入代码片段或者修改字节码的操作。...原创 2022-08-01 22:12:09 · 1398 阅读 · 0 评论 -
Cglib
在动态代理的实现中,其中有个种实现就是Cglib,它可以代理所有对象的非final方法。实现原理就是通过字节码来动态生成一个代理类。这里简介绍下Cglib。原创 2022-08-01 21:34:36 · 198 阅读 · 0 评论 -
Jvm参数
如标题,这里主要考虑根据不同的环境,如何来设置Jvm的参数信息cuiyaonan2000@163.com。原创 2022-07-19 10:36:54 · 268 阅读 · 0 评论 -
ThreadGroup
如上我们可以在创建Thread中设置线程组.那自定义线程组的构造函数如下所示这里主要看下只需要name的构造函数由此可见我们创建的线程组一定是main线程组的子线程组.原创 2022-07-18 14:27:36 · 244 阅读 · 0 评论 -
Lock & Synchronized
这里所谓的安全只能针对同一时间,的put操作和get操作的安全cuiyaonan2000@163.com.这里整理一下Synchronized 和 ReentrantLock的相关信息synchronized是Java的关键字,而Lock是在java.util.concurrent下的一个类.由此可以明确synchronized是由Jvm底层来实现的锁,而Lock是由Api即代码层面实现的锁(JDK 1.5之后).参照如下代码,可以看到Lock的实现有3步,而synchornized则省事一点(但是不够灵活原创 2022-07-12 16:47:48 · 183 阅读 · 0 评论 -
Java:泛型
略泛型通配符(如下是JDK内置好的,区别与我们自定义的)展示泛型类和泛型方法的示例如下所示:边界 上边界 : 上边界表示,入参只能是Collections 或者Collections的子类. 下边界原创 2022-07-04 10:17:03 · 148 阅读 · 0 评论 -
Java8:Effectively final
Java8之前的局部内部类和匿名内部类访问的局部变量必须由 final 修饰,以保证内部类和外部类的数据一致性.这个数据一致性比较模糊,再清楚点讲就是:局部内部类和匿名内部类,如果可以传递非Final的变量,那如果在内部类中对该对象进行了操作的同时,外部又对该属性进行了操作,就会造成数据的不一致性或者说不能保证数据的安全性cuiyaonan2000@163.com这里主要说明下Java8引入lambda之后,针对局部内部类和匿名内部类的影响cuiyaonan2000@163.com首先看下lambda针对作原创 2022-06-29 09:06:30 · 375 阅读 · 0 评论 -
Java Design Pattern
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。适配器模式很好理解,实现起来也很简单.主要是我们要怎么实现,实现方式的不同,决定了该模式的运用的好坏cuiyaonan2000@163.com。原创 2022-06-15 17:17:48 · 457 阅读 · 1 评论 -
Java: Protocol Standard
返璞归真~,各种解决方案都是遵循的Java协议规范.针对同一个规范,提出了多种解决办法.变的是实现方式,不变的是协议.整理下一些常见的规范cuiyaonan2000@163.comJPA,即Java Persistence API,JAVA持久化API。JPA的创建目的是:是描述对象关系映射(ORM)和持久对象管理接口的规范,用于为ORM实现创建标准。ORM(Object Relational Mapping)是对象关系映射,在操作数据库之前,先把数据表与实体类关联起来。然后通过实体类的对象操作(增删改查)原创 2022-06-08 10:56:47 · 307 阅读 · 0 评论 -
Java Proxy
序言给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。如果根据字节码的创建时机来分类,可以分为静态代理和动态代理:所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和真实主题角色的关系在运行前就确定了。 而动态代理的源码是在程序运行期间由JVM根据反射等机制动态的生成,所以在运行前并不存在代理类的字节码文件参考资料:深入理解Java动态代理 - 知乎 【动态代理】InvocationHandler_点不点外卖的博客-CSDN博客_i原创 2022-05-24 10:27:18 · 323 阅读 · 0 评论 -
ThreadLocal&&Reference
序言目前ThreadLocal使用场景最多的就是多数据源的切换了.我们在使用ThreadLocal在不同线程之间切换数据源的时候要其实有很多知识点需要注意cuiyaonan2000@163.com线程的状态线程入门的知识,但是在后续的设计中会应用到cuiyaonan2000@163.com系统线程的状态新建(NEW) 就绪(RUNNABLE) 运行(RUNNING) 阻塞(BLOCKING): sleep,wating,blocking 死亡(DEAD)Java线程状态原创 2022-05-17 16:16:34 · 536 阅读 · 0 评论 -
JMM(Java Memory Model): Java内存模型
序言JVM:进程运行时将数据分区域存储,强调对内存空间的划分,即运行时数据区(Runtime Data Area)。 JMM:内存模型是定义了线程和主内存之间的抽象关系,即 JMM 定义了 JVM 在计算机内存(RAM)中的工作方式.通俗的讲就是,JMM是java如何管理线程跟我们的内存进行工作的方式.JVM的主要目的是把内存划分了多个区域比如堆,栈.两者不是一个层次的东西cuiyaonan2000@163.com参考资料:java内存模型_百度百科 Java 内存模型(Java M.原创 2022-05-09 17:44:01 · 277 阅读 · 0 评论 -
JDK8: Default Method In Interface
序言Java 8 新增了接口的默认方法。简单说,默认方法就是接口可以有实现方法,而且不需要实现类去实现其方法。Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法。我们只需在方法名前面加个 default 关键字即可实现默认方法。应用场景首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8 之前的集合框架没有 foreach 方法,通常能想到的解决办法是在JDK里给相关的接口添原创 2022-05-07 16:32:15 · 477 阅读 · 0 评论 -
Java8 Base64
序言Java 8 内置了 Base64 编码的编码器和解码器. 类目录:java.util.Base64Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。(用于编解码我们一般的信息) URL:输出映射到一组字符A-Za-z0-9+_,输出是URL和文件。(用于编解码URL字符串,区别就是把会把URL中的"/"编码成"_") MIME:输出隐射到MIME友好格式。.原创 2022-05-07 15:58:13 · 1600 阅读 · 0 评论 -
JDK8: Funcationl Interface
序言之前我们了解过Jdk8提供的Predicate,是JDK提供的一种判断true和false的规范类.其实JDK8同时还提供了很多类似于Predicate的函数式接口.这里简单介绍下.让我们以后的代码更容易读懂.cuiyaonan2000@163.com参考资料:Java 8 函数式接口 | 菜鸟教程函数式接口函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。比如我们之前使用的Predicate类的源代码就只有一个原创 2022-05-07 15:10:58 · 321 阅读 · 0 评论 -
JDK: Date Process
序言整理下JDK8以后针对时间的加强处理原创 2022-03-15 15:24:46 · 801 阅读 · 0 评论 -
Reactor Thread Model
序言WebFlux基于Reactor线程模型,WebFlux又是AIO的实现.同时Netty也是使用的Reactor线程模型.所以有必要了解下Reactor线程模型,以应对多种不同技术的变更cuiyaonan2000@163.com根据大神Doug Lea 在 《Scalable IO in Java 》中的介绍,Reacotr模型主要分为三个角色(如下的角色都是线程,只是他们的作用域不一样cuiyaonan2000@163.com)Reactor:把IO事件分配给对应的handler处原创 2022-03-07 17:22:55 · 496 阅读 · 2 评论 -
Java: Fork/Join使用
序言我们在Jdk8中使用Stream Api 和 CompletableFuture 的时候知道 他们都默认使用了ForkJoinPool线程池. 故此介绍下Fork/Join的框架.如题此框架是在Jdk7中引进的cuiyaonan2000@163.com简介Java.util.concurrent.ForkJoinPool由Java大师Doug Lea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。我们举个例子:如果要计算一原创 2022-03-02 17:52:13 · 941 阅读 · 0 评论 -
Predicate
序言此断言非彼断言.目前来看主要用于校验.同时java.util.function下有很多类型的Predicate,触类旁通吧cuiyaonan2000@163.comAPIpackage java.util.function;import java.util.Objects;/** * Represents a predicate (boolean-valued function) of one argument. * * <p>This is a <a原创 2022-01-19 14:36:45 · 378 阅读 · 1 评论 -
ThreadPool
序言线程池经常用,但是很少自己去创建,程序中一般使用默认的.默认的线程池可能会让你失望,因为Java默认线程池只有1个,且只要你不在你代码中显示的指定,那都是共享的一个线程池,且线程池内的线程数量就是你当前机器的CPU内核数cuiyaonan2000@163.comForkJoinPool.commonPool它的作用范围非常的广大.所有的java程序类默认的线程池,有且只有1个,即大家共享的.比如他们俩都是默认使用了ForkJoinPool.commonPool作为线程池,当没有指原创 2022-01-13 11:34:38 · 647 阅读 · 1 评论 -
JAVA:响应式编程
序言通常我们编写的Java程序,都是一行执行完了,再执行下一行.上一行没有执行完,下一行就不会执行.这种就是指令式编程.另外一种就是响应式编程,既可以满足当前一行命令还没有执行完时,下一行命令就可以启动执行.当需要上一行命令的结果时再去获取相关值(或者上一行结果在执行完后主动的告诉我们)cuiyaonan2000@163.comCompletableFuture在Java8 之前就有Future提供了响应式编程的实现方式.但是有一些缺陷.所以提供了CompletableFuture,原创 2022-01-12 17:10:45 · 5440 阅读 · 0 评论 -
Java 8 Optional
序言整理下使用过程中的心得.更详细的信息参考官方网址:https://www.runoob.com/java/java8-optional-class.htmlOptional 类:是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。 Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。正原创 2021-08-31 09:50:55 · 195 阅读 · 0 评论 -
Java正则
序言整理下java 正则的规则.官网的API内容优点分散.https://www.runoob.com/java/java-regular-expressions.html正文\ :的使用比较特别,比如我们知道"+"在正则中有特殊含义,如果作为字符+ 字需要 使用"\+".最有意思的是"("也是特殊含义,的符号,如果要使用就必须使用"\\(".cuiyaonan2000@163.com. 字符 说明 \ 将下一字符标原创 2021-08-27 13:50:01 · 1053 阅读 · 0 评论 -
电子围栏的实现原理
序言整理下电子围栏的算法.先看下经纬度的含义(^_^),与地球的关系经线(英文:longitude,简写long): 连接南北极的圆 纬线(英文:latitude,简写lat): 以赤道为中心的圆.原创 2021-07-30 09:58:49 · 13597 阅读 · 3 评论 -
Java 8 Stream
Stream这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。Java中的Stream并不会存储元素,而是按需计算。数据源流的来源。原创 2021-03-25 18:27:46 · 468 阅读 · 2 评论 -
Java调用外部程序(如Windows下的Exe,或Linux的Shell)
序言 java程序可以调用Jvm外部的一些应用程序来完成一些功能.目前基于JDK1.8来做实验~ 目前java有如下两种方式来调用其它程序,Runtime和ProcessBulider提供了不同的方式来启动程序,设置启动参数、环境变量和工作目录。(这些都能设置,就是帮你找到外部可执行文件的位置与启动变量,具体怎么执行,可以查看Runtime和ProcessB...原创 2020-04-21 10:33:10 · 8027 阅读 · 0 评论 -
Java Serializable:明明就一个空的接口嘛
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/qing_gee/article/details/93176705对于 Java 的序列化,我一直停留在最浅显的认知上——把那个要序列化的类实现 Serializbale 接口就可以了。我不愿意做更深入的研究,因为会用就行了嘛。...转载 2019-10-17 17:14:43 · 185 阅读 · 0 评论 -
关于HashMap容量的初始化,还有这么多学问。
在《HashMap中傻傻分不清楚的那些概念》文章中,我们介绍了HashMap中和容量相关的几个概念,简单介绍了一下HashMap的扩容机制。文中我们提到,默认情况下HashMap的容量是16,但是,如果用户通过构造函数指定了一个数字作为容量,那么Hash会选择大于该数字的第一个2的幂作为容量。(3->4、7->8、9->16)本文,延续上一篇文章,我们再来深入学习下,到底...转载 2018-10-18 13:45:21 · 1149 阅读 · 0 评论