自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 小阳同学八股学习日记-char和int之间的转换

因此,截断后的结果是1000被截断为一个char类型的值。但是,由于char类型的范围通常是从-128到127(或0到255,取决于是否有符号),因此1000这个值超出了char类型的表示范围。在char类型中,如果char是带符号的,则 'A' 的二进制表示形式是 01000001,其中最高位(最左边的位)为0,表示正数。它可以存储范围内的整数值,通常占用4个字节(32位),其值的范围通常是从-2147483648到2147483647(如果是带符号的)或从0到4294967295(如果是无符号的)。

2024-04-18 09:05:27 798

原创 小阳同学八股学习日记-struct和class

在这两个示例中,我们定义了一个名为Person的struct,它包含了一个名为name的字符串、一个整数age和一个浮点数height。:在struct中,默认的成员访问权限是public,这意味着结构体的成员可以直接从外部访问,这使得结构体更适合于简单的数据聚合。:在class中,默认的成员访问权限为private,这意味着class提供了更好的封装性,可以更好地隐藏数据实现细节。:class提供了更多的特性和语法糖,这使得它的语法相对于struct更加复杂,可能会增加学习和理解的难度。

2024-04-17 09:50:09 1194

原创 小阳同学嵌入式学习日记-QFile读写文件

在Qt中,QFile是一个用于文件I/O操作的类。它提供了一种方便的方式来读取和写入文件内容,以及获取有关文件的信息。QFile类提供了许多函数,用于打开、关闭、读取和写入文件。open(): 打开文件,可以指定打开方式(只读、只写、读写等)和打开模式(文本模式、二进制模式等)。close(): 关闭文件。read(): 读取文件中的数据。write(): 向文件中写入数据。seek(): 设置文件指针的位置。size(): 获取文件的大小。exists(): 检查文件是否存在。

2024-04-16 19:42:18 696

原创 小阳同学嵌入式学习日记-_stdcall 和 _cdecl

都是 Windows 平台下函数调用约定(calling convention)的一种。在 Windows 平台下,默认情况下,C 和 C++ 函数使用。如果需要显式地声明函数的调用约定,可以使用相应的关键字进行声明。调用约定,而 Win32 API 函数和 COM 组件使用。是两种不同的函数调用约定,在参数传递和栈清理方面有所不同。

2024-04-12 09:15:28 390

原创 小阳同学嵌入式学习日记-extern “C“

用于声明C语言风格的函数接口,这意味着函数名称不会被C++的名称修饰机制修改,也就是不会进行函数名称的重命名(名称修饰)。这样声明的常量是一个声明而非定义,编译器在编译时不会为它分配存储空间,而是将其作为一个标识符,用于在其他文件中访问已定义的常量。时,这个函数的名称在链接时会按照 C 语言规则进行修饰,因此在 C 代码中可以直接引用这个函数而不需要使用 extern。声明告诉编译器这些函数是用C语言编写的,而不是C++。声明,只是告诉编译器该变量是在其他文件中定义的,而不是在当前文件中定义的。

2024-04-12 08:55:05 862

原创 小阳同学刷题日记-203. 移除链表元素

题目:给你一个链表的头节点head和一个整数val,请你删除链表中所有满足 Node.val == val的节点,并返回。思路:。

2024-04-11 15:44:53 574

原创 小阳同学刷题日记-54. 螺旋矩阵

返回矩阵中的所有元素。的矩阵 matrix。

2024-04-11 13:41:48 300

原创 小阳同学嵌入式学习日记-setStyleSheet( )和.qss文件

Qt中的QSS(Qt Style Sheets)文件是一种用于定义界面样式的文件格式。类似于CSS(Cascading Style Sheets),QSS文件允许您定义Qt应用程序中的各种UI元素的外观和样式,包括按钮、标签、文本框等。这个方法允许您以类似CSS的方式为控件指定样式,并且这些样式可以在运行时动态修改。通常情况下,对于简单的样式需求或者需要动态修改样式的情况,可以选择使用setStyleSheet()而对于复杂的样式需求、需要设计与逻辑分离或者需要样式重用的情况,可以选择使用.qss文件。

2024-04-10 14:24:21 1253

原创 小阳同学嵌入式学习日记-自定义信号槽

在Qt中,可以通过在自定义的类中声明信号来创建自定义信号。通常情况下,自定义信号应该在类的signals部分声明,并且不需要提供实现,Qt会在需要时自动生成相应的代码。Q_OBJECTpublic:signals:// 声明了一个自定义信号,无返回值,无参数// 槽函数,用于接收信号在这个示例中,我们创建了一个名为MyClass的类,它继承自QObject。在类的 signals部分声明了一个名为 mySignal的自定义信号,它没有返回值也没有参数。

