- 博客(40)
- 资源 (8)
- 收藏
- 关注
原创 力扣笔试题(十一)
思路:这个的难点是由于是单链表,无法实现头和尾两边遍历,所以去了一个巧,将链表的前半部分反转,后半部分不变,这样前半部分的第一个对应下半部分的第一个,所以后半段遍历完也意味着前半部分遍历完成。思路:先遍历奇数节点的指针,奇数节点的上一个指针是偶数指针,每次遍历将奇数指针摘出来,然后改变奇数指针的前一个指针的下一个值,偶数指针指向奇数指针的下一个值。,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。思路:首先是找到中间节点,并且需要一个指针跟踪中间节点的前一个节点。
2024-08-07 18:00:15
569
原创 力扣面试题(十)
思路:采用入栈的思想,如果不是']'这个字符进行入栈,是‘]’开始出栈,出栈到‘[’,左括号旁边就是复制的次数,根据复制的次数进行赋值。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。,表示其中方括号内部的。
2024-08-06 16:22:20
205
原创 力扣面试题(九)
两颗移动方向相同的小行星,永远不会发生碰撞。思路:根据题意,正值向右,负值向左,所以如果左边是负值就不会存在碰撞的情况,如果左边是正值,右边是负值就会存在碰撞的情况,这个时候就要考虑绝对值大小判断是入栈还是出栈。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。**cod*e" 中的 't' ,s 变为 "lee*cod*e"。*cod*e" 中的 'e' ,s 变为 "lecod*e"。*e" 中的 'd' ,s 变为 "lecoe"。
2024-08-02 18:38:56
356
原创 力扣面试题(八)
2、两个字符串中也许每个字符出现的次数不一样 ,但是总体上出现的次数应该是一模一样的,什么意思就是比如word1 a b c出现的次数是1,2,3;word2 a b c出现的次数是2,3,1,但是总体来说出现的次数是1,2,3这样才能相互转化,如果不一样就会有问题。在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。- (第 2 行, 第 2 列):[2,4,2,2]- (第 3 行, 第 2 列):[2,4,2,2]- (第 0 行,第 0 列):[3,1,2,2]
2024-08-02 16:20:05
1072
原创 力扣面试题(七)
由于 nums1[2] == nums1[3] ,二者的值只需要在 answer[0] 中出现一次,故 answer[0] = [3]。对于 nums1 ,nums1[1] = 2 出现在 nums2 中下标 0 处,然而 nums1[0] = 1 和 nums1[2] = 3 没有出现在 nums2 中。对于 nums2 ,nums2[0] = 2 出现在 nums1 中下标 1 处,然而 nums2[1] = 4 和 nums2[2] = 6 没有出现在 nums2 中。根据题解是a[0] = 0;
2024-08-01 17:00:00
1049
原创 力扣面试题(六)
删掉位置 4 的数字后,[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1]。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。"lee"、"eet" 和 "ode" 都包含 2 个元音字母。删掉位置 2 的数后,[1,1,1] 包含 3 个 1。粗体数字从 0 翻转到 1,最长的子数组长度为 10。粗体数字从 0 翻转到 1,最长的子数组长度为 6。任意长度为 2 的子字符串都包含 2 个元音字母。的单个子字符串中可能包含的最大元音字母数。
2024-07-31 12:10:54
447
原创 力扣面试(五)
先将数据进行从小到大排序,然后从队列两侧进行查找,这样性能会更高。- 移出 1 和 4 ,之后 nums = [2,3]不再有和为 5 的数对,因此最多执行 2 次操作。- 移出 2 和 3 ,之后 nums = []每一步操作中,你需要从数组中选出和为。返回你可以对数组执行的最大操作数。的两个整数,并将它们移出数组。
2024-07-30 15:31:12
297
原创 力扣面试题(四)
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。轴共同构成的容器可以容纳最多的水。找出其中的两条线,使得它们与。返回容器可以储存的最大水量。,编写一个函数将所有。
2024-07-30 14:27:41
323
原创 力扣面试题(三)
返回 6 ,输入数组的前 6 个字符应该是:["a","2","b","2","c","3"]由于字符 "a" 不重复,所以不会被压缩。"bbbbbbbbbbbb" 被 “b12” 替代。"aa" 被 "a2" 替代。"bb" 被 "b2" 替代。"ccc" 被 "c3" 替代。返回 4 ,输入数组的前 4 个字符应该是:["a","b","1","2"]。返回 1 ,输入数组的前 1 个字符应该是:["a"]唯一的组是“a”,它保持未压缩,因为它是一个字符。,需要转储到字符数组。,返回该数组的新长度。
2024-07-26 16:05:13
293
原创 力扣面试题(二)
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。,判断这个数组中是否存在长度为。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。是由非空格字符组成的字符串。如果存在这样的三元组下标。
2024-07-25 17:22:08
185
原创 力扣面试题(一)
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。,仅反转字符串中的所有元音字母,并返回结果字符串。对每一个孩子,检查是否存在一种方案,将额外的。注意,允许有多个孩子同时拥有。,且可能以大小写两种形式出现不止一次。个糖果分配给孩子们之后,此孩子有。,能否在不打破种植规则的情况下种入。个孩子拥有的糖果数目。
2024-07-24 14:14:50
393
原创 dpdk读书笔记--阈值的设置
(1)tx_rs_thresh控制何时批量更新描述符的RS位,通知网卡发送数据包。(2)tx_free_thresh控制何时批量释放已完成发送的数据包描述符,以便它们可以被重新使用。(3)当接收队列中空闲的描述符数量降到rx_free_thresh以下时,DPDK会触发一个事件,促使应用程序向网卡提供更多的描述符,以保证接收队列不会因为空间不足而无法接收新到达的数据包。这有助于避免数据包丢失和接收延迟,从而维持高吞吐量和低延迟的网络性能。
2024-07-23 11:23:09
648
原创 深入浅出读书笔记----性能调优
如果将队列的信息设置的很长就会占用缓存资源,可能会导致性能的降低;但是也不是缓存的报文越长越好,因为缓存的报文越长,占用的资源越多,当要缓存的内容不足以保存下申请的报文时,就会将缓存的内容清掉,清掉的这些数据可能是当前需要的,造成性能的降低。还有一个原因就是减少内存读取的次数,包处理的过程如下图,如果处理一个包,由于内存加载都是cache加载,就会把其他包的数据加载上,由于中间流程需要占用比较大的空间,会把之前取到的缓存信息去掉,待处理下一个报文时,需要重新加载,这个时候可能需要从内存加载数据。
2024-07-23 11:18:25
333
原创 深入浅出dpdk读书笔记--dpdk uio
在通过UIO映射了设备的内存区域后,用户态程序可以配置DMA控制器,使其在CPU的监督下,直接读取内存中的数据传送到硬件设备,或者将硬件设备接收到的数据直接写入内存,从而实现了高效的数据传输。什么是uio,全称为Userspace I/O,是一种Linux内核技术,它允许用户态应用程序直接访问和控制硬件设备,特别是那些通常需要在内核态才能访问的硬件资源,如内存映射I/O(MMIO)、中断和DMA(Direct Memory Access)通道等。通过UIO驱动,硬件设备的资源在内核中被登记,并通过。
2024-02-27 17:53:27
1148
原创 深入浅出dpdk读书笔记----dpdk的轮询模式
讲dpdk轮询模式之前,首先需要知道传统内核转发的模式,通过对比能够让我们清晰的知道内核 异步中断模式和dpdk的轮询模式有哪些区别,dpdk这种方式有哪些优化。
2024-02-26 17:19:53
1497
原创 深入浅出dpdk读书笔记--Mbuf,Mempool
Mbuf头部的大小为两个Cache Line,之后的部分为缓存内容,其起始地址存储在Mbuf结构的buffer_addr指针中,获取网络数据帧中的内容,需要在buffer_addr的基础上加head_room的大小,从而得到网络数据帧的内容。(1)多核访问同一个内存池或者缓冲区时,尽管使用无锁环在一定程度上提升了性能,但是无锁环通过CAS进行比较时,也会消耗很大的性能,在此基础之上,给每个线程申请了一个缓冲池,这样做的好处时实现真正的无锁,没有竞争,缺点就是存在资源的浪费。
2024-02-23 14:48:02
1645
原创 深入浅出dpdk读书笔记--pcie与包处理(三)---收发包流程
pcie是报文转发的基础,DMA是网卡和CPU交互的具体方式,这两个知识点就像公路和汽车,外在的硬件已经有了,该启动汽车上路了,所以就有了接下来所讲的内容,dpdk数据的收发包流程。
2024-02-23 08:58:03
1437
原创 深入浅出dpdk读书笔记--pcie与包处理(二)----dma
DMA(Direct Memory Access,直接存储器访问)是一种高速的数据传输方式,允许在外部设备和存储器之间直接读写数据。数据既不通过CPU,也不需要CPU干预。整个数据传输操作在DMA控制器的控制下进行。但是这种方式存在多次访存的情况,而且还存在内存一致性问题,基于此intel提出DDIO技术,是对传统DMA技术的一个优化。DDIO允许I/O设备(如支持该技术的网卡)将数据直接写入或读取CPU的最后级缓存(LLC),而非内存。
2024-02-22 11:58:31
1926
原创 深入浅出dpdk读书笔记--pcie与包处理(一)---pcie
pcie是一种数组传输协议,它遵循开放系统互联网模型,自上而下分为事务层、链路层、物理层。把流向pcie组件方向的流量称为上游流量;把pcie流向网卡NIC的流量称为下游流量,如图所示:网卡和pcie插槽交互是通过pcie协议,由于它遵循开放系统互联网模型,所以网卡接收方向,是插入头的一个过程,依次增加物理层、数据链层、事务传输层。网卡发送方向是剥头的一个过程:依次剥离实物传输层、链路层、物理层。这些处理都是在硬件层次处理的。
2024-02-22 10:38:20
793
原创 深入浅出dpdk笔记---并行计算
多核并行计算的吞吐率随核数增加而线性扩展,可并行处理部分占整个任务比重越高,则增长的斜率越大。这个是dpdk优化性能一个理论基础,资源局部化、避免跨核共享、减少临界区碰撞、加快临界区完成速率等,都不同程度地降低了不可并行部分和并发干扰部分的占比。
2024-01-31 16:29:16
547
原创 深入浅出dpdk读书笔记-DDIO
解释一下:处理器收到报文信息时,此时会触发cache不命中,这个时候就会从内存中读取报文的相关信息送到cache中网卡读取信息之后进行处理,也就是寄存器处理流程,处理之后,更新cache消息,为了保证数据的一致性,会把cache中的数据更新到内存中,然后通过pcie将报文发送到网络中。1)处理器更新报文和控制结构体。b)如果该内存没有缓存在Cache中,则在最后一级Cache中分配一块区域,并相应更新Cache表,表明该内容是对应于内存中的某个地址的。1)报文和控制结构体通过PCI总线送到指定的内存中。
2024-01-30 17:58:52
605
1
原创 深入浅出dpdk笔记---------内存(二)
内存方面还有一种优化方案,是预取。但是预取存在较多的局限性,需要把握好度和时机,虽然大多时候软件开发不需要关心底层硬件或者cache的预取机制,但是懂得它的原理对我们进行性能优化有很大的帮助。
2024-01-24 20:26:26
511
1
原创 深入浅出dpdk笔记----内存
(1)TLB提供的是虚拟地址到物理地址的快速转换服务。当CPU要访问内存时,首先根据当前执行线程的虚拟地址查找TLB。如果TLB中存在该虚拟地址对应的页表条目(即物理地址),则可以直接获取到物理地址,并基于此物理地址进行后续的缓存访问操作(如加载数据到Cache)。所以,从这个角度讲,TLB可以看作是虚拟地址到物理地址映射的一个高速缓存。(2)而Cache Line映射则是针对已经获得的物理地址,如何在Cache内部高效定位和存储内容的过程。
2024-01-22 17:12:20
1046
原创 rte_eal_init之内存空间初始化
这段代码主要做了两件事:1、申请一块虚拟的内存空间挂到memzone,并将fd映射到这块虚拟内存2、申请mem_area保存在链表中(1)rte_eal_memseg_init主要功能是将内存划分成段,每个段存在多少个页,申请了一块虚拟内存,将/var/run/dpdk/pg1/fbarray_memzone对应的fd映射到这块内存(2)eal_memalloc_init为memseg_list设置fd信息。
2024-01-22 17:04:49
612
原创 Error 1924.Could not update environment variable patch问题解决
解决鑫尔泰安装报错的问题
2024-01-16 16:13:57
683
1
原创 问共享文件夹时提示“因为文件共享不安全 SMB1协议”请使用SMB2协议
问共享文件夹时提示“因为文件共享不安全 SMB1协议”请使用SMB2协议
2023-01-13 16:58:33
1928
转载 转载-KMP算法详解-彻底清楚了
原作者博客地址:https://www.cnblogs.com/dusf/p/kmp.htmlKMP算法指的是字符串模式匹配算法,问题是:在主串T中找到第一次出现完整子串P时的起始位置。该算法是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的,以其名字首字母命名。在网上看了不少对KMP算法的解析,大多写的不甚明了。直到我看到一篇博客的介绍,看完基本了解脉络,本文主要是在其基础上,在自己较难理解的地方进行补充修改而成。该博客地址为:https://www.cnblogs.c
2021-04-22 09:48:46
299
原创 排序方法整理
/*冒泡算法*/void bubble_sort_test(int a [ ],int n){ int i, j = 0; int tmp = 0; for(i = 0; i < n; i++) { for(j = 0; j < n -i; j++) { if(a[j-1] > a[j]) { tmp = a[j];...
2021-03-26 10:07:28
82
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人