• 记录系列—C++学习记录


    《Effective C++》书中第01条法则就告诉我们:“视C++为一个语言联邦”。准确来说,C++可以划分为4个语言部分:

    • C. C++基于C的语法进行扩展,C的语言特性尽可能在C++中做了保留和兼容。
    • Object-Oriented C++. 带有面向对象设计的C++,也就是C with Class,表现为封装、继承、多态等特性。
    • Template C++. C++的泛型编程部分,也因此带来TMP(模板元编程)。
    • STL. STL是template程序库,通过“容器”、“迭代器”,“算法”,“函数对象”几个部分的配合与协调构建。

    以上四个语言部分都内部规则自洽,而我们需要做好不同次语言间切换时所做的策略改变的准备。

    对于C++来说, 更多的关注点在于其语言特性以及标准库, 多态的实现方式等,这里涉及一些概念比如:虚表与虚指针, 重载 重写等。其次很重要的一点是STL, 各个容器的实现, 适用范围等是需要清楚的, 适用范围往往是根据其实现采用的底层数据结构、算法来决定的。语言必然要对应到其开发环境上,这个时候需要结合具体的操作系统的API来进行开发实践,比如用户态和内核态的理解、阻塞/非阻塞IO、进程和线程的关系及同步方式。这样才能在具体的场景下选择恰当的方式。

    C++只是一门语言,当然是一门很强大的语言,提供了语言的支持。围绕C++,又会有些C++生态的应用场景和业务方向,以及诞生出一系列的框架。学习这些需要具备相应的基础知识,比如网络通信方面,有很多概念,常用协议有HTTP, TCP, UDP等,通过抓包工具查看是一种很好的学习方式。还有一些微服务相关的协议, 比如二进制类RPC协议和跨语言类RPC协议、基于XML的SOAP协议、基于JSON的RESRful接口协议等。涉及到网络编程,Socket API非常底层,需要考虑很多细节。如果加上异步就更加复杂了。所幸C++也有一些好用的网络通信库,libcurl、cpr、ZMQ等。要了解这些库分别适合的具体场景。C++23以后networking也会加速网络编程的效率。至于容器技术中的网络又是一番新知识了。在多线程开发方面,使用C++11提供的多线程库,学会使用thread_local、call_once()、atomic等,尽量用异步替代多线程。C++20的协程是用户态的线程,更加适合并发编程。理解了这些概念才能开发出性能高效的程序,也是自己需要不断理解和学习的地方。

    这里有一个问题:为什么 C++ 没有垃圾回收 (GC) 机制?

    在 1985 年之前的一段时间里也考虑过垃圾回收的可能性,但后来还是相信,对一个已经被用在实时处理和硬核心系统 (例如设备驱动程序) 的语言而言,这种特性是不合适的。在那段日子里垃圾回收还没有今天这样复杂,而与今天的系统相比,一般计算机的处理能力和存储能力也是非常低的。

    之前看过一个C++的评价,说是C++的最大的优势是对C的兼容,最大的缺点也是对C的兼容。这句话还是很值得玩味的。

    大学最开始分两个学期分别讲基础语法与面向对象。实践其实很少,主要的教材是:《C++ Primer》和《C++程序语言设计》,直到现在还在不时去查阅。

    毕业后的第一份工作是在某医疗器械公司做软件开发,工作了一年多时间。使用的技术栈是C++、QT。当时让我学习维护某机型的算法库,就是软件中的一个负责计算的模块。使用的是C++的C部分的子集,主要面向数值计算,封装各个Channel的各种参数,实现一些医疗业务算法。这个阶段对C++做了有限的模块设计实践,设计过简单的子模块以及基于原有的架构做些扩展和更改。

    离职后,认识到数据结构和算法的重要性,开始重新学习算法。前后用了三个多月的时间,刷了400多道算法题目,除了图论和高阶内容,常见的题目都比较熟悉了。其次继续围绕C++进行学习了一些课程,增加了对C++的认识。然后是数据库部分,数据库的学习要理解索引实现的性质、理解其底层实现, 数据结构选择的优劣, 索引类型、ACID事务的实现与隔离性,项目中要考虑主从复制的一致性。 重点是设计的思想。离职后读过一本很好的书——《数据密集型系统设计》,从这本书里了解了一些数据密集型系统设计原则,Twitter、LinkedIn等公司面临哪些问题及其解决对策。数据库是自己知识薄弱和缺乏的部分,以后要结合具体的业务继续学习。

    编程之路,道阻且长,持续学习,持续更新...

    附录:

    一些课程学习笔记。

  • 相关阅读:
    不同指针类型的转换
    dt7.0百度熊掌当天主动推送方法
    腾讯视频信息数据爬虫开发【核心爬虫代码】
    seo与python大数据结合给文本分词并提取高频词
    Python经典算法-猴子吃桃-思路分析
    猜数游戏-人机对战-经典的randint使用
    python模拟双色球大乐透生成算法
    python打造批量关键词排名查询工具
    python开发全自动网站链接主动提交百度工具
    centos下shell脚本kill掉mysql锁表进程【笔记】
  • 原文地址:https://www.cnblogs.com/shijiashuai/p/14393865.html
Copyright © 2020-2023  润新知