2024-04-08 15:54:30 897

原创 小阳同学嵌入式学习日记-Qt信号与槽机制

Qt 信号与槽机制是一种用于处理对象间通信的机制,它是 Qt 中最重要的特性之一。通过信号与槽机制,一个对象可以向另一个对象发送信号,而另一个对象可以在接收到信号时执行相应的槽函数。这种机制极大地简化了对象之间的通信,使得代码的组织和管理更加灵活和清晰。信号(Signal):信号是一个对象的特殊成员函数,用于发出通知或事件。当对象的状态发生变化或特定条件满足时,它会发出一个信号,通知其他对象。槽(Slot):槽是一个普通的成员函数,用于接收信号并执行相应的操作。

2024-04-08 14:43:33 844

原创 小阳同学刷题日记-59. 螺旋矩阵 II

*确定边界条件:**确定每一轮填充数字时的边界条件至关重要。**设计填充逻辑:**设计好每一轮填充数字的逻辑是解决问题的关键。在每一轮中,需要明确从哪个方向开始填充、填充的终止条件以及如何更新边界。**确定填充顺序:**了解如何按照顺时针的顺序填入数字是解决问题的关键。**处理特殊情况:**在实现填充逻辑时,需要考虑各种特殊情况,例如矩阵的大小为奇数或偶数时的区别,以及最后剩下一行或一列的情况等。**边界条件的处理:**在实现填充逻辑时,需要确保边界条件的处理是正确的,以避免越界或重复填充的情况发生。

2024-04-07 17:18:21 245

原创 小阳同学嵌入式学习日记-条件变量

条件变量(Condition Variables)是一种线程同步的机制,用于在多线程编程中实现线程之间的协作。它通常与互斥锁(Mutex)一起使用,用于在线程等待某个条件成立时暂停执行,并在条件满足时恢复执行。条件变量允许线程在等待某个条件成立时进入阻塞状态,以避免忙等待(busy-waiting)的情况,从而有效地利用系统资源。等待(wait):一个线程可以调用等待操作来阻塞自己的执行,直到某个条件被满足。当某个线程在条件不满足时调用等待操作时,它会释放持有的互斥锁,并进入阻塞状态等待条件成立。

2024-04-07 12:20:13 1213

原创 小阳同学嵌入式学习日记-互斥锁

互斥锁(Mutex,全名为 Mutual Exclusion)是一种线程同步的机制,用于保护共享资源,确保同一时间只有一个线程可以访问共享资源,从而避免多个线程同时修改共享资源导致的数据不一致性和竞态条件。互斥锁的基本操作包括两个主要函数:锁定(Lock)和解锁(Unlock)。当一个线程要访问共享资源时,首先会尝试获取互斥锁,如果互斥锁已经被其他线程获取,则当前线程会被阻塞,直到获取到互斥锁为止。获取到互斥锁后,线程可以安全地访问共享资源,执行完操作后,需要释放互斥锁,以允许其他线程继续访问共享资源。

2024-04-03 16:42:44 707

原创 小阳同学嵌入式学习日记-线程同步

线程同步是指在多线程编程中,通过各种机制来协调和控制多个线程的执行顺序和访问共享资源的行为,以确保程序的正确性和一致性。线程同步的主要目的是避免竞态条件(Race Condition)和其他并发问题,确保多个线程能够按照既定的顺序和方式进行协作和合作。使用互斥锁(Mutex)来保护临界区,确保同一时间只有一个线程可以进入临界区执行操作,避免多个线程同时访问共享资源导致数据不一致的情况。使用条件变量来实现线程的等待和通知机制,允许线程等待某个条件的发生并在条件满足时被唤醒,以便有效地进行线程间的协调和通信。

2024-04-03 16:21:10 856

原创 小阳同学嵌入式学习日记-守护进程

守护进程(Daemon Process)是在操作系统后台运行的一种特殊类型的进程。它们在后台运行,通常独立于任何用户会话,并且没有控制终端。守护进程通常被设计用来执行一些系统级的任务或服务,例如作为服务器后端运行、定期执行某些任务、监控硬件或网络设备等。守护进程在后台持续运行,通常不受用户会话的影响,不需要用户交互。守护进程通常不与任何控制终端相关联,因此不接收用户输入,也不向终端输出。守护进程通常在系统启动时启动,并在系统关闭时终止,与用户登录和注销无关。

