自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(74)
  • 收藏
  • 关注

原创 分布式锁机制

redis主从复制的架构,即使有哨兵模式,如果a线程向redis主结点获取锁,拿到后,主结点会向从节点同步数据,但是主节点不知名原因宕机了,导致从节点没有锁数据,我们哨兵模式会从多个从节点中选举一个作为主,好,b线程来了,他居然拿到锁了。三、zookeeper的能做到分布式锁,本来是用于服务发现和注册中心,类似redis一样,利用注册信息不能重复的特点,也可以做到分布式锁,性能没有redis好,业务写操作都要在主结点上执行,然后同步到从结点,主从架构,所以用的少。就悲观锁,forupdate行锁。...

2022-07-27 00:45:56 198 1

原创 接口幂等性

发生原因交通卡开卡,充值接口,有个测试同学他突然发觉我们开卡,充值接口因为其实开卡成功,充值钱到交通卡芯片里面是在倒数第二次apud指令就完成了,然后他就就可以无限开卡,然后退款(他还没出钱),他可以明明充值成功,但是还是劫持指令,让最好一次收到结果是充值失败,他用这个交易序号连续充值,让每次都失败。解决办法将每次充值的交易序号保存下来,在每次进行充值时候都做合法性交易,这个交易我已经有了,你不能再使用了,直接报错,没有就保存到表里面。幂等性是指同一个操作,执行多次,后台的业务处理结果都是一样的。...

2022-07-25 23:51:03 293

原创 dobbo,Spring cloud,微服务(一)

一、springcloud其实是一系列成熟框架的集合,之前单体架构后期维护成本高,开发难度大,所以有了微服务的出现,然后springcloud是家族的大成者,他没有重复造轮子,就是把市面上的成熟框架组合起来使用。zookeeper是主从架构的,如果主节点挂了,会从从节点选举一个作为主节点,但是这段时间服务注册功能就不能用的,所以能保证数据一致性,但是可用性稍微差点,所以zookeepr是维护CP原则。1、微服务之间都是无状态的,你也可以有状态,但是处理太复杂了。四、微服务之间的原则。...

2022-07-25 22:39:22 386

原创 jvm性能分析和调优(长期更新)

Jmap-heappid进程可以查看内存快照,里面甚至可以看到类,bean容器里面的情况,第一次玩好神奇。3、jstack分析线程使用cpu情况,还可以分析线程是否阻塞,死锁之类的。就是可以看到线程的cpu使用情况,执行哪个类的哪个方法当时的cpu使用情况。netstat-na查看数据库连接池的连接数是不是用完了。4、设置jvm的对象大小,如果超过就从新生代到老年代。2、jmap查看进程的内存使用情况。1、查看连接使用情况。...

2022-07-25 21:56:08 466

原创 线程池,面试

首先来了5个任务,都是核心线程数在处理,第6个任务来了之后就去队列排队,,第16个任务来了之后就会创建临时线程,第21个任务来了之后就会触发handler拒绝策略。最大线程数当核心线程数到达上线后还有任务过来,那就继续创建临时线程,总共加起来的最大数。handler拒绝策略,当线程数量和队列都满之后,有新的任务过来的策略。可缓存线程池线程数量超过处理就回收线程,不超过就创建线程。比如有5个核心线程数,10个最大线程数,阻塞队列长度=10。核心线程数线程池的常驻线程数量。...

2022-07-24 21:01:57 339

原创 spring bean的生命周期

这一步的目的是为了获得spring容器的服务使用。比如beanNameAware,获取bean名称,beanFactoryAware,获取bean工厂,可能用于调用其它bean,还有contextAware,用户上下文,这个用的很多,代码中如何有一些参数要传递很多层,可以用这个放入上下文内存中,后面取用。spring的ioc容器就是帮助我们管理bean的。2、进行属性赋值和其它bean的引用,set方法。6、有后置处理器就将bean传递给后置处理器。4、有前置处理器就将bean传递给前置处理器。...

2022-07-24 12:10:51 65

原创 设计模式,我会的

