博客

Java重载匹配算法

算法如下找出全部可以调用的方法。(可以调用的方法意味着形參个数等于实參个数,实參的类型可以转换为方法形參的类型。)假设实參与形參的类型可以直接相应。则运行该方法。假设可以调用的方法仅仅有一个。则运行该方法。可以调用的方法不止一个时, 逐一作出推断: 假设一个方法的类型签名都可以赋值给还有一个方法。则
2022-11-29

浅谈ThreadLocal

ThreadLocal是为了避免共享, 避免锁竞争, 使用了空间换时间的思路若使用Map, Thread做Key, 则回到了问题本身, 仍会发生锁竞争, 降低效率所以数据实际上是存储在java.lang.Thread#threadLocals的 ThreadLocal相当于一个钥匙/桥梁去访问Thr
2022-11-28

Gradle使用记录

下载Gradle环境变量配置GRADLE_HOME 指向安装目录环境变量配置GRADLE_USER_HOME 指向依赖下载目录往Path中添加%GRADLE_HOME%\bin在USER_HOME路径, 路径示例: C:\Users\root\.m2. 添加settings.xml文件配置maven
2022-11-19

RabbitMQ/RocketMQ消息可靠性保证

RabbitMQRabbitMQ刷盘机制异步写入文件前会有一个Buffer,大小为1M(1048576),数据在写入文件时,首先会写入到这个Buffer,如果Buffer已满,则会将Buffer写入到文件(此时写入到内核态缓存中, 未必刷到磁盘);有个固定的刷盘时间:25ms,也就是不管Buffer
2022-11-04

前端实现tooltip

鼠标悬浮在问号图标上, 下方展示提示文本..tooltip { margin: 8px; padding: 8px; border: 1px solid #CCCCCC; background-color: #F6DBB3; position: absolut
2022-10-31

使用OpenFeign+Validator优雅对接第三方接口

例如对接百度的根据ip查询地理信息的接口这里使用的是OpenFeignimport com.xxx.xxx.thirdparty.dto.baidu.BaiduIpInfoDTO; import org.springframework.cloud.openfeign.FeignClient; imp
2022-10-14

自定义rocketmq-spring-boot-starter

一般使用rocketmq-starter都会进行不同程度的封装, 在此分享一种封装思路基于rocketmq-spring-boot-starter <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rock
2022-09-26

Postman效率篇

postman是开发常用的接口测试工具这里记录一下postman提效方法创建目录: 后台定义目录变量host 接口域名目录定义预执行脚本// 添加前置url 使用目录定义的变量 pm.request.url = pm.collectionVariables.get("host") + pm.requ
2022-09-21

开发常用软件

IDEIntelliJ IDEAJavahttps://www.jetbrains.com/idea/WebStorm前端https://www.jetbrains.com/webstorm/CLionC/C++https://www.jetbrains.com/clion/HBuilderX前端h
2022-09-17

C++ 类型转换操作符重载

示例template <typename T> operator T () const { } Poco库中的使用Var.hPoco::Dynamic::Var template <typename T> operator T () const { VarHolder* pHolder =
2022-08-30

CMake 链接静态库 示例

现有库lib-a, lib-b可执行文件final链接情况lib-b 静态链接 lib-a, final静态链接lib-b 和 lib-a, 且final同样静态编译lib-aCMakeLists.txtcmake_minimum_required(VERSION 3.19) project(lib
2022-08-24

CMake 链接 OpenSSL 静态库

示例CMakeLists.txt如下cmake_minimum_required(VERSION 3.5) project(test CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unu
2022-08-23

C++ 获取当前时间并格式化

#include <chrono> #include <ctime> #include <iomanip> #include <sstream> using namespace std; int main(int argc, char **argv) { // 获取本地时间 au
2022-08-20

使用 SOAR 优化 SQL

介绍soar是由小米开源的SQL优化器和重写器项目地址 https://github.com/XiaoMi/soar使用基于 ubuntu20.04 lts按文档安装后https://github.com/XiaoMi/soar/blob/master/doc/install.md现有 catego
2022-08-12

Java类加载器机制及应用

0x00 何时触发类加载动作显式加载通过ClassLoader的loadClass方法通过ClassLoader的findClass方法通过Class.forName隐式加载遇到new、getstatic、putstatic、invokestatic这4条字节码指令时对类进行反射调用时当初始化一个类
2022-08-08
Ubuntu编译调试OpenJDK8

Ubuntu编译调试OpenJDK8

Centos编译调试OpenJDK11下载源码非官方 切换到jdk8u分支https://github.com/unofficial-openjdk/openjdk.git编译编译jdk需要一个引导jdk, 引导jdk版本需要比编译版本小一个版本或等于当前版本命令行运行sh configure -
2022-08-05

Nacos服务发现客户端流程

基于nacos-client:1.4.2Nacos有推/拉两种模式1. 推由Nacos服务端主动发起, 通过UDP进行推送2. 拉由客户端发起启动时调用nacos接口拉取一次调用指定服务时拉取一次通过定时器定时拉取流程梳理如下流程图
2022-08-01

微服务架构中OpenFeign请求的流程

1. 代理目标方法注入容器 (OpenFeign)2. 创建请求对象, 组装参数 (OpenFeign)3. 维护服务注册表(Ribbon + Nacos), 且根据负载均衡算法(Ribbon)选取一个真实的服务地址将http://base-service/getInfo替换为http://127.
2022-08-01

Ribbon为服务创建独立上下文的流程

从Feign接口开始goodsFeignClient.getGoods(id) 进入代理类的拦截方法feign.ReflectiveFeign.FeignInvocationHandler#invoke feign.SynchronousMethodHandler#invoke 继续跳转, 默认使
2022-07-26