2024-04-01 20:59:55 832

原创 小阳同学嵌入式学习日记-什么是进程组?

组长进程是指进程组中的第一个进程,其进程ID(PID)等于进程组ID(PGID)。在创建进程组时,创建的第一个进程会成为进程组的组长进程。在操作系统中,进程组(Process Group)是一组相关联的进程的集合,它们共享同一个组ID(PGID)。进程组通常由一个或多个相关联的进程组成,这些进程通常是由同一个父进程创建的,并且它们可以相互之间进行通信和协作。每个进程组都有一个进程组领导者(Leader Process),它的进程ID(PID)等于进程组ID(PGID)。)来加入到另一个进程组中。

2024-04-01 19:50:42 397

原创 小阳同学嵌入式学习日记-进程状态

如上图所示,便是一个进程从出生到死亡的全过程。

2024-03-31 17:17:18 1009

原创 小阳同学嵌入式学习日记-创建进程中的fork( )和vfork( )

总的来说,如果需要创建一个新的子进程来执行一个新的程序,并且这个新程序会立即执行,那么vfork()但是如果子进程需要修改父进程的地址空间,或者需要在创建后独立运行一段时间,那么fork()之后,操作系统会复制父进程的所有资源(包括内存、文件描述符等),然后将复制的资源分配给子进程。是一个系统调用,用于创建一个新的进程,新进程称为子进程,而调用fork()下面是一个简单的例子,演示了fork()返回的是子进程的PID,而在子进程中,fork()是另一个创建新进程的系统调用,但与fork()

2024-03-31 16:22:08 1061

原创 小阳同学嵌入式学习日记-fork( )创建子进程

后,父进程和子进程会执行相同的代码,但它们拥有不同的内存空间。需要注意的是,子进程是父进程的副本,但是它们有各自独立的内存空间,因此在它们的内存空间中做出的更改不会影响对方。因此,如果在父进程中打开了文件,子进程也会继承这些打开的文件。另外,如果子进程的父进程提前结束,而子进程还在运行,那么子进程会变成孤儿进程,这时候可以将其重新绑定到 init 进程,即通过。调用后,父进程和子进程的执行路径会分开,它们可以并行执行不同的任务。被用于创建一个新的进程,然后在新的进程中执行不同的程序,这个过程称为进程创建。

2024-03-29 09:59:34 621

原创 小阳同学嵌入式学习日记-终止进程中的exit( )和_exit( )

是用于函数内部返回值并结束当前函数的执行。都是用于终止程序的函数,但它们有一些区别。函数用于立即终止程序,不进行任何清理工作。是用于终止整个程序的执行,而 return。函数用于正常终止程序并执行清理工作,而。函数用于异常终止程序,直接返回操作系统。函数用于正常终止程序并执行清理工作,而。语句来结束程序的执行,但建议使用。函数中,可以使用 return。函数来明确表示程序的结束。

2024-03-27 20:50:59 730

原创 小阳同学嵌入式学习日记-进程与程序

在实际开发中,正常终止是我们期望的结果,而异常终止则是程序发生问题时的一种应对方式。在这种情况下,程序会返回给操作系统一个退出码(通常是0),表示程序成功地执行完成。:有时候,操作系统或其他软件可能会强制终止程序的执行,例如在内存不足时操作系统会终止一些程序以释放资源,或者用户手动结束程序的执行。:程序执行过程中可能会包含一些条件,当满足这些条件时,程序会自行决定终止执行。简而言之,程序是静态的代码集合,而进程是程序的执行实例,是动态的执行过程。程序结束的方式通常取决于程序的设计和执行环境。

2024-03-27 17:17:55 238

原创 小阳同学嵌入式学习日记-标准 I/O和文件 I/O

是两种不同的输入输出方式,用于在程序中读取和写入数据。做大做强,再创辉煌!

2024-03-27 15:58:06 138 1

原创 小阳同学嵌入式学习日记-进程和线程

进程(Process)是计算机中运行的程序的实例。它是操作系统进行资源分配和调度的基本单位,包含了程序的代码、数据和程序执行时所需的系统资源。程序代码:进程包含了要执行的程序代码,即程序的指令集合,定义了程序的逻辑和功能。数据:进程还包含了程序所使用的数据,包括变量、数组、对象等。这些数据在进程执行过程中会被程序读取、修改和存储。堆栈:每个进程都有自己的堆栈空间,用于存储函数调用、局部变量和函数参数等信息。堆栈的大小通常是固定的,并且会在程序执行时动态地分配和释放。资源。