重点是链,像用户管理,还有我们交通卡的核心之一,卡片的生命周期管理,就是责任链模式,卡片有一系列的生命周期,比如从创建,开卡成功,使用,迁移,恢复,销卡等,这些状态都是在链子上的,不同的状态在不同的流程去管理这个链子,哪一步有问题就断了,比如卡片状态你不能从创建就变成销卡之类的。2、策略模式交通卡有大量请求第三方sp伙伴,然后不同的sp处理流程不同,因为和大量的第三方sp伙伴谈的流程流程结果都不同,所以我们在接口请求进来,会根据issuerId有不同出处理,不同策略,不同的流程分配。.........

2022-07-23 20:17:23 133

原创 类的加载过程

类变量是在方法区中,零值就是比如int类型给一个默认=0,引用类型给个默认=null,不会给final啦,对象之类的分配内存,因为final在编译期间就分配好了,对象的话是在堆上在加载时候就分配好了。4、解析将对象的符号引用变为直接引用,符号引用就是一种象征,没有真是的指向,变为直接引用后就有真是的引用和地址指向。2、验证文件文件数据的合法性。就是检查是否jvm有危害,检查文件格式验证,元数据验证。1、加载,通过类加载器将。class文件转化成二进制流文件写入内存中,创建对象的过程。...

2022-07-23 19:56:15 48

原创 mysql基础一点

第二点因为树高度一致的情况下,B+tree树进行关键字段查询时候路径是一样,查询时间就是一样的,这种数据结构就很稳定,不像Btree树一样还要考虑前序后序这些东西,查询速度可能不一样的。(说一个,where和having区别where是在查询结果之前就过滤了,having是查询结果之后才过滤,肯定where的性能好一些,平时我们也是用这个)1、先简单说2者BTree树结构是查询树,所有结点都存储数据,key-data,B+tree树是最下层叶子结点才存储数据,上面都存储索引列,......

2022-07-23 18:52:49 176

原创 sql问题导致CPU使用率100%

2、通过查询sql模板,发现那段有大调用量的就是有个联合sql,select*fromajoinbona.issuerId=b.issuerId,2个表都是小表,各自1000条记录,然后使用这个表的接口平时调用量也很少,高峰也就300条,但是那天因为64万条消息给用户,发生cpu问题前2分钟调用量超过100倍,有30万接口进来,2分钟内这么多,并发量很高了。4、idin子查询,子查询返回是false,true是否存在这种,你使用idexsit子查询即可,否则也是索引失效。......

2022-07-20 23:40:08 3242

原创 redis导致fullGc

是优化代码时候一次性查询了所有数据放入redis中,你数据要使用的,所以项目中反序列化出来Map一次性4M,高峰时候大量并发请求接口进来优先从redis中拿到数据反序列生成map临时对象,4M的内存对象直接从新生代到了老年代,导致JVm内存使用过多,直接触发FullGC,而待回收的对象较大,耗时长,阻塞了就。那原因才真正清楚了。新生代在逃过15次GC之后,就会移到老年代,同样的对象,在老年代比在新生代占的内存多,新生代和老年代内存比例12。3、第二题晚高峰,cpu又跳变了,说明之前定位不是真正原因。....

2022-07-19 23:37:28 577

原创 redis的优势和缺点要注意的

1、缓存击穿redis的key过期后不是自动删除的,会等下次查询时候发现没有了,再去后台DB查询了写入redis,那如果刚好到redis过期时间了,大量并发请求过来查询,你都会到后台DB查询,数据库可能扛不住。用户第一次请求时候是到数据库磁盘查询数据的,磁盘查询很慢,如果查询后将数据放入redis中,下次查询直接redis拿到数据,redis是存在内存中,内存使用很快,这样就能大幅度提升响应速度,这就是性能的提升。2、key过期时间要分散,否则容易造成缓存击穿,缓存雪崩。有好有坏,使用要注意的地方。....

2022-07-19 23:05:32 1076

原创 DMQ消息中间件(三)

