
笔试面试
文章平均质量分 94
ctreewang
这个作者很懒,什么都没留下…
展开
-
gdb Debugging Full Example (Tutorial): ncurses
I'm a little frustrated with finding "gdb examples" online that show the commands but not their output. gdb is the GNU Debugger, the standard debugger on Linux. I was reminded of the lack of example o转载 2016-08-15 11:46:48 · 8466 阅读 · 0 评论 -
linux 系统调用sysconf函数使用
在看开源代码的时候,尤其是获取cpu核数的时候,发现了一个很好用的一个函数 #include long sysconf(int name);通过名字可以猜到,该函数是获取一些系统的参数。然后通过man sysconf我们可以知道该函数的使用条件, POSIX allows an application to test at compile or r原创 2015-11-07 01:52:26 · 21767 阅读 · 5 评论 -
C语言实现分布式自增有序的唯一ID生成算法-snowflake算法
前41bits是以微秒为单位的timestamp。 接着10bits是事先配置好的机器ID。 最后12bits是累加计数器。 macheine id(10bits)标明最多只能有1024台机器同时产生ID,sequence number(12bits)也标明1台机器1ms中最多产生4096个ID, * 注意点,因为使用到位移运算,所以需要64位操作系统,不然生成的ID会有可能不正确原创 2015-11-07 13:28:14 · 12246 阅读 · 0 评论 -
原子操作的一段代码学到的知识
本实例是我在学习原子操作看到一段很有趣的程序,包含的知识很多。首先上程序:// test_atomic.cpp : 定义控制台应用程序的入口点。//#define _GNU_SOURCE#include #include #include #include #include #include #include #include #include#include#原创 2015-11-07 10:58:31 · 3242 阅读 · 1 评论 -
Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。Snowflake算法核心把时间戳,工作机器id,序列号组合在一起。 除了最高位bit标记为不可用以外,其余三组bit占转载 2015-11-05 00:21:34 · 4447 阅读 · 0 评论 -
GCC参数详解
[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件 4.连接目标代码,生成可执行程序 [参数详解] -c 只激活预处理,编译,和汇编,也就是他只把原创 2015-11-04 14:49:57 · 2725 阅读 · 0 评论 -
我的c++服务器记录----非阻塞下的socket读取操作
服务器端的基本的一个操作就是从socket的fd上进行数据读取,也就是我们经常用到的read函数。 欢迎关注我的服务器代码:http://code.taobao.org/p/fastServer/src/今天主要是关注的正确的进行read操作 首相,我的socket是已经设置了非阻塞属性。read函数在非阻塞读取fd的时候会遇到不同的errno。 如何正确的处理这些erron 状态呢?1、er原创 2015-07-24 23:52:43 · 3476 阅读 · 0 评论 -
FastDFS源码分析之tracker协议分析
本篇博客主要讲解fastdfs中tracker协议的讲解。fastdfs主要是存储文件,直接把整个文件存储到磁盘上,所以,简单直接。但是也有很大的局限性。因此,fastdfs对文件的目录设置和存储是最为核心的。为什么这么突然的讲解这些。因为我已经看了一段时间的fastdfs,主要结构都已经搞的比较清晰了。因此,这篇文章,我就主要一tracker这一部分的协议来分析。原创 2014-09-30 19:14:29 · 8506 阅读 · 0 评论 -
redis源码解析----epoll的使用
平时做项目,涉及到网络层的都是epoll,前几年发现redis的epoll实现起来非常的精简,好用。因为提供的接口简单,爱并实现的很高效。于是,我就提取出来,直接使用。今天又打开该文件详细的看看他的实现细节。首先简单介绍epoll,它是linux内核下的一个高效的处理大批量的文件操作符的一个实现。不仅限于socket fd。他在超时时间内会唤醒有事件的操作符。其中有两种模式 1、水平触原创 2015-05-02 14:14:54 · 6878 阅读 · 1 评论 -
LVS技术浅析-WHY
LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器,早在2.4内核就已经合并入linux标准内核,并被全球各大互联网公司广泛使用;据我所知,国内百度/新浪/阿里/腾讯等都在使用LVS;下图是LVS在常用互联网应用架构中的位置:LVS处于最前端,用于将用户请求转发到后端的多台webserver上。LVS引入Virtual Server的概念,用转载 2015-10-27 09:50:00 · 1327 阅读 · 0 评论 -
c++侵入式对象计数设计技术
侵入式对象计数的设计原理相对非侵入式的来说:具有以下优点:1、一个资源对象无论被多少个侵入式智能指针包含,从始至终只有一个引用计数变量,不需要在每一个使用智能指针对象的地方都new一个计数对象,这样子效率比较高,使用内存也比较少,也比较安全;2、因为引用计数存储在对象本身,所以在函数调用的时候可以直接传递资源对象地址,而不用担心引用计数值丢失(非侵入式智能指针对象的拷贝,必须带着智能指针模原创 2015-12-08 20:22:22 · 4075 阅读 · 0 评论 -
linux中内存使用,swap,cache,buffer的含义
首先介绍一下linux中内存是如何使用的。当有应用需要读写磁盘数据时,由系统把相关数据从磁盘读取到内存,如果物理内存不够,则把内存中的部分数据导入到磁盘,从而把磁盘的部分空间当作虚拟内存来使用,也称为Swap。如果给所有应用分配足够内存后,物理内存还有剩余,linux会尽量再利用这些空闲内存,以提高整体I/O效率,其方法是把这部分剩余内存再划分为cache及buffer两部分加以利用。从磁转载 2015-11-02 14:15:13 · 1201 阅读 · 0 评论 -
Linux 系统性能分析工具图解读
最近看了 Brendan Gregg 大神著名的 Linux Performance Observability Tools,这么好的资料不好好学习一下实在是浪费了,又找到了大神的ppt 和 演讲(需爬墙),于是把相关的命令和概念连预习,学习,复习走了一遍。首先学习的是大神提出的 Basic Tool 有如下几个:uptimetop (htop)转载 2016-06-21 23:18:12 · 8554 阅读 · 0 评论 -
服务器端开发的一些建议
摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原则。希望能帮到大家一 专业基础1.1 网络1.1.1 理解TCP/IP协议网络传输模型滑动窗口技术建立连接的三次握手与断开连接的四次握手连接建立与断开过程中的各种状态TCP/IP协原创 2016-06-24 09:44:23 · 10337 阅读 · 2 评论 -
一步步编写并发阻塞队列
这篇文章主要介绍了linux中编写并发队列类,功能有:并发阻塞队列、有超时限制、有大小限制设计并发队列复制代码代码如下:#include #include using namespace std;template class Queue { public: Queue( ) {转载 2016-03-14 11:32:06 · 7217 阅读 · 0 评论 -
使用gprof对程序的性能分析(集合贴)
综述gprof用于分析函数调用耗时,可用之抓出最耗时的函数,以便优化程序。gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。gprof默认不支持多线程程序,默认不支持共享库程序。gcc -pg 编译程序运行程序,程序退出时生成 gmon.outgprof ./prog gmon.out -b 查看输出注意事项程序如果不是转载 2015-12-24 11:58:24 · 18198 阅读 · 0 评论 -
Apache Mesos总体架构
1. 前言同其他大部分分布式系统一样,Apache Mesos为了简化设计,也是采用了master/slave结构,为了解决master单点故障,将master做得尽可能地轻量级,其上面所有的元数据可以通过各个slave重新注册而进行重构,故很容易通过zookeeper解决该单点故障问题。(什么是apache mesos?参考:《统一资源管理与调度平台(系统)介绍》,本文分析基于M转载 2015-12-07 20:18:11 · 2684 阅读 · 0 评论 -
Pthreads并行编程之spin lock与mutex性能对比分析
Pthreads并行编程之spin lock与mutex性能对比分析POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API。线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间共 享的临界区(Critical Section)进行保护转载 2015-12-05 00:29:07 · 5625 阅读 · 0 评论 -
c++ template 的traits技术
本技术相对来说比较难理解,这种技术,是在stl源码中使用到的,给我感觉的作用就是对类的解耦。因为,工作中用到这种技术相对来说,比较少,所以,我目前还不是非常理解,下面是我敲书上的例子。首先上一段代码#ifndef BEARCORNER_H#define BEARCORNER_H#include using std::ostream;class Milk{public:原创 2015-11-28 01:12:13 · 1891 阅读 · 0 评论 -
高并发服务器架构--SEDA架构分析
纯粹转发,没有深入研究,转自:SEDA架构笔记一、传统并发模型的缺点基于线程的并发特点:每任务一线程直线式的编程使用资源昂高,context切换代价高,竞争锁昂贵太多线程可能导致吞吐量下降,响应时间暴涨。基于事件的并发模型特点:单线程处理事件每个并发流实现为一个有限状态机转载 2015-12-28 11:50:02 · 11025 阅读 · 2 评论 -
欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2015-05-13 14:49:36 · 1008 阅读 · 0 评论 -
游戏公会工作总结
想写这篇文章已经脱了很久了。本文主要写一写我在游戏公会组所做事情和成长吧。 在这里,首先要感谢我的前老大,技术组leader,郭文瑞,具有十几年的技术经历。技术广度和深度都是公司首屈一指的。还有他对技术的敏感程度是非常值得敬佩的。项目成立之时,感谢他对我的信任和帮助,才让我能够基本独立的完成游戏公会后台的设计,架构,开发等工作。目前,郭文瑞已经离职,在一家深圳公司做CTO。 以下我们公司的YY后台的一个整体架构以及公会组内部的一些基本关系。我们项目属于YY频道内的一个服务,YY频道内的所原创 2015-05-13 20:01:01 · 4013 阅读 · 0 评论 -
boost::function用法详解
要开始使用 Boost.Function, 就要包含头文件 "boost/function.hpp", 或者某个带数字的版本,从"boost/function/function0.hpp" 到 "boost/function/function10.hpp". 如果你知道你想保存在 function 中的函数的参数数量,这样做可以让编译器仅包含需要的头文件。如果包含 "boost/functio转载 2015-04-01 11:47:12 · 1928 阅读 · 0 评论 -
linux系统编程之fcntl使用
功能描述:根据文件描述词来操作文件的特性。#include #include int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock);[描述]fcntl()针对(文件)描述符提供控制。参数fd转载 2012-07-26 12:46:37 · 1787 阅读 · 0 评论 -
各种创建单例模式的优缺点
各种创建单例模式的优缺点单例模式应用于一个类只有一个实例的情况,并且为其实例提供一个全局的访问点。特点:1.一个类只有一个实例2.自己创建这个实例3.整个系统只能用这个实例应用场景外部资源:每台计算机有若干个打印机,但只能有一个PrinterSpooler,以避免两个打印作业同时输出到打印机。内部资源:大多数软件都有一个(或多个)属性文件存放系统配置,这样的系统转载 2012-02-11 13:03:37 · 1527 阅读 · 0 评论 -
多线程实现消费者生产者的例子
今天看书,看了一个例子,于是自己手动的自己敲了一下。。。但是,期望的结果和理论结果是不一样的,求解答啊。。。上源代ma#include "apue.h"#include /* basic system data types */#include /* timeval{} for select() */#include原创 2012-02-04 21:30:53 · 2414 阅读 · 2 评论 -
阻塞与非阻塞概念
通常的,对一个文件描述符指定的文件或设备, 有两种工作方式: 阻塞与非阻塞。所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西可读,或者暂时不可写, 程序就进入等待状态, 直到有东西可读或者可写为止。而对于非阻塞状态, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等待。 更多文章欢迎访问:http://blog.youkuaiyun.com/wal原创 2012-01-26 23:53:08 · 1637 阅读 · 1 评论 -
POSIX---linux多线程编程基础入门。
过年不回家了,一直在工作的地方呆着,就腾出了很多时间来学习了。前几天腾讯给打电话,问了linux下的一些知识,但是答得很不好。自我分析了一下,总结如下:1.知识学习一遍是远远不够的。还是要多学习,多揣摩,多思考。2.知识是要经常回头复习的。3.程序的工作是要多自己写代码实践,多思考。写出自己的东西。好,开始学习linux了。《线程》,对于一个程序员,如果不懂得线程,那么我觉得他原创 2012-01-21 00:12:33 · 5460 阅读 · 1 评论 -
小论c++中 endl 和 '\n'的区别
What's the difference between endl and'\n'?Folks often see output statements like the two below, and then want to know what the difference is:#include int main(){ int i = 99; std::co翻译 2012-01-12 10:36:41 · 3946 阅读 · 1 评论 -
C++中new_handler
在过去或者传统的模式中,当operator new不能满足一个内存分配请求的时候,它会返回一个空指针,但是现在如果operator new不能满足一个内存分配请求的时候,会抛出一个异常,这个时候我们可不可以自己定制处理策略呢?这正是new_handler的作用所在,具体情况在后面详细道来 当operator new申请一个内存失败的时候,它会进行如下的处理步骤: 1、如果存在客转载 2011-11-20 23:56:28 · 2686 阅读 · 0 评论 -
TCP头校验和计算算法详解
我就不管是按“位”(bit)取反相加,还是 按“1的补码”相加了,总之就是把需要进行校验的“字串”加(+)起来,把这相加的 结果取反当做“校验和” (Checksum), 比如,相加的结果是0101,那么“校验和”就是1010,验证的时候呢,就是 0101+1010 = 1111 ,取反后, 就是0——如果验证得“零”(0),就是正确的!先将checksum字段置零,然后按转载 2012-09-20 00:07:48 · 2782 阅读 · 1 评论 -
风雨后的彩虹
这篇文章的题目有些小文艺,之所以起了这个名字,是我由于最近一段生活的感受。2013年8月底,完整的经历了项目《美人三国》,解散。面临着工作室成员被人事随便的调到其他部门。感受到非常大的压力和郁闷。我非常喜欢的项目后端也面临着解散。老大一直想留下我们两个核心开发人员。但是感觉像泥菩萨过河。由于被分配到一些很烂的项目组,感觉也是前途一片黯淡,所以,我经过了百般深思熟原创 2013-10-16 23:12:45 · 2219 阅读 · 7 评论 -
linux的进程与线程
在许多经典的操作系统教科书中,总是把进程定义为程序的执行实例,它并不执行什么,只是维护应用程序所需的各种资源。而线程则是真正的执行实体,为了让进程完成一定的工作,进程必须至少包含一个线程。进程所维护的是程序所包含的资源(静态资源),如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等。线程所维护的是运行相关的资源(动态资源),如:运行栈,调度相关的控制信息,待处理的信号集等。转载 2014-03-09 15:55:13 · 1947 阅读 · 0 评论 -
删除双向链表的一个指定节点
双向链表的简单操作,供初学者学习原创 2015-02-27 11:29:44 · 9965 阅读 · 0 评论 -
高并发Web服务的演变——节约系统内存和CPU
摘要:现在的Web系统面对的并发连接数在近几年呈现指数增长,高并发成为了一种常态,给Web系统带来不小的挑战。一味地通过增加机器来解决并发量的增长,成本是非常高昂的。结合技术优化方案,才是更有效的解决方法。 【导读】 徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。一、越来转载 2015-03-12 10:24:15 · 1141 阅读 · 0 评论 -
推荐!国外程序员整理的 C++ 资源大全
关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz 发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 标准库C++标准库,包括了STL容器,算法和函数等。C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分。Standard Te转载 2014-11-02 08:11:18 · 3237 阅读 · 1 评论 -
服务端架构中的“网关服务器”
这么一个场景:一个要承载高并发、具有高性能的后台服务,往往会有多个不同的应用服务。问题来了,你会怎样设计架构呢?如下图所示,为了共用一个稳定高效的网络处理功能,把所有服务写在一个进程里。接下来悲剧一幕幕就要上演了,如果各个模块是多人协作开发,网络库的作者得想办法设计个插件机制供各个应用挂载,开发时无论是人员或者代码都耦合非常严重,大大影响协作、开发效率,后期要增减一个应转载 2014-11-14 18:11:02 · 4705 阅读 · 1 评论 -
memcached源码阅读----使用libevent和多线程模型
本篇文章主要是我今天阅读memcached源码关于进程启动,在网络这块做了哪些事情。一、iblievent的使用 首先我们知道,memcached是使用了iblievet作为网络框架的,而iblievet又是单线程模型的基于linux下epoll事件的异步模型。因此,其基本的思想就是 对可读,可写,超时,出错等事件进行绑定函数,等有其事件发生,对其绑定函数回调。原创 2014-09-14 23:55:12 · 11244 阅读 · 0 评论 -
网络编程之非阻塞socket的连接
补充关于select在异步(非阻塞)connect中的应用,刚开始搞socket编程的时候 我一直都用阻塞式的connect,非阻塞connect的问题是由于当时搞proxy scan 而提出的呵呵 通过在网上与网友们的交流及查找相关FAQ,总算知道了怎么解决这一问题.同样 用select可以很好地解决这一问题.大致过程是这样的: 1.将打开的so转载 2014-07-28 20:24:53 · 2217 阅读 · 0 评论 -
getaddrinfo()函数详解
getaddrinfo()函数详解 1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以及服转载 2014-04-17 10:36:56 · 3554 阅读 · 0 评论