2024-03-27 08:53:35 734 1

原创 小阳同学刷题日记-904.水果成篮

献上我的笨蛋解法,虽然我知道他是对的,但他遇到超级多果树测试的时候,超时了,我甚至不甘心,有放到了vs上面跑,结果软件崩了。你想要尽可能多地收集水果。你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组。,返回你可以收集的水果的。经供娱乐,不能参考。

2024-03-26 21:42:18 241

原创 小阳同学刷题日记-209. 长度最小的子数组

个正整数的数组和一个正整数 target。如果不存在符合条件的子数组,返回 0。找出该数组中满足其总和大于等于。

2024-03-26 20:24:42 472

原创 小阳同学嵌入式学习日记-竞争冒险和原子操作

假设有一个共享的计数器变量,多个线程同时对该计数器进行读取和递增操作。在没有同步控制的情况下,可能会发生竞争冒险。初始时,计数器的值为 0。线程 A 读取计数器的值为 0。线程 B 同时也读取计数器的值为 0。线程 A 将计数器的值加 1,并将结果写回计数器,使其值变为 1。线程 B 也将计数器的值加 1,由于此时线程 B 读取的是旧值 0,所以它也将旧值加 1,并将结果写回计数器,使其值变为 1。

2024-03-26 16:36:47 661

原创 小阳同学嵌入式学习日记-空洞文件、 O_APPEND 和 O_TRUNC 标志

相反,空洞文件使用一种称为“洞”的特殊标记来表示其中的一些部分是未使用的或者空的。如果文件已经存在,那么文件的当前偏移量会被设置到文件的末尾,这样所有的写操作都将在文件末尾追加数据。如果文件已经存在,那么文件中的所有数据都将被删除,并且文件的大小将变为0。这个标志通常与写入文件操作一起使用,以确保写入的数据覆盖现有的文件内容,而不是追加到文件末尾。在许多操作系统中,创建空洞文件的方法是通过在文件中创建大量的空洞(使用特殊的系统调用或者文件操作),而不实际写入数据。做大做强,再创辉煌!

2024-03-26 13:41:39 229

原创 小阳同学刷题日记-977. 有序数组的平方

首先是我的四不像解法,还请大家引以为戒,不要像我一样菜菜的。方法: ①平方之后sort()直接排序;组成的新数组,要求也按。

2024-03-25 21:09:36 220

原创 小阳同学嵌入式学习日记-静态文件与inode、进程控制块

文件描述符表中的每个元素(即每个文件描述符)通常会对应一个系统级的文件表条目,该条目记录了打开文件的相关信息。,它存储了进程的各种信息,包括进程的标识符、状态、优先级、程序计数器、寄存器内容、内存分配信息、打开文件的列表、进程间通信信息等。是文件系统中的一个数据结构,用于存储文件的元数据信息,包括文件的权限、拥有者、文件大小、数据块的位置等。,文件系统可以快速定位文件的元数据信息,并管理文件的存储、访问和权限控制。,它存储了进程的各种信息,帮助操作系统对进程进行有效的管理和调度。,并将进程的信息填入其中。

2024-03-25 20:25:34 872 1

原创 小阳同学嵌入式学习日记-open()、write()、read()、close()、lseek()

在文件操作中,关闭文件描述符通常是一个很重要的操作,特别是在程序需要打开大量文件时,及时关闭不再需要的文件描述符可以避免资源浪费和系统资源耗尽的问题。函数,程序员可以打开已存在的文件或者创建新的文件,并且可以通过返回的文件描述符进行文件的读写操作。函数,程序员可以实现文件的随机访问,读取或者修改文件的任意位置内容。函数返回值是调整后的文件偏移量,如果操作成功,则返回新的文件偏移量;函数返回一个文件描述符,如果操作成功,则返回新打开文件的文件描述符;函数返回值是整数型的,如果操作成功,则返回。

2024-03-25 18:16:30 581

原创 小阳同学嵌入式学习日记-文件描述符

在Linux系统中,文件描述符(File Descriptor)是一个用于标识打开文件、套接字、管道和其他 I/O 设备的非负整数。Linux系统遵循了Unix哲学中“一切皆文件”的概念,因此文件描述符不仅仅用于表示普通的文件,还可以表示其他的I/O资源,比如管道、套接字等。

2024-03-25 16:15:42 535

原创 小阳同学嵌入式学习日记-应用编程与裸机编程、驱动编程有什么区别?

