自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 6.824 lab1 单机版MapReduce实现

目录资源论文阅读lab实现约束条件设计worker处理流程注意点Coordinator处理流程附资源bilibili视频课链接:【MIT公开课】6.824 分布式系统 · 2020年春(完结·中英字幕·机翻)_哔哩哔哩_bilibilid 课程链接:6.824 Schedule: Spring 2020 代码链接:不重要,暂时还在本地,上传到GitHub后添加 重要提醒:大家还是自己从0去思考最好,这样你会有更深刻的理解。这里记录一下,好几个周末,

2021-09-27 01:27:58 215

原创 Invalid bound statement (not found) 异常分析

异常Invalid bound statement (not found)结论Mybatis 特殊字符未转义,导致SQL解析异常。原因在csdn上转了一圈,都是讲名字不对什么的,但是我这里根本没有XML文件,我这边是使用注解@Select,(至于为什么使用,为了保持团队风格统一),我也是第一次使用这玩意儿,简单的SQL写起来没啥问题,也少了很多成对的标记。。。扯远了,回到问题。百度无果后,然后打开vpn 去Google了一波(就应该一开始就使用Google的,大雾),看见下面这篇:https:

2020-12-28 00:02:27 212

原创 Transaction rolled back because it has been marked as rollback-only 异常分析

问题最近上线了一个新功能,在某个特定场景下保存数据时,一直提示Transaction rolled back because it has been marked as rollback-only异常。结论先说结论,**是因为@Transactional 注解使用的有问题。**我们这个case下将其中一个类上的@Transactional注解去掉就好了。问题是解决了,但是原因呢?得扒一扒。原因首先,再回顾下事务传播机制:https://blog.csdn.net/qq_17085835/arti

2020-12-27 23:47:01 20189 1

原创 rocketMQ的consumer 源码分析 -事务消息(5)

概述应用程序会有这样的场景,完成本地事务后,需要发布事件已完成的消息。消息完成和事务是两个操作,如何保证两个操作保持一致,就是下面要展开的。通过事务,让应用依赖若干实用的抽象保证,没有竞态条件,没有磁盘问题,事务隐藏了这些问题,应用无需担心这些问题。分布式事务有很多种实现:例如两阶段提交、三阶段提交等今天来分享一下rocketMQ的事务消息实现机制对于应用程序来说,执行流程是这样的开启本地事务发送prepare消息prepare消息成功后执行本地事务,并保存事务和消息的关系,如果成功则通

2020-12-21 00:17:22 164

原创 rocketMQ的consumer 源码分析 -消息拉取(4)

rocketMQ的consumer 源码分析概述消费者的启动流程消息拉取核心类pullRequest:拉取消息的请求ProcessQueue :消息在消费者端的快照核心属性消息拉取的基本流程这里的问题拉取到了为何消息结果还是为空?那么问题来了,什么时候拉取偏移量会不合法?概述消息消费是以消费组为单位,消费组可以订阅多个主题。每个消费组有两种模式,1.广播模式,一条消息被集群内的所有消费者消费;2.集群模式,同一条消息只能被所有消费者消费一次。消息传递的方式有两种,推模式和拉模式。推模式是在拉模式上包了一

2020-12-05 13:15:02 291

原创 LocalCache模版类实现

