自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 迭代法反转链表

/初始化三个指针:prev 初始化为 nullptr,表示前一个节点;curr 初始化为链表的头节点;next 用于临时保存 curr 的下一个节点。//迭代法的核心思想是遍历链表,将原本指向下一个节点的指针改为指向前一个节点。//当 curr 为 nullptr 时,遍历结束,此时 prev 就是反转后链表的头节点。//改变 curr 的指针方向,使其指向 prev。//先保存 curr 的下一个节点到 next。//更新 prev 为 curr。//更新 curr 为 next。

2025-03-17 15:02:48 149

原创 二分查找寻找旋转排序数组最小值边界条件处理

/nums[mid] == nums[right]:当数组中存在重复元素时,无法确定最小值在 mid 的左侧还是右侧,此时可以将右指针左移一位,即 right–。//在二分查找中,当 nums[left] < nums[right] 时,说明数组是有序的,直接返回 nums[left]。//nums[mid] < nums[right]:说明最小值在 mid 或 mid 的左侧,更新 right = mid。//如果数组没有进行旋转,那么它仍然是一个升序排列的数组,此时最小值就是数组的第一个元素。

2025-03-08 17:30:40 199

原创 二分查找旋转数组部分有序原理分析

/检查 target 是否在左半部分的有序区间内(即 nums[left] <= target && target < nums[mid]),如果是,则将 right 更新为 mid - 1,继续在左半部分查找。//检查 target 是否在右半部分的有序区间内(即 nums[mid] < target && target <= nums[right]),如果是,则将 left 更新为 mid + 1,继续在右半部分查找。//否则,将 left 更新为 mid + 1,在右半部分查找。

2025-03-08 16:37:11 149

原创 二分查找边界条件分析

/while (left <= right):因为 right 是包含在搜索区间内的,所以当 left 等于 right 时,区间 [left, right] 仍然包含一个元素,需要继续查找。//while (left < right):由于 right 不包含在搜索区间内,当 left 等于 right 时,区间 [left, right) 为空,查找结束。//这是最常见的一种边界条件设定方式,left 和 right 分别表示当前搜索区间的左右端点,且 right 是包含在搜索区间内的。

2025-03-08 12:00:03 56

原创 Algothrm

比赛的冠亚季 e100 比赛前三名。最长方连续方波信号 e200。构成正方形的数量 e100。寻找最优路测线路 e200。观看文艺汇演问题 e200。不含101的数 e200。MVP争夺战 e100。编码能力提升 e200。最大社交距离 e200。任务最优调度 e200。接口成功率 e100。第K个排列 e100。机房布局 e 100。勾股数元组 e100。最大矩阵和 e100。二叉树计算 e200。推荐多样性 e200。

2025-03-06 18:29:50 105

原创 C++14新特性

c++14通过std::shared_timed_mutex和std::shared_lock来实现读写锁,保证多个线程可以同时读,但是写线程必须独立运行,写操作和读操作不可同时进行,这种情况下才能从shared_mutex中获取性能优势。c++11中有std::make_shared,c++14增加了std::make_unique。9、std::shared_timed_mutex与std::shared_lock。std::recursive_timed_mutex 有超时能力的递归互斥量。

2024-11-04 17:13:13 543

原创 C++17新特性

C++17通过引入这些新特性,使得语言更现代、更易用、更安全。这些特性包括结构化绑定、if constexpr、折叠表达式、std::optional、std::variant、std::any、初始化if和switch、内联变量、新的标准属性以及文件系统库。希望本文能帮助你更好地理解和应用C++17的新特性,进一步提升你的编程能力和项目质量。C++17是C++标准中的一个重要版本,它在语言核心和标准库中引入了许多新特性和改进,使得C++编程更加现代化和高效。深入了解C++17新特性。

2024-11-04 16:28:00 298

原创 C++20新特性

这些特性极大地增强了语言的表达能力,使代码更简洁、更高效、更易于维护。C++20 是 C++ 语言发展中的一个重要里程碑,引入了众多新特性,这些特性不仅提升了语言的功能性和性能,还极大地简化了许多编程任务。捕获 this:使用 [*this] 捕获当前对象的拷贝,而不是引用,避免了 Lambda 中出现悬空引用的问题。惰性计算:此操作不会立即对所有元素进行过滤和转换,只有在访问元素时才会计算结果,节省了不必要的开销。安全性:std::span 提供了类似指针的接口,但不会产生指针的安全问题(如越界访问)。

2024-11-04 14:56:54 1395

原创 手动切换Python版本

手动切换python默认版本:sudo update-alternatives --config python,其中输入1则将python2.7设置为默认版本,输入2则将python3.8设置为默认版本。

