1 程序的本质,计算机语言简史,TIOBE 指数,C 语言的独特魅力、发展历程、发行版本和应用场景
👋 嘿,各位编程探险家们!是不是一提到 C 语言,脑海中就浮现出指针乱舞、内存泄漏的恐怖画面?别怕,你并不孤单!😅 今天,你踏入了这个专为 “C 语言恐惧症” 患者打造的避风港 ——【C 语言:从入门到 “真香” 现场】!🏠
🌟 专栏特色大揭秘 🌟
- 🚀 无痛进阶:告别冗长乏味的理论轰炸,采用短小精悍的篇章,带你一步步攻克 C 语言难关,让学习像刷短视频一样轻松愉快!📱
- 🤖 实战为王:理论结合实践,每个知识点都配有生动有趣的实战案例,让你在敲代码的过程中,不知不觉就 get 到了新技能!💻
- 😄 幽默风趣:谁说编程不能有趣?我将采用接地气的比喻、搞笑的段子,把复杂的 C 语言概念讲得明明白白,让你笑着笑着就学会了!😂
- 🔍 痛点直击:针对 C 语言学习中的高频难点,如指针、内存管理,我准备了详尽的解析和避坑指南,让你少走弯路,直达成功!🛤️
🎯 专栏定位 🎯
这里不仅是 C 语言初学者的乐园,也是考研党冲刺高分的秘密武器,更是技术控们深化理解、提升编程能力的宝藏库!无论你是哪路大神,都能在这里找到属于你的 “真香” 时刻!🔥
👥 适用人群 👥
- 👶 编程小白:对编程充满好奇,却苦于找不到入门捷径的你,这里是你最好的起点!
- 📚 考研党:备战计算机考研,C 语言是你的必争之地,来这里,助你一臂之力!
- 💪 技术控:想要深入理解 C 语言底层原理,提升编程素养的你,这里有你想要的深度与广度!
👀 小贴士
学习过程中遇到任何问题,随时在评论区留言,博主和热心网友都会第一时间为你解答哦!💬
1 程序的本质
在日常工作中,我们经常会遇到各种需要按照特定步骤完成的任务。例如,秘书在处理老板交办的任务时,通常会遵循一系列有序的步骤。老板可能会要求秘书做口述笔记、键入信函内容以及发送传真。这些步骤是有序的,秘书需要按照指示逐一完成。
在这个过程中,秘书的角色类似于计算机,而老板给出的指示则类似于程序中的指令。秘书需要理解并按照老板的要求逐步执行任务,这与计算机执行程序的过程非常相似。
程序(Program)的本质就是:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。
为了理解程序的本质,我们可以分解并简要描述其中的定语 “一系列有序指令的集合”:
-
一系列:这表明程序不是单一的指令,而是由多个指令组成的。这些指令共同协作,完成特定的任务或解决特定的问题。
-
有序:这意味着指令的执行是有顺序的。计算机需要按照程序中规定的顺序,逐条执行这些指令。顺序的正确性对于程序的正确运行至关重要。
-
指令的集合:指令是计算机能够理解和执行的基本操作单元。这些指令被组合在一起,形成一个集合,即程序。这个集合包含了完成特定任务所需的所有指令。
2 计算机语言简史
2.1 第一代:机器语言
1946 年 2 月14 日,世界上第一台通用电子数字计算机 ENIAC 诞生,使用的是最原始的穿孔卡片。这种卡片上使用的是用二进制代码表示的语言,与人类语言差别极大,这种语言就称为机器语言。
下面是一段典型的机器码示例:
- 0000,0000,000000010000 代表 LOAD A, 16
- 0000,0001,000000000001 代表 LOAD B, 1
- 0001,0001,000000010000 代表 STORE B, 16
下图是 “程序媛” 正在使用机器语言编程:
扩展:“第一台计算机” 的争议
关于谁是 “第一台计算机” 的争论,在技术史学家和爱好者中一直存在。这一争议主要围绕 ENIAC(Electronic Numerical Integrator And Computer)和阿塔纳索夫-贝瑞计算机(Atanasoff–Berry Computer, ABC)展开。
ENIAC 通常被视为世界上第一台通用电子数字计算机,于 1946 年完成并公布,标志着计算技术的重要里程碑。它能够重新编程以解决各种复杂的数学问题,展现了其通用性和强大的计算能力。
然而,ABC 的设计工作早在 20 世纪 30 年代末就已开始,由约翰·阿塔纳索夫和克利福德·贝瑞设计,旨在解线性方程组。尽管 ABC 未能实现完全的可编程功能,但它引入了一些对现代计算机发展至关重要的概念和技术。1973 年,美国法院认定 ENIAC 专利无效,并认可了 ABC 在电子数字计算领域的先驱地位。
因此,“第一台计算机” 的称号并非绝对,它取决于我们如何定义 “计算机”:
- 从电子计算装置的角度来看,ABC 是先锋;
- 从通用性和可编程性的角度来看,ENIAC 开创了现代计算机的新纪元。
这一争议揭示了早期计算机发展的复杂性,以及科技史上多重贡献和创新路径的存在。
以下是百度百科对 ENIAC 的介绍:
2.2 第二代:汇编语言
汇编语言使用英文缩写的助记符来表示基本的计算机操作,这些助记符构成了汇编语言的基础,例如:LOAD、MOVE 等,使得编程更加直观和易于理解。因此,汇编语言也被称为符号语言。
优点:由于汇编语言与硬件紧密相关,能够直接控制计算机硬件,因此可以编写出高效率的程序,充分利用计算机资源。
缺点:汇编语言是面向特定机器的,不同计算机架构会有不同的汇编语言,这导致汇编语言编写的程序不易在不同平台之间移植。
应用领域:尽管存在上述缺点,汇编语言仍然广泛应用于工业电子编程领域、软件的加密与解密、计算机病毒分析等领域。
2.3 第三代:高级语言
高级语言,是一种接近于人类使用习惯的程序设计语言,它允许程序员使用接近日常英语的指令来编写程序,程序中的符号和算式也与日常用的数学算式差不多,接近于自然语言和数学语言,容易被人们掌握。
高级语言独立于计算机硬件,有一定的通用性。
计算机不能直接识别和执行用高级语言编写的程序,需要使用编译器或者解释器,转换为机器语言才能被识别和执行。
常见的高级语言有 C、C++、C#、Java、Python、JavaScript、Go、SQL、Visual Basic、Delphi/Object Pascal、Fortran、Scratch、PHP、Rust、MATLAB、R、Assembly language、Ada、Kotlin、COBOL 等,它们各自具有独特的特点和适用场景。
编程语言 | 简介 |
---|---|
C | 一种通用的过程式计算机程序设计语言,适用于系统软件与应用软件开发,以其高效性和灵活性著称。 |
C++ | 在 C 的基础上增加了面向对象编程的支持,广泛应用于游戏开发、系统软件及应用软件等领域。 |
C# | 微软开发的一种多范式编程语言,专为 .NET 框架设计,适用于 Web 应用、桌面应用、移动应用等多种场景。 |
Java | 广泛使用的面向对象编程语言,“一次编写,到处运行” 的理念使其适用于企业级应用和Android开发。 |
Python | 解释型高级编程语言,语法简洁清晰,广泛应用于数据分析、人工智能、机器学习等领域。 |
JavaScript | 主要用于网页浏览器端的脚本语言,实现网页上的交互效果,现在也用于服务器端开发(如 Node.js)。 |
Go | Google 开发的静态类型编译型语言,以高效的并发处理机制在云计算和网络服务领域表现出色。 |
SQL | 结构化查询语言,用于管理和操作关系数据库管理系统(RDBMS),是数据库查询和操作的标准语言。 |
Visual Basic | 由微软开发的事件驱动编程语言,主要用于快速应用程序开发(RAD)特别是 Windows 平台的应用。 |
Delphi/Object Pascal | 基于 Pascal 语言的集成开发环境,特别擅长快速应用程序开发,支持可视化组件库(VCL)等特性。 |
Fortran | 最早的高级编程语言之一,主要用于科学计算和数值分析。 |
Scratch | 一种基于图形界面的编程语言和在线社区,旨在教授儿童和初学者编程概念。 |
PHP | 广泛应用于 Web 后端开发的开源脚本语言,适合于 Web 开发并可以嵌入 HTML 中使用。 |
Rust | 注重安全性特别是并发安全性的系统编程语言,其所有权模型确保内存安全,没有垃圾回收机制。 |
MATLAB | 主要用于数值分析、矩阵计算、信号处理与图形界面开发的语言和交互环境。 |
R | 专注于统计计算和图形生成的编程语言和软件环境,广泛用于数据分析和统计学研究。 |
Assembly language | 低级别的编程语言,有一种对特定计算机架构的直接对应,常用于编写操作系统底层代码、设备驱动等。 |
Ada | 设计用于大型、长期使用系统的编程语言,尤其强调可靠性和维护性,常见于航空电子和国防工业。 |
Kotlin | 兼容 Java 的静态类型编程语言,旨在提供更安全和简洁的代码结构,特别适用于 Android 开发。 |
COBOL | 早期的数据处理和商业用途编程语言,至今仍在一些企业级系统中使用。 |
3 为什么学习 C 语言
3.1 C 语言的独特魅力
跨平台:C 语言是一种高度可移植的语言,它的代码可以在不同的操作系统(如 Windows、Linux、macOS)和硬件平台上编译和运行。这种跨平台特性使得 C 语言成为开发跨平台应用程序和系统的理想选择。
应用广泛:C 语言的应用范围非常广泛,从操作系统、数据库管理系统到嵌入式系统、网络协议栈,再到各种应用程序和游戏开发,几乎无处不在。它的灵活性和高效性使得它成为许多领域的首选语言。
系统级开发:C 语言非常适合进行系统级开发,如操作系统内核、设备驱动程序、硬件接口等。它提供了对计算机硬件的直接访问和控制能力,使得开发者能够编写出高效、稳定的底层软件。
高效性能:C 语言编写的程序通常具有极高的执行效率,因为它是一种编译型语言,代码在编译时会被直接转换成机器码。这种特性使得 C 语言成为对性能要求极高的应用(如实时系统、高性能计算)的首选。
提高抽象思维:学习 C 语言有助于培养抽象思维能力。在 C 语言中,开发者需要手动管理内存、处理指针、理解数据类型等底层概念,这些过程要求开发者具备较高的抽象思维能力和对计算机底层工作原理的深入理解。
生态系统丰富:C 语言拥有一个庞大而丰富的生态系统,包括各种库、框架、工具和社区资源。这些资源为开发者提供了强大的支持,使得他们能够更高效地开发、调试和部署 C 语言应用程序。
许多编程语言参照了 C 语言:C 语言对许多现代编程语言产生了深远的影响。许多语言在设计时借鉴了 C 语言的语法、数据类型、控制结构等特性。因此,学习 C 语言可以为学习其他编程语言打下坚实的基础。
帮助理解底层知识:通过学习 C 语言,开发者可以更深入地理解计算机硬件和操作系统的底层知识。这种理解对于开发高效、稳定的软件至关重要,也有助于开发者在解决复杂问题时做出更明智的决策。
3.2 TIOBE 指数
C 语言是最流行的编程语言之一,下图是 2025 年 4 月份编程语言 TIOBE 指数排行榜,该排行榜网址为:https://www.tiobe.com/tiobe-index/
TIOBE 编程社区指数是衡量编程语言流行程度的一个指标。该指数每月更新一次。评级依据包括全球熟练工程师的数量、课程数量以及第三方供应商的支持情况。谷歌、亚马逊、维基百科、必应等 20 多个热门网站被用于计算这些评级。需要注意的是,TIOBE 指数并不是为了评选 “最佳编程语言”,也不是根据代码行数来衡量语言的使用量。
该指数可用于检查你的编程技能是否仍然与时俱进,或者在开始构建新软件系统时,为选择采用哪种编程语言做出战略性决策。
下图是从 2001 年到 2025 年多种编程语言的 TIOBE 编程社区指数(TIOBE Programming Community Index)的变化趋势,从图中可以看到,不同编程语言的 TIOBE 指数随时间的变化情况。C 语言的 TIOBE 指数在过去二十多年间经历了从高到低再到相对稳定的变化趋势。尽管其流行度在某些时期有所下降,但 C 语言仍然是一种重要的编程语言,在特定领域具有广泛的应用和影响力。
为了更好地了解全局,请参阅以下多年以前排名前十的编程语言的位置。请注意,这些是过去 12 个月期间的平排名。
4 C 语言的发展历程
C 语言的发展可以追溯到 20 世纪 60 年代末至 70 年代初,这个时期是计算机编程语言发展的关键时期。
1969 年:肯·汤普森(Ken Thompson)设计了 B 语言。B 语言是 C 语言的前身,主要用于编写 Unix 操作系统,它为 C 语言的开发奠定了基础。
1972 年:丹尼斯·里奇(Dennis Ritchie)基于 B 语言设计了 new B 语言。new B 语言进一步简化了语法,并引入了一些新的特性。new B 语言是 C 语言的早期版本。
1973 年:丹尼斯·里奇对 new B 语言进行了进一步改进,最终诞生了 C 语言。C 语言在 B 语言的基础上增加了更多的功能和灵活性。
1978 年:贝尔实验室正式发布了第一版 C 语言编译器。这一版本的 C 语言编译器使得 C 语言能够更广泛地应用于各种系统软件和应用软件的开发。
1979 年:C 语言的最重要版本 K&R C 发布。K&R C 是由布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)编写的《The C Programming Language》一书中定义的标准,这本书成为了 C 语言编程的经典教材。
1989 年:美国国家标准学会(ANSI)发布了首个 C 语言标准 ANSI C(也称为 C89 或 C90)。这个标准规范了 C 语言的语法和语义,使得 C 语言更加标准化和统一,促进了其在全球范围内的广泛应用。
扩展:Unix 与 C 语言之父
肯·汤普森(Ken Thompson)被誉为 “Unix 之父”。1969 年,他在贝尔实验室与丹尼斯·里奇(Dennis Ritchie)共同开发了 Unix 操作系统,该系统成为现代计算机技术的基石之一。汤普森不仅设计并实现了 Unix 的最初版本,还开发了其核心工具和程序,奠定了操作系统的基础架构。
丹尼斯·里奇因发明 C 语言而被尊称为 “C 语言之父”。C 语言最初是为更高效实现和优化 Unix 系统而设计的,对编程语言的发展具有划时代意义。作为 Unix 的共同创立者,里奇的工作推动了操作系统的演进,并深刻影响了现代软件开发方式。
两位先驱的合作对计算机科学领域产生了深远影响。他们的贡献不仅在于 Unix 和 C 语言本身,更在于为操作系统设计、编程语言开发以及软件工程实践开辟了新道路,塑造了当今计算世界的面貌。
5 C 语言的发型版本
K&R C(非正式标准,1978 年):由布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)合著的《The C Programming Language》一书定义了这一非正式的 C 语言标准。该版本常被称为 K&R C,是 C 语言早期的一个重要参考。
ANSI C(C89/C90,1989/1990 年):这是 C 语言的第一个官方标准版本,由美国国家标准学会(ANSI)发布,并随后被国际标准化组织(ISO)采纳为国际标准(ISO/IEC 9899:1990)。ANSI C 规范了 K&R C 中的许多非标准行为,确保了代码的可移植性和一致性。
C99(1999 年):C99 版本引入了许多新特性,包括单行注释(//)、可变长度数组、复数支持等。这是对 C 语言的一次重大修订,旨在使语言更加现代化并适应新的编程需求。C99 成为了一个广泛流行和使用的版本。
C11(2011 年):C11 版本增加了多线程支持、_Generic 关键字、静态断言(static_assert)等功能,以更好地支持现代编程实践和技术发展。这些新特性使得 C 语言在并发编程和类型安全方面得到了增强。
C17(2018 年):作为 C11 的一个修正版,C17 主要解决了前一版本中的缺陷和问题,但并未添加新的语言功能。其目标是改进语言的稳定性和兼容性,确保 C 语言在不同平台和编译器上的行为更加一致。
C23(预计 2023 年,实际可能推迟):虽然 C23 原计划于 2023 年发布,但实际上可能会推迟到 2024 年或更晚些时候。C23 旨在进一步提升语言的安全性和可靠性,包括消除实现定义行为、增强安全性措施以及引入模块化系统等。此外,C23 还预期会加入一些新特性以满足当代软件开发的需求,使 C 语言更加现代化和易于使用。
6 C 语言的应用场景
操作系统开发:C 语言因其高效的性能和直接访问硬件的能力,被广泛用于开发操作系统内核,如 Linux。操作系统需要管理硬件资源、提供系统调用接口等,C 语言的底层访问能力和高效性使其成为开发操作系统的理想选择。
嵌入式开发:在嵌入式系统中,C 语言是主要的编程语言。嵌入式系统通常具有有限的资源和特定的硬件要求,C 语言的高效性和可移植性使其成为开发微控制器、传感器等设备上的软件的首选。
驱动程序开发:C 语言用于编写硬件设备的驱动程序,驱动程序是操作系统和硬件设备之间的接口。驱动程序需要直接访问硬件寄存器、处理中断等,C 语言的底层访问能力使其成为编写驱动程序的理想语言。
其他编程语言的编译器:许多编程语言的编译器是用 C 语言编写的。编译器需要将高级语言代码转换为机器代码,C 语言的高效性和底层访问能力使其成为编写编译器的理想选择。例如,GCC(GNU Compiler Collection)就是用 C 语言编写的。
网络编程:C 语言在网络编程中也有广泛应用。网络编程需要处理网络通信协议、套接字编程等,C 语言的高效性和灵活性使其成为开发网络协议、服务器和客户端软件等的常用语言。
数据库开发:一些数据库系统使用 C 语言进行开发,以实现高性能的数据管理和查询。数据库系统需要处理大量的数据和复杂的查询操作,C 语言的高效性和底层访问能力使其成为开发数据库系统的理想选择。
游戏开发:C 语言在游戏开发中用于编写高性能的游戏引擎和核心逻辑。游戏引擎需要处理图形渲染、物理模拟、碰撞检测等复杂操作,C 语言的高效性和灵活性使其成为开发游戏引擎的常用语言。
人工智能开发:尽管 Python 等语言在人工智能领域更为流行,但 C 语言仍用于开发一些高性能的计算库和算法。例如,TensorFlow 等深度学习框架的底层计算部分就是用 C 语言编写的,以实现高效的数值计算。
科学应用:在科学计算和研究中,C 语言用于开发高效的数值计算和科学模拟软件。科学计算需要处理大量的数据和复杂的数学模型,C 语言的高效性和灵活性使其成为开发科学计算软件的理想选择。
金融应用:在金融领域,C 语言用于开发高频交易系统、风险管理软件等需要高性能的应用。高频交易系统需要处理大量的交易数据和快速的交易决策,C 语言的高效性和实时性使其成为开发高频交易系统的理想选择。
航空航天:在航空航天领域,C 语言用于开发飞行控制系统、导航系统等关键软件。这些系统需要高度的可靠性和实时性,C 语言的底层访问能力和高效性使其成为开发航空航天软件的理想选择。
相关文章:
1 程序的本质,计算机语言简史,TIOBE 指数,C 语言的独特魅力、发展历程、发行版本和应用场景
👋 嘿,各位编程探险家们!是不是一提到 C 语言,脑海中就浮现出指针乱舞、内存泄漏的恐怖画面?别怕,你并不孤单!😅 今天,你踏入了这个专为 “C 语言恐惧症” 患者打造的避…...
python格式化字符串漏洞
什么是python格式化字符串漏洞 python中,存在几种格式化字符串的方式,然而当我们使用的方式不正确的时候,即格式化的字符串能够被我们控制时,就会导致一些严重的问题,比如获取敏感信息 python常见的格式化字符串 百…...
撰写学位论文Word图表目录的自动生成
第一步:为图片和表格添加题注 选中图片或表格 右键点击需要编号的图片或表格,选择 【插入题注】(或通过菜单栏 引用 → 插入题注)。 设置题注标签 在弹窗中选择 标签(如默认有“图”“表”,若无需自定义标…...
SDC命令详解:使用相对路径访问设计对象(current_instance命令)
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。 相对路径 使…...
vector的应用
在平常使用c是,只使用普通数组肯定不够便捷,这时,我们就可以使用vector来使代码更加简洁 目录 1.vector的定义 2.在vector末尾增加一个元素 3.输出元素 (1)输出单个元素 (2)循环输出元素 4…...
pytorch查询字典、列表维度
输出tensor变量维度 print(a.shape)输出字典维度 for key, value in output_dict.items():if isinstance(value, torch.Tensor):print(f"{key} shape:", value.shape)输出列表维度 def get_list_dimensions(lst):# 基线条件:如果lst不是列表࿰…...
征程 6 VIO Frame 时间戳介绍
1. 时间类型 征程 6 内部的时间类型如下 Linux 系统时间是基于 arm system counter 抽象的,Linux 的基于 arm system counter 抽象了很多种时间,图中画了两种。CLOCK_MONOTONIC_RAW 是不会被时间同步调整的。 2. Frame 时间戳 从 VIO 侧获取的图像数…...
DotnetCore开源库SampleAdmin源码编译
1.报错: System.Net.Sockets.SocketException HResult0x80004005 Message由于目标计算机积极拒绝,无法连接。 SourceSystem.Net.Sockets StackTrace: 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, C…...
QML之ScrollView(滚动视图)
ScrollView 是 Qt Quick Controls 2 中提供的可滚动视图容器,用于创建可滚动区域。以下是详细使用方法: 基本用法 qml import QtQuick 2.15 import QtQuick.Controls 2.15ScrollView {id: scrollViewwidth: 300height: 200clip: true// 背景设置&…...
FreeRTOS使任务处于就绪状态的API
在FreeRTOS中,任务的**就绪状态(Ready State)**意味着任务已准备好运行,但尚未被调度器分配CPU时间。以下是通过API使任务进入就绪状态的常见方法及其分类: 1. 恢复被挂起的任务 vTaskResume(TaskHandle_t xTaskToResume) 将被挂起(Suspended)的任务恢复为就绪状态。 示…...
第四篇:Python文件操作与异常处理
第一章:文件操作基础与核心原理 1.1 文件系统基础 文件系统是操作系统用于管理存储设备中数据的核心机制。Python通过内置的open()函数实现文件操作,支持文本文件(.txt、.csv)和二进制文件(.jpg、.dat)的…...
蓝桥杯 嵌入式 小结
一、BSP模版 1. Key 按键扫描模版,需要注意的是 key_val 。 uint8_t Key_Scan(void) {uint8_t key_val0;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)GPIO_PIN_RESET){key_val1;}if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)GPIO_PIN_RESET){key_val2;}if(HAL_GPIO_ReadPin(…...
【音视频】SDL渲染YUV格式像素
SDL视频显示的流程 实现流程 准备视频文件 准备一个格式为yuv420p,分辨率为320x240的yuv数据,并且将视频文件放入项目构建的目录下: 初始化SDL 初始化SDL的视频模块 //初始化 SDL if(SDL_Init(SDL_INIT_VIDEO)) {fprintf( stderr, "…...
ThingsBoard3.9.1 MQTT Topic(1)
1.网关转发子设备的遥测信息, Topic:v1/gateway/telemetry { "m1": [{ "mode": "CW", "temperature": 23 }], "m2": [{ "mode": "CW", "temperature": 23 }] } 说明:json格式&a…...
如何查看自己抖音的IP属地?详细教程+常见问题解答
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全,还是单纯好奇自己的IP归属地,了解如何查看抖音IP属地都很有必要。 本文将详细介…...
李宏毅NLP-2-语音识别part1
语音识别part1 这是一篇名为 “Speech Recognition is Difficult?”(语音识别很难吗? )的文章。作者是 J.R. Pierce,来自贝尔电话实验室(Bell Telephone Laboratories, Inc.) 。文中提到语音识别虽有吸引力…...
AUTOSAR图解==>AUTOSAR_SWS_MemoryMapping
AUTOSAR 内存映射机制详解 深入解析AUTOSAR标准中的内存映射技术 目录 AUTOSAR 内存映射机制详解 目录1. 概述2. 内存映射架构 2.1 架构组成2.2 映射类型2.3 关键组件3. 配置数据模型 3.1 主要配置容器3.2 内存段类型3.3 初始化策略4. 映射使用流程 4.1 配置阶段4.2 开发阶段...
探索 HTML5 新特性:提升网页开发的现代体验
在 Web 开发的演进历程中,HTML5 无疑是一座重要的里程碑。它不仅为网页带来了更丰富的功能,还提升了开发效率与用户体验。本文将深入探讨 HTML5 那些令人瞩目的新特性,助你紧跟现代 Web 开发潮流。 一、语义化标签:让结构更清晰 …...
系统设计思维的讨论
我们经常说自己熟悉了spring,能够搭建起一个项目基本框架,并且在此之上进行开发,用户or客户提出需求碰到不会的百度找找就可以实现。干个四五年下一份工作就去面试架构师了,运气好一些可能在中小公司真的找到一份架构师、技术负责…...
【音视频】SDL播放PCM音频
相关API 打开音频设备 int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); desired:期望的参数。obtained:实际音频设备的参数,一般情况下设置为NULL即可。 SDL_AudioSpec typedef struct SDL_AudioSpec { i…...
FATFS文件系统配置
1、FatFs模块功能配置选项参考ffconf.h函数配置链接:FatFs模块功能配置选项 2、FATFS配置 FATFS 支持长文件名链接: FATFS:配置 FATFS 支持长文件名 3、 FATFS移植链接1 4、 FATFS移植链接2 5、FAT32 和 FATFS 是两个不同层次的概念,分别属于…...
JVM 字节码是如何存储信息的?
JVM 字节码是 Java 虚拟机 (JVM) 执行的指令集,它是一种与平台无关的二进制格式,在任何支持 JVM 的平台上都可运行的Java 程序。 字节码存储信息的方式,主要通过以下几个关键组成部分和机制来实现: 1. 指令 (Opcodes) 和 操作数 …...
Linux:多路转接(上)——select
目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set exceptfds, struct timeval* timeout); 头文件:sys/time.h、sys/ty…...
如何解决DDoS攻击问题 ?—专业解决方案深度分析
本文深入解析DDoS攻击面临的挑战与解决策略,提供了一系列防御技术和实践建议,帮助企业加强其网络安全架构,有效防御DDoS攻击。从攻击的识别、防范措施到应急响应,为网络安全工作者提供了详细的操作指引。 DDoS攻击概览:…...
机器学习Python实战-第三章-分类问题-3.决策树算法
目录 3.3.1 原理简介 3.3.2 算法步骤 3.3.3 实战 3.3.4 实验 前半部分是理论介绍,后半部分是代码实践,可以选择性阅读。 决策树(decision tree)是功能强大而且相当受欢迎的分类和预估方法&…...
Spring三级缓存学习
Spring的三级缓存机制主要用于解决单例Bean的循环依赖问题。其核心在于提前暴露Bean的引用,允许未完全初始化的对象被其他Bean引用。以下是三级缓存的详细说明及其解决循环依赖的原理: 三级缓存结构 一级缓存(singletonObjects) 存…...
欧拉函数φ
函数作用 计算 1 1 1 ~ n n n中有多少个与 n n n互质的数。 函数公式 φ ( n ) n p 1 − 1 p 1 p 2 − 1 p 2 … … p m − 1 p m φ(n)n\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\times……\times\frac{p_m-1}{p_m} φ(n)np1p1−1p2p2−1……pmp…...
蓝桥杯刷题指南
蓝桥杯是中国普及性最好的计算机程序设计竞赛之一,参加者包括大学生、高中生和草根程序员等各个群体。通过刷题来提升自己的编程能力是参加蓝桥杯比赛的常见做法。下面是一些蓝桥杯常见的题型和刷题技巧,希望对大家有所帮助。 基础入门题目:…...
ctfshow WEB web12
发现只有这样一句话,应该是要看页面源代码的,右键查看页面源代码 发现可能存在代码执行漏洞,拼接一个?cmdphpinfo(); 成功显示出php信息, 说明存在代码执行漏洞 接下来遍历目录,我们要用到一个函数 glob() glob() 函数可以查找…...
ChromeOS 135 版本更新
ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命,ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization,可提供更多充电优化选项,…...
redis的缓存
redis的缓存 一.缓存简介1.缓存2.redis作为数据库(MySQL)缓存的原因 二.缓存更新策略1.定期生成2.实时生成3.内存淘汰策略1)FIFO(First In First Out) 先进先出2)LRU(Least Recently Used)淘汰最久未使用的3)LFU(Least…...
字符串与相应函数(上)
字符串处理函数分类 求字符串长度:strlen长度不受限制的字符串函数:strcpy,strcat,strcmp长度受限制的字符串函数:strncpy,strncat,strncmp字符串查找:strstr,strtok错误信息报告:strerror字符操作,内存操作函数&…...
【微知】Mellanox网卡网线插入后驱动的几个日志?(Cable plugged;IPv6 ... link becomes ready)
概要 本文是一个简单的信息记录。记录的是当服务器网卡的光模块插入后内核的日志打印。通过这种日志打印,可以在定位分析问题的时候,知道进行过一次模块插拔。 日志 截图版: 文字版: [32704.121294] mlx5_core 0000:01:00.0…...
spring security oauth2.0的四种模式
OAuth 2.0 定义了 4 种授权模式(Grant Type),用于不同场景下的令牌获取。以下是每种模式的详细说明、适用场景和对比: 一、授权码模式(Authorization Code Grant) 适用场景 • Web 应用(有后端…...
MyBatis-Plus 核心功能
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、条件构造器1、核心 Wrapper 类型基础查询示例SQL 查询使用 QueryWrapper 实现查询 更新操作示例场景一:基础更新SQL 查询使用 QueryWrapper 实现更新…...
阿里云实时计算Flink版产品体验测评
阿里云实时计算Flink版产品体验测评 什么是阿里云实时计算Flink应用场景实时计算Flink&自建Flink集群性价比开发效率运维管理企业安全 场景落地 什么是阿里云实时计算Flink 实时计算Flink大家可能并不陌生,在实时数据处理上,可能会有所接触…...
少儿编程 scratch四级真题 2025年3月电子学会图形化编程等级考试Scratch四级真题解析(判断题)
2025年3月scratch编程等级考试四级真题 判断题(共10题,每题2分,共20分) 11、小圆点角色的程序如下左图所示,程序运行后的效果如下右图所示,自制积木中又调用了自己,这种算法叫做递归。 答案&a…...
【连载3】基础智能体的进展与挑战综述
基础智能体的进展与挑战综述 从类脑智能到具备可进化性、协作性和安全性的系统 【翻译团队】刘军(liujunbupt.edu.cn) 钱雨欣玥 冯梓哲 李正博 李冠谕 朱宇晗 张霄天 孙大壮 黄若溪 2. 认知 人类认知是一种复杂的信息处理系统,它通过多个专门的神经回路协调运行…...
Schaefer 400图谱
图谱下载: https://github.com/ThomasYeoLab/CBIG/tree/master/stable_projects/brain_parcellation/Schaefer2018_LocalGlobal/Parcellations/MNI 图 (第一行)显示了 Yeo et al. (2011) 的 7 网络和 17 网络分包。图…...
通过uri获取文件路径手机适配
青铜版本 return contentResolver.query(this, arrayOf(MediaStore.MediaColumns.DATA), null, null).let {if (it?.moveToFirst() true) {val columnIndex it.getColumnIndex(MediaStore.MediaColumns.DATA)val path it.getString(columnIndex)it.close()return path}&quo…...
Ubuntu 22.04 完美安装 ABAQUS 教程:从零到上手,解决兼容问题
教程概述与安装准备 本教程详细介绍了在 Ubuntu 22.04 系统上安装 ABAQUS 2023 及 ifort 2021 的步骤,并实现用户子程序的链接。教程同样适用于 ABAQUS 2021(需相应调整文件名和路径)以及 Ubuntu 18.04 至 22.04 系统,尽管未在所有版本上测试。需要注意的是,Intel 的 One…...
雷池WAF防火墙如何构筑DDoS防护矩阵?——解读智能语义解析对抗新型流量攻击
本文深度解析雷池WAF防火墙在DDoS攻防中的技术突破,通过智能语义解析、动态基线建模、协同防护体系三大核心技术,实现从流量特征识别到攻击意图预判的进化。结合2023年金融行业混合攻击防御案例,揭示新一代WAF如何通过协议级漏洞预判与AI行为…...
Linux权限理解
1.shell命令以及运行原理 下面来介绍一个话题,关于指令的运行原理,这里先简单理解就可以。当我们登上Linux后: yxx这里称之为用户名,VM-8-2-centos是主机名,~是当前目录,$是命令行提示符。 其中我们把上面的…...
使用labelme进行实例分割标注
前言 最近在学习实例分割算法,参考b站视频课教程,使用labelme标注数据集,在csdn找到相关教程进行数据集格式转换,按照相关目标检测网络对数据集格式的训练要求划分数据集。 1.使用labelme标注图片 在网上随便找了几张蘑菇图片&am…...
策略模式实现 Bean 注入时怎么知道具体注入的是哪个 Bean?
Autowire Resource 的区别 1.来源不同:其中 Autowire 是 Spring2.5 定义的注解,而 Resource 是 Java 定义的注解 2.依赖查找的顺序不同: 依赖注入的功能,是通过先在 Spring IoC 容器中查找对象,再将对象注入引入到当…...
PromptUp 网站介绍:AI助力,轻松创作
1. 网站定位与核心功能 promptup.net 可能是一个面向 创作者、设计师、营销人员及艺术爱好者 的AI辅助创作平台,主打 零门槛、智能化的内容生成与优化。其核心功能可能包括: AI艺术创作:通过输入关键词、选择主题或拖放模板,快速生成风格多样的数字艺术作品(如插画、海报…...
软件架构评估利器:质量效用树全解析
质量效用树是软件架构评估中的一种重要工具,它有助于系统地分析和评估软件架构在满足各种质量属性方面的表现。以下是关于质量效用树的详细介绍: 一、定义与作用 质量效用树是一种以树形结构来表示软件质量属性及其相关效用的模型。它将软件的质量目标…...
XILINX DDR3专题---(1)IP核时钟框架介绍
1.什么是Reference Clock,这个时钟一定是200MHz吗? 2.为什么APP_DATA是128bit,怎么算出来的? 3.APP :MEM的比值一定是1:4吗? 4.NO BUFFER是什么意思? 5.什么情况下Reference Clock的时钟源可…...
ubuntu 2204 安装 vcs 2018
安装评估 系统 : Ubuntu 22.04.1 LTS 磁盘 : ubuntu 自身占用了 9.9G , 按照如下步骤 安装后 , 安装后的软件 占用 13.1G 仓库 : 由于安装 libpng12-0 , 添加了一个仓库 安装包 : 安装了多个包(lsb及其依赖包 libpng12-0)安装步骤 参考 ubuntu2018 安装 vcs2018 安装该…...
Python与去中心化存储:从理论到实战的全景指南【无标题】
Python与去中心化存储:从理论到实战的全景指南 随着区块链技术和Web3理念的兴起,去中心化存储逐渐成为构建新型互联网的核心模块之一。传统中心化存储的模式存在易被攻击、单点故障和高昂成本等问题,而去中心化存储通过分布式架构实现了更高的安全性、可靠性和数据透明度。…...