自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 20220413netty

dubbo、rocketmq底层都用到了netty。用到了基于事件驱动的设计模式reactor。基于Selector实现:EventLoop的实现充当Reactor模式中的分发(Dispatcher)的角色。ChannelPipelineChannelPipeline其实是担任着Reactor模式中的请求处理器这个角色BufferByteBuf读写指针 零拷贝 引用计数与池化技术Netty其实本质上就是Reactor模式的实现Selector作为多路复用器,EventL

2022-04-14 10:47:34 73

原创 20220412设计模式

new的状态threadstart状态runnable:遇到synchronized(blocked状态)waiting:调用wait(等待notify或者notifyall)、thread.join、locksupport.park(等待unpark调用)带时间的waiting:sleep、wait、join、parknanos、parkuntilterminated:结束创建型设计模式包括:单例模式、工厂模式、建造者模式、原型模式。它主要解决对象的创建问题,封装复杂的创建过程..

2022-04-13 09:22:29 109

原创 20220408devops

devops(Development和Operations)CI(Continuous integration)持续集成CD(Continuous Delivery)持续交付CD(Continuous Deployment)持续部署公司之前一直使用的是zabbix+grafana的监控方式,随着我们的微服务推行容器化后,k8s应用的监控需求增加,Prometheus会更适合容器的监控。另外,Prometheus用的就是自研的 TSDB,Zabbix 则用的是 MySQL 或 Post..

2022-04-12 16:21:39 88

原创 20220325VMware vSphere0406

VMware vSphere不是特定的产品或软件。VMware vSphere是整个VMware套件的商业名称。VMware vSphere堆栈包括虚拟化,管理和界面层。VMware vSphere的两个核心组件是ESXi服务器和vCenter Server。ESXi是hypervsior,您可以在其中创建和运行虚拟机和虚拟设备。vCenter Server是用于管理网络中连接的多个ESXi主机和池主机资源的服务。我希望这个简单的信息能够从“什么是VMware vSphere”这个问题中清除您的想法。与其他

2022-04-08 08:22:37 143

原创 20220322-0323-0324

学习阿里的开发手册:平时也会犯的问题:NPE,即NullPointerException

2022-03-25 09:00:43 65

原创 20220310设计模式

1、软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification),这就是开闭原则的经典定义。2、里氏替换原则主要阐述了有关继承的一些原则,也就是什么时候应该使用继承,什么时候不应该使用继承,以及其中蕴含的原理。里氏替换原是继承复用的基础,它反映了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范。3、依赖倒置原则的原始定义为:高层模块不应该依赖低层模..

2022-03-11 13:06:38 60

原创 20220309redis

nio、aio、netty:5种io模型:1、阻塞io模型。系统调用到数据包达到且被复制到用户缓冲区或者发生错误时才返回,期间一直等待(阻塞)。2、非阻塞io模型。从应用层到内核时,缓冲区没有数据直接返回错误,反复轮询这个状态。看数据是否到来。3、io复用模型。linux提高select\poll,进程通过将一个或者多个fd(file descriptor)传递给select 或poll系统调用,阻塞select操作上,侦测多个fd是否就绪状态。linux还提供了epoll系统调用,基于事件

2022-03-10 08:17:42 83

原创 20220308redis

hadoop(hbase\hdfs\mapreduce)

2022-03-09 08:08:42 57

原创 20220304-0307es

elasticsearchlucene:跳表(SkipList):增加了向前指针的链表叫做指针。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质是一种可以进行二分查找的有序链表。跳表在原有的有序链表上增加了多级索引,通过索引来实现快速查询。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树).建立索引:document\field\analyzer\indexwriter\directory搜索文档

2022-03-07 14:55:27 2724

原创 20220303MQ

undo log 和 redo loges redis查看垃圾回收算法使用java -XX:+PrintCommandLineFlags -versionjava -XX:+PrintGCDetails -versionjava8 默认的垃圾收集器是Parallel Scavenge + Parallel Old1999年随JDK1.3.1一 起来的是串行方式的Serial GC,它是第一款GC。ParNew垃圾收集器是Serial收集器的多线程版本 2002年2月26日...

2022-03-04 08:13:04 59

