自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(66)
  • 资源 (11)
  • 收藏
  • 关注

原创 Map+函数式接口

用上了Java8的新特性lambda表达式 判断条件放在key中 对应的业务逻辑放在value中 这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑需求:根据优惠券(资源)类型resourceType和编码resourceId查询派发方式grantType上代码:@ServicepublicclassQueryGrantTypeService{@AutowiredprivateGrantTypeSerivegrantTypeS...

2022-01-20 21:27:03 800

原创 git写错分支,如何将一个分支上的修改转移到另一个分支上

1.git add //首先把所有修改都进暂存区2.git stash //把暂存区内的修改存储起来3. git checkout dev//切换到正确的分支4. git stash pop//将存储的修改取出来

2021-12-03 09:52:23 1636

原创 JDK 监控和故障处理工具总结

1. top查看进程资源占用情况2.使用top -Hp 3429命令查看进程里面占用最多的资源的线程。3.这里我们看到的占用最多资源的线程是:3440。使用命令printf "%x\n" 3440 把线程pid转换成16进制数,得到:d70。4.使用jstack 3429 | grep -20 d70命令查询该线程阻塞的地方。...

2021-11-29 22:59:11 139

原创 多线程——生产者和消费者模式

生产者package com.ProductCusromer.method3;import java.util.concurrent.BlockingQueue;/** * @author Millet * @date 2020/3/30 21:28 */public class Product4 implements Runnable { private BlockingQueue queue; private String name; public Pro.

2021-11-17 22:41:11 244

原创 Java多线程实现的四种方式

1.继承Thread类,重写run方法2.实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target3.通过Callable和FutureTask创建线程4.通过线程池创建线程

2021-11-01 18:49:59 69

原创 索引失效的情况

1.有or必全有索引;2.复合索引未用左列字段;3.like以%开头;4.需要类型转换;5.where中索引列有运算;6.where中索引列使用了函数;7.如果mysql觉得全表扫描更快时(数据少);什么情况下不推荐使用索引?1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。2) 频繁更新的字段不要使用索引比如logincount登录次数,频繁变化导致索引也

2021-10-28 15:42:44 68

原创 Spring框架是怎么解决Bean之间的循环依赖的

循环依赖的本质上文了解完Spring如何处理循环依赖之后,让我们跳出“阅读源码”的思维,假设让你实现一个有以下特点的功能,你会怎么做?将指定的一些类实例为单例 类中的字段也都实例为单例 支持循环依赖举个例子,假设有类A:public class A { private B b;}类B:public class B { private A a;}说白了让你模仿Spring:假装A和B是被@Component修饰,并且类中的字段假装是@Autowired修

2021-10-19 17:48:03 155

原创 RocketMq消息丢失场景及解决方案

生产者将消息发送给mq途中,因出现网络抖动,导致消息丢失 消息存储在pagecache区,且尚未触发异步刷盘,而出现断电一类,导致数据丢失。或是存入磁盘后,磁盘损坏导致数据丢失 Consumer从mq中拿取数据,尚未完成消费,就通知mq消费完毕,然后消费者宕机,导致消息丢失解决方案场景一:基于生产者的分布式事务来解决 若是消息推送mq过程中丢失,则执行回滚操作 生产者发送完消息以后,mq即使接收到响应成功后,暂时消费者也不会消费的(此时处于半消息状态) 生产者会执行自己的链路,若..

2021-10-13 16:22:07 1794

原创 如何设计一个安全的对外接口?

  个人觉得安全措施大体来看主要在两个方面,一方面就是如何保证数据在传输过程中的安全性,另一个方面是数据已经到达服务器端,服务器端如何识别数据,如何不被攻击;下面具体看看都有哪些安全措施。1.数据加密  我们知道数据在传输过程中是很容易被抓包的,如果直接传输比如通过 http 协议,那么用户传输的数据可以被任何人获取;所以必须对数据加密,常见的做法对关键字段加密比如用户密码直接通过 md5 加密;现在主流的做法是使用 https 协议,在 http 和 tcp 之间添加一层加密层(SSL 层),..

2021-10-10 12:18:05 52

原创 Cglib和jdk动态代理的区别

Cglib和jdk动态代理的区别?1、Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成一个代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理2、 Cglib动态代理:利用ASM框架,对代理对象类生成的class文件加载进来,通过修改其字节码生成子类来处理什么时候用cglib什么时候用jdk动态代理?1、目标对象生成了接口 默认用JDK动态代理2、如果目标对象使用了接口,可以强制使用cglib3、如果目标对象没有实现接口,必须

2021-10-08 11:13:22 2792

原创 springboot + redis + 注解 + 拦截器 实现接口幂等性校验(转)

、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等二、常见解决方案唯一索引 -- 防止新增脏数据 token机制 -- 防止页面重复提交 悲观锁 -- 获取数据的时候加锁(锁表或锁行) 乐观锁 -- 基于版本号version实现, 在更新数

2021-09-27 14:54:22 108

原创 消息队列架构原理

消息队列支持高并发,高吞吐量的原因 ?顺序读写 零拷贝 正是因为分了partion,才方便进行零拷贝。 文件分段:操作小文件肯定比大文件要方便。 批量发送 数据压缩消费者 与 消息存储方Broker一般有两种通信机制:推(PUSH)、拉(PULL)推模式:消息发送者将消息发送到Broker,然后Broker主动推送给订阅了该消息的消费者。拉模式:消息发送者将消息发送到Broker上,然后由消息消费者自发的向Broker拉取消息。推模式优点当然是快。一般是采取客户端和服务器端建立长连接

2021-09-08 18:55:29 203

原创 BeanFactory和ApplicationContext的区别

BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,只提供了实例化对象和拿对象的功能;ApplicationContext:应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能;1) 国际化(MessageSource)2) 访问资源,如URL和文件(ResourceLoader)3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层 4) 消息发送、响.

