自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2023-12-31 10:35:09 451

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

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

2019-09-03 16:02:07 1224

原创 云数据库AWS Aurora(一)

首先介绍下AWS一些组件。

2024-04-06 08:11:07 969

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

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

2024-01-07 15:53:46 1097

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

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

2023-11-26 20:04:52 471

原创 eclipse

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

2023-09-10 16:21:21 579

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

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

2023-03-26 19:17:37 528

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

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

2022-04-16 15:04:55 1430 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 2748

原创 浅谈CAP+ACID+BASE理论

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

2022-03-27 22:16:51 2112

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

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

2022-02-03 20:00:38 1096

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

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

2022-02-02 17:41:53 904

原创 Paxos Made Simple

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

2022-01-23 12:27:32 274

原创 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 2620

原创 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 446

原创 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 1035

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

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

2021-03-07 17:49:53 975

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

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

2020-11-26 19:51:57 1105

原创 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 14142

原创 tmux

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

2020-06-24 22:26:05 308

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

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

2020-02-11 20:20:43 574

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

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

2019-12-22 17:38:13 1304

原创 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 254 1

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

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

2019-09-17 12:09:16 266

原创 开发必备工具总结

开发必备工具为了提高开发效率,总结必备工具, 包括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 562 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 473

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

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

2014-11-07 15:17:32 469

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

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

2014-11-07 15:05:42 476

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

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

2014-11-03 20:19:10 440

原创 面试题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 450

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

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

2014-11-02 16:21:45 806

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

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

2014-11-01 21:45:36 694

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

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

2014-11-01 20:42:38 442

原创 面试题4 替换空格

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

2014-11-01 14:39:21 350

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

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

2014-11-01 13:40:08 432

原创 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 499

原创 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 707

原创 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 6947 3

原创 UVa_136 - Ugly Numbers

Ugly Numbers Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...shows the first 11 ugly numbers. By conventio

2014-10-27 19:35:43 446

原创 UVa_540 - Team Queue

Team Queue Queues and Priority Queues are data structures which are known to most computer scientists. TheTeam Queue, however, is not so well known, though it occurs often in everyday

2014-10-25 13:19:54 412

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关注的人

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