B-java基础+jvm+并发+设计模式
文章平均质量分 71
java基础+jvm+并发+设计模式,综合分类放在这里
张晓祥-长草颜团子
长草颜团子表情包忠实粉丝
展开
-
if从入门到出轨
if从入门到出轨,业务代码大量的if占据着整个项目,显得不太美观,审美疲劳,处于过于疲惫,那么我们选择一种新鲜的方式来处理它,达到出轨的感觉,让代码写起来不太正经,符合当下年轻人的style原创 2023-02-12 21:51:16 · 7034 阅读 · 1 评论 -
java安全框架之shiro的入门
java流行的权限管理框架目前主要有两款,且都是出身名门,shiro是大名鼎鼎的Apache软件提供商下的,而spring security是spring全家桶成员的一员,都是安全类框架,主要对比如下可以自行查阅其他资料,这里主要说一句就是:shiro和spring security既然都存在,都在企业级应用中大量使用,显然就是选择的不同,根绝业务需求选择了即可,过多对比不再本博客赘述,请自行查阅相关资料.官网:http://shiro.apache.org/什么是权限管理基本上涉...原创 2020-09-15 14:52:48 · 685 阅读 · 0 评论 -
使用Redis实现分布式锁
分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁本篇博客介绍的是第二种,基于Redis的分布式锁,实际上是使用Redisson这一款强大的框架来实现分布式锁的.代码示例: https://gitee.com/zhang-xiao-xiang/zxx-redis-lock代码结构预览1:创建一个springboot的基本项目,写好一些基本接口所需的基本pom依赖 <!--spring b..原创 2020-09-11 00:34:42 · 867 阅读 · 0 评论 -
java从入门到出轨
这是一本还没有发行的图书,因为作者还在编写中,这里先占个坑位,希望以后能够对一些对编程爱好者,或者想尝试做编程的小伙伴一些建议或者真实的感受.这并只是一个普通的码农无聊瞎写的文章,他一天无聊得很,时不时爱瞎总结点杂七杂八的.这些总结呢他希望通过各位大佬的指点,并在后续迭代中逐步完善,没有一上来就是最终版的对吧,开篇作者表达的是:本书定位为娱乐类的编程杂文,茶余饭后可以瞅一瞅的狗屁文章,后面作者会持续更新,这里先把名字起好,哈哈哈.原创 2018-06-22 14:11:59 · 145430 阅读 · 0 评论 -
java 并发编程之AQS(并发界的扫地僧)
AQS是什么所谓AQS,指的是AbstractQueuedSynchronizer,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock、Semaphore、CountDownLatch、CyclicBarrier等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。把它比喻成扫地僧是比较合理的,把线程相关技术比喻成一些武功秘籍,那么AQS就是作者,掌握了秘籍的灵魂.用AQS自己模拟一个CountDownLat原创 2020-08-26 18:13:27 · 6077 阅读 · 0 评论 -
java线程治理法宝2: Future和Callable(可以处理后续结果,后来的我们)
Future的核心思想是:一个方法的计算过程可能非常耗时,一直在原地等待方法返回,显然不明智。可以把该计算过程放到线程池去执行,并通过Future去控制方法的计算过程,在计算出结果后直接获取该结果。...原创 2020-08-26 08:52:48 · 6734 阅读 · 0 评论 -
JAVA 多线程之控制并发流程
简介控制并发流程的工具类,作用就是帮助我们程序员更容易得让线程之间合作,让线程之间相互配合,来满足业务逻辑,比如让线程A等待线程B执行完毕后再执行等合作策略。CountDownLatchcountDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。CountDownLatch使用举例pack.原创 2020-08-24 16:00:44 · 7081 阅读 · 0 评论 -
java 并发容器ConcurrentHashMap与阻塞队列
ConcurrentHashMap简介ConcurrentHashMap是Java1.5中引用的一个线程安全的支持高并发的HashMap集合类。JDK1.8的ConcurrentHashMap 和JDK1.8的HashMap是很相似的。其中抛弃了原有的 Segment 分段锁,而采用了CAS + synchronized来保证并发安全性。ConcurrentHashMap存在的意义1、线程不安全的HashMap因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用..原创 2020-08-19 18:17:38 · 7237 阅读 · 0 评论 -
java CAS
无锁的概念(开胃概念)在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的情况发生的概率特别小,可以无所顾忌地做事,但对于悲观派而已,他们总会认为发展事态如果不及时控制,以后就无法挽回了,即使无法挽回的局面几乎不可能发生。这两种派系映射到并发编程中就如同加锁与无锁的策略,即加锁是一种悲观策略,无锁是一种乐观策略,因为对于加锁的并发程序来说,它们总是认为每次访问共享资源时总会发生冲突,因此必须对每一次数据操作实施加锁策略。而无锁则总是假设对共享资源的访问原创 2020-08-18 11:52:46 · 6386 阅读 · 0 评论 -
java 原子类
Java 并发包中的原子类都是基于无锁方案实现的(CAS),相较于传统的互斥锁,无锁并没有加锁、解锁、线程切换的消耗,因此无锁解决方案的性能更好,同时无锁还能够保证线程安全。java原子类预览AtomicInteger 示例package com.zhang.myjuc.a4.atomic;import java.util.concurrent.atomic.AtomicInteger;/** * AtomicIntegerDemo:演示AtomicInteger的基本用法,对比原创 2020-08-17 20:27:56 · 6621 阅读 · 0 评论 -
java的中的各种锁
Synchronzied与ReentrantLock(Lock接口的一个实现类)的对比ReentrantLock有很多Synchronzied 不具备的功能ReentrantLock基本使用示例代码如下(重要的事情是解锁哈)package com.zhang.myjuc.a3.lock.lock;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/**..原创 2020-08-16 23:30:39 · 7429 阅读 · 0 评论 -
并发编程之ThreadLocal
ThreadLocal是什么是用来维护线程中的变量不被其他线程干扰而出现的一个结构,内部包含一个ThreadLocalMap类,该类为Thread类的一个局部变量,该Map存储的key为ThreadLocal对象自身,value为我们要存储的对象,这样一来,在不同线程中,持有的其实都是当前线程的变量副本,与其他线程完全隔离,以此来保证线程执行过程中不受其他线程的影响。主要是四个方法1. void set(Object value)设置当前线程的线程局部变量的值。2. public Ob...原创 2020-07-26 16:50:35 · 8013 阅读 · 0 评论 -
java线程治理法宝一:线程池
线程池使用及优势线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务, 如果线程数量超过了最大数量 超出数量的 线程排队等候,等其它线程执行完毕,再从队列中取出任务来执行。 它的主要特点为:线程复用,控制最大并发数,管理线程优点:1:降低资源消耗。通过重复利用己创建的线程降低线程创建和销毁造成的消耗。2:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。3:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资原创 2020-07-26 11:32:40 · 8186 阅读 · 0 评论 -
java小数计算工具类(直接用糊涂工具包,我也不知道写个这个干什么哈哈)
import java.math.BigDecimal; /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。 */ public class ArithUtil{ // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; /...原创 2019-09-11 13:38:57 · 43697 阅读 · 0 评论 -
JDK8新特性
关于jdk8的改变大体有对lambda表达式(借鉴其他语言的函数式编程方式)简化很多啰嗦的代码,还有就是流的操作,类似把集合当做数据库,java的流操作当做SQL,这样方便对集合的数据进行操作,当然对JDK的升级还有很多,这里只是小结一些常用的.GitHubhttps://github.com/zhang-xiaoxiang/jdk81lambda表达式简单试用package ja...原创 2019-09-08 21:12:33 · 48059 阅读 · 0 评论 -
安全发布对象-发布与溢出
举个不安全的发布对象例子,比如我们创建一个类是下面的方式创建,那么则属于不安全发布对象,就是说这个类压根不安全,使用的时候会导致在多线程环境下不安全package com.example.gaobinfa.publish;import com.example.gaobinfa.annoations.NotThreadSafe;import lombok.extern.slf4j.Slf...原创 2019-08-22 22:01:09 · 61665 阅读 · 0 评论 -
一些常用的写法
常用固定写法引入jstl标签写法,注意前提是已经导入了两个相关jar包<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>找到根目录${pageContext.request.contextPath }设置响应字符编码resp.setContentType("text/html;chars...原创 2019-04-21 15:13:12 · 209172 阅读 · 0 评论 -
java设计模式-代理模式
代码参考(更详细,这里为了博客简洁,代码去了一些注释)https://github.com/zhang-xiaoxiang/proxy1静态代理(接口代理)需求(干什么):对明星唱歌的业务流程进行代理,而明星唱歌还是交由明星自己唱歌,这个流程把唱歌分成2部分了,1:歌手尽管唱歌,2:代理公司负责打杂(面谈,签合同,订票,收钱),对被代理的歌手来说,他解放了,相当于增强了,不用自己面谈......原创 2019-04-10 13:54:28 · 212798 阅读 · 2 评论 -
postman中header传递参数的实现
如图所示,我们经常会遇到传递参数的时候将参数放在header里进行传输,但是接口文档参数是在header的参数,并不是在json体里面的(当然json体里面也会带其他参数)比如我们已post请求为例子import com.alibaba.fastjson.JSONObject;import org.apache.http.HttpEntity;import org.apache....原创 2019-04-17 18:42:28 · 246225 阅读 · 0 评论 -
java反射知识点小结
参考代码:https://github.com/ZhangXiaoixiang/reflectdemo说明:收集的网上资料,自己整理收集视频教程(腾讯课堂): https://ke.qq.com/webcourse/index.html#cid=298879&term_id=100354189&taid=2094161629319039&vid=t1426y3hmo...原创 2019-05-04 15:54:19 · 192438 阅读 · 0 评论 -
java策略模式实战示例
以一个顾客价格计算策略为背景,写一个策略模式的demo参考代码 :https://github.com/zhang-xiaoxiang/DesignPatterns23没有用策略模式我们一般是下面的写法,直接写一个类,在类里面直接写策略算法(功能实现)//package com.demo.strategy;/** * NoStrategy:没有策略的做法 * 实现起来比较容...原创 2019-05-25 00:32:21 · 186579 阅读 · 14 评论 -
获取项目根路径(和没有HttpServletRequest作为入参,但是要获取头部等请求相关的信息)
spring boot //获取项目的根路径 File path = new File(ResourceUtils.getURL("classpath:").getPath()); String classpath = path.getAbsolutePath(); //通过截取根路径获取图片上传路径 ...原创 2019-06-13 15:55:21 · 168447 阅读 · 0 评论 -
阿里巴巴fastjson转换对象时属性为空null的处理为空串""的解决办法
在使用阿里巴巴的插件返回对象是,如果需要对其进行json格式化一下,默认是不反回null属性的,当然可以设置的,使用重载方法JSONObject.toJSONString(travelWrite1, SerializerFeature.WriteMapNullValue注意是使用SerializerFeature.WriteMapNullValue序列化规则这里介绍一下JSONObj...原创 2019-07-11 11:30:22 · 126865 阅读 · 0 评论 -
使用阿里巴巴的easy-excel实现excel导入到数据库和从数据库导出excel到桌面
直奔主题了,需求:实现如题所述的基本需求,快速实现excel的处理,那么显然我要给个例子放在GitHub上才能假吧意思体现我的良心项目的地址https://github.com/zhang-xiaoxiang/easy-excel (含有数据库SQL和Excel表格)实现以下excel的数据与数据库的导入导出,具体实现功能如下1:excel下载(单sheet的实现了,多sheet...原创 2019-07-22 21:47:42 · 116290 阅读 · 20 评论 -
spring boot2使用AOP注解和反射知识实现非空参数的切面判断
项目demo GitHub上https://github.com/zhang-xiaoxiang/judge-parameter我求求你们不要再黑蔡徐坤了好吗?他是我朋友的救命恩人啊,上次我同学出了车祸,成了植物人。医生都放弃了,都说别救了。可那天在病房,电视上在播蔡徐坤打篮球的视频,我朋友硬是从昏迷中醒来把电视给关了!!!你还在为一大堆参数判断而烦恼吗?这里提供一种思路,使用AO...原创 2019-07-22 23:18:28 · 107213 阅读 · 0 评论 -
java设计模式之装饰器模式(包装器模式)
显然设计模式往往追求开闭原则,所以往往是面向接口编程,那么万事万物就是先写接口,把需求弄出来,这里以一辆车子在陆地上跑为基础,对它进行装饰,使它可以具备更多的"功能",达到装饰的效果.这里由于代码相对简单,直接写在一个类里面了package com.demo.decorator;/** * ICar:抽象构建,面向接口编程,不管三七二十一,来个接口明确要干什么哈 * 就是实现一个毫无...原创 2019-08-10 11:38:36 · 82105 阅读 · 2 评论 -
java并发编程之-JUC并发容器的使用
在 Java 5.0 提供了java.util.concurrent(简称JUC)并发编程容器包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步 IO 和轻量级任务框架;还提供了设计用于多线程上下文中的 Collection 实现等我们拿其中常用的list容器来作为例子,进行高压(高并发测试),使用代码和JMter测试工具来分别测试线程安全问题...原创 2019-08-11 15:11:06 · 77281 阅读 · 0 评论 -
Java设计模式-单例模式(考虑并发和线程安全的)
单例模式,参考完整代码在GitHub地址:https://github.com/zhang-xiaoxiang/patter23或者https://github.com/zhang-xiaoxiang/DesignPatterns23一般三步走,1初始化2构造器私有3提供获取实例的方法1单例模式---饿汉式package com.demo.singleton;/**...原创 2018-12-23 14:15:27 · 202476 阅读 · 0 评论