自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软件设计重要原则

内聚性是指模块内部元素之间的联系程度,耦合性是指模块之间的依赖程度。高内聚低耦合意味着模块内部元素紧密相关,而模块之间相对独立,这有助于提高系统的可维护性和可扩展性。:一个类应该只有一个引起它变化的原因。在软件设计过程中,开发者应该根据项目的具体需求和约束条件,灵活应用这些原则,以构建出高质量的软件系统。:软件实体(类、模块、函数等)应该对于扩展是开放的,但对于修改是封闭的。每个组件和函数的功能应该明确,以提高代码的可读性和可维护性。这意味着一个类对另一个类的依赖应该是最小的,只依赖它需要的部分。

2024-04-27 12:36:36 255

原创 mysql数据库开发军规

MySQL数据库开发军规是一系列最佳实践和原则,旨在帮助开发者在MySQL数据库设计和开发过程中提升性能、确保数据安全、减少错误,并提高可维护性。

2024-04-27 12:26:33 579

原创 java实现调用外部shell脚本

在这两个示例中,我们都假设shell脚本具有执行权限,并且其路径是正确的。此外,如果你关心脚本的标准错误输出,你需要同时读取process.getErrorStream()。最后,请注意,如果你的Java应用程序和shell脚本在不同的环境中运行(例如,不同的用户或权限级别),那么可能需要调整环境变量或执行策略以确保脚本能够正确执行。在Java中调用外部shell脚本,你可以使用Runtime.exec()方法或者ProcessBuilder类。// 替换为你的shell脚本路径。

2024-04-27 12:17:02 243

原创 Spring源码深度解析:run函数启动流程全揭秘

接下来,Spring会加载Bean定义到上下文中。扫描组件:通过@ComponentScan注解或其他方式扫描指定的包路径,找出需要管理的Bean。解析配置类:解析使用@Configuration注解的配置类,提取其中的Bean定义。注册Bean定义:将扫描和解析得到的Bean定义注册到上下文的BeanDefinitionRegistry中。通过以上详细的步骤解析,我们可以看到Spring的启动流程是一个复杂而有序的过程。

2024-04-27 12:09:39 668 1

原创 初识reactor响应式编程

Reactor响应式编程起源于数据流和变化的传播概念,其核心概念是由底层的执行模型通过数据流自动传播变化。这种编程范式最早由.NET平台上的Reactive Extensions (Rx)库实现,后来迁移到Java平台后,产生了著名的RxJava库,并衍生出Reactor等响应式编程库。Reactor是Pivotal旗下的项目,与Spring框架有着紧密的联系,是Spring WebFlux等响应式模块的“御用”响应式流。

2024-04-25 22:22:12 463 2

原创 springBoot集成seata实现分布式事务

日常开发离不开分布式系统,自然避免不了分布式事务问题,Seata 是一款阿里开源的主流分布式事务解决方案,但实际工作引入seata感觉有点重,本人之前在商业银行做开发也很少团队使用。今天趁此机会做个demo,玩一玩了解下。

2024-04-25 10:00:01 874 2

原创 云原生Service Mesh服务网格简单介绍

Service Mesh是一个用于处理服务间通信的基础设施层,旨在实现云原生应用复杂服务拓扑中的可靠请求传递。其基本构成是一组与应用一起部署的轻量级网络代理,这些代理对应用来说是透明的。Service Mesh通过统一的方式来控制和处理服务间的通信,为微服务架构中的服务发现、负载均衡、故障恢复等提供了解决方案。

2024-04-24 14:24:00 1247

原创 计算机书籍《人月神话》读后感

人月神话》这本书的核心内容主要围绕软件工程的智慧与项目管理展开。

2024-04-24 13:55:41 159

原创 mysql事故复盘: 单行字节最大阈值65535字节(原创)

记得我还在银行做开发,投产上线时,项目发版前,要提DDL的sql工单,mysql加1个字段,因为这张表为下游数据入湖入仓用的,长度较大。在测试库加字段没问题,但生产库字段加不上。

