自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (11)
  • 收藏
  • 关注

原创 从研究生毕业到工作七年感悟

马上迎来2024年,在新的一年,期待多学习、多看书、多陪伴家人,继续坚持和努力!

2023-12-31 10:35:09 494

原创 从研究生毕业到工作三年感悟

一直想写个总结,持续有各种各样的事情,或者自己有点懈怠。最近稍微有点空,写个总结,回顾下这三年的感悟,然后也计划下未来一年要做的事情第一年:7月正式毕业后,开始加入蚂蚁金服做cpp开发。第一个比较大的感触就是:工作中做的东西和学校或者实习中还是存在一道较大的鸿沟。为什么这么说呢?正式入职前我做了很多项目,但是入职之后不管技术难点、代码量还是复杂度等等,发现还是有较大的差距,工作中会有明显的高...

2019-09-03 16:02:07 1298

原创 全局唯一ID——Snowflake算法

全局唯一性• 唯一 ID:结合时间戳、数据中心 ID、机器 ID 和序列号,确保在分布式系统中生成的 ID 全局唯一。高并发和高性能• 本地生成:ID 在本地生成,无需网络通信,延迟极低。• 高并发:每毫秒可生成 4096 个 ID,支持高并发需求。趋势递增性• 按时间排序:ID 包含时间戳,整体上是趋势递增的,有利于数据库索引和日志排序。可扩展性• 分布式部署:支持多数据中心和多机器部署,方便系统水平扩展。简单易用,开源常见实现。

2024-10-11 12:08:55 920

原创 RocksDB系列一:基本概念

Write-Ahead Log(WAL)是一种类似于数据库日志的机制,用于故障和异常恢复。

2024-09-17 20:06:18 1130

原创 云数据库AWS Aurora(一)

首先介绍下AWS一些组件。

2024-04-06 08:11:07 1115

原创 关于对象存储的若干事

不同时代的硬件发展,会导致系统的架构巨大变化,比如早期的机械盘,数据库领域较多采用B+树的设计,SSD更适合LSM tree的设计,而目前硬件迭代很多,在很多新型硬件下,原来系统的设计或者假设就不存在了,比如超大内存。企业客户的一个最大需求在于,如何节约成本同时功能完善、性能齐全,传说的既要也要。一些情况不合理,但是有一些情况是可以通过新的设计来满足的,技术服务于业务需求云盘/对象存储各有优缺点,合适的搭配可以达到更好的效果,有点类似于将军指挥,士兵前线,各司其职的思想。

2024-01-07 15:53:46 1207

原创 从微软Cosmos DB浅谈一致性模型

从微软Cosmos DB浅谈一致性模型

2023-11-26 20:04:52 652

原创 eclipse

F4: 继承树F3: 查看变量、方法、类的定义, 跳到光标所在标识符的定义代码。(Ctrl+左键)在工作空间中查找引用了光标所在标识符的位置。与F3相反的快捷键。当按类定义进行阅读时,当前类方法或者函数在被哪些地方调用切换.h/.cpp文件: 打开Open Resource打开搜索前移/后移,通过代码跳转后,可以通过该移动。

2023-09-10 16:21:21 607

原创 分布式数据库 PolarDB-X: An Elastic Distributed Relational Database for Cloud-Native Applications

云计算正在蓬勃发展,这促使新一代数据库系统需要适应云环境。云原生数据库的发展揭示了三个趋势。第一个趋势是采用多数据中心部署,以便在任何单个站点宕机时仍能正常运行。(可用性和服务连续性要求)第二个趋势是将计算和存储资源分离,即存算分离,以实现更高的弹性和可伸缩性。最后一个趋势,是支持 HTAP,以消除异构数据库中的数据冗余和系统复杂性。为满足这些趋势,该论文设计了名为 PolarDB-X 的分布式关系型数据库,该数据库建立在云原生数据库 PolarDB 之上。

2023-03-26 19:17:37 677

原创 浅谈大规模C++工程中一些疑难杂症及解决方案

疑难杂症笔者写C++代码好多年,特别近几年在写大规模分布式系统相关,会遇到最头疼的几类问题,特别是新写大模块,或者重构功能基本都会遇到,如下:内存泄漏内存写坏死锁并发导致状态不对或者结果错误…上述几类问题,还可能互相夹杂影响,比如因为并发场景考虑不周全,任务引用计数获取和变化不原子,进而导致内存无法释放,结果不正确。面对大规模C++工程,总会遇到上述问题,记录一些总结,方便查阅以及后续补充问题内存泄漏检测工具类:比如...