主要关注于开发操作系统中用于管理和控制硬件设备的驱动程序。是三种不同的软件开发方式,它们的主要区别在于所针对的。主要关注于在硬件上直接编程实现特定功能,而。主要关注于开发功能丰富的应用程序,

2024-03-25 15:10:08 319

原创 小阳同学嵌入式学习日记-什么是系统调用?

在系统调用的过程中,用户程序通过将参数传递给特定的系统调用函数或者指令,然后通过软中断或者其他机制将控制权转交给操作系统内核。系统调用是用户空间程序与内核之间的接口,它允许用户程序通过一组预定义的函数或者指令,向操作系统发出请求以执行特定的操作。系统调用是操作系统提供的重要功能之一,它为用户程序提供了访问操作系统功能的标准化接口,同时也是操作系统内核实现功能的核心部分。当用户程序需要执行特权操作(例如创建进程、读写文件等),或者访问受保护的资源时,就需要通过系统调用来委托操作系统来完成这些任务。

2024-03-25 14:28:47 474

原创 小阳同学刷题日记-844. 比较含退格的字符串

是 C++ 中的一个字符串成员函数,用于从字符串中提取子串。两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。如果对空文本输入退格字符,文本继续为空。

2024-03-22 21:30:31 238 1

原创 小阳同学刷题日记-283. 移动零

这样解出来的顺序就是错误的 ,相反了。必须在不复制数组的情况下原地对数组进行操作。移动到数组的末尾,同时。,编写一个函数将所有。

2024-03-22 20:46:17 225 1

原创 小阳同学刷题日记-26. 删除有序数组中的重复项

/ 长度正确的期望答案。,在实际长度的基础上减少了1,所以意味着我们在return的时候应该。也就是size(),而我们一般返回的都是实际在。他的意思是你返回的k应该是。如果所有断言都通过,那么您的题解将被。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。

2024-03-22 19:58:56 119 1

原创 小阳同学刷题日记-27. 移除元素

在数组中经常使用,指向数组的两端,根据题目要求,通过移动左右指针来缩小搜索范围,或者解决一些需要同时遍历数组的问题。:也是左右指针的一种特例,在有序数组中使用,将指针分别放在数组的两端,根据题目的要求移动左右指针,以寻找特定的目标。:用于解决链表中的问题,快指针一次移动两步,慢指针一次移动一步,常用于判断链表是否有环或找到链表的中间节点等问题。思路:这道题我现在考虑的解法有两种:①暴力解法;的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用。你不需要考虑数组中超出新长度后面的元素。

2024-03-22 19:04:01 385 1

原创 小阳同学刷题日记-69. x 的平方根

一种常见的解决方案是使用二分查找算法。二分查找的思想是在一个有序的数据集中查找某个特定元素的算法。在这个问题中,我们可以利用二分查找来逼近计算 x 的平方根。初始化搜索范围为 [0, x]在每一次迭代中,计算中间值。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。的平方根的整数部分。

2024-03-22 15:36:06 278

原创 小阳同学刷题日记-34. 在排序数组中查找元素的第一个和最后一个位置

对于正数,右移一位相当于除以 2,对于负数,右移一位则是在除以 2 的同时向负无穷方向取整。找到目标值的结束位置:在第一步找到的位置基础上向右遍历,直到找到第一个不等于目标值的位置的前一个位置,这就是目标值的结束位置。找到目标值的开始位置:在第一步找到的位置基础上向左遍历,直到找到第一个等于目标值的位置,这就是目标值的开始位置。利用二分查找,可以将时间复杂度控制在 O(log n) 的级别,这也是题目要求的时间复杂度。二分查找:一次找到目标值的开始位置,另一次找到目标值的结束位置。,返回 [-1, -1]

2024-03-22 13:03:33 240

原创 小阳同学刷题日记-35.搜索插入位置

思维要跳脱出来,不要因为才看了二分法就只知道用二分法来做,每道题肯定都有不同的做法,一定要把自己能想到的方法都先在脑海里面预想一遍!不然就只有像我这样写的一言难尽。因为才看完二分法的缘故,一看到这道题就选择了是用二分法来解决这道题。但是呢,我的代码虽然跑通了,但是写得是一言难尽,菜鸟献丑了。跳出固定思维,多角度思考问题,掌握好所学知识。请必须使用时间复杂度为 O(log n)如果目标值不存在于数组中,返回它将会被。给定一个排序数组和一个目标值,在数组中。

2024-03-20 18:14:12 255

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除