From eec89bc58a8f425f3443979dfdc380d9e7736a67 Mon Sep 17 00:00:00 2001 From: huihut Date: Sat, 23 Feb 2019 14:02:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20C/C++=20=E5=8F=91=E5=B1=95?= =?UTF-8?q?=E6=96=B9=E5=90=91=E3=80=81=E4=BF=AE=E6=94=B9=E5=B0=81=E8=A3=85?= =?UTF-8?q?=E5=A4=9A=E6=80=81=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 143 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 118 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 979a586..ed31125 100644 --- a/README.md +++ b/README.md @@ -211,6 +211,17 @@ int main() +### volatile + +```cpp +volatile int i = 10; +``` + +* volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。 +* volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值) +* const 可以是 volatile (如只读的状态寄存器) +* 指针可以是 volatile + ### assert() 断言,是宏,而非函数。assert 宏的原型定义在 ``(C)、``(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 `NDEBUG` 来关闭 assert,但是需要在源代码的开头,`include ` 之前。 @@ -266,17 +277,6 @@ Bit mode: 2; // mode 占 2 位 * 位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定 * 取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域 -### volatile - -```cpp -volatile int i = 10; -``` - -* volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。 -* volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值) -* const 可以是 volatile (如只读的状态寄存器) -* 指针可以是 volatile - ### extern "C" * 被 extern 限定的函数或变量是 extern 类型的 @@ -498,7 +498,7 @@ int main() using namespace_name::name; ``` -#### 构造函数的 using 声明【C++11】 +#### 构造函数的 using 声明 在 C++11 中,派生类能够重用其直接基类定义的构造函数。 @@ -667,7 +667,7 @@ auto fcn2(It beg, It end) -> typename remove_reference::type 2. 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 3. 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。 -### initializer_list 列表初始化【C++11】 +### initializer_list 列表初始化 用花括号初始化器列表列表初始化一个对象,其中对应构造函数接受一个 `std::initializer_list` 参数. @@ -736,15 +736,11 @@ int main() ### 封装 -* 把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 -* 关键字:public, protected, friendly, private。不写默认为 friendly。 +把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。关键字:public, protected, private。不写默认为 private。 -| 关键字 | 当前类 | 包内 | 子孙类 | 包外 | -| --- | --- | --- | --- | --- | -| public | √ | √ | √ | √ | -| protected | √ | √ | √ | × | -| friendly | √ | √ | × | × | -| private | √ | × | × | × | +* `public` 成员:可以被任意实体访问 +* `protected` 成员:只允许被子类及本类的成员函数访问 +* `private` 成员:只允许被本类的成员函数访问 ### 继承 @@ -752,11 +748,17 @@ int main() ### 多态 -* 多态,即多种状态,在面向对象语言中,接口的多种不同的实现方式即为多态。 -* C++ 多态有两种:静态多态(早绑定)、动态多态(晚绑定)。静态多态是通过函数重载实现的;动态多态是通过虚函数实现的。 +* 多态,即多种状态(形态)。简单来说,我们可以将多态定义为消息以多种形式显示的能力。 * 多态是以封装和继承为基础的。 +* C++ 多态分类及实现: + 1. 重载多态(Ad-hoc Polymorphism,编译期):函数重载、运算符重载 + 2. 子类型多态(Subtype Polymorphism,运行期):虚函数 + 3. 参数多态性(Parametric Polymorphism,编译期):类模板、函数模板 + 4. 强制多态(Coercion Polymorphism,编译期/运行期):基本类型转换、自定义类型转换 -#### 静态多态(早绑定) +> [The Four Polymorphisms in C++](https://catonmat.net/cpp-polymorphism) + +#### 静态多态(编译期/早绑定) 函数重载 @@ -769,7 +771,7 @@ public: }; ``` -#### 动态多态(晚绑定) +#### 动态多态(运行期期/晚绑定) * 虚函数:用 virtual 修饰成员函数,使其成为虚函数 @@ -3211,6 +3213,97 @@ int main( void ) +
🔱 C/C++ 发展方向 + + +## C/C++ 发展方向 + +> C/C++ 发展方向甚广,包括不限于以下方向, 以下列举一些大厂校招岗位要求 + +### 后台/服务器 + +【后台开发】 + +* 编程基本功扎实,掌握 C/C++/JAVA 等开发语言、常用算法和数据结构; +* 熟悉 TCP/UDP 网络协议及相关编程、进程间通讯编程; +* 了解 Python、Shell、Perl 等脚本语言; +* 了解 MYSQL 及 SQL 语言、编程,了解 NoSQL, key-value 存储原理; +* 全面、扎实的软件知识结构,掌握操作系统、软件工程、设计模式、数据结构、数据库系统、网络安全等专业知识; +* 了解分布式系统设计与开发、负载均衡技术,系统容灾设计,高可用系统等知识。 + +### 桌面客户端 + +【PC 客户端开发】 + +* 计算机软件相关专业本科或以上学历,热爱编程,基础扎实,理解算法和数据结构相关知识; +* 熟悉 windows 操作系统的内存管理、文件系统、进程线程调度; +* 熟悉 MFC/windows 界面实现机制,熟练使用 VC,精通 C/C++,熟练使用 STL,以及 Windows 下网络编程经验; +* 熟练掌握 Windows 客户端开发、调试,有 Windows 应用软件开发经验优先; +* 对于创新及解决具有挑战性的问题充满激情,具有良好的算法基础及系统分析能力。 + +### 图形学/游戏/VR/AR + +【游戏客户端开发】 + +* 计算机科学/工程相关专业本科或以上学历,热爱编程,基础扎实,理解算法、数据结构、软件设计相关知识; +* 至少掌握一种游戏开发常用的编程语言,具 C++/C# 编程经验优先; +* 具游戏引擎(如 Unity、Unreal)使用经验者优先; +* 了解某方面的游戏客户端技术(如图形、音频、动画、物理、人工智能、网络同步)者优先考虑; +* 对于创新及解决具有挑战性的问题充满激情,有较强的学习能力、分析及解决问题能力,具备良好的团队合作意识; +* 具阅读英文技术文档能力; +* 热爱游戏。 + +### 测试开发 + +【测试开发】 + +* 计算机或相关专业本科及以上学历; +* 一至两年的 C/C++/Python 或其他计算机语言的编程经验; +* 具备撰写测试计划、测试用例、以及实现性能和安全等测试的能力; +* 具备实现自动化系统的能力; +* 具备定位调查产品缺陷能力、以及代码级别调试缺陷的能力; +* 工作主动积极,有责任心,具有良好的团队合作精神。 + +### 网络安全/逆向 + +【安全技术】 + +* 热爱互联网,对操作系统和网络安全有狂热的追求,专业不限; +* 熟悉漏洞挖掘、网络安全攻防技术,了解常见黑客攻击手法; +* 掌握基本开发能力,熟练使用 C/C++ 语言; +* 对数据库、操作系统、网络原理有较好掌握; +* 具有软件逆向,网络安全攻防或安全系统开发经验者优先。 + +### 嵌入式/物联网 + +【嵌入式应用开发】 + +* 有良好的编程基础,熟练掌握C/C++语言; +* 掌握操作系统、数据结构等软件开发必备知识; +* 具备较强的沟通理解能力及良好的团队合作意识; +* 有Linux/Android系统平台的开发经验者优先。 + +### 音视频/流媒体/SDK + +【音视频编解码】 + +1. 硕士及以上学历,计算机、信号处理、数学、信息类及相关专业和方向; +2. 视频编解码基础扎实,熟常用的 HEVC 或 H264,有较好的数字信号处理基础; +3. 掌握 C/C++,代码能力强, 熟悉一种汇编语言尤佳; +4. 较强的英文文献阅读能力; +5. 学习能力强,具有团队协作精神,有较强的抗压能力。 + +### 计算机视觉/机器学习 + +【计算机视觉研究】 + +* 计算机、应用数学、模式识别、人工智能、自控、统计学、运筹学、生物信息、物理学/量子计算、神经科学、社会学/心理学等专业,图像处理、模式识别、机器学习相关研究方向,本科及以上,博士优先; +* 熟练掌握计算机视觉和图像处理相关的基本算法及应用; +* 较强的算法实现能力,熟练掌握 C/C++ 编程,熟悉 Shell/Python/Matlab 至少一种编程语言; +* 在计算机视觉、模式识别等学术会议或者期刊上发表论文、相关国际比赛获奖、及有相关专利者优先。 + +
+
📆 招聘时间岗位 ## 招聘时间岗位