第一个是leader和所有follower都同步成功了,第二个是至少要有2个follower,然后至少一个follower保持心跳连接类似,第三个是ack确认=all,意思就是要等生产者发送的消息在所有结点都写完之后才确认返回。第四是如果ack没有确认返回,那就无限次重连,就是配置重连次数,特别大就可以。1、RabbitMq,生产者丢失数据,开启生产者的confirm确认模式,还有mq持久化到磁盘,双重下。消费者丢失数据讲ACK确认机制配置关掉,改成手动模式。......

2022-07-17 00:15:47 436

原创 DMQ消息中间件(二)

一种是普通集群模式,第二种是镜像集群模式,第二种才是高可用模式,到管理台上配置策略,可用配置所有结点/部分结点都同步镜像,然后有新queue出现时候就会自动同步的,生产者发的和消费者消费的都一样可以镜像。kafka的读写都是通过topic里面的partition中的leader来的,如果leader宕机了,没事,可用从其它副本follower中选举一个作为leader,这就是他的高可用机制。2、kafka是分布式mq,一段数据在多个结点上部署,少数机器宕机了,不会影响数据的使用。...

2022-07-16 23:55:01 448

原创 java 锁

如果是写>读的,要用悲观锁,否则所有读的操作都会被阻塞,等写的操作执行完成了才有机会去读,所有读的程序都要阻塞挂在外面。比如线程1,2都需要a,b锁,线程1获得了a锁,线程2获得了b锁,都无法让对象继续获取锁。乐观锁度数据操作是乐观的态度,认为不会修改数据,所以性能稍微好点,他不加锁的,但是在写操作时候会先读,看是否被修改过。悲观锁对数据操作是悲观的态度,认为别的线程会修改数据,所以每次操作都加锁,操作完成才释放锁。Synchronized,是java关键字,用来锁代码块和方法,本质是悲观锁。...

2022-07-16 19:59:05 164

原创 spring的IOC和AOP

原来我们要使用某个对象是通过new出来是使用和管理,但是Spring框架给我们搞定了,被调用者,或者说所有类都通过spring去创建,由他的bean容器给去注入,管理,我们使用时候引入就可以使用。比如订单是需要,然后订单有创建,修改,删除等步骤,我们需要日志专门给订单记录下来,就在新增,update订单记录之后,要更新的订单数据记录到日志,然后订单日志就可以专门做一个平台,当现网用户发现有问题找过来,你可以快速订单出问题是什么,他状态经过哪些变化,哪些数据有变化。1、IOC控制反转,依赖注入。......

2022-07-16 18:50:15 173

原创 DMQ消息中间件(一)

为了提高并发能力,一个topic以多个partition的方式分布到多个broker结点上,生产者producer发布消息后,他要发布到哪个partition,他是先到zookeeper上找到partition的主leader的位置,只将消息发布到主leader,从follower是同步主leader中的信息,kafka一般是pull的方式,等消费者根据他自己的速率来pull消息。单机吞吐量TPS百万级/秒,也是分布式架构,高并发,高可用,一段数据多个结点存储,少量机器宕机,不影响数据的使用。......

2022-07-16 12:17:46 2063

原创 sql语法优化10项

经常使用mysql,然后就有一些sql的优化,可以帮忙性能的提升1、条件where,group by ,order by后面尽量使用索引,否则是全表扫描。2、模糊查询like不能都用%包围,最好就在后面使用,否则会让索引失效。错误:where id like %xxx%;正确:where id like xxx%;3、使用in范围查询的地方,尽量改成between。错误:where id in (2,3);正确:where id between 2 and 3;4、in使用子

2022-05-24 23:12:34 100

原创 mysql和高斯DB的区别

最近项目切了高斯Db,从mysql,所以从2者区别讲讲1、高斯DB类似Oracle2、从数据类型看2.1、高斯DB没有像mysql一样的text类型的文本格式,但是如果字符超过8000,他自己也有大文本类型,clob类型,可以存储文本日志等。2.2、clob类型不能用于排序,所以就不能放在group by, order by 后面去使用,同样,你也不能用distingct去重字段后面使用。高斯DB和Oracle都不建议使用clob类型的字段排序的,太耗费性能内存。2.3、高斯DB不支持i

