- 博客(65)
- 收藏
- 关注
原创 含辛茹苦ES6转ES5
项目 js 没有用 vue 的福音情景问题 项目有很多新的 js 语法 es6 es7 等等 如你所愿市面上很多浏览器已经大部分支持这些与语法了 但是 ie 就差强人意了 直接歇菜如何解决 利用 node 插件完成语法降级实施情景 # 安装babel npm install --save-dev @babel/core # 安装转码规则 npm install --save-dev @babel/preset-env # 规则加入 babel.config.json
2022-03-30 16:13:28
1279
原创 sql打印-基于log日志
直接上代码package xxx;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Arrays;import java.util.HashSet;import java.util.List;import java.util.Objects;import java.util.Set;impo
2022-03-18 17:42:40
949
原创 来来来,继续打印sql,利用 mybatis 插件功能
这里打印sql利用 mybatis 插件功能 补充知识 Mybatis拦截器能拦截 Executor、ParameterHandler、StatementHandler、ResultSetHandler 四个对象里面的方法 核心逻辑 找到 ClientPreparedStatement.toString() 执行它 这里选用 ParameterHandler 对象拦截 为什么呢 因为所有sql都需要设置参数啊 不区分查询和更新多好 注意自带插件拦截功能会先于拦截的方法执行 也就是
2022-03-14 16:44:13
1193
原创 温故而知新-MyBatis打印完整sql-新方式
温故而知新-MyBatis打印完整sql-新方式寻找突破点织入打印sql逻辑ConnectionLogger 代理逻辑JavassistUtil寻找突破点 打印完整sql的好处不用多说,参数多的sql福音 找准切入点很关键 ClientPreparedStatement 是 Statement 的标准实现 所有 mysql 的连接都会调用它执行查询语句 里面的 toString() 方法可是福音 它会完整打印 sql (填充好的查询参数) 试想只要我们在它执行 execute() 方法时织
2022-03-07 10:45:43
994
原创 Arthas 反手就是一顿操作
运行java -jar arthas-boot.jar选择要监控的java进程序号查看class文件sc *.类名 // 注意不是全类名哦jad 全路径类名 // 看反编译的文件jad 全路径类名 >D://xxx.java // 输入编译的文件到指定文件
2021-11-30 13:58:25
186
原创 一起用注解过滤数据吧
背景工作中肯定用到根据某某机构去过滤数据也就是权限控制这类数据想当然就应该用 SpringAOP 去实现思路首先规定用什么标志让 Spring 识别当前方法需要数据过滤优雅的使用自定义注解是个不错的选择注解里面传入当前要进行数据过滤的 Class 对象即可业务实体类对象里面需要声明一份公共的 OrgIds List 格式用来存放过滤后的查询条件自定义 DataFilter 注解package ;import java.lang.annotation.Documented;
2021-10-14 10:12:47
998
原创 你一定没遇到的AOP失效场景
老生常谈 AOP 失效感觉老生常谈了 无非就是 @Transactional 注解用错位置 要不就是本类自身调用 导致 AOP 失效遇到问题 项目中个别 service 事务没有生效 于是开始对比 service 类和其他 service 有什么区别 然并卵 找了个寂寞 奇思妙想 既然 AOP 在个别 service 层失效 那我把 AOP 放在 controller 层呢 果然事务生效了 此次验证说明了 service 事务是没有问题的 有问题的是 service 层没有
2021-08-27 15:13:53
922
原创 跟我一起定制tk-mapper
用过mybatis都清楚tk-mappertk-mapper 批量保存操作不知道用过没有 感觉很鸡肋就是动态拼接批量插入语句效率低就算了 可是还硬性规定 接口限制实体包含id属性并且必须为自增列并且字段为null也会插入 想想心都累了 有的字段有默认值 你插入null 数据库统统报错搞了很久终于把字段为null这一诟病给治好了利用注解和反射给字段标注默认值1. 定义默认值注解package ;import java.lang.annotation.Documented;import j
2021-08-27 09:55:11
255
原创 kafka 你卡了吗
kafka 你卡了吗概念区分发布订阅模式消息传给多个消费者服务端推给消费者 还是消费者主动拉消息当然是拉啊 消费者底层维护长轮训topic将消息分类patition提高集群并发 同一个topic 可以有多个patition 分散在多个服务器上leader/follower这里的 leader和followe是作用于 patition上 leader管理 patition follower 只复制分区副本消费组组就是业务应用分类 不同消费组可以同时消费
2021-05-17 16:17:42
169
原创 潜入 JVM 垃圾
解释 threadlocal 内存泄露原理简释 jvm内存模型jvm内存 统称运行时数据区堆 和 方法区(元空间) 为多线程共享的数据线程栈 和 本地方法栈 和 程序计数器 线程私有数据垃圾回收主要是操作堆内存何为 垃圾对象先说什么不是垃圾对象栈里有 变量 指向 堆的引用 就不算垃圾对象如何判断是 垃圾对象1. Reference Count 在对象头上标记引用量 引用消失一个 count减一 存在问题不能解决对象循环引用问题2. Root Searching 根可达
2021-04-15 11:56:11
193
原创 敬畏历史 Dubbo 源码
源码环境搭建maven install 编译源码 请使用 -DarchetypeCatalog=internal -Dfile.encoding=GBK构建项目用 eclipse 会报错 Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:flatten-maven-plugin:1.2.5:flatten不用慌这表示m2e在其执行maven的生命周期管理时没有定义该插件所以提示出错 其实m2e对此
2021-04-09 18:16:05
163
原创 温文尔雅的 zookeeper
无脑源码环境搭建zk 下载地址:https://github.com/apache/zookeeper/tree/release-3.5.4ant 下载地址:https://ant.apache.org/bindownload.cgi因为 zk 是由 ant 来构建所以需要使用 ant 命令来转换成工程导入开发工具配置 ANT_HOME 环境变量打开 cmd 找到 zk 解压路径,在 zk 根路径下执行 ant eclipse这里环境搭建不是重点所以详细操作步骤参考 https://blog
2021-04-08 15:06:57
182
2
原创 nacos 新鲜源码解读
nacos服务端存储数据结构Map<namespace,Map<group::serviceName, Service>>第一次服务端先创建空的service开启定时任务心跳检查解决并发访问服务内存列表问题 copyOnWrite 思想虽然用的是并发 map 只能高并发应对不同key 同时写用一个 key 还是会出现线程等待对比eureka 同步思想eureka存在只读缓存和读写缓存他们之间会进行同步 详细过程待补充服务端启动 死循环 从 阻塞队列取新实
2021-04-06 18:34:10
273
1
原创 spring mvc 深度解析
透过现象看本质聊聊声明一个controller有三种方式 可能的你就以为有一种方式吧使用 @Controller 注解@Controllerpublic class AnnotationController { @RequestMapping("/annotationController") @ResponseBody public void testAnnotationController() { System.err.println("testAnnotationControlle
2021-04-06 14:35:30
97
原创 继AQS后又一队列之 Condition
简单上手定义一个 BoundedBuffer 类 封装 put 和 take 方法实例化一个写线程条件锁 final Condition notFull = lock.newCondition();实例化一个读线程条件锁 final Condition notEmpty = lock.newCondition();put 方法 先用 ReentrantLock.lock() 锁住当前线程判断 写入的数量队列是否满了满了 notFull.await(); // 阻塞写线程没满 写入数据
2021-03-30 18:11:50
105
原创 HystrixCommand注解使用
使用Spring Cloud时绕不开Hystrix,他帮助微服务实现断路器功能。Hystrix具备服务降级,服务熔断,线程和信号隔离,请求缓存,请求合并以及服务监控等强大功能。让我们来看一下这个注解的简单应用:package com.example.demo.service;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;imp
2021-03-30 11:35:34
3379
原创 MySql索引原理追溯
初识索引不为知 再见已是人上人磁盘块计算机规定每个扇区存 512 字节每一个框磁盘块是页大小 16KB磁盘块是系统虚拟划分不是真实存在磁盘块是由若干个扇区组成 磁盘快和扇区是一对多关系每磁盘块是由 32 个扇区组成 (16*1024/512=32) 主键尽可能少的占用空间 varchar > 4 字节 的主键建议用 int 类型MySql最多容纳数据量上图主键和指针占 10 字节 每磁盘块是 16k所有三层结构最多可以存储 16000/10=16001600
2021-03-29 11:18:52
161
原创 接口限流之 Semaphore 思考
业界成熟的方案有很多Google开源工具包Guava提供的限流工具类RateLimiterSpringCloud提供的@HystrixCommand注解今天我主要是看一下jdk官方提供的Semaphore信号量情景预热Semaphore用来控制同时操作某个资源的操作数量。Semaphore管理着permits,每当一个线程来获取许可时,permits数减 1 ,当permits数小于0时,再来获取许可的资源就需要阻塞简单上手声明一份全局 Semaphore 变量private
2021-03-27 15:21:49
180
原创 Linux安装MySql 5.6
1、卸载老版本MySQL查找并删除mysql有关的文件find / -name mysql rm -rf #上面命令查找到的路径,多个路径用空格隔开或者下边一条命令即可 find / -name mysql|xargs rm -rf 2、在安装包存放目录下执行命令解压文件:tar -zxvf mysql-5.6.24-linux-glibc2.5-x86_64.tar.gz 3、删除安装包,重命名解压后的文件rm -rf mysql-5.6.24-linux-glibc2.5-
2021-03-24 15:22:22
903
1
原创 MySql高效实现递归
MySql从8.0开始支持递归查询了CREATE TABLE `t_area` ( `id` int NOT NULL AUTO_INCREMENT, `parent_id` int DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
2021-03-24 14:58:00
509
原创 电脑迁移虚拟机无法连接网络不慌不忙
首先查看虚拟机软件为当前虚拟机生成的mac地址vim /etc/sysconfig/network-scripts/ifcfg-System_eht0修改tpaddr为自定义的ip 要和虚拟机软件里指定的网卡在一个网段修改hwaddr为虚拟机软件生成的mac修改name为eth0vim /etc/udev/rules.d修改name为eth0 修改attr为虚拟机软件生成的mac删掉多余的eth配置reboot 系统...
2021-03-24 10:22:48
1162
原创 跟我一起AQS SOS AQS
ReentrantLock简单介绍先拿ReentrantLock来说说把里面有AQS抽象队列的实现类NonfairSync和FairSync 分别实现的是非公平和公平锁抽象队列是一个双向队列 里面有node节点 每个node节点存放当前线程 还有pre和next 和 waitStatus状态值ReentrantLock实现原理简单一句话 自旋(for) cas park抽象队列不存在锁竞争时是不会初始化的不会有额外的内存消耗存在锁竞争时会初始化一个空的node节点 thread=null 然
2021-03-20 11:31:55
85
原创 spring容器加载过程
bean生命周期springboot自动装配是在BeanFactoryPostProcessor@Component@ComponentScan@import @bean涉及到的类ConfiguratinClassPostProcessor@PostConstruct @PreDestroy注解涉及的类commonAnnotationBeanPostProcessor循环依赖解决循环依赖先创建a ,a中有b...
2021-03-15 17:46:10
168
原创 动态刷新mapper看过来
提供一个mybatisplus的mapper文件动态刷新配置类方便开发时使用,不用每次修改xml文件后都要去重启应用package com.xxx.config;import java.util.Arrays;import java.util.List;import java.util.Set;import org.apache.commons.collections4.IteratorUtils;import org.apache.ibatis.session.SqlSessionFa
2021-02-18 16:17:01
2035
5
原创 maven鲜为人知的标签
一.dependencyManagementdependencyManagement用在父pom中用来统一管理项目的版本号, 确保各个子项目的依赖和版本一致子项目可以不用声明版本号, 但是一定要显示声明引用父pom的jar不然不会默认导入父pom的所有依赖父pom <dependencyManagement> <dependencies> <dependency> <groupI
2021-02-05 14:13:17
141
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人