java
文章平均质量分 53
鲜卑大帝
在互联网大潮中挣扎的miller.fan。
展开
-
手把手教你实现一个 EventBus 框架
一、事件总线管理的“原材料”观察者的基础信息,维护的是观察者以及它收到消息后需要执行的方法;二、事件总线的核心-注册表注册表示实现事件总线框架时最复杂的部分,我们提供两个基本功能,注册观察者和发消息(执行观察者的逻辑);这个类大量使用了 Java 的反射语法,不过我已经在代码中为大家详细的标明每一行代码的意义,理解起来并不难。这里使用了CopyOnWriteArraySet,顾名思义,在写入数据的时候,会创建一个新的 set,并且将原始数据 clone 到新的 set 中,在新的 set 中写入原创 2022-06-21 11:19:27 · 640 阅读 · 1 评论 -
java开发中异常处理的几种手段
然后在异常的地方将错误码和错误描述返回: 这是项目中经常使用的一种简单的手段,定义好枚举的错误码和错误描述直接返回给前端即可。有点简单,缺点是增加或者修改均需要编译、打包、重新部署等。使用枚举的错误码 定义配置文件:errorCodeConfig.properties 读取配合文件的工具类:返回值拦截器: 当发生异常时便可以将错误码转成错误描述返回给前端。该办法有一个好处是可以修改配置文件,然后重新启动程序就可以实现错误描述的修改,免去了编译代码和重新发版的麻烦。但是拦原创 2022-06-16 22:01:56 · 1084 阅读 · 0 评论 -
解决Mybatis源码使用IDEA打开后多处报错的问题
1、先看工程报错BiFiunction是Java8引入的,这里显示找不到;HashSet<>(),原本可以自己推断类型,这里显示版本在level5不支持;2、怀疑问题配置的javaJDK版本不对;确实是jdk1.8往下找Modules中,Language lever 是5,我们改成8试一下;3、问题解决...原创 2022-05-26 11:29:24 · 454 阅读 · 0 评论 -
Mybatis源码分析---Mybatis二级缓存中的责任链模式
一、Mybatis的源码写的像艺术品Mybatis的代码设计的非常有观赏性,其中大量使用设计模式,并且用的非常棒;比如Mybatis将日志功能委托给其他的日志框架使用的是适配器模式加工厂模式实现的;Mybatis的插件是通过代理模式+责任链模式实现的;Mybatis的二级缓存是装饰器模式+责任链模式实现的;读源码不仅可以让我们了解其底层技术细节,有利于提高我们自己的编码能力,也可以学习这些优秀的框架中采用什么样的数据结构?引入了什么算法?组件的抽象遵循了什么样的设计原则?二、实现二级缓存的需求分析原创 2022-05-17 17:32:12 · 679 阅读 · 0 评论 -
最好的设计就是“藕断丝连”,成长为架构师的路上,需要独立思考
目录1、代码设计必须讲究解耦合2、解耦到处有,只遇有心人3、最好的设计:藕断丝连3.1 写xml文件3.2 写一个注册中心,加载并解析Bean3.3、写一个接口,所有策略的“爸爸”3.4、写一个“儿子”,实现“爸爸”的愿望3.5、写一个实体类、一个service和一个controller,来验证我们的创新“策略模式”4、启动项目5、用postman测试一下1、代码设计必须讲究解耦合为什么要解耦合,因为耦合深的代码不仅难以维护,不好扩展,还无法复用。Java设.原创 2021-07-29 20:41:04 · 334 阅读 · 0 评论 -
一周学会netty之核心组件和设计
1、使用netty实现一个服务端程序该程序在ACCEPT到任何connection后,不处理数据,只是简单的返回一个时间戳!代码路径:com.miller.nettyox.sevice.TimeServerHandler2、使用netty写一个客户端的程序该程序用于向服务端发出请求,获取当前时间,拿到时间戳以后,将时间戳转换为“客观”能够看懂的样子!代码路径:com.miller.nettyox.client.TimeClient3、使用netty实现服务端和客户端程序的不同姿势Bo原创 2021-03-03 16:57:56 · 152 阅读 · 1 评论 -
使用读写锁确保HashMap成为一个线程安全的容器
一、众所周知,HashMap是线程不安全的我们可以选择ConcurrentHashMap二、如果没有ConcurrentHashMap,如何保证HashMap是线程安全的可以利用读写锁来保证其线程安全性,同时提供不错的吞吐量和并发性。package com.miller.datastructure.readwrite;import java.util.HashMap;import java.util.concurrent.locks.Lock;import java.util.原创 2021-01-14 15:23:24 · 1011 阅读 · 2 评论 -
java中的并发工具类---大秦帝国篇
java中的并发工具类java中的并发工具类 序号 工具类 匹配的业务场景 1 CountDownLatch 一个或者多个线程等待其它线程完成操作 2 CyclicBarrier 多线程计算数据,最后合并计算结果的场景 3 Semaphore 流量控制 4 Exchanger 线程质检交换数据 1、CountDownLatch的使用测试代码package com.miller.fanxing;import j原创 2021-01-10 10:02:10 · 365 阅读 · 2 评论 -
推荐一个在线文档生成器
网址:https://java.bejson.com/generator/效果:CREATE TABLE `wo_jp_branch_org` ( `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', `branch_org_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL原创 2020-08-16 23:16:00 · 679 阅读 · 0 评论 -
如何在maven工程中引入开源库中没有的Jar
参考:https://www.cnblogs.com/zhoudy/p/10197145.html原创 2020-03-05 21:00:07 · 293 阅读 · 0 评论 -
使用Gson,将javaBean转换成json格式
在pom文件中引入:<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --><dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artif...原创 2020-01-06 14:54:51 · 999 阅读 · 0 评论 -
用程序员的语言:5000工科男抢200女同学做女朋友,怎么完美解决
1、有人在群里喊为啥我的打印结果不对,我一看写的还挺有意思,不仅用到了Semaphore,还有线程管控和排序问题。就帮着改了一下。原来的代码是这样写的:public class JiShuDemo { /** * @Description: 当只有一个线程去执行加一的操作时,最终的结果都是等于总数5000 * 但是...原创 2019-11-14 10:54:20 · 947 阅读 · 3 评论 -
HashMap是线程不安全的?证明它,并提出线程安全的解决办法!
1、线程不安全的例子public class testHashMapUnsafe { public static void main(String[] args) { HashMap<String,Object> map = new HashMap<String,Object>(); for (int i = 0; i <...原创 2019-11-12 18:26:50 · 467 阅读 · 0 评论 -
HashSet线程不安全,证明它,并且提出线程安全的解决办法
1、HashSet线程不安全public class testHashSetUnsafe { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); for (int i = 0; i <30; i++) { ...原创 2019-11-12 18:13:14 · 1802 阅读 · 0 评论 -
ArrayList线程不安全,如何改进?CopyOnWriteArrayList
1、ArrayList线程不安全测试代码public class testArrayListUnsafe { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.forEach(Syste...原创 2019-11-12 17:33:59 · 178 阅读 · 1 评论 -
CAS是什么?AtomicInteger为什么使用CAS? AtomicInteger的底层原理是什么?
1、CAS 即 Compare -And- Swap 比较并交换;2、 通过AtomicInteger.compareAndSet();方法能够解决多线程模式下i++计算结果出现的数据不一致的问题。/** * @program: mybatis * @description: CAS * @author: Miller.FAN * @create: 2019-11-11 ...原创 2019-11-12 09:47:25 · 462 阅读 · 2 评论 -
EnumMap类的学习和使用
1、类图;2、源码分析;3、使用第一步:类图EnumMap继承AbstractMap实现Serializable和Cloneable接口public class EnumMap<K extends Enum<K>, V> extends AbstractMap<K, V> implements java.io.Serializa...原创 2019-11-11 10:02:16 · 385 阅读 · 1 评论 -
NavigableMap接口源码分析
package com.miller.datastructure.peraer;import java.util.Collections;import java.util.Comparator;import java.util.Map;import java.util.NavigableSet;import java.util.SortedMap;public interfa...原创 2019-11-10 13:36:30 · 191 阅读 · 0 评论 -
SortedMap接口源码分析
public interface SortedMap<K,V> extends Map<K,V> { /** 返回一个比较器 */ Comparator<? super K> comparator(); /** 返回中间的子映射 outside the bounds of the ran...原创 2019-11-10 12:59:44 · 96 阅读 · 0 评论 -
美团面试官很随意的三道题,就知道你java集合框架的相关内容是背诵了面试题还是有丰富的实际使用经验
1、面试官:能画一下ArrayList的Dragrams吗?我:画不出来,但知道底层原理。2、ArrayList有哪些函数接口,能写一下吗?3、现在有一个list,如何删除指定的几个元素,能手写一段代码吗?我:慌乱应付中,手写代码呀,没有IDEA根本想不起来呀。简直就是耻辱,一个学而不专的耻辱。下面开始恶补吧。Iterable接口:遍历器接口,实...原创 2019-11-09 01:17:57 · 318 阅读 · 1 评论 -
spring boot +mybatis +mysql 常见错误
1 、[Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):一般是mapper.xml文件写的有问题,注意namespace - 映射接口的的相对路径是不是正确? 同时,注意检查接口中函数id对...原创 2019-11-04 16:08:36 · 347 阅读 · 0 评论 -
用nio的ByteBuffer实现文件的拷贝
package niotest;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.RandomAccessFile;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;/** * @progr...原创 2019-10-22 15:59:50 · 558 阅读 · 2 评论 -
java线程协作之生产者和消费者问题
一个餐厅内厨子生产菜,服务员将菜取走送至顾客。 如果没有菜就等待厨子生产,厨子生产的菜的数量超过10停止生产。package com.miller.datastructure.threadCollaboration;/** * @program: data-structure * @description: 膳食类 * @author: Miller.FAN * @create:...原创 2019-10-21 20:56:15 · 103 阅读 · 0 评论 -
Java多线程实现公园总游客数的统计
加入公园中有五个门,都有计票器来统计从这个门进入公园的游客数,而控制中心有一个计数器用来统计进入公园的总游客数,这个需求如何实现呢?1、总计数器---分析可知,总计数器是一个公共资源,需要同步package CrossDoor;import java.util.Random;/** * @program: MultiThread * @description: 公园的总计数器...原创 2019-10-21 10:45:53 · 643 阅读 · 0 评论 -
TreeMap研究,如何给TreeMap传入比较器?
最近心血来潮,决定好好研究一下java的集合框架:于是有了如下代码,看起来有点乱,但是写的过程中还摸清楚了很多问题。1、 TreeMap的底层实现原理,基于红黑树的,有序。2、默认采用升序,根据entry(key,value)中的key来确定先后顺序,假如你传入的key是int类型的,那么key越大,对应的entry越靠后。3、存放进TreeMap的每一个元素是entry,要求ke...原创 2019-09-26 22:29:55 · 603 阅读 · 3 评论