- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 git暂存
使用git stash pop命令来恢复最近一次暂存的内容并同时删除暂存记录。和git stash apply一样,如果想恢复指定的暂存记录并删除它,可以使用git stash pop stash@{}。例如,要恢复并删除stash@{2}中的内容,可以使用git stash pop stash@{2}。恢复暂存内容并保持最近一次暂存记录,如果有多个暂存记录,想恢复指定的暂存记录,可以使用git stash apply stash@{},其中是git stash list中显示的暂存记录索引。
2024-12-20 09:43:22
264
原创 【命令大全】自己实际项目中使用到的一些命令总结
安装requirements.txt中的包:pip3 install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com --upgrade。打开clickhouse客户端:clickhouse-client --user=用户名 --password=密码。导出三方依赖到requirements.txt:pipreqs ./ --encoding=utf-8。
2023-04-12 15:17:37
618
原创 dubbo调用日志打印
总共分为三步解决:1、<dubbo:consumer retries="shopInitCount"timeout="{shopInitCount}" timeout="shopInitCount"timeout="{dubbo.consumer.timeout}" check=“false” filter=“exceptionResolver”/>2、src\main\resources\META-INF\dubbo\com.alibaba.dubbo.rpc.Filter文件中指定:
2021-06-24 18:50:12
1229
转载 不要在 foreach 循环里进行元素的 remove/add 操作。
不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。
2021-04-28 15:13:59
199
原创 系统自动关单前几秒用户发起支付,回调时发现已关单
记一次线上问题,如标题,用户在关单前几秒发起支付,支付回调时发现订单已被关闭。说解决方案:发起支付时要设置交易结束时间,
2021-04-21 09:25:21
588
原创 mybatis使用map循环key值列表和使用list<Map>
UPDATE prestige_calculate p SET p.ORDER_NUM = WHEN ${k} THEN ${userIdOrderNumMapFinal[k]} WHERE p.user_id IN ${k} UPDATE prestige_calculate p SET p.TURNOVER = WHEN ${k} THEN ${userIdTurn...
2021-04-12 10:49:33
713
原创 java中锁的优化 -- JVM对synchronized的优化
1)锁消除概念:JVM在JIT编译(即时编译)时,通过对运行上下文的扫描,去除掉那些不可能发生共享资源竞争的锁,从而节省了线程请求这些锁的时间。举例: StringBuffer的append方法是一个同步方法,如果StringBuffer类型的变量是一个局部变量,则该变量就不会被其它线程所使用,即对局部变量的操作是不会发生线程不安全的问题。 在这种情景下,JVM会在JIT编译时自动将append方法上的锁去掉。2)锁粗化概念:将多个连续的加锁、解锁操作连接在一起,扩展成一个范围更大的锁,即将加
2021-04-12 10:48:36
98
原创 @RefreshScope 刷新机制实现流程
1、需要动态刷新的类标注@RefreshScope 注解2、@RefreshScope 注解标注了@Scope 注解,并默认了ScopedProxyMode.TARGET_CLASS; 属性,此属性的功能就是在创建一个代理,在每次调用的时候都用它来调用GenericScope get 方法来获取对象3、如属性发生变更会调用 ContextRefresher refresh() -》RefreshScope refreshAll() 进行缓存清理方法调用,并发送刷新事件通知 -》 GenericScope
2021-04-09 11:08:29
1080
转载 局部性原理与缓存行
时间局部性:CPU读取数据时的顺序为寄存器->L1->L2->L3->内存,当从内存中读取到数据时,会一次将数据放入L3、L2、L1中,这样下次CPU再读取这个数据时直接从L1中获取,无需读取内存。CPU认为程序在短时间内有多次操作同一个数据的倾向,所以会将数据存储在高速缓存中。空间局部性:CPU认为从内存中读取一个数据,下一次访问的很有可能是它旁边的数据,所以会进行预读取,目前工业界一次性预读取的大小一般为64Byte,这64个字节的大小一般称为缓冲行,也就是说CPU在读取数据的
2021-03-31 13:47:36
372
1
原创 事务可见性
大家都知道数据增删改在当前事务中都是可见的,除非我们使用的连接不同。在项目中同时使用mybatis连接池和hibernateJPA连接池,同一个事务中的数据增删改就会相互不可见,需要注意。
2021-03-30 20:37:01
440
转载 MySQL间隙锁讲得比较好的一篇
事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。今天要说的就是隔离性。脏读脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读。可重复读可重复读指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。通常针对数据更新(UPDATE)操作。不可重
2021-03-30 20:03:16
178
原创 EmojiUtil
判断字符串是否emoji表情:public static boolean containsEmoji(String source) { int len = source.length(); boolean isEmoji = false; for (int i = 0; i < len; i++) { char hs = source.charAt(i); if (0xd800 <= hs &
2020-12-04 14:06:02
262
原创 MySQL模糊匹配特殊字符转义
一般搜索关键词不允许有特殊字符 “\”、“”、“%”,如果数据库中有特殊字符需要匹配的话,用以下方式:keyword = keyword .trim().replaceAll("\\","\\\").replaceAll("", “\\_”).replaceAll("%", “\\%”);
2020-12-02 17:12:07
719
原创 正则表达式
正则表达式至少1个大写字母English letter,(?=.?[A-Z])至少1个小写英文字母,(?=.?[a-z])至少1位数字,(?=.?[0-9])至少有1个特殊字符,(?=.?[#?!@$%^&*-])最小8个长度.{8,}
2020-10-13 09:41:54
125
原创 linux命令
将目录/opt 及其下面的所有文件、子目录的文件 赋权给用户组group下的用户userchown -R group:user /opt
2020-08-10 19:36:26
125
原创 代码/数据库/接口规范
1、循环体中的sql或RPC操作尽可能改为批量,减少IO创建关闭次数;2、方法中优先判断可以退出的分支,尽量减少代码缩进;3、使用枚举和常量,尽量避免魔法值;4、尽量避免代码重复,提取公共方法,提高可读性与维护便利性;5、命名避开关键字(is)...
2020-05-20 14:51:05
385
原创 优雅停机关闭线程池
出自rocketmq源码NamesrvStartup.start方法 /** * 注册JVM钩子函数代码(一种常用的编程技巧,如果代码中使用了线程池,一种优雅停机的的方式就是注册一个JVM钩子函数, * 在JVM进程关闭之前,先将线程池关闭,及时释放资源) */ Runtime.getRuntime().addShutdownHook(new ShutdownHookThread(log, new Callable<Void&g
2020-05-12 20:00:28
518
原创 SQL批量插入常见问题
mapper.javaint insertList(List<WmContactWelcome> list);mapper.xml<insert id="insertList" parameterType="java.util.List"> insert into wm_contact_welcome (company_id, contact_id, `state`, welcome_id, create_time, update_time) valu
2020-05-08 20:56:45
238
原创 重写equals、hashCode,及Lombok中关于@Data的使用
1、为什么要重写equals()方法?先看Object类中的一段源码:public boolean equals(Object obj) { return (this == obj); }我们需要的效果是值比较,而Object类的equals比较规则就是比较两个对象的内存地址,达不到我们预期的效果,所以我们要重写equals()方法。Integer的equals(...
2020-04-02 15:55:58
7230
2
原创 异步消息MQ
消息中间件一、rocketmq生产者集群name server:Name Server 为 producer 和 consumer 提供路由信息broker:Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求做好准备消费者集群RocketMQ执行流程1、启动 Namesrv,Namesrv起 来后监听端口,等待 Broker、Producer、Consumer 连上来...
2020-03-09 15:54:48
96
原创 搜索引擎ElasticSearch基础及性能优化
搜索1、ElasticSearch爬取分词创建倒排索引(反向索引)索引矩阵封装lucene,提供restful api索引:类似mysql的数据库类型:表文档:行创建:创建索引Poems创建类型Poem通过 Mapping定义类型Keyword 类型是不会分词的,直接根据字符串内容建立反向索引,Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分...
2020-03-09 15:54:16
216
原创 业务架构图常客
1、具体架构部署情况,业务中台(统一业务处理Service)网关(SpringCloud GateWay)微服务技术中台监控Hystrix:熔断保护Security:安全控制Zipkin:调用链路追踪ELK:日志中心Prometheus:监控报警服务器性能监控:zabbix定时任务框架:ElasticJobdubbo:容错机制:1、失败自动切换 2、快速失败,报错 3、失...
2020-03-09 15:53:43
767
原创 HashMap你要知道的几件事
HashMap1.7及以前:数组+链表 头插法1.8及以后:数组+链表+红黑树 尾插法初始容量是2的指数次幂负载因子0.75位运算>取模运算线程不安全?数据丢失、死锁1.7:指针next:扩容形成环,造成死锁1.8:低位指针 & 扩容前的数组size = 0,高位指针 & 扩容前的数组size = 1,区分组别链表转红黑树,当数组size<6...
2020-03-09 15:51:24
93
原创 Redis常用命令
一、redis数据结构1、string1.1、set1.2、get1.3、mset1.4、mget1.5、setnx1.6、incr1.7、incrby2、hash2.1、hset2.2、hsetnx2.3、hmset2.4、hget2.5、hmget2.6、hdel2.7、hlen2.8、hgetall2.9、hincrby3、list3.1、lpush...
2020-03-09 15:50:13
112
原创 事务的一些理论概念
一、本地事务:1、事务特性原子性一致性持久性隔离性2、传播机制1、REQUIRED如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)2、SUPPORTS假设当前在事务中。即以事务的形式执行。假设当前不在一个事务中,那么就以非事务的形式执行3、MANDATORY必须在一个已有的事务中执行,否则抛出异常4、REQUIRES_NEW不管是否存在事务,都创建一个新的事...
2020-03-09 15:49:37
218
原创 线程的几件事
一、线程顺序执行1、thread.join2、通过倒数计时器CountDownLatch实现3、创建单一线程池Executors.newSingleThreadExecutor()4、通过信号量机制控制Semaphore二、线程池常用参数1、核心线程数:corePoolSize2、最大线程数:maxPoolSize3、空闲线程存活时间:keepAliveTime4、空闲线程存活时...
2020-03-09 15:48:34
122
原创 锁的几件琐事
一、synchronized:对象头monitorentermonitorexit支持重入自旋锁偏向锁轻量级锁(Mark Word)重量级锁ReentrantLock:Lock接口:通过volatile修饰int型变量,并保证每个线程都能拥有int的可见性和原子修改,本质是AQS双向链表存放线程ID二、差异:1、关键字和接口2、中断、超时、公平、读写、绑定条件3、Lock...
2020-03-09 15:47:27
177
原创 JVM内发生的十件事
0、最常用的JVM参数设置:-Xms: 初始堆大小,JVM 启动的时候,给定堆空间大小。-Xmx: 最大堆大小,JVM 运行过程中,如果初始堆空间不足的时候,最大可以扩展到多少。-Xmn:设置年轻代大小。整个堆大小=年轻代大小+年老代大小+持久代大小。持久代一般固定大小为 64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大, Sun 官方推荐配置为整个堆的 3/8。-Xs...
2020-03-09 15:45:31
108
原创 线程池
Java中的ThreadPoolExecutor类:1、corePoolSize:核心池的大小2、maximumPoolSize:线程池最大线程数3、keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止4、unit:参数keepAliveTime的时间单位5、workQueue:一个阻塞队列,用来存储等待执行的任务6、threadFactory:线程工厂,主要用来创...
2019-09-18 17:26:20
142
原创 链路追踪、全链路监控、服务器大盘监控
OpenTracing:开放式分布式追踪规范大众点评catZipKinPinPoint服务器性能监控:zabbixELK:Elastic Eearch+Logstash+Kibana
2019-09-17 11:07:28
743
原创 有关注过开源社区吗,都看过哪些源码?
GitHub、Apache、开源中国、CodeProject、GoogleCode、Linux中文社区、51开源社区优快云、博客园、简书
2019-09-16 11:00:39
609
原创 JSONObject.toJSONString出现地址引用问题
如果一个对象中有两个同类型的对象属性a、b,如果a、b直接引用同一对象的内存地址,JSONObject.toJSONString方法得到的json字符串会出现内存地址引用。public static void main(String[] args) { JsonVO jsonVO = new JsonVO(); A a = new A(); a.s...
2019-08-20 16:41:40
2086
原创 Integer 引用传递交换值
public static void swap(Integer i1, Integer i2) { try { Field field = Integer.class.getDeclaredField("value"); field.setAccessible(true); Integer tmp = new...
2019-06-26 21:19:00
1079
原创 概念
CQRS架构:命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现分离。这属于DDD应用领域的一个模式,主要解决DDD在数据库报表输出上处理方式。...
2019-05-14 16:15:15
147
原创 volatile 与 synchronized 区别
用一句话概括volatile,它能够使变量在值发生改变时能尽快地让其他线程知道.volatile详解:首先我们要先意识到有这样的现象,编译器为了加快程序运行的速度,对一些变量的写操作会先在寄存器或者是CPU缓存上进行,最后才写入内存.而在这个过程,变量的新值对其他线程是不可见的.而volatile的作用就是使它修饰的变量的读写操作都必须在内存中进行!volatile与synchronize...
2019-04-03 14:49:46
85
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人