C++后台开发核心技术实践学习日志2017/5/11

马上要找工作了,发现自己很多看过的书都忘记了,于是开始写博客记录一下,也想以后自己能回忆回忆这段经历吧。
后台开发这本书比较适合找C++后台开发的人读,里面的知识点比较关键,面试基本都会用到。

第一章 C++常用编程技术

1 strlen()与sizeof()的区别:
strlen()计算字符串的长度,遇到字符串末尾的’\0’结束。
sizeof()为宏定义的运算符,在编译之前就已经算好。

2 字符串、字符串指针以及字符数组的区别

string str1 = "Hello world !"; //字符串,string类

char str2[] = "I am a programmer." ;//字符数组

char * str3 = "abc";//字符串指针
字符串str1是string类的一个实例,存放在以首地址为首的连续内存块中,并以空字符结束,与str2比较类似。

str2为字符数组,由若干个数组元素组成,每个元素存放字符串的一个字符,也是以空字符结尾。

str3字符串指针变量本身是一个变量,用于存放字符串的首地址。可以改变str1使它指向不同的字符串,但不能改变str1所指的字符串常量。因为定义指针时,编译器并不为指针所指向的对象分配空间,它只是分配指针本身的空间,所以adc会被当成常量,放到程序的常量区,无法被修改。

3 结构体struct与共同体union在内存单元中的计算

一般64位机器各种内置类型所占存储空间如下:
        sizeof(char) = 1;
        sizeof(short) = 2;
        sizeof(int) = 4;
        sizeof(long) = 4;
        sizeof(float) = 4;
        sizeof(double) = 8;
        sizeof(long long) = 8;       
很多人都知道计算机数据结构要遵守内存对齐的规则,但至于为什么说得比较模糊。
在一般程序员心中,内存是一个字节一个字节组成的,但是在CPU的眼里,内存是由一个块一个块组成的,现代CPU为64位,最多可同时读8个字节块。

假设现在CPU要读取4个字节的数据(假设内存读取粒度为4):

1.数据从第0个字节开始: 直接读取0-3个字节就结束了。
2.数据从第1个字节开始: 需要读取0-3个字节以及4-7个字节,才能读到1-4字节。这也就是为什么要进行内存对齐的原因。某些平台如果内存不对齐还会抛出硬件异常而导致程序崩塌。

简单的结构体对齐如下:

#include <iostream>
using namespace std;
struct A{
    char a;
    int b;
    short c;
};
struct B{
    short c;
    char a;
    int b;
};
int main()
{
    cout<<"sizeof(A) = "<<sizeof(A)<<endl;//4+4+4=12
    cout<<"sizeof(B) = "<<sizeof(B)<<endl;//2+1+4=7
}

带数组情况的结构对齐:
情况看似特殊,实则与普通的比较相似。

#include <iostream>

using namespace std;

struct A
{
    int a;
    int b;
    char ch[10];
};
struct B
{
    char a;
    char b;
    int ch[10];
};


int main()
{
    cout<<sizeof(A)<<endl; //20
    cout<<sizeof(B)<<endl; //44
    return 0;
}

结构体中带结构体的内存对齐:
这种情况有点小复杂,内部结构体与外部变量之间的内存区域是分开的。让我们来看下面一段代码:

#include <iostream>
using namespace std;
struct A
{
    int a;
    double b;
    char ch[10];
};
struct B
{
    char a;
    char b;
    int ch[10];
    struct A as;
};
int main()
{
    cout<<sizeof(A)<<endl; //32
    cout<<sizeof(B)<<endl; //80
    return 0;
}

4 预处理
带参数的宏定义:

#define func1(x)  x*x //会引起误会,例如下面句子

func1(3+2);//显然结果不尽人意

#define func2(x) ((x)*(x))//正确写法,每一个括号都很有必要

do… while的妙用:
当遇到宏定义为复合语句时会用到

#define Foo(x) do{\

statement one;\

statement two;\

}while(0) // 这里没有分号

例如:

if(conditon)

Foo(x);

else
后台开发核心技术与应用实践 作者:徐晓鑫 著 出版日期:2016年08月06日 封面宣传语:腾讯云平台技术总监黄世飞、Facebook对外支付项目主程张子兴、微软软件工程师彭可竞、阿里巴巴资深算法工程师周乐、百度大数据高级测试工程师畅晋联袂推荐;围绕后台开发需要掌握的核心技术,从多个方面、多个角度进行了阐述,覆盖了该领域的几乎所有内容;充分抓住本质并结合实践,文字通俗易懂,可操作性强 出版书名:后台开发核心技术与应用实践 作者:徐晓鑫 著 封底文字 专家评价 后台开发是一个“历史悠久”的领域,同时也是一个沉淀深厚,高技术价值的领域。本书清晰、严谨、务实的风格显示出晓鑫对该领域知识的深刻理解。 ——张子兴 Facebook对外支付项目主程,美国加州MenloPark 每一位从事后台开发的专业人士都需要一本后台开发指南。对每一位想要认真从事该领域工作的人来说,本书是一本绝对必读的书籍。 ——彭可竞 微软软件工程师,美国华盛顿州Redmond 本书是作者多年后台开发、架构和研究的精华。书中用通俗的文字、详尽的示例代码,结合实际工作中的案例,讲述了后台开发方方面面的知识,内容丰富。对于从事后台开发的人员,这是一本很好的由浅入深的学习书籍。 ——周乐 阿里巴巴资深算法工程师,北京望京 使用C++语言进行后台开发有一定的门槛,本书可以很好地帮助你跨过这个“门槛”。 ——畅晋 百度大数据高级测试工程师,北京上地 前勒口 互联网网民日益剧增,各种应用层出不穷,各项技术更新不断。单是游戏行业,近几年就经历了从端游、页游到手游的巨大变迁,客户端更新迭代之快,始料未及。而后台开发中使用到的技术,却变化不是很大。让服务性能更高、处理能力更强、安全性更好,是后台开发工程师永恒的主题。 后台开发中用到的技术,深而广,需要读的“大部头”很多,光是Richard Stevens的APUE,UNP,TCP/IP详解就够读个半年以上。读者通过阅读本书,可以从实践出发,快速由浅入深地进入后台开发领域。在读完本书,有了实践的经验之后,再去阅读大师们的著作,会更有体会,更懂得如何欣赏。 读书的最高境界莫过于“把书读薄,把书读厚”。本书文字通俗易懂,让你更快地“读薄”,同时又涉及较多的核心知识点,顺着这些知识点,读着读着也发觉“读厚”了。 后勒口 徐晓鑫,腾讯资深软件研发工程师,先后在腾讯游戏之洛克王国、QQ会员、QQ秀等项目工作,精通后台开发各种技术,实战经验丰富。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值