- 博客(176)
- 资源 (2)
- 收藏
- 关注
原创 应付账款精要重点
文章目录基本概念发票处理方式重复支付等常见错误主要供应商档案折扣旅游和娱乐采购卡诈骗高级概念应付的未来基本概念簿记:企业所有经营活动和交易的记录应付账款:公司亏供应商和其他债权人的钱。分为流动债务(一年内付清的债务)和长期债务。债务:银行贷款、应付账款、工人工资和企业经营中的其他费用,以12个月为期分为长期和短期负债。资产:公司拥有的一切,分为两类流动资产:易于变现的资产,包括应收账款、存货、预售租金。固定资产:不以转售为目的的项目,包括机器、房地产、设备。费用:待摊费用:为产品
2024-06-10 13:10:32
169
原创 单测的思路
单元测试(Unit Testing)是一种软件开发中的测试方法,它的主要目的是确保软件中的最小可测试单元(通常是函数、方法或类)在被单独测试和验证时能够按照预期工作。尽管单元测试有很多优点,如提高代码质量、减少Bug、简化调试过程等,但它也存在一些缺点:增加开发时间:如要求覆盖率到80%甚至90%,或者入参几十个难以构造,单测时间占比可能超过30%。需要维护:随着代码的改变,特别是大规模的重构,单元测试也需要相应地更新和维护,增加开发的负担。
2024-02-14 13:59:50
1345
原创 QLExpress和Groovy对比
原理Groovygroovy基于JVM运行。编译时:将源文件编译成class文件后,用java的classLoader加载;运行时:直接用groovy classLoader加载QLExpressQLExpress将文本解析成AST,用java对象表达后执行。特点Groovy优点兼容性强,上手成本低。和java基本无缝兼容,熟悉java的同学上手无压力。发展历史悠久。功能强大。缺点使用疏忽时容易产生一系列OOM问题。QLExpress优点
2024-01-14 18:45:38
734
原创 业务中台的架构案例
结合电商商品中台、交易中台、春晚红包的工作经历梳理使用场景。分布式场景判断是否可用的一般方式:超时。战术上的几种方式可能组合使用。
2022-12-20 22:18:06
2502
1
原创 seata核心流程原理
文章目录ATTM开启事务提交事务回滚事务RM提交分支事务回滚分支事务TC开启事务注册分支事务提交事务回滚事务参考AT模块:Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。Transaction Manager™ :控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。Resource Manager (RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)
2022-05-15 14:59:58
839
原创 交易域一致性思考
文章目录背景想法业界方案的关注点降低成本的措施依赖分层方案步骤分解方案同步链路异步链路延迟异步链路核心场景背景互联网行业为了性能和实现成本考虑,通常追求最终一致性行业有成熟的解决方案,如seata和衍生品之前文章里也梳理过柔性事务对于高速发展的业务,或者依赖历史遗留系统,seata一类的方案有较多限制:发起方和依赖方需要实现一套协议,业务上不接受过高的改造成本:如AT的RM等接口,TCC的try,commit,cancel事务状态流转较复杂,接:如seata涉及分支事务和十几种状态机
2022-04-10 16:11:00
711
原创 结构化思维重点
文章目录思维循环金字塔结构4个原则构建方式常见思维模型5W2H认知圈+黄金圈流程思维六要素构建活动流程优化活动流程人事物思维故事思维客户思维水平思维+垂直思维T字思维参考思维循环金字塔结构4个原则结论先行。先给出核心观点,放在金字塔顶端,统领整个思想和表达。原因:大脑存储功能不强。一次接受信息不超过7条,最好3条以内大脑按句理解信息。需要提前告知结论,防止每个人的理解不同带来信息误差大脑会自动推理句与句之间的逻辑关系。句子越多,信息量越大,大脑就越容易疲劳结论先行能够帮助我们聚焦中心
2022-01-18 10:07:45
624
原创 gin的实现原理
文章目录gin路由基数树路由匹配中间件参考gin路由基数树使用基于基数树(Radix Tree)的httprouter基数树,压缩版前缀树:对于基数树的每个节点,如果该节点是唯一的子树的话,就和父节点合并。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z43Mx4or-1638287090110)(210714.radixtree.png)]路由树节点// tree.gotype node struct { // 节点路径,比如上面的s,earch
2021-12-05 18:56:41
1451
原创 领域驱动设计核心概念
特点优势使用充血领域对象,将数据和行为封装在一起,并与现实世界中的业务对象相映射,更加符合OO编程理念。更容易抽象、分治业务,解决复杂问题。架构分类架构设计分为:业务架构——根据业务需求设计业务模块及其关系系统架构——设计系统和子系统的模块技术架构——决定采用的技术及框架DDD:业务架构映射到系统架构,响应业务变化调整业务架构时,随之变化系统架构。微服务:追求业务层面的复用,设计和业务一致的系统架构。追求系统模块之间充分解耦,可以自由地选择合适的技术架构,去中心化地治理
2021-10-29 00:10:58
1563
原创 go语言基础
文章目录列表数组链表字典通道函数异常列表数组slice对标java ArrayList,长度可变,复制扩容。链表List对标java LinkedListRing循环链表字典对标hashmapkey需要支持判等操作,所以不能是函数、字典、切片,否则即使key是interface{},也会抛panic给key为nil的通道对标java blockingList特性同一个通道,发送操作之间是互斥的,接收操作之间也是互斥的。发送操作和接收操作中对元素值的处理都是不可分
2021-09-05 15:56:35
164
原创 go项目搭建
文章目录安装环境sdkgoland开发创建工程引入依赖业务开发goland调试打包部署参考安装环境sdk下载地址,之后解压或者安装。设置环境变量:创建GOROOT-sdk根目录:E:\go\go1.16.5\go修改Path:添加%GOROOT%\bin创建GOPATH-工作空间:E:\go\gopath通常gopath下创建3个目录。bin:打包后的exe文件,pkg:第三方包,src:源文件go version测试是否安装成功。goland下载地址。安装步骤。
2021-07-14 10:48:23
616
原创 AQS和衍生组件的原理
文章目录AQS原理acquirereleaseReentrantLocklockunlockThreadPoolExecutorAQS原理volatile int变量 state 标识共享资源。如果资源空闲,当前线程锁定资源。其中tryAcquire由子类实现。如果资源被占,在等待队列中阻塞至唤醒。 //获取资源 public final void acquire(int arg) { if (!tryAcquire(arg) &&
2021-04-06 00:41:13
371
原创 CMS、G1、ZGC对比
文章目录CMS+ParNewYGCOGCG1特点YGCMixed GCZGC特点过程参考CMS+ParNew一块eden,两块survivor,一块old。YGCParNew。一次stw——复制。eden区和survivor1区活跃对象复制到survivor2,部分survivor1区对象晋升到老年代。开始前。结束后。OGCCMS。两次stw——初始标记、重新标记。老年代直接标记清除,没有复制压缩。开始前。结束后。G1堆被分成多个大小的区域。映射为不连续的eden,
2021-03-22 00:03:46
2187
原创 redis数据结构
文章目录redis特点数据结构SDSlinkedlisthashtableskiplistintsetziplist对象类型StringListHashSetZset相关参考redis特点优点:性能极高。Redis能读的速度是110000次/s,写的速度是81000次/s 。原子性。Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。数据类型丰富。Redis支持Strings, Lists, Hashes, Sets 及 Ordered Sets 等数据类型操作
2021-02-08 19:33:55
312
原创 限流的几种实现
算法流量限制计数器统计单位时间内请求数。超过直接拒绝。特点:实现简单。单位时间一开始就消耗完,剩余时间都会拒绝,即突刺消耗。滑动窗口计数器的精细化(微分+积分),按照时间窗口计数和拒绝。特点:减弱突刺流量的影响:切换计数器时的双倍峰值。减弱突刺消耗的影响范围。消耗更多内存CPU统计并计算限流。漏桶缓冲区缓存,系统恒定速率处理请求。特点:消费匀速。请求可能有一定的等待延迟。突发流量会等待较久或者丢弃。令牌桶改进漏桶。某
2021-02-02 19:22:04
516
原创 mysql(七)——部分语句实现
文章目录deleteoptimizerecreate锁表ddlOnline ddl对比count几种计数方式count原则count函数对比order by全字段排序rowid 排序不排序joinIndex Nested-Loop JoinBlock Nested-Loop Joingroup by基本流程使用原则deleteinnodb_file_per_table = ON,表数据存在文件中,而不是共享表空间。drop table可以直接删除文件。delete 把记录的位置标记为可复用,磁盘上
2020-12-01 01:17:49
338
原创 mysql(六)——高可用
文章目录主备主备同步双M结构同步流程并行复制主备延迟定义来源主备切换主从主备切换逻辑过期读处理方案可用性检测外部检测内部检测主备binlog实现。主备同步双M结构备库设成readonly(对super用户无效,比如同步更新的线程):取数等放在备库,可以防止误操作。防止切换过程的bug,造成双写主备不一致。readonly属性可以用来判断节点角色。server id解决循环复制问题。binlog中记录业务操作的mysql的sever id。每个库收到binlog后,丢弃和
2020-12-01 01:16:34
347
原创 上海二手房网站
文章目录简介git总体架构开发目录简介业务目标:实现上海二手房全量数据动态更新、统计、汇总展示,了解二手房变化趋势。技术目标:前端到后端技术的demo。前身:租房网站。毕业2年需求变更:租房->买房…git前端项目git后端项目git总体架构开发目录后台任务爬取链家二手房。springboot整合dubbo。springboot整合nacos。springcloudgateway+oauth2实现权限控制。echarts展示上海二手房汇总。.
2020-10-21 01:12:57
1043
原创 springcloudgateway+oauth2实现权限控制
文章目录鉴权服务基础配置鉴权配置网关服务基础配置网关过滤器配置权限校验过滤器配置接口调试前端适配鉴权服务OAuth 2.0 的四种方式OAuth2实现分析基础配置新建house-oauth模块,依赖oauth2。 <dependencies> <dependency> <groupId>com.babyjuan</groupId> <artifactId>house-common</art
2020-10-20 13:15:15
12414
6
原创 springboot整合nacos
Nacos简介nacos简介。Server下载最新版本、启动server。参考文档。默认的本地admin地址:http://127.0.0.1:8848/nacosClient引入依赖house-common中引入nacos依赖。 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alib
2020-10-20 13:07:35
555
原创 springboot整合dubbo
文章目录dubbo原理多模块项目创建provider接口定义模块公共模块存储模块查询模块consumerrpc适配模块web模块dubbo原理dubbo原理和特点多模块项目创建多模块创建参考。各个模块依赖关系:父模块管理依赖版本,不直接依赖。打包注意:springboot默认打包成可执行jar,无法被依赖。打包插件里需要重命名jar包,原文件才不会被重命名,可依赖。 <plugins> <plugin> <gr
2020-10-20 01:12:09
314
2
原创 nacos和apollo实现对比
文章目录nacos架构配置更新概念apollo架构配置更新对比参考nacos架构client -> server <- admin。服务端持久化可简化为内置的Derby内存数据库。配置更新HTTP从server长轮询拉配置。请求延时阻塞在服务端队列中。服务端task扫到key的更新,变更后的配置写入响应对象,返回结果。没有变更阻塞29.5s后(客户端超时30s)检查配置,检查结果写入响应对象,返回结果。客户端检查配置的md5,不一致调用listener通知变更事件。
2020-10-06 23:31:01
2459
原创 ElasticSearch 安装和使用
文章目录安装es安装kibana安装命令行使用索引操作文档操作搜索操作java客户端使用初始化文档操作搜索操作安装es安装下载:官网、历史版本,或者国内镜像。教程。配置 config/elasticsearch.yml。参考。cluster.name: my-clusternode.name: my-node1network.host: 0.0.0.0http.port: 9200cluster.initial_master_nodes: ["my-node1"]bin/ela
2020-08-26 00:18:19
212
原创 ElasticSearch 架构和原理
文章目录部署架构存储架构写入过程请求链路创建文档translog文件segment文件删除文档更新文档读取过程查询文档搜索文档参考部署架构master节点。管理元数据,负责索引创建、删除、数据rebalance等。通常奇数个master节点。数据节点。存储数据和倒排索引,负载数据的索引和检索,负载较高。协调节点。处理客户端请求,转发至相关的数据节点,并聚合结果返回客户端。存储架构索引。index。文档的集合,由多个分片组成。分片。shard。一个
2020-08-26 00:09:37
455
原创 redis高可用
文章目录高可用复制完整重同步部分重同步命令传播哨兵模式正常运行命令连接订阅连接检查下线主观下线客观下线故障转移Leader选举故障恢复高可用主从复制+哨兵模式。复制命令:SLAVEOF ip完整重同步步骤从向主发送SYNC主执行BGSAVE,生成RDB文件,并使用缓冲记录快照之后的所有写命令。主发送RDB文件至从,从阻塞请求加载RDB文件。主发送缓冲区命令至从,从执行到同步。缺点:消耗资源,主持久化、网络传输RDB、从阻塞请求。部分重同步实现方式:主从复制偏
2020-08-12 00:46:48
363
原创 redis持久化方式
文章目录RDBSAVEBGSAVE还原AOF写入还原AOF重写对比RDBAOF特点RDB快照式持久化。SAVE阻塞redis主进程,直到RDB创建完成。手动触发。BGSAVEfork子进程。子进程创建RDB文件,主进程继续处理请求。子进程共享父进程的内存空间,该空间只读。父进程修改时,对应的内存页copyonwrite,修改复制之后的内存页。只会同时执行一个BGSAVE命令。可手动触发,也可以设置多个save条件,任意满足时执行bgsave持久化。save 900
2020-08-06 00:41:11
297
原创 微服务查询模式
文章目录API组合模式CQRS模式API组合模式查询每个服务API并组合结果。注意点:API组合器需要使用响应式编程,并行调用较小rt。优点:简单直观。缺点:增加额开销。I/O。涉及多次rpc和查库。CPU。聚合查询结果,可能需要执行大规模数据内存链接。可用性降低。受依赖服务的影响。缺乏数据一致性。跨库查询,柔性事务下缺少一致性视图。CQRS模式命令查询职责分离。使用事件维护从多个服务复制的只读视图。微服务架构查询的问题。API组合模式查询分散
2020-08-03 22:17:10
258
原创 微服务业务逻辑设计
文章目录业务逻辑组织模式事务脚本模式领域模型模式聚合模式领域事件业务逻辑组织模式事务脚本模式面向过程的事务脚本集合,每种请求对应一个脚本。类分为:实现行为的类。存储状态的类。优点:简单。领域模型模式组织为具有行为和状态的类构成的对象模型。类分为:同时具有行为和状态的类。(主要)具有行为的类。存储状态的类。优点:每个小类逻辑不多,反应现实,易于理解。小类容易测试。可以使用设计模式。聚合模式聚合模式:领域模型组织成聚合的集合,每个聚合是可以一批处
2020-08-03 22:16:41
252
原创 SAGA事务
文章目录SAGA定义步骤排序分类协同式编排式事务隔离对策SAGA定义柔性事务传统同步事务难点:部分数据库不支持XA。传统分布式事务是同步通信,会降低系统可用性。SAGA:使用异步消息协调一系列本地事务,维护多个服务之间的数据一致性。是一种长事务解决方案,适用于业务流程长且需要保证事务最终一致性的业务系统。步骤排序可补偿事务。可能失败,需要编写补偿事务做回滚。关键性事务。后面跟着不可能失败的步骤。可重复事务。总会成功。分类协同式决策和执行顺序逻辑分布在saga的每一
2020-08-03 22:13:00
339
原创 微服务拆分和通信
文章目录服务拆分分类架构视图架构风格分类拆分步骤定义系统操作定义服务定义服务API拆分难点内部进程通信交互方式同步远程过程调用RESTdubbogRPC局部故障处理服务发现异步消息外部API通信API gateway功能特点服务拆分分类架构视图逻辑视图。类、包和关系。实现视图。WAR、jar包和之间的依赖。进程视图。进程和通信。部署视图。机器和网络。架构风格分类分层架构。表现层->业务逻辑层->持久化层,向下依赖。六边形架构。入站适配器(前端,消费组)->业务逻辑
2020-08-03 22:08:47
333
原创 微服务演化过程和特点
文章目录微服务单体架构优点缺点中心化架构优点缺点微服务架构优点缺点微服务单体架构适合演化早期,业务迭代时逐渐暴露缺点。一个war或者Jar包。优点业务迭代简单。应用开发、大规模修改方便。测试简单。部署简单。横向扩展无脑。只需要负载均衡多个实例。缺点业务迭代困难。内部逻辑复杂度过高,类似脏泥球,冲突多、耦合严重,导致开发、测试缓慢。技术迭代困难。依赖一套技术栈,使用新技术试错成本高。扩展困难,成本高。不同硬件的需求集中在同一个实例上,扩展需要
2020-08-03 22:04:50
309
原创 dubbo原理和特点
文章目录原理架构请求过程特点文档原理架构服务容器启动,加载运行提供者。提供者启动时,向注册中心注册服务。消费者启动时,向注册中心订阅服务。注册中心返回提供者列表给消费者,变更时基于长连接推送。消费者基于负载均衡选一个提供者调用。提供者和消费者定时上报监控中心。请求过程底层基于netty,服务端分配独立线程处理请求。特点优点:透明化的远程方法调用。只需简单配置即可像本地方法一样使用。软负载均衡和容错。请求失败后切换到其他提供者重试。服务自动注册。启动时自动注
2020-08-03 21:57:09
425
原创 kafka安装和使用
文章目录安装javazookeeperkafkakafka在zk中的节点使用生产者使用消费者使用安装javazk和kafka的运行环境。linux下的jdk安装zookeeper下载zk:https://zookeeper.apache.org/releases.html解压。tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz。创建数据文件夹、配置路径下创建zoo.cfg。cd /usr/local/zookeeper/apache-zookee
2020-07-08 13:54:11
346
原创 kafka工作原理
文章目录架构元数据复制首领副本追随者副本处理请求元数据请求生产请求获取请求分区存储架构元数据broker集群成员列表。维护在zk的 /brokers/ids下的临时节点。控制器。broker之一,通过成功创建/controller节点判定。监听各broker zk节点状态,维护分区首领和追随者列表,并通知各个broker。复制每个分区多个副本。首领副本所有生产者和消费者请求经过首领副本,追求一致性。追随者副本从首领复制消息,保持一致。主动从首领pull消
2020-07-08 13:51:16
330
原创 kafka可靠性保障
文章目录保障broker复制系数不完全的首领选举最少同步副本生产者发送确认重试额外错误处理消费者可靠性配置手动提交注意点保障保证:分区消息顺序。同一个分区中先写入的消息会被消费者先读到。消息被写入分区所有同步副本,才被认为已提交。只要有一个副本活跃,已提交消息就不会丢失。消费者只能读取已提交的消息。核心:复制机制+分区多副本。kafka配置需要在两点之间权衡:消息存储的可靠性、一致性可用性、高吞吐、低延时、硬件成本保证消息至少被消费一次。生产者、消费者均有可能使消息重复。
2020-07-08 13:41:01
366
原创 ZK内部实现——Paxos到Zookeeper(二)
文章目录系统模型数据模型节点版本WatcherACL服务器角色LeaderFollowerObserver服务器间的通信类型Leader选举服务器启动运行期间会话创建管理清理重连请求处理会话创建SetData事务请求转发GetData系统模型数据模型一颗树,每个节点称为ZNode。事务ID(ZXID),改变zk状态的操作分配全局唯一的事务id。包括节点的增删,节点数据修改,会话创建和失效等。节点节点类型。持久节点。创建直到主动删除。持久顺序节点。zk中父节点维护第一级子节点顺
2020-06-24 00:28:53
246
原创 ZAB——Paxos到Zookeeper(一)
文章目录简介崩溃恢复模式条件目的步骤消息广播模式条件目的步骤和Paxos的关系相同不同简介ZAB(Zookeeper Atomic BroadCast)协议。为zk专门设计的支持崩溃恢复的原子广播协议。zk使用zab协议在主备模式的架构中保持集群各副本数据的一致性。崩溃恢复模式条件服务框架重启。Leader异常:网络中断、崩溃退出、重启。目的选取新Leader。Follower和Leader数据同步。已经被Leader提交的Proposal能够被所有Follower提交。
2020-06-24 00:09:43
165
24种设计模式类图
2018-05-19
计算机网络自顶向下方法第6版
2017-12-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人