自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

只有变秃 才能变强

书写是对思维的缓存

  • 博客(356)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 DIP , DI , IoC 傻傻分不清?

一张图看懂 DIP , DI , IoC 的关系Design Principle vs Design PatternIn software engineering, design principle and design pattern are not the same.Design PrincipleDesign principles provide high level guidelines to design better software applications. They do not

2020-09-05 15:57:31 458

原创 AOP,Spring AOP ,Aspectj,CGLIB 傻傻分不清?

一张图看懂 AOP,Spring AOP ,Aspect,CGLIB的关系 !Spring AOP , AspectJ , CGLIB 概念AOPAOP(Aspect Orient Programming) 作为面向对象的一种补充,广泛用于处理具有横切性质的系统级服务,如 事务,安全检查,缓存,对象池管理等。AOP 实现的关键就在于 AOP 框架自动创建代理对象,AOP 代理可分为 静态代理 和 动态代理 两大类,静态代理在编译阶段就可以生成代理类,因此也称为 编译时增强;动态代理 在运行

2020-09-05 15:41:20 787 4

原创 Excel 导入导出太麻烦? Easy excel 了解一下 !

Easy-Excel它是什么?easy-excel 是基于 Apache POI 框架的一款扩展封装库,让我们在开发中更快速的完成导入导出的需求。 尽管很多人会提出 poi 能干这事儿为什么还要封装一层呢?easy-excel 很大程度上简化了代码、让使用者更轻松的 读、写 Excel 文档,也不用去关心格式兼容等问题,很多时候我们在代码中会写很多的 for 循环,各种 getXXXInde...

2020-04-23 18:25:56 1540

原创 浅谈测试驱动开发(TDD)

TDD 是什么TDD 是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD 的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么功能代码。TDD 的基本思路是通过测试来推动这个开发的过程,但测试开发并不是单纯的测试工作,而是把 需求分析,设计,质量控制量化的过程。TDD 的目的不仅仅是测试软件,保证代码质量仅仅是其中的一部分,更重要的是,在开发过程中帮助开发者...

2020-04-02 17:27:54 847

原创 TDD 编程实战

源码地址: https://github.com/itguang/TDD_INACTION分为java实现版本和kotlin实现版本项目介绍假想你在火星探索团队中负责软件开发。现在你要给登陆火星的探索小车编写控制程序,根据地球发送的控制指令来控制火星车的行动。初始需求火星车收到的指令分为四类:探索区域信息:告知火星车,整片区域的长度(X)和宽度(Y)有多大;初始化信息:火星车...

2019-08-24 10:00:23 3459 1

原创 详解 Spring Session 架构与设计

前言开始进行 Web 开发时,我们可能会遇到这样的情况,Web 容器(例如 Tomcat、Jetty)包含 Session 的实现,当服务器重启之后,之前的登录状态会失效需要重新登录。又或者你的应用程序部署了不止一台机器,用户在机器A上登陆之后,来到机器B又需要重新登陆,因为机器A的 Session 在机器B 是没有的。在解决这两个问题之前,我们先来重新了解下 HTTP 协议的相关知识。HT...

2019-06-06 17:22:49 4962 1

原创 使用java8实现List中对象属性的去重

使用java8实现List中对象属性的去重今天在工作的时候遇到了一个问题,就是List的去重,不想用双重for,感觉太low,不想用for+Map,感觉应该有更好的方法,于是,google之。发现java8的stream流能完美解决这个问题。 List<BookInfoVo> list比如在 BookInfoVo 中有一个 recordId 属性,现在需要对此去重....

2018-09-03 16:37:57 11316 6

转载 架构师日记-从技术角度揭露电商大促备战的奥秘

好文推荐:

2023-11-09 10:56:25 110

原创 ITSource 分享 第6期【网址云收藏系统】

系统提供了 两种网页收集工具,一个是 bookmarklet,一个是浏览器扩展插件。数据库初始化语句: 打开 navicat,导入数据库SQL 脚本,执行即可。

2023-10-29 21:54:21 192

