java基础
文章平均质量分 74
一个处女座-代码洁癖的程序猿
梦在翱翔 心在路上 不忘初心 砥砺前行
展开
-
多线程的利器:CompletableFuture
Java8已经发布7年了,不会还有人没用过CompletableFuture吧转载 2022-08-25 10:34:39 · 2648 阅读 · 2 评论 -
玩转Java 8 Stream 系列二进阶(Collectors.mapping 、Collectors.reducing、Collectors.summarizingInt等)
Collectors.groupingBy分组后处理 Collectors.mapping 、Collectors.reducing、Collectors.summarizingInt、IntSummaryStatistics、Optional、map与flatMap区别原创 2022-05-31 11:45:30 · 4932 阅读 · 2 评论 -
玩转Java 8 Stream系列一map、filter、collect、Collectors.toList、Collectors.groupingBy、sorted
玩转Java 8 Stream系列一map、filter、collect、Collectors.toList、Collectors.groupingBy、sorted原创 2022-05-30 20:13:03 · 1860 阅读 · 0 评论 -
List foreach 抛出java.util.ConcurrentModificationException分析
List foreach 抛出java.util.ConcurrentModificationException分析原创 2022-05-11 12:05:23 · 621 阅读 · 0 评论 -
一文详述线程池使用及其底层原理
一文详述线程池使用及其底层原理 ThreadPoolExecutor 阻塞队列 各个参数含义原创 2022-05-05 16:43:43 · 275 阅读 · 0 评论 -
Non-terminating decimal expansion; no exact representable decimal result. 的恩恩怨怨
Non-terminating decimal expansion; no exact representable decimal result.解决方式 RoundingMode模式原创 2022-04-08 16:10:37 · 935 阅读 · 1 评论 -
一文阐述Redis 8种淘汰策略、击穿、穿透、雪崩及其解决方式
一文阐述Redis 8种淘汰策略及击穿、穿透、雪崩、对应解决方案原创 2022-04-01 10:30:33 · 2093 阅读 · 1 评论 -
你知道Spring是如何解决循环依赖的吗?
你知道Spring是如何解决循环依赖的吗?通过三级缓冲原创 2022-03-30 19:28:45 · 948 阅读 · 1 评论 -
一文阐述设计模式单利模式的7种写法
一文阐述设计模式单利模式的7种写法 饱汉模式 饿汉模式 双重加锁 内部类 枚举类等原创 2022-03-28 15:57:48 · 213 阅读 · 1 评论 -
Java并发锁升级详解
Java锁升级详解(无锁、偏向锁、轻量级锁、重量级锁)原创 2022-03-25 11:34:15 · 929 阅读 · 1 评论 -
Java面试之重量级锁、轻量级锁(锁、分布式锁、锁升级)实现原理
Java面试之重量级锁、锁升级(基础锁、分布式锁)Java锁夺命连环问,你能坚持第几问?synchronized、ReentrantLock、CountDownLatch(倒计时门栓)、Semaphore(信号量)、CyclicBarrier(栅栏)底层原理及使用方法原创 2022-03-18 18:40:42 · 858 阅读 · 0 评论 -
面试之Mysql索引总结
mysql 索引创建(主键索引、普通索引、唯一索引、联合索引)B+树 索引树 最左匹配原则 explain 回表原创 2022-03-18 14:21:14 · 899 阅读 · 0 评论 -
一篇文章搞懂mysql数据库底层数据存储逻及保存数据过程
数据库底层存储结构 完整数据变更处理流程 表空间 .idb .frm原创 2022-03-15 16:20:41 · 1813 阅读 · 0 评论 -
面试连环问之分布式锁
面试连环问之分布式锁 Reddsion分布式锁 Redis分布式锁 Zookeeper分布式锁原创 2022-03-15 11:30:19 · 1186 阅读 · 0 评论 -
Spring分析之IOC原理
Spring分析之IOC原理(控制反转),通过图鉴的方式向大家阐述整个过程原创 2022-02-08 18:11:23 · 1222 阅读 · 2 评论 -
介绍一种服务端代码生成器使用方式
Windows系统Plugins位置Mac系统Plugins位置Mac系统Plugins位置选择 Install Plugin from Disk选项选择jar包下面介绍如何使用代码生成器插件在待生成代码目录点击右键,选择下面图标添加Mysql连接选择对应Orm、架构、生成文件目录代码示例...原创 2021-02-01 11:51:32 · 169 阅读 · 0 评论 -
分布式事务之servicecomb-pack saga springcloud开发框架接入
分布式事物之servicecomb-pack简单原理介绍及接入详情原创 2021-01-07 14:54:01 · 800 阅读 · 1 评论 -
策略模式之工厂形式
策略模式前言咱们在这里不重复了,大家可以看我上上篇文章策略模式之简单形式,上篇文章通过注解的形式解决类型分发,这次我们通过工厂模式,闲话少说,直接上代码我们先建一个接口StockOperate类public interface StockOperate { Boolean operate(WmsOperateStockParam wmsOperateStockParam);}因为利用到到里模版形式,所以创建一个抽象类BaseStockOperate,实现上述的接口publi.原创 2020-12-29 18:57:44 · 261 阅读 · 0 评论 -
对Alibaba RocketMq的使用封装
我们在使用阿里的RocketMq中间件,在消费端需要创建ConsumerBean实例的bean,配置consumer的一些配置,例如分组、topic、tag、线程数以及监听器,当有一个新的业务需要接入的时候,在现有的配置上需要加以下配置:1、新建监听器Bean,该bean要实现MessageListener接口,在实现方法中写业务逻辑,而且参数是Message、ConsumeContext,接入时每次获取数据都要进行下面重复的代码操作 String body = new String(messag原创 2020-12-29 17:55:16 · 1496 阅读 · 0 评论 -
Alibaba easyExcel对Excel操作之复杂标题处理
easyExcle对poi进行二次封装优化,对外提供了更加方便的接入方式,如果对导出Excle的标题有比较复杂的业务需求,那么就要用到官方提供的2中方式(模版填充、自定义标题),如果自定义标题也不能满足我们的需求,例如我们需要在标题中切入图片需求,要么采用第一种比较简单的模版填充方式,但是如果你不想使用模版的方式,倾向于使用java代码来实现,那么本文可能对你有所帮助,我们采用自定义标题加上拦截器。业务说明,根据业务需要我们需要生成如下截图的excel文件对导出文件进行分析:1、第一行合并单原创 2020-12-29 12:01:43 · 4500 阅读 · 1 评论 -
策略模式之注解形式
策略模式的前言咱们不在这里重复了,大家可以看我上一篇文章策略模式之简单形式,接下来我们一起对上一篇文章的弊端进行修复,这篇文章我们将通过注解的形式,简化调用逻辑,使接入方更方便使用,闲话少说,直接上代码我们创建一个注解接口类 StockHandleType 其中 WmsOperateStockTypeEnum 是每种入库类型的枚举@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Service..原创 2020-12-29 10:28:22 · 494 阅读 · 0 评论 -
策略模式之简单形式
我们在工作中会遇到由于业务类型太多,通过在代码中使用if/else或者swich的方式,区分不同类型,处理不同的业务逻辑,代码中充斥这大量的判断,导致可阅读性很差,而且新增一个业务类型,又要追加一次判断,一堆判断逻辑、业务逻辑,进一步使代码变得更加臃肿,不利于后续的代码维护,今天给大家介绍几种策略模式如何写。业务模式:我们就用互联网中常见的WMS仓库系统举例,WMS系统重要就是库存管理,库存数据来源入库又分为很多中,例如:上架入库、备货上架入库、备货下架入库、报损上架入库、报损下架入库以及移库等类型,每原创 2020-12-28 18:52:19 · 423 阅读 · 0 评论 -
Redis-持久化快照及AOF区别
一、Redis存储在内存中,如果服务器断电或者重启,内存中的数据会被清理,所以需要对Redis持久化操作,保证数据库的完整性;二、Redis持久化的方式:快照、AOF日志;三、快照与AOF各自特点:1、快照是一次全量备份,AOF 日志是连续的增量备份2、快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本3、AOF 日志在长期的...原创 2018-11-03 22:54:27 · 760 阅读 · 0 评论 -
Redis - 分布式锁
1、setnx 和 expire 组合在一起的原子指令来解决分布式锁,但这种方式是有缺陷的,不太安全的,例如Sentinel集群,当客户端向主节点申请分布式锁成功后,主节点还没来及向从节点同步时,主节点挂掉了,主从切换,某个从节点摇身一变成为主节点,第二个用户再次申请锁,是可以成功的,这样俩个用户成功申请到了2把锁,不安全因素产生了,解决该方案是通过Redlock算法。2、如果要使用redl...原创 2019-01-03 12:26:30 · 148 阅读 · 0 评论 -
Redis - info 指令
Info 指令可以获取到Redis内部一系列运行参数,大体上分为一下几个部分:Server 服务器运行的环境参数Clients 客户端相关信息Memory 服务器运行内存统计数据Persistence 持久化信息Stats 通用统计数据Replication 主从复制相关信息CPU CPU 使用情况Cluster 集群信息KeySpace 键值...原创 2019-01-03 12:22:39 · 288 阅读 · 0 评论 -
Redis - 扩展 - Stream
Redis5.0增加新数据结构Stream,是一个强大的支持多播的可持久化的消息队列,如下图所示是一个消息列表,将所有加入的消息都串起来,每个消息都有唯一的Id和对应的内容,消息持久化。Stream的唯一名称是Key,在我们首次xadd指令追加消息时自动创建。1、每个Stream可以挂多个消费组,每个消费组都有一个last_delivered_id在Stream上向前移动,代表当前消费...原创 2019-01-02 19:30:06 · 1008 阅读 · 0 评论 -
Redis - 集群 - Cluster
1、Redis Cluster是去中心化的,将所有的数据划为16384个slots,比Codis的1024划分的更细,每个节点负责其中一部分槽位,槽位的信息储存在每个节点中。当Redis客户端来链接集群时,会得到一份集群槽位配置信息,当客户端要查找某个key时,可以直接定为到目标节点。2、定为key所在对槽位1)Cluster默认会对key进行 crc16算法hash运算得到一个整数值,然...原创 2019-01-02 18:49:40 · 113 阅读 · 0 评论 -
Redis - 集群 - Codis
1、Codis是一种集群的实现方式,是使用Go语言开发的一个代理中间件,其上斜挂的的所有Redis事例构造一个Redis集群,当空间不足时,可以增加Redis事例,实现动态扩容2、Codis分片原理:它负责将特定的key转发到特定的Redis实例上,实现原理,首先将key进行crc32运算计算哈希值,再将hash后的值对1024取模得到余数,这个余数就是对应key的槽位,每个槽位会唯一映射...原创 2019-01-02 18:46:26 · 442 阅读 · 0 评论 -
Java通信各种输入流输出流、java的io与内存及常见的通信方式NIO AIO等介绍
一、通信概述1、常用流的介绍:1)SocketInPutStream:继承于FileInputStream,本身的缓冲区是爱内核中2)DataInputStream :可以处理流中的不同的数据类型3)ZipInputStream、GZinputStream、JarInputStream:可以对数据做压缩和解压缩4)ByteArrayInputStream:通过内存的某些数据得到...原创 2019-01-14 10:55:19 · 331 阅读 · 0 评论 -
JVM第四篇之益处、常用java工具
1、StackOverFlowError:栈溢出1)实例:下面代码报java.lang.StackOverErrorpublic class StackeOverFlowTest{ public static void main(String []args){ new StackOverStackTest().testStackOver();} pub...原创 2019-01-14 10:55:31 · 700 阅读 · 0 评论 -
Redis - 过期策略
1、Redis将所设置过期key都放到一个独立的字典中。过期key处理的方式。1)定期扫描:因为Redis将过期key都放到独立的字典中,所以可以定期扫描该字典,发现过期则删除;但是过期扫描不会扫描所有的key,而是采用贪心策略,策略如下首先从过期字典中随机 20 个 key,然后删除这 20 个 key 中已经过期的 key,最后如果过期的 key 比率超过 1/4,那就重复步骤 1。注...原创 2019-01-03 12:27:14 · 154 阅读 · 0 评论 -
Redis-字符串源码原理
1、Redis的字符串结构被设计成一个[SDS]结构,字符串实际内容是被存放在一个数组中,如下表 struct SDS<T> { T capacity; // 数组容量 T len; // 数组实际长度 byte flags; // 特殊标识位,不理睬它 byte[] content; // 数组内容 } 当...原创 2019-01-15 09:19:36 · 523 阅读 · 0 评论 -
Nginx完美解决跨域问题
1、跨域问题存在情况:当我们当前的域名与请求接口的域名不在同一个域名下时,在浏览器Console下会看到,跨域的错误提示,下面举一个例子来说明:1)前提条件:i、当前域名http://kuayu.comii、请求接口域名:http://csdn.b.com/cat当在前端页面通过ajax请求接口域名的数据时,会报跨域错误2、解决跨域方法解决跨域有多种方式,如果请求的接口...原创 2019-01-23 10:47:45 · 20061 阅读 · 3 评论 -
设计模式之状态模式
糖果机器:分为投入硬币-》转动手柄-》抛出糖果代码:状态上下文类:GumballMachine.java/** * 投币机 */@Data@ToStringpublic class GumballMachine { State soldOutState; State noQuarterState; State hasQuarterState;...原创 2019-05-08 19:17:18 · 171 阅读 · 0 评论 -
设计模式之组合模式
组合模式定义:允许将对象组合成树形结构来表现“整体部分”层次结构。组合能使客户以一致方式处理个别对象以及对象组合1、例如通过将菜单和菜单项放到相同的结构中,我们创建一个“整体部分”层次结构,即3由菜单和菜单项组成的对象树2、组合模式让我们能用树行方式创建对象的结构,树里面包含了组合以及个别的对象3、组合包含组件,组件有俩种:组合与叶子节点元素、4、组合使用户不再需要操心面对的是组合...原创 2019-04-30 19:28:12 · 126 阅读 · 0 评论 -
java架构统一处理异常
该统一异常处理基于springboot架构,利用切面技术,在service层或者controller层抛出异常后,被控制层切面捕获,转换后统一返回1、切面:控制层异常类,HandlerExceptionAspect.java/** * 控制层异常切面 */@Slf4j@ControllerAdvicepublic class HandlerExceptionAspect { ...原创 2019-05-07 10:17:08 · 3374 阅读 · 0 评论 -
java架构统一处理接口调用前后日志打印
利用切面技术,统一处理接口调用前后,接口信息的日志打印情况/** * Controller控制层处理切面,负责处理服务层调用前后的操作。 * */@Slf4j@Aspect@Componentpublic class HandlerControllerLoggerAspect{ /** * 切面处理方法 * * @param joinP...原创 2019-05-07 10:24:23 · 2760 阅读 · 0 评论 -
java自定义注解
自定义一个注解,用来检测某个值是否符合1、注解接口:SensitiveWordCheck.java,SensitiveWordValidator.class为实现类/** * @Description: */@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementTyp...原创 2019-05-07 11:17:44 · 231 阅读 · 0 评论 -
Mybatis批量插入sql语句 + 返回id
我们在保存数据操作时,可能会遇到批量插入的操作,有3中方法来操作该保存:一、Mybatis插入数据,返回id在sql语句上添加下面代码useGeneratedKeys="true" keyProperty="id"例如:<insert id="insert" useGeneratedKeys="true" keyProperty="id"> IN...原创 2019-07-17 16:11:23 · 2187 阅读 · 0 评论 -
通过服务名称查询端口号、pid、进程号
在工作中我们要按照http的端口号来映射服务地址,例如一个app的接口可以分成多种来源,如:h5接口、原生接口、或者购物车接口等等,前端调用这次接口的域名可能是多个,对应服务端的接口部署在不同的项目上,可以将多个项目同时部署在一台机器上,这时就会出现多个项目对应同一个服务器ip,这时要启动多个端口,需要运维在nginx中配置接口来源,例如将http://h5.login.com的域名映射到10.2...原创 2019-09-02 17:04:48 · 5935 阅读 · 0 评论