自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Programmer

初学者的心得

  • 博客(33)
  • 收藏
  • 关注

原创 迁移至新的博客,欢迎交流学习 :)

https://www.cnblogs.com/chenxinshuo/

2018-07-17 17:12:10 280

原创 * 编程注意项 *

1.  模块化封装(不使用内部数据)2.  参数合法性检查(及其处理)3.  数组越界4.  参数加 const 提高健壮性5.  使用 static 函数封装6.  有意义的常量定义宏提升可读性7.  代码勤加注释8.  执行概率高的代码放在前面,提高中靶率

2016-11-19 23:58:15 499

原创 * 检讨 *

2016 / 8 / 4测试用例挨个手打,不要复制(任何)代码(改了2个小时发现是测试的函数写错了...)2016 / 11 / 14使用库函数等必须检查返回值,处理错误码(...gdb调了4个小时没发现错哪了)

2016-11-19 23:38:21 507

原创 Nginx学习笔记 —— 高级数据结构

动态数组ngx_array_t 表示一块连续的内存,其中存放着数组元素,概念上和原始数组很接近// 定义在 core/ngx_array.htypedef struct{ void * elts; // 数组的内存位置,即数组首地址 ngx_uint_t nelts; // 数组当前的元素数量 size_t

2017-08-30 16:59:35 558

原创 Nginx学习笔记 —— 基本数据结构

Nginx的一些特点:高性能 采用事件驱动模型,可以无阻塞的处理海量并发连接高稳定性 内存池避免了c程序常见的资源泄漏问题 模块化架构使得各个功能模块完全解耦 one master / mutil workers 进程池设计实现了自我监控管理,保证一个worker挂掉也能快速恢复服务低资源消耗 不使用传统的进程或线程服务器模型,没有切换成本 使用很多节约系统资源的编程技巧高扩展性

2017-08-23 10:31:16 501

原创 C++11 新特性

右值引用&转移语义: 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率; 能够更简洁明确地定义泛型函数。 https://www.ibm.com/developerworks/cn/aix/library/1307_lisl_c11/final: 显式禁止类被继承default: 显式实现默认构造/析构函数nullptr: 强类型的空指针auto: 自动类型推导lambd

2017-08-17 01:49:11 2332

原创 Nginx学习笔记(三)

Request:Nginx 中的 ngx_http_request_t 是对一个 http 请求的封装;

2017-08-12 20:46:24 282

原创 Linux 系统调用 —— fork()内核源码剖析

系统调用流程简述:fork()函数是系统调用对应的API,这个系统调用会触发一个int 0x80的中断; 当用户态进程调用fork()时,先将eax的值置为2(即__NR_fork 系统调用号);执行 int $0x80,cpu进入内核态;执行SAVE_ALL,保存所有寄存器到当前进程内核栈中; 进入sys_call,将eax的值压栈,根据系统调用号查找 system_call_

2017-08-02 20:39:11 2217 3

原创 Linux 复习笔记

