07 2024 档案
设计模式之代理模式
摘要:定义 代理模式(Proxy Pattern)是软件工程中的一种设计模式,它属于结构型模式,用于在不直接访问实际对象的情况下,通过一个或多个代理对象来间接访问某个对象或执行某些操作。 目的 这种模式的主要目的是: 控制访问:代理可以在访问真实对象之前或之后添加额外的操作,如权限检查、延迟初始化、日志记
PGSQL数据膨胀问题排查
摘要:背景 不知道从何时开始,数据库空载时的性能消耗越来越高,当业务高峰期,CPU 和内存都处于高负载的情况下,观看 AWS 的监控,发现负载空载时占用很高。 并且占用较高的 Top5 分为为: autovacuum: VACUUM ANALYZE pg_catalog.pg_attribute auto
PGSQL快速生成模拟数据
摘要:背景 有时候,我们为了测试数据库的性能,通常需要快速构建测试数据,PgSql 提供了快速构建数据的工具,方便我们能够快捷的构建模拟数据。 生成函数 顺序生成 生成 SQL -- 生成一批顺序值 SELECT id FROM GENERATE_SERIES(1, 10) t(id); 结果 id 1
PGSQL 批量更新
摘要:概述 在我们的平常业务中,经常需要批量更新数据,例如:现阶段需要更新 1000 个包裹的上网时间,每个包裹的上网时间是不一样的,假如我们一个一个包裹更新,则需要与数据库进行 1000 次的交互,很大的消耗数据库的性能,并且更新的速度也很慢,因此,我们通常需要进行批量更新数据。 数据生成 首先,我们需
从0开始搭建博客
摘要:1. 概述 本篇博客,我教大家从0开始搭建一个 bolo博客,bolo 博客 和 solo 博客的区别是皮肤更加多,并且可以帐号密码登录。 本篇博客主要的内容如下: linux 安装 docker,设置docker镜像加速 docker 安装 nginx docker 的一些常用的命令 docker
Spring Aop 获取入参和出参
摘要:1. 概述 本次,我利用 Spring Aop 的注解方式获取切入点的入参和出参,因为比较简单,所以就直接上代码了。 2. 代码编写 注解类 /** * 日志注解 * * @author Jiantao Yan * @title: Log * @date 2021/1/5 20:33 */ @Tar
Spring AOP 切面执行顺序
摘要:1. 概述 1.1 术语 Spring AOP 的相关术语: Aspect:切面,由一系列切点、增强和引入组成的模块对象,可定义优先级,从而影响增强和引入的执行顺序。事务管理(Transaction management)在java企业应用中就是一个很好的切面样例。 Join point:接入点,程
zuul 网关超时优化
摘要:1. 概述 前段时间,线上的服务不知道为啥,突然全部的服务都超时,所有的请求经过网关都超时,后来进行链路追踪排查,发现有一个服务链接 RDS 数据库,一个查询花费了 20S 的查询时间,导致后续调用该服务的应用都超时。然后超时的连接占满了 zuul 的转发池,最终导致了所有经过 gateway 的服
Hibernate Type源码解析
摘要:type 的类图 AssociationType: 关联类型的 type,主要用于外键等相关 IdentifierType: 主键相关的类型 type BasicType: 基础类型,例如 long,int,string 等基础类型 type 注册 基础类型的注册器 /* * Hibernate,
idea 修改 git 提交用户名
摘要:本项目 修改配置文件 修改当前项目目录下的 config 文件 添加以下数据 [user] name = ** email = **@gmail.com 全局修改 git config --global user.name 'gitlab注册用户名' git config --global user
链表常见算法
摘要:1. Java 实现链表的数据结构 主要的实现方式是在类中设置一个 Node 的内部类,用来存储链表的节点 /** * 链表数据结构联系 * * @author Jiantao Yan * @title: MyLink * @date 2020/3/23 18:32 */ public class
Gateway 聚合swagger文档
摘要: 在微服务架构下,通常每个微服务 都会使用 Swagger 来管理我们的接口文档,当微服务越来越多,接口查找管理无形中要浪费我们不少时间,因此,我们需要把其它系统的 Swagger 文档聚合到 Gateway ,方便我们统一查看接口文档。 1. 核心实现 1.1 OMS 端实现 1.1.1 swa
zuul 源码解析
摘要:1. RefreshableRouteLocatorRouteLocator 路由定位器,在 Spring Cloud Zuul 中,RouteLocator 的主要作用是加载 zuul 路由配置信息(如yml配置文件或数据库)到zuul中,再由过滤器将这些信息一步步去匹配,主要的 RouteLoc
转-Java 异常处理的 20 个最佳实践,你知道几个?
摘要: 作 者:武培轩 出 处:https://www.cnblogs.com/wupeixuan 原文链接:https://www.cnblogs.com/wupeixuan/p/11746117.html 异常处理是 Java 开发中的一个重要部分,是为了处理任何错误状况,比如资源不可访问,非法输入
ZUUL超时配置
摘要:zuul相关问题 connect-timeout-millis和socket-timeout-millis的区别 connect-timeout-millis 连接服务的时间 connect-timeout-millis=1 socket-timeout-millis 服务器连接及响应时间 sock
shading-jdbc数据库读写分离
摘要:官方文档 1. ShardingSphere 1.1 ShardingSphere简介 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。
Crontab定时任务更新SOLO以及备份数据库
摘要:Linux定时执行任务Crontab 1. 安装Crontab 1.1 安装命令 # vixie-cron软件包是cron的主程序 yum install vixie-cron # crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序 yum install cro
【转】-多线程之Callable
摘要:Java并发编程:Callable、Future和FutureTask 该博客转载自Matrix海 子的Java并发编程:Callable、Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种
Jenkins集成部署SpringBoot
摘要:Jenkins集成部署SpringBoot 1. 前言 随着业务的增长,需求也开始增多,每个需求的大小,开发周期,发布时间都不一致。基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。因此,传统的人工部署已经心有余而力不足。 持续集成,持续部
【转】-synchronized与Lock的区别与使用
摘要:详解synchronized与Lock的区别与使用 该博客转载自淳安郭富城的详解synchronized与Lock的区别与使用 1. 引言: 昨天在学习别人分享的面试经验时,看到Lock的使用。想起自己在上次面试也遇到了synchronized与Lock的区别与使用。于是,我整理了两者的区别和
【转】-Java实现生产者和消费者的5种方式
摘要:Java实现生产者和消费者的5种方式 该博客转载自掘金的Java实现生产者和消费者的5种方式 1. 前言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间为空时,消费者阻塞,当存储空间满
转-Java并发编程:阻塞队列
摘要:Java并发编程:阻塞队列 该博客转载自Matrix海 子的Java并发编程:阻塞队列 Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工
【转】-Java 中的阻塞队列
摘要:Java 中的阻塞队列 该博客转载自方腾飞的聊聊并发(七)——Java 中的阻塞队列 1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队
【转】-Java并发之CyclicBarrier
摘要:Java并发之CyclicBarrier 该博客转载自巴蜀码哥 ** 的Java并发之CyclicBarrier** barrier(屏障)与互斥量、读写锁、自旋锁不同,它不是用来保护临界区的。相反,它跟条件变量一样,是用来协同多线程一起工作的。 条件变量是多线程间传递状态的改变来达到协同
【转】-CountDownLatch详解
摘要:CountDownLatch详解 该博客转载自爱宝贝丶 的CountDownLatch详解 1. 简介 CountDownLatch中count down是倒数的意思,latch则是门闩的含义。整体含义可以理解为倒数的门栓,似乎有一点“三二一,芝麻开门”的感觉。CountDownLatch的作用
【转】-Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
摘要:Java并发编程:CountDownLatch、CyclicBarrier和Semaphore 该博客转载自Matrix海 子的Java并发编程:CountDownLatch、CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程
【转】-java多线程读写锁ReadWriteLock
摘要:Java多线程中读写锁ReadWriteLock的使用 该博客转载自lavimer的Java多线程中读写锁ReadWriteLock的使用 1. 概念 读写锁分为读锁和写锁,多个读锁之间是不需要互斥的(读操作不会改变数据,如果上了锁,反而会影响效率),写锁和写锁之间需要互斥,也就是说,如果只是
【转】-Java锁解析
摘要:不可不说的Java“锁”事 **该博客转载自美团技术团队 的不可不说的Java“锁”事 ** 前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁
【转】-并发下的集合
摘要:高并发下的Java数据结构(List、Set、Map、Queue) 本文转载至薛勤的博客的高并发下的Java数据结构(List、Set、Map、Queue) 由于并行程序与串行程序的不同特点,适用于串行程序的一些数据结构可能无法直接在并发环境下正常工作,这是因为这些数据结构不是线程安全的。本节
【转】-Java CAS操作的ABA问题
摘要:Java CAS操作的ABA问题 本文转载至ksfzhaohui的Java CAS操作的ABA问题 1. CAS介绍 比较并交换(compare and swap, CAS),是原子操作的一种,可用于在多线程编程中实现不被打断的数据交换操作,从而避免多线程同时改写某一数据时由于执行顺序不确定性
【转】-Java CAS 原理剖析
摘要:Java CAS 原理剖析 本文转载来自卡巴拉的树的Java CAS 原理剖析 在Java并发中,我们最初接触的应该就是synchronized关键字了,但是synchronized属于重量级锁,很多时候会引起性能问题,volatile也是个不错的选择,但是volatile不能保证原子性,只能
volatile关键字解析
摘要:Java并发编程:volatile关键字解析 本文转载来自于https://www.cnblogs.com/dolphin0520/Matrix海 子的Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的
nginx部署vue项目
摘要:1. 前言 此文档主要介绍如何使用nginx部署vue等前端项目,并配置SSL证书部署的前提下是服务器已经安装nginx,前端项目已打包成静态文件 2. 部署过程 2.1 申请SSL证书 向服务商(阿里云)申请SSL证书,并且下载nginx版本的key和密匙,放置于nginx的安装目录之下 2.2
【转】-Java反射
摘要:Java 反射由浅入深 | 进阶必备 原文链接 本博文主要记录我学习 Java 反射(reflect)的一点心得,在了解反射之前,你应该先了解 Java 中的 Class 类,如果你不是很了解,可以先简单了解下。 一、Java 反射机制 参考了许多博文,总结了以下个人观点,若有不妥还望指正: Jav
转-OAuth2.0 原理流程及其单点登录和权限控制
摘要:原文链接 单点登录是多域名企业站点流行的登录方式。本文以现实生活场景辅助理解,力争彻底理清 OAuth2.0 实现单点登录的原理流程。同时总结了权限控制的实现方案,及其在微服务架构中的应用。 1 什么是单点登录 1.1 多点登录 传统的多点登录系统中,每个站点都实现了本站专用的帐号数据库和登录模块。
手写MyBatis
摘要:1. 前言 本篇博客,将使用JDK动态代理、注解、反射等技术,编写一个最简单的MyBatis,可基本实现对象的增删查改 2. 注解的定义 2.1 Delete注解 /** * @ClassName Delete * @Descriiption 删除注解 * @Author yanjiantao *
OAuth2.0登录的四种方式
摘要:OAuth登录的四种方式 1. 授权码 授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。 这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完
git提交emoji指南
摘要:emoji 指南 emoji emoji 代码 commit 说明 🎉 (庆祝) tada 初次提交 ✨ (火花) sparkles 引入新功能 🔖 (书签) bookmark 发行/版本标签 🐛 (bug) bug 修复 bug 🚑 (急救车) ambulance 重要补丁 🌐 (地球)
swagger注解文档
摘要:swagger 注解文档 1. @Api() 作用于类,放置于 controller 的一个类上,标志这个类是 swagger 资源 1.1 参数: 参数名称 参数介绍 备注 value 说明,可以使用 tags 替代 tags 说明 1.2 实例代码: @Api(value = "swagger2
各种软件启动方式
摘要:各种软件启动方式 1. MySQL # 启动 service mysqld start # 关闭 service mysqld stop # 重启 service mysqld restart 2. Redis # 启动 service redisd start # 关闭 service redis
gson无法正常将时间戳转化成date
摘要:gson无法正常将时间戳转化成date gson将时间戳转化成date时,报错 Failed to parse date ["1551950239757']: Invalid time zone indicator '3' 解决办法 添加一个long转date的解析器 @Test public vo
CenterOs7安装redis
摘要:CenterOs7安装redis 1.redis的安装 1.1 下载redis 从官网下载redis,并且上传到服务器的安装位置 1.2 安装redis ①解压redis,执行tar -zxvf 安装包名称 ②make redis源码,make ③make install make install
java+selenium+autoIt 实现下载(打印)功能
摘要:java+selenium+autoIt 实现下载(打印)功能 selenium是一个开源的自动化测试框架,它可以模拟用户对浏览器的操作,进行自动化的测试。但是,它不仅仅只能用来做测试。 AutoIt 是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行
设计模式之策略模式和工厂模式的区别
摘要:1.前言 本篇博客转载于策略模式与工厂模式比较 2.区别 这段时间看了一些设计模式,看到策略模式与工厂模式的时候,总是感觉他们很相似,不要区分,到具体的场景了你可能还在徘徊到底用工厂还是策略呢?这几天就想写一篇关于策略模式与工厂模式区别的文章,但一直没思路,昨天跟淘宝mm聊了聊,今天早上思路顿时开阔
设计模式之工厂模式
摘要:1.前言 最近在看《大话设计模式》这本书,虽然大学也学过设计模式,但是那时候还没有进行过开发,那么多的设计模式,看了也不知道用在哪种场景,最近又突然有时间了,就想着重新理解一遍软件的设计模式,本篇博客的原地址为runoob 2.工厂模式的简介 工厂模式(Factory Pattern)是 Java
设计模式之策略模式
摘要:1.前言 本篇博客原地址《JAVA与模式》之策略模式 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 2.策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本
mongodb查询指定字段
摘要:mongodb查询指定字段 @Test public void fun1() { DBObject fieldsObject = new BasicDBObject(); fieldsObject.put("_id", true); fieldsObject.put("name", true); f
常见的正则表达
摘要:一、前言 常见的正则表达式,本文摘自菜鸟教程 二、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9
BAT批处理运行项目
摘要:BAT批处理运行项目 1. 批处理简介 顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD。这些命令统称批处理命令。 2. 编写启动zookeeper脚本 @echo off call "D:\Program Files\zookeeper-3.4.
mongodb常用语句
摘要:mongodb常用语句 1. 数据库操作 1.1 创建数据库 创建数据库 (如果数据库存在则创建,否则则进入该数据库) use blog 注:创建数据库后,表中并不会出现在数据库列表中,需要添加数据后,才会出现在数据库列表中 1.2 修改数据库 修改数据库的名称 方法1,拷贝当前数据库,再删除旧数据
服务器安装多个Tomcat
摘要:服务器安装多个Tomcat 因为申请了一个域名,然后想设置一个二级域名,让不同的二级域名访问到不同的项目,例如blog.booleandev.xyz访问到博客项目,www.booleandev.xyz访问到主页,网上找了找资料,发现一般是使用nginx反向代理映射到不同的端口,再跳转到不同的项目,因
Nginx设置二级域名映射到不同的Tomcat
摘要:一、前言 在之前的博客中,已经安装好了多个tomcat和nginx,本篇博客将介绍如何设置不同的二级域名转发到不同的tomcat上 二 、配置服务器端 我使用的是腾讯云服务器,只需要在云解析中配置相关域名信息即可 三、配置nginx 进入nginx的配置文件中 cd /usr/local/nginx
Nginx的安装
摘要:一、前言 在上一篇博客中,讲述了在服务器上安装多个tomcat,现在这篇博客要讲是安装nginx 二、配置Nginx的安装环境 安装Nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++ ,安装完gcc后,才可以进行下
nginx+tomcat+二级域名+https
摘要:1.添加域名解析 在腾讯云或者阿里云中添加域名解析,解析到具体得ip 2. 购买SSL证书 在腾讯云或者阿里云中购买相应的SSL,基本上每个SSL只能解析一个HTTPS,所以如果你有多个二级域名设置HTTPS的话,需要申请多个SSL 3.安装多个tomcat 3.1下载tomcat安装包放入服
mysql数据库安装
摘要:mysql数据库安装 1. 从官网下载yum包 直接使用wget下载yum包 wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm 2. 安装软件源 rpm -Uvh mysql57-community-r
linux设置环境变量
摘要:linux设置环境变量 直接使用目录设置环境变量 编辑环境变量文件 vim /etc/profile 在最下一行添加如下文件: export PATH=$PATH:/usr/local/consul 设置配置立即生效,否则需要重启后生效 source /etc/profile 使用类似于JAVA_H
CenterOS7安装java
摘要:CenterOS7安装java #进入安装目录 cd /usr/local/soft/java #wget下载java8 #直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了 #不时间的下载链接不一样 wget http://download.oracle.com/otn-pub
git拉取远程指定分支到本地
摘要:git拉取远程指定分支到本地 以前写自己模块的时候,曾经建了一个本地分支dev,然后这个分支很久没有使用了,最近又要使用这个分支dev,然后要将远程仓库master分支上的内容同步到我本地dev分支 # 切换分支到本地分支 git checkout dev # 拉取更新远程主仓库数据 git pul
consul集群搭建
摘要:consul集群搭建 consul agent -data-dir /tmp/node0 -node=node0 -bind=192.168.64.59 -datacenter=dc1 -ui -client=192.168.64.59 -server -bootstrap-expect 1 con
consul命令行
摘要:consul命令行 advertise:广告地址用于将我们通告的地址更改为群集中的其他节点。默认情况下,-bind通告地址。但是,在某些情况下,可能存在无法绑定的可路由地址。此标志允许闲聊不同的地址以支持此功能。如果此地址不可路由,则该节点将处于恒定的振荡状态,因为其他节点将不可路由性视为故障。在C
Nginx的安装
摘要:一、前言 在上一篇博客中,讲述了在服务器上安装多个tomcat,现在这篇博客要讲是安装nginx 二、配置Nginx的安装环境 安装Nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++ ,安装完gcc后,才可以进行下
常见的正则表达式
摘要:一、前言 常见的正则表达式,本文摘自菜鸟教程 二、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9
小程序分页实现
摘要:1.前言 小程序分页和下拉刷新时一个最常用的功能,实现起来也不是很难,我这里就使用一个伪代码方式来实现,最主要的是这个思路 2.实现 // pages/zhibo/zhibo.js var app = getApp(); var wechatUtil = require('../../utils/w
小程序获取用户信息无法得到问题
摘要:1.前言 因为小程序是由js代码编写的,我js学得不是特别的好,所以,刚开始以为js跟java一行,一行一行的执行,后面才发现,完全不是,所以有时候,我们在获取用户信息和openId的时候,要向后台发送请求,所以有时有可能请求还没有返回数据,小程序这边已经赋值了,只能得到一个undifine,很桑心
小程序requestUtil工具类
摘要:1.前言 开发小程序已经有一段时间了,都没有写过小程序相关的文章,踩过坑挺多,把这些坑记下来,下次就不会再犯了。 小程序自带的请求方法不是特别方便,无意中得到了一个工具类,因此把这个工具类分享出来 2.工具类详情 function formatTime(date) { var year = date