- 博客(80)
- 资源 (11)
- 收藏
- 关注
原创 从研究生毕业到工作三年感悟
一直想写个总结,持续有各种各样的事情,或者自己有点懈怠。最近稍微有点空,写个总结,回顾下这三年的感悟,然后也计划下未来一年要做的事情第一年: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
原创 关于对象存储的若干事
不同时代的硬件发展,会导致系统的架构巨大变化,比如早期的机械盘,数据库领域较多采用B+树的设计,SSD更适合LSM tree的设计,而目前硬件迭代很多,在很多新型硬件下,原来系统的设计或者假设就不存在了,比如超大内存。企业客户的一个最大需求在于,如何节约成本同时功能完善、性能齐全,传说的既要也要。一些情况不合理,但是有一些情况是可以通过新的设计来满足的,技术服务于业务需求云盘/对象存储各有优缺点,合适的搭配可以达到更好的效果,有点类似于将军指挥,士兵前线,各司其职的思想。
2024-01-07 15:53:46 1207
原创 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
数据结构——图的有关操作
2011-12-17
数据结构——二叉树有关操作程序
2011-12-17
C#入门经典.pdf
2011-10-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人