- 博客(201)
- 资源 (20)
- 收藏
- 关注
原创 《代码大全》读书笔记
零零碎碎趁着空闲的时间把《代码大全》这本大头部看完了。这本书涉及到代码构建过程中的方方面面,讨论的主题主要是理解软件设计的复杂性,编写复杂度低、可读性强的代码。看书中的过程中以章节为单元摘录了一些重要的内容,也做了一定的总结和思考,算作一篇笔记,记录在此,希望可以便人便己。
2024-08-13 21:58:00
612
原创 关于一致性,你该知道的事儿(下)
上篇文章讲了一些关于较为底层的一致性内容,这篇文章上升一个层次,讨论讨论应用层面的一些一致性内容。底层给我们提供了实现数据逻辑一致性的一些保证,但是由于上层应用多种多样,需求也各不相同,有些系统宁愿吞吐量降低也不允许不一致的情况发生,而有的系统则可以接受一定程度的不一致,但是需要保证一定的高可用和高并发(因此这些系统可能采没有实现事务功能的数据库系统)。因此,要实现整个应用的一致性,上层系统还需要注意很多东西。下面是几点引起应用不一致的几个常见场景。
2024-05-12 10:14:32
1074
2
原创 关于一致性,你该知道的事儿(上)
程序员最重要的一个工作就是把现实的需求场景进行建模,然后翻译成符合逻辑的、具有一致性规则的机器语言(让机器能认识,然后执行)。那一个个存储在各种介质(各种缓存、内存、磁盘等)中的对象要在各种触发、输入条件下(比如说用户请求)符合一致性原则(当然根据不同的需求场景有不同的一致性要求)。比如说,从A账户往B账户转账,那么转账之前AB账户的总额要和转账之后AB账户的总额一样,这就是逻辑,这就是一致性。
2024-05-12 10:13:09
699
原创 关于分布式分片,你该知道的事儿
复制技术讨论的是将同一份数据拷贝到多个节点,每个节点保存相同的数据内容,以冗余来提高可靠性。而数据库分片是和水平分表(将一个表里的行拆分成不同的表)有着一定关系的一种数据拆分方式,它讨论的是将数据进行划分(也有点类似于水平划分),划分的小块叫做逻辑分片(logical shards),然后分配到不同的节点(也做叫物理分片,physical shards)上去,这样每个节点负责处理一部分数据,可以达到提高读写性能的目的。为了避免混淆,下文中把逻辑分片称作分片,物理分片叫做物理节点。
2024-03-12 21:06:51
873
原创 关于分布式复制,你该知道的事儿
最一段时间又较为详细的看了DDIA的几个重点章节,对分布式相关技术有了一些新的理解和感悟,所以想以博客的形式系统的梳理、总结下来,希望可以便人便己。当前的互联网业务中大都用到了分布式系统。从上层的微服务业务,到下层的分布式数据库,应该这么说,稍微有点量的互联网业务都会使用分布式的相关技术来提升系统整体的性能和可用性。尤其是分布式数据库,作为业务中几乎必不可少的一个组件,为了达到高的扩展性和可用性, 都会或多或少的采用一些分布式的数据库系统。
2024-01-28 20:56:36
775
原创 抓包看TCP协议
在计算机的世界中,通信双方的交互一般要通过网络这个中间媒介。而这个中间体在为不同的通信实体之间进行信息传递之时,可能会采用不同的通信协议,为的就是更好,更清晰、更有效率的协调双方信息传递。在众多的通信协议中,有一些协议在实际的应用中被使用的越来越多,比如说我们今天要说的TCP协议。学计算机网络时,TCP协议作为一个大头部可难倒了不少的同学。
2023-07-09 17:58:34
1023
原创 关于guacamole项目中的一点感悟与理解
Guacamole 是基于 Web 的 VNC 客户端,使用它可以通过web浏览器访问远程服务器终端并进行操作。它的基本架构如下图所示。巧合之下,前段时间了解了项目中guacd模块有关的一些内容,重点关注的是这个模块启动过程中涉及网络IO、线程、进程的建立(网络并发模型)等,学习记录在此,希望可以便人便己。
2023-06-18 16:09:00
1473
原创 redis批处理任务,多线程 or pipeline
总的来说,一般情况下,如果要使用批处理任务的话,pipeline效率要更高点。当然马克思主义告诉我们要辩证的看待问题,实际问题还要实际分析,具体选用什么方式还得看业务需求。(好久没写博客了,略显生疏。这篇博客竟写了一天多╮(╯▽╰)╭)
2023-05-14 11:18:52
1098
2
原创 编程语言中引入外部代码、构建以及包管理机制的一些理解
编程语言中引入外部代码、构建以及包管理机制的一些理解前言一、引入外部代码的方式1.1 C/Cpp 中引入外部代码的方式1.1.1 关于cpp 20中的modules1.2 Java中引入外部代码的方式1.3 Go语言中引入外部代码的方式二、构建和包管理机制2.1 Cpp的构建和包管理机制2.2 Java的构建和包管理机制2.3 Go的构建和包管理机制后记参考前言前一段时间和同学讨论cpp如何引入第三方代码的事儿,涉及到一些模块化和包管理机制的内容。关于这部分的内容还不甚了解,以前就想做研究一下,就利用这
2022-05-05 09:48:19
565
原创 Cassandra - A Decentralized Structured Storage System 论文总结
Cassandra 论文总结前言一、Overview二、Data Model二、Partitioning三、Replication四、Consistency五、Persistence参考前言 前段时间写了一篇关于Dynamo 的论文笔记。最近两天看了看何其不少类似的Cassandra 论文,在此做个总结。希望可以便人便己。ps:因为这篇论文内容比较少,而且很多知识和Dynamo略有重复。所以大体的框架将不再采用和论文条目一样的格式,而是采用总结对比的形式,阐述重点内容。一、Overview
2022-01-02 11:09:49
13138
2
原创 论文笔记:Dynamo: Amazon’s Highly Available Key-value Store (下)
Dynamo: Amazon’s Highly Available Key-value Store (下)前言六、Implementation七、Experiences & Lessons Learned八、Conclusion参考前言这篇博文是上一篇博文的后续部分。重点大都在上篇中,为了完整性,这篇主要简单收个尾。六、Implementation这个部分简要介绍了一点实现的细节部分。说的是每个存储结点主要包括三个主要的组件:本地持久化存储引擎(local persistence en
2021-12-25 15:54:44
703
原创 论文笔记:Dynamo: Amazon’s Highly Available Key-value Store (上)
论文笔记:Dynamo: Amazon’s Highly Available Key-value Store (上)前言一、Abstract二、Introduction三、Background3.1 System Assumptions and Requirements3.2 Service Level Agreement (SLA)3.3 Design Considerations四、Related Work4.1 Peer to Peer System4.2 Distributed FIle Syste
2021-12-13 22:10:23
650
原创 重读《自顶向下》---关于计算机网络的一些新认识(下)
重读《自顶向下》---关于计算机网络的一些新认识(下)前言四、网络层五、数据链路层六、一个完整webPage请求流程参考前言 这篇是 “《重读自顶向下》—关于计算机网络的一些新认识” 的下篇,主要是网络层次中的IP层和数据链路层相关内容。主要的内容形式,是以问题或者重点条目的方式罗列。四、网络层 1、对于一个packet来说,其在网络层的表现有两个重点:(1)、packet在路由器内部的转发(forwarding)(2)、packet在路由器之间的传递(routing) 2、对于通用的
2021-10-31 22:07:01
344
原创 重读《自顶向下》---关于计算机网络的一些新认识(上)
重读自顶向下---关于计算机网络的一些新的认识前言一、概论二、应用层三、传输层参考前言 最近这段时间,抽空又重新读了一遍《Computer Networking - A Top-Down Approach》。过程中有不少新的认识,总结如下,希望可以便人便己。注:本文属于重读回顾性质的总结,很多理解都是来自于书籍。同时下面对网络的认识从表述形式上没有太多的章节规律(基本上是从各个网络层次这条主脉络),大都以条目形式列出, 如有阅读不适,请见谅 (/ω\)一、概论1、接入网的几种形式?(1) 拨
2021-10-05 11:00:35
605
原创 关于error handling的一些理解
一晃四五个月过去,发现好久没写博客了。一是因为最近这几个月事情比较多,二可能是因为懒了吧(毕竟动脑子的东西,相当耗能量和脑细胞),╮(╯▽╰)╭。不过还是要克服一下,尤其是还在段位比较低,还需要持续成长的过程中。对于程序员来说,错误处理是不可避免的,这次简单谈谈实际编程过程中的Error Handling。最后,以【5】中@大宽宽的回答作为一个总结吧。对于“正确的处理错误”?有两种不同的目标:要编写正确的代码。这里“正确”是指对任何设计上要处理的错误都必须设计处理流程。
2021-09-05 20:41:24
2365
原创 有关TCP 连接的退出,你该知道的事....(下)
有关TCP 连接的退出,你该知道的事....(下)前言二、数据传输阶段可能出现的异常三、断开连接阶段可能出现的异常参考前言上节中说到在连接建立的过程中出现的各种异常,这里接着说下面的部分。二、数据传输阶段可能出现的异常三、断开连接阶段可能出现的异常参考...
2021-03-14 10:07:25
1083
原创 有关TCP 连接的退出,你该知道的事....(上)
有关TCP 连接的退出,你该知道的事....前言参考前言ok,这幅图熟悉吧(如果不熟悉,那么你可能不太适合看这篇博文)。 正常的整个流程还是比较简单的,然而在现实生活中,生活并不是总是一帆风顺,异常情况还是要时常考虑的。ok,今天就来总结一波在socket编程中,有关tcp/ip 整个通信过程中的一些异常(尤其是异常退出)的情况。由于要讨论的情况比较多,有些乱 。为了方便、清晰起见,我打算按照流程从上到下挨着分析。因此,对于上图做了一点小改动。 废话不多说,策马崩腾,我们走起。一、参
2021-03-13 08:56:08
780
原创 关于同步机制的一些问题探究与总结(下)
关于同步机制的一些问题探究与总结(中)前言三、再探究条件变量的使用参考前言上篇介绍了一部分同步机制的机理,这篇接着来看其他的部分。三、再探究条件变量的使用这里主要是想结合陈硕大佬的【1】篇博客,简单谈谈条件变量的使用。正儿八经的条件变量应该是向下面这样使用:wait端lock(mutex);//注意condition 是条件,cond才是条件变量while(condition ==false ){ wait(&cond,&mutex);//}unlock();
2021-02-21 15:09:21
338
原创 关于同步机制的一些问题探究与总结(上)
关于同步机制的一些问题探究与总结前言一、 关于前言 最近在学习并发模型的时候,时常遇到不同任务之间需要同步的情况,有一些问题比较典型,自己也不是非常清楚,这次打算把这些问题单独抽离出来,好好探究、总结一波。记录在此,希望可以便人便己。这次探究的问题主要有以下内容:(1)、(2)、一、 关于...
2021-02-14 09:14:18
488
原创 关于网络编程中的一些小问题研究总结
关于网络编程中的一些小问题研究总结前言一、关于“惊群问题”二、关于socket网络编程中的reuseport参考前言原本打算继续往下总结第五个并发模型来着,但是觉得有些不妥。一是因为真正进入到Reactor并发模式,理解的还不是很深,总觉的缺点什么;二是自己原本实现的示例代码写的也不是很好,不是很有style。 所以想着先一般总结一些前面遇到的比较碎的知识点,然后一边研究【1】中的网络库实现,模仿一个简单的网络库,倒是在继续往下总结Reactor部分。这里先探究几个小问题:(1)、关于“惊群问题”。
2021-01-30 13:23:47
239
原创 双指针之滑动窗口总结
双指针之滑动窗口总结前言一、一个小总结二、一个小模板参考前言这个星期做的都是有关双指针和滑动窗口的有关leecode题。 同样有点小感悟,这里小小总结一下双指针中的滑动窗口部分。一、一个小总结对于给定字符串求其某个符合一定条件的子串的问题,最简单的方法就是暴力的两层循环,它的时间复杂度至少是O(N2)。 一般条件下,这样的复杂的往往都会因为超时而“over”。相对来说,如果能对暴力的两个指针的移动进行优化(或者裁剪,避免很多已经不可能的指针移动),很多题目都可以使用滑动窗口的方式来解决。
2021-01-17 20:20:24
512
原创 并发模型第肆讲-pre threaded模型
并发模型第肆讲-pre threaded模型前言一、 pre threaded模型1.1 介绍1.1.1 pre threaded 模型11.1.2 pre threaded 模型21.2 代码实现部分1.2.1 pre threaded 模型11.2.2 pre threaded 模型2二、总结2.1 几个小问题2.1.1 条件变量和信号量的区别。2.1.2 条件变量的使用为什么要带着一个互斥锁?2.1.3 阻塞在read、write等阻塞函数之上和阻塞在互斥锁和信号量等同步工具上有什么区别?2.
2021-01-14 11:35:16
579
原创 并发模型第叁讲-prefork
并发模型第叁讲-prefork前言一、prefork模型1.1 介绍1.1.1 prefork 模型11.1.2 prefork模型21.2 代码部分1.2.1 prefork1 模型代码部分1.2.2 prefork2模型代码部分二、总结2.1 几个小问题2.1.1 、关于几个或多个进程共享一个socket套接字进行 “通信”?2.1.2 关于不同进程之间传递描述符的讨论参考前言ok,快到放假了,心里有点“燥”。 写个博客清醒些…今天打算继续总结【1】中介绍的第三个并发模型-prefork。一
2021-01-13 14:47:57
954
原创 并发模型第贰讲-accept+thread
并发模型第贰讲-accept+thread前言一、accept+thread 模型1.1 基本介绍1.2 代码部分二、总结2.1 几个小问题2.2 accept+thread 模型小总结参考前言 今天总结下一个并发模型,利用线程来达到并发的效果。从某种方面来说,现在的操作系统给我们提供了两种方式来进行并发任务的执行,一种是进程,另一种是线程。 相对于前者来说,线程要更轻。所谓更轻,指的是线程的创建、销毁以及切换比起进程来要快速些。这里介绍accept+thread的并发模型方式。 一、accep
2021-01-11 19:11:33
398
原创 并发模型第壹讲-accept+fork
并发模型第壹讲-accept+fork前言一、accept+fork 模型1.1 介绍1.2 代码部分二、总结2.1 一些小问题参考前言这篇并发模型第一讲与上一篇隔离了好久,原因是中间有其他的事稍微搁置了这个部分的学习。 现在抽出空了,继续搞这个并发模型系列。 (* ^ ▽ ^ *) 。上次讲的迭代服务器从本质上来说,算不上并发的服务器,因为服务器端是串行为客户端服务的,如果上一个客户端没服务完,下一个客户就不能接入进来。这篇要说的是正儿八经的并发服务器: 按照【1】中的叫法:accept+fork
2021-01-10 22:40:38
403
原创 microsee 单调栈
microsee单调栈前言一、什么是单调栈?二、单调栈用于何处?三、举例3.1 题目描述3.2 解法三、总结参考前言单调栈,理解起来很简单,实现起来也不难,但是具体应用起来,还有点不容易。 刷leeCode的时候做到了好几个关于单调栈的题,简单总结一波,希望可以便人便己。一、什么是单调栈?首先单调栈是一种数据结构,更确切的说,它是一种栈。普通的栈结构,可以在任意时刻进行入栈、出栈(当然,入栈时要保证栈不满、出栈时栈不能空)。而对于单调栈来说,其需要保证栈内元素的有序性(递增、递减或者其他的规则),
2021-01-02 17:17:57
171
原创 动态规划总结-以Leecode股票问题(买股票的最佳时机)为例
动态规划总结-以Leecode股票问题(买股票的最佳时机)为例前言一、前面的总结二、股票问题(买股票的最佳时机I-IV)2.1 买股票的最佳时机I参考前言前一段时间以背包问题总结了一波动态规划的内容,最近这段时间又刷了Leecode中的股票问题,对动态规划又有了一些更深入的理解,这里再来总结一波,希望可以便人便己。一、前面的总结这次博客在前面进行总结,后面在进行举例分析。来个总分(总分总)类型。“动态规划算法,本质上算是一种搜索算法,只不过其自带剪枝功能.”。(不知道是哪位大神说的了).。 深奥
2020-12-25 20:15:05
317
1
原创 说说C++的几个默认函数
说说C++ 几个默认函数前言一、关于默认构造函数和拷贝构造函数1.1 构造函数的由来1.2 何时编译器会帮我们合成这些默认的构造函数?1.3 构造函数做哪些事?1.4 关于拷贝构造函数的一丢丢说明二、关于复制操作符三、关于析构函数总结参考前言这两天继续进阶C++的另一个模块:C++的几个默认函数。 我们知道,在构造一个类时,如果我们啥都不写,编译器会帮我们默认合成几个函数(准确点说,只有在某些情况下会帮我们合成,后文会说)。按照C11的标准,这些默认函数包括:(1)、构造函数(2)、移动构造函数(
2020-12-16 14:11:16
440
1
原创 瞅瞅C++中的对象模型(下)
瞅瞅C++中的对象模型(下)前言1.9 重复继承1.10 单一虚拟继承1.11 菱形继承二、总结参考前言上一篇讲了C++对象模型中的多重继承部分,这一篇该总结总结虚继承的部分了。1.9 重复继承1.10 单一虚拟继承1.11 菱形继承二、总结参考...
2020-12-13 22:35:21
287
原创 瞅瞅C++中的对象模型(中)
瞅瞅C++中的对象模型(中)前言1.4 一般继承无虚函数覆盖1.5 一般继承有虚函数覆盖1.6 多重继承无虚函数覆盖1.7 多重继承有虚函数覆盖参考前言上一篇讲了C++对象模型中的一部分,这里接着总结。1.4 一般继承无虚函数覆盖这里说的情况主要是子类继承了父类的虚函数,但没有改写父类的虚函数。 继承关系图如下:实验代码如下:Base 类和前一个相同。//Derive类:class Derive:public Base{public: Derive(int val = 0):d
2020-12-12 21:22:44
131
1
原创 瞅瞅C++中的对象模型(上)
瞅瞅C++中的多态前言一、内存布局问题参考前言看了《深度探索C++对象模型》中的Data 语义和Function语义,知识有些杂乱,需要梳理总结一波,所以这里总结总结C++中的多态机制,希望可以便人便己。以下的总结没有什么特别的章法,主要是按照我的理解分成了以下几个部分:(1)、内存布局问题(2)、类成员的访问效率问题(3)、…一、内存布局问题参考...
2020-12-12 10:28:54
148
原创 谈一谈类型转换(以C++为例)
谈一谈类型转换(以C++为例)前言一、关于类型转换,我想谈的事二、关于static_cast,我想谈的事三、关于typeid,我想谈的事3.1 什么是运行时类型?3.2 为什么需要运行时类型(RTTI)机制?3.3 typeid四、关于dynamic_cast,我想谈的事4.1 为什么需要dynamic_cast ?4.2 dynamic_cast 用法和概况五、关于总结,我想谈的事参考前言这两天在看《深度探索C++对象模型》时,又发现了自己的一个语言薄弱点,就是关于C++中类型的转换问题,尤其是涉
2020-11-15 21:30:54
340
原创 小窥数据库事务(下)
小窥数据库事务(下)前言3.2 事务的隔离级别3.2.1 读未提交(Read uncommitted)隔离级别3.2.2 读提交(Read committed)隔离级别3.2.3 可重复读(Repeatable read)隔离级别3.2.4 可串行化(Serializable)隔离级别四、总结参照前言上篇说到并发读写造成的一些影响,这儿接着上篇没说完的,咱继续讨论, 下面该说说对应具体的解决方案了。3.2 事务的隔离级别不管不顾,完全并发的事务读写可能会产生一些预料不到的问题,该如何解决呢?
2020-11-14 23:38:45
125
原创 小窥数据库事务(上)
小窥数据库事务一、前言二、事务的ACID三、事务的隔离级别四、总结参考一、前言上个星期看了DDIA 的第5章内容,有些东西懂了,有些东西还是没怎么看懂。 不过倒是有一点吸引住了我的兴趣,那就是对于事务的并发读写冲突的问题。 以前其实就有过类似的想法,两个进程或者线程并发读写会对最终的数据造成什么影响呢? 现在了解之后,这不就是数据库中的事务隔离嘛。 好好研究一波,记录在此,希望可以便人便己。二、事务的ACID三、事务的隔离级别四、总结参考...
2020-11-13 18:54:52
255
1
HelloOs相关资源
2020-08-15
PlayerTest.zip
2019-12-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人