自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 TiDB 优化方案和常见问题

一 关于tidb的排序 1. 按照字节序的顺序扫描的效率是比较高的; 2. 连续的行大概率会存储在同一台机器的邻近位置,每次批量的读取和写入的效率会高; 3. 索引是有序的(主键也是一种索引),一行的每一列的索引都会占用一个 KV Pair,比如,某个表除了主键有 3 个索引,那么在这...

2020-05-24 12:57:33 55 0

原创 dynamic_cast背着你偷偷做了什么
原力计划

c++常用的四中转换类型我们都很清楚,分别是下面四中   1const_cast  const_cast<目标类型>(标识符):目标类型只能是指针或者引用2static_cast 类似C风格的强制转换,进行无条件转换,静态类型转换: 1)基类和子类之间的转换:其中子类指针转换为父类...

2020-05-10 13:11:09 57 0

原创 c++后台开发知识点收藏

收藏一些后台开发相关的知识点 1 linux系统 https://blog.csdn.net/ThinkWon/article/details/104588679 2mysql数据库https://thinkwon.blog.csdn.net/article/details/104778621...

2020-04-10 15:51:48 66 2

原创 c++ 空基类优化

我们知道c++中一个空类的大小为1个字节,那么如果一个空类作为基类或者成员对象的时候会怎样呢,是不是还是一定占用1个字节呢? c++中为保证同一类型的不同对象地址始终有别,要求任何对象或成员子对象,即使该类型是空的类类型(即没有非静态数据成员的 class 或 struct)也是如此。然而,...

2020-03-25 21:15:56 43 0

原创 unreal 虚幻引擎学习资料

一 入门资料 1 最重要的学习途径,官方文档,这个一定要看 :unreal 官方文档中文版 2 游戏蛮牛相关资料的整理 :游戏蛮牛 - 手册 - 虚幻引擎4 | UnrealEngine4 二 深入了解虚幻底层原理 1 因为c++自身是没有垃圾回收的,所有虚幻4自己实现了一套垃圾回收机制 ...

2020-03-21 23:05:46 133 0

原创 基于skiplist实现高效的排行算法(redis zset)

  首先什么是skiplist,在往下看之前先看一下下面几篇文章吧   我之前写的一篇关于skipList的文章     深入理解skiplist 了解skiplist后我们说道排行榜,排行榜实际上就是一种排序算法,常见的排序算法就是二叉树系列,红黑树,最小堆,最大堆等等,虽然他们可以...

2020-01-12 22:26:28 146 0

原创 记一个被自己忽略的知识点(指针本身的长度到底由什么决定)

通常我们计算指针的长度会用到sizeof(void*),我一直片面的任务指针的大小和int类型的大小是一样的,但是在一次core dump崩溃调试的过程中看到一个指针的长度竟然是64位的就以为指针是个野指针,但是最后发现问题不在那里,指针是正确的,这我才进一步的了解了指针大小到底是由系统什么因素决...

2019-12-30 11:39:29 88 0

原创 用ECS架构完美实现帧同步

很早之前写过一篇关于网络游戏同步方案的文章:网络游戏网络同步方案的选择,里面谈到帧同步,这里就谈一下帧同步的一种实现方式吧,主要还是以收集资料为主。 首先说一下帧同步最简单的一种实现,很简单就是服务器对客户端上行的所有指令不做任何计算直接转发给所有相关的客户端,客户端在自己本地根据服务器转...

2019-11-17 16:36:42 535 0

原创 MySQL InnoDB索引原理详解

1 简介 索引(Index)是帮助MySQL高效获取数据的数据结构。我们知道,数据库查询是数据库的最主要功能之一。但每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,...

2019-10-20 18:10:09 61 0

原创 重载new和delete来检测内存泄漏导致placement new操作符不能使用解决办法