Linux 常用基本命令:文件 —— cp  rm  mv  tail  mv  more  find  grep进程 —— ps  kill  jobs  top管理 —— useradd  userdel  passwd  shutdown  init  halt  reboot网络 —— ping  tcpdump  netstat/***************

2017-07-29 11:07:01 517

原创 地址映射——输出虚拟地址所对应的物理地址

Linux内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。 /proc 是个伪文件系统,它只存在于内存中,不占用磁盘空间。它以文件系统的方式为外部访问内核数据的操作提供接口。/proc 下还有一些以数字命名的目录,它们是进程目录。系统当前运行的每一个进程都在 /proc 有一个相对应的目录,以该进程的 pid 命名,是读取进程信息的接口,而

2017-07-29 09:14:34 3366

原创 2017模拟面试题库 —— C++相关

Q:指针和引用的区别?A:在x86 32位 Linux系统下,指针占4个字节;从底层实现上来看:1. 引用也是一个指针,创建一个指针和创建一个引用的汇编指令是一样的 int a = 8;011A5F6E mov dword ptr [a],8 int * p = &a;011A5F75 lea eax,[

2017-07-15 13:53:34 2115

转载 游戏服务器:到底使用UDP还是TCP

本文转载于伯乐在线,原文地址:http://blog.jobbole.com/64638/在编写网络游戏的时候,到底使用UDP还是TCP的问题迟早都要面对。一般来说你会听到人们这样说:“除非你正在写一个动作类游戏,否则你就用TCP吧” 或者是 “你能够在MMO游戏中用TCP,因为魔兽世界就用的TCP!”遗憾的是,这些观点都没有反映这个问题的复杂性。

2017-07-13 19:26:15 1058 1

原创 面试总结

(2017/9/25 更新 乐信 远程面试)

2017-07-13 15:50:53 3059 1

原创 Nginx学习笔记(二)

Connection:在Nginx中,connection就是对TCP连接的封装,其中包括连接的socket,读写事件。Nginx处理连接流程:1. 解析配置文件,得到需要监听的端口和IP地址;2. 在 master 中初始化监听 socket -> bind ->listen;3. fork 多个子进程,子进程会通过竞争accept_mutex 锁获得新连接;

2017-07-09 18:06:25 269

原创 Nginx学习笔记(一)

Nginx进程模型1. 多进程模型:    进程间相互独立,无需加锁,且互不影响;    一个进程退出了不影响其他的进程运行,降低风险;    当请求到来,多个worker通过竞争accrpt_mutex而获得注册listenfd读事件,在读事件里调用accept接受连接。2. 异步非阻塞:    处理网络事件与I/O复用相同,同时监控多个事件,当有事件就绪了就去读

2017-07-09 14:59:55 358

原创 Linux I/O复用 —— epoll部分源码剖析

epoll_creat( )1. 在内核注册文件系统eventpollfs,挂载此文件系统/* linux一切皆文件,便于处理若返回指针,指针如果出错则无法判断,而fd可以通过current -> files -> fd_array[ ]找到其真伪epoll_creat为什么返回一个fd?因为它对应的就是这个文件系统中创建的新文件*/2. 创建两个内核cac

2017-07-08 16:31:00 1251

原创 2017模拟面试题库 —— Linux系统相关

Q: 请描述一下多线程怎么实现生产者消费者模型A:

2017-05-30 19:52:51 2693

原创 程序员的自我修养 - 编译链接简图

/* 备注 */重定位: 找到符号(函数 / 变量)的地址

2017-04-08 18:41:51 493

转载 errno.h头文件介绍

查看错误代码errno是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。在实际编程中用这一招解决了不少原本看来莫名其妙的问题。比较 麻烦的是每次都要去linux源代码里面查找错误代码的含义,现在把它贴出来,以后需要查时就来这里看了。以下来自linu

2017-03-16 17:11:19 973

转载 Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

转载请注明出处: http://kyang.cc/栈是什么?栈有什么作用?首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据栈的特点,很容易的想到可以利用数组,来实现这种数据结构。但是本文

2017-01-26 13:22:55 785

转载 TCP长连接与短连接的区别

1. TCP连接当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的经典的三次握手示意图:经典的四次握手关闭图:2. TCP短连接我们模拟一下TCP短连接的情况,c

2017-01-23 15:24:31 905

原创 Linux -- 进程间通信几种方式的总结

一、 管道优点:1. 管道文件不占磁盘空间,打开管道时在内存中分配空间;2. 管道读端会在读取完管道内数据后自动进入阻塞,直到写端再次写入数据;缺点:1. 管道是半双工的,数据只能从一个方向上流动;2. 管道大小PIPE_SIZE限制为64k;二、 共享内存优点:1. 共享内存是最快的一种IPC,因为客户端和服务器共享一块给定的存储区,不

2016-11-28 17:52:52 466

原创 C++ 之引用

引用又称“别名”,对引用的操作相当于对原变量操作int a = 10;int &b = a;// b就是a的引用,改变b就是改变a*注意*1. 没有空引用,定义引用时必须初始化2. 不能有引用的引用,引用不分级void main(){int a = 10;int &b = a;// int* const b = a}

2016-11-19 20:55:02 353