2024-04-24 13:44:17 366

原创 基于java实现责任链进行参数校验

在Java中,责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它允许对象以链式的方式组织起来,以便请求可以在链中传递,直到被某个对象处理为止。这种模式为多个对象处理同一请求提供了灵活的机制,并且可以将请求的处理者与请求的发送者解耦。

2024-04-24 12:10:22 1360

原创 实现自定义SpringBoot的Starter

简化依赖管理:与Spring Boot内置的Starter类似,自定义Starter同样可以隐藏底层库的复杂依赖关系,使开发者只需关注业务逻辑,而无需担心底层的依赖问题。这有助于降低项目的复杂性,提升开发效率。统一配置和自动装配:自定义Starter可以包含默认的配置信息和自动装配类,使得相关功能或组件的集成更加统一和便捷。开发者无需为每个项目重复编写相同的配置代码,只需引入自定义Starter即可实现快速集成。提高可复用性。

2024-04-22 16:33:36 752 2

原创 为什么feign第一次调用时会很慢

Feign 是一个声明式的 Web Service 客户端,它使得编写 HTTP 客户端变得更简单。然而,有时你可能会发现 Feign 在第一次调用时会比后续的调用慢很多。

2024-04-22 15:12:41 354 1

原创 k8s的Deployment部署策略线上踩坑

我们有个服务,专门做t-1日的增量数据入仓的. 入仓流程: 每日0点系统新建个csv文件, 通过kafka监听增量数据, 实时数据写入该csv文件, 供下游数仓次日取数.每日产生数据50G(1.8亿条)左右, 有天重启服务, 下游数仓直接告警提示: 数据有好多条脏数据,导致无法继续入仓.

2024-02-05 10:46:42 680 1

原创 对DDD四层架构落地的简单理解

demo-interface —接入层:提供外部/前端http接口,提供三方rpc接口,定时任务job,common类(异常类,枚举类)demo-application —应用层,不包含业务逻辑,很薄一层,主要为下层转发,协调,装配等工作。如启动类,配置类,认证授权.demo-domain —领域层,涉及核心业务,实体,聚合,值对象,领域事件, 具体业务代码。demo-infrastructure —基础设施层:操作DB,Redis, ES, OSS,配置类等。

2023-11-12 18:54:18 121

原创 druid连接池异常GetConnectionTimeoutException(原创)

有天,用户突然反馈系统页面查询缓慢,影响使用,我查了日志报:druid 连接池异常 GetConnectionTimeoutException wait millis 9120, active 20, maxActive 20 creating 0

2023-11-12 00:01:23 1526 1

原创 真实线上OOM溢出借助MAT工具排查(原创)

先说结论,后端服务消费到了kafka的超大消息,导致解析Json消息时OOM内存溢出了。有天,快下班时用户反馈说系统不可用了,加班排查了一晚上给解决了。登服务器,top命令监控当时CPU情况,发现有个java进程CPU飙升到100%了。使用 ps -ef | grep java 命令,查这台服务器运行的所有java进程PID,发现cpu飘高的进程正好是我们XX系统出的问题,导致系统不可用。再结合系统logback的error.log异常日志文件,发现OutOfMemoryError: Java heap

2022-06-11 11:15:40 1249

原创 基于虚拟机VirtuxBox通过rancher搭建K8s集群(原创)

准备工作主机:mac电脑主机,用于搭建rancher服务虚拟机VirtuxBox:准备2个CentOs7的虚拟机VirtuxBox虚拟机安装使用,不了解可参照之前我写过的这篇博客VirtuxBox安装CentOS7(原创)搭建步骤搭建rancher服务本地先安装启动好docker,然后通过docker镜像来安装rancher服务,mac系统和linux环境docker安装类似,(docker安装启动可参考我之前写的这篇博客centos7下安装docker部署单机es)...

2022-05-15 21:59:06 482

原创 VirtuxBox安装CentOS7(原创)