2024-09-24 20:44:15 215

原创 codetest

codetest

2024-08-31 09:34:22 489

原创 连接和登入后台

车端连接和登入车联网后台。

2024-08-29 09:24:43 301

原创 上传数据给后台

上传数据给后台,失败重发三次。

2024-08-27 17:51:42 183

原创 数据存储示例

存储7天车联网数据,存储满后覆盖。

2024-08-26 08:50:47 457

原创 GPS NMEA数据解析示例

【代码】GPS NMEA数据解析示例。

2024-08-22 19:08:34 195

原创 select函数用法

将上述结构体填入时间值,然后将结构体地址值传给select函数的最后一个参数,此时,即使文件描述符中未发生变化,只要过了指定时间,也可以从函数返回。FD_ISSET(int fd, fd_set* fdset):若参数fd_set指向的变量中包含文件描述符fd的信息,则返回真。FD_SET(int fd, fd_set* fdset):在参数fd_set指向的变量中注册文件描述符fd的信息。FD_CLR(int fd, fd_set* fdset):参数fd_set指向的变量中清除文件描述符fd的信息。

2024-08-22 16:05:01 418

原创 ringbuffer用做数据包解析案例

【代码】ringbuffer用做数据包解析案例。

2024-08-22 15:40:56 186

原创 gdb调试常用指令及案例讲解

GDB 支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。使用 gdb 之前,要求对文件进行编译时增加 -g 参数,加了这个参数过后生成的编译文件会大一些,这是因为增加了 gdb 调试内容。GDB是一个由GNU开源组织发布的、UNIX/LINUX 操作系统下的、基于命令行的、功能强大的程序调试工具。list/l n 从第 n 行开始显示程序, 后续继续输入 list/l,就可以显示后面的代码。要注意的是,如果是系统函数,按 s 就出不来了,这时用 until+行号直接执行到行号处。

2024-08-20 11:50:35 179

原创 掌握 top 命令:动态查看Linux进程状态

top 命令用于动态显示 Linux 系统中运行的进程信息,是系统监控和性能调优的重要工具。-d 指定两次刷新之间的时间间隔,默认3秒 top -d 5。ni:用户态改变优先级的进程占用 CPU 的时间百分比。wa:等待 I/O 占用 CPU 的时间百分比。st:被虚拟化程序偷取的 CPU 时间百分比。us:用户态进程占用 CPU 的时间百分比。sy:系统态进程占用 CPU 的时间百分比。hi:硬件中断占用 CPU 的时间百分比。si:软件中断占用 CPU 的时间百分比。

2024-08-20 10:12:54 604

原创 北斗/GPS模块输出的NMEA语句详解