缓存和真实请求有一些关系,却又不是那么密切,Spring的缓存注解使用起来总是有那么一丝丝不顺滑。场景是:给外部的RPC接口加上本地1小段时间的cache,提升本系统的吞吐量注解不能很好解决的问题如下:查询的接口同时是写入缓存的接口缓存key不想使用表达式获取不同类型的缓存要放到不同的桶里面不同的桶要定制大小,过期时间监控报告,线上的东西一定要有监控需要支持Apollo 配置开启和关闭各个cache桶的功能综上,所以自己写一个适合的缓存模版类吧/** * localCache 模版

2020-10-31 16:09:01 101

原创 rocketMQ的HA机制 源码分析(3)

HA 服务rocketmq 的高可用机制分为两部分,(1)主从复制,(2)读写分离主从复制避免了 broker 的单点故障,提供了消息消费的高可用。消息在主节点落盘后,还需要将消息复制到从节点,同步发送消息才算完成;如果主节点宕机,消费者还可以从从节点上拉取消息。读写分离提高了主节点的可用性,让从节点也参与了消息拉取负载。目录HA 服务主从复制通知发送者复制数据从节点接收数据总结主从复制rocketmq的 HA 服务在org.apache.rocketmq.store.ha.HAService中

2020-08-23 23:28:04 179

原创 rocketMQ的Namesrv 源码分析(2)

路由补充篇路由发现路由更新(删除)定时任务检测broker 下线路由发现上篇讲到 路由信息在 namesrv 上注册好了,没有客户端使用怎么行呢。rocketmq 的 namesrv 不会主动推送topic 的路由到客户端,而是由客户端主动拉取最新的路由信息。这里有一个问题:客户端会在哪些情况下去 namesrv 拉取路由信息,并且拉取的topic 路由信息是陈旧时,如何切换 namesrv 去重新拉取呢?producer 分析见客户端一般是按照使用的 topic 去拉取的,请求的消息类型为Requ

2020-08-08 12:38:03 222

原创 rocketMQ的Namesrv 源码分析(1)

namesrv源码分析rocketMQ启动流程功能实现篇路由信息路由注册路由发现路由更新rocketMQ架构文档传送门:架构设计这里今天跟着源码看看nameserver的源码实现,首先 namesrv 是类似于 zookeeper 的路由信息管理中心。每个 broker 连接所有的namesrv,每个namesrv拥有所有的 broker 信息,namesrv之间相互不通信,这让namesrv变成一个无状态的服务,所以任意一个namesrv的下线都不会影响服务。主要是代码看起来会比较容易上手一些。话

2020-08-07 23:00:00 233

原创 第四章 编码与演化

第四章 编码与演化目录第四章 编码与演化JSON,XMLThrift和Protocol BuffersAvro作者模式和读者模式Avro 的适用场景总结软件总是在不断进化,或新增功能,或修改原有功能。所以软件需要尽量设计的灵活以拥抱变化(参考:可扩展性)。但是我们常常是以现有的(或臆想的未来)角度去看待当下的问题,未来的变化实难预测。在前贤不断的努力下,也有很多方法论可以将软件的架构设计的足够灵活,主要靠两个方面,一方面是开闭原则,开闭原则不仅仅是设计模式里面的那点用处;另一方面是对业务的不断正交分解

2020-08-07 00:52:33 318

原创 第五章 复制

本章主要介绍 复制的三种方式 单领导者(single leader)、多领导者(multi leader)、**无领导者(leaderless)**复制。以及对复制过程中对性能和数据一致性的权衡,同步还是异步等。同时也列举了很多复制中可能出现的问题以及解决办法。但这远远不够,现实世界的复杂性在数据系统中体现的淋漓尽致。数据复制的目的在于可扩展性,容错,高可用性,延迟等等。这些有助于我们理解为何要将数据库设计成这样。数据复制本质上来说是将数据分布在多台机器上,这通常有两种方式:复制:在不同的节点保存

2020-08-02 14:28:35 331

原创 第三章 存储与检索

第二章关注的是将数据录入数据库系统的格式,以及检索出来的机制,这章关注同样的问题,但是是从数据库的视角来看:数据库如何存储我们的数据,以及如何检索出我们需要的数据。书中开篇列举了一个 使用bash 命令制作的简单数据库的例子:db_set(){ echo "$1,$2" >> database}db_get () { grep "^$1," database | sed -e "s/^$1,//" | tail -n 1}这个数据库非常简单,是一个仅追加的日志文件,即写

2020-07-07 00:52:31 637 2

原创 spring bean 的生命周期一览

我们就从最先执行的setBeanName开始一览,spring bean 的生命周期setBeanName 的执行流程先看一波 debug 栈的截图先是registerBeanPostProcessors这个都熟悉,接下来是 getBean相关的,不关心,我们关心初始化的时候干了嘛,那就从 createBean 开始看起,一定要记着这个时候类的构造方法已经调用过了哦。createBean方法开始有很多 check ,接着下面这句,猜测是跟代理初始化相关的,我们没添加代理,先放过// Give B

2020-06-30 00:14:42 139

原创 第二章 数据模型和查询语言

第二章 数据模型和查询语言总结本章开始介绍了关系型数据库,非关系型数据库,图模型数据。首先解释了关系模型和文档模型是什么,然后指出了从数据库模型到应用程序对象模型之间的不匹配(称为对象关系不匹配)我们通常使用 ORM 框架来解决从数据库模型到程序对象的转换。接着引出了一对多、多对一、多对多关系以及查询的局部性。和 json 这种数据格式使用了 linked 上的简历来说明这几种关系,一个人有多份工作经历;多个人在同一个地区工作;一个用户为另一个用户的推荐;以及使用者两种模型进行存储的做了比较最后

2020-06-12 00:14:20 245

原创 第一章 可靠性、可扩展性、可维护性

数据系统首先讲述了大多数应用都是数据密集型而非 计算密集型,更多的问题来自于 数据量、数据变更速度,列举一些通用组件数据库系统:存储数据;缓存系统:提升读取速度;搜索索引:按照关键字搜索,以及过滤;批处理:定期处理大量的数据流处理:向其他进程发送消息,进行异步处理这些系统都面临着以下这些共同的问题可靠性是指系统在困境中也可以正常工作,讲包括故障和失效故障指系统的一部分状态偏离其标准硬件故障:磁盘可以提供 RAID;双路电源;热插拔 CPU 等等可以解决软件故障:系统错误,特定

2020-06-07 14:57:45 3431

原创 Mockito可以做哪些事情

Mockito可以做哪些事情1.验证行为 @Test public void verify_behaviour() { List mock = mock(List.class); // 使用mock对象执行操作 mock.add(1); mock.clear(); // 验证操作是否执行 verify(mock).clear(); verify(mock).add(1);

2020-06-04 23:12:31 348

原创 RPC极简单实现

为什么有了HTTP还要使用RPCHTTP是被设计用来在桌面浏览器上的 HTTP是无状态的、每次传输都需要携带报文头,会造成一部分额外的网络开销 适用于接口不多的情况下,简单,直接; RPC会有注册中心,有丰富的监控中心,提供软负载均衡,动态扩展,还有安全等最重要的一点,RPC是一套理论,使用HTTP协议也可以实现RPC,RPC是解耦的一种方式!!!RPC需要解决的问题服务调用问...

2018-09-24 20:30:42 213

原创 2018-9-21 哔哩哔哩笔试编程题

22娘和33娘接到了小电视君的扭蛋任务:一共有两台扭蛋机,编号分别为扭蛋机2号和扭蛋机3号,22娘使用扭蛋机2号,33娘使用扭蛋机3号。扭蛋机都不需要投币,但有一项特殊能力:扭蛋机2号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+1个扭蛋机3号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+2个22娘和33娘手中没有扭蛋,需要你...

2018-09-21 17:15:45 2902 2

原创 Linux下多进程避免僵尸进程的方法

首先服务端是这样的的,使用父进程进行监听,每当有一个链接到来就开启一个子进程所以程序大概是这个样子的:#include #include #include #include #include #include #include #include #include #include #include //wait(NULL) 只要有一个

2017-08-06 19:24:13 600

原创 git的安装和提交

这个以后肯定会用的多,遂记录下来安装的流程请看:git安装然后需要在https://github.com/ 上 new 一个项目  new respository然后复制下链接即可 就像上面这样,不要添加文件!!!!之后在本地,也就是你的code 的文件夹 下: nn@nn:~/sp/te_curl$ git init 初始化空的 Git 仓库于 /hom

2017-08-06 13:17:51 243

原创 求十进制数n的 2至 n-1进制的表达

/*假设数为num, 进制为n */vector transform(int num, int n){vector list;while (num != 0){int a = num % n;num = num / n;list.push_back(a);}return list;}例如:123    123%10 = 3, 123 / 10 =