2022-04-16 15:04:55 1511 1

原创 分布式文件系统-Facebook haystack

0、分布式文件系统分布式文件系统很常见,主要功能:存储文档、视频、图像等作为分布式表格系统的存储层这类系统很多,比如:国外系统:GFS-(Google File System)、haystack(Fackbook图片存储系统)国内:淘宝TFS、这些系统架构和设计很多都相似,同时也有细微之处有许多区别,最近因为需要给一个朋友讲解haystack,重读了haystack,记录做下总结一、背景Facebook在2012年发布了《Finding a needle in Haystack: Fa.

2022-04-04 21:41:29 2923

原创 浅谈CAP+ACID+BASE理论

1. 背景在大数据存储系统或者各类分布式系统,为了增加系统高可用性,往往会将同一数据存储多份副本。常规做法是三副本,数据复制成多份,带来了很多好处:高可用性:即使因为机器故障、宕机等原因损失一副本,仍然有其他二个副本提供服务增加读操作的并发性:比如对于三副本,常用选举算法选出leader-支持读写, 其他两个副本作为Follower可以支持读操作带来上述好处的同时,也引入了很多问题,比如:同一数据存在多个副本,在并发的众多客户端读/写请求下,如何维护数据一致性三副本如何复制数据?在网络分区异常

2022-03-27 22:16:51 2162

原创 并发/并行编程与分布式系统(2)

一、线程同步本节以线程模型为例,总结常见线程同步方式。对于变量而言,从范围可以简单分为两种:线程局部的变量,比如__thread修饰,只被该线程读取或者修改,不存在并发问题,因此也不存在任何一致性问题非线程局部的变量,如果都是只读的,本身即使多线程,也不存在一致性问题;当同时涉及到写,才需要某种方式来对这些线程进行同步,保证不同的线程访问变量不会获取到无效的值,同时要解决读写、写读、写写冲突。比如对于写读场景,当一个线程A修改一个变量,另外存在一个线程B需要读取该变量。如果线程A写操作多于一个存

2022-02-03 20:00:38 1127

原创 并发/并行编程与分布式系统(1)

一、介绍现代复杂的软件系统,使用了单台设备/机器或者多台机器资源,包括内存、CPU、IO、存储等等。比如对于大型的数据分析系统,关注以下几个维度:1. 分布式:容错性、Replication、负载均衡和调度、Consistency等2. 并行/并发:并行-并发算法、支持并发的数据结构、同步/异步等等通过分布式/并发/并行编程技术,核心目的就是为了获取更快的计算速度。本文做一些知识的总结二、体系结构2.1 von Neumann Architecture冯·诺依曼架构,是一种将程序指令存储器和

2022-02-02 17:41:53 961

原创 Paxos Made Simple

简介Paxos算法是Leslie Lamport在1990提出一个基于消息通信/传递的一致性算法,用于解决在分布式环境中(存在机器宕机、网络异常等问题),如何快速且正确的在集群内部对某个数据的值达成一致。算法特点:高度容错性、且不会破坏系统的一致性等Paxos算法历史Paxos的历史很有意思:最早在1982年,Lamport在论文The byzantine generals problem,就提出了一种计算机容错理论,1990年,Lamport提出了一个解决一致性问题的方案,同时给出了数学证明。

2022-01-23 12:27:32 306

原创 NFS nfs4_reclaim_open_state lock reclaim failed

背景最近看了比较奇怪的问题,挂载共享了一个NFS,进程会持久化数据到NFS,但是突然开始有一个任务的进度都不动了,查看日志发现是lock报错资源不可用排查之前怀疑有并发的场景,导致资源卡住不释放,导致其他lock无法成功看调度没什么问题,通过看日志,看到在某个时间,全部lock失败,不太像并发dmesg -T| grep NFSsudo grep NFS /var/log/messages都看到大量NFS nfs4_reclaim_open_state lock reclaim failed

2021-07-15 17:27:42 2909

原创 Linux dlopen加载rocksdb.so coredump