原创 20220302MQ

垃圾收集器cms全称:Concurrent Mark Sweepundo log 和 redo logMQ:产生的原因:1、解耦。异于rpc直接调用,中间有个缓冲。2、削峰。请求的并发量存在队列,系统按照自己的流量去取队列的数据。3、数据分发(异步)。对于一个数据,多个系统根据自己的需要实际去取。同时暴露的问题:1、系统可用性降低。MQ宕机,对业务影响。2、增加复杂度。顺序问题、重复问题、丢失问题。3、数据一致性。主流:ActiveMQ(主从)\RabbitMQ(主从

2022-03-03 08:04:58 66

原创 20220301多线程锁

ReentrantLock(可中断锁)和synchronized(不可中断)都是可重入锁。ReentrantLock提供了两个构造器,默认构造器初始化为NonfairSync对象,即非公平锁,而带参数的构造器可以指定使用公平锁和非公平锁。由lock()和unlock的源码可以看到,它们只是分别调用了sync对象的lock()和release(1)方法。CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个

2022-03-02 08:11:31 64

原创 20220228后置处理器

设计原则:开放扩展,封闭修改。BeanFactoryPostProcessor : 可以插手beanFactory的生命周期BeanPostProcessor :可以插手bean的生命周期ImportSelector :借助@Import注解,可以动态实现将一个类是否交由spring管理,常用作开关操作AOP核心其实就是创建AnnotationAwareAspectJAutoProxyCreator类(后置处理器),该类最终实现的接口为BeanPostProcessor类,创建好后置处理器的对..

2022-03-01 08:13:24 54

原创 20220225-2多线程

多线程:synchronized是一种互斥锁,一次只允许一个线程被锁住。编译器生成ACC_SYNCHRONIZED关键字。修饰代码块时,依赖monitorenter和monitorexit,无论修饰方法还是代码块锁住的都是对象实例。内存中的对象分:对象头、实际数据和对齐填充。对象头中的markword记录锁的信息,每个对象都有对应的monitor对象,monitor中存储着当前持有锁的线程以及等待锁的线程队列。jdk之前是重量级锁,monitor会把进入线程的id进行存储,设置markword的

2022-02-28 09:13:24 71

原创 20220225

tradeoff(权衡),好叼的一个词!高可用:接入层(LVS、F5承载流量的入口)、反向代理层(nginx流量url分发、限流)、网关(负责流控、风控、协议转换)、站点层(应用层)、基础服务层、存储层(DB)。网关到db中间件(zk、es、redis、mq)。接入层(主备对外提供服务,用keepalived(主要通过发送icmp报文或者利用tcp端口连接扫描检测)检测心跳,master挂掉vip地址漂移至backup)。nginx暴露的端口用keepalived检测,挂掉剔除。微服务:网关

2022-02-25 16:37:08 811

原创 20220224

分布式事务和常见的分布式事务包括 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知。2pc 和 3pc都是数据库层面的强一致性事务,有数据不一致阻塞风险。tcc(Try - Confirm - Cancel):TCC可以跨数据库、跨不同的业务系统来实现事务。入侵业务比较严重。Try 指的是预留,即资源的预留和锁定,注意是预留。Confirm 指的是确认操作,这一步其实就是真正的执行了。Cancel 指的是撤销操作,可以理解为把预留阶段的动作撤销了。撤销和确认要注意幂等性问题。

2022-02-25 08:09:37 75

原创 20220223

分布式事务(分段事务) redis mysql数据库最终的目的就是一致性,原子性、隔离性和持久化都是为了保证一致性。为了解决脏读问题又不影响性能,mysql引入mvcc(为了读写不阻塞)(multi-version concurrency control)通过生成快照(读已提交语句级快照,可重复读事务级快照),读取的时候生成一个中间版本号,等其他事务提交了才会读取最新的版本数据。读取select * from table for update 需要间隙锁来解决幻读问题。串行隔离级别最高,只允许事务之

2022-02-23 08:21:43 67

原创 20220222

spring事务:事务:acid(原子性、一致性、隔离性、持久性)spring并不直接管理事务,提供了多种事务管理器,委托给jdbc、jpa、hibernate、jta(管理多个管理源)。事务基本属性:事务传播行为()、隔离规则、事务超时、是否只读、回滚规则。提供编程式事务(入到了业务代码里面)和声明式事务(基于AOP,不影响代码)。编程式事务:TransactionTemplate(TransactionTemplate和采用其他Spring模板,如JdbcTempalte和Hiber

2022-02-23 08:18:15 175

原创 20220221

expire :http1.0头字段,设置了时间,浏览器在时间内读取缓存,不再发起请求。cache-control:http1.1头字段,区分缓存机制的支持,有public、private、no-cache等。http:101切换请求协议;200请求成功;301永久重定向,会缓存;302临时重定向,不会缓存;400客户端请求语法错误;403服务器禁止访问,权限不够;404服务器无法根据客户端的请求找到资源;500服务端错误;https=http+ssl(secure sockets layer

2022-02-22 08:46:03 465

原创 20220218

分布式缓存的一些方案:缓存存在的理由:1、加速读写。单机redis qps轻松上万,mysql只有几千;2、降低后端负载。复杂结果、耗时结果缓存,减少cpu、io、线程资源。问题:1、数据不一致;2、代码维护成本高;3、运维成本;保证高可用(主从)、高并发(集群)策略:1、LRU\LFU\FIFO;空间有限,数据长期不变动,不存在数据不一致性业务,如录入不变更的信息。2、超时剔除;比如redis expire命令,适合能够容忍一定时间数据不一致的业务,比如文案。3、主动更新;一致性高,相当于业务

2022-02-21 08:34:53 65

原创 20220217

spring ioc(Inverse of Control)控制反转 和 di(dependency injection)ioc:创建对象交给spring,业务层只关系业务即可。Ioc 的常见容器是:ApplicationContext 和 BeanFactory。ioc注解:@Component 注解(把资源让 spring 来管理。相当于在 xml 中配置一个 bean。value:指定 bean 的 id。如果不指定 value 属性,默认 bean 的 id 是当前类的类名,首字母小写。@Co.

2022-02-18 08:04:24 236

原创 aspect(20220216)

今天计划复习垃圾回收继续说到MethodSignature(字面我觉得是方法签名的意思,用于ProceedingJoinPoint获取方法)。aop可以用于分布式锁的获得。1、redis的get和set。此方法使redisTemplate.boundValueOps(key).getAndSet(value)的方法,如果返回空,表示获取了分布式锁;如果返回不为空,表示分布式锁已经被其他程序占用2、zookeeper的node。顺带看看:newConcurrentMap,是由segment

2022-02-17 08:28:00 1110

原创 20220215(aspect)

今天打算买个自行车window--》preferences---》java ---》code style ---》formatter第一步:@Retention(RetentionPolicy.RUNTIME)@Target({ ElementType.METHOD })@Documentedpublic @interface Limit {第二步:第三步: @Limit(key = "limit2", permitsPerSecond = 0.1, timeout ...

2022-02-16 08:13:29 190

原创 20220214

限流的几种方法:1、计数器限流。比如数据库连接池大小、线程池大小、接口访问并发数。2、漏桶算法。水比作请求,漏桶比作系统处理的能力极限,控制水流出的速度(请求超过漏桶容量直接拒绝)。3、令牌桶算法。系统维护一个令牌桶token,请求被处理需要获得令牌,没有则拒绝。基于google的guava实现。@Slf4j --- org.projectlombok--lombok (简单的说,就是使用了 Java 非公开的 API,在 javac 编译代码时,通过强类型转换获取JavacAnnotat.

2022-02-15 07:45:00 109

原创 20220211

今天步行1W步的第三天,查漏补缺学习中Arthas:sysenv:可以查看运行环境;dashboard看运行面板;jvm:虚拟机情况;thread-n3-i1000最忙的三个线程1000ms内;sc-d*;redafine热替换;tt记录调用过程;profilerstart-d30-f1.txt;trace##‘#cost>200’-n3跟踪;watch监控;今天居然发现java数组赋值都不会:静态赋值:int[] nums= new int[]...

2022-02-12 07:55:26 42

空空如也

空空如也

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

TA关注的人

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