自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(128)
  • 收藏
  • 关注

原创 策略模式使用案例

策略模式

2022-04-30 16:43:14 390

原创 minio:please reduce your request rate

minio文件上传错误:原因:解决方案:

2021-09-02 14:13:53 5724 2

原创 Netty模型

在Netty里,Channel是通讯的载体,而ChannelHandler负责Channel中的逻辑处理。一个Channel包含一个ChannelPipeline,所有ChannelHandler都会注册到ChannelPipeline中,并按顺序组织起来。ChannelPipeline:双向链表。每个节点是ChannelHandlerContext。ChannelHandlerContext:关联一个ChannelHandler。ChannelHandler:数据处理逻辑。Netty的Cha..

2021-03-29 16:05:15 191

转载 Reactor模型

单Reactor单线程在这种实现方式中,dispatch方法是同步阻塞的!!!所有的IO操作和业务逻辑处理都在NIO线程(即Reactor线程)中完成。服务器端用一个线程通过多路复用搞定所有IO操作,编码简单,清晰明了,但是如果客户端连接数量较多,将无法支撑。只有一个线程,无法完全发挥出多核CPU的性能,Handler在处理某个连接上的业务时,整个进程无法处理其他连接事件,很容易导致性能瓶颈。线程意外终止,或者进入死循环,会导致整个系统通信模块不可用,不能接受和处理外部消息,造成节点故障。单Re

2021-03-26 15:26:41 133

转载 Zero-Copy

传统I/O4次拷贝,4次上下文切换内核空间缓冲区的一大用处是为了减少磁盘I/O操作,因为它会从磁盘中预读更多的数据到缓冲区中。而BufferedInputStream的用处是减少“系统调用”。传统I/O模式为什么将数据从磁盘读取到内核空间缓冲区,然后再将数据从内核空间缓冲区拷贝到用户空间缓冲区了?为什么不直接将数据从磁盘读取到用户空间缓冲区就好?传统I/O模式之所以将数据从磁盘读取到内核空间缓冲区而不是直接读取到用户空间缓冲区,是为了减少磁盘I/O操作以此来提高性能。因为OS会根据局部性原理

2021-03-26 11:05:51 88

转载 NIO-Buffer-Channel

