自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

delphiwcdj的专栏

Good Programmers are made, not born. (Weinberg) | github.com/gerryyang | 微信订阅号 tencentgerryyang

  • 博客(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 831

原创 Effective C++ - Implementations

C++实现中需要注意的一些问题。

2017-09-28 08:55:03 912

原创 Redis简单入门

一提起数据库,大多数人可能想到的主要是Oracle,MySQL以及Microsoft SQL Server这三大巨头。但除了这三巨头外,很多新兴的数据库也慢慢进入开发者的眼帘。比如最近越来越火的搜索引擎式数据库Elasticsearch。DB-engines上可以看到近期数据库的一个使用排名情况。同时可以看到Redis作为一款键值对数据存储数据库(非关系型数据库)也是处在一个上升的趋势。Redis使

2017-08-06 18:30:35 1752

原创 Effective C++ - Designs and Declarations

前言:软件设计,是令软件做出你希望它做的事情的步骤和做法。通常以颇为一般性的构想开始,最终演变成十足的细节,以允许特殊接口的开发。这些接口而后必须转换为C++声明式。而如何实现良好C++接口的设计和声明呢?通常的一个准则是:“让接口容易被正确使用,不容易被误用”。Make interfaces easy to use correctly and hard to use incorrectlyTre

2017-07-23 22:25:38 715

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

原创 Effective C++ - Resource Management

前言:如何有效运用C++,包括一般性的设计策略,以及带有具体细节的特定语言特性。知道细节很重要,否则如果疏忽几乎总是导致不可预期的程序行为(undefined behavior)。本文总结对于如何使用C++的一些建议,从而让你成为一个有战斗力的C++程序员。以对象管理资源在资源管理中小心coping行为在资源管理类中提供对原始资源的访问成对使用new和delete时要采取相同形式以独立语句将

2017-04-30 23:21:09 564

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

原创 Effective C++ - Accustoming Yourself to C++

前言:如何有效运用C++,包括一般性的设计策略,以及带有具体细节的特定语言特性。知道细节很重要,否则如果疏忽几乎总是导致不可预期的程序行为(undefined behavior)。本文总结对于如何使用C++的一些建议,从而让你成为一个有战斗力的C++程序员。

2017-02-04 21:49:04 889

原创 高并发实时后台服务技术架构杂谈

高并发实时后台服务设计杂谈 摘要:双十一剁手节、新年微信红包、游戏限时营销活动等场景都离不开一个可靠和稳定后台服务,针对高并发(每秒上万的QPS),低延迟(毫秒级应答)的业务场景,后台架构是否合理对业务的成败以及用户体验起到了至关重要的作用。本文根据笔者已有的工作经验总结一些可参考的实时高并发后台架构解决方案。流控根据No Silver Bullet理论,在软件工程里是没有万能的终极武器,只有

2017-02-01 17:51:08 5749

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

原创 Linux的线程创建限制

导言:现网有个版本上线一段时间后,通过SSH重新登陆时显示Cannot allocate memory错误,结果只能通过重启机器来恢复服务。通过分析发现是新的版本引入一个bug,某个进程会不停地创建新的线程,那么问题是Linux下一个进程可以创建多少个线程,从而会导致这个错误出现。问题重现,通过一个测试程序,验证错误是否会重现。#include <iostream>#include <pthre

2016-12-11 11:43:21 1217 1

原创 分布式锁调研

分布式锁调研分布式锁调研数据库锁Redis实现分布式锁SETDELRedlockZooKeeperEtcd导言:分布式锁,是控制分布式系统之间同步访问共享资源的一种方式。调研目标是找到一种合适的DLM (Distributed Lock Manager)方法,主要考虑性能和可用性。下面是调研的几种方法,优劣对比。数据库锁思想:使用订单号(唯一)作为数据库表的主键或索引,每笔订单在访问共享

2016-11-17 15:28:24 892

原创 Introduction to coroutine

导言:本文是在小组内的一个分享,介绍协程实现的几种方法和优化策略,对比GoLang中goroutine实现方式及调度器的设计,与常见后台服务器设计模式对比,使用协程的优劣分析。some questionsQ1: multitasking ? time-sharing (1960s,voluntarily/hardware interrupt to relinquish the CPU)

2016-10-14 09:54:51 1424

原创 Linux IPC之内存映射mmap()

导言:如何使用mmap()系统调用来创建内存映射,它可以用于IPC以及其他很多方面。概述mmap()系统调用,在调用进程的虚拟地址空间中创建一个新内存映射。映射分为两种:文件映射(内存映射文件) 将一个文件的一部分直接映射到调用进程的虚拟内存中。一旦一个文件被映射之后就可以通过在相应的内存区域中操作字节来访问文件内容了。映射的分页会在需要的时候从文件中自动加载。这种映射也被称为,基于文件的映射

2016-10-11 22:54:25 4475 3

原创 Linux IPC之POSIX共享内存

导言:System V共享内存和共享文件映射,允许无关进程共享内存区域以便执行IPC通信。但这两种技术都存在一些不足:1. System V共享内存模型使用的是键和标识符,这与标准的UNIX I/O模型使用文件名和描述符的做法是不一致的,这种差异意味着使用System V共享内存段需要一整套全新的系统调用和命令。2. 使用一个共享文件映射来进行IPC要求创建一个磁盘文件,即使无需对共享区域进行持久存

2016-09-17 21:05:27 1384

原创 Linux IPC之System V共享内存

导言:共享内存允许两个或多个进程共享物理内存的同一块区域(段)。由于一个共享内存段会成为一个进程用户空间内存的一部分,因此,这种IPC机制无需内核介入。所有需要做的就是让一个进程将数据复制进共享内存中,并且这部分数据会对其他所有共享同一个段的进程可用。与管道或消息队列要求发送进程将数据从用户空间的缓冲区复制进内核内存和接收进程将数据从内核内存复制进用户空间的缓冲区的做法相比,共享内存的速度更快(每个

2016-09-11 22:37:31 1125

原创 Linux IPC之管道和FIFO

导言:管道是UNIX系统上最古老的IPC方法,管道提供了一种优雅的解决方案:给定两个运行不同程序的进程,在shell中如何让一个进程的输出作为另一个进程的输入?管道可以用来在相关(一个共同的祖先进程创建管道)进程之间传递数据。FIFO是管道概念的一个变体,它们之间的一个重要差别在于FIFO可以用于任意进程间的通信。概述每个shell用户都对在命令中使用管道比较熟悉,例如,统计一个目录中文件的数目:

2016-08-31 23:16:21 3842

原创 MySQL读书笔记-安装初始化操作

导言:本文主要记录MySQL在Linux服务器上安装时,一些关键操作和步骤。安装RPM 优点:简单 缺点:不灵活,缺少个性化设置二进制 优点:优化版本 缺点:安装比RPM麻烦源代码 优点:个性化 缺点:需要知道如何构建# 创建必要的组和拥有者groupadd mysqluseradd -g mysql mysql# 下载解压cd /usr/srcgunzip < /us

2016-08-24 23:28:41 1068 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 2040

原创 网络工具之netstat

导言:netstat可以显示系统中Internet和UNIX域套接字的状态,当编写套接字程序时,netstat是个非常有用的调试工具。关于netstat的具体用法,请查看具体手册man netstat。例如,一些常用选项:# 显示所有套接字的信息-a# 只显示监听套接字的信息-l# 显示进程ID号,以及套接字所归属的程序名称-p# 显示IP地址,端口号,并以数字形式显示出用户名称-n# 连

2016-08-21 19:57:41 1157

原创 Linux IPC之Socket网络编程服务器的负载均衡

导言:在设计高性能并发型服务器时,传统的为每一个客户端创建一个新的子进程(或线程)所带来的开销对服务器来说是个沉重的负担,因此本文考虑几种可选方案。在服务器上预先创建进程或线程(进程池或线程池)服务器在启动阶段(即,在任何客户端请求到来之前)就立刻预先创建好一定数量的子进程(或线程),而不是针对每个客户端来创建一个新的子进程(或线程)。这些子进程构成了一种服务池(server pool),即,进

2016-08-14 12:36:24 2280

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

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

原创 Linux IPC之工具综述

本文是对UNIX IPC工具的宏观总结和对比,细节的使用方法请参考相关手册。UNIX IPC工具分类通信工具数据传输为了进行通信,一个进程将数据写入到IPC工具中,另一个进程从中读取数据。这些工具要求在用户内存和内核内存之间进行两次数据传输。 一次传输是在写入的时候,从用户内存到内核内存。 另一次传输是在读取的时候,从内核内存到用户内存。可以进一步将数据传输工具分成以下类别:字节流通

2016-07-31 18:41:18 1101

原创 MySQL读书笔记-存储引擎

关于存储引擎的详细细节,请参考官方文档。数据库和表在文件系统中,MySQL将每个数据库(schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表同名的.frm文件,用于保存表的定义。因为MySQL使用文件系统的目录保存数据库和表的定义,大小写敏感性和具体的平台相关。在Windows中,大小写是不敏感的,而在类UNIX中则是敏感的。不同的存储

2016-07-26 22:38:47 966

原创 MySQL读书笔记-MVCC多版本并发控制

MySQL的大多数事务型存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。 不仅是MySQL,包括Oracle, PostgreSQL等其他数据库系统也都实现了MVCC,但各自的实现机制不尽相同,因为MVCC没有一个统一的实现标准。 可以认为MVCC是行级锁的一个变种,但是它在很多情况下避免了加锁操作,因此开销更低。虽然实现机制所

2016-07-19 23:20:03 3375

原创 MySQL读书笔记-事务日志,MySQL中的事务

WLA(Write-Ahead Logging)事务日志,可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时,只需要修改其内存拷贝,再把该修改行为记录到硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用的是追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不是随机I/O,所以快很多。事务日志持久以后,内存中被修改的数据在后台可以慢慢地刷回到磁盘。

2016-07-13 23:42:32 3818

原创 MySQL读书笔记-事务,隔离级别,死锁

事务事务,就是一组原子性的SQL查询。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询;如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。即,事务内的语句,要么全部执行成功,要么全部执行失败。可以用START TRANSACTION语句开始一个事务,然后要么使用COMMIT提交事务将修改的数据持久保留,要么使用ROLLBACK撤销所有的修改。 事务

2016-07-12 22:12:46 1481

原创 MySQL读书笔记-并发控制

MySQL在两个层面的并发控制。服务器层存储引擎层无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。MySQL是如何控制并发读写的呢?在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题。这两种类型的锁,通常被称为共享锁(shared lock)和排他锁(exclusive lock),或者读锁(read lock)和写锁(write lock)。数

2016-07-10 23:58:16 533

原创 MySQL读书笔记-逻辑架构

MySQL逻辑架构第一层:连接处理,授权认证,安全管理等。 第二层:大多数MySQL的核心功能都在这一层,包括,查询解析,分析,优化,缓存,以及所有的内置函数(例如,日期,时间,数学,加密函数等),所有跨存储引擎的功能都在这一层实现:存储过程,触发器,视图等。 第三层:包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。和GNU/Linux下的各种文件系统一样,每个存储引擎都有它的优

2016-07-10 23:00:28 827

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

翻译 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 857

原创 写PPT装逼的几个工具

最近在准备一个PPT,但是遇到一个问题,在准备PPT资料的时候是在马克飞象用Markdown写的,虽然可以方便的生成PDF文档,但是最终汇报展示的时候,老大们还是喜欢看PPT。因此,在网上查了一下如何将md文档转换为ppt,搜索之后才发现有如此多的装逼工具。比如,几个秒杀PPT的高(zhe)大(teng)上(ren)的幻灯工具或者用Markdown写轻量级PPT介绍的,真是柳暗花明又一村。在如此之多

2016-05-12 20:40:44 2432

原创 Docker升级1.10+迁移镜像方法

在Docker安装脚本源码解读一文中提到在准备将Docker从低版本升级到v1.10+版本前,建议将原始的镜像进行迁移备份,具体细节可参考这里。

2016-04-19 11:17:32 3043 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 53214

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

原创 几种C++ 字符串分割的方法

总结几种使用C++解析字符串的方法,相对而言,方法3更灵活。1 std::string tool优点: * 不需要考虑原始字符串的生命周期 缺点: * 不能选择输出容器 * 存储在容器中可能有额外的内存分配及拷贝成本参考代码2 strspn同上参考代码3 std::iterator优点: * 可以动态选择输出容器 * split时没有额外的内存拷贝 缺点: * 需要考虑迭代器失效的问

2016-03-30 20:31:17 963

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

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

转载 分布式系统的事务处理经典问题及模型

Master-Slave,Master-Master,2PC/3PC,经典的将军问题,Paxos,以及Dynamo的NRW和VectorClock的模型

2016-02-19 15:07:03 1024

Win-MASM编译器

本软件是一款很好的集成软件,在这个环境里我们可以很方便的进行汇编,对于学习微机原理的同学将会带来巨大的帮助,相当方便。 本软件基于汇编器MASM,采用C语言与VB混合编程。改进了在DOS平台上的非集成汇编程序编译环境的不足。 欢迎广大汇编爱好者使用本软件进行汇编上机与学习!

2010-04-17

C++类库KYLib

C++类库KYLibKYLib 有针对VC6, VS2003, VS2005等版本库, 而且基于KYLib开发的代码可以在VC不同版本中平稳移植, 甚至可以平稳移植到Linux中。

2009-10-21

很好的正则表达式学习资料

正则表达式就是处理字符串的方法,以行为单位进行字符串的处理,通过一些特殊字符的辅助,可以让用户轻松搜索替换某特定的字符串。 很好的正则表达式学习资料

2009-10-11

Linux IPC源码

很好的东西,希望对大家有帮助 信号量是一种对多个进程访问共享资源进行控制的机制,其实为了解决互斥共享资源的同步问题而引入的机制。

2008-12-26

空空如也

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

TA关注的人

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