背景最近本人在抽空研究了下容器技术,需要到linux环境。买阿里云得花钱,不如自己本地用虚拟机搭建linux。环境本人电脑:macOS虚拟机软件:VirtualBox(开源免费)linux镜像版本:CentOS7

2022-05-03 23:35:20 854

原创 阿里数据同步中间件canal(一)基本介绍

背景阿里巴巴 B2B 公司为解决杭州和美国双机房部署,存在跨机房同步的业务需求 ,从 2010 年开始,开始尝试数据库日志解析,获取增量变更进行同步,由此衍生出了增量订阅和消费业务,从此开启一段新纪元。是什么canal [kə’næl],译意为水道/管道/沟渠主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费官方Wikihttps://github.com/alibaba/canal/wiki原理mysql主备复制canal的原理和mysql的主备复制原理相似,先提下m

2021-03-06 18:14:41 2979 2

原创 阿里数据同步中间件canal(三)HA集群版搭建

运行环境准备3台虚拟机192.168.56.101:安装canal-admin,canal-server01,zk192.168.56.102:安装canal-server02192.168.56.103:安装canal-server02安装zk略安装canal-admin官方文档地址:https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart修改配置文件application.yml数据库配置信息这里需要注意,canal的a

2021-03-06 17:59:18 511 2

原创 阿里数据同步中间件canal(二)单机版搭建

1.mysql配置授予用户canal权限当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x我的Linux服务器安装的MySQL服务器是5.7版本。MySQL的安装这里就不演示了,比较简单,网上也有很多教程。这里本人用MYSQL的root用户授权canal的权限,-- 使用命令登录:mysql -u root -p-- 授权 *.*表示所有库grant SELECT, REPLICATION SLAVE, REPLIC

2021-03-03 18:30:50 329

原创 crontab定时监控tomcat实现服务关闭自启动

使用场景部署到线上的服务, 偶尔因服务器OOM内存溢出导致服务关闭, 可以手动调大JVM内存参数(实际操作效果不大), 或者重启服务。但每次手动重启较为麻烦也不及时,这时可考虑采用crontrab写个定时任务shell脚本, 每隔一段时间监控tomcat进程, 如果服务关闭, 执行tomcat自启动,方便很多。操作流程1. 创建shell脚本, 命名tomcat_monitor.sh本人在tomcat的bin目录下, 创建该脚本文件, 执行[root@wuhao bin]# vi tomcat_m

2020-07-08 15:43:08 528 1

原创 Dubbo知识梳理

Dubbo是什么Dubbo是一个分布式、高性能、透明化的 RPC 服务框架,作用是提供服务自动注册、自动发现等高效服务治理方案。各节点角色说明Provider: 暴露服务的服务提供方。Consumer: 调用远程服务的服务消费方。Registry: 服务注册与发现的注册中心。Monitor: 统计服务的调用次调和调用时间的监控中心。Container: 服务运行容器。Dubbo服务调用关系说明0.服务容器负责启动,加载,运行服务提供者。1.服务提供者在启动时,向注册中心注册自己提供的服

2020-06-23 11:50:07 201

原创 亚马逊S3简单介绍

Amazon S3介绍Amazon Simple Storage Service (Amazon S3) 是一种对象存储,它具有简单的 Web 服务接口,可用于在 Web 上的任何位置存储和检索任意数量的数据。它能够提供 99.999999999% 的持久性,并且可以在全球大规模传递数万亿对象。S3的基本数据结构S3的数据存储结构非常简单,就是一个扁平化的两层结构:一层是存储桶(Bucket,又称存储段),另一层是存储对象(Object,又称数据元)。存储桶是S3中用来归类数据的一个方式,它是数据存储

2020-06-23 11:22:57 3541

原创 NIO多路复用机制

