
CS小白之路
文章平均质量分 95
无知少年痴心妄想罢了,也许这条路就是错误的开始。哈哈,人生终究一场梦罢了
Once-Day
长路漫漫,一人太孤单,无人理解,独自前行,给世界留下一点微不足道的痕迹,稍微弥补曾经的遗憾。
展开
-
GCC之编译(8)AR打包命令
GCC中的AR命令全称是Archive,是一个用于创建、修改和提取档案(archive)文件的工具。档案文件通常用于将多个目标文件打包成一个文件,以便于管理和分发。AR命令在Linux/Unix系统的开发和构建过程中经常使用。以下是AR命令的一些常见用法:(1)创建档案文件上述命令会创建一个名为libmylib.a的档案文件,并将file1.ofile2.o和file3.o三个目标文件打包进去。(2)查看档案文件内容该命令会列出libmylib.a档案文件中包含的所有目标文件。(3)原创 2025-01-25 21:36:53 · 3021 阅读 · 17 评论 -
Linux-arm(1)ATF启动流程
ARM ATF-A (ARM Trusted Firmware-A)是ARM官方为ARMv8-A架构提供的一套开源、安全、可靠的参考firmware实现。它主要面向ARM64(AArch64)和ARM32(AArch32)架构,提供了全面的安全世界(Secure World)支持和丰富的功能。ATF-A支持ARMv7-A和ARMv8-A架构系列处理器,包括Cortex-A53/57/72/73/75/76/77等。原创 2025-01-23 23:29:39 · 2993 阅读 · 32 评论 -
2024年度总结-优快云
Author:OnceDay Date:2025年1月21日一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…漫漫长路,有人对你微笑过嘛…24年非常重要的一个工作是认真总结了TCP详解这本书里面的内容,从网络层往上,总结了大量的文档,逐个协议分析,并且深入阅读RFC资料,养成了阅读标准协议文档的习惯。这部分文档学习和总结时,预期也准备自己实现用户态协议栈来加深理解,但是一直磨蹭,25年这项工作可以开始了。加密报文处理。原创 2025-01-21 22:19:41 · 2230 阅读 · 4 评论 -
网络基础之(2)初级网络知识
网络协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。语义:解释控制信息每个部分的意义,规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。语法:用户数据与控制信息的结构与格式,以及数据出现的顺序。时序:事件发生顺序的详细说明。为什么需要对协议分层?降低单个协议复杂程度,利于实现层间独立,易于标准化保持协议栈的灵活性。层间关系?每一层都使用了下一层提供的服务,每一层都为上一层提供服务。原创 2024-08-03 20:24:52 · 1029 阅读 · 26 评论 -
网络基础之(11)优秀学习资料
本文档分享一些网络工程相关基础学习资料,全部上传到百度云,可供自由下载。网络数据通信相关资料下载-持续收集中,提取码:iybc。原创 2024-07-27 21:25:01 · 1018 阅读 · 3 评论 -
Git(8)之分支间同步特定提交
`git cherry-pick`是一个非常实用的Git命令,它允许选择性地将某个分支上的单个提交(或一系列提交)应用到当前分支上。这个命令的名称来源于“挑选樱桃”的比喻,意味着可以从众多提交中精选出需要的那几个。原创 2024-04-07 23:02:09 · 1656 阅读 · 29 评论 -
python之(19)CPU性能分析常见工具
计算机科学界的大牛Donald Knuth的一句名言:“我们应该忘掉小的效率问题,大约97%的时间:过早的优化是万恶之源。”这句话的核心思想是警告程序员不要在编程初期就过分追求代码的优化,因为那时往往还没有清晰的性能瓶颈证据,盲目优化可能会导致代码的复杂性上升,反而带来更多问题。Python性能分析,顾名思义,是指对Python程序进行性能评估,以确定代码中的瓶颈所在,进而优化程序的运行效率。性能分析不仅能帮助我们找到最耗时的部分,而且能为我们提供决策依据,让我们知道何时以及在哪里优化。原创 2024-03-24 16:52:31 · 2500 阅读 · 38 评论 -
Python界面库Flet(1)介绍和快速使用
在Python领域中,图形用户界面(GUI)库让开发者可以创建直观的桌面应用程序。常见的Python GUI库包括Tkinter、wxPython、PyQt和Kivy等。Tkinter是Python的标准GUI库,它的一个显著优点是随Python安装包一同发行,因此无需额外安装即可使用。Tkinter适用于小型应用程序,由于它的简单性,对于新手来说是一个很好的起点。但是,它的界面风格显得有些过时,且功能上不如其他库强大。wxPython是基于wxWidgets C++库的封装,提供了更加原生的用户界面。原创 2024-03-23 23:27:04 · 4565 阅读 · 12 评论 -
VScode(8)之阅读大型CC++工程
Author:Once Day Date:2023年4月25日/2024年3月17日漫漫长路,有人对你微笑过嘛…全系列文章请查看专栏: VScode开发_Once-Day的博客-优快云博客参考文档:由于上世纪70-80年代的硬件限制,C语言的编译解析是"单遍编译(one pass)",缺乏现代java,python,go等语言的模块化解析功能,这导致解析语法树需要“走一遍”上下文环境。简单来说,如果不把的文件走一遍,解析器无法确定各类符号的确切含义,而对于大型C/C++项目,随便一个头文件,背后可能就有几原创 2024-03-17 23:35:34 · 3098 阅读 · 100 评论 -
VScode(1)之内网离线安装开发环境(VirtualBox+ubuntu+VScode)
Visual Studio Code(简称VSCode)是一个由微软开发的、跨平台的源代码编辑器。自2015年问世以来,它因其轻量级、高性能和强大的功能集而受到了广泛的欢迎。VSCode内嵌了对JavaScript、TypeScript和Node.js的支持,并提供了一个丰富的扩展生态系统,这允许开发者增加对其他语言(如C++、C#、Python、PHP)以及其他技术(如.NET和Unity)的支持。原创 2024-03-17 23:25:33 · 4777 阅读 · 33 评论 -
代码训练LeetCode(12)二进制求和
二进制加法本质上和十进制加法相似,只不过它只包含两个数字:0和1。我们可以使用一个指针从两个字符串的末尾开始向前遍历,模拟手工加法的过程。同时,我们需要一个变量`carry`来记录进位。对于每一对位,我们需要计算它们的和再加上`carry`,然后更新`carry`。原创 2024-03-15 00:00:33 · 965 阅读 · 27 评论 -
代码训练LeetCode(11)删除有序数组中的重复项II
给定一个有序数组 `nums`,你需要原地修改这个数组,去除那些出现超过两次的重复元素。这里的“原地”意味着你不能使用额外的数组结构来辅助完成这个任务;仅能使用有限的额外空间(O(1)),也就是说,除了几个变量以外,不得使用额外的空间资源。由于数组已经有序,所以重复的元素一定是连续的。我们可以使用两个指针来解决这个问题原创 2024-03-14 23:58:19 · 1235 阅读 · 4 评论 -
代码训练LeetCode(9)Git自动同步脚本
通过这个题目,我们可以学习到如何使用bash脚本来自动化Git仓库的同步过程,并且可以增强我们对Git命令和脚本编写的理解。要提升能力,最好的方式是实践这些脚本,实际应用在日常的版本控制任务中,并在实践中学习如何处理各种可能出现的情况,比如合并冲突等。同时,了解更多的Git命令和选项可以帮助我们编写更复杂的脚本,以适应更多的应用场景。原创 2024-03-13 23:42:33 · 1287 阅读 · 32 评论 -
代码训练LeetCode(7)删除有序数组中的重复项
有一个数组 nums,它是非严格递增的,也就是说,数组中的元素可能会有重复,并且它们是按照顺序排列的。你的任务是要在不改变元素相对顺序的情况下,仅保留每个元素的一个副本,并删除所有的重复元素。你需要在不使用额外数组的条件下完成这个操作,这就意味着你需要在原地修改输入的数组 nums。原创 2024-03-10 23:00:39 · 1305 阅读 · 30 评论 -
代码训练LeetCode(6)编辑距离
这种表面一看,似乎是个字符串问题,但是如果按照分类匹配去做,怕是很难得出合理的方法。求两个字符串的编辑距离实际是个动态规划入门题目,动态规划算法是解决这个问题的标准方法。原创 2024-03-09 23:08:34 · 2527 阅读 · 54 评论 -
代码训练LeetCode(5)最长连续序列
这个问题是在寻找最长连续序列的长度,但不要求这些序列在原数组中是连续的。要在 O(n) 时间复杂度内解决这个问题,我们可以利用哈希表(在 C 中通常使用散列表或字典类型的数据结构)。原创 2024-03-09 23:06:33 · 1118 阅读 · 13 评论 -
代码训练LeetCode(4)字母异位词
题目要求我们编写一个函数,这个函数需要判断两个字符串 `s` 和 `t` 是否是字母异位词。如果一个字符串的字母重新排列后能够得到另一个字符串,那么这两个字符串互为字母异位词。换句话说,两个字符串有相同的字母和相同数量的每个字母。可以使用一个大小为 26 的整数数组来代替哈希表。数组的每个位置对应一个字母,值为该字母在字符串 `s` 中出现的次数。原创 2024-03-07 23:39:27 · 1152 阅读 · 24 评论 -
代码训练LeetCode(3)移除元素
解题思路很简单,从数组的第一个元素开始,一直检查到最后一个元素,当你找到一个`val`时,你可以将它和数组最后一个元素交换,然后“丢弃”掉最后一个元素。这样,你就在不增加额外空间的情况下,原地修改了数组。重复这个过程,直到你检查完所有的元素。原创 2024-03-07 23:33:14 · 743 阅读 · 3 评论 -
代码训练LeetCode(2)区间列表的交集
让我们用一个简单的比喻来理解这个编程题目。想象你手中有两根彩色的绳子,这两根绳子由不同颜色的段落组成,每个颜色的段落代表一个闭区间。现在你的任务是找出这两根绳子中颜色相叠的部分,这些部分就是两组区间的交集。原创 2024-03-05 23:58:23 · 1096 阅读 · 17 评论 -
代码训练LeetCode(1)合并有序数组详解
关于合并两个有序数组的问题,我可以为你提供一个通俗易懂的解释,以及C语言的实现方法。首先,想象你有两排学生,他们分别按身高从矮到高排好了队。现在我们要将这两排学生合并成一排,同时保持身高从矮到高的顺序。这就像我们要合并的两个数组,分别是nums1和nums2,它们已经按照非递减顺序(即从小到大)排列好。整数m和n分别告诉我们nums1和nums2中有多少个元素是有效的。原创 2024-03-05 23:56:17 · 929 阅读 · 0 评论 -
OD(13)之Mermaid饼图和象限图
Mermaid是一种流行的基于文本的图表绘制语法和工具,它使得开发人员能够使用简洁的文本描述来生成复杂的图表,而饼图是其支持的多种图表类型之一。Mermaid最初由Knut Sveidqvist创造,目的是为了简化图表的创建过程,让非设计专业的开发人员也能轻松作图。自从它的推出以来,Mermaid迅速赢得了广泛的用户基础,尤其是在程序员和技术文档编写者中。Mermaid的饼图(Pie chart)通过简单的文本标记语言提供了创建饼图的能力。原创 2024-02-29 23:44:37 · 1773 阅读 · 69 评论 -
OD(12)之Mermaid思维导图(Mindmap)
思维导图,这个术语最早由英国心理学家托尼·博赞(Tony Buzan)在20世纪70年代提出,是一种用于辅助脑力激荡、记忆和可视化思考的工具。它通过图形化的方式组织信息,让人们可以更直观地看到思想和概念之间的联系。思维导图通常以一个中心主题开始,然后围绕这个中心主题扩展出多个分支,分支上再进一步衍生出子分支,形成一个网络状的结构。每个分支上都会标记关键词或图像,以代表相应的想法或信息。思维导图不仅仅是一种画图工具,它更是一种思考的艺术。它帮助人们以非线性的方式组织信息,这种方式更接近人脑自然的工作方式。原创 2024-02-29 23:35:49 · 2383 阅读 · 0 评论 -
GDB之(8)GDB-Server远程调试
GDB,全称GNU Debugger,是一个在GNU操作系统下的强大的程序调试工具,广泛应用于Unix及类Unix系统中用以调试多种编程语言编写的程序,尤其是C和C++语言。它由Richard Stallman于1980年代创建,至今仍然是开源社区中使用最为广泛的调试器之一。GDB允许程序员看到程序执行时的内部情况,诸如变量值、程序调用栈等信息,能够在程序执行到特定点时暂停,或者在出现错误时停下来。这就好比给程序员一副透视眼镜,能够洞察程序的内部运行机制。原创 2024-02-28 02:01:16 · 7918 阅读 · 40 评论 -
GDB之(5)线程和进程调试
在操作系统的世界里,尤其是在Linux这一广受欢迎的开源系统中,进程(Process)和线程(Thread)是两种基础且核心的执行单位,它们共同构建起了系统进行任务管理和调度的基石。为了理解二者的联系和区别,可以将进程想象为一个工厂,而线程则是工厂里的工人。进程可以被看作是一个程序的运行实例。它拥有独立的内存空间、数据栈以及其他用于跟踪执行的辅助数据。每个进程至少有一个线程,即主线程,但可以包含更多的线程。在Linux中,创建进程通常通过系统调用fork()原创 2024-02-28 01:56:22 · 1744 阅读 · 7 评论 -
GDB之(3)加载指定动态库文件
GDB(GNU Debugger)是GNU开源组织发布的一个强大的Unix/Linux程序调试工具。在软件开发的调试阶段,GDB提供了程序员在程序暂停执行的情况下,查看和修改程序内部的功能。这对于跟踪错误和异常行为,在复杂的系统中尤为重要。当程序员面对的问题是需要调试的程序依赖特定版本的共享库文件时,GDB加载指定库文件的能力就变得尤为重要。通常,系统可能有多个版本的库文件,或者开发者可能希望测试程序在使用不同版本库文件时的行为。在这种情况下,GDB就需要能够加载和使用指定的库文件。原创 2024-02-27 01:40:35 · 2064 阅读 · 13 评论 -
GDB之(4)调试Python代码
如果Python程序挂住了,想查看Python代码的栈,但是用GDB看到的是C栈,本文介绍使用gdb的python扩展来查看python代码栈。如上面,搜索一下目录,看看是否有,如果没有需要安装对应的工具,这里自带的是python3的调试扩展。对于Python2,需要安装对应的包扩展才行。如上所示,安装对应的python2-gdb扩展即可。原创 2023-03-22 23:09:09 · 4970 阅读 · 0 评论 -
GDB之(1)入门指令参数介绍
GDB(GNU Debugger)是GNU开源组织发布的一个强大的Unix/Linux程序调试工具。在软件开发的调试阶段,GDB提供了程序员在程序暂停执行的情况下,查看和修改程序内部的功能。这对于跟踪错误和异常行为,在复杂的系统中尤为重要。本文简要介绍了gdb的入门指令。原创 2024-02-27 00:40:39 · 1424 阅读 · 6 评论 -
OD(11)之Mermaid时间线图(Timeline diagram)使用详解
Mermaid是一个轻量级的、基于文本的图表绘制工具,它允许开发者使用文本描述来生成图表,这使得图表的创建和维护变得更加简单和高效。Mermaid可以创建多种图表,其中时间线图(Timeline Diagram)是一种表示时间顺序的图表,它展示了一系列事件按时间发生的顺序。维基百科:时间线是一种图表,用于说明事件、日期或时间段的年表。它通常以图形方式渲染以指示时间的流逝,并且通常按时间顺序组织。基本时间线按时间顺序渲染事件列表,通常使用日期作为标记。原创 2024-02-25 22:58:30 · 1996 阅读 · 16 评论 -
OD(10)之Mermaid甘特图(Gantt diagrams)使用详解.md
甘特图,以其创始人亨利·甘特(Henry Gantt)的名字命名,是一种广泛使用的项目管理工具,它通过直观的横向条形图来展示项目进度和时间表。甘特图的起源可以追溯到1910年左右,当时亨利·甘特为提高工厂效率,设计了这一工具。随着时间的推移,甘特图已经成为项目经理的重要工具,用于规划、调度和跟踪项目的各个方面。在甘特图中,每个条形代表一个项目任务,它的长度表示任务的持续时间,位置则显示了任务的起始和结束日期。可以通过不同颜色和长度的条形来区分任务的优先级、状态(如完成、未完成、延期)或者负责人。原创 2024-02-25 00:50:36 · 2385 阅读 · 6 评论 -
(8)Linux使用C语言读取proc/stat等cpu使用数据
在Linux系统中,`/proc`文件系统包含了系统运行时的信息,其中也包括了CPU的使用情况。`/proc`实际上是一个虚拟文件系统,它将内核和系统信息以文件的形式展现给用户和程序。要从`/proc`获取CPU的使用率,我们可以读取`/proc/stat`文件,这个文件包含了一系列以空格分隔的数字,其中第一行以`cpu`开头的数字就是关键信息,它们分别代表了不同类型的CPU时间。原创 2024-02-24 19:29:53 · 3306 阅读 · 31 评论 -
Linux使用C语言获取进程信息
在计算机的世界里,Linux进程是一个非常基础而且关键的概念。它可以被理解为正在执行的一个程序的实例。每个进程都有自己独特的身份,我们称之为进程ID(PID),就像每个人都有自己的身份证号码一样。Linux操作系统是一种多任务操作系统,可以同时运行多个进程,就像一个杂技团队能同时上演多个节目一样。现在,想象一下进程是厨房里的一个厨师,而计算机资源(如CPU、内存)则是厨房里的炉子、锅碗瓢盆。每个厨师都需要这些资源来完成他们的烹饪任务。原创 2024-02-23 00:33:31 · 2492 阅读 · 0 评论 -
OD(9)之Mermaid序列图(Sequence diagrams)使用详解
序列图是一种用于展示系统中对象之间如何交互的UML(统一建模语言)图。它们主要用于展现对象之间交互的顺序,这些交互以时间顺序排列,通常用于系统分析和设计阶段来捕捉系统的动态行为。序列图描述了参与交互的对象集合以及它们之间消息传递的时间顺序,非常直观地表示了各个组件或对象在整个流程中的作用和活动。序列图的功能在于能够清晰地显示多个对象在某个业务流程或用例中的交互方式。它可以帮助开发者和系统分析师理解系统运行的具体细节,便于发现系统设计中的问题,并且为代码实现提供参考。原创 2024-02-22 00:43:28 · 3910 阅读 · 0 评论 -
OD(8)之Mermaid流程图(flowcharts)使用详解
Mermaid 是一种轻量级的、基于文本的图表绘制语法和工具,它允许开发者和技术专业人员通过简单的文本描述来创建图表,这种方法避开了复杂的图形编辑器,让图表的创建和代码一样容易被版本控制系统管理。Mermaid 由 Knut Sveidqvist 于 2014 年创立,并迅速在技术社区中获得了广泛的认可,因为它解决了在文档中嵌入可维护图表的痛点问题。原创 2024-02-21 01:09:47 · 2328 阅读 · 0 评论 -
OD(7)之time调用与Linux-vDSO机制
突然发现一个忽略的知识点,本来以前总是觉得time调用耗时很多,然后就应该用等支持vDSO的函数。但定位代码时,发现原来time实现(glibc)的底层未必是SYS_time函数,也就是系统调用。当然,不同平台的情况有所区别,这里测试平台是Linux4.14(aarch64)和Linux5.10(x64)。在Linux操作系统中,vDSO(即虚拟动态共享对象)是一个提高系统调用性能的机制。它允许程序直接在用户空间中执行一些系统调用,而无需进行传统的、开销较大的内核空间到用户空间的上下文切换。原创 2024-02-20 02:08:02 · 934 阅读 · 3 评论 -
LLM(2)之指令提示词(Prompt)基础教学
使用大模型进行工作提效,已经是目前时代的主要需求了。最先出现突破的就是自媒体、绘图、配音、编程和图文等领域。大模型火爆已经有一年了,过去一年中徬徊过无数次,但是最终还是在潜水。时至今日,不能再沉默了,本篇文章将步随目前最火爆的AI知识社区AI破局星球的脚步,逐渐学习和训练对AI的掌握能力。本文将总结目前AI使用中常见的提示词技巧,想要成事,必须利其器。回忆去年,作为一名网络数通领域开发人员,深深感受到AI对网络技术开发的破局效应。原创 2024-02-17 22:43:11 · 2041 阅读 · 1 评论 -
LLM(1)之基础使用prompt
如同ChatGPT的通用大模型需要使用指令式微调来获取更好的输出效果。三引号(triple quotes),"""三个反引号(triple backticks),```三个破折号(triple dashes), ---尖角括号(Angle brackets), < >>>> 以一个专业的c程序员回答下面的问题```结构体的大小如何计算```结构体的大小是由其成员变量的类型和对齐方式决定的。具体计算方法如下:1. 计算结构体中每个成员变量的大小,包括基本类型和其他结构体类型。原创 2023-04-30 23:29:22 · 2713 阅读 · 0 评论 -
Linux之《深入理解Linux网络》读后感
RingBuffer指什么数据结构?动态分配还是静态初始化?为什么这里会出现丢包情况?RingBuffer(也称为循环缓冲区、环形缓冲区或循环队列)是一种数据结构,用于在缓冲区内以先进先出(FIFO)的方式存储数据。这种结构像一个环一样,缓冲区的末尾连接到缓冲区的开始处。RingBuffer 通常由一个固定大小的数组和两个指针(或索引)组成,分别用于追踪缓冲区的头部和尾部。头部指针指向数据将要被读取的地方,而尾部指针指向数据将要被写入的地方。动态分配。原创 2024-01-29 22:53:45 · 1336 阅读 · 0 评论 -
GDB之(7)监视内存和库加载
在GDB中监控内存区域并在该区域被读取或写入时触发断点,可以使用watch命令来实现。启动GDB并加载你的程序设置断点以停止程序的执行这样你就可以在感兴趣的内存区域被访问之前设置监视点。运行程序(gdb) run找到你想监控的内存地址假设你已经知道了内存的具体地址,或者你可以通过程序变量来获取它。设置监视点假设你想监控的内存地址是0x12345678,你可以使用以下命令来监视这个地址:其中type是内存地址处数据的类型,例如intchar等。继续程序执行。原创 2024-01-25 22:49:37 · 2384 阅读 · 0 评论 -
编码风格之(5)GNU软件编码风格(3)
发布不仅仅是把源文件打包成一个tar文件,然后放到FTP上。您应该对软件进行设置,以便可以将其配置为在各种系统上运行。您的`Makefile`应该符合下面描述的GNU标准,您的目录布局也应该符合下面讨论的标准。这样做可以很容易地将您的包包含到所有GNU软件的大框架中。原创 2024-01-21 23:19:49 · 1478 阅读 · 0 评论 -
编码风格之(4)GNU软件标准风格(2)
例如,当函数定义的头部分发生变化时,VCS日志命令中显示的diff块的头将错误地命名为被修改的函数(通常是在被修改的函数之前定义的函数),因此使用这些diffs来收集被修改函数的名称将产生不准确的结果。如果VCS存储库是可公开访问的,并且更改是单独提交给它的(每个逻辑更改集一次提交),并记录每个更改的作者,那么VCS记录的信息可以用于从VCS日志中生成更改日志,并通过使用合适的VCS命令来回答上述问题。这个原则适用于每一个层次,从最低的(段落中的句子排序)到最高的(手册中的章节主题排序)。原创 2024-01-20 00:06:20 · 1152 阅读 · 0 评论