自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(224)
  • 资源 (1)
  • 收藏
  • 关注

原创 Elasticsearch学习笔记

文章目录资料收集基础入门Elasticsearch概念与MySQL对应MySQL同步ES几种同步方案数据一致性问题主流解决方案其他Kibana资料收集公司组件文档公司ES组件介绍:包含最佳实践案例、SDK API介绍、多机房容灾部署、ES平台架构等,协助公司开发迅速使用。ES官方权威指南文档英文最新版权威指南ES入门教程基础入门主要学习资料:ES入门教程全部是最基本的操作,有个感觉。一、安装教程二、基本概念注意点:Elastic 会索引所有字段,经过处理后写入一个反向索引(Inv

2021-10-10 17:06:02 563

原创 Arthas(阿尔萨斯)定位线上问题

Arthas 阿尔萨斯使用参考实际使用案例线上安装与挂载常规命令火焰图查找类、查看类具体代码查看入参、返回值线上修改代码性能监控dump参考官方文档:https://arthas.aliyun.com/doc/用户案例:https://github.com/alibaba/arthas/issues?q=label%3Auser-case一图流:https://github.com/alibaba/arthas/issues/1003实际使用案例线上安装与挂载wget https://alib

2021-07-20 21:57:01 732

原创 JVM定位线上问题

线上问题定位参考核心思路定位流程图示核心排查步骤几个核心步骤的排查例子内存消耗过大,导致Full GC次数过多代码中有大量消耗CPU的操作,导致CPU过高,系统运行缓慢由于锁使用不当,导致死锁。随机出现大量线程访问接口缓慢。某个线程由于某种原因而进入WAITING状态,此时该功能整体不可用,但是无法复现环境排查部分,Linux命令详解top命令:内存:free与vm_stat命令磁盘代码排查部分,Linux命令详解火焰图其他分析工具(Arthas、JProfiler、MAT)案例参考PDF教程《Java

2021-06-15 12:14:18 1510 3

原创 Java8提取两个String的公共字符集

没找到轮子,简单写一下// 方法1:private List<String> getDuplicateCharacters(String checkWord, String key) { List<String> characters = new ArrayList<>(); Arrays.stream(key.split("")).forEach(character -> { if (checkWord.

2021-11-11 15:58:50 728

原创 JWT身份认证

文章目录参考项目方案参考JWT概念:JWT认证解决问题、原理、数据结构、特点JWT认证与常见认证方式概念:1、2章节部分自定义JWT生成以及解码工具SpringSecurity配置JWT校验过滤器:3章节部分:过滤器链与完成认证后放入responseSpringSecurity配置用户完成身份认证后返回JWT:完成认证后在response中放入token信息传给前端实际项目:SSO与JWT结合项目方案需求:内部服务需要开放一个外部接口供业务方调用,因此涉及到业务方身份认证、权限识别问题

2021-11-11 12:00:15 1198

原创 IDEA hotswap关闭类修改后加载到运行项目中的恢复方法

https://juejin.cn/post/6844904097586348039

2021-11-10 10:40:57 1268

原创 Oauth2.0认证:salesforce Oauth2.0接入实例

文章目录参考文档Postman接入实例参考文档SF Oauth2.0:https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_web_server_flow.htm&language=zh_CN&r=https%3A%2F%2Fwww.google.com.hk%2F&type=5SF postman:https://www.postman.com/salesforce-developers/work

2021-11-10 10:24:15 789

原创 Redis分布式锁代码实例

Redis分布式锁代码以及实现思路结合此篇:redis基础数据结构与分布式锁

2021-11-03 12:00:14 125

原创 ZooKeeper笔记总结

文章目录资料基本概念分布式锁总结选举机制资料ZK分布式锁最佳讲解ZAB协议与leader选举图解基本概念ZK基本概念详解ZK基本概念2分布式锁总结ZK分布式锁最佳讲解分布式锁原理概述:借助ZK临时有序节点以及监听机制。具体原理:参见文中分布式锁原理。临时保证锁在网络异常等场景下的释放、有序保证锁的FIFO与公平性、监听保证避免羊群效应。具体代码详见文中zk通过临时节点,解决掉了死锁的问题,一旦客户端获取到锁之后突然挂掉(Session连接断开),那么这个临时节点就会自动删除掉,其他客

2021-11-03 11:54:25 701

原创 数据库分库分表

文章目录参考链接总结参考链接数据库垂直切分、水平切分(分表分区)、分库概念以及各自优缺点,数据库分库常用策略、分片键选择以及分库分表后面对的问题:很全面数据库分区常用策略、解决分库分表问题的方案以及一个实例大众点评业务分库分表方案以及老系统切换流程demo数据库分片所有知识详解总结建议优先水平切分,需要做好唯一的分片键设计常用方法:范围哈希基于字典查询推荐hash分库分表遇到的问题:事务跨节点join跨节点排序等唯一ID唯一ID方案:数据库自增方案基于缓存的

2021-11-01 18:01:45 133

原创 IDEA由于大小超过限制导致无法识别java文件

背景:thrift生成的Java文件无法识别IDEA无法识别java文件由于大小超过限制导致:https://juejin.cn/post/6844904006200852487重启IDEA即可

2021-10-28 10:17:45 561

原创 thrift生成文件位置的说明

thrift IDL文件中配置生成代码的包:namespace java com.aaa.cg.xxx.service启动类注解中:@ThriftClient(psm = "XXX.XXX.XXX", basePackage = "com.aaa.cg.xxx.service")

2021-10-28 10:14:01 382

原创 thrift IDEA与maven的plugin配置

文章目录goal参考pom配置goal在IDEA的maven插件部分能呈现如下参考安装部分:Mac Thrift安装教程Mac Thrift降级安装完成之后我们需要配置环境变量:https://www.cnblogs.com/quickcodes/p/5398709.htmlhttps://www.cnblogs.com/smartloli/p/4220545.htmlThrift安装还需要安装bison,并且thrift和bison版本要对应上安装完成之后结合idea与mvn配置教

2021-10-28 10:09:49 836

原创 Maven引用对Spring工程启动造成影响的问题总结

文章目录问题解决问题使用springboot自动注入的方式搭建好了工程,结果启动的时候报错了!!!,错误如下图:Description:Field userEntityMapper in com.xxx.xxx.service.UserService required a bean of type 'com.xxx.xxx.dao.UserEntityMapper' that could not be found.Action:Consider defining a bean of typ

2021-10-27 20:39:05 240

转载 物理删除与逻辑删除

数据库物理删除与逻辑删除选择

2021-10-27 12:54:22 362

原创 新SpringBoot项目swagger启动

文章目录参考maven的部分内容不同package引用pom写法某个class文件属于哪个包SpringBoot工程启动启动类文件webConfig配置swagger配置参考新代码仓发布、新jar包发布以及一些maven的基础内容maven的部分内容不同package引用每个package都有一个pom,不同的包之间通过pom引用pom写法各种包引入,参见参考文章其中几个比较重要的引入说明根pom <swagger-version>2.9.2</swagger-ver

2021-10-26 18:51:48 2393 1

原创 索引表模式

文章目录参考项目实例参考云设计模式:索引表模式应用场景总结:表1无法对某个字段建立二级索引的情况下又对该字段有频繁查询需求时候,可以通过建立索引表表2,表2对该字段建立索引并且关联表1的主键。在使用上根据索引查询表2拿到PK,再查表1。该链接中提供了三种策略,很值得参考。项目实例PaaS平台中,业务实体数据通过宽表进行承载,宽表中没有具体用户配置的字段名称,只是numField1…numField100;textField1…textField100这样的格式。用户通过具体的字段名称进行搜

2021-10-26 10:20:39 169

原创 Spring Retry:RetryTemplate

文章目录参考概念总结实际demo参考核心学习文章:Spring(34)——Spring Retry介绍简略版:重试框架Spring retry实践、很好的Spring学习专栏概念总结RetryOperations:Spring重试接口RetryTemplate:RetryOperations的Spring默认实现RetryPolicy:重试机制接口SimpleRetryPolicy:RetryPolicy的Spring默认实现核心学习文章中第一部分介绍了所有的policy以及使用实例

2021-10-19 19:51:38 983

原创 Spring中获取request和response

文章目录参考方法demo参考spring中获取request和response方法// 1,直接参数获取@RequestMapping("/path")public String getReqAndRes(HttpServletRequest request, HttpServletResponse response){/** 相关业务代码 此时可以直接使用request response对象 */}// 2,在代码里面获取可以通过RequestContextHolder的静态方法get

2021-10-19 16:49:20 698

原创 ArrayList多线程下不安全性解释以及多线程下安全使用

文章目录不安全的原因与几种解决方案原因解决方案ArrayList不安全的实例线程安全版本的原理不安全的原因与几种解决方案多线程场景下如何使用 ArrayList原因ArrayList 的 add 操作源码如下:/** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @return <tt

2021-10-11 10:36:53 637

原创 Java8 函数式去重过滤规则

文章目录需求参考实现需求根据从另一个微服务取到的用户自定义过滤规则,完成实体的去重,并返回给调用方进行后续更新操作规则定义非常灵活:不同实体类型有不同的过滤规则,且过滤规则的过滤字段数目不定、指定字段名称不定参考https://blog.csdn.net/Draymond_feng/article/details/108304165list<Bean> java8根据某几个属性去重实现 /** * 根据传入的属性列表返回去重字段的Function * * Fu

2021-10-09 14:23:00 647

原创 Java8 Stream distinct 去重

文章目录参考总结参考Stream distinct 去重总结1,distinct去重原理:类实现hashCode()和equals()方法2,filter根据属性过滤去重:支持单属性与多重属性去重。不足:多重属性去重必须提前已知属性个数。核心代码:// 去重predict方法public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor){

2021-10-09 09:59:14 6097

原创 SpringMVC ExceptionHandler原理与入参以及返回值

文章目录源码 & 原理入参与返回值源码 & 原理https://juejin.cn/post/6844903815859322893Spring入参与返回值https://blog.csdn.net/j510924/article/details/51130853?ops_request_misc=%7B%22request%5Fid%22%3A%22163100093516780264072172%22%2C%22scm%22%3A%2220140713.130102334..%

2021-09-13 12:55:12 1921

原创 Linux环境变量配置

原理环境变量可以简单的分成用户自定义的环境变量以及系统级别的环境变量。用户级别环境变量定义文件:/.bashrc、/.profile(部分系统为:~/.bash_profile)系统级别环境变量定义文件:/etc/bashrc、/etc/profile(部分系统为:/etc/bash_profile)、/etc/environment加载顺序:系统会首先读取/.bash_profile(或者/.profile)文件,如果没有该文件则读取/.bash_login,根据这些文件中内容再去读取/.b

2021-09-07 11:41:01 62

原创 HashMap:保持key值不变

key的hash发生变化造成的影响HashMap 在存储元素时是把 key 的 hashCode 再做了一次hash。得到的hash将最终作为元素存储位置的依据。如果采用一个自定义的类作为key,并且该key值在map.put(k, v)之后发生了字段变化(比如,k.set(…)),就会导致key.hashCode的值出现变化,当Map尝试去获得这个 key 的存储位置时就不能得到正确的值,导致最终找不到目标元素。当把对象放到 HashMap 后,不要去修改 key 的属性,除非你重写了该实体类的 ha

2021-09-02 20:37:11 344

原创 定时任务一种实现架构 & 调试方法

服务启动类@Slf4j@EnableCaching@EnableAsync@SpringBootApplication(scanBasePackages = {"com.a.b"})public class TaskApplication implements CommandLineRunner { // Spring的应用上下文 @Resource private ConfigurableApplicationContext context; @Resource

2021-09-02 19:42:33 519

原创 HTTP接口签名校验

文章目录为什么要签名校验常用签名校验算法实例为什么要签名校验一般对外的http接口加签的目的是防止数据被篡改。举个例子,A正在某银行网站给B转账,转入卡号和金额输入完成后生成请求报文,然后加密报文传送给银行后台。银行收到请求后,解密得到明文,然后解析得到B的卡号和转账金额等信息,继续走后续转账流程。如果传输使用对称加密算法(最常用的),客户端和服务端都是用同一个对称密钥,那么这个对称密钥就存在泄露的可能性。一旦泄露,攻击者X可以截获正常的报文,解密后替换卡号和金额,然后重新用同一个密钥加密被篡改的报

2021-08-31 21:53:23 1087

转载 HttpServletRequestWrapper的使用:二次封装/处理Request

ResponseWrapper同理背景有段程序使用Http的方式与业务方交互,而且是明文传输数据。我方的代码已经打包放在服务器上运行了很长时间,这时突然要求修改数据传输的方式,要求加密后再传输,而我方的原有的代码不能改变,以防止引发其它问题。如何在不修改我方现有的代码的前提下,满足合作商的要求?技术方案采用Filter+HttpServletRequestWrapper就可以解决这个问题。首先:在filter中拦截到加密后的请求,将参数解密,然后组装成一个新的明文请求串。然后:重写HttpSe

2021-08-31 13:00:03 3759

原创 @Mapper注解:Mybatis避免写xml与实体间字段关系映射

文章目录参考与详细原理实例支持使用注解来配置映射的sql语句,这样可以省掉映射器xml文件。参考与详细原理@Mapper注解详解:使用方法、源码https://mynamelancelot.github.io/mybatis/mapper.html使用注解配置Mapperhttps://blog.csdn.net/soonfly/article/details/67640653实例Application配置指定mapper文件扫描位置@MapperScan作用:指定要变成实现类的接口所在

2021-08-31 12:55:09 763

原创 guava限流器与redis限流器

文章目录参考原理实例参考guava rate Limite原理参考:https://www.cnblogs.com/fnlingnzb-learner/p/13086185.html原理guava的限流器,可以理解为并发包中的信号量。通过tryAcquire方式获取有限的令牌(即你要限制的qps),获取到就可以进入Controller中执行。因此结合拦截器去做限流是最合适的。将预先设置的限流策略配置在DynamicConfig(放置在配置文件中,服务启动时会解析配置文件获取到限流策略,做的更好的

2021-08-31 11:02:52 531

原创 Spring Boot拦截器以及常用拦截器demo

文章目录用途代码用途在 Spring中,当请求发送到 Controller 时,在被Controller处理之前,它必须经过 Interceptors(0或多个),背后是一种责任链的设计模式。Spring Interceptor是一个非常类似于Servlet Filter 的概念 。典型通途:日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算 PV(Page View)等;权限检查:如登录检测,进入处理器检测是否登录;性能监控:通过拦截器在进入处理器之前记录开始时间,在处理完后记

2021-08-30 12:41:26 329

原创 Mac开发工具及其常用方法

文章目录Alfred工作流Iterm2 & zsh快捷键Alfred工作流文件管理方面:最近文件查询与展示 https://sspai.com/post/47063Iterm2 & zsh快捷键https://cnbin.github.io/blog/2015/06/20/iterm2-kuai-jie-jian-da-quan/补充标记设置标记:⌘ + shift + m跳转到上个标记:⌘ + shift + j多个标记切换:⌘ + shift + arrow.

2021-08-27 17:27:39 2353

原创 maven依赖排除

背景A-common包依赖于B-service的某些方法,因而引入了B-service的jar包。B-service的jar包中依赖redis,导致A-common包在其他没有redis依赖的服务中无法使用。解决方法

2021-08-27 16:22:04 164

原创 ITerm2 paste黏贴速度过慢问题解决

原因:zsh开启autosuggestions 插件的时候,在终端中粘贴大量的内容的时候,会粘贴的很慢,基本上是一行行的粘贴的。vim ~/.zshrc// 复制如下内容pasteinit() { OLD_SELF_INSERT=${${(s.:.)widgets[self-insert]}[2,3]} zle -N self-insert url-quote-magic # I wonder if you'd need `.url-quote-magic`?}pastefinish(

2021-08-27 12:48:45 935

原创 Thrift IDL基本语法

文章目录thrift原理IDL基本类型object类型struct 结构体Container (容器)enum (枚举)常量类型ExceptionService (服务定义类型)Namespace (名字空间)Comment (注释)thrift原理https://www.jianshu.com/p/f12a442d510cIDLThrift 采用IDL(Interface Definition Language)来定义通用的服务接口,然后通过Thrift提供的编译器,可以将服务接口编译成不同语言编

2021-08-26 09:47:19 493

原创 Spring Boot使用CommonsRequestLoggingFilter记录传入的请求

原理Spring 自带 AbstractRequestLoggingFilter,在处理请求之前和之后执行日志记录操作,这个过滤器需要一个子类来覆盖beforeRequest(HttpServletRequest, String)和afterRequest(HttpServletRequest, String)方法来执行围绕请求的实际日志记录。Spring 提供了以下 2 个实现 AbstractRequestLoggingFilterCommonsRequestLoggingFilterServ

2021-08-26 09:28:49 1959

原创 logback开启异步打印

文章目录参考原理真实配置参考https://blog.csdn.net/qq496013218/article/details/76603779原理ch.qos.logback.classic.AsyncAppender是logback的一个异步打印实现类,指明使用该类打印日志即开启了异步打印功能。当Logging Event进入AsyncAppender后,AsyncAppender会调用appender方法。append方法在将event填入Buffer(这里选用的数据结构为BlockingQ

2021-08-26 09:22:16 1202

原创 Spring导入其他sdk包中依赖Spring的组件

文章目录参考背景@Configuration等注解的自动注入及@ComponentScan的组件扫描@SpringBootApplication启动类最后解决参考参考:https://blog.csdn.net/weixin_41540822/article/details/88852973背景A服务引入B服务提供的SDK包中的某个util方法,结果报了NPEdebug发现,B服务util方法依赖Spring注入,由于A服务启动时此类不在Spring Boot的组件扫描范围之内,没能完成util方

2021-08-24 10:51:28 624

原创 多个ExceptionHandler类的执行顺序

文章目录背景解决方案代码背景2个服务:A-common 和 BService,各自有异常处理器。其中A中定义了通用的异常处理器,供所有服务直接调用。但是B服务由于业务需求需要处理一些A中没有的异常,由于A中存在兜底逻辑:对Exception进行捕获,这个时候就要指定异常处理器的执行顺序。解决方案Spring的异常处理器是根据异常处理器被加载的顺序来顺序执行,比如:A->B->C ,如果B拦截并且处理了某个异常,就会直接抛出,C的异常处理器就执行不到了。可以通过 @Order 注解来

2021-08-24 10:28:40 4723

原创 JMX实现JVM运行时监控

参考文章https://juejin.cn/post/6856949531003748365https://www.liaoxuefeng.com/wiki/1252599548343744/1282385687609378作用提供了一种JVM运行时的监测和管理,比如 JVM 内存、CPU 使用率、线程数、垃圾收集情况等等。另外,还可以用作日志级别的动态修改,比如 log4j 就支持 JMX 方式动态修改线上服务的日志级别。最主要的还是被用来做各种监控工具。需要提供监控的Mbean接口以及具体实习

2021-08-23 13:01:49 200

Linux学习.emmx

Linux学习.emmx

2021-04-16

空空如也

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

TA关注的人

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