与*之间所有字符 ASCII 码的校验和(各字节做异或运算,得到校验和后,再转换 16 进制格式的 ASCII 字符)NMEA协议采用 ASCII 码来传递 GPS 定位信息,我们称之为帧。:校验和前缀(也可以作为语句数据结束的标志)6、(CR)(LF):帧结束,回车和换行符。:地址域,前两位为识别符(),后三位为语句名(

2024-07-03 10:32:56 1627

原创 配置linux net.ipv4.ip_forward数据包转发

内核参数在Linux文件系统中的映射出的文件:/proc/sys/net/ipv4/ip_forward中记录了Linux系统当前对路由转发功能的支持情况。出于系统安全考虑,在默认情况下,Linux系统是禁止数据包转发的。如果在Linux系统中需要开启路由转发功能,必须要配置一个内核参数net.ipv4.ip_forward。该参数指定了Linux系统当前对路由转发功能的支持情况,值为0表示禁止,值为1表示开启。2、修改内核参数的映射文件:/proc/sys/net/ipv4/ip_forward。

2024-07-02 10:46:45 1304

原创 TCP三次握手

二次握手:服务端发送带有 SYN+ACK 标志的连接请求和应答数据包给客户端。一次握手:客户端发送带有 SYN 标志的连接请求数据包给服务端。三次握手:客户端发送带有 ACK 标志的应答数据包给服务端。

2024-07-01 16:27:00 432

原创 什么是DHCP?

如果有多个DHCP服务器向DHCP客户端回应DHCP OFFER报文,则DHCP客户端一般只接收第一个收到的DHCP OFFER报文,然后以广播方式发送DHCP REQUEST报文,该报文中包含客户端想选择的DHCP服务器标识符(即Option50,填充了接收的DHCP OFFER报文中yiaddr字段的IP地址)。DHCP客户端广播发送DHCP REQUEST报文通知所有的DHCP服务器,它将选择某个DHCP服务器提供的IP地址,其他DHCP服务器可以重新将曾经分配给客户端的IP地址分配给其他客户端。

2024-07-01 11:12:32 1015

原创 tcpdump命令详解及使用实例

1、抓所有网卡数据包。

2024-07-01 10:25:10 222

原创 虚拟机似乎正在使用中

在用VMware虚拟机的时候,有时会发现打开虚拟机时提示“该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”。1、找到配置文件的路径(也就是弹出提示窗口上的路径)。3、将后缀为.lck的文件夹删除。2、找到后缀为.lck文件夹。

2024-05-23 18:06:20 259

原创 git常用操作

1、拉取远程指定分支,git clone -b 2、切换分支, git checkout

2024-04-02 09:14:58 184 1

原创 IMEI、IMSI、ICCID是什么?意义和区别?通信模组或手机的唯一识别码

2位,中国移动使用00、02、04、07,中国联通GSM系统使用01、06、09,中国电信CDMA系统使用03、05,电信4G使用11,中国铁通使用20。A:做设备后台管理编号,以上的其实都可以,都是全球唯一ID。(2)如果是双卡设备,可能同个设备会有两个IMEI。第三部分:MSIN,移动订阅用户识别代码(Mobile subscription identification number)。由15位数字组成,全球唯一ID,用来区别每一部移动通信设备。A:IMEI是移动设备识别码,IMSI是移动用户识别码。

2024-01-30 15:09:43 9133

原创 Linux互斥锁pthread_mutex_lock和pthread_mutex_unlock

当一个进程中存在两个及以上的线程时,线程间会互相争夺共享资源,导致单个线程中的执行秩序会被打乱。我们在使用的时候,应该把 *mutex定义为全局变量,这样所有的线程都能使用。参数说明: *mutex 互斥锁的索引(名称),注意这里同样是指针变量。参数说明: *mutex 互斥锁的索引(名称),注意这里同样是指针变量。参数说明: *mutex 互斥锁的索引(名称),注意这里同样是指针变量。2、销毁互斥锁pthread_mutex_destroy();1. *mutex 互斥量的索引(名称),为指针变量;

2023-12-22 09:09:57 1327

原创 Linux管道popen和pclose

函数功能:popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh -c来执行参数command的指令。依照此type值,popen()会建立管道连到子进程的标准输出设备或标准输入设备,然后返回一个文件指针。父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数。返回值:若成功返回shell的终止状态(也即子进程的终止状态),若出错返回-1,错误原因存于errno中。这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程。

2023-12-20 15:45:57 508

原创 linux条件变量pthread_cond_wait和pthread_cond_signal函数

3、当被唤醒,pthread_cond_wait函数返回时,解除阻塞并重新申请获取互斥锁pthread_mutex_lock(&mutex);本次分析linux中的条件变量,条件变量本身不是锁,但它也可以造成线程阻塞,通常与互斥锁配合使用,给多线程提供一个会合的场所。1.4.pthread_cond_timedwait函数。

2023-12-20 14:37:39 2086

原创 Linux共享内存shmget,shmat,shmdt,shmctl函数

2.key=IPC_PRIVATE 可以不加IPC_CREAT就可以创建IPC对象,这种方式创建的IPC对象只能用于有亲缘关系的进程通信。IPC_EXCL:一般和IPC_CREAT一起使用,表示如果打开的IPC对象已存在,则报错。共享内存是一种最为高效的进程间通讯方式,进程可以直接读写内存,不需要任何数据的复制。IPC_STAT:得到共享内存的状态,把共享内存的shmid_ds结构复制到buf中。IPC_CREAT:如果共享内存不存在,则创建一个共享内存,否则直接打开已存在的。0 读写。

2023-12-18 17:22:35 651

原创 Linux消息队列 msgget()、msgsend()、msgrcv()、msgctl()

如果它的值大于零,将获取具有相同消息类型的第一个信息。msg_ptr是一个指向准备发送消息的指针,但是消息的数据结构却有一定的要求,指针msg_ptr所指向的消息结构一定要是以一个长整型成员变量开始的结构体,接收函数将用这个成员来确定消息的类型。msg_sz 是msg_ptr指向的消息的长度,注意是消息的长度,而不是整个结构体的长度,也就是说msg_sz是不包括长整型消息类型成员变量的长度。3、消息队列与管道不同的是,消息队列是基于消息的,而管道是基于字节流的,且消息队列的读取不一定是先入先出。

2023-12-18 10:37:41 1375

原创 SecureCRT设置log保存路径和格式

SecureCRT设置log保存路径和格式。

2023-12-15 14:40:49 2022

原创 linux异步通知与异步I/O

F_SETOWN:一般是使用语句 fcntl(common_fd, F_SETOWN, getpid()),对于某些多进程共用的文件描述符,比如标准输入输出,我们要让操作系统知道这些信号要发往哪个进程。因为每一个进程都有标准输入输出,所以我们需要让操作系统知道当前的标准输入输出属于哪个进程,从而可以对进程发送信号。通过signal(SIGIO, input_handler) 对标准输入文件描述符STDIN_FILENO启动信号机制。

2023-12-14 17:50:02 117

原创 fcntl函数简介和使用

以设置文件描述符为 0 的文件为例,将文件描述符设置为非阻塞状态,需要用到上述表格的第三个功能,获得/设置文件状态标记。非阻塞模式下,read函数如果发现数据尚未就绪,系统是以出错的形式返回的,很显然数据未就绪不算错误,那么要如何区分真正的错误 和 数据未就绪时的出错呢?执行成功时,不同的cmd可能会对应不同的返回值,没有列举在下面的,比如F_SETFL,可能返回值类型为void。fcntl 函数的作用是操作一个文件的文件描述符,而设置成非阻塞IO只是 fcntl 函数的功能之一。

2023-12-14 15:48:03 722

原创 Linux统计网卡流量

用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。注意:因为proc是伪文件系统,只存在内存中,所以这里统计的数据的时间起止时间是:系统启动到命令执行,如果此时系统发生重启,数据将会清零。其实,我们平时经常用的很多查看网卡实时流量的命令,都是通过读取该目录下的实时流量,并通过简单计算得到的。errs: 由设备驱动程序检测到的发送或接收错误的总数。

2023-12-14 10:33:44 355

原创 /proc/sys/net/ipv4/ 下网络参数的理解

假如您将此值设为大于1024,最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE,以保持TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale 128Mb 32768-610000)则系统将忽略所有发送给自己的ICMP ECHO请求或那些广播地址的请求。默认值为 60 秒。如果您的系统是负载很大的web服务器,那么也许需要降低该值,这类 sockets 可能会耗费大量的资源。