原创 ITSource 分享 第5期【校园信息墙系统】

服务端+管理后台+小程序构建后文件 https://github.com/panji-tech/campus-example。web 端: https://github.com/panji-tech/nuxt_campus_example。小程序源码: https://github.com/panji-tech/uni-app_campus_web。本项目设计系统较多, 分为服务端,管理后台端,小程序端,web端等,部署起来稍微有点难度。还有表白墙,买卖墙,综合墙等,并且分类可以自定义配置.

2023-10-29 20:08:55 248

原创 ITSource 分享 第4期【简洁的问卷调查系统】

链接:https://pan.baidu.com/s/1Cxd6pujaiab23sAI9dVpvw?https://itguang.lanzoub.com/b02x76ued 密码:8ysj。目前只有单选,多选,简答三种问题类型,并且可以选择手动结束和自动结束模式。登录: 输入账号密码: admin 123456 即可登录成功!以上环境需要准备好, 在自己的本地搭建好,方可进行下面步骤。Idea 运行后端项目,看到以下信息,表示运行成功。数据库 : MYSQL 8.x,

2023-10-24 19:24:23 107

原创 ITSource 分享 第3期【在线个人网盘】

配置 FTP 服务器相关配置即可,如果你的用户名密码,和我上面要求的一样,这里可以不用配置。如果你想要qq 登录和发邮件的功能,需要配置qq 邮箱相关配置,这里就不再介绍了。此模块可以上传文件,默认上传到根目录,可以点击右侧的文件夹,选择文件见上传。除了账号密码登录,如果配置了qq邮箱配置的话,还支持qq一键授权登录。添加一个用户:这里配置FTP服务器的用户名为:ftp 密码: root。全部文件模块可以查看所有的文件以及文件夹,还可以创建文件夹。数据库配置: 用户名:root,密码:root,可以在。

2023-10-24 19:03:26 185

原创 ITSource 分享 第2期【在线考试系统】

可以检查你的 node 版本,是否高于 17. 可以参考这边博客解决: https://blog.csdn.net/m0_65933139/article/details/130690790。链接: https://pan.baidu.com/s/1RiVFa5qt-wLa3MW2lnYrlw?考试卡片可以理解为是一份试卷,里面是一些试题的集合,当我们以 学生身份登录时,可以看到考试卡片和我的考试。考试管理,可以管理考试卡片,可以理解为创建试卷的地方。点击下一步,可以继续完善问题类型:题型,归类,难度。

2023-10-24 18:59:52 96

原创 ITSource 分享 第1期【在线考试系统】

链接:https://pan.baidu.com/s/1omhrRxHBUuLDAyOSb2oWHw?问卷编辑完成后,即可保存并发布,发布成功会生成一个在线地址,把这个地址发给别人.就可以收集问卷啦。https://itguang.lanzoub.com/b02x6lpxg 密码:730y。可以查看创建的所有问卷, 包括 收集中,编辑中,已关闭等状态。Idea 运行后端项目,看到以下信息,表示运行成功。在管理后台选中问卷,点击分析,即可看到统计结果。三 Quick Start。

2023-10-24 17:52:41 66

原创 对账平台设计

随着公司业务的蓬勃发展,交易履约清结算业务的复杂性也在不断的增高,资金以及各种数据的一致性和准确性也变得越发重要。

2023-03-01 11:47:52 2334 1

原创 Mysql 索引基数与选择性

先看一下 wiki 定义:索引(英语:Index),是一本书籍的重要组成部分,它把书中的重要名词名称罗列出来,并给出它们相应的页码,方便读者快速查找该名词的定义和含义。在 Mysql 中,索引也叫做 “键(key)”,是存储引擎用于快速找到记录的一种数据结构。这是索引的基本功能。恰当的索引对于良好的性能非常关键。当数据量较小是,不恰当的索引对性能的影响可能不明显,但是,当数据量很大时,性能可能会急剧下降。本小节我们就 Mysql 中索引的基数和选择性做一些讨论。

2022-11-29 17:40:58 994

原创 线程池使用不当总结