Channelimport java.nio.channels.Channel;public interface Channel extends Closeable { public boolean isOpen(); public void close() throws IOException;}public static void exampleForChannel() throws IOException { ByteBuffer byteBuffer = ByteBuffer.all

2021-03-24 17:35:47 66

转载 BIO

同步并阻塞,一个连接对应一个线程,Server端压力大,适用于连接数目小且固定的架构流程Server端,启动ServerSocketClient端,启动ClientSocketClient 发出请求后,先咨询Server是否有线程响应,如果没有则会等待或者被拒绝如果有响应,Client线程会等待请求结束后才继续执行其他操作案例...

2021-03-24 13:37:08 69

原创 volatile

volatile 可以保证线程可见性且提供了一定的有序性,禁止指令重排序,但是无法保证原子性。volatile 在多线程开发中保证了共享变量的“可见性”,不会引起线程上下文的切换和调度。volatile 是无法保证复合操作的原子性。如果某个线程对 volatile 修饰的共享变量进行更新,那么其他线程可以立马看到这个更新,这就是所谓的线程可见性。在程序运行中,会将运行所需要的数据复制一份到 CPU 高速缓存中,在进行运算时 CPU 不再也主存打交道,而是直接从高速缓存中读写数据,只有当运行结束后,才

2021-03-22 14:36:22 74

原创 synchronized

普通同步方法,锁是当前实例对象静态同步方法,锁是当前类的 class 对象同步方法块,锁是括号里面的对象同步代码块是使用 monitorenter 和 monitorexit 指令实现的;同步方法(需要看JVM底层实现)依靠的是方法修饰符上的ACC_SYNCHRONIZED 实现在 JVM 中 monitorenter 和 monitorexit 字节码依赖于底层的操作系统的Mutex Lock 来实现的,但是由于使用 Mutex Lock 需要将当前线程挂起并从用户态切换到内核态来执行,这种切

2021-03-22 11:58:31 81

转载 HashMap面试题二

hashCode()不要求唯一但是要尽可能的均匀分布,而且算法效率要尽可能的快。ArrayList集合加入1万条数据,应该怎么提高效率?因为ArrayList的底层是数组实现,并且数组的默认值是10,如果插入10000条要不断的扩容,耗费时间,所以我们调用ArrayList的指定容量的构造器方法ArrayList(int size) 就可以实现不扩容,就提高了性能。为什么重写 equals() 时一定要重写 hashCode()?因为 Java 规定,如果两个对象 equals 比较相等(结果为

2021-03-22 11:44:55 63

转载 HashMap面试题一

HashMap面试题汇总hashmap-JDK7JDK8数据结构数组+链表数组+链表/红黑树链表插入头插法尾插法key==nulltable[0]-Iterator去删除元素modCount 实现 fail-fast-resize头插法,链表数据顺序翻转。多线程会造成循环链表尾插法hash实现(h = key.hashCode()) ^ (h >>> 16)EntryNode先判断是否需要扩容

2021-03-22 10:59:26 267

转载 itext生成pdf

private static final String base = "file/123456.png";path += File.separator+fileName+".pdf";//复制文件File file = new File(path);if(!file.exists()){ file.createNewFile();}public PdfPRow getTableTitle(Font font){ PdfPCell cells[] = new PdfPCe

2021-03-18 11:04:44 118

转载 自定义注解:AccessLimit

注解类@Retention(RUNTIME)@Target(METHOD)public @interface AccessLimit { int seconds(); int maxCount(); boolean needLogin()default true;}Interceptor拦截器@Componentpublic class FangshuaInterceptor extends HandlerInterceptorAdapter { @Auto

2021-02-18 11:08:28 857

转载 业务分层

模型规约DO(Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO(Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。BO(Business Object):业务对象。由Service层输出的封装业务逻辑的对象。AO(Application Object):应用对象。在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。VO(View Object):显示层对象,通常是Web向模.

2021-02-18 11:00:11 436

转载 BFPTR算法

BFPTR算法,又称为中位数的中位数算法,它的最坏时间复杂度为O(n)TOP-K问题将n个数排序(比如快速排序或归并排序),选取排序后的第k个数,时间复杂度为O(nlogn)。维护一个k个元素的最大堆,存储当前遇到的最小的k个数,时间复杂度为O(nlogk)。部分的选择排序,即把最小的放在第1位,第二小的放在第2位,直到第k位为止,时间复杂度为O(kn)部分的快速排序(快速选择算法),每次划分之后判断第k个数在左右哪个部分,然后递归对应的部分,平均时间复杂度为O(n)。但最坏情况下复杂度为O(n

2021-01-27 17:25:49 481 1

转载 DENSE_RANK

力扣178MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

2021-01-25 18:29:17 77

转载 大量的if/else优化

提前returnif (!condition) { return xxx;} // do something策略模式-多态interface Strategy { void run() throws Exception;}class FastStrategy implements Strategy { @Override void run() throws Exception { // 快速执行逻辑 }}class Norma.

2021-01-25 10:06:37 75

原创 摩尔投票法

力扣169力扣229摩尔投票法 / Boyer-Moore投票算法设置一个候选人和一个计数器count。遍历数组,每次遇到和候选人一样的值则count + 1,否则count - 1当count == 0 时替换候选人。最后剩下的就是我们所求的众数。 public int majorityElement(int[] nums) { int n = nums.length; int candicate = 0; int count = 0; for(int i=0;i<n

2021-01-22 16:18:37 98 1

转载 XXL-JOB

中文文档git源码仓库设计思想将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;轻量级分布式任务调度平台动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;触发策略:提供丰富的任务触发策略,包括:Cron触发、固定

2021-01-20 11:44:56 140

原创 拓扑排序

力扣207力扣210力扣1203求出一种拓扑排序方法的最优时间复杂度为 O(n+m),其中 n 和 m 分别是有向图 G 的节点数和边数图的几种表示方法List<List<Integer>> edges;//边int[] visited;//0-未搜索,1-搜索中,2-已完成搜索boolean valid = true;int[] indeg;//入度207:DFS public boolean canFinish(int numCourses, int[][]

2021-01-13 10:48:35 77

原创 Fisher-Yates 洗牌算法

力扣384

2021-01-06 18:01:21 136

转载 并查集

力扣547并查集主要用于解决一些元素分组的问题。它管理一系列不相交的集合,并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。亲戚问题题目背景若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。题目描述规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。输入格式第一行

2021-01-05 16:53:52 53

转载 蓄水池采样算法

蓄水池采样算法算法假设数据序列的规模为 n,需要采样的数量的为 k。首先构建一个可容纳 k 个元素的数组,将序列的前 k 个元素放入数组中。然后从第 k+1 个元素开始,以 k/n 的概率来决定该元素是否被替换到数组中(数组中的元素被替换的概率是相同的)。 当遍历完所有元素之后,数组中剩下的元素即为所需采取的样本。题目从一个字符流中进行采样,最后保留 10 个字符,而并不知道这个流什么时候结束,且须保证每个字符被采样到的几率相同。力扣398力扣497...

2021-01-05 11:50:23 80

原创 和为N的连续正整数序列

自然数从1到n之间,有多少个数字含有1 //定义h(n)=从1到9999.....9999 ( n 个 9)之间含有1的数字的个数 private int H(int n) { //h(1)=f(1)=1 //h(2)=f(1)+f(2) //h(3)=f(1)+f(2)+f(3) //h(4)=f(1)+f(2)+f(3)+f(4) if(n==1)return 1; int rs=0;

2020-12-31 11:22:55 227

原创 JDK8:HashMap

数组+链表+红黑树static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16static final int MAXIMUM_CAPACITY = 1 << 30;static final float DEFAULT_LOAD_FACTOR = 0.75f;static final int TREEIFY_THRESHOLD = 8;static final int UNTREEIFY_THRESHOLD =

2020-12-31 09:52:21 106 1

转载 JDK7:HashMap

数组+链表,存储的是Entry对象static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16static final int MAXIMUM_CAPACITY = 1 << 30;static final float DEFAULT_LOAD_FACTOR = 0.75f;static final Entry<?,?>[] EMPTY_TABLE = {};transient Entry<K,

2020-12-30 23:32:39 57

原创 PriorityQueue优先级队列

力扣:1046题优先级队列中,数据按关键词有序排列,插入新数据的时候,会自动插入到合适的位置保证队列有序。默认顺序是升序。顺序有两种形式:升序或者是降序。PriorityQueue是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队列实例化的时排序。要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中的元素。...

2020-12-30 14:34:14 72

转载 Nacos 高可用特性

知乎:一文详解 Nacos 高可用特性客户端重试:当其中一台机器宕机时,为了不影响整体运行,客户端会存在重试机制临时服务(Ephemeral):临时服务健康检查失败后会从列表中删除,常用于服务注册发现场景。临时服务使用的是 Nacos 为服务注册发现场景定制化的私有协议 distro,其一致性模型是 AP;持久化服务(Persistent):持久化服务健康检查失败后会被标记成不健康,常用于 DNS 场景。持久化服务使用的是 raft 协议,其一致性模型是 CP...

2020-12-30 13:50:27 442

转载 join

笛卡尔积:CROSS JOIN内连接:INNER JOIN左连接:LEFT JOIN右连接:RIGHT JOIN外连接:OUTER JOIN,MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现SELECT *from sys_user_role b left join sys_user a USING(user_id)-- on a.user_id=b.user_idMysql Join算法原理Simple Nested-Loop Jo

2020-12-30 11:23:38 163 1

转载 free/top

free参考文档free 命令显示系统内存的使用情况,包括物理内存、交换内存(swap)和内核缓冲区内存。Mem 行(第二行)是内存的使用情况。Swap 行(第三行)是交换空间的使用情况。total 列显示系统总的可用物理内存和交换空间大小。used 列显示已经被使用的物理内存和交换空间。free 列显示还有多少物理内存和交换空间可用使用。shared 列显示被共享使用的物理内存大小。buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。available

2020-12-30 10:29:03 77

转载 手动提交事务

@Autowiredprivate DataSourceTransactionManager txManager;private void testTransaction() { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); TransactionSt

2020-12-24 16:04:08 102 1

原创 异或位运算

力扣476 public int findComplement1(int num) { int maxBitNum = 0; int tmpNum = num; while (tmpNum > 0) { maxBitNum += 1; tmpNum >>= 1; } return num ^ ((1 << maxBitNum) - 1); }

2020-12-24 11:32:42 88

原创 单调栈

力扣496 public int[] nextGreaterElement1(int[] nums1, int[] nums2) { if(nums2.length==0 || nums1.length==0) { return new int[] {}; } Map<Integer, Integer> map = new HashMap<Integer, Integer>(); Stack<Integer> stack = new Stack&l

2020-12-24 11:29:10 57

转载 I/O调度算法

CFQ(完全公平排队I/O调度程序)CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,每个队列按照上述规则进行merge和sort。各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求。可以调 queued 和 quantum 来优化NOOP(电梯式调度程序)NOOP倾向饿死读而

2020-12-23 17:33:44 459

转载 RocketMq-基本概念

官方参考文档RocketMQ主要由 Producer、Broker、Consumer 三部分组成。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。RocketMQ 支持两种消息模式:集群消费(Clustering)和广播消费(Broadcasting)。集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊消息。广播消

2020-12-23 11:20:02 192

转载 maven-resources-plugin

resources:resources,拷贝main resources到main output directory。它绑定了process-resources生命周期阶段,当执行Compiler:compile插件目标前就会执行此阶段。resources:testResources,拷贝test resources到test output directory。它绑定了process-test-resources生命周期阶段,当执行surefire:test插件目标前就会执行此阶段。resources.

2020-12-23 10:35:32 131

转载 spring-boot-maven-plugin

<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </

2020-12-23 10:20:10 95

转载 SpringBoot自定义配置文件路径

在启动类中手动指定配置文件的加载路径:@SpringBootApplication@EnableDiscoveryClientpublic class NacosServerAppStarter { public static void main(String[] args) { String path = "spring.config.additional-location:classpath:/"; path += ",classpath:/dev/"; path += ",clas

2020-12-23 10:00:36 807

原创 nacos在win10下启动

启动默认启动方式是集群模式1> 修改脚本文件的默认启动模式为standalone2>使用命令模式启动,并指定模式为standalonestartup.cmd -m standalone访问界面http://localhost:8848/nacos,用户名和密码nacos/nacos持久化机模式启动nacos时,使用的是嵌入式数据库derby实现数据的存储,不方便观察数据存储的基本情况。如果启动多个默认配置下的nacos节点,数据存储时也存在一致性问题,为了解决这些问题,nac

2020-12-22 17:44:07 583

转载 maven:optional

optional 可选依赖应用场景:projectA 依赖projectB, projectB 依赖projectC当projectB的true时, projectA中如果没有显式的引入projectC, 则projectA不依赖projectC, 即projectA可以自己选择是否依赖projectC默认的值为false, 及子项目必须依赖scope 依赖范围控制compileprovidedruntimetestsystemimport:仅支持在<dependencyMana

2020-12-22 14:31:09 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除