- 博客(42)
- 资源 (2)
- 收藏
- 关注
原创 代码大全_第七部分: 软件工艺
31章, 布局与风格本章没有太多新内容, 核心有以下两点可读: 写代码除了可以正常工作, 可读, 易懂也非常重要代码的布局应该能够体现其逻辑, 使用空行将逻辑意义相近的代码归为一段通过清洗, 松散的布局将代码逻辑表现清楚, 不人为地增加代码的的复杂度一致:有很多种布局方式, 很难说孰优孰劣, 关键是要一致, 连贯.32章, 自说明代码本章提
2016-07-25 16:20:25 423
原创 代码大全_第二部分: 创建高质量的代码
第7章: 高质量的子程序原则性问题:子程序的设计要考虑内聚性: 保证每个子程序只做一件事一些小的点:好的函数名字:包含所有事情对返回值有所描述长度不最多在20个字符左右在整个项目中规则一致即使某个操作很短, 如果它适合写成函数(比如出现了很多次, 有明确的逻辑含义), 那么也是有必要的.函数很长不重要, 但要保证逻辑上只做了一件事情. 复杂的算法或业
2016-04-04 16:50:47 400
原创 设计模式学习: Adapter(适配器, Wrapper)模式
一, 意图: 将一个类的接口转化成客户希望的另一个接口。 Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。二, 别名: Wrapper 包装器三, 动机:一些已有的类已经实现了你想要的功能, 但是其接口并不兼容。所以你需要一个Wrapper来复用它们, 方式有两种:Adapter模式的类版本:新的wrapper
2016-04-01 18:13:10 2904
原创 单元测试学习: mock有复杂行为的接口
一, 问题 gmock 提供了EXPECT_CALL的WillOnce 和WillRepeatedly方法来模拟返回值比较简单的情况(可以参考http://www.cppblog.com/woaidongmao/archive/2009/05/02/81669.html), 但是有时需要模拟更复杂的行为. 例如需要 "返回一个有序数列中大于某个值的最小数", 即stl中的l
2016-04-01 18:11:27 2487
原创 前端学习: JS学习
参考自http://www.w3school.com.cn/js/index.asp一, 使用方式js可以直接嵌入到html里运行 也可以用于响应事件, 例如 点击这里js可以修改大部分html属性js也经常用于处理和用户的交互js一般放在中或底部二, 基本概念操作html元素: document.getElementById(id)基本语法:一般用分号结束
2016-04-01 18:10:38 622 1
原创 前端学习: HTML 学习
参考自http://www.w3school.com.cn/html/index.asp一, 最简单的HTMLHTML不是变成语言, 而是标记语言, 使用标签来解释页面的内容. 换句话说, 与xml, json等类似, html只是用来描述网页的数据, 对其的解析由浏览器完成.出于对各种情况的考虑, 浏览器咋对html进行解析时, 并不要求其格式完整, 而是尽可能地展示其内
2016-04-01 18:10:08 677 1
原创 前端学习: CSS学习
参考自http://www.w3school.com.cn/css/css_intro.asp一, 简介CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中,是为了解决内容与表现分离的问题外部样式表可以极大提高工作效率外部样式表通常存储在 CSS 文件中多个样式定义可层叠为一,
2016-04-01 18:09:35 291
原创 NGX学习: ngx_event事件机制
一: 概述1, 编译时如何选择正确的事件机制?答: 编译的目标选择最先进的事件机制, 例如如果该机器支持epool就不会使用pool或select等. 实现的方法是写一个编译脚本, 依次尝试, 例如先尝试编译epool, 如果失败再尝试poll等. (待确认)二: 代码结构 三: 数据结构1, ngx_event_s描述一个事件最基
2016-04-01 18:08:16 1516
原创 C语言技巧: 实现面向对象
一: 公有/私有 利用static关键字的文件作用域特性, 保证私有函数和变量不暴漏给使用者二: 封装C++: 封装,即隐藏对象的属性和实现细节,仅对外公开接口实现原理还是利用static的文件作用域特性.C++代码:class Car {publc: int run(int kilometers);priv
2016-04-01 18:05:08 437
原创 APUE学习: 第五章, 标准I/O库
一, fread, fwrite 与read, write的区别: 缓冲fread/fwrite是对 read, write的一层封装, 即加了一个缓冲区, 其目的在于尽量减少read/write的调用次数缓冲区分类:全缓冲: 就是缓冲区满才flush行缓冲: 一行一次flush无缓冲特点:会有一个例程自动地进行周期性的flush一般来说标准输出, 标准输入是行缓冲的,
2016-04-01 18:04:10 253
原创 APUE学习: 第四章, 文件和目录
一, 函数 stat, fstat, fstatat和lstat这些函数用来获得文件的基本信息, 包括文件类型, i节点号, 所有者id / group, 修改时间, 大小等信息, 结果保存在一个struct stat中ls -l命令即通过stat函数实现 stat各成员含义:文件类型: 包括普通文件, 目录文件, FIFO, socket, 符号链接(软连接)等读写权限: 包
2016-04-01 18:03:27 275
原创 APUE学习: 第三章, 文件I/O
一, 基本函数 open, close, creat, lseek, read, write这些是最原始的系统内核函数, 其他I/O函数例如fread, fwrite系列等都是由此派生而出的open函数:int open(const char *pathname, int oflag, ...)有很多选项是内核版本相关的, 需要查询man手册oflag 参数指定了打开模式, 必须是
2016-04-01 18:02:47 335
原创 APUE学习: 第一章, Unix基础知识
一, Unix操作系统体系结构 内核提供系统调用, 部分C库函数使用系统调用实现, 应用程序可以调用shell, 库函数, 和系统调用二, 知识点每个进程有三个时间, 可以用time命令查看:时钟时间: 即实际耗时, 包括进行运行时间和中断时间用户CPU时间: 程序用户态所花时间系统CPU时间: 程序在内核态所花时间CPU时间: 用户CPU时间
2016-04-01 18:02:06 277
原创 代码大全_第一部分: 打好基础
第1章: 欢迎进入软件构建的世界 简而言之, 构建就是跟编码有关的事情, 包括编码与调试, 测试的全部和需求分析, 设计, 架构的部分.第2章: 用隐喻来更充分地理解软件开发 文中的隐喻一词意指建模(model), 比如地心说模型和日心说模型. 好的模型可以更生动第说明一件事情的基本要素, 更能指引人们去发现新的特性. 历史上对软件构建提出的模型如下:
2016-03-29 09:20:41 438
原创 代码大全_第4部分_语句
第14章: 组织直线型代码原则性问题:不要让代码产生隐式的依赖, 比如A函数完成业务的同时还初始化了成员变量, 这样其他成员函数就必须依赖A函数的执行. 正确做法是再单独写一个init函数.就近原则: 把相关的操作放在一起
2016-03-27 08:34:55 324
原创 代码大全_第3部分: 变量
总结: 代码的可读性比可写性更加重要第10章: 使用变量的一般事项就近原则: 当读代码时, 需要同时考虑的变量越少, 代码越容易看懂, 因此:
2016-03-25 23:24:00 327
原创 index
struct SearchIndexInfo { string name; map attrlist;};class SearchIndexAttrInfo { bool m_isindex; uint32_t m_datatype; uint32_t m_offset; }
2014-06-30 15:30:09 311
原创 nginx学习之 双向链表nginx_queue_t 性能测试: 10倍于STL!
nginx 以其高性能著称于世, 今天对其双向链表 ngx_queue_t 和 STL的list做了一下性能对比测试, 果然不孚所望.先上结论, 令人吃惊: 1, 就插入和删除操作来说, nginx_queue_t 的性能差不多是STL list的10倍左右 2, nginx_queue_t 非常轻量级,没有诸如 size(),reverse() 等STL list的功能
2014-03-24 22:28:05 721
原创 设计模式学习: 工厂模式
工厂模式是较常见的一种设计模式一:基本特点:工厂模式可分为简单工厂模式,工厂模式和抽象工厂模式,它们的思路和实现都很相似. 基本特点为至少包括以下三个类:工厂类: 用new操作符创建各种产品类抽象产品类: 各产品类的基类, 定义了产品的接口,具体产品类: 抽象产品类的子类, 包含了具体实现用户在使用时通过工厂类生成符合要求的产品对象,并赋给一个抽象产品类的指针. 通
2014-02-07 21:40:15 475
原创 网络编程学习_设计模式_半同步半异步模式
设计模式大部分都是扯蛋的,真正有用的不多,广泛应用的更少寥寥无几,半同步半异步(Half-Sync/Half-Async)正是其中之一一: 同步和异步的问题同步: 编码简单,逻辑清晰, 但效率低异步: 效率高,但结构复杂,需处理各种时序和竞争问题对于网络通信来说异步可以避免大量的阻塞,提高效率, 因此高性能服务器基本都是异步的. 但对于业务处理来说异步并没有明显性能优势,反而会导致
2014-01-25 00:53:17 884
原创 网络编程学习_其他IO函数
本文为UNP14章学习笔记一: 套接字超时: 一般通过select的timeout参数实现(timeout=NULL阻塞, =0的timeval非阻塞, 非0timeval超时)fd_set rset;FD_ZERO(&rset);FD_SET(&rset,fd);timaval t;t.tv_sec=5;t.tv_usec=0;int ret = select(&rset,N
2014-01-25 00:20:23 563
原创 网络编程学习_套接字选项
本文是UNP第7章学习笔记一,getsockopt和setsockopt函数#include int getsockopt(int sockfd, int level, int optname, void* optval socklen_t* optlen);int setsockopt(int sockfd, int level, int optname, const void*
2014-01-14 00:18:50 686
原创 网络编程学习_IO复用:select/poll
本文为UNP第6章学习笔记一, select函数#include int select(int maxfd,fd_set* readset, fd_set* writeset, fd_set* exceptset, const struct timeval* timeout);参数:maxfd: select管理的最大fd+1, 也就是说你必须自己算出最大的fd是多大r
2014-01-12 22:42:35 530
原创 网络编程学习_简单的多进程并发服务器/客户端
本文是UNP第五章学习笔记一,wait和waitpid函数#includepid_t wait(int* statloc);pid_t waitpid(pid_t pid,int statloc,int options);这两个函数用来等待子进程结束. 参数statloc返回进程的终止状态,返回值为终止的子进程idwaitpid是wait的功能加强版,增加了一些有用的功能,
2014-01-11 10:58:19 1342
原创 网络编程学习_基本socket函数
知其然更要知其所以然,虽然这几个函数已经写过不少次,却一直不知道它们究竟做了什么一,socket int socket(int family,int type,int protocol);仅仅申请了一个sock fd而已,并没有与任何地址相关联,对于TCP, family=AF_INET, type=SOCK_STREAM,protocol=0/IPPOROTO_TCP二,conn
2014-01-09 01:42:24 607
原创 网络编程学习_socket辅助函数(一)
本文为unp第三章学习笔记一,ipv4地址结构:struct in_addr{ in_addr_t s_addr;};struct sockaddr_in{ sa_family_t sin_family; in_port_t sin_port; struct in_addr sin_addr;
2014-01-08 00:19:03 604
原创 网络编程学习_TCP协议
一,TCP的主要功能TCP主要解决了网络的确认,超时,重传,和流量控制二,TCP的主要特点面向连接流式数据,齐保文内容是无边际的全双工三,三次握手与四次挥手即连接的建立至少发送3个消息,终止一般需要4个(被动关闭端的ACK和FIN可能合并), 可以看到:每个非ACK包都需要一个ACK进行确认ACK可以附在其他消息上,这称为"捎带"被动关闭端收到F
2014-01-07 08:54:28 448
原创 C++学习_STL算法
STL提供了许多算法,它们大多依赖于迭代器和仿函数,可以运行在几乎所有容器和数组上. 一些算法并不常用,名称有点混乱,而且很容易简单地实现, 不过了解一下常用的STL算法还是很有必要的.一, for_each 这个算法还是比较常用的,1,第三个参数op可以是函数或仿函数, 可以通过op改变遍历对象,(不能改变关联容器,因为它们的元素是const的)2,op可以有返回值,但是会被废弃
2013-06-24 18:13:53 565
原创 C++学习_杂项
一,string1,与vector类似,string也面临重新分配空间的问题, 也有reserve(), capacity(),等一系列函数, 不过一个差别是string的reserve可以缩小容量,而vector不行2,string 也支持iterator,但string中的find等函数并不返回iterator,而是size_t (string::size_type)3,strin
2013-06-19 17:23:14 543
原创 C++学习_特殊容器: bitset,stack,queue 和Priority Queues
一, Bitset 1,bitset是一个管理一系列布尔值的容器, 其长度是固定的,不能动态增长,如果需要动态增长,可以使用vector2,bitset定义了一系列布尔值运算有关的函数,例如: any/ none : 判断是否所有位都为0 set/reset,:将一个/所有值设为0,1 count 统计1的个数test 测试某位是否为1fl
2013-06-18 00:18:48 636
原创 C++学习_仿函数(functors)
仿函数,也称函数对象, 其实就是重载了括号运算符()的对象, 不过可以具有函数的一些性质, 可以在需要函数的地方(主要是各种容器和算法)使用.一,仿函数的优点:1,可以拥有状态, 可以在运行时动态地改变行为3,速度更快, (其实快不了多少)二,性质及应用1, 主要应用在map等容器的构造函数和各种STL算法上2,默认情况下是传值引用的, 也就是说仿函数的状态不会因算
2013-06-14 10:20:00 1277
原创 python学习_多线程
一,GIL(全局解释器锁), 这个东西争议很大,至少我是不赞成的(屌丝反对无效). GIL的意思是任何时候只有一个CPU在运行, 也就是把你的多核机器变成一个单核机器. 好处是从根本上保证了线程安全, 坏处是使本来效率就很差的python变得更低效了. 1,print在多线程下打印可能会乱,尽量使用sys.stdout.write()2,python的 error trace是分线程进
2013-06-12 15:56:37 1032
原创 C++学习_多线程
C++/C本身并没有多线程的内容,需要使用pthread库, include,编译+ -lpthread, pthread是一个posix标准,在不同平台上有不同实现,这里以linux pthread库为准.参考https://computing.llnl.gov/tutorials/pthreads/#CreatingThreads一,线程的创建1,使用pythread_create
2013-06-12 10:43:13 583
原创 Python学习_面向对象(OOP)二:实现技巧
一:公有&私有 数据隐藏: python只支持"伪私有", 即以"__"开头的成员或成员函数不能直接访问到,但实际上他们只是被重命名了而已,你可以通过_module__func 访问到他们, 例如__a => _A__a二,重载 基本与C++一样,通过定义同名函数实现,但注意python的函数不区分参数数量/类型或返回值三, 静态通过在函数上面加@stati
2013-06-10 22:19:21 547
原创 Python学习_面向对象(OOP)一:类的实现机制
先看几个例子,C++码农可能会觉得不可思议:一:对象与实例是两种不同的类型class A:passa1=A()a2=A()print type(a1)==type(a2) #Trueprint type(a1)==type(A) #False 二:可以在类之外为类增加成员和成员函数import sysclass A:passa=A()A.data="h
2013-06-10 17:38:32 679
原创 C++学习:hash(unordered_map)
hash table是一个非常重要的数据结构,但目前版本的stl中并没有,C++11中会加入.目前版本的trl中有一个std::trl::unordered_map, 需要include 本文以这个实现为准.一,hash与map hash与map很像(从名字也看得出来: unordered_map vs map),包括各种操作的api和应用场景. hash的性能非常出色:拥有高达
2013-06-08 21:17:58 4647
原创 序列容器:vector,deque,list
一,容器的通性1,将元素插入容器进行了一次拷贝操作,如果想要实现类似于”引用”的情况,可以用指针.2,容器中的元素是有序的,即用一个iter从begin遍历到end,多次运行得到的结果是相同的.3,一般有如下API:a) 构造函数通常有这三种:ContType c, ContType c1(c2),ContType c(beg,end)b) 支持各种赋值(=)和
2013-06-07 16:02:50 718
原创 C++学习_IO:输入/输出
一:格式化字符串,常用规则的如下:我觉得C风格的输入输出比C++中的好用的多。格式化字符串比一堆堆“%[flags][width][.perc][F|N|h|l]typetype: %d %s %u %x %X %f %p等 这个最为常用,大家都熟悉~flags: 无: 右对齐,- :左对齐,注意左对齐是不能补0的(有歧义)0:在前面补0,需要跟width一起用
2013-06-04 23:42:33 541
Storm分布式实时计算模式源代码
2018-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人