为什么要学习C++
操作系统历史
- UINX操作系统诞生之初是用汇编语言编写的。
- 随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。
- 寻找新的高效开发语言成为UNIX开发者需要解决的问题。
- 当时BCPL语言成为了当时的选择之一。
- Ken Thomposn对BCPL进行简化得到了B语言。
- 但是B语言不是直接生成机器码,而是生成中间码之后解释执行,有点像Java。解释型的语言执行效率无法胜任操作系统的开发。
- 1971年,Ken Thompson 和 Dennis Ritchie 对B语言进行了改良,使其能够直接产生机器码,C语言诞生。
- UNIX开始使用C语言重写,同时C语言在实践过程中得到了发展,由于是在开发过程中发展,没有深思熟虑的设计过程。
使用时存在很多“灰色地带”;
残留过多低级语言的特征,例如可以直接利用指针进行内存操作; - C语言的目标是高效,高效开发UNIX,最终使得程序执行效率的高效。
软件方法论的发展
面向过程程序设计:数据结构+算法
主要解决科学计算问题,用户要求简单而固定。
特点:
1.分析解决问题所需要的步骤;
2.利用函数实现各个步骤;
3.依次调用函数解决问题;
问题:
1.软件可重用性差;
2.软件可维护性差;
3.构建的软件无法满足用户需求。
面向对象程序设计:由现实世界建立软件模型
将现实世界中的事物直接映射到程序中,可直接满足用户需求。
特点:
1.直接分析用需求中涉及的各个实体;
2.在代码中描述现实世界中的实体;
3.在代码中关联各个实体协同工作解决问题;
优势:
1.构建的软件能够适应用户需求的不断变化;
2.直接利用面向过程方法的优势而避开其劣势。
C语言的加强
当面向过程的方法论暴露的缺陷越来越多的时候,业界开始考虑在工程项目中引入面向对象的设计方法,而第一个需要解决的问题:高效的面向对象语言,并且能够兼容已有的C代码。

- C++是C语言的加强,是一种更好的C语言。
- C++是已C语言为基础,并且完全兼容C语言的特性。通过学习C++能够掌握更多的软件设计方法
- C++是Java/C#/D等现代开发语言的基础,学习C++后能够快速掌握这些语言。
- 如果是做安卓framework,定制安卓Rom,C++是必须掌握的技能。