2017-07-07 11:11:30 1297

原创 std::bind 浅析

首先声明,并不涉及std::function 的使用,留作下次吧bind 用来绑定一个函数,包括 全局函数, 普通成员函数, 静态成员函数, operator函数, 虚函数但是不包括重载函数,原因是,通过函数名并不知道 因为无法确定需要哪个重载函数实例(vs2013),理论就这些吧#include#includeusing namespace std;int add1(

2017-07-05 10:28:14 1245

原创 VS下 调试 Qt程序提示缺少xxx.dll的解决办法

右键 打开属性页 ,在链接器中 的   附加库目录  $(QTDIR)\lib;$(QTDIR)\lib;$(QTDIR)\lib;%(AdditionalLibraryDirectories) 中添加上  $F:\Qt\5.3\msvc2013_64_opengl\bin;  你的qt的bin,目录,然后就可以调试成功了也可以添加qt的环境变量,然后重

2017-05-11 18:49:06 3305

转载 函数指针做函数参数浅析

先看看基本语法:数组指针 语法 //定义一个int 类型的数组变量 int array[10]; //a代表的是数组首元素的地址 &a代表整个数组的地址 a+1 4 &a+1步长 40 . //定义 一个数组 类型 typedef int (my_type_array)[10]; my_type_array my_array; (my_array)[0] = 20;