为了检测内存泄露,重载new和delete来检测内存泄漏结果导致placement new操作符不能使用。  void *operator new(size_t size, const char *file, unsigned int line) { void *ptr = mallo...

2019-10-07 14:03:20 61 0

原创 单线程读单线程写一个变量是否一定要加锁

  单线程读单线程写一个变量是否需要加锁,刚毕业的时候我会有这样的想法:一个线程只读并没有改变变量的值并不会有两个线程同时写一个变量产生竞态,所以不用加锁,但是工作中长者给我指导都是多线程必须加锁,所以我也没有深究这个问题,从来没有想过为什么。   过了一段时间后,了解到原子性这个概念,了解到虽...

2019-08-25 21:50:21 689 0

原创 15分钟了解TiDB

由于目前的项目把mysql换成了TiDb,所以特意来了解下tidb。其实也不能说换,由于tidb和mysql几乎完全兼容,所以我们的程序没有任何改动就完成了数据库从mysql到TiDb的转换。 一 TiDb简介 TiDB 是 PingCAP 公司受 Google Spanner...

2019-07-13 22:21:49 120126 18

原创 从零开始搭建tidb集群

参考文章:TiDB-Ansible 部署方案 很早就想亲手搭一下tidb集群,昨天搞了一下午结果失败了(因为自己买的机器配置太低,还有自己配置环境的时候有些配置没配好),今天把之前的机器删掉又重新申请机器按照文档把所有的步骤重新走了一遍,总算成功了。 一 准备机器 首先看一下官方的配置...

2019-07-05 21:05:57 5923 2

原创 关于智能指针的一个疑问

c++中最大的问题就是内存管理问题也就是指针,当一个指针在程序中到处传的时候,经常会出现多次销毁,或者用到一个已经被释放的指针(野指针),特别是在多线程中这种情况更加难以处理,根本不知道什么时候会在哪个线程中被释放,虽然c++11中的智能指针有效的解决了这个问题,在很大程度上简化了内存管理的难度,...

2019-06-22 13:07:09 640 0

原创 redis 的持久化机制

之前去面试,问到redis的持久化问题,虽然知道一点但是有一些细节还不是很清楚,随意这里记录下有关redis 的持久化的问题,redis跟memcached类似,都是内存数据库,不过redis支持数据持久化,也就是说redis可以将内存中的数据同步到磁盘来持久化,以确保redis 的数据安全。 ...

2019-05-19 14:15:12 114 0

原创 认识分布式系统etcd

一 etcd的作用 etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。etcd是由CoreOS开发并维护的,灵感来自于 ZooKeeper 和 Doozer,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。Raft是一个来自Stanford的新的一致性算...

2019-04-21 21:51:57 1350 0

原创 C++内存模型和原子类型操作

摘自 《C++并发编程(中文版) 》第5章 C++内存模型和原子类型操作 推荐阅读(强烈推荐):https://zh.cppreference.com/w/cpp/atomic/memory_order 这里从两方面来讲内存模型: 一方面是基本结构, 这个结构奠定了与内存相关的基础; ...

2019-03-10 14:02:24 416 0

原创 进程间对共享内存同步的三种方式

    如果我们有多个进程访问一块共享内存,有时候我们为了保证数据的一致我们不得不对共享内存中的数据采取同步措施。对于共享内存的同步基本上有以下三种方式。    一 记录锁(文件锁)       我们首先来看记录锁,记录锁的功能是当一个进程正在读或者修改文件的某一个部分时,它可以阻止其他进程修...

2019-02-24 18:26:10 2357 0

原创 揭开内存屏障的面纱

推荐阅读(强烈推荐)c++标准库内存屏障的使用 一 什么是内存屏障 内存屏障(英语:Memory barrier),也称内存栅栏,内存栅障,屏障指令等,是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作...

2019-01-30 19:16:37 1277 0

原创 c++ 线程局部变量thread_local

    c++11 中添加了新的关键字thread_local,用来声明新的存储期(线程存储期变量),即线程局部变量。    存储类指定符是名称声明语法的 decl-specifier-seq 的一部分。与名称的作用域一同,它们控制名称的二个独立属性:其“存储期”与其“链接”。auto - 自动...

2019-01-20 17:25:38 2936 0

原创 linux spin_lock(自旋锁)semaphore(信号量)和mutex(互斥锁)的区别

1 spin_lock        自旋锁的实现是为了保护一段短小的临界区操作代码,保证这个临界区的操作是原子的,从而避免并发的竞争冒险。在Linux内核中,自旋锁通常用于包含内核数据结构的操作,你可以看到在许多内核数据结构中都嵌入有spinlock,这些大部分就是用于保证它自身被操作的原子性...

2019-01-13 22:03:32 883 0

原创 关于smart pointers(智能指针)你必须知道的事

1  shared_ptr禁止了隐式转换(explict),不能把一个指针赋值给shared_ptr. 例:shared_ptr&lt;string&gt; pNico = new string("nico"); 2 make_shared初始化shared_...

2018-12-16 19:05:29 272 0

原创 用jemalloc代替glibc默认tcmalloc进一步提升服务器性能和负载

     启动redis时,无意中看到redis的启动信息有一个jemalloc的版本信息,处于好奇了解了一下,它是一个进一步提升服务器负载和性能的神器。 一  Ptmalloc       Linux 系统在装载 elf 格式的程序文件时,会调用 loader 把可执行文件中的各个段依次载入...

2018-11-04 19:03:11 1493 0

原创 服务器高并发优化配置笔记

1 查看当前TCP连接的状态和对应的连接数量:       netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 2 初步优化(提升服务器的负载能力之外,还能够防御小流量程度的DoS、CC和S...

2018-10-21 16:50:15 360 0

原创 分布式锁实现原理

一 首先我们来回顾下普通锁的种类。 1 自旋锁        自旋锁如果已经被别的线程获取,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,”自旋”一词就是因此而得名。自旋锁是一种非阻塞锁,也就是说,如果某线程需要获取自旋锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的...

2018-09-10 00:31:20 956 0

原创 当虚析构函数遇上智能指针

   首先我们知道,当一个父类指针指向一个子类对象的时候,如果析构函数为非虚函数的话那么此时对象只会释放父类对象的内存,而子类对象部分就会放生内存泄漏,换句话说就是只会调用父类的构造函数不会调用子类的构造函数。原因很简单,你通过一个父类指针指向了一个子类对象,在调用析构函数的时候此时指针类型为父类...

2018-07-22 22:59:57 1114 0

原创 c++11 编译时类型判断

    c++11中有一个特殊的模板类integral_constant,首先看实现: template&lt;typename _Tp, _Tp __v&gt; struct integral_constant { static constexpr ...

2018-06-24 18:26:46 2415 0

原创 shared_ptr的线程安全性

    shared_ptr的出现在某种程度上解放了c++程序员,c++11标准原生的支持了并发编程,在并发编程中shared_ptr的线程安全问题如何保证呢?先撇开shared_ptr对象的线程安全性,先看shared_ptr本身的线程安全问题。    我们知道,shared_ptr的底层实现原...

2018-05-01 17:47:06 3392 0

原创 c++11 新特性一览

    下面我们简单的对c++11的特性进行一个整体的了解,这里我只根据自己平时所用的和所了解的,简单介绍其作用,具体的感兴趣的可以搜索一下关键字,问度娘进行进一步的了解。  long long 类型:新增的数据类型  列表初始化 : 允许变量用{}初始化,对于stl容器很方便  nullptr常...

2018-04-22 20:50:38 329 0

原创 copy-on-write 在c++ std::string中的应用

一 简介 Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略.总的来说,COW通过浅拷贝(shallow copy)只复制...

2018-04-07 17:48:56 1776 0

原创 两年多里自己都干了什么?

       2016年7月份毕业,算上实习的几个月时间,工作两年多快三年了,自己都干了什么,回顾自己的职业生涯,大部分的工作都在在从事游戏服务器的开发。虽说有时候加班会很严重,但是熬过来了。但是想想过去的加班大部分的时间不过是在陪别人加班而已,作为一个初入职场的学生,自己解决为题的能力实在有限。...

2018-03-11 15:01:39 942 2

原创 超有价值的Golang文章总结

语言规范 Close Channels Gracefully in Golang: 如何优雅地关闭channel? Compile-time assertions in Go: 编译时断言 Why are slices sometimes altered when pas...

2018-01-27 12:42:06 8862 3

原创 libevent如何管理event

一 event简介      libevent是以event为核心的reactor模型高性能的网络库,事件类型为io时间,定时时间和信号signal事件三种。libevent巧妙的将三种时间统一起来处理极大的简化了网络程序的复杂度。那么libevent是如何管理这三种event呢? str...

2018-01-21 19:30:40 1515 0

原创 《魂斗罗:归来》子弹中没中,没你想得那么简单!

无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作。除了IP,剧情,对工程师而言,《魂斗罗:归来》更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没你想得那么简单!      客户端高级工程师聂鹏和田亚涛本周在《论道》开聊,小小子弹命中的大问题! 移动同...

2018-01-15 13:41:45 870 0

原创 memcached分布式缓存

一 缓存     当一个系统的数据io性能遇到瓶颈的时候,我们常用的手段是缓存,缓存的本质是一个内存hash表,数据缓存以一对key,value的形式存储在hash表中,其读写的时间复杂度为O(1),但是我们也要合理的使用缓存,否则会适得其反。那么什么样的数据要做缓存?如何合理的使用缓存呢? ...

2018-01-07 13:04:47 728 0

原创 c++拷贝控制

拷贝作为内存管理的最常的行为操作,c++中很多隐藏的内存问题和bug都是由于不正确的拷贝行为引发的,这里我们以最基本的拷贝构造函数,拷贝赋值运算符和析构函数作为切入点来谈一谈如何正确的进行c++的拷贝控制。   拷贝构造函数:如果一个构造函数的第一个参数时自身的引用(通常是const引用),且任何...

2017-12-23 12:28:15 1272 0

原创 C++模板元编程

所谓元编程就是编写直接生成或操纵程序的程序,C++ 模板给 C++ 语言提供了元编程的能力,模板使 C++ 编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对 C++ 模板的使用可能不是很频繁,大致限于泛型编程,但一些系统级的代码,尤其是对通用...

2017-12-17 18:07:41 1769 0

原创 kafka简单配置测试

下载kafka 下载地址:点击打开链接,不要下错了,src后缀的源码,我们需要的是另外一个,里面包含了kafka需要的.jar包,如果你对源码感兴趣可以下源码下来研究一下. 安装kafka 解压下载文件:tar xvfkafka_2.11-1.0.0.tar,进入解压目录cdkafka_2.11-...

2017-12-03 17:52:52 1091 0

原创 kafka简介

Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。InfoQ一直在紧密关注Kafka的应用以及发展,“Kafka剖析”专...

2017-12-03 14:58:15 311 0

原创 负载均衡实现原理

负载均衡有硬件和软件两种.硬件层的比较牛逼,将4-7层负载均衡功能做到一个硬件里面,如F5,梭子鱼,据说yahoo中国!早些时候只用了两台F5做双活.目前主流的软件负载均衡分为四层和七层,LVS属于四层负载均衡,工作在tcp/ip协议栈上,通过修改网络包的ip地址和端口来转发, 由于效率比七层高,...

2017-11-19 21:34:09 6202 1

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