首先介绍下socket客户端与服务器每次网络通讯, 会建立一个连接, 创建socket, 以soket为媒介, 发送和接收输入输出流.进行流的读写操作.介绍下BIO、NIO和AIOBIO 同步阻塞JDK1.4之前,是面向流传输的, 传输效率慢, 客户端每次发起一个请求, 建立一个连接, 都创建一个socket对象, 不管有没有流的传输, 服务器都创建一个线程, 但有些线程不会执行流的读写操作是无效的. 线程多了会占用过多的资源,浪费堆的内存空间(可以采用线程池去管理线程, 但是如果线程池满的情况下

2020-06-23 11:04:51 1230

原创 Redis知识梳理

redis是什么redis是一个高性能的key-value数据库(单机redis支持10W并发), 完全开源免费,且redis是一个NOSQL类型数据库redis使用场景缓存持久化做数据库分布式锁管理分布式sessionDubbo的注册中心消息队列布隆过滤器做高并发计数器redis为什么快1 基于内存操作,比传统关系型数据库IO操作,快指数级,存储结构是key-value形式,添加和查找操作时间复杂度是O(1),2 采用单线程操作, 效率高(6.0版本引入多线程)6.0版本以下r

2020-06-22 19:09:52 153

原创 springBoot+quartz-mybatis整合demo

Demo实现的功能使用springBoot集成quartz分布式调度框架和mybatis, 实现定时用数据库做查询数据的功能。github源码地址https://github.com/mikewuhao/springBoot-quartz-demo搭建详细步骤项目结构在idea开发工具里面新建maven类型的project, 命名为springBoot-quartz-demo按上图目录结构建包pom.xml, 引入quartz相关依赖的jar包<?xml version="1.0"

2020-06-19 15:36:19 712 1

原创 分库分表中间件sharding-jdbc知识梳理

Sharding-JDBC官方简介ShardingSphere-JDBC 是 Apache ShardingSphere 的第一个产品,也是 Apache ShardingSphere 的前身。 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Myb

2020-06-18 17:38:57 368

原创 springBoot+sharding-jdbc+mybatis整合demo

Demo实现的功能使用sharding-jdbc实现水平分库分表,从数据库添加和查询数据功能。github源码地址https://github.com/mikewuhao/springBoot-schedule-demo搭建详细步骤准备工作建立好2个数据库: boot1和boot2, 每个库建2张相同结构的表: 命名user1和user2, 如下所示 :user表的建表语句/*Navicat MySQL Data TransferSource Server : loc

2020-06-18 11:18:25 1327 1

原创 RocketMq知识梳理

RocketMq介绍RocketMQ是阿里开源的消息中间件,它是纯java开发,具有低延迟、高吞吐量、高可用性和适合大规模分布式系统应用的特点。从名字可以看出Rocket火箭,代表RocketMQ主打速度。RocketMQ思路起源于Kafka,它对消息的可靠传输及事务性做了优化。消息中间件作用削峰, 异步, 解耦几种消息中间件技术选型Redis本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。但在实际应用中,大家在考虑消息中间件的时候一般都不考虑 Redis。两个原因,一方面是数

2020-06-16 11:35:26 373

原创 springBoot+schedule+mybatis整合demo

Demo实现的功能简单实现定时从数据库查出数据, 通过邮件方式发送给收件人.github源码地址https://github.com/mikewuhao/springBoot-schedule-demo搭建详细步骤准备工作获取邮箱的授权码, 以qq邮箱为例, 参考https://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1001256&&id=28项目结构在idea开发工具里面新建maven类型的proj

2020-06-16 11:15:11 405

原创 centos7下安装docker部署单机es

使用docker部署es背景从es官网下载太慢了, 采用docker部署es后, 速度快到飞起, 提高了效率.安装docker我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核3.8以上, RHEL/Centos 的内核修补过, centos6.5的版本就可以——这个可以试试)安装步骤root账户登录,查看内核版本如下执行命令 uname -a[root@localhost ~]# uname -a

2020-06-11 18:48:01 581

原创 springBoot+elasticsearch项目整合demo