2022-05-24 22:57:01 15432 1

原创 刷算法2:拼接URL

/** * 给定一个url前缀和url后缀,通过,分割 需要将其连接为一个完整的url * 如果前缀结尾和后缀开头都没有/,需要自动补上/连接符 * 如果前缀结尾和后缀开头都为/,需要自动去重 * 约束:不用考虑前后缀URL不合法情况 */class test2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String input.

2022-03-21 23:54:43 342

转载 linux常用命令

1.查看目录结构命令ls(list)功能:列出目录内容格式:ls[参数][文件或目录]-a或--all所有文件和目录。注意隐藏文件、特殊目录、以“.”开头的和以“..”开头的-l使用详细格式列表-t用文件和目录的更改时间排序-r反向排序--help在线帮助常用:ls-l列出当前目录下的文件信息(此命令很常用,简化的格式为 ll)ls-al列出当前目录下的文件信息(包括隐藏文件...

2021-05-05 15:30:29 99

原创 Markdown使用技巧

工作后就好久没有写博客了,然后发现好多人都在用markdown写了,所以这边也开始慢慢用起来。基础的语法标题(#号后要有空格, 坑那)加粗和斜体2个*或者2个-是加粗,一个是斜体,3个是加粗+斜体分隔符连续3个*,3个+,3个减都是分隔符图片(有地址的图片)用法:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6zX4cBwu-1591579534456)(图片地址 “可选标题”)]图片alt就是显示在图片下面的文字,相当于对图片内容的解释...

2021-04-29 21:12:46 264

原创 JVM

JVM内存模型 线程共享:堆、方法区 线程隔离:栈、本地方法栈、程序计数器 栈:用来放方法帧、局部变量等 堆:用来放对象 方法区:用放常量池、静态变量、类的字节码文件... 本地方法栈:用来放native方法 程序计数器:用来保存当前线程执行的位置 ...

2019-06-23 23:58:45 142

原创 秒杀,高并发,分布式事务

一、秒杀的系统的逻辑架构 通常来说,秒杀系统是独立于其他业务系统之外的 二、秒杀倒计时如何实现 三、高并发下如何保证商品数据的一致性(性能、数据安全) 问题:假设有一个商品库存10000件,同时又100000在抢,最后的结果一定是库存变成0,同时生成10000个订单 ...

2019-06-23 23:52:35 1664

原创 单点登录

重定向和转发的区别: 转发: 重定向: 二级域名的登录过程: 二级域名认证的过程: 一级域名的登录及认证过程: 一级域名...

2019-06-23 22:35:26 137

原创 订单的分库分表

为什么要分库分表: 分库:让当前库中,不要有太多表的数量 分表:让当前表中,不要有太多的数据 订单分库分表的方案: 按钱分、按地域、按下单时间、按仓库、按收货人地址、按vip级别分 //按地域 通过用户id查询用户下的所有订单 uid -> phone -...

2019-06-23 22:33:14 817

原创 反射

一、反射 什么是反射? 反射是一种可以在编译时获得解析类的能力。简单来说,通过反射可以直接创建对象、获得对象的属性、获得对象的方法..... 反射的API: 1、获得Class对象 注意:Class对象(反射对象)是和类一一对应的,一个类一定只有一个Class对象,不管通过什么...

2019-06-23 22:32:20 4774 3

原创 SpringCloud入门(三)

八、路由网关(Zuul、Gateway) 什么是路由网关? 路由网关通常是整个微服务架构体系的入口组件。 如何搭建一个路由网关的工程 1、添加依赖 2、配置application.yml...

2019-06-23 10:41:26 179

原创 SpringCloud(入门二)

五、服务的消费 -Ribbon + RestTemplate ribbon调用服务的步骤: 1、添加依赖: 2、启动类添加注解,开启Eureka客户端: 3、配置application.yml 4、注册RestTemplate模板对象 ...

2019-06-23 10:40:11 138

原创 SpringCloud(入门一)

一、什么是SpringCloud? SpringCloud是Spring团队提供的一套微服务架构体系的开发解决方案。内部继承了20多种为微服务开发所需要的服务和组件。直接开箱即用即可,极大的方便了微服务架构的开发。 SpringCloud是基于SpringBoot二、什么是微服务? 微服务的特点: 1、按照系统的业务...

2019-06-23 10:38:39 149

原创 第一次启动IDEA

一、Idea的第一次启动 二、Idea配置Tomcat 配置tomcat: 将tomcat的jar包依赖进hello_idea工程中: 三、Idea的相关设置 主题的选择:...

2019-06-13 00:35:17 8007

原创 MySQL优化

一、Linux中如何安装MySQL -YUM 1、检查Linux中是否已经安装了MySQL rpm -qa | grep mysql 2、卸载原来的mysql相关的服务 rpm -e --nodepsxxxxxxx 3、确定mysql的yum源的版本 yumlist |grepmysql...

2019-06-13 00:33:02 155

原创 RabbitMQ(二)进阶

一、RabbitMQ的中的常用方法 1)exchangeDeclare :声明一个交换机 参数列表: exchange -交换机的名称 type -交换机的类型 (fanout | direct | topic | header) ...

2019-06-11 17:18:59 213

原创 面向对象

面向过程:面向过程的思想主要是以结果为导向,注重点在于结果的实现,不太关心结果实现的方式。-黑猫白猫能抓到老鼠就是好猫。 面向对象:面向对象的思想主要是以对象个体为导向,注重点在于每个对象个体的设计与实现。-授人以鱼不如授人以渔。 我开车 我走路 我抢银行 ..... 面向对象的三大基本特征 封装:将该暴露的暴露,该隐藏的...

2019-06-10 22:28:03 91

原创 集合

集合的分类:Collection、Map 集合的基本继承结构: Collection -List -Set - Queue Map - HashMap - TreeMap - Conc...

2019-06-10 22:27:22 118

原创 SSO单点登录,Cookie,自定义注解,AOP

一、Cookie cookie和session的区别 cookie是一种浏览器保存数据的技术,有大小限制,通常最大限度是4KB,因此cookie不适合用来存储大量的数据。 常用方法: cookie.setMaxAge(); -设置cookie的过期时间,如果不设置的话,cookie默认过期时间是浏览器关闭的时候 ...

2019-06-10 22:19:58 383

原创 项目的实际开发流程

一、项目的角色划分 1个项目经理/产品经理 2~3人前端(H5) 1~2 android 1~2 IOS 2~4 后台 项目组共用 - 美工(切图、设计、页面调整...) 测试组 项目:甲方有需求,乙方有技术,乙方根据甲方的要求实现一个系统 中间人:项目经理 -协调甲方的需求和乙方的技术...

2019-06-10 22:17:37 783

原创 支付宝支付

一、支付宝的官方网站 https://open.alipay.com/platform/home.htm 网站支付的相关文档: https://docs.open.alipay.com/270二、支付宝的接入流程 1)在开放平台上创建应用,应用创建好之后,支付宝平台会返回给商户一个唯一标识 -APPID...

2019-06-10 22:16:28 213

原创 RabbitMQ

一、什么是RabbitMQ? rabbitmq是一款消息中间件,本身是一个实现了MQ理念的服务组件,主要是用来在分布式架构体系中,进行消息传递的。 常见的MQ产品:RabbitMQ、RocketMQ、Kafka二、RabbitMQ的安装 1)上传Rabbitmq的安装包以及erlang的安装包 2)安装e...

2019-06-04 08:32:19 3722

原创 redis入门

一、什么是Redis? redis是一款非关系型数据库(NoSql,notonlysql -不仅仅是sql),数据存放结构是按照key-value类型存放的,而且数据是保存在内存中的,相对于传统的关系型数据库(数据放在硬盘上),数据的读写速度非常的快(10W/s),另外相对于其他的 数据库,Redis也提供了持久化的功能,但是相对于传统的关系型数据库,数据安全性没有那么可靠,...

2019-06-03 22:05:37 117

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除