2017-05-05 20:45:45 248

原创 merge_sort

上次一个题让写一种稳定的排序算法,就是归并排序咯,然而不会,谨以此记住归并排序:时间复杂度 n*log(2) n , 状态 稳定  辅助空间 O(n)典型的一种二分策略的排序,整个过程分为两步1. 二分,把待排序数组分成两部分,再二分,直到只剩一个元素为止;2.合并,每次把两个数组按照从小到大的顺序合并,每一次合并的过程就会有右一部分元素变成有序的,3.分治策略很重要一

2017-04-27 11:46:28 219

原创 一个工厂模式的浅析

首先看简单工厂模式此模式的职责就是负责创建其他类的的实例,通常是一类对象如下fruit -> banana     fruit -> apple#include using namespace std;class Fruit{public: virtual void getFruit() = 0;};class banana: public Fruit{publi

2017-04-25 22:49:00 170

原创 一个简单的多线程下的singleton实现

首先看一个简单的单线程的单例模式(1)构造函数私有化(2)提供一个全局的静态方法(静态访问点)(3)在类中定义一个静态指针,指向本类的变量 的静态变量指针#includeusing namespace std;class singelton{public: static singelton* getinstance() { if (m_psl == NULL)

2017-04-25 21:43:13 349

原创 排序算法模板函数实现(简单类型)

先来看看普通int  类型的的实现void merge(int*src, int *des, int low, int mid, int high) //归并{ int i = low; int j = mid + 1; int k = low; while ((i <= mid) && (j <= high)) //将小的放到目的数组中 { if (src[i] < src

2017-04-23 23:23:36 446

原创 一个简单的seqlist的模板实现

首先是 seqlist.htemplate <typename T>class seqlist{public: seqlist(int capacity); ~seqlist(); int get_length(); //获取长度 int get_capacity();//获取容量 bool insert(int pos, T& t); //在pos位置插

2017-04-23 21:52:15 1425

原创 使用xshell连接VM虚拟机中的linux

使用xshell远程登录很方便,留作记录首先配置vm的那块虚拟网卡,IP 要和在VM 中 虚拟网卡编辑器中的NAT 模式下的子网IP 在同一个网段即可但是,这个IP地址和主机IP 地址一点关系都没有,因为这些都是虚拟出来的,所以只需要虚拟机中的IP统一就好将其中的IP 修改成 如上图类似的192.168.xxx.xxx 的地址,这个也可以打开VM在 编辑-》虚拟网络编辑器中 看

2017-03-19 23:42:22 830

原创 linux中文件操作函数

系统调用1. open 函数返回一个整数例如以只读(O_DRONLY)打开文件,返回值会是一个大于等于3的整数,打开失败返回-1标准输入文件(STDIN_FILENO) 0从标准输入读 read(STDIN_FILENO, buf, sizeof(buf)); (操作系统调用)标准输出(STDOUT_FILENO) 1标准出错(STDERR_FILE

2017-03-18 17:18:55 257

原创 能量项链--动态规划

题目描述在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r

2017-03-15 23:04:00 933

空空如也

空空如也

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

TA关注的人

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