- 博客(468)
- 资源 (4)
- 收藏
- 关注
原创 Effective C++ - Inheritance and Object-Oriented Design
Effective C++ - Inheritance and Object-Oriented Design 前言:OOP面向对象编程(继承,单一继承,多重继承,public/protected/private,virtual/non-virtual,继承的查找规则,virtual函数是最佳选择吗,等等)有哪些坑?Effective C - Inheritance and Object-Ori
2017-10-31 22:45:13
977
原创 Redis简单入门
一提起数据库,大多数人可能想到的主要是Oracle,MySQL以及Microsoft SQL Server这三大巨头。但除了这三巨头外,很多新兴的数据库也慢慢进入开发者的眼帘。比如最近越来越火的搜索引擎式数据库Elasticsearch。DB-engines上可以看到近期数据库的一个使用排名情况。同时可以看到Redis作为一款键值对数据存储数据库(非关系型数据库)也是处在一个上升的趋势。Redis使
2017-08-06 18:30:35
1840
原创 Effective C++ - Designs and Declarations
前言:软件设计,是令软件做出你希望它做的事情的步骤和做法。通常以颇为一般性的构想开始,最终演变成十足的细节,以允许特殊接口的开发。这些接口而后必须转换为C++声明式。而如何实现良好C++接口的设计和声明呢?通常的一个准则是:“让接口容易被正确使用,不容易被误用”。Make interfaces easy to use correctly and hard to use incorrectlyTre
2017-07-23 22:25:38
850
原创 C++11系列——函数对象(Function Object)
之前总结过一篇Boost之高阶函数——函数对象,介绍了几个用于处理函数对象的 Boost C++ 库。而目前C++11的标准库std已经提供了函数对象的一些功能。根据wiki可以知道Higher order funciton的定义如下: In mathematics and computer science, a higher-order function (also functional, f
2017-06-29 00:36:29
2231
原创 Effective C++ - Resource Management
前言:如何有效运用C++,包括一般性的设计策略,以及带有具体细节的特定语言特性。知道细节很重要,否则如果疏忽几乎总是导致不可预期的程序行为(undefined behavior)。本文总结对于如何使用C++的一些建议,从而让你成为一个有战斗力的C++程序员。以对象管理资源在资源管理中小心coping行为在资源管理类中提供对原始资源的访问成对使用new和delete时要采取相同形式以独立语句将
2017-04-30 23:21:09
611
原创 Effective C++ - Constructors, Destructors, and Assignment Operators
Effective C++ - Constructors, Destructors, and Assignment Operators 前言:如何有效运用C++,包括一般性的设计策略,以及带有具体细节的特定语言特性。知道细节很重要,否则如果疏忽几乎总是导致不可预期的程序行为(undefined behavior)。本文总结对于如何使用C++的一些建议,从而让你成为一个有战斗力的C++程序员。E
2017-03-31 22:40:33
745
原创 Effective C++ - Accustoming Yourself to C++
前言:如何有效运用C++,包括一般性的设计策略,以及带有具体细节的特定语言特性。知道细节很重要,否则如果疏忽几乎总是导致不可预期的程序行为(undefined behavior)。本文总结对于如何使用C++的一些建议,从而让你成为一个有战斗力的C++程序员。
2017-02-04 21:49:04
1017
原创 高并发实时后台服务技术架构杂谈
高并发实时后台服务设计杂谈 摘要:双十一剁手节、新年微信红包、游戏限时营销活动等场景都离不开一个可靠和稳定后台服务,针对高并发(每秒上万的QPS),低延迟(毫秒级应答)的业务场景,后台架构是否合理对业务的成败以及用户体验起到了至关重要的作用。本文根据笔者已有的工作经验总结一些可参考的实时高并发后台架构解决方案。流控根据No Silver Bullet理论,在软件工程里是没有万能的终极武器,只有
2017-02-01 17:51:08
5850
原创 MySQL数据导入 — LOAD DATA
启动MySQL客户端(通过–local-infile=1选项)和服务器端(通过修改配置文件)都需要指定可以从LOCAL导入数据,例如:/mysqld_safe --datadir=/data/mysqldata --skip-grant-tables --local-infile=1例子原始数据:1 Heart disease kills·1.2 2 one out of every
2017-01-08 18:57:54
1060
原创 Linux的线程创建限制
导言:现网有个版本上线一段时间后,通过SSH重新登陆时显示Cannot allocate memory错误,结果只能通过重启机器来恢复服务。通过分析发现是新的版本引入一个bug,某个进程会不停地创建新的线程,那么问题是Linux下一个进程可以创建多少个线程,从而会导致这个错误出现。问题重现,通过一个测试程序,验证错误是否会重现。#include <iostream>#include <pthre
2016-12-11 11:43:21
1292
原创 分布式锁调研
分布式锁调研分布式锁调研数据库锁Redis实现分布式锁SETDELRedlockZooKeeperEtcd导言:分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。调研目标是找到一种合适的DLM (Distributed Lock Manager)方法,主要考虑性能和可用性。下面是调研的几种方法,优劣对比。数据库锁思想:使用订单号(唯一)作为数据库表的主键或索引,每笔订单在访问共享
2016-11-17 15:28:24
991
原创 Introduction to coroutine
导言:本文是在小组内的一个分享,介绍协程实现的几种方法和优化策略,对比GoLang中goroutine实现方式及调度器的设计,与常见后台服务器设计模式对比,使用协程的优劣分析。some questionsQ1: multitasking ? time-sharing (1960s,voluntarily/hardware interrupt to relinquish the CPU)
2016-10-14 09:54:51
1490
原创 Linux IPC之内存映射mmap()
导言:如何使用mmap()系统调用来创建内存映射,它可以用于IPC以及其他很多方面。概述mmap()系统调用,在调用进程的虚拟地址空间中创建一个新内存映射。映射分为两种:文件映射(内存映射文件) 将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文件被映射之后就可以通过在相应的内存区域中操作字节来访问文件内容了。映射的分页会在需要的时候从文件中自动加载。这种映射也被称为,基于文件的映射
2016-10-11 22:54:25
4632
2
原创 Linux IPC之POSIX共享内存
导言:System V共享内存和共享文件映射,允许无关进程共享内存区域以便执行IPC通信。但这两种技术都存在一些不足:1. System V共享内存模型使用的是键和标识符,这与标准的UNIX I/O模型使用文件名和描述符的做法是不一致的,这种差异意味着使用System V共享内存段需要一整套全新的系统调用和命令。2. 使用一个共享文件映射来进行IPC要求创建一个磁盘文件,即使无需对共享区域进行持久存
2016-09-17 21:05:27
1437
原创 Linux IPC之System V共享内存
导言:共享内存允许两个或多个进程共享物理内存的同一块区域(段)。由于一个共享内存段会成为一个进程用户空间内存的一部分,因此,这种IPC机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道或消息队列要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,共享内存的速度更快(每个
2016-09-11 22:37:31
1190
原创 Linux IPC之管道和FIFO
导言:管道是UNIX系统上最古老的IPC方法,管道提供了一种优雅的解决方案:给定两个运行不同程序的进程,在shell中如何让一个进程的输出作为另一个进程的输入?管道可以用来在相关(一个共同的祖先进程创建管道)进程之间传递数据。FIFO是管道概念的一个变体,它们之间的一个重要差别在于FIFO可以用于任意进程间的通信。概述每个shell用户都对在命令中使用管道比较熟悉,例如,统计一个目录中文件的数目:
2016-08-31 23:16:21
3937
原创 MySQL读书笔记-安装初始化操作
导言:本文主要记录MySQL在Linux服务器上安装时,一些关键操作和步骤。安装RPM 优点:简单 缺点:不灵活,缺少个性化设置二进制 优点:优化版本 缺点:安装比RPM麻烦源代码 优点:个性化 缺点:需要知道如何构建# 创建必要的组和拥有者groupadd mysqluseradd -g mysql mysql# 下载解压cd /usr/srcgunzip < /us
2016-08-24 23:28:41
1118
1
原创 Linux IPC之Socket网络编程I/O多路复用相关模型及区别
导言:大部分程序使用的I/O模型(传统的阻塞式I/O模型)都是单个进程每次只在一个文件描述符上执行I/O操作,每次I/O系统调用都会阻塞直到完成数据传输。但是,有些场景需要: 以非阻塞的方式检查文件描述符上是否可进行I/O操作。 同时检查多个文件描述符,看它们中的任何一个是否可以执行I/O操作。 对应的解决方法分别是,使用非阻塞式I/O和多进程(多线程)。
2016-08-22 23:59:29
2097
原创 网络工具之netstat
导言:netstat可以显示系统中Internet和UNIX域套接字的状态,当编写套接字程序时,netstat是个非常有用的调试工具。关于netstat的具体用法,请查看具体手册man netstat。例如,一些常用选项:# 显示所有套接字的信息-a# 只显示监听套接字的信息-l# 显示进程ID号,以及套接字所归属的程序名称-p# 显示IP地址,端口号,并以数字形式显示出用户名称-n# 连
2016-08-21 19:57:41
1229
原创 Linux IPC之Socket网络编程服务器的负载均衡
导言:在设计高性能并发型服务器时,传统的为每一个客户端创建一个新的子进程(或线程)所带来的开销对服务器来说是个沉重的负担,因此本文考虑几种可选方案。在服务器上预先创建进程或线程(进程池或线程池)服务器在启动阶段(即,在任何客户端请求到来之前)就立刻预先创建好一定数量的子进程(或线程),而不是针对每个客户端来创建一个新的子进程(或线程)。这些子进程构成了一种服务池(server pool),即,进
2016-08-14 12:36:24
2329
原创 Boost之Intrusive
Boost.IntrusiveIntrusive and non-intrusive containersPerformanceBoost.Intrusive is a library presenting some intrusive containers to the world of C++. Intrusive containers are special containers that o
2016-08-04 20:32:01
858
原创 Linux IPC之Socket网络编程基础篇
UNIX IPC工具使用总结 里介绍了socket是一种用于通信的IPC工具。它允许位于同一主机或跨主机上的应用程序之间交换数据。第一个被广泛接受的socket API实现于1983年,出现在4.2BSD中,实际上这组API已经被移植到了所有UNIX实现以及大多数操作系统上。概述在一个典型的C/S场景中,应用程序使用socket进行通信的方式如下:各个应用程序创建一个socket。socket是一
2016-08-02 17:55:58
1825
原创 Linux IPC之工具综述
本文是对UNIX IPC工具的宏观总结和对比,细节的使用方法请参考相关手册。UNIX IPC工具分类通信工具数据传输为了进行通信,一个进程将数据写入到IPC工具中,另一个进程从中读取数据。这些工具要求在用户内存和内核内存之间进行两次数据传输。 一次传输是在写入的时候,从用户内存到内核内存。 另一次传输是在读取的时候,从内核内存到用户内存。可以进一步将数据传输工具分成以下类别:字节流通
2016-07-31 18:41:18
1193
原创 MySQL读书笔记-存储引擎
关于存储引擎的详细细节,请参考官方文档。数据库和表在文件系统中,MySQL将每个数据库(schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表同名的.frm文件,用于保存表的定义。因为MySQL使用文件系统的目录保存数据库和表的定义,大小写敏感性和具体的平台相关。在Windows中,大小写是不敏感的,而在类UNIX中则是敏感的。不同的存储
2016-07-26 22:38:47
1008
原创 MySQL读书笔记-MVCC多版本并发控制
MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。 不仅是MySQL,包括Oracle, PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实现标准。 可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制所
2016-07-19 23:20:03
3450
原创 MySQL读书笔记-事务日志,MySQL中的事务
WLA(Write-Ahead Logging)事务日志,可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时,只需要修改其内存拷贝,再把该修改行为记录到硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用的是追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不是随机I/O,所以快很多。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘。
2016-07-13 23:42:32
3873
原创 MySQL读书笔记-事务,隔离级别,死锁
事务事务,就是一组原子性的SQL查询。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询;如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。即,事务内的语句,要么全部执行成功,要么全部执行失败。可以用START TRANSACTION语句开始一个事务,然后要么使用COMMIT提交事务将修改的数据持久保留,要么使用ROLLBACK撤销所有的修改。 事务
2016-07-12 22:12:46
1523
原创 MySQL读书笔记-并发控制
MySQL在两个层面的并发控制。服务器层存储引擎层无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。MySQL是如何控制并发读写的呢?在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题。这两种类型的锁,通常被称为共享锁(shared lock)和排他锁(exclusive lock),或者读锁(read lock)和写锁(write lock)。数
2016-07-10 23:58:16
573
原创 MySQL读书笔记-逻辑架构
MySQL逻辑架构第一层:连接处理,授权认证,安全管理等。 第二层:大多数MySQL的核心功能都在这一层,包括,查询解析,分析,优化,缓存,以及所有的内置函数(例如,日期,时间,数学,加密函数等),所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。 第三层:包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。和GNU/Linux下的各种文件系统一样,每个存储引擎都有它的优
2016-07-10 23:00:28
862
原创 Ubuntu下使用skynet笔记(1)
关于skynet的介绍可以参考下面两篇文章,Skynet设计综述和GettingStarted,其中第二篇文章内容较新。根据skynet的Makefile可以看到其支持linux/freebsd/macosx三种平台编译使用。本文记录在Linux Ubuntu下使用时遇到的一些问题。在Linux下需要使用jemalloc,而编译jemalloc又需要autoconf然后make linux,正常
2016-06-25 20:27:20
2656
翻译 2016 Tencent Disclaimer
DisclaimerThis presentation contains forward-looking statements relating to the business outlook, estimates of financial performance, forecast business plans and growth strategies of Tencent Holding
2016-05-20 18:24:31
1231
原创 写PPT装逼的几个工具
最近在准备一个PPT,但是遇到一个问题,在准备PPT资料的时候是在马克飞象用Markdown写的,虽然可以方便的生成PDF文档,但是最终汇报展示的时候,老大们还是喜欢看PPT。因此,在网上查了一下如何将md文档转换为ppt,搜索之后才发现有如此多的装逼工具。比如,几个秒杀PPT的高(zhe)大(teng)上(ren)的幻灯工具或者用Markdown写轻量级PPT介绍的,真是柳暗花明又一村。在如此之多
2016-05-12 20:40:44
2556
原创 Docker升级1.10+迁移镜像方法
在Docker安装脚本源码解读一文中提到在准备将Docker从低版本升级到v1.10+版本前,建议将原始的镜像进行迁移备份,具体细节可参考这里。
2016-04-19 11:17:32
3100
1
原创 [问题记录] curl: (18) transfer closed with outstanding read data remaining 原因分析
问题描述首先使用get方法请求apache的一个CGI,返回预期结果,然后换成post方法,结果返回如下错误: curl: (18) transfer closed with outstanding read data remaining错误的大致意思是:需要读取的数据还没有完成,但是传输数据的连接被关闭了。服务端CGI的代码很简单,只是构造了一个应答:#!/bin/bashecho "Co
2016-04-08 21:13:58
57553
原创 Docker安装脚本源码解读
官方指定安装Docker的方法有两种,都很简单:通过源安装(例如,在Centos下使用yum安装) $ sudo yum install docker-engine使用脚本安装 curl -fsSL https://get.docker.com/ | sh本文主要分析脚本安装具体做了哪些事情。首先设置 set -e,若后续命令执行失败(传回值不等于0),则立即退出shell。定义和使用
2016-03-30 22:09:59
6563
原创 几种C++ 字符串分割的方法
总结几种使用C++解析字符串的方法,相对而言,方法3更灵活。1 std::string tool优点: * 不需要考虑原始字符串的生命周期 缺点: * 不能选择输出容器 * 存储在容器中可能有额外的内存分配及拷贝成本参考代码2 strspn同上参考代码3 std::iterator优点: * 可以动态选择输出容器 * split时没有额外的内存拷贝 缺点: * 需要考虑迭代器失效的问
2016-03-30 20:31:17
1021
原创 Mac OS X Yosemite 10.10.5使用Toolbox安装Docker
之前在文章《 Mac OS X Yosemite 10.10.1安装Docker》中介绍了如何使用Boot2Docker在Mac上安装Docker,时隔变迁,现在Boot2Docker已经被官方废弃,取而代之的是Toolbox。关于boot2docker的说明: This project (the boot2docker OS X Installer) is officially depreca
2016-02-25 23:50:32
3567
原创 RAID相关知识简介
RAID是什么 RAID (originally redundant array of inexpensive disks, now commonly redundant array of independent disks) is a data storage virtualization technology that combines multiple physical disk dri
2016-02-24 11:35:22
1068
转载 分布式系统的事务处理经典问题及模型
Master-Slave,Master-Master,2PC/3PC,经典的将军问题,Paxos,以及Dynamo的NRW和VectorClock的模型
2016-02-19 15:07:03
1056
Win-MASM编译器
2010-04-17
C++类库KYLib
2009-10-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人