技术沉淀
一代天骄
公众号:特立独行的猿。
博客:http://hasfun.cn
展开
-
借鉴Mysql,Hbase解决Redis丢数据问题
业务背景在订单业务领域会遇到订单超时的情形,要实现这样的功能,有2种解决方案:定时JOB捞取订单状态为支付超时的订单,去批量取消。这个方案是定时全量捞取,效率低,容易积压订单,如果没有超时订单,JOB还是会空跑浪费资源,不可取。Redis的List做延时堵塞队列的情况,从队列使用BLpop取超时订单取消,避免了空跑,和全量扫描。问题可是问题来了,Redis存在数据丢失的情况:比如Redis的数据没有及时刷盘的情况下,宕机了。比如Redis主从切换,主的数据还来得及同步到从就宕机了,这个时原创 2021-04-22 23:09:36 · 432 阅读 · 0 评论 -
telnet后立刻被拒绝Connetion closed by foreign host的原因
telnet后立刻被拒绝Connetion closed by foreign host的原因现象是22.188,telnet 22.122 可以通,如下22.152,telnet 22.122 报错,如下刚开始以为是22.122网络规则问题,被122拒绝了。后来通过外网,意思是不是服务器的配置问题,而是应用程序给拒绝了。然后我把22.152的应用关闭,再次telnet ,成功了,问题解决了。...原创 2021-03-16 17:05:53 · 29852 阅读 · 5 评论 -
Java进程被杀死排查过程
相关知识Linux oom-killer 是一种自我保护机制,当系统分配不出内存时(触发条件)会触发这个机制,由操作系统在己有进程中挑选一个占用内存较多,回收内存收益最大的进程kill掉来释放内存。系统为每个进程做评估(/proc//oom_score中数值最大的进程被kill掉。当发生oom的时候,可以记录在/var/log/messages中,如下:排查思路推测原因:进程被kill可能的原因有哪些?被人为的 kill -9 pid了,可能性不大,暂不讨论。操作系统内存不足,触发了oo原创 2020-11-03 23:31:42 · 1977 阅读 · 0 评论 -
Sql查询为什么要小表驱动大表
分析mysql的join实现原理是,以驱动表的数据为基础,“嵌套循环”去被驱动表匹配记录,select * from a join b on a.bid =b.id假设 a表10000数据,b表20数据这里有2个过程,b 表数据最少,查询引擎优化选择b为驱动表,循环b表的20条数据,去a表的10000数据去匹配,这个匹配的过程是B+树的查找过程,比循环取数要快的多。小表驱动的方式for 20条数据 匹配10000数据(根据on a.bid=b.id的连接条件,进行B+树原创 2020-10-28 11:31:22 · 2804 阅读 · 5 评论 -
habase集群访问慢,hbase shell查询快的原因
问题现象今天早上,我还在上班路上,测试老大在群里面喊,xx应用仿真环境访问不了,并且截图了log日志,我看了一下是dubbo服务访问超时,第一反应是dubbo服务挂了,找运维重启,重启后无果,然后等我去了公司,看了详细日志,是dubbo接口响应时长达到6s,明明是测试通过的接口,接口性能不可能这样慢, 分析了下这个接口功能,是直连hbase查询,还是rowkey的get查询,应该是几十毫秒内响应。遇到此类,本来好好的,现在不行的问题,一般都是一脸问号,没办法,只能撸起袖子找原因了。第一步:hbase数原创 2020-10-02 21:02:38 · 1050 阅读 · 0 评论 -
JAVA锁优化
Synchronizd 锁升级过程最近在整理自己的技术体系,关于并发编程,入门级知识重量级锁Synchronized,接下来试着解释这块知识。为什么说Synchronized是重量级锁jdk1.6之前,还没有引入“偏向锁”和”轻量级锁“,synchronized是依赖monitorenter指令和monitorexit指令实现的,而这个jvm指令集是依赖操作系统内核来完成的,就会涉及到用户态与内核态的数据传递,是比较耗性能的,所以,我们前辈称之为重量级锁。锁存放在哪里对象的内存布局如下[外链图片原创 2020-09-28 22:43:41 · 157 阅读 · 0 评论 -
Linux磁盘不足排查过程
今天,群里面有人@我服务挂了,群里都是公司那些老资格的大佬,心里一揪,还好是开发环境。我故作镇定的说,我看看,我打开Linux服务器,shell里面敲了服务状态命令,的确是挂了。于是我先重启,报错提示no space left on device。看这意思是没有空间了,不知道是内存没有空间了还是磁盘没有空间了,英语不好,于是只能轮流试一下[root@storm bin] free -m total used free shared buffe原创 2020-09-25 16:23:37 · 490 阅读 · 0 评论 -
缓存穿透解决方案:布隆过滤器
BitSet基础我们会遇到这样的需求,在海量数据中找出某个数据,我们想要的就是BitSet,BitSet本质是一个bit数组,使用1表示存在,0表示不存在。简单使用示例: BitSet bitSet = new BitSet(10);# 数组大小10 bitSet.set(1); # 索引1,记1 bitSet.set(2); # 索引2,记1 System.out.println(bitSet.get(1212));# 索引1212,没有数据,所以为0原创 2020-09-22 23:52:44 · 772 阅读 · 0 评论 -
jdk8自带时间操作利器
1、获取当前时间Instant instant = Instant.now(); //获取当前时间戳LocalDate localDate = LocalDate.now(); //获取当前日期LocalTime localTime = LocalTime.now(); //获取当前时刻LocalDateTime localDateTime = LocalDateTime.now(); //获取当前具体时间ZonedDateTime zonedDateTime = ZonedDate原创 2020-09-17 18:11:09 · 161 阅读 · 0 评论 -
JVM堆内存优化技术:指针压缩
JVM堆内存优化技术:指针压缩想要将知识转化为能力,第一步进行知识拆解,第二步,进行验证应用.前置知识oop是什么oop, 原意object origin pointer, 原始对象指针.对应虚拟机中的kclass地址,可以理解为对象在堆内存中的地址指针.寻址空间32位cpu架构,最大寻址内存为4g(2的32次方),64位cpu架构,寻址内存为TB级别(2的64次方)对象的内存布局对象在堆内存中 = 对象头+实例数据+对齐补充.对象头= markword + kclass地原创 2020-08-29 21:16:23 · 801 阅读 · 0 评论 -
责任链和命令模式在订单系统的实战记录
责任链和命令模式在订单系统的实战记录写在前面“纸上得来终觉浅,绝知此事要躬行”.读完23种设计模式后,感觉肚子还是空空的,不知道无从下手,今天翻了一下之前的博客,曾经记录过关于Apache Commons Chain的使用,它其实基于责任链,命令模式来写的,它很适合做流程化的逻辑代码,比如订单的下单,支付流程以及退款流程,让代码写的很nice,下面把我应用在订单系统的实战记录下,看下对其他人有没有帮助.概念Command接口: 1. 命令模式,实现它来执行责任链中某个节点的业务.原创 2020-07-29 16:25:03 · 945 阅读 · 1 评论 -
费曼学习法-聊聊设计模式
什么是设计模式?设计模式就是前人总结的代码设计的模型,就像武侠里面的武功的招式,套路。为什么需要设计模式啊?我平时代码敲的也没有问题啊,功能也完成了,线上跑的很健康1、统一编程风格实现功能,这属于硬编码,没有什么技巧,形成不了模式,只能说是个copyer,复制人。大部分代码都是cv的。不能称得上工程师,你敲的代码不能成为工程级别的项目。可能你写的代码只能你自己看得懂,如果你的命名不规范的化,就会形成自己的一套代码风格。2、易维护,行内统一语言如果你使用设计模式,大家的代码风格统一了,大家都有了共原创 2020-06-06 22:44:41 · 278 阅读 · 0 评论 -
图解JVM系列总纲
JVM运行期内存分配原创 2018-06-28 21:52:01 · 208 阅读 · 0 评论 -
图解:垃圾回收的那些算法
标记-清除复制标记-压缩原创 2018-06-28 22:41:35 · 354 阅读 · 0 评论 -
图解:JVM虚拟机栈与组成部分
程序计数器虚拟机栈虚拟机栈与线程相关。启动一个线程,程序调用函数,栈帧被压入栈中,函数调用结束,相应的是栈帧的出栈。栈帧由局部变量表,操作数栈,帧数据区组成。局部变量表:存放的是函数的入参,以及局部变量。操作数栈:存放调用过程中的计算结果的临时存放区域。帧数据区:存放的是异常处理表和函数的返回,访问常量池的指针。本地方法栈堆方法区:常量池直接内存...原创 2018-06-28 21:50:20 · 1957 阅读 · 0 评论 -
JAVA工作流的优雅实现方式
今天查找线上问题,看到一个让我脑洞大开的工作流实现方式。以前用过责任链模式,也用过模板模式实现类工作流的方式,但是对比这个工具,逊色不少,不卖关子了,就是Apache Commons Chain,它是Command模式与责任链模式的综合体。1Apache Commons Chain 中的角色有:chain、context、command。2在我们订单系统有这样的业务,就是退票的时候,会根据核损后的...原创 2018-07-01 17:41:12 · 32122 阅读 · 6 评论 -
互联网系统架构的思考
16年,我成功的进入了一家上市的互联网公司,来了这里半年多了,通过对系统的慢慢了解,想总结一些东西,以供后续改进与提升。 一、系统面临的问题 降级开关与灾备方案做的不足 优质人才缺乏,导致上线问题多 灰度环境无人维护,开发分支,版本控制 没有 统一规范 二、大型系统应该有的功能特点 ( 一)服务治理 大型项目都会...原创 2018-06-01 10:46:26 · 829 阅读 · 0 评论 -
一篇文章洞悉java动态代理
最近在读特立独行的猫的小说(你以为的极限只是别人的起点),如果你对她有所了解,就知道她写的这本也是一本很浓的鸡汤的书籍,虽然我们听过很多道理却依旧过不好这一生,我觉得偶尔读读鸡汤,给自己打点鸡血还是蛮不错的体验。今天读了一篇文章,推荐一下,论写作对技术的重要性mp.weixin.qq.com/s/-bXP2jAcz8M1c9-nElOsJA一、什么是动态代理动态代理分为jdk动态代理与cg...原创 2018-06-04 13:26:01 · 294 阅读 · 0 评论