2023-12-07 09:21:26 1307

原创 signal函数简介及使用

signal.h是C标准函数库中的信号处理部分,定义了程序执行时如何处理不同的信号。信号用作进程间通信,报告异常行为(如除零)、用户的一些按键组合(如同时按下Ctrl与C键,产生信号SIGINT)。C++中的对应头文件是csignal。Visual C++的C标准库只支持C语言标准规定的6个信号,即对信号处理只提供最小的支持。(4). SIGINT:交互的用户按键请求,如同时按下Ctrl+C键。(1). SIGABRT:程序异常中止,如调用abort函数。(3). SIGILL:非法函数映像,如非法指令。

2023-11-28 17:15:16 288

原创 Linux信号量sem_init,sem_wait,sem_post

线程的信号量与进程间通信中使用的信号量的概念是一样,它是一种特殊的变量,它可以被增加或减少,但对其的关键访问被保证是原子操作。pshared控制信号量的类型,如果其值为0,就表示这个信号量是当前进程的局部信号量,否则信号量就可以在多个进程之间共享,value为sem的初始值。该函数用于以原子操作的方式将信号量的值减1。信号量的函数都以sem_开头,线程中使用的基本信号量函数有4个,它们都声明在头文件semaphore.h中。该函数初始化由sem指向的信号对象,设置它的共享选项,并给它一个初始的整数值。

2023-11-28 11:32:17 2466

原创 Linux文件操作open、write、read、close、lseek、sync

O_EXCL 如果同时使用O_CREAT而且该文件又已经存在时,则返回错误, 用途:以防止多个进程同时创建同一个文件;O_CREAT 如果文件不存在,则创建该文件,并使用第3个参数设置权限,如果文件存在 ,则只打开文件;例: open(“/dev/hello”, O_RDONLY|O_CREAT|O_EXCL, 0777)成功:返回新的文件描述符(返回的文件描述符是该进程未打开的最小的文件描述符);S_IRUSR | S_IWUSR 文件的所有者对该文件可读可写。

2023-09-21 08:55:07 243

原创 time、gmtime和localtime,时间、格林威治和本地时间

localtime是将时区考虑在内了,转出的当前时区的时间。但是注意,有些嵌入式设备上被裁减过的系统,时区没有被设置好,导致二者转出来的时间都是0时区的。3、同类型的函数还有localtime():得到本地时间,该函数同gmtime函数唯一区别是,在转换小时数不需要加上8了。通过此函数gmtime()是0时区,把UTC时间转换成北京时间的话,需要在年数上加1900,月份上加1,小时数加上8。1、首先从time()函数,返回一个从1970年1月1日 00:00:00到现在的秒数。

2023-09-08 14:32:12 1095

空空如也

空空如也

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

TA关注的人

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