原创 C++面试问题总结 3

/* 用户态与内核态之间如何切换? *//* 两个进程之间如何切换?*//* 写时拷贝会不会影响 全局变量区、局部变量区、堆区? *//* 互斥锁、自选锁、原子锁的区别? *//* 可变参数中形参的入栈占用空间? */

2016-11-17 17:51:52 435 1

原创 C++面试问题总结 2

/* 什么是缺省函数?C++的类中有哪些缺省函数?*/缺省函数是C++声明一个类后编译器默认生成的函数(如果未定义的话)共有六个缺省函数1. 缺省构造函数2. 缺省拷贝构造函数3. 缺省析构函数4. 赋值运算符5. 取地址运算符6. 取地址运算符(const)/* 为什么会有缺省函数? */正如自然界中人会有生老病死,

2016-11-17 17:40:29 369

原创 C++面试问题总结 1

/* scanf / printf 的返回值是什么? */int scanf (const char *restrict format, ...)scanf函数返回成功读入的数据项数,读到文件末尾出错则返回EOFint printf(const char *format, [argument], ...);返回成功打印的字符数,若错误返回一个负值/* __cde

2016-11-17 16:25:13 461

原创 Linux -- 进程间通信之管道

管道是Linux里的一种文件类型,同时也是Linux系统下进程间通信的一种方式创建一个管道文件有两种方式:1.  Shell 下命令 mkfifo + filename,即创建一个有名管道2.  C语言里调用 pipe( ) 函数,创建一个无名管道管道文件的特性:1.  打开管道必须有两端(两个进程)同时打开一个管道,分别为读(r)和写(w);读取端负责从管道中

2016-11-15 00:51:24 410 1

原创 Linux -- 信号发送实现

信号是Linux系统响应某些条件而产生的一个事件,接收该信号的进程会响应地采取一些行动。

2016-11-01 23:11:52 505

原创 Linux -- 进程间通信之信号量

多个线程同时访问一个共享数据,很可能造成恶劣的后果。 为了保证数据访问资源的正确性和安全性,需要对线程进行“同步”。(Linux下所有的执行实体都称为任务(task),每个任务类似于单线程的进程,共享了同一个内存空间的多个任务构成了一个进程)同步即指在一个线程对数据访问未结束的时候,其他线程不得访问同一个数据,将对数据的访问原子化。同步最常用的方式是“锁”,每一个线程访问数据或

2016-10-24 00:02:02 460 1

原创 Linux -- 进程管理之僵尸进程

UNIX 存在一种机制:在每个进程退出的同时,操作系统释放该进程所有资源,但仍然保留一定的信息(PID / Status / runtime),直到父进程wait() / waitpid(), 以便父进程得到子进程状态信息;此时这个子进程就由正常进程(R)变成了僵尸进程(Z)但系统中可用的进程号是有限的,大量的僵尸进程将会导致无法生成新的进程,阻碍系统正常运行。僵尸进程

2016-10-22 00:43:50 402

原创 Linux -- 进程管理之fork() 函数

for(int i = 0; i<2; i++){ if(fork() == 0) printf("A\n"); else printf("B\n");}for(int i = 0; i<2; i++){ if(fork() == 0) printf("A"); else prin

2016-10-19 18:10:26 810

原创 C语言(一)——变量

常用变量类型地址小端  :低地址保存低位   高地址保存高位              常用于   Inter  PC    /  复杂指令集  大端:低地址保存高位    高地址保存低位            常用于 ARM  手机  网络   /   精简指令集

2016-07-17 15:12:34 447

原创 C语言基础——进制转换 / 数据表示

第一部分:进制转换二进制:由0~1构成,逢2进1八进制:由0~7构成,逢8进1十六进制:由0~9、A~F构成,逢16进1两个基本概念基数:n进制基数为n123.4 = 1*10^2 + 2*10^1 + 3*10^0 + 4*10^-1 位权:小数点左边第k位位权为   基数^k-1    小数点右边第k位位权为   基数^-k其他进

2016-07-17 08:43:09 824

空空如也

空空如也

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

TA关注的人

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