一、背景最近使用rocksdb遇到一个比较奇怪的问题,在虚拟机部署一个应用,通过dlopen加载rocksdb动态库会core dump,但是在其他环境都不可复现二、原因gdb看堆栈比较奇怪__static_initialization_and_destuction --rocksdb.so同时看到Illegal instructions引起的signal怀疑环境有点问题rocksdbrocksdb的官方文档——installBy default the binary we prod

2021-07-07 11:53:24 518

原创 gcore调试一个并发问题

一、现象最近测试发现了任务卡住的问题,比较有意思,记录一下现象简单描述下:数据最终无法输出通过日志发现有一个模块A任务统计长期增长,但是消费的统计长期不动,怀疑卡住了pstack进程,确认卡住了,如下:1621 Thread 2 (Thread 0x7f0ac81c8700 (LWP 26481)):1622 #0 0x00007f0ccf785d62 in pthread_cond_timedwait@@GLIBC_2.3.2 () from /lib64/libpthread.so.

2021-03-16 11:12:24 1090

原创 gdb调试二进制[依赖动态库]

记录下gdb调试二进制依赖的动态库,步骤:指定环境变量:export LD_LIBRARY_PATH=./path…gdb main(二进制进程)指定动态库代码路径:dir /home/…[指定代码路径]设置二进制运行依赖参数(如果存在的话): set args …加断点:b *.cpp:100, 这里断点可以打到动态库的文件中r运行...

2021-03-07 17:49:53 1067

原创 记一次排查内存占用逐渐增长问题

一、背景最近改了好多代码做优化,然后线下测试发现很不符合预期,表现如下:跑一段时间,内存占用越来越大一种怀疑内存泄漏,查询了一下午,终于定位,特别写下mark下二、排查简述任务回收内存是通过异步线程池基于监控项,发现异步线程池堆积任务持续增加,因此导致内存增大,不能及时释放基于现有监控项+撸了几遍代码,很难找到为啥堆积,继续丰富监控项,详细描述了到底堆积了什么任务,类似如下:taskA多少个,taskB多少,taskC多少个。。。发现其中A堆积最大,占用总任务个数的百分95。继续看代码,

2020-11-26 19:51:57 1227

原创 cannot allocate memory in static TLS block问题记录

一、背景最近发了一个新版本,服务升级后,加载动态库时候抛出了一个很奇怪的报错“cannot allocate memory in static TLS block”,导致服务启动失败,但是在线下测试是没任何问题的。在解决问题后,二、TLS2.1 定义TLS:全程是Thread Local Storage,即线程局部存储:在多线程中,存储和维护一些线程相关的数据,即线程之间隔离,因此也就没有多线程之间资源竞争问题。目的:因为数据线程局部,不需要锁来保护,可以利用这特性达到优化性能的目的。2.2 实

2020-10-25 17:49:23 15548

原创 tmux

1. 背景互联网公司,很多项目可能需要基于服务器开发,这时候面对一个问题:打开多个代码文件,和服务器的链接断开,下次重新打开一遍?存在多个窗口怎么恢复?比如开发的、测试的、压测环境~~~每次重新恢复是太耗时了…2. tmux简介tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件。3. 常用命令tmux #开启tmuxtmux ls #列出会话tmux attach -t #进入某个会话tmux kill-session -t <session

2020-06-24 22:26:05 391

原创 c++ 排查一次内存错乱问题

背景最近工程项目实现个功能,出现了BUG,记录一下场景简述如下:有个模块,一组线程池来做类似任务的格式化操作。每个任务包含若干条数据。但是发现跑一段时间,会出现输出数据错乱,或者数据校验不正确的问题,而且每次位置都不相同,偶尔core的位置也不相同。初步看了下,怀疑是内存错乱了或者内存写坏了分析初步review了新加的代码应该没问题的,同时分析代码逻辑,怀疑数据错乱一定发生在了格式化...

2020-02-11 20:20:43 627

原创 C++-如何排查内存写坏

C++-如何排查内存写坏问题内存写坏问题mprotect函数原型注意事项mmap函数原型例子内存写坏问题c++内存写坏问题,有很多原因造成,包括野指针、指针越界、并发场景等,出现很难排查,有很多内存分析工具可以使用,比如Valgrind1等很多方式本文总结一种容易排查定位的方法:mprotect+堆栈调用打印方式,从而定位到哪里写坏内存mprotectmprotect是一种系统调用,m...

2019-12-22 17:38:13 1412

原创 vim小结

