笔记
文章平均质量分 72
怎能止步于此
一个创业者,一个希望能够在人生中有不断尝试的人,不断对未来有梦想的人,猜测、谣言、苦难、挫折,一定会伴随着你。
展开
-
研发流程——准入体系设计
在进行变更之后,我们开发完成就会进入发布的环节,但我们的发布流程或者发布系统会对我们本身的代码做一个检查,通常我们要实现一个需求或者把问题修复的时候,我们会建立一次变更,然后进行一些研发的测试,但当我们代码写完了,测试也测完了的时候,我们的诉求肯定是想要发布,但是在发布时,我们就需要考虑当前的代码是否可能会对未来产生影响,这里不仅仅是功能层面,还会有很多功能层面没有考虑到的地方。它可能牵扯到更细节的地方,也可能牵扯一些我们没有注意的地方。原创 2022-09-30 00:21:23 · 779 阅读 · 1 评论 -
研发流程——变更流程管控
狭义:根据需求、问题修复而创建的研发、联调、上线并引起线上变化的过程。广义:对实际线上系统的任何变动、操作。原创 2022-09-27 23:41:46 · 1579 阅读 · 0 评论 -
架构质量工程——异常管控
异常通常都会有专门的日志库打印相关的异常,但是有很多同学也会习惯性的在代码中直接打印到控制台里,这种并不是一个好的行为。原创 2022-09-26 13:23:45 · 576 阅读 · 0 评论 -
声网服务端接入指南
鉴权原理客户端主动向服务的申请 Token客户端调用服务端接口,获取频道列表。如:语聊房列表、直播列表…服务端返回客户端 Token,然后携带 Token、用户Id、频道名等信息调用 SDK 加入频道。声网向 SD-RTN 根据客户端传来的 Token 校验合法性。成功加入频道,并返回客户端 UID。语聊房开发流程。用户创建语聊房时,客户端调用服务端接口,存储语聊房信息(如背景图、名称、chanlName…)当用户进入语聊房列表展示页时,客户端调用列表接口,返回 ChanlList。原创 2022-05-21 01:13:55 · 894 阅读 · 0 评论 -
「群组」和「聊天室」有什么区别?
什么是群组?群组是支持多人沟通的即时通讯系统,成员关系相对稳定。所有群成员可以收到群中的消息,可以在群中发送消息。群成员离线时可以收到推送消息。群组分为公开群和私有群,公开群可以被搜索到,非群成员可以加入;私有群不能搜索到,需要群主或群管理员添加非群成员进入。群组成员支持多种角色:群主、群管理员和普通成员。群组提供丰富的管理能力,如群组禁言、群公告和群文件等。什么是聊天室?聊天室是支持多人加入的类似 Twitch 的组织。聊天室中的成员没有固定关系,用户离线后,超过 5 分钟会自动退出聊天室。聊原创 2022-05-21 00:58:12 · 2333 阅读 · 0 评论 -
Mysql 循环插入测试数据 SQL
DROP PROCEDUREIF EXISTS test_data; DELIMITER $$CREATE PROCEDURE test_data() BEGIN -- 定义变量 DECLARE i INT UNSIGNED DEFAULT 1; -- 1是变量可以写10000 -- 循环次数 WHILE i <= 100 DO -- i是变量可以 <10000 insert into kt_circle(name,avata原创 2022-05-21 00:50:59 · 538 阅读 · 0 评论 -
Mysql调优大全梳理(涵盖90%需要调优的场景)
前言学习这个文章需要具备一定的理论基础,不妨先来看一下我这篇文章《一文道尽数据库底层原理,探讨Mysql调优之道》1.Join语句优化Join语句相关算法算法1:Nested-Loop Join(NLJ)这种算法称为“嵌套循环Join”,大致是这样玩的:TableJoin Typet1ranget2reft3Allfor each row in t1 matching range{ for each row in t2 matching refere原创 2022-02-20 18:39:12 · 7568 阅读 · 8 评论 -
大流量下系统重启失败总结
产生原因RDS bookdb.cosplayindex 表结构,因为表数据过大,导致RDS负载过高,应用层全部挂掉。操作流程第一次操作:重启所有web-book/web-function , 结果: 无法成功重启第二次操作:关闭SLB,重启web-book/web-function,再打开SLB. 结果: web-book成功,web-function重复失败. 查看日志, service-common 服务调用超时第三次操作:关闭SLB,重启 web-function , 重启 servi原创 2022-02-17 10:32:29 · 276 阅读 · 0 评论 -
Kafka命令合集
https://shirenchuang.blog.csdn.net/article/details/118215928?spm=1001.2014.3001.5502原创 2022-02-08 11:00:08 · 667 阅读 · 0 评论 -
分布式事务的四种解决方案
https://www.cnblogs.com/mayundalao/p/11798502.html原创 2022-02-08 10:38:28 · 350 阅读 · 0 评论 -
2022年学习安排
上半年(1月-6月)掌握Flutter高级特性学习Lua,掌握Openresty高级特性。掌握分布式事务Steata掌握Zookeeper掌握Dubbo原理,搞懂Rpc实现思路。下半年(7月-12月)复习Mysql锁,事务,调优。复习JVM,调优。使用Flutter+SpringBoot+Mysql,独立开发App(自己设计)掌握MoongoDB学习工作流引擎Activity7掌握ELK...原创 2022-01-27 12:32:47 · 3545 阅读 · 0 评论 -
Flutter2空安全,避免App空值崩溃问题
什么是空安全从Flutter2开始,Flutter在配置中默认启用空安全,通过空检查合并到类型系统中,可以在开发过程中捕获这些错误,防止生产环境导致的崩溃问题。目前在Kotlin、Swift、Rust等对空安全都有了对自己的支持,Dart从2.12版本开始支持空安全,通过空安全开发人员可以有效避免null错误崩溃,空安全性可以说是Dart语言的重要补充,它通过区分类型和非可空类型进一步增强类型系统。空安全好处可以将原本运行时空值变为编辑时的分析错误。增强程序健壮性,有效避免由Null导致的崩溃。原创 2022-01-24 16:50:18 · 476 阅读 · 2 评论 -
Mac M1芯片Xcode搭建RN项目踩坑小记
pod兼容性问题m1芯片的同学搭建RN项目的时候一定要注意,ios 安装pod千万不要用pod install而用arch -x86_64 pod install,不然你会遇到各种坑。Dependency Analysis Error用Xcode构建过程中报错:解决办法:找到对应的Project,进行以下设置:然后再次重新Build.xxx file not found解决办法:确保该引用模块已经安装,查找node_modules。在Header Search Paths里设原创 2022-01-20 14:30:33 · 2490 阅读 · 1 评论 -
K8S部署Skywalking
步骤下载aop镜像https://hub.docker.com/r/apache/skywalking-oap-server下载ui镜像https://hub.docker.com/r/apache/skywalking-uiOAP部署service:apiVersion: v1kind: Servicemetadata: name: oap namespace: skywalking-test labels: service: oapspec: ports:原创 2022-01-17 12:20:56 · 1996 阅读 · 1 评论 -
docker安装ElasticSearch7
Docker 部署ES7.6.21.下载镜像docker pull elasticsearch:7.6.22.创建持久化目录mkdir -p /home/weichenglong/workspace/elasticsearchcd /home/weichenglong/workspace/elasticsearchmkdir datamkdir logs3.运行容器节点探测类型(discovery.type)设置为 single-node 表示不开启集群模式。docker run -原创 2022-01-17 12:04:42 · 2904 阅读 · 0 评论 -
HttpRequestMethodNotSupportedException: Request method ‘GET‘ not supported
Controller里加的是@PostMapping。发生了一个很奇怪的现象。明明发送的是POST请求,错误日志里却打印了不支持GET请求方式。解决方法:先定位Nginx,是不是重定向的问题,配置的是https,却用的是http调用的。就极有可能报这种错误。...原创 2022-01-15 15:57:25 · 1327 阅读 · 0 评论 -
【死磕DDD】聊聊领域建模方法论
领域建模方法论企业架构法CBM 组件化业务模型面向服务架构设计SOA面向服务架构模型用例分析法四色建模法Event Storming事件风暴企业架构法CBM 组件化业务模型图中纵着的一个个其实就是子域和界限上下文,横着的可能是一些策略层、控制层和执行层,里面又有一项一项的内容,这些内容在我们领域设计里面可以对应到一个个聚合,那就有了很多聚合也有了很多子系统。如果说聚合太细了,我们不可能写的那么细,那你也许就是一个个的微服务、一个个模块。面向服务架构设计SOA面向服务架构模型SOA是一切以总原创 2022-01-02 16:53:02 · 4026 阅读 · 0 评论 -
手把手搭建Skywalking,玩转分布式链路追踪
什么是SkywalkingSkywalking是一个适用于分布式系统的性能监控工具文档地址:https://skyapm.github.io/document-cn-translation-of-skywalking/功能:服务,服务实例,端点指标分析根本原因分析服务拓扑图分析服务,服务实例和端点依赖性分析检测到慢速服务和端点性能优化分布式跟踪和上下文传播数据库访问指标告警安装单机版Skywalking下载前往https://archive.apache.org/di原创 2021-11-24 23:31:02 · 2594 阅读 · 2 评论 -
彻底搞懂Feign——EnableFeignClient底层机制探究
EnableFeignClient源码探究话不多说直接开干!点进@EnableFeignClient这个注解里:里面较为核心的是这个FeignClientRegistrar,我们点进去:我们发现它实现了ImportBeanDefinitionRegistrar、ResourceLoaderAware、EnvironmentAware这三个接口,这里关于后面连个Aware接口就不做过多介绍了,熟悉Spring的同学应该都知道吧,我们就看一下这个ImportBeanDefinitionRegistr原创 2021-11-22 22:43:11 · 1692 阅读 · 0 评论 -
打破理解误区,聊聊什么才是真正的云原生?
云原生应用在我们的互联网应用当中,有一个词想必大家都很熟悉,叫做云原生,或者云原生应用。那什么才是云原生呢?在云原生概念中,有一个叫做云原生15原则,这15个原则我们可以分成四类:CICD弹性解耦中台CICD是和软件发布相关,弹性是和应用的特性相关,解耦是应用与应用之间的关系,最后一个中台是对外服务的形式。只有说满足了15原则,我们才能说是一个很好的云原生应用了。这里我们为什么来通过这个15原则来聊云原生呢?很多人盲目上云,不是所有的应用都适合云,也不是所有应用都能叫云原生。很多原创 2021-11-21 22:53:12 · 572 阅读 · 0 评论 -
硬钢Spring源码——五万字梳理完Spring核心原理
Spring源码解读前言Spring核心接口和类Bean与BeanDefinitionSpring的一等公民——BeanBeanDefinition ——Bean的定义BeanDefinition源码探究SpringIoc容器BeanFactoryBeanFactory和FactoryBean 的区别BeanFactory架构体系ListableBeanFactoryAutowireCapableBeanFactoryDefaultListableBeanFactoryApplicationContextA原创 2021-11-21 00:41:08 · 698 阅读 · 0 评论 -
Ribbon最终实战——打造自定义一致性哈希负载均衡策略
自定义IRule本文,我们通过IRule接口,实现一个自定义的负载均衡策略——一致性哈希。关于一致性哈希原理不是本文探讨的重点,如果不了解的同学可以看下这篇文章《一致性哈希算法的原理与实现》,写的还是挺不错的。一致性哈希不仅在负载均衡的领域,在很多其他的领域都有广泛的应用。我们废话不多说,直接开干!首先我们在ribbon-consumer的模块下,创建一个类并继承AbstractLoadBalancerRule和实现IRule接口:然后从上下文中获取HttpServletRequest对象:原创 2021-11-19 21:52:51 · 895 阅读 · 0 评论 -
彻底搞懂Ribbon——IPing机制源码解析
IPing机制我们废话不多说,直接看源码:这里只有一个isAlive,它会传入一个Ribbon选出来的Server,看看是不是挂了。我们看一下它的实现类:可以看到它的实现类还是蛮多,我们就先看一下这个DummyPing:这个直接返回true。。。那算了,就不要看它了,再看看其他的,我们就看一下PingUrl这个类吧:这个类还是有点东西的。这里小编就不debug走了,很多时候我们就是一个肉眼编译器,在很多互联网公司,代码提交链错综复杂,所以说很多时候项目比较忙的时候,代码交叉在一块,你都原创 2021-11-18 23:51:04 · 635 阅读 · 0 评论 -
彻底搞懂Ribbon——负载均衡策略源码探究
Ribbon负载均衡策略源码解析RandomRuleRoundRobinRuleBestAvailableRuleRetryRuleRandomRule我们先来看一下这个随机策略的源码:这个choose是它的核心方法。public Server choose(ILoadBalancer lb, Object key) { // 如果传入的LoadBalancer是空,直接返回null if (lb == null) { return null;原创 2021-11-18 00:06:23 · 592 阅读 · 0 评论 -
SpringCloud之负载均衡Ribbon
快速入门添加负载均衡创建ribbon-consumer添加依赖,调用eureka-client启动多个eureka-client将负载均衡策略应用到全局或指定服务1.创建ribbon-consumer在父工程下面创建模块ribbon-consumer添加如下依赖: <dependencies> <dependency> <groupId>org.springframework.cloud</group原创 2021-11-17 10:03:39 · 649 阅读 · 0 评论 -
Eureka最终实战——打造双中心节点高可用化
高可用注册中心架构图看下图,我们先对注册中心高可用架构有一个直观的认识:注册中心高可用改造废话不多说,我们直接开干!步骤:修改host配置文件启动双注册中心单节点注册+同步机制客户端配置双节点1.修改host配置文件我这里用的是mac的系统,需要进入到etc目录下,如果是windows的小伙伴可以去网上查一下相关资料找到hosts这个文件。添加如下内容:2.创建并配置双注册中心2.1创建eureka-server-peer模块2.2创建启动类2.3创建配置文件s原创 2021-11-15 23:46:50 · 1320 阅读 · 1 评论 -
彻底搞懂Eureka——服务续约源码探究
在上篇文章《彻底搞懂Eureka——心跳发送源码探究》我们已经研究过了服务发送的流程,我们也知道,心跳发送与服务续约是一种相互作用的机制,client发送一个心跳,对应的服务端就要接受这个心跳完成一次服务的续约对吧。我们来看一下InstanceResource这个类:当客户端发送完心跳以后,服务端会在这个renewLease方法里面接受这个请求,接受一个PUT的httpMeathod,它的属性都是通过@QueryParam注入进来的我们往下走一步:可以看到这里有一个isFromReplicaNo原创 2021-11-15 21:37:08 · 734 阅读 · 0 评论 -
彻底搞懂Eureka——心跳发送源码探究
在DiscoveryClient里有这样一个方法:在服务的启动时,会有一个服务的心跳包在这里发送出去,我们打个断点,看一下这部分心跳的逻辑,前面的代码我们先略过,直接跳到发送心跳的地方:根据这个方法名,我们不难猜测,它应该是在后台通过定时触发的一个任务,我们进入这个方法:在这里可以看到这个定时的任务不仅包含心跳,还有缓存的刷新,我们这部分先不看,继续往下走:这里就和心跳有关系了,可以看出,在clientConfig.shouldRegisterWithEureka()为true的时候才会进来原创 2021-11-14 23:16:22 · 901 阅读 · 0 评论 -
彻底搞懂Eureka——探讨吐血绕人的服务注册逻辑
前言学习源码之前,小伙伴们首先应该创建好服务提供方,方便后续断点阅读。如果小伙伴们不知道如何动手,请参考一下这两篇文章:《聊聊服务治理》 、《创建服务提供者》我们先看一下这个服务发现的核心注解:点进去:我们可以看到这里有一个autoRegister注解,它的默认值是true。上面注释中解释:如果为true,ServiceRegistry会自动注入local server即当前instance。看到这里,感觉线索还不是很明显,我们再找找其他内容。果然,看到上面Import注解中:点进去原创 2021-11-13 00:48:54 · 1062 阅读 · 0 评论 -
深入理解Redis——主从复制原理解析
Redis主从架构本文我们重点探讨一下Redis的主从架构,假设我们Redis只有一个节点,那么它会为我们的数据库起到一个屏障的作用,如果我们现在有很多的请求,并发请求到Redis,我们想一想会有什么样的问题呢?一般情况下,单机单节点的Redis并发的话基本是在上万吧,如果服务器硬件配置包括运维人员优化做到非常高的话,那么达到个十几万二十几万应该也是没有问题的,但是它肯定是有一个瓶颈的。随着我们的业务复杂度不断的增长,Redis能够支持的并发量肯定是有上限的,那在这个时候我们应该想到能不能为我们的Re原创 2021-11-08 22:31:22 · 746 阅读 · 2 评论 -
深入研究池化技术——线程池
线程池线程池顾名思义就是一个放线程的池子,使用线程池的好处有很多:重用已存在的线程控制并发功能强大从某种意义上来讲,线程池是一种特殊的对象池,因此你也可以使用对象池来自己实现一个线程池,当然一般情况下我们是不需要自己实现线程池的,使用JDK自带的线程池就可以了。话不多少,我们直接开干!首先我们用ThreadPoolExecutor创建一个线程池玩一玩:可以看到,它的构造方法里最多可以传入七个构造参数,我们就直接玩这个构造参数最多的吧。 ThreadPoolExecutor execu原创 2021-11-07 21:41:32 · 412 阅读 · 0 评论 -
深入研究池化技术——对象池
池化技术池化技术是性能调优的重要措施,池化的思想是把对象放到池子里,当要使用的时候,从池子里面拿对象,用完后再放回池子里,这样可以降低资源分配以及释放的开销,从而提升性能,在实际项目中,其实我们每天都在使用池化技术。关于池化技术有以下几种:对象池:通过复用对象,减少对象的创建、垃圾回收的开销线程池:通过复用线程来提升性能连接池:如数据库连接池/Redis连接池/HTTP连接池,通过复用TCP连接来减少创建和释放连接的时间来提升性能。本文,我们详细来探讨一下对象池。对象池对象池用于维护一些很原创 2021-11-07 13:40:09 · 1167 阅读 · 0 评论 -
Java并发之彻底搞懂读写锁
ReentrantReadWriteLock我们来探讨一下java.concurrent.util包下的另一个锁,叫做ReentrantReadWriteLock,也叫读写锁。实际项目中常常有这样一种场景:比如原创 2021-11-06 19:20:38 · 658 阅读 · 1 评论 -
java并发之彻底搞懂ReentrantLock
ReentrantLock在Java5之前synchronized是仅有的同步手段,从Java5开始便提供了ReentrantLock,即再入锁的实现。它的语义和synchronized基本相同,通过代码直接调用lock方法获取,代码编写也更加灵活。与此同时,位于java.util.concurrent.locks包下的ReentrantLock提供了很多使用方法,java.util.concurrent这个package即业界有名的J.U.C包,里面比较有名的工具类几乎都是基于Doug Lea大神写的原创 2021-11-06 13:09:58 · 557 阅读 · 0 评论 -
打通JVM调优第六战-代码缓存区(Code Cache)问题分析
代码缓存区代码缓存区是一块存储编译后代码的区域控制代码缓存区的配置有如下几个:属性作用默认值-XX:InitialCodeCacheSize设置代码缓存区的初始大小 ,以java -XX:+PrintFlagsFinal|grep InitialCodeCacheSize结果为准不同操作系统、不同编译器的值不同-XX:ReservedCodeCacheSize设置代码缓存区大小,以java -XX:+PrintFlagsFinal|grep ReservedCod原创 2021-10-28 19:48:59 · 2438 阅读 · 0 评论 -
打通JVM调优第五战-方法区溢出与直接内存溢出
方法区溢出与直接内存溢出方法区溢出方法区溢出总结直接内存溢出什么是直接内存?直接内存使用场景实战演练分配直接内存总结直接内存溢出问题直接内存总结方法区溢出我们本文主要探讨一下方法区溢出与直接内存溢出。先来回顾一下方法区的知识点:线程共享,用来存储被虚拟机加载的类型信息、常量、静态变量等在JDK8 之前,方法区是用持久代(Perm Gen)实现的,从JDK8 开始持久代被元空间(Metaspace)给代替了。同时方法区也成了一个逻辑上的概念。看下图:方法区的一部分在堆内存,另一部分在元空间原创 2021-10-27 22:49:47 · 747 阅读 · 2 评论 -
面临层出不穷的垃圾收集器我们如何选择?
如何选择垃圾收集器?前面几章,我们已经聊过了七种垃圾收集器,当然,在比较新的JDK版本中,还有低延迟更高效的垃圾收集器,比如:Shenandoah 、 ZGC… 这些内存我们以后再做详细介绍。那么,面临这么多的垃圾收集器,我们如何选择呢?我们可以从三个方面去考虑:你的应用系统关注的主要矛盾点是什么?比如说,某个项目是一个数据分析类的应用系统,我们希望它能更迅速的获得执行结果,那么吞吐量就是主要矛盾点。可以使用Parallel Scavenge而假设,某个应用是一个Web应用,Stop The原创 2021-10-24 08:33:52 · 215 阅读 · 0 评论 -
深入浅出垃圾收集器-G1收集器
G1收集器前面几篇博文中,我们聊了新生代收集器和老年代收集器(《深入浅出垃圾收集器-新生代收集器》、《深入浅出垃圾收集器-老年代收集器》),这篇文章主要和大家介绍最后一款主流的垃圾收集器 G1收集器。G1收集器的全称是:Garbge First这是一款面向服务器端应用的垃圾收集器,它既可以用于新生代,也可以用于老年代。内存布局G1这款垃圾收集器,它带来了很多革命性的变化,首先是堆内存布局的变化。我们来看一下图:和前面介绍的说有垃圾收集器都不一样,G1把整个java堆划分成了若干个大小相等的原创 2021-10-23 22:36:08 · 1575 阅读 · 0 评论 -
深入浅出垃圾收集器-老年代收集器
老年代收集器上篇文章中,和大家介绍了新生代收集器。这次,我们聊一聊老年代收集器。如果大家没有看过我的《深入浅出垃圾收集器-新生代代收集器》这篇文章的话,建议先去阅读后,再来学习这篇文章。Serial Old收集器也叫串行老年代收集器,可以认为它是Serial收集器的老年代版本。但是,它采用的是标记整理算法。它的执行过程大致是这样的:可以看出,他和Serial收集器相比,除了使用的算法不一样以外,其他和Serial收集器都是一样的。Serial收集器有哪些适用场景呢?可以和Serial/P原创 2021-10-23 18:46:10 · 382 阅读 · 0 评论 -
深入浅出垃圾收集器-新生代收集器
垃圾收集器前面我们已经详细探讨了垃圾收集算法,我们这次探讨一下垃圾收集器。垃圾收集算法为实现垃圾回收提供强有力的理论支持。而垃圾收集器则是利用垃圾收集算法,实现垃圾回收的实践落地。那么和垃圾收集算法类似,java也提供了多种垃圾收集器,不同的垃圾收集器也有不同的特性以及适用场景,甚至不同的垃圾收集器之间还可能存在配合使用的关系。那么使用起来还是比较复杂的。...原创 2021-10-23 09:30:09 · 431 阅读 · 0 评论