以安卓系统为例,C语言开发只是占其中的一部分,HAL可以用C/C++编写,为了方便移植和开发,大部分外设器件厂商的HAL采用C++编写。Native层和ART大部分使用面向对象C++编写。
操作系统的修改和驱动程序开发在现代软件产品中占据的比重越来越小。
安卓系统框架图链接
现代软件产品的特性
系统一般是由多种语言写成的
系统架构的目的是拥抱用户需求的变化
系统拥有较好的移植性
系统能够方便的部署和更新。
对于一个架构师而言,掌握各种语言的优势并合理运用到系统中,由此简化系统的开发,是架构生涯的第一步。
相关文章:
为什么要学习C++
操作系统历史 UINX操作系统诞生之初是用汇编语言编写的。随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。寻找新的高效开发语言成为UNIX开发者需要解决的问题。当时BCPL语言成为了当时的选择之一。Ken Thomposn对BCPL进行简化得到了B语言。但是B语言不是直接生成…...
eureka服务注册和服务发现
文章目录 问题实现以orderservice为例orderservice服务注册orderservice服务拉取 总结 问题 我们要在orderservice中根据查询到的userId来查询user,将user信息封装到查询到的order中。 一个微服务,既可以是服务提供者,又可以是服务消费者&a…...
QT的介绍和优点,以及使用QT初步完成一个登录界面
QT介绍 QT主要用于图形化界面的开发,QT是基于C编写的一套界面相关的类库,进程线程库,网络编程的库,数据库操作的库,文件操作的库…QT是一个跨平台的GUI图形化界面开发工具 QT的优点 跨平台,具有较为完备…...
MySQL教程
MySQL教程 数据库简介数据库的基本概念MySQL简介windows下安装MySQLLinux下安装MySQL在MacOS下面安装MySQLMySQL配置文件分析MySQL数据库的基本操作MySQL创建表MySQL插入数据MySQL删除数据MySQL修改数据MySQL基本查询MySQL可视化客户端SQL语句的分类MySQL的DDLMySQL的数据类型…...
深入理解协同过滤算法及其实现
导语 个性化推荐系统在现代数字时代扮演着重要的角色,协助用户发现他们可能感兴趣的信息、产品或媒体内容。协同过滤是个性化推荐系统中最流行和有效的算法之一。 目录 协同过滤算法的原理 基于用户的协同过滤(User-Based Collaborative Filtering&am…...
力扣:随即指针138. 复制带随机指针的链表
复制带随机指针的链表 OJ链接 分析: 该题的大致题意就是有一个带随机指针的链表,复制这个链表但是不能指向原链表的节点,所以每一个节点都要复制一遍 大神思路: ps:我是学来的 上代码: struct Node* copyRandomList(s…...
【从0学习Solidity】合约入门 Hello Web3
【学习Solidity的基础】入门智能合约开发 Hello Web3 📱不写代码没饭吃上架主页 在强者的眼中,没有最好,只有更好。我们是全栈开发领域的优质创作者,同时也是阿里云专家博主。 ✨ 关注我们的主页,探索全栈开发的无限…...
awtk-ftpd 发布
1. 介绍 在嵌入式应用程序中,有时需要提供一个 FTP 服务,用于对系统的文件进行远程管理。 awtk-ftpd 实现了一个 简单的 FTP 服务。主要特色有: 小巧。约 800 行代码。可以在各种嵌入式平台运行。内存开销低。正常内存需求小于 6K。兼容 F…...
抽象轻松的C语言
#include <stdio.h> /* 预处理指令*/ /* 函数 */ int main() {int log 3.14;printf("hello word * %d\n easy", log);getchar();/* 获取键盘输入的字母,在这个程序中的作用是防止程序瞬间关闭 */return 0; } 上一篇说过,C程序是C语言的…...
【力扣每日一题01】两数之和
开了一个新专栏,用来记录自己每天刷题,并且也是为了养成每日学习这个习惯,期待坚持一年后的自己! 一、题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数&am…...
机器学习——手写数字识别
0、:前言 这篇文章能够帮助你从数据到模型的整个过程实现不过至于安装第三方库等基础问题,本文不涉及,因为确实不难,搜一搜一大把本此实验运行环境为jupyter,当然通过pycharm也是可行的 1、数据: 手写数字…...
【日积月累】后端刷题日志
刷题日志 说说对Java的理解JAVA中抽象类和接口之间的区别Java中的泛型 和equals()的区别八种基本数据类型与他们的包装类在一个静态方法内调用一个非静态成员为什么是非法的静态方法与实例方法有何不同重载与重写深拷贝浅拷贝面向过程与面向对象成员变量与局部变量Spring框架Sp…...
Matlab在编码中增加CRC和交织功能
定义CRC生成和检验的类(包括函数) 我们在MATLAB中定义一个类(class),包含了CRC生成函数和检验函数(囊括了常用的CRC多项式) classdef CRCpropertiesCRCbit_LenpolynomialCRCgenCRCdetendmetho…...
Css 设置从上到下的渐变色: 0到70%为yellow,然后线性地变成透明。
您可以使用 CSS 的 linear-gradient() 函数来创建从上到下的渐变色。以下是一个例子: background: linear-gradient(to bottom, yellow 0%, transparent 70%);这将从上到下创建一个渐变色,从 0% 到 70% 是黄色,然后线性地变成透明。您可以将…...
git在windows上安装
介绍git工具在windows上如何安装 git官网下载地址 1.1、下载 https://github.com/git-for-windows/git/releases/download/v2.36.0.windows.1/Git-2.36.0-64-bit.exe自行选择版本,这里我选择的是 Git-2.36.0-64-bit这个版本 1.2、安装 安装路径选择英文且不带空格…...
快速上手GIT命令,现学也能登堂入室
系列文章目录 手把手教你安装Git,萌新迈向专业的必备一步 GIT命令只会抄却不理解?看完原理才能事半功倍! 快速上手GIT命令,现学也能登堂入室 系列文章目录一、GIT HELP1. 命令文档2. 简要说明 二、配置1. 配置列表2. 增删改查3. …...
二进制安全虚拟机Protostar靶场 安装,基础知识讲解,破解STACK ZERO
简介 pwn是ctf比赛的方向之一,也是门槛最高的,学pwn前需要很多知识,这里建议先去在某宝上买一本汇编语言第四版,看完之后学一下python和c语言,python推荐看油管FreeCodeCamp的教程,c语言也是 pwn题目大部…...
python实现的一些方法,可以直接拿来用的那种
1、日期生成 很多时候我们需要批量生成日期,方法有很多,这里分享两段代码 获取过去 N 天的日期: import datetimedef get_nday_list(n):before_n_days []for i in range(1, n 1)[::-1]:before_n_days.append(str(datetime.date.today() …...
通过HTTP进行并发的数据抓取
在进行大规模数据抓取时,如何提高效率和稳定性是关键问题。本文将介绍一种可操作的方案——使用HTTP代理来实现并发的网页抓取,并帮助您加速数据抓取过程。 1. 选择合适的HTTP代理服务供应商 - 寻找信誉良好、稳定可靠且具备较快响应时间的HTTP代理服务…...
《论文阅读21》Equivariant Multi-View Networks
一、论文 研究领域:计算机视觉 | 多视角数据处理中实现等变性论文:Equivariant Multi-View Networks ICCV 2019 论文链接视频链接 二、论文简述 在计算机视觉中,模型在不同视角下对数据(例如,点云、图像等࿰…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
