Java
文章平均质量分 58
JAVA技术分享官-乐乐
zzz
展开
-
JAVA工程师晋升必备路线图
JAVA工程师晋升必备路线图,以后会按照下述结构逐渐填充细则,以及面试题。欢迎关注微信公众号 【JAVA技术分享官】,公众号首发,持续输出原创高质量JAVA开发者知识点原创 2022-01-17 20:12:22 · 916 阅读 · 0 评论 -
condition系列注解全面罗列
在spring某些场景下,我们希望随着某些配置项/类的存在与否,决定一些bean是否被实例化并加载到spring容器。@Conditional系列注解,便是这个问题的解决方案。相关注解罗列1. @Conditional注解 (spring context包下注解)需要给定一个value参数,value必须继承Condition接口,实现match方法。举例:声明一个名为datasource的bean,我们希望只有在存在配置项 lele.datasource.enabled并且为true时才加载原创 2021-11-30 16:00:49 · 584 阅读 · 0 评论 -
JAVA代码的动态编译加载,随后实例化bean注入Spring容器
一 需求背景每天需要定时的进行各种姿势的数据校验,而这些姿势的叠加层出不穷,如果每增加一个小姿势都要进行测试部署上线,十分不值得。于是我们决定将代码搬到数据库里面,可以随时随地增加不同的“校验姿势”。注意:这样的作法虽然可以很便捷的上代码,但是生产环境上还是不建议这样做,有心人想在动态代码里面搞事情,太容易了。二 步骤在项目中先定义一个checker接口,这个接口便是我们动态代码class的父类。定义一个数据库表,形式如下:-- Dynamic Code CompilerDROP TAB原创 2021-06-01 22:12:30 · 1855 阅读 · 3 评论 -
将布隆过滤器变形,判断两个list是否据有包含关系(不一定准确,但一定能判断出不包含)
一. 布隆过滤器的原理使用一个Bit Array,不断将到来的key通过一个hash函数散列到这个bitArray中。然后就可以使用这个bitArray比较新来到的key散列后是否能够映射到这个bitArray为1的位。这里提出一个小问题:第二步中如何具体比较?我的想法是:可以将新key的散列值与bitarray&操作,得到的结果如果与bitarry相同即为能够映射。二. 扩展将布隆过滤器变形,判断两个list是否据有包含关系(不一定准确,但一定能判断出不包含)举例: 我们要判断原创 2021-03-04 17:28:22 · 331 阅读 · 2 评论 -
Spring Bean 如何重新注入?
故事背景:以spring cache redis为例,Nacos配置中心配置了cacheManager的ttl参数,以@NacosValue的形式注入并配置为cacheManager的参数。了解spring cache的朋友们应该明白,这里的cacheManager是spring初始化时初始化的一个Bean,这个Bean在初始化时从Nacos获取了一个ttl参数并配置在这个Bean上。需求:修改Nacos的配置,cacheManager自动更新,使得ttl这bean能够刷新。实现思路:通过事件原创 2020-11-27 20:14:26 · 3032 阅读 · 2 评论 -
java8 lambda要这么用
lambda表达式由来已久,Scala中lambda的使用是家常便饭,而在java8中,也引进了lambda及stream的使用。1. lambda什么是lambda表达式?Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 ——百度百科...原创 2020-09-22 17:57:47 · 257 阅读 · 0 评论 -
JAVA自定义注解及使用-简单案例
一. 元注解自定义注解首先需要了解四个元注解,它是注解在注解上的注解,用于定义自定义注解的特性。@Retention用于表示注解在什么情况下生效。RetentionPolicy.SOURCE(编译器不会将注解编译到class中)RetentionPolicy.CLASS(会编译到class但不会被加载到jvm)RetentionPolicy.Runtime(在jvm中生效)@Documented注解,是被用来指定自定义注解是否能随着被定义的java文件生成到JavaDoc文档当中。@Ta原创 2020-07-16 14:09:06 · 754 阅读 · 0 评论 -
总结 java线程池及其用法
文章目录一、常见线程池1. 只有一个线程的线程池2. 固定数量线程的线程池3. 可以缓存空闲线程的线程池4. 可以延时/定时的线程池二、ThreadPoolExecutor三、使用场景。一、常见线程池并发编程离不开线程的使用,线程离不开线程池的使用。这里简单总结下ThreadPoolExecutor的参数及场景。Executors 是 JUC提供的线程池使用工具类,里面定义了四种线程池的生成方法,我们从这里入手进行解释。1. 只有一个线程的线程池ExecutorService singleThre原创 2020-07-09 16:38:27 · 269 阅读 · 0 评论 -
深入JVM之 class文件解析
我们知道.java文件要转化成程序运行要经过一系列过程的,大体:javac(前端编译器)将.java文件编译成class文件 --> JIT(后端编译器/即时编译器)将.class文件实时将.class解释翻译成机器码,供计算机识别。JIT的解释过程有个叫热点代码的东西,类似缓存,它会将使用次数较多的代码提前编译好,提高效率。下面进入重点,这个随着java语言一起诞生,又随着JVM一同壮...原创 2020-03-14 21:26:20 · 242 阅读 · 0 评论 -
深入JVM之JVM发展史、内存布局
简述Java的诞生,从还叫Oak语言的时间算起来,已有近三十年。这三十年间,Java不断进化的不只是使用、语法、高层框架,更加核心的是JVM虚拟机及其组成部分的升级,不断的适应着时代的需求。发展历程时间事件JVM相关1991 年Oak语言诞生,目标(机顶盒、收音机等)的消费性电子产品1995年Oak改名Java1996年JDK1.0发布,技术包括虚...原创 2020-03-07 18:12:42 · 269 阅读 · 0 评论 -
深入JVM之 垃圾收集算法、垃圾收集器
一. 简述前文列举了JVM自Java诞生起,多年来的大概发展以及内存布局,这次我们就来聊一聊JVM中常见的垃圾收集算法以及这些历史与现在的垃圾回收器。深入JVM之JVM发展史、内存布局二. 垃圾收集算法要了解垃圾收集算法,还是要建立在分代理论的基础上才更容易明白它们的存在价值。新生代(包括Survivor)、老年代、永久代是堆的主要组成部分,这是我们在之前就已经了解到的了。那么我们的实例...原创 2020-03-08 23:28:00 · 151 阅读 · 0 评论