- 博客(32)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 备战C++找工作的学习路径
1 前言写这篇文章,主要是因为今天有朋友聊到打算从测试转C++开发。一方面帮助朋友梳理看书路径,提供一个看书,应聘的方案;另一方面,也是梳理自己思路,以鸟瞰的方式,帮助自己更全面地检视知识和经验。受限于自己专业阅读量,加上本身没有达到对编程的狂热痴迷程度,所以,此处我不会列出很多书,只是描绘C++世界中的一个小国度,并提供一些通往这个国家的路径。至于其他C++国家的事情,我只是简单概括一下。...
2020-03-21 17:50:58
1696
原创 a rpc using boost.asio and protobuf
0 序言protobuf在rpc方面,仅仅提供了一个简单的框架和数据序列化手段,构建client与server之间的连接、通信、存储、线程处理等多方面问题需要用户自己实现。下面,将简单介绍使用protobuf和boost.asio来构建一个简单的rpc。该rpc只是简单阐述protobuf的rpc框架,耦合度较高,具体实现需要根据业务场景来实施。1 定义.proto文件protobuf提供了...
2019-03-18 11:00:07
792
原创 Transformation between client and Server using boost
0 序言boost.asio提供了同步、异步读写数据,以及网络通信的工具。从应用层抽象了网络结构,方便程序员快速实现网络程序。本篇将介绍如何使用boost.asio提供的接口,来实现一个server与client之间通信的例子,构建一个聊天室。其实现了以下通信的基本功能:server监听ip:port。client向server发送信息。server接收信息,并向所有的client广播...
2019-03-15 17:35:51
263
原创 17 More Effective C++—条款25(构造函数与非成员函数的虚化)
1 构造函数的虚化1 构造虚函数构造函数与类的名称相同,因此,此处所指的虚化,并非让构造函数变成虚函数,而是让其具有类似虚函数的行为:当条件不同时,不同的对象会被创建出来。下面的代码展示了“虚构造函数”的应用。class Base {}class Derive1 : public Base {}class Derive2: public Base {}Base* con...
2018-12-26 13:49:51
248
原创 16 More Effective C++ —— 条款23/24 (虚函数、虚基类、多继承、RTTI)
0 前序由于条款23只是针对iostream和stdio.h之间,进行运行效率的对比,此处不会详细展开。其宗旨是尽量使用C++的库,可以提高程序的执行效率和安全性。此篇将着重讨论条论24的内容。1 多态C++...
2018-12-25 08:22:18
240
原创 15 More Effectic C++ ——条款21/22(重载防止隐式类型转换/使用复合操作符)
1 看不见的隐式类型转换当构造函数只有一个,编译器会利用构造函数进行隐式类型转换。如下面所示:class UInt { public: UInt(); UInt(int value);}UInt a = 0, b(0), c = 1; // 隐式转换:int变成UInt类型UInt d = 1 + a; // 隐式类型转换这种隐式类型转换十分危险,当有多种类似"UInt(i...
2018-12-20 16:10:55
315
原创 14 More Effective C++—条款20(返回值优化RVO)
0 序虽然书中一些条款使用四五页的篇幅进行详尽叙述,但是经过抽简的核心内容并没有太多。本专题针以“把书读薄”为目的,因此在后续的篇章中,做出以下修改:1 文章标题进一步简练,只给出关键性词语。2 每篇文章涉及条款不会超过5个,以方便读者对内容的总结概括。1 返回值优化下面类重载了“乘法”操作符,下面针对如下几种返回值类型进行讨论。最终引出高效正确的“乘法”返回值方案。class M...
2018-11-24 21:00:06
215
原创 13 More Effective C++—条款18/19(提前求值/临时对象的来源)
1 提前求值1 概念上一篇介绍了“延缓求值”——lazy evalute策略,其实质是:只有在真正需要数据的时候,才对计算进行求值。同时,常用的一种的策略是“马上求值”——eager evaluate,即只要出现计算表达式,就进行求值。上面两种方案都没有考虑到,一次性大规模计算会让用户长时间等待。基于此,本篇提出“超急求值”——over eager evaluate。它实质是一种分摊(也可以...
2018-11-16 09:01:14
206
原创 11 More Effective C++—条款14/15(有效使用异常限定符/异常处理的成本)
1 异常限定符与unexpected调用如下面的代码所示,标识符throw()即为异常限定符。异常限定符标识了函数可以抛出的异常类型。当throw后面的括号内容为空,表示该函数不抛出任何异常。class Exception { public: const char* what() throw() const; // 该函数不抛出任何异常 void doSomething() thro...
2018-10-31 09:22:29
170
原创 10 More Effective C++—条款13(catch异常引用的好处)
1 前言其实本篇文章应与前一篇文章合写,但是,鉴于上一篇文章文字较多,已经基本成稿,因此,关于为什么使用catch reference的讨论,留在本章进行讨论。同样,本文章将依照书中顺序进行讨论2 异常指针传递带来的麻烦上篇文章介绍了使用指针进行异常传递的方法,如下面3中形式。形式1:一旦离开局部变量的作用域,局部变量就会被销毁,此种方式是错误的。形式2:无法时刻谨记,同时长期保存一...
2018-10-25 13:51:06
222
原创 9 More Effective C++—条款12(异常的原理细节)
1 抛出的异常1 异常与函数调用抛出异常与传递一个参数、调用一个虚函数有许多类似点:1,某个类对象被接受2,被接受的类对象可以选择不同的接收端,从而实现多态。3,可以通过by-value, by-reference, by-pointer三种方式来传递类对象。但是,实际上调用函数传递参数,与try中抛出异常,并被catch捕捉异常时完全不同的。2 被抛出的对象总是一个副本每当抛...
2018-10-25 09:55:47
345
1
原创 提高生活质量—行为所带来的心理效应
以下文章转自微信公众号”万能海归平台“1 睡前动动脑,解决拖延症若你是一个拖延症患者,担心无法完成任务,可试试再睡前想一想这个任务。大脑会迫使自己再精神上对任务采取行动,其开始绘制...
2018-10-22 20:56:16
217
原创 6 More Effective C++—条款9(局部变量的destructor防止内存泄漏)
0 生活鸡汤偶然看到一篇文章,每天前进一点点,积累下来,人生就能有所改变。已经有一段时间没有更新这个系列,今天争取再往前走一点点。1 提出问题宠物医院提供收养服务,其中,主要收养对象是小狗(Dog)小猫(Cat)。收养需要走一定流程,具体流程我们不必关心。上面的情景可用下面代码描述。class Animal { public: virtual void processAdoption...
2018-10-20 12:30:46
450
转载 项目业务和个人学习之间的权衡
1、工作不是学术,企业也不是学校,需要的是投入与产出,所以从学习的优先级上,项目需求>公司愿景>个人爱好:项目需求是最根本的需求,也是保证你工资、绩效的基础;在项目的基础上,我们的技术要结合公司的发展与技术愿景,也只有与公司的发展上一致了,你才有机会能够爬上管理层;最后才是个人的兴趣爱好。2、在关注技术的同时不要忽略了业务和管理。对于大多数人来说,技术是吃不了一辈子饭的,走到一定程度...
2018-10-20 11:57:21
140
原创 5 More Effective C++—条款8:(operator new 和 new operator)
1 两种new的区别和联系C++中的操作符new在执行下面代码时,做了如下两件事。这种操作符叫做"new operator"。对于开辟空间这部分,new operator实际调用了operator new操作符。1 调用operator new操作符,开辟内存空间。2 调用构造函数,初始化内存空间。class MyClass {}MyClass *my = new MyClass...
2018-10-07 17:01:04
987
原创 4 More Effective C++—条款7(切勿重载&&,||和逗号操作符)
1 &&,|| 和逗号操作符1, && 和 || 操作符具有“短路”特征,即若操作符左侧操作数出现状况,右侧操作数便不会求值:(1)&& 左侧操作数为false,右侧操作数不求值,整个表达式值为false。(2)|| 左侧操作数为true, 右侧操作数不求值,整个表达式值为true。2,逗号操作符“,”自左向右按顺序求值。如for (int...
2018-10-07 16:01:08
221
原创 3 More Effective C++—条款6(自定义自增/自减操作符)
1 重载操作符C++允许用户自定义自增、自减操作符。两种操作符都有对应的前置、后置形式。如下所示:index++ // 返回原值,并自增++index // 自增,并返回新值index----index重载操作符如下代码所示。由于前置(prefix)和后置(suffix)两种形式都没有参数,为了区别两种重载,需要为后置操作符补一个int类型参数,且编译器默认该参数值为0。同时,一些...
2018-10-07 11:57:39
176
原创 2,More Effective C++——条款5(谨慎使用定制“类型转换函数”)
1 隐式类型转换C++中允许如下3种形式的隐式类型转换:1. 基本类型隐式类型转换:int a = 10;double b = a;2. 单参数构造构造函数class Name { // 可以将char* 类型转换成Name类型 Name(const char* str) {}};class Apple { // 可以将int类型转换成Apple类型 Apple(int a,...
2018-10-06 12:41:33
338
原创 隐形贫困人口的十大特征
本文转自某公众号1 从不记账水果、零食、房租、衣服,等等生活开支不知道花了多少钱,也不知道怎么记,从何记起。2 存不下钱月月光,支付宝、储蓄卡、微信、钱包都没钱。3 爱好都是烧钱的事养猫养狗,泡吧蹦迪。猫狗吃的比自己还好。4 借钱成为习惯信用卡透支得自己怀疑人生,花呗催的屁滚尿流,某东白条月只剩0。月底还完,下个月继续刷卡。5 人生总是困难重重凡是用钱解决的,都解决不了6...
2018-10-06 10:12:14
1203
原创 0, More Effective C++——导言
1.序言上周搬家,抱着两大摞,约50多斤30几本书,既感到知识的重量,又发觉自己真的是买书豪情万丈,看书心力交瘁。于是做了一个勇敢的决定——把这些书看完,看完一本送人一本,争取一本都不留。由于读书笔记和读书同时进行,因此前面章节内容可能认知较浅显,后面内容会有融汇贯通的效果。因此,在每本书读完后,我计划用一两篇文章对整本书进行深入提炼和发掘,以求“一本书变成一页纸”效果。因为最近写程序...
2018-10-05 17:39:55
284
原创 1,More Effective C++——基础议题(条款1—4)
条款1: pointer和reference0 指针(pointer)C++中的指针可以如下形式进行定义:int number = 0;int *ptr = &number; // 可修改number值,也可以改变指针指向。const int *ptr0 = &number; // 不能修改number值,可改变指向int const *ptr1 = &numb...
2018-10-05 17:39:24
200
原创 Linux程序的安装路径
无论Windows还是Linux,安装软件实质是复制一些列文件到磁盘中。这些文件包括动态和静态库(包含二进制内容的文件)、头文件、可执行文件,以及一些配置文件等。除了复制文件,为了让其他程序能够找到这些文件,都需要设置全局变量(比如path)来供其他程序检索定位这些文件的位置。Linux中,添加了默认的库、程序、头文件的搜索路径,我们也可以自定义这些搜索路径。安装程序的实质是复制文件到磁盘...
2018-09-10 17:56:59
2123
原创 像windows一样给Mac os重装系统
序言由于之前没有充分考虑文件分布,加上不熟悉使用mac os,使用系统的时候搞得十分混乱。所以萌生是否可以进行类似windows的格式化,重装系统的操作。以下将详细介绍。特别说明1,磁盘中内容有两部分组成:操作系统和启动工具。操作系统是我们常说的windows系统;而启动工具中,包括磁盘格式化工具,从互联网下载最新操作系统工具(苹果操作系统是免费的),重新安装操作系统等工具。 2...
2018-09-09 21:53:50
414
原创 CMake的用法1——初识
1,序 具体如何安装,以及安装什么版本,此处就不细细和大家说了,此处我们认为最新版即最稳定,用的人也最多,认可度最广泛,无论何时你看到此文章,请务必都这么认为。本系列将有若干篇文章,本人也是cmake小白一只,虽然四五年前也略有接触,但完全是稀里糊涂。从本文开始,将一点点拨开cmake迷雾,探索使用cmake这个传说中的神器。2,第一个程序——hello world cma...
2018-06-08 17:20:33
870
原创 在QTextEdit中加入自动提示功能——加入QCompleter功能
1,序 通常我们使用QLineEdit的时候,可以使用自动补全提示,如pic-1所示,通过键入关键字,QLineEdit可以为我们提示相关内容。但是Qt 4.x没有为QTextEdit提供设置QCompleter的接口。网络上已经给出大量范例代码,基本上出自qt官方文档。 本文章将做对以下几个方面进行剖析: 1. 在获取QTextEdit中,光标所在位置对应的单词时,不使...
2018-06-07 16:58:53
6762
3
原创 使用qt对Microsoft Excel进行操作
1,序言网上的例子还是比较多,但是真正付诸实践,还是需要一番艰苦的探索,尤其在如此炎热的南国初夏午后,烦躁心情可想而知。闲话不多说,开门见山简单说说。2,步骤与代码本来想采用两分式,先祭出代码,然后在进行说明。但是,想到过往度过的书,往往还没读到讲解,前面的代码已经忘得一干二净。因此,本文将按照创建的整个步骤,一步一步来说明。步骤1:创建工程为了方便说明,我们此处直接创建一个创...
2018-06-03 22:14:04
2851
原创 1、Linux kernel——获取源代码
自己动手丰衣足食1、序言 在蹉跎了若干月后,终于感到自己找对了门路,本篇系列将针对linux kernel编程进行持续更新。 首先介绍本人大概技术水平,各位看官也可参照比对。 计算机科学与技术研二,主攻ssd存储调度算法,大面上为操作系统和体系结构相关。本科写过fpga,对操作系统知识比较熟悉,但是没写过嵌入式开发板,所以操作实践基本为0。 当前本系列的目标有如下两点:
2016-12-11 17:18:17
481
关于fwrite()大量写入数据无法正确写入的问题
2015-08-28
TA创建的收藏夹 TA关注的收藏夹
TA关注的人