主线程执行join()进入阻塞状态,因为永远获取不到结果,永远无法恢复,造成服务故障。但是父任务的完成又依赖于子任务,这时由于子任务得不到线程,父任务无法完成。10个请求同时到达时,线程池被打满,子任务请求被迫进入阻塞队列。假设 executorService 线程数最大为10。拒绝策略设置为 丢弃,如果再去 get 会一直阻塞。

2022-11-24 14:23:40 552

原创 Spring 事务编程实践

Spring的事务框架将开发过程中事务管理相关的关注点进行适当的分离,通过Spring的事务框架,我们可以按照统一的编程模型来进行事务编程,却不用关心所使用的数据访问技术以及具体要访问什么 类型的事务资源。Spring 事务的设计理念的基本原则是:让 事务管理 与 数据访问,相分离。当在业务层使用事务的抽象API进行事务管理的时候,不需要关心事务将要管理的资 源是什么,对不同的事务资源的管理将由相应的框架实现类来完成。

2022-11-04 14:03:57 2638 1

转载 mat 使用指南

MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。读者可以在http://www.eclipse.org/mat/下载并使用MAT。

2022-10-20 11:57:34 293

原创 JVM 调优案例分析

现象:系统日常运行正常突然发生fullgc甚至内存溢出,重启后恢复正常但是过了几天又会突然发生频繁fullgc触发告警,告警信息如下:首先发生fullgc,我们需要定位fullgc发生在jvm哪个区域?我们可以通过cat也可以通过gc日志查询发生的区域,目前有两种方式可以快速定位到gc区域:1、Cat的Problem中可以直接查询error的详细信息(时间比较久了找不到对应的cat截图了)2、通过gclog查询(大部分系统没有添加gc日志打印),常见配置如下。...

2022-08-11 16:32:24 691

原创 JVM参数调优推荐

学习开源项目的启动脚本是个不错的主意,比如ElasticSearch家的,Cassandra家的。VJTools的 jvm-options.sh,伸手党们最爱,根据自己需要稍微定制一下就行,详见 http://github.com/vipshop/vjtools。《JVM调优的"标准参数"的各种陷阱》 ,R大的文章,在JDK6时写的,期待更新。当你在网上兴冲冲找到一个可优化的参数时,先打印看看,它可能已经默认打开了,再找到一个,还是默认打开了…...

2022-08-11 16:31:32 399

原创 java List 排序

java 排序

2022-06-09 11:48:37 240 3

原创 Guava中这些Map的骚操作,让我的代码量减少了50%

https://mp.weixin.qq.com/s/4XegAIdixcAywHF9-XDZzwGuava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更为高效。今天Hydra要给大家分享的就是Guava中封装的一些关于Map的骚操作,在使用了这些功能后,不得不说一句真香。先引入依赖坐标,然后开始我们的正式体验吧~...

2022-03-10 16:39:37 361

原创 记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析