1 vimzi 展开和折叠代码批量在所有行添加字符 control + v选中所有行,大写I2 vim版本一些操作系统版本比较低,而安装插件需要依赖比较高的vim版本,比如查看目录结构的scrooloose/nerdtree, 需要保证vim版本大于7.3.可以直接下载最新的vim分支,直接编译出新版本二进制,然后放到环境变量cd vim//make distclean # i...

2019-10-05 23:32:08 288 1

原创 论如何高效并发工作-屏幕划分

编码的过程中,外接显示器是一个好的方式,建议1个~2个,加上笔记本可以提高效率,同时单个显示器,如果能够有效屏幕划分,也可以显著提高效率。比如当网页打开太多;或者想同时查看文档或者google结果等等, 单个屏幕支持划分后,可以有效提高处理效率分屏几种方式如下:Linux服务器利用tmux来分成多个屏幕Mac自带的split Vie来分参考官网 https://support.apple...

2019-09-17 12:09:16 289

原创 开发必备工具总结

开发必备工具为了提高开发效率,总结必备工具, 包括git, vim, tmux、Linux常用工具以及内存泄漏检测工具等等。待逐渐补充1. gitgit以及svn都是版本管理工具。现总结git如下 1. 配置个人信息 git config –global user.email “*” git config –global user.name “*” 2. 配置颜色 git...

2018-01-08 13:31:11 609 1

原创 UVa_725 - Division

Division Write a program that finds and displays all pairs of 5-digit numbers thatbetween them use the digits0 through 9 once each, such that thefirst number divided by the second is equ

2015-01-21 00:16:35 503

原创 面试题9 斐波那契数列

题目描述:                        大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:输入:                        输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1输出:                        对应每个测试案例,输出第n

2014-11-07 15:17:32 491

原创 面试题8 旋转数组的最小数字

题目描述:                        把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。输入:                        输入可能包含多个测试样例,对于每个测试案例,输入的第一行为

2014-11-07 15:05:42 498

原创 面试题7 用两个栈实现队列

题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作。队列中的元素为int类型。输入: 每个输入文件包含一个测试样例。对于每个测试样例,第一行输入一个n(1接下来的n行,每行输入一个队列操作:1. PUSH X 向队列中push一个整数x(x>=0)2. POP 从队列中pop一个数。输出: 对应每个测试案例,打印所有pop操作

2014-11-03 20:19:10 466

原创 面试题6 重建二叉树

题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。输入: 输入可能包含多个测试样例,对于每个测试案例,输入的第一行为一个整数n(1输入的第二行包括n个

2014-11-03 20:14:47 468

原创 Linux下运行多线程——undefined reference to 'pthread_create'问题两种解决方法

/usr/lib/i386-linux-gnu/libpthread.so

2014-11-02 16:21:45 884

原创 一道关于fork()的面试题

昨天师兄一个朋友找工作,帮#include #include int main(){ fork(); fork() && fork() || fork(); printf("*"); return 0;}

2014-11-01 21:45:36 717

原创 面试题5 从头到尾打印链表

题目描述: 输入一个链表,从尾到头打印链表每个节点的值。输入: 每个输入文件仅包含一组测试样例。每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。样例输入: 1

2014-11-01 20:42:38 464

原创 面试题4 替换空格

题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入: 每个输入文件仅包含一组测试样例。对于每组测试案例,输入一行代表要处理的字符串。输出: 对应每个测试案例,出经过处理后的字符串。样例输入: We Are Happy

2014-11-01 14:39:21 370

原创 面试题3 二维数组中的查找

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入: 输入可能包含多个测试样例,对于每个测试案例,输入的第一行为两个整数m和n(1输入的第二行包括一个整数t(1接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所

2014-11-01 13:40:08 457

原创 fcntl()函数

1.   头文件和函数格式#include int fcntl(int fd, int cmd,.../*int arg*/);  返回:如果成功则取决于cmd;如果出错,则返回-12.   重要的操作每个描述字都有一组由F_GETFL命令获取或者由F_SETFL命令设置的文件标志。影响套接口的两个标志是:O_NONBLO

2014-10-31 18:26:55 540

原创 UVa_1587 - Box

ooden boxes of different sizesto pack machinery for delivery to the customers. Each boxis a rectangular parallelepiped. Ivan uses six rectangular wooden palletsto make a box. Each pallet is used for o

2014-10-29 21:02:24 734

原创 UVa_1592 - Database

y of relational databases. Table in the relational database consists of values that are arranged in rows and columns.There are different normal forms that database may adhere to. Normal forms are

2014-10-28 20:31:30 7031 3

Java编程思想 第4版 习题答案

Java编程思想 第4版 习题答案

2013-10-25

数据结构——图的有关操作

一)建立一个无向图+遍历+插入 (1)以数组表示法作为存储结构,从键盘依次输入顶点数、弧数与各弧信息建立一个无向图; (2)对(1)中生成的无向图进行广度优先遍历并打印结果; (3)向(1)中生成的无向图插入一条新弧并打印结果; 二)建立一个有向图+遍历+插入+删除 (1)以邻接表作为图的存储结构,从键盘输入图的顶点与弧的信息建立一个有向图; (2)对(1)中生成的有向图进行深度优先遍历并打印结果; (3)在(1)中生成的有向图中,分别插入与删除一条弧并打印其结果; (4)在(1)中生成的有向图中,分别插入与删除一个顶点并打印结果; (5) 在(1)中生成的有向图中,各顶点的入度与出度并打印结果; 三)基本应用题 (1)编写算法,判断图中指定的两个顶点是否连通。 (2)编写算法,判断图的连通性。如果不连通,求连通分量的个数 (3)编写算法,判断图中任意两个顶点的连通性 (4)编写算法,判断图中是否存在回路。 (5)实现图的广度优先搜索算法。 四)高级应用题 (1)实现Prim算法 (2)实现Kruskal算法 (3)实现迪杰斯特拉算法 (4)实现拓扑排序算法 (5)实现关键路径算法

