
java
vcjmhg
这个作者很懒,什么都没留下…
展开
-
线程本地存储ThreadLocal的原理及应用
概述通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中提供的ThreadLocal类正是为了解决这样的问题。 **ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。**每个线程都拥有了自己的数据这样也就避免了数据共享保证了线程安全。如何用?我们都知道SimpleDateFormat是线程不安全,但如果我们想在并发的场景中使原创 2021-09-02 20:03:52 · 283 阅读 · 0 评论 -
Atomic原子类的使用及其原理
本文总结了常用的原子类,及其内部实现的原理--CAS原理。Java 提供的原子类能够解决一些简单的原子性问题,但你可能会发现,上面我们所有原子类的方法都是针对一个共享变量的,如果你需要解决多个变量的原子性问题,建议还是使用互斥锁方案。原子类虽好,但使用要慎之又慎。原创 2021-08-02 21:18:36 · 1088 阅读 · 0 评论 -
Kafka的核心原理
本文主要以消息引擎的角度出发,介绍Kafka的设计原理,整篇文章分成四个大篇幅:一:Kafka消息格式以及演变过程,并且对消息的压缩也做了介绍二:Kafka实现消息传输的方式,包含了生产者和消费者如何建立连接,如果保障消息的传输的可靠性三:消息的保存方法,即Kafka是如何通过分区和副本机制来保证kafka的高可用四:消费者组以及重平衡问题即重平衡发生的过程,触发条件,以及可参考的解决方法原创 2021-07-31 19:52:56 · 536 阅读 · 0 评论 -
线程池使用与原理
Java线程池在设计的时候,是按照`生产者-消费者`的模式来设计的,整个过程遵循`Executor框架`,用`Runnable/Callable`来作为任务的抽象;用`Executor`接口作为任务执行的抽象,`Future`作为异步执行结果的抽象。在工程实践中,我们都推荐使用`ThreadPoolExecutor`的构造方法来创建线程k池,而不推荐`Executors`封装的方法去创建其他类型的线程池。`ThreadPoolExecutor`在创建线程时,一共有六个:* `corePoolSize原创 2021-07-29 20:29:57 · 122 阅读 · 0 评论 -
零拷贝的原理
零拷贝技术,本质上讲就是通过减少非必要的内存拷贝以及上下文切换,来提高文件在通道间复制速度的一种技术。以本文中的`transferTo()`方法为例,通过该技术,可以将原来四次内存间拷贝减少成两次,将四次上下文切换减少成两次,大大提高复制的速度。但零拷贝技术并非万能的,它有自己的使用场景,对于将大量数据从一个 I/O 通道复制到另一个通道的情况(例如 Web 服务器),都是合适的。而对于磁盘文件间的复制,比如从一个磁盘位置复制到另一个磁盘位置,这种方式是不可用的。原创 2021-07-28 10:59:19 · 589 阅读 · 0 评论 -
skywalking agent插件开发过程中各种拦截点的写法
本文主要总结了自己写SkyWalking agent端插件的时候常用的匹配方法,并对每一个方法写了一个demo以供参考(所有demo均来自社区插件中的具体类),希望能给想开发SkyWalking插件的小伙伴以帮助。原创 2021-07-18 22:40:17 · 949 阅读 · 0 评论 -
Java并发知识梳理
本文主要从分工、同步和互斥三类问题展开,从解决对应问题角度出发大致梳理了Java并发知识的学习前景图。后续将分若干部分来讲对应的内容。原创 2021-05-24 18:54:59 · 123 阅读 · 3 评论 -
java方法在java虚拟机中的执行过程
Java虚拟机在执行一个方法时,首先需要对该方法分配空间,也就是对应的一个栈帧。然后需要确定实际要执行方法的版本,可以有**解析**和**分派**两种方法去做选择,确定完方法版本之后,Java虚拟机在实际执行对应方法时会基于栈解析器来进行执行(此处也简单讲了基于栈指令集和基于寄存器指令的区别),执行完成后返回对应结果。这个方法的执行过程完成。原创 2021-05-10 11:19:19 · 467 阅读 · 0 评论 -
回溯算法解决子集、组合和排列问题
本文主要讲了通过回溯法如何解决排列、组合、子集这三类问题的基本思路:组合问题关键点在于用一个start来保证每次选择的元素是之前未被选择过的排列问题关键点在于通过contains()来保证每次选择的元素都未被包含在trace中这两类问题回溯结束的时机都是搜索到的元素达到了预定的长度,即我们可以判断trace中元素的长度来判断是否终止此次回溯。而子集问题则不然,因为它的长度是变长的,所以每次进入搜索的第一件事情就是将结果加入到结果集中。原创 2021-04-30 17:10:50 · 396 阅读 · 2 评论 -
Java对象的创建过程
本文主要讲了对象创建的五大过程以及每一步的具体作用,后续为了使用Java对象因而讲了一些对象访问定位相关的知识。原创 2021-04-28 20:59:41 · 356 阅读 · 0 评论 -
Java运行时内存如何分配
本文主要讲了Java运行时内存的区域划分。按照线程私有还是共有分成两类,其中私有部分包含了程序计数器、Java虚拟机栈、本地方法栈这三部分区域,其他区域为线程共有,并且每个区域的具体作用,文中也有阐述。原创 2021-04-28 15:02:38 · 661 阅读 · 0 评论 -
类加载器及其加载原理
本文主要讲了常用的类加载器,比如启动类加载器、扩展类加载器、应用类加载器以及自定义类加载器,详细介绍了类加载器在加载一个类时的原理以及加载所使用的双亲委派机制。以及使用双亲委派机制的好处以及破坏该机制的一些情况。原创 2021-04-20 18:31:33 · 514 阅读 · 0 评论 -
Class文件结构分析
Class文件是Java虚拟机执行引擎的数据入口,也是Java技术体系的基础支柱之一,因而学习Class文件的结构很有意义。本文主要讲解了Class文件结构中的各个组成部分,以及每个部分的定义、数据结构和使用方法。并结合一个例子(文中有代码,引用处附带有链接),讲解了Class文件是如何被存储和访问的。原创 2021-04-19 19:55:15 · 221 阅读 · 1 评论 -
解决fcitx输入法在Intellij IDEA开发工具中输入法候选框无法跟随光标移动的问题
概述在linux平台下使用搜狗输入法在IDEA中输入中文时,输入法候选框总是静止在IDEA的左下角,而不能跟随光标进行移动。虽然不影响输入结果,但很影响输入体验。并且其实网上确实给了一些解决方法,但好多时候,这些解决方法对小白不太友好,因此,此处我尝试站在巨人的肩膀上,对前辈的一些方法进行整合并且给出比较详细的解决步骤。系统环境:KDE Plama Version:5.19.5KDE Frameworks Version:5.73.0Kernel Version:5.8.6-1-MANJARO原创 2020-09-28 15:58:18 · 2291 阅读 · 7 评论 -
dccker-maven插件出现“Failed to execute goal com.spotifydocker-maven-plugin0.4.13....Permission den问题
本片文章主要是对自己使用docker-maven-plugin插件的过程中出现的permissin deny问题的记录以及解决方法的总结。希望能够同样遇到该问题的小伙伴以帮助原创 2020-08-25 11:30:50 · 598 阅读 · 0 评论 -
SpringBoot初探:创建运行与文件说明
本系列文章主要讲的是本人在阅读《Spring Boot In Action》过程中的总结的要点或者说是笔记,其中本文是第一篇,主要讲述的是Spring Boot项目的创建、运行以及文件说明。原创 2020-06-18 16:45:56 · 351 阅读 · 0 评论 -
SkyWalking调试环境搭建
本篇文章,从克隆源码开始到调试整个过程,分阶段来进行详细讲解`SkyWalking`编译环境的搭建。原创 2020-06-04 20:49:03 · 871 阅读 · 0 评论 -
GitHub从0到PR
本文尽量以通俗易懂的形式讲解在`github`中发起一次PR到合并的全过程,主要面向的是`github`的初学者。当然可能由于本人水平有限,文中难免有错误,如若发现,恳请支持,不胜感激!!????原创 2020-05-17 22:20:25 · 196 阅读 · 0 评论 -
枚举的本质
概述关于枚举类型,我们学过C语言的小伙伴应该都不陌生。所谓枚举类型,是一种特殊的数据结构,它的取值范围是有限的,所有取值结果都可以枚举出来,比如说一年四季(春夏秋冬)。对于确定范围的变量取值,我们通过枚举类型来表现较之用类表示更加简洁、方便、安全。下边我们借助一些例子来介绍枚举类型的使用以及其实现原理。基础枚举类型的定义和使用都是比较简单的,比如要表示一年的四个季节(春夏秋冬)我们可以定下...原创 2020-03-06 16:05:20 · 756 阅读 · 0 评论 -
关于继承那些事
引言本文结合一个例子来说明继承实现的基本原理。基类Base代码如下所示:public class Base { public static int s; private int a; static { System.out.println("基类静态代码块,s:"+s); s=1; } { System....原创 2019-12-29 15:23:09 · 252 阅读 · 1 评论 -
设计模式之单例设计模式
单例模式核心作用:保证一个类只有一个实例,并提供一个访问该实例的全局访问点单例模式分为:懒汉式、饿汉式、双重检测锁、内部类式、枚举式懒汉式:直接声明一个私有的静态类成员,然后将其构造器私有化优点:线程安全,调用效率高缺点:不能实现预加载实现过程:public Class LazySingleClass{ private static instance=new Laz...原创 2019-04-08 17:09:34 · 87 阅读 · 0 评论 -
23种设计模式之Builder设计模式
23种设计模式之Builder设计模式概述建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。本质分离了对象子组件的单独构造(由Builder来单独负责)和装配(由Director来负责)...原创 2019-05-19 13:59:51 · 128 阅读 · 0 评论 -
浅谈布隆过滤器
本文主要是对隆过滤器的原理,实现方法进行解释,并且借助Guava中的BloomFilter类对布隆过滤器的使用方法进行详尽阐述,以期能帮助读者初步掌握布隆过滤器的基本原理和使用方法,由于作者水平有限,文中若有错误,敬请之处,不胜感激!原创 2019-09-22 15:51:04 · 207 阅读 · 0 评论 -
代理(Proxy)设计模式
本篇博客主要从代理设计模式的概念、以及三种不同的实现方式入手(静态代理、动态代理 jdk实现方式、动态代理设计模式 cglib实现方式)通过若干例子来说明该设计模式多作用以及三种设计模式的优缺点,以期能给读者以启示。当然可能个人水平有限,中间难免会出现一些错误,如若发现恳请指出,不胜赐教。当然对于文章内容若有疑问,欢迎在下方留言,必当尽力解惑。原创 2019-10-07 20:57:15 · 335 阅读 · 0 评论 -
从内存角度分析浮点数大小比较方法
在我们日常开发中我们经常会遇到比较浮点数大小的问题,一般来说我们不能直接像整型那样比较(形如1==2),因为浮点型在内存中的存储方式是不同于整型,因为浮点数在内存中存储的是一个近似数值而不是精确数值,下边我们将从内存的角度分析为何浮点数存储时会有误差,以及浮点数常用的比较方法。一、二进制表示小数为何会造成误差 理解浮点数的第一步是考虑含有小数的二进制数字,...原创 2019-03-31 20:35:38 · 343 阅读 · 0 评论