自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 netty源码分析之服务端启动全解析

backgroundnetty 是一个异步事件驱动的网络通信层框架,其官方文档的解释为Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as

2022-02-16 09:05:11 324

转载 redis的持久化方式RDB和AOF的区别

redis的持久化方式RDB和AOF的区别1、前言最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF持久化(原理是将Reids的操作日志以追加的方式写入

2022-02-14 08:24:19 297

转载 java中CAS出现的原因及原理分析

目录前言解决方案AtomicInteger源码分析UnsafevalueOffsetcompareAndSwapIntincrementAndGet总结前言CAS:即compare and swap(比较并替换),CAS需要解决的是多线程并发时线程间切换时间片导致的原子性问题。我们先看一段代码public class CasDemo1 { static int k = 0; public static void main(String[] args) {...

2022-02-11 14:40:14 312

原创 幂等怎么保证的

实现幂介绍幂等性就是同一个操作执行多次,产生的效果一样。如http的get请求,数据库的select请求就是幂等的在分布式系统中,保证接口的幂等性非常重要,如提交订单,扣款等接口都要保证幂等性,不然会造成重复创建订单,重复扣款,那么如何保证接口的幂等性呢?前端保证幂等性的方法按钮只能点击一次用户点击按钮后将按钮置灰,或者显示loading状态RPG模式即Post-Redirect-Get,当客户提交表单后,去执行一个客户端的重定向,转到提交成功页面。避免用户按F5刷新导致的重复提交,

2022-02-11 09:29:05 3854

转载 反转链表---不能递归调用,使用额外o1的空间

关于链表的考察  链表是面试里面经常涉及到的考点,因为链表的结构相比于Hashmap、Hashtable、Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的侧重点在于其底层实现。比如Hashmap中Entry<k,v>等操作、如何扩容、容量的设定等。链表的考察更侧重于代码的书写和思路的形成。虽然说,链表的结构简单,但是涉及到指针的操作,容易引申出一些挑战性的考题,其中也牵涉到诸多小的细节的考虑,更能看出代码书写的能力和功底。面试题:反转链表题目:定义一个函

2022-02-11 09:06:24 104

转载 如何判断单链表里面是否有环?

这题目还是慢有意思的。题目:0.如何判断单链表里面是否有环?算法的思想是设定两个指针p, q,其中p每次向前移动一步,q每次向前移动两步。那么如果单链表存在环,则p和q相遇;否则q将首先遇到null。这里主要理解一个问题,就是为什么当单链表存在环时,p和q一定会相遇呢?假定单链表的长度为n,并且该单链表是环状的,那么第i次迭代时,p指向元素i mod n,q指向2i mod n。因此当i≡2i(mod n)时,p与q相遇。而i≡2i(mod n) => (2i - i) mod n =

2022-02-11 09:04:40 86

原创 Java8 Map集合中为什么加putIfAbsent()

Map集合中put与putIfAbsent的区别put方法:V put(K key, V value);putIfAbsent方法:V putIfAbsent(K key, V value);这两种方法都是以key-value键值对的形式存在到map集合中,那么它们两个有什么区别呢?我们可以从map官网注释中看出:1.使用put方法添加键值对,如果map集合中没有该key对应的值,则直接添加,并返回null,如果已经存在对应的值,则会覆盖旧值,value为新的值。2.使用putIf

2022-02-11 08:52:21 268

转载 链表转红黑树的原因?为什么阈值为8?

为什么 Map 桶中超过 8 个才转为红黑树?  我们知道Java8后,当Map链表长度大于或等于阈值TREEIFY_THRESHOLD(默认为 8)的时候,如果同时还满足容量(数组的长度)大于或等于 MIN_TREEIFY_CAPACITY(默认为 64)的要求,就会把链表转换为红黑树。同样,后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于 6 个以后,又会恢复为链表形态。首先要知道为什么要转换为红黑树?  每次遍历一个链表,平均查找的时间复杂度是 O(n),n 是链表的长度。

2022-02-11 08:43:02 1159 1

原创 洗牌算法实现shuffle

//1. 经典洗牌算法实现function shuffle(array) {let arrayLength = array.length,randomIndex, //随机数tempItem; //临时存储元素for (let i = arrayLength - 1; i >= 0; i--) {randomIndex = Math.floor(Math.random() * (i + 1));tempItem = array[randomIndex];array[ra

2022-02-11 08:41:43 148

转载 tableSizeFor方法

/** * 根据容量参数,返回一个2的n次幂的table长度。 */private static final int tableSizeFor(int c) { int n = c - 1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; return (n &l.

2022-02-11 08:39:49 314

转载 Java并发线程安全5种

线程安全与锁优化文章目录线程安全与锁优化一、线程安全概念不可变绝对线程安全相对线程安全线程兼容线程对立二、线程安全的实现方法互斥同步最基本互斥手段就是synchronized另一种手段JUC下的ReentrantLock阻塞同步的问题:非阻塞同步实现方式CAS操作:无同步方案三、锁优化自旋锁与自适应锁锁消除锁粗化轻量级锁偏向锁一、线程安全概念为了更好的理解线程安全,我们不把线程安全看做是一个二元对立的选项来看,而是按照线程安全的”安全程度“由强至弱来排序。

2022-02-10 17:06:59 674

转载 关于Nacos中的CAP

每天多学一点点~话不多说,这就开始吧…文章目录浅谈Nacos中的CAP1.前言2.CAP理论和BASE理论3.Nacos中的CAP4.Nacos中AP模式源码分析5.常见的面试题6.结语1.前言说起CAP原则,大家都不陌生。只要是个分布式系统,都应该满足。之前写过Zk的CAP,今天来谈谈nacos中是如何实现CAP的。Zookeeper集群选举机制以及数据同步机制Nacos源码环境搭建和源码流程图2.CAP理论和BASE理论CAP原则又称CAP定理,指的是在一个分布式系统中

2022-02-09 16:35:54 358

原创 归并排序小记

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之  可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。合并相邻有序子序列  再来看看治阶段,我们.

2022-01-29 08:51:39 70

转载 SkipList(跳跃表)详解

Introduction:skiplist本质上也是一种查找结构,用于解决算法中的查找问题(Searching),即根据给定的key,快速查到它所在的位置(或者对应的value)一般用于解决查找问题的数据结构分为两个大类:一个是基于各种平衡树,一个是基于哈希表。但skiplist却比较特殊,它没法归属到这两大类里面这种数据结构是由William Pugh发明的,最早出现于他在1990年发表的论文《Skip Lists: A Probabilistic Alternative to Balance

2022-01-25 15:43:52 627

转载 Redis 9种数据结构以及它们的内部编码实现

90%的人知道Redis 5种最基本的数据结构;只有不到10%的人知道8种基本数据结构,5种基本+bitmap+GeoHash+HyperLogLog;只有不到5%的人知道9种基本数据结构,5.0最新版本数据结构Streams;只有不到1%的人掌握了所有9种基本数据结构以及8种内部编码;掌握这篇文章的知识点,让你成为面试官眼中Redis方面最靓的仔!说明:本文基于Redis-3.2.11版本源码进行分析。5种普通数据结构这个没什么好说的,对Redis稍微有点了解的都知道5种最基本的

2022-01-24 16:36:57 132

转载 Nacos 集群选举原理

集群选举问题:  Nacos支持集群模式,很显然。而一旦涉及到集群,就涉及到主从,那么nacos是一种什么样的机制来实现的集群呢?  Nacos的集群类似于zookeeper, 它分为leader角色和follower角色, 那么从这个角色的名字可以看出来,这个集群存在选举的机制。 因为如果自己不具备选举功能,角色的命名可能就是master/slave了.选举算法 :  Nacos集群采用 raft 算法来实现,它是相对zookeeper的选举算法较为简单的一种。选举算法的核心在 RaftCor

2021-12-07 15:01:05 3213

转载 Dump文件的生成和使用

1 简介第一次遇到程序崩溃的问题,之前为单位开发了一个插件程序,在本机运行没有出现问题,但把生成的可执行文件拷贝到服务器上一运行程序,刚进入插件代码,插件服务就崩溃了,当时被这个问题整的很惨,在同事的帮助下了解到,对于程序崩溃,最快的解决方式是生成dump文件,通过生成dump文件使用调试工具进行调试,还原程序崩溃时的状态,能够起到快速定位排查问题的作用。Dump文件是进程的内存镜像。可以把程序的执行状态通过调试器保存到dump文件中。Dump文件是用来给驱动程序编写人员调试驱动程序用的,这种文件必须用专

2021-08-26 09:43:14 2660

转载 springboot设置文件上传大小,默认是1mb

springboot默认文件大小的限制是1MB,超过1MB会出现这个错误:org.springframework.web.multipart.MultipartException。通过设置application.yml文件属性更改文件大小限制如图:spring: servlet: multipart: enabled: true #是否启用http上传处理 max-request-size: 100MB #最大请求文件的大小 max-file-size...

2021-08-23 09:30:55 3153 1

转载 mybatis批量insert出现Error getting generated key or setting result to parameter object解决办法

在写批量插入时遇到了一个MyBatisSystemException,ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'serialNumber' not found. Available parameters are [list] 这句话的意思是,在获取生成的ke

2021-08-19 08:35:26 2658

转载 @scheduled注解配置时间_spring 定时任务@Scheduled

1、配置文件2、调用有两种使用方式1)如果需要以固定速率执行,只要将注解中指定的属性名称改成fixedRate即可,以下方法将以一个固定速率5s来调用一次执行,这个周期是以上一个任务开始时间为基准,从上一任务开始执行后5s再次调用:2)使用cron表达式,可以实现定时调用如:每天凌晨调用,详细的cron相关参数见后面介绍3、cron相关参数意义一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素。按顺序依次为秒(0~59) 分钟(0~59) 小时(0

2021-07-09 08:41:55 4905

转载 maven编译明明有这个jar包却识别不到

使用Maven管理项目时,如果连不到远程仓库,但是明明本地仓库有对应的jar包,此时还是报找不到对应的包的原因,是maven3.x版本在从远程仓库下载资源后,会生成对应的_remote.repositories文件,标示该资源的来源,如果你有这个文件_remote.repositories,那就不会访问本地了,必须远程上有才行,否则就会报错。解决方法是将_remote.repositories文件删除,亲测有效...

2021-06-11 10:16:39 1220 2

转载 IDEA进行远程调试

前言对于分布式系统的调试不知道大家有什么好的方法。对于我来说,在知道远程调试这个方法之前就是在代码中打各种log,然后重新部署,上线,调试,这样比较费时,有什么更好的办法呢?有时候,本地调试的时候没有问题,打包部署到测试环境的时候却爆出一堆莫名其妙的问题,这时该怎么办呢?偶然间了解到的远程调试的功能简直是一把利器,能够非常好地解决上述问题,还不赶紧来了解一下?远程调试使用特定JVM参数运行服务端代码要让远程服务器运行的代码支持远程调试,则启动的时候必须加上特定的JVM参数,这些参数是

2021-05-24 09:58:19 3946 1

转载 Jenkins自动化部署入门详细教程

大纲  【推荐】我凭这三招轻松拿到offer.pdf(吐血整理) >>>  1.背景  在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试;  或者前后端分离后,经常会修改接口,然后重新部署;  这些情况都会涉及到频繁的打包部署;  手动打包常规步骤:  1.提交代码  2.问一下同组小伙伴有没有要提交的代码  3.拉取代码并打包(war包,或者jar包)  4.

2021-05-12 17:17:16 214

转载 mybatis添加记录时返回主键id

方法:int insert(PdProduct record);int insertSelective(PdProduct record);int 返回来的其实他影响的行数,也就是你插入一条数据, 他返回来的并不是你插入进去他数据的唯一ID使用xml配置方式1.xml配置:<!-- 插入数据:返回记录的id值 --><insert id="insertOneTest" parameterType="org.chench.test.mybatis.model.Tes.

2021-04-20 17:20:23 201

转载 Mac上svn用户名密码注销最简单方式之一

启动台-->其他-->终端:执行以下命令cd ~cd .subversion/rm -rf auth/

2021-03-31 09:19:34 407

转载 dubbo的超时和重试

超时<dubbo:consumer timeout="1000"></dubbo:consumer>消费者取消重试retries="0"dubbo源码分析:超时原理以及应用场景本篇主要记录dubbo中关于超时的常见问题,实现原理,解决的问题以及如何在服务降级中体现作用等。超时问题为了检查对dubbo超时的理解,尝试回答如下几个问题,如果回答不上来或者不确定那么说明此处需要再多研究研究。我只是针对个人的理解提问题,并不代表我理解的就是全面深入的,但我的问题..

2021-03-22 18:05:56 518

转载 线程池不建议使用Executors去创建,而是通过ThreadPoolExecutor方式的原因

今天sonar代码检测,发现的问题,百度后记录一下,原文https://blog.csdn.net/qq_31615049/article/details/80756781首先用的是new Threadpublic void doSummaryJob() throws Exception { try{ HandlerMappingSummaryJobRunnable handlerMappingSummaryJobRunnable = new Handler...

2021-03-18 15:47:26 802 3

原创 记mysql中#和$的区别

今天看mysql的mapper代码,忽然想起mysql中#和$好像是有区别的,但是具体记得不是很清楚。就百度查了下。整理如下。首先无脑总结: 1、# 自己会带有双引号,$并不会。 2、#的优势就在于它能很大程度的防止sql注入,而$则不行。 3、#的性能优于$,能使用 #{ } 的地方就用 #{ }。 4、MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。然后仔细分析细节:参考于https://blog.csdn.net/q...

2021-03-03 09:34:05 978

转载 微信开发中遇到的access_token坑 ,access_token失效和刷新

这真是一个巨大的坑,为了避免以后踩到同样的坑和帮助刚接触这块的同学快速脱坑,我花了些时间研究问题的来龙去脉,提供了一个不太完美的解决方案,以及未来规划的完美解决方案。问题现象在开发微信jssdk的图像接口功能时,测试环境和回归环境都ok。但是更新到预发布环境后,功能就异常了,一直报图片下载失败。最后快到发布时间时,功能又恢复正常了。于是按照常规流程进行了发布。过了两天,收到线上反馈的问题:...

2020-04-02 15:29:48 6465

转载 程序员的自我修炼(一):打通任督二脉

程序员的自我修炼(一):打通任督二脉文章目录程序员的自我修炼(一):打通任督二脉前言思想的力量黄金圈法则软技能剑的力量驱动力3.0十步学习法整体性学习方法费曼学习法富爸穷爸爸爸结语前言世界上有两种力量,一种是思想,一种是剑。还记得《倚天屠龙记》中的张无忌吗?光明顶上力挽狂澜,救明教于水火之中的侠之大者~教主之所以那么厉害,除了基因优良,父母、义父、师公、外公教...

2019-11-06 15:25:09 335

转载 看看阿里Tech Leader每天干啥

从市值上看,阿里已经雄踞BATM之首,是毫无争议的老大,除了市值之外,同样被大家津津乐道的是,阿里员工的高额工资、大把股票。所以,一直很好奇,在阿里做一名Tech Leader,是一种什么样的体验?2019AS大会上,听了阿里高级技术专家--孔凡勇(云狄)的分享:《细说Tech Leader在开发团队的核心职责》,终于解答了我的疑问,并且明白了阿里为何这么值钱。01分...

2019-11-06 09:25:50 1097

转载 MySQL中id自增面试题讨论

前几天偶然看到大家在讨论一道面试题,而且答案也不够统一,我感觉蛮有意思,在此就做一个解读,整个过程中确实会有几处反转。我们先来看下题目:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把MySQL重启,再Insert一条记录,这条记录的ID是18还是15.和后面的一些题目整体来看,难度不大,都是一些看起来很基础的问题,但是这道...

2019-11-05 13:51:23 357

转载 代码优化细节一二

让代码性能更高需要 Map 的主键和取值时,应该迭代 entrySet()当循环中只需要 Map 的主键时,迭代 keySet() 是正确的。但是,当需要主键和取值时,迭代 entrySet() 才是更高效的做法,比先迭代 keySet() 后再去 get 取值性能更佳。反例:Map<String,String>map=...;for(String...

2019-10-31 16:00:51 139

转载 Tomcat部署Web应用时出现异常

Tomcat部署Web应用时出现异常开发环境:IDE:IntelliJ IDEA 2017.1.4JRE: 1.8.0_112-release-736-b21 amd64JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.oOS:Windows 10 10.0Tomcat:8.5.16Tomcat部署Web应用时出现异常问题解决方法问...

2019-10-28 10:11:32 514

转载 分布式锁三种实现方式

转自:https://blog.csdn.net/xlgen157387/article/details/79036337学过Java多线程的应该都知道什么是锁,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制。在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等。一、为什么...

2019-09-12 13:35:12 182

原创 mySQL 查询每个店铺销量最高的商品信息

如果要取前3或者前10只需要where a.group_id<=3where a.group_id<=10SQL如下:效果相当于手动分组,排序,取前Nselect a.*from(select t1.*,(select count(*)+1 from t_product_info1 where store_name=t1.store_name and sell_...

2019-08-16 11:10:44 10694 1

转载 TPS和QPS的区别和理解

QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计...

2019-08-12 10:42:01 132

转载 Redis报错:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing

今天安装Redis的时候,报了一个错误:我也遇到了xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun12后来发现是因为Mac最新场景下安装...

2019-07-03 12:12:07 505

原创 Spring Integration http模块使用遇到的坑

最近使用Spring Integration,集成进一个项目,大致是做渠道管理需要转发http请求,多对多适配。权重随机推送,最多三次。看了很多文章例子比如这个,https://blog.csdn.net/w_x_z_/article/details/53316618还有这个,https://www.cnblogs.com/pekkle/p/7906919.html还是copy一些过来...

2019-06-21 11:59:44 2114

原创 maven项目中右边的Maven Projects中子项目出现灰色

Maven项目中右方查看的Maven Projects中子项目出现灰色原因:忽略了maven模块在idea中maven的setting中找到ignored files,看右边的面板中是否将变灰的maven模块忽略了。Settings–>Maven–>Ignored Files 看看是不是有勾选的,去掉就好。...

2019-06-18 14:40:46 526

空空如也

空空如也

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

TA关注的人

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