2011-12-17

数据结构——二叉树有关操作程序

一)建立二叉树+判空+遍历 (1)以二叉链表作为存储结构,从键盘以先序次序输入各个结点(空格字符表示空树)建立一棵二叉树; (2)对(1)中生成的二叉树进行判空; (3)对(1)中生成的二叉树进行遍历(分别实现先序遍历、中序遍历、后序遍历); (4) 打印输出(3)的遍历结果; 二)二叉树的一些基本操作 (1)返回二叉树的根; (2)返回树中某个结点的左孩子,若无则返回“空”; (3)返回树中某个结点的双亲,如果是根结点,则返回“空”; 三) 在(二)的基础上,求二叉树的深度+结点数 (1)求出二叉树的深度并显示; (2)求出二叉树的结点总数并显示; (3)求叶子结点总数并显示。 四)应用题 (1)编制一个递归算法,求一个二叉树中位于先序序列中第k个位置的结点的值。 (2)编制一个递归算法,将一个二叉树中所有结点的左、右子树相互互换。 (3)编写算法,将一个二叉树的所有叶子结点按单链表串联起来。 (4)编写算法,按层序打印二叉树的所有结点。

2011-12-17

数据结构广义表所有操作

数据结构广义表的所有操作;以及广义表的一些扩展应用,比如打印指定层次的原子,按层打印所有的原子

2011-10-31

C#入门经典.pdf

C#入门经典.pdf 该书将全面介绍C#编程的所有知识,共分为5篇:第1篇是C#语言:介绍了C#语言的所有内容,从基础知识到面向对象的技术,应有尽有。第2篇是Windows编程:介绍如何用C#编写Windows应用程序,如何部署它们。第3篇是Web编程:描述Web应用程序的开发、Web服务和Web应用程序的部署。第4篇是数据访问:介绍在应用程序中如何使用数据,包括存储在硬盘文件上的数据、以XML格式存储的数据和数据库中的数据。第5篇是其他技术:讲述使用C#和.NET Framework的一些额外方式,包括程序集、属性、XML文档、网络和GDI+图形编程.

2011-10-07

Java\J2EE电子商务系统开发从入门到精通.pdf

Java\J2EE电子商务系统开发从入门到精通:基于Struts和Hibernate技术实现.pdf )

2011-10-07

李春葆:数据结构习题与解析(C语言版)

数据结构习题与解析(C语言版),文件是关于C语言方面的,里面有很多经典的程序,希望大家能用的上,尤其上考计算机类研究生的同学

2011-10-06

ACM滑雪问题详解

ACM滑雪问题详解(PDF),以及代码和算法介绍!!

2011-10-06

空空如也

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

TA关注的人

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