2021-09-07 19:03:41 82

原创 JWT + shiro

关于何时执行shiro AuthorizingRealm 里的 doGetAuthenticationInfo与doGetAuthorizationInfo1.doGetAuthenticationInfo执行时机如下当调用Subject currentUser = SecurityUtils.getSubject();currentUser.login(token);2.doGetAuthorizationInfo执行时机有三个,如下:1、subject.hasRole(“ad

2021-09-06 10:23:56 198

原创 Eureka工作原理及心跳机制

1.基本原理上图是来自eureka的官方架构图,这是基于集群配置的eureka;处于不同节点的eureka通过Replicate进行数据同步Application Service为服务提供者Application Client为服务消费者Make Remote Call完成一次服务调用服务启动后向Eureka注册,Eureka Server会将注册信息向其他Eureka Server进行同步,当服务消费者要调用服务提供者,则向服务注册中心获取服务提供者地址,然后会将服务提供者地址缓存在本地,下次

2021-09-05 20:48:45 599

原创 SpringCloudAlibaba之Nacos注册中心架构原理

1. 服务通过nacos server内部的open api进行服务注册,nacos server内部有一个sevice服务的概念,里面有多个instance实例的概念,同时对不同的service服务可以划归到不同的namespace命名空间下去2. 注册的时候就是在注册表里维护好每个服务的每个实例的服务器地址,包括ip地址和端口号一旦注册成功之后,服务就会跟nacos server进行定时的心跳,保持心跳是很关键的,nacos server会定时检查服务各个实例的心跳,如果一定时间没心跳,就认为

2021-09-05 20:36:06 238

原创 设计模式总结

1. 单例模式2. 工厂模式3. 装饰模式4. 适配模式5. 代理模式6. 策略模式7.桥接模式8. 创建者模式9. 观察者模式

2021-09-03 11:33:19 53

原创 NIO理解, Netty框架

事件驱动模型 避免多线程 单线程处理多任务 非阻塞I/O,I/O读写不再阻塞,而是返回0 基于block的传输,通常比基于流的传输更高效 更高级的IO函数,zero-copy IO多路复用大大提高了Java网络应用的可伸缩性和实用性 RocketMQ核心技术精讲与高并发抗压实战 1:特点 比较吃内存 内存至少1g 默认8g 1:支持集群模型,强调集群无单点,负载均衡以及水平扩展能力2:亿级别的消息堆积能力3:采用零拷贝原理Consumer 消费消息过程,使用了

2021-08-25 19:27:28 96

原创 一次完整的Http请求

高并发意味着单位时间内系统能处理的请求数很高,也就是说系统所能承载的HTTP请求很多,那要应对高并发,就要从HTTP请求处理层面开始,如下是我理解的一个完整的HTTP请求所经历的流程:1、DNS域名解析将请求域名解析为IP地址。2、与IP地址对应的服务器网卡建立连接,TCP的三次握手,连接建立并占用3、服务器操作系统通过连接读取和处理请求3.1 从连接中读取字节流(IO密集)3.2 将读取到的字节流转换成HTTP请求(CPU密集)4、服务器操作系统将HTTP请求转发给WEB ..

2021-08-25 19:17:42 87

原创 redis锁

redis为什么可以做分布式锁?Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。redis据你所知是单线程的,为什么redis还可以快?开发语言现在我们都用高级语言来编程,比如 Java、python 等。也许你会觉得 C 语言很古老,但是它真的很有用,毕竟 unix 系统就是用 C 实现的,所以 C 语言是非常贴近操作系统的语言。Redis 就是用 C 语言开发的,所以执行会比较快。纯内存访问Redis 将所有数据放在内存中

2021-08-25 19:02:26 63

原创 多线程分批导入Mysql

@Transactional(rollbackFor = Exception.class) public int addFreshStudentsNew(List<FreshStudentAndStudentModel> list, String schoolNo) { if (list == null || list.isEmpty()) { return 0; } List<StudentEntity&g.

2021-08-25 14:12:12 140

原创 mysql各种存储引擎特性

下面重点介绍几种常用的存储引擎, 并对比各个存储引擎之间的区别, 如下表所示 :特点 InnoDB MyISAM MEMORY MERGE NDB 存储限制 64TB 有 有 没有 有 事务安全 支持 锁机制 行锁(适合高并发) 表锁 表锁 表锁 行锁 B树索引 支持 支持 支持 支持 支持 哈希索引 支持

2021-08-22 23:29:57 66

原创 mysql查看死锁

查看死锁Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的。1、查看正在进行中的事务SELECT * FROM information_schema.INNODB_TRX2、查看正在锁的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;3、查看等待锁的事务SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;4、查询是否锁表SHOW OPEN T

2021-08-22 23:00:20 14818

原创 SPRING CLOUD里的服务提供者如何与注册中心进行通信

1.Get接口用于请求注册中心目前有那些服务提供者;2.POST请求接口用于提交系统当前服务信息到Eureak Server;3. Put方法请求用于维持服务提供者与Eureka Server的心跳服务;

2021-08-19 13:42:27 157

原创 对B+树,B树,红黑树的理解

写在前面,好像不同的教材对b树,b-树的定义不一样。我就不纠结这个到底是叫b-树还是b-树了。如图所示,区别有以下两点:B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。 B+树中所有叶子节点都是通过指针连接在一起,而B树不会。B+树的优点:非叶子节点不会带上指向记录的指针,这样,一个块中可以容纳更多的索引项,一是可以降低树的高度。二是一个内部节点可以定位更多的叶子节点。 叶子节点之间通过指针来连接,范围扫描将十分简单.

2021-08-18 23:37:36 90

原创 ThreadPoolExecutor 深入解析

接口定义和实现类类型 名称 描述 接口 Executor 最上层的接口,定义了执行任务的方法execute 接口 ExecutorService 继承了Executor接口,拓展了Callable、Future、关闭方法 接口 ScheduledExecutorService 继承了ExecutorService,增加了定时任务相关方法 实现类 ThreadPoolExecutor 基础、标准的线程池实现 实现类 Sc

2021-08-16 16:38:51 45

原创 Spring Cloud GateWay

Spring 自己开发的新一代API网关产品,基于NIO异步处理,摒弃了Zuul基于Servlet同步通信的设计。Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。关键特征:1、基于JDK8+开发。 2、Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于

2021-08-16 16:34:50 148

原创 Nacos 配置实时更新原理分析

1、客户端的请求到达服务端后,服务端将该请求加入到一个叫 allSubs 的队列中,等待配置发生变更时 DataChangeTask 主动去触发,并将变更后的数据写入响应对象2、与此同时服务端也将该请求封装成一个调度任务去执行,等待调度的期间就是等待 DataChangeTask 主动触发的,如果延迟时间到了 DataChangeTask 还未触发的话,则调度任务开始执行数据变更的检查,然后将检查的结果写入响应对象基于上述的分析,最终总结了以下结论:1.Nacos 客户端会循环请

2021-08-16 16:02:06 1723

原创 算法:子数组的最大累加和问题

public int maxSum(int[]arr){ if(arr == null || arr.length==0){ return 0; } int max = Integer.MIN_VALUE; int cur=0; for (int i=0;i != arr.length;i++) { cur+=arr[i]; max = Math.max(.

2021-07-17 22:26:03 54

原创 算法:删除有序链表中重复出现的元素

//Javapublic ListNode deleteDuplicates(ListNode head) { ListNode dummy = new ListNode(-1); dummy.next = head; ListNode prev = dummy; ListNode curr = head; while (curr != null && curr.next != null) { if (curr.val == cu.

2021-06-27 19:20:37 66

原创 算法:最长无重复子数组

public int maxLength(int[] arr){ int n = arr.length; Set<String> set = new HashSet<String>(); int i=0, j=0, ans=0; while(i<n && j<n){ if(!set.contains(arr[j])){ set.add(arr[j]); j++; .

2021-06-27 19:08:56 131

原创 算法: 给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。

public class App{ public static void main(String[] args ) { Integer[] input = {3, 30, 34, 5, 9}; int inputLength = input.length; int tmp; while (inputLength!=0){ for (int j=1;j if (App....

2021-06-24 22:01:31 993

原创 算法: 滑动窗口的最大值

int getMax(const int A[],int size){ int mx=A[0]; for(int i=1;i if(A[i]>mx) mx=A[i]; } return mx;}vector maxInWindows(const int A[],int n,int size){ vector result; for(int i=0;i int num=getMax(A+i,siz...

2021-06-24 21:48:38 47

原创 算法:无重复字符的最长子串(数组)

/** * 无重复字符的最长子串 * @param s * @return */ public int lengthOfLongestSubstring(String s) { int [] freq= new int[256]; for(int i =0;i<freq.length;i++){ freq[i] = 0; } //滑动窗口[left...right].

2021-06-17 18:33:05 63

原创 算法:反转一个单链表

struct ListNode *reverseList(struct ListNode* head) { struct ListNode *newHead = NULL; struct ListNode *node; while (head != NULL) { //1. 对之前的链表做头删 node = head; head = head->next; //2. 对新链表做头插 node->next = newHead; newHead = node;

2021-06-17 18:29:37 77 1

原创 算法:生产者消费者,线程间通信

import java.util.LinkedList;import java.util.Queue;public class ProducerAndConsumer { private final int MAX_LEN = 3; private Queue<Integer> queue = new LinkedList<Integer>(); class Producer extends Thread { @Ove

2021-06-17 18:21:20 61

原创 线程安全性总结

2021-04-18 11:18:47 60

原创 git添加.gitignore忽略target git设置忽略列表

Git管理中的项目中,有一些文件夹或者文件是没有必要同步到仓库中的。比如JavaWeb中的target文件夹,通过到仓库中反而会浪费一些时间。所以我们需要通过设置进行忽略特定的文件。一、添加.gitignore配置忽略文件规则1.1、添加.gitignore文件touch .gitignore1.2、配置忽略的文件或者文件夹,通过vim命令来编辑,文件内容如下:/target/.idea二、定义git忽略文件2.1、使用命令git config配置忽略配置文件.gitignoregit c

2021-02-26 09:50:21 945

原创 json-server mock数据

【mock】cnpm install json-server -gcd mock文件夹下json-server data.json --port 4000

2020-07-15 11:16:43 95

原创 算法:java多线程模拟停车系统

import java.util.Random;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Semaphore;import java.util.concurrent.SynchronousQueue;...

2020-04-04 20:13:10 243

QuartzDemo.zip

Quartz.Net是一个定时任务框架,可以实现作业和触发器多对多的关系,可以重用来自不同事件的作业,还可以未一个事件组合多个作业

2019-11-24

ueditor-web-master.zip

此代码适用于vue 应用ueditor插件,能很方便的编辑新闻

2019-09-01

Log4Net使用指南

使用log4net可以很方便地为应用添加日志功能。应用Log4net,使用者可以很精确地控制日志信息的输出,减少了多余信息,提高了日志记录性能。同时,通过外部配置文件,用户可以不用重新编译程序就能改变应用的日志行为,使得用户可以根据情况灵活地选择要记录的信息。

2019-02-24

android连接快麦打印机

连接快麦打印机的代码,里面包含一些打印命令库和一些.os文件库

2019-01-11

新闻编辑器

专门编辑新闻的插件,可以编辑图片,地图,文字的格式

2018-11-18

vue.js开发购物车

主要是根据代码demo很好的介绍了vue.js的一些基本使用

2018-11-18

js深入简出

主要是介绍了js的6大数据结构,很值得开发者使用借鉴,文档介绍的很详细

2018-11-18

电商课件-js

主要是介绍了js语法的一些基本使用,很有借鉴意义的。

2018-11-18

bootstrap-demo

主要是针对bootstrap一些插件的源代码的介绍,对初学者有一定的借鉴意义

2018-11-18

c# Async Await的介绍

主要是介绍Async,await实现异步的基本原理,介绍的应该是蛮清楚的

2018-11-17

Echart画图

通过Echart实现画柱状图,是个很好理解的Demo,很容易入手

2018-11-17

空空如也

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

TA关注的人

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