API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析背景我有一个服务 A ,写了一个接口定义如下:@RequestMapping({"/config/coupon"})public interface CouponOperateTaskService { @PostMapping({"/list"}) @ApiOperation("优惠券操作任务列表") BizPageResponse<CouponOperateListRespo

2022-02-28 17:07:04 2392 1

原创 @FeignClient 上传文件时报错 解决方案

Feign 作为 Spring Cloud 中 RPC 工具,利用注解来描述接口,简化了 Java HTTP Client 的调用过程。但是在文件上传时,我们需要做一些额外的配置,不然会调用异常。背景我有一个服务 A,里面有个接口,需要接受上传的文件和一些参数, @PostMapping({"/validityPeriod/update"}) BizResponse proofValidityPeriodUpdate(@Validated ValidityPeriodUpdateRequest

2022-02-28 17:06:07 2041

原创 Redis大key 问题

Redis大key 问题背景双十一大促期间, 收到客服反馈通知,说 APP 领券接口缓慢。找到一个case,通过调用链路发现,是操作redis 缓慢,并且还搜到一些redis 异常。最后定位到原因:是发券场景下拿redis 做了一个缓存券批次的操作,记录用户当天领取的所有券批次发券场景: key = userId, value = 券批次ID 列表, 而redis 查询发现多了许多大key,体现在 一个用户领取的几千甚至上万张优惠券,导致Redis 查询缓慢,甚至异常。至于为何有的用户会领取这么多优

2022-02-21 16:11:50 9737 1

原创 Code Review 指南

Code Review 指南PPT: https://www.yuque.com/itguang/mweb/code-review-zhi-nan文章目录Code Review 指南前言CR 是什么?为什么要做 Code Review ?CR 的标准进行 CR 的一些原则CR 中需要关注什么?关注代码规范代码坏味道Duplicated Code (重复代码)Long Method (长函数)Large Class (过大的类)Long Parameter List (过长参数列)降低圈复杂度关注性能问题

2022-02-18 14:35:47 643

原创 Spring Boot 的 @Value 注解用法详解

一、前言在日常开发中,经常会遇到需要在配置文件中,存储 List 或是 Map 这种类型的数据。Spring 原生是支持这种数据类型的,以配置 List 类型为例,对于 .yaml 文件配置如下:test: list: - aaa - bbb - ccc对于 .properties 文件配置如下所示:test.list[0]=aaatest.list[1]=bbbtest.list[2]=ccc当我们想要在程序中使用时候,想当然的使用 @Value 注解去读取这

2022-01-04 17:17:53 1441

原创 由 CPU Load 过高告警引发的对 线程数和 CPU 的思考

线程池 数设置你真的会吗?可能很多人都看到过一个线程数设置的理论:CPU 密集型的程序 - 核心数 + 1I/O 密集型的程序 - 核心数 * 2这个理论看起来很合理,但实际操作起来,总是不仅如此人意。下面,我们就来看一下 线程数, CPU 的关心先说一个基本的理论,大家应该都知道:一个CPU核心,单位时间内只能执行一个线程的指令那么理论上,我一个线程只需要不停的执行指令,就可以跑满一个核心的利用率。下面我们用一段程序来测试下 CPU 和线程数 之间的关系。CPU 利用率测试测

2021-12-28 18:39:57 3045

原创 Brew换源

Brew换源简介Homebrew 是一款自由及开放源代码的软件包管理系统,用以简化 macOS 和 linux 系统上的软件安装过程。它拥有安装、卸载、更新、查看、搜索等很多实用的功能,通过简单的一条指令,就可以实现包管理,十分方便快捷。Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。名称 说明brew Homebrew 源代码仓库homebrew-core Homebrew 核心软件仓库homebr

2021-12-28 14:36:01 8097 1

原创 Jmeter 压测接口编写指北

电商领域中, 每到各种活动, 什么 618, 双十一, 双十二, 各种优惠活动就纷至沓来, 对营销工具是一个巨大的挑战, 因此, 营销相关系统的压测是保障系统稳定运行,应对突发流量的必要手段.优惠券系统作为营销工具中的一种大杀器, 其稳定性保障必不可少.下面主要介绍我负责的优惠券系统在应对双十一突发流量的压测过程:1. 压测前准备下载 压测工具: Jmeter提前统计好每个要压测接口的数据: 日常QPS, 99线, 双十一预估QPS压测线程数计算: 1000/接口99线 x 线程数 = 目标Q

2021-10-19 11:44:23 437 1

转载 使用CompletableFuture优化你的代码执行效率

使用CompletableFuture优化你的代码执行效率这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例.在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下:public static void main(String[] args) throws Exception {

2021-06-23 19:48:55 780

原创 Spring Security 与 SSO 整合思路

因为HIS登录认证采用了 Spring Security , 因此, 要想理解目前的HIS登录流程,需要对 Spring Security 有一定了解,才能在其基础上添加新功能和额外扩展。Spring Security 登录流程解析:一句话来总结Spring Security 的认证流程就是: 验证信息 (Authentication) 在 过滤器链中传播认证的过程。Spring Security 的核心组件易于理解,其基本校验流程是: 验证信息(Authentication)传递过来,验证

2021-02-21 09:49:38 2676 2

转载 消息中间件的四种投递模式对比

消息中间件的四种投递模式对比https://cloud.tencent.com/developer/article/1540042消息中间件( Message Oriented Middleware,简称MOM)在企业开发中变得越来越重要。本文介绍消息中间件中的四种消息投递模型,主要是介绍模型的核心特性,以及不同模型之前的区别。这四种模型分别是:PTP模型Pub/Sub模型Partition模型Transfer模型其中PTP模型和Pub/Sub模型在JMS规范中有定义,消息中间件Act

2021-02-19 18:34:39 330

原创 接口性能优化思路

接口性能优化思路背景HIS 这边有一个扫码取药的接口,涉及到整个就诊流程:预约–》签到–》开始就诊–》添加处方及药品–》确认处方–》确认账单–》创建交易及订单 --》付款 --》 结束就诊 --》 签退。整个流程业务非常复杂,涉及接口和远程服务也非常多,因此接口响应很慢,耗时很长。类似的涉及到整个就诊流程的操作还有很多,比如:核销,也是要走一遍上面的流程,只是在【诊中】的操作不同,可能是添加药品,也可能是添加检查,体检,诊次套餐之类。这类操作每个步骤都非常明确,常常以一个 Pipeline 的形式封

2021-01-29 17:17:15 2336 1

转载 可靠消息一致性的 2 种解决方案

讲的可太棒了: https://cloud.tencent.com/developer/article/1430020"可靠消息最终一致性"是为了解决Producer端的消息发送与本地事务执行的原子性问题,是一种柔性事务,属于异步确保型,软状态,最终一致。**问题典型场景是:**本地往DB中插入一条记录,同时往MQ中发送一条消息,必须保证二者同时成功或者同时失败。由于DB和MQ是不同的系统,可能插入DB成功,但是发消息到MQ中失败;也可能插入DB失败,但是发送消息到MQ成功。如何保证二者的一致性,就.

2021-01-14 18:32:06 848

原创 使用 Lombok @Singular 注解需要注意的 BUG

先看下面一个 java 类, 这是在业务代码中的一段真实代码,做了部分简化。@Getter@Builder@NoArgsConstructorpublic class PatientQuery { @Singular private List<Long> patientIds = Lists.newArrayList();}首先我们先分析下上面这段代码存在的问题:**第一:**添加了 Lombok 的 @Builder 注解,但是 patientIds 属性有默认

2021-01-14 12:56:35 3126

原创 Binlog 日志应用场景

Binlog 日志应用场景https://www.cnblogs.com/kingszelda/p/8362612.htmlhttps://cloud.tencent.com/developer/article/1444390什么是binlog?Mysql 5.0以后,支持通过binary log(二进制日志)以支持主从复制。复制允许将来自一个MySQL数据库服务器(master) 的数据复制到一个或多个其他MySQL数据库服务器(slave),以实现灾难恢复、水平扩展、统计分析、远程数据分发等

2021-01-12 18:46:11 326

原创 InheritableThreadLocal 的作用?

直接看总结:InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。线程间传递实现原理:说到InheritableThreadLocal,还要从Thread类说起:public class Thread implements Runnable { ......(其他源码) /* * 当前线程的ThreadLocalMap,主要存储该线程自身的ThreadLocal */ T

2020-12-03 16:34:41 626

原创 Feign 和 Hytrix 在微服务上下游的请求头信息传递丢失问题

在 Spring Cloud 中 微服务之间的调用会用到Feign,但是在默认情况下,Feign 调用远程服务存在Header请求头丢失问题。解决方案首先需要写一个 Feign请求拦截器,通过实现RequestInterceptor接口,完成对所有的Feign请求,传递请求头和请求参数。Feign 请求拦截器public class FeignBasicAuthRequestInterceptor implements RequestInterceptor { private static

2020-11-30 22:38:26 890 1

javaSE课件

世上最适合java初学者的资料,这是PPT,要视频的私聊我

2015-08-31

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

TA关注的人

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