Demo实现的功能springBoot集成elasticsearch(下面简称es)有2种实现方案, 一种是基于Jest, 另一种是基于springDataElasticsearch, 我们此次整合采用后者实现.简单实现对es搜索引擎, 添加索引数据, 查询数据等操作.github源码地址https://github.com/mikewuhao/springBoot-es-demo搭建详细步骤1. 准备工作1.1 提前把es环境搭建和启动好1.2 提前把es的head可视化插件配置好(Kib

2020-06-11 15:19:44 2253 1

原创 chrome浏览器安装elasticsearch的head可视化插件

head插件简介elasticsearch-head被称为是弹性搜索集群的web前端,head插件主要是用来和elastic Cluster交互的Web前端head插件历史elasticsearch-head插件在0.x-2.x版本的时候是集成在elasticsearch内的,由elasticsearch的bin/elasticsearch-plugin来管理插件,可是从2.x版本跳到了5.x版本后,head就作用了一个独立的服务来运行了,脱离了elasticsearch的约束,所以相对来说,部署起

2020-06-11 10:40:44 19558

原创 SpringBoot+RocketMq+Mybatis项目整合demo

Demo实现的功能项目启动生产者和消费者2个服务后, 生产者端执行用户查询, 从数据库查出用户数据后, 发送给消息中间件rocketMq, 消费者监听到mq消息后获取到用户数据.github源码地址https://github.com/mikewuhao/soringBoot-mq-demo/搭建详细步骤1. 准备工作1.1 提前把rocketMq环境搭建和启动好, rocketMq可视化工具安装启动好.(本人mac环境部署rocketMq,参考https://www.jianshu.com/

2020-06-10 17:11:31 1123

原创 SpringBoot+Dubbo+ZK+mybatis+Redis项目整合demo

Demo实现的功能按顺序启动提供者和消费者2个服务, 在消费者端做用户查询, 优先从redis缓存查数据, 如果缓存没有, 再远程调用提供者的用户查询接口,从数据库查询, 返回数据.github源码地址https://github.com/mikewuhao/springBoot-dubbo-demo搭建详细步骤1. 准备工作1.1 zk环境搭建和启动(本人windows环境,部署单机zk,参考https://www.cnblogs.com/lykbk/p/aefefdf45454545454.

2020-06-05 12:06:47 619

原创 mysql各种锁介绍

1 按锁粒度分类-行级锁&表级锁&表级锁&页级锁1 行级锁(1) 描述行级锁是mysql中锁定粒度最细的一种锁。表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突,其加锁粒度最小,但加锁的开销也最大。行级锁分为共享锁和排他锁(2)特点开销大,加锁慢,会出现死锁。发生锁冲突的概率最低,并发度也最高。2 表级锁(1) 描述表级锁是mysql中锁定粒...

2019-08-29 14:12:42 2957 1

原创 synchronized的底层原理

1 为什么用synchronized在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。2 怎么用synchronized1 普通同步方法(实例方法),锁是当前实例对象 ,...

2019-08-09 19:49:59 195

原创 解决mysql线上发生锁表问题Waiting for table metadata lock(原创)

解决mysql线上发生锁表问题(原创)问题描述最近,有同事用navicat打开mysql数据库,给一张表在线添加索引后, 该表一直卡主,打不开, 总在提示"正在加载"。问题复现初步断定应是应该表被锁了。复现当时的情况:session1:对user表进行修改操作,事务不要commit。session2:对user表添加索引。这时打开user表,出现了当时情况,一直卡主,打不开, 总...

2019-08-06 16:00:07 1326 1

原创 排查linux服务器cpu过高满载问题(原创)

项目发布到linux服务器, 线上监控cpu出现了占用过高满载情况, 排查流程如下:1 top命令查看, 是否有java进程占用CPU过高如图所示 , 进程是3769的java进程cpu飘升到99.7%2 通过ps -mp pid -o THREAD,tid,time命令, 查看某个进程下的线程情况, time代表这个线程已运行时间, 如图所示, 线程号3804的线程, cpu占用率很高,...

2019-06-02 02:47:24 5236

空空如也

空空如也

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

TA关注的人

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