C/C++程序员必须熟练应用的开源项目

转自:http://blog.163.com/cp7618@yeah/blog/static/702347772014758182929

作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应用过, 但是回过头仔细想想,其实以前自己写过的这些代码,只能是在特定的项目或者特定的环境中使用, 对于自己来说, 在不同的项目中应用, 只需要复制代码, 改改也就可以了, 因为自己写的代码自己很熟悉。问题是, 你封装的这些库, 在给别人使用的时候, 别人用起来是否很方便, 跨平台方面是不是也很通用, 性能是不是足够的好, 是不是支持多线程, 功能是不是也足够强大,可以适用于各种不同的需求。如果你上面这些都做到了, 证明你在这个库上确实花费了一番功夫, 经过了持续的改进和优化。

  在日常的开发中, 作为一个程序员, 很多东西已经没有必要再重新开发了, 可以直接拿过来使用, 毕竟21世纪都已经过了N年了。我们没有必要重新发明轮子(不可否认发明轮子的过程可以学到很多东西,我就是这么走过来的)。

  下面结合自己多年的开发经验, 想到哪里写到哪里, 希望对新人有一定的帮助。

   一、网络

     网络库必须掌握 ACE 和 libevent, 一个是重量级的网络库, 一个是轻量级的网络库。仔细想想,现在那个程序不用网络啊。不懂网络, 你将寸步难行啊。 熟悉这两个开源库的    前提是你必须懂socket的原理, 给大家推荐的好书就是 《UNIX网络编程》,看懂这本书就可以了, 其他的什么《windows网络编程》这些都不用看, 因为网络编程,你学会了伯克利的套接字, 你就可以在任何平台上进行网络编程了, 不需要学什么windows下的网络编程, 因为windows下的网络也是从伯克利套接字搞过来的, 如果你学习《windows网络编程》,那么你那天在linux,unix下进行网络编程,你还得在学习一下。没有那个必要。

    二、数据库

        数据库嘛, 开源的Mysql和开源的PostgreSQL只要懂其中一个就可以了, 商业数据库在掌握一个Oracle就可以了,文件数据库掌握 sqlite。 不过请大家注意, 不要被上面数据库名字给迷惑了, 数据库的本质是SQL语句, 一定要懂数据库的基本原理,熟练应用SQL语言,懂数据库的优化,存储过程等。数据库的原理搞懂了, 拿什么数据库过来都轻松掌握, 就不会在乎是Mysql还是Oracle了。

   三、日志操作

    日志操作推荐大家熟悉 log4cpp这个日志库, 支持多线程, 日志重定向到网络等都有, 反正你能想到的日志的功能, 都有。

    日志嘛,一个是方便查找问题, 方便记录程序运行的一些情况。这是必须的。

   四、管理后台

       众所周知, 写程序是给其他人用的,不是自己用, 所以在程序的易用性上,多给对方提供一些可以直接查看的管理界面, 显得分成重要。为程序提供一个web的管理界面,方便用户登录上去查看程序的各种信息, 很有必要。

       我这里有一个方便的web后台管理的http实现, 可以方便的集成到应用程序中。在IE里面输入监听的端口,就可以查看程序的状态。代码还没有仔细整理。有需要的弟兄可以给我留言, 给大家发。

   五、读取配置文件

       所有的程序都必须有配置文件, 方便配置一些项目, 为程序提供灵活性。 所以写程序,必须有读取配置文件的封装类。

   六、内存池

       所有的进程都需要分配内存, 对C/C++来说, 分配和管理内存是已经很有挑战性的工作。

       给大家推荐 nedmalloc 这个开源的内存池库。nedmalloc是一个跨平台的高性能多线程内存分配库,很多库都使用它。

   七、缓存库

       众所周知, 缓存库用得最多的就是 memcache 了。在做数据库开发的时候特别有用。

   八、脚本

       脚本是一个很有意思的东西,很多功能,其实我们只要写个脚本就可以完成,代码量少,开发速度快。

       必须掌握的脚本,比较通用的要算 perl 了, 很古老的语言,但是功能太强大了。 我可以保证的说,.net,java能干的工作,肯定可以让perl来干。 C能干的, perl不一定能干。perl作为linux, unix的系统集成的脚本语言,必须学会。

       lua 语言, 这个语言, 在游戏行业用得比较多。不推荐学。

       python 脚本, 功能很强大, 推荐学。

       上面这些是所有程序都会用到的比较通用的功能。

     在不同的应用领域, 需要掌握不同开源库, 比如搞游戏开发的, 可能需要掌握开源的UI库CEGUI, 开源的3D引擎OGRE等。

    搞分布式开发的可能会有分布式的文件系统库等。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C、C++语言是IT行业的主流编程语言,也是很多程序员必备的软件基本功,是软件开发行业招聘考查的重点。本书以流行的面试题讲解为主要内容,介绍了C、C++语言基本概念,包括保留字、字符串、指针和引用、结构体、库函数等各个方面的基础知识,介绍了面向对象编程基本概念,包括如何实现继承、多态和封装等。还介绍了排序算法及数据结构的实现,包括链表、堆栈、队列和树。此外,本书开始用两章篇幅详细介绍了中英文面试的注意事项、常见问题及程序员的职业规划等软件工程师的常识。最后四章详细讲解了现在流行的智力测试题。 第一篇 求职 第1章 应聘求职 1.1 企业与人才 1.1.1 企业需要什么样的人才 1.1.2 如何成为企业需要的人才 1.2 做好面试的准备 1.2.1 面试衣着 1.2.2 简历 1.3 面试 1.3.1 面试注意事项 1.3.2 面试问题分析 问题一:“请自我介绍一下。” 问题二:“谈谈你的家庭情况。” 问题三:“你有什么业余爱好?” 问题四:“你最崇拜谁?” 问题五:“谈谈你的缺点。” 问题六:“谈一谈你的一次失败经历。” 问题七:“你为什么选择我们公司?” 问题八:“对这项工作,你可预见到哪些困难?” 问题九:“如果我们录用你,你将怎样开展工作?” 问题十:“与上级意见不一致,你将怎么办?” 问题十一:“我们为什么要录用你?” 问题十二:“你能为我们做什么?” 问题十三:“你是应届毕业生,缺乏经验,如何能胜任这项工作?” 问题十四:“你希望与什么样的上级共事?” 问题十五:“你在前一家公司的离职原因是什么?” 1.4 为明天做好计划 第2章 英文面试 2.1 英文电话面试 2.1.1 英文电话面试注意事项 2.1.2 英文电话面试常见   问题 问题一:When will you graduate? 问题二:How do you normally handle criticism? 问题三:Why should we hire you? 问题四:Please tell me something unreflected at your resume/about yourself/ your experience/your activities. 2.1.3 英文电话面试常用词汇 2.2 英文面试 2.2.1 英文简历 2.2.2 英文面试流程 2.2.3 英文面试注意事项 2.2.4 英文面试常见问题 问题一:What is your strongest trait? 问题二:How would your friends or colleagues describe you? 问题三:What personality traits do you admire? 问题四:What leadership qualities did you develop as an administrative personnel? 问题五:How do you normally handle criticism? 问题六:What do you find frustrating in a work situation? 问题七:How do you handle your failure? 问题八:What kinds of people do you like to work with? 2.2.5 英文面试常用词汇 2.3 计算机专业英语面试常用词汇 第二篇 C/C++面试题 第3章 C/C++程序基础 3.1 基本概念 面试题1:什么是C语言语句 面试题2:变量的声明和定义有什么区别 面试题3:下列字符中,哪些不是C语言关键字 面试题4:下列变量定义中,哪些是合法的 面试题5:如何以最简单的方式让电脑蜂鸣器发出声音 3.2 编程规范 面试题6:谈谈你对编程规范的理解或认识 面试题7:函数、变量等命名都有哪些规则 面试题8:写出bool、int、float、指针变量与“零值”比较的if语句 3.3 数据类型 面试题9:写出代码的输出结果 面试题10:C语言中不合法的整型常数 面试题11:short i = 0; i = i + 1L;这两句有错吗 面试题12:char x[] = {"abcd"}和 char y[] = {'a','b','c','d'} 有不同吗 面试题13:char型数据在内存中的存储形式 3.4 运算符 面试题14:请写出下列代码的输出内容 面试题15:运算符的优先级问题 面试题16:&&和&,||和|有什么区别 面试题17:什么是左值,什么是右值 面试题18:请写出程序的运行结果 面试题19:sizeof和strlen的区别 3.5 结构体 面试题20:结构体是什么样的数据类型 面试题21:结构体可以直接赋值吗 面试题22:组织WAV文件头,并解析WAV格式的各项信息 面试题23:计算学生不及格的人数打印他们的性别、姓名和成绩 面试题24:结构体内存对齐问题 3.6 C和C++的区别 面试题25:关键字static在C和C++中的区别 面试题26:C语言的结构体和C++的有什么区别 面试题27:C中的malloc和C++中的new有什么区别 面试题28:C++的引用和C语言的指针有什么区别 第4章 预处理、保留字 4.1 预处理 面试题1:简述#ifdef、#else、#endif和#ifndef的作用 面试题2:宏定义和函数 面试题3:用#define声明一个常数 面试题4:写一个“标准”宏MIN 面试题5:typedef和define有什么区别 面试题6:#define CHAR char*和typedef char* CHAR各有什么优劣 面试题7:谈谈你对typedef的认识 4.2 const(常量) 面试题8:关键字const是什么 面试题9:说明以下a声明的含义 面试题10:const、define定义常量的区别 4.3 static(静态)和extern 面试题11:static有什么作用 面试题12:extern有什么作用 面试题13:简述变量存储类型 4.4 volatile 面试题14:volatile有什么作用 面试题15:一个参数可以既是const又是volatile吗 面试题16:一个指针可以是volatile吗 第5章 引用和指针 5.1 引用 面试题1:什么是引用 面试题2:常引用有什么作用 面试题3:流操作符重载为什么返回引用 5.2 指针 面试题4:说明以下声明的含义 面试题5:简述指针常量与常量指针区别 面试题6:写出以下代码的输出结果 面试题7:找出代码的错误 5.3 指针和数组 面试题8:写出代码的输出结果 面试题9:请问这段程序有问题吗 面试题10:a和&a有什么区别 面试题11:请问代码有什么问题 面试题12:数组名和指针的区别 5.4 函数指针 面试题13:请解析(*(void (*)())0)()的含义 面试题14:指出程序的错误 5.5 “野指针” 面试题15:如何避免“野指针” 面试题16:程序是否正确 面试题17:指出程序的错误 5.6 动态内存 面试题18:简述C、C++程序编译的内存分配情况 面试题19:以下四段代码中哪段没有错误 第6章 字符串 6.1 数字字符串 面试题1:编码实现数字转化为字符串 面试题2:编码实现字符串转化为数字 6.2 字符串函数 面试题3:编写一个标准strcpy函数 面试题4:简述strcpy、sprintf与memcpy的区别 6.3 字符串与数组 面试题5:找出程序的错误之处 面试题6:判断程序会出现什么问题 第7章 嵌入式编程 面试题1:编码实现某一变量某位清或置 面试题2:用C编写一个死循环程序 面试题3:用变量a给出下面的定义 面试题4:设置地址为0x67a9的整型变量的值为0xaa66 面试题5:评论下面这个中断函数 面试题6:评价一个代码片段 第8章 面向对象 8.1 面向对象的基本概念 面试题1:谈谈你对面向对象的认识 面试题2:面向对象的三大特征 面试题3:面向过程和面向对象有什么区别 8.2 类的成员变量和成员函数 面试题4:简述类public、protected、private的作用 面试题5:写出代码的打印结果 面试题6:写出程序的打印结果 面试题7:C++的空类有哪些成员函数 8.3 构造函数和析构函数 面试题8:构造函数能否为虚函数 面试题9:简述子类与父类的析构、构造函数的调用顺序 面试题10:编写类String 的构造函数、析构函数和赋值函数 8.4 拷贝构造函数 面试题11:谈谈对拷贝构造函数和赋值运算符的认识 面试题12:写出当定义#define _INMAIN 0和不定义时代码打印结果 第9章 继承与多态 9.1 继承 面试题1:指出程序的错误 面试题2:用C++设计一个不能被继承的类 9.2 虚函数和纯虚函数 面试题3:下面说法中正确的是哪个 面试题4:写出程序的打印结果 面试题5:访问基类的私有虚函数 9.3 多态 面试题6:简述类成员函数的重写、重载和隐藏的区别 面试题7:简述多态实现的原理 第10章 数据结构 10.1 链表 面试题1:链表和数组有什么区别 面试题2:寻找单链表中间结点 面试题3:怎样把一个单链表反序 10.2 单循环链表 面试题4:根据需求建立一个单向循环链表 面试题5:检测一个较大的单向链表是否带环 10.3 双向链表 面试题6:按要求构造一个双向链表 面试题7:编程实现双链表插入新结点 面试题8:编程实现双链表删除指定结点 10.4 栈和队列 面试题9:简述队列和栈的异同 面试题10:建立一个链式栈 面试题11:建立一个链式队列 面试题12:能否用两个栈实现一个队列的功能 10.5 二叉树 面试题13:建立一个二叉树 面试题14:计算一棵二叉树的深度 面试题15:在二元树中找出和为某一值的所有路径 第11章 排序 11.1 插入排序 面试题1:编码实现直接插入排序 面试题2:编码实现希尔(Shell)排序 11.2 交换排序 面试题3:编码实现冒泡排序 面试题4:编码实现快速排序 11.3 选择排序 面试题5:编码实现直接选择排序 面试题6:编程实现堆排序 11.4 基数排序 面试题7:编程实现基数排序 第三篇 智力测试 第12章 基本方法 面试题1:斯密斯夫妇握手问题 面试题2:5个强盗分100颗宝石 面试题3:分牛 面试题4:谁在说谎 面试题5:是亏了还是赚了 面试题6:小虫分裂问题 面试题7:飞机绕地球环行问题 第13章 数学能力 面试题1:用一笔画出经过9个点的4条直线 面试题2:在9个点上画10条线 面试题3:100盏灯 面试题4:找出不同的球 面试题5:时针、分针和秒针重合问题 面试题6:可以喝多少瓶汽水 面试题7:怎样拿到第100号球 面试题8:烧绳计时 面试题9:分金条 面试题10:至少有多少人及格 面试题11:如何取3升水 面试题12:将16升水平均分给四个人 面试题13:如何将140克的盐分成50、90克各一份 面试题14:蜗牛几天能爬到井口 面试题15:100美元的差额到哪里去了 面试题16:点击鼠标比赛 面试题17:小猴最多能运回多少根香蕉 面试题18:算出小张买了几瓶啤酒、几瓶饮料 面试题19:牧场有多少匹马 面试题20:找出不同的苹果 面试题21:如何穿越沙漠 第14章 推理能力 面试题1:怎么少了100元 面试题2:村里有多少条病狗 面试题3:他们都在做什么 面试题4:躯体与灵魂 面试题5:小明一家能否安全过桥 面试题6:过河   问题 面试题7:这是张什么牌 面试题8:说谎岛上的两个部落 面试题9:谁是特尔斐城的预言家 面试题10:哪个政党获胜 面试题11:每个护士星期几休息 面试题12:每个人系的圆牌都是什么颜色的 面试题13:帽子问题 面试题14:谁是凶手 面试题15:他们的头发是什么颜色的 面试题16:谁是漂亮的青年 面试题17:哪个袋子里有金子 面试题18:他们星期几在说谎 面试题19:剩下的是什么牌 面试题20:老李的儿子们是做什么的 面试题21:史密斯家的门牌号 面试题22:尤克利地区的电话 面试题23:乡村庙会的15点游戏 面试题24:各家的孩子得了第几名 面试题25:经理应该带谁出差 面试题26:法官的判决 面试题27:张老师的生日是哪一天 面试题28:谁是M小姐的情人 面试题29:他们分别是哪国人 面试题30:他们分别是做什么的 面试题31:他们都会说什么语言 面试题32:怎么把马匹从甲村拉到乙村 面试题33:谁打碎了花瓶 面试题34:分机票 面试题35:石头有多重 面试题36:该释放谁 面试题37:谁打碎的玻璃 面试题38:谁是最优秀的医生 面试题39:今天星期几 面试题40:五个人进行汽车竞赛 面试题41:下一行是什么 面试题42:三筐水果各是什么 面试题43:最后剩下的是谁 第15章 反应能力 面试题1:下水道的井盖 面试题2:30秒答题 面试题3:一分钟答题 面试题4:镜子中的你 面试题5:埃及古币 面试题6:投硬币 面试题7:他在撒谎吗 面试题8:制造零件 面试题9:不喜欢正方形窗户的人 面试题10:孩子租房 面试题11:重男轻女的国度 面试题12:分遗产 面试题13:栽果树 面试题14:聪明的农民 面试题15:聪明的死刑犯 面试题16:幼儿园中奇怪的人 面试题17:奇怪的城镇 面试题18:聪明的商人 面试题19:渡船过河 面试题20:愚蠢的长工 面试题21:红球和白球 面试题22:小明坐在了哪里 面试题23:乌龟赛跑 面试题24:老师的爱恋 面试题25:爬楼梯 面试题26:马丁先生的约会 面试题27:巧入房间 面试题28:管子中的球 面试题29:女儿的错
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值