- 博客(61)
- 收藏
- 关注
原创 10.12海能达
1.网盘系统,客户端传文件,而服务端在远程部署,会出现哪些问题?2.文件分块传输的具体设计?3.线程池的设计与管理?--4.其他散列算法5.UDP在网盘中的应用6.UDP的应用7.介绍一下智能指针?8.内存泄漏的可能方式9.map和unordered_map区别10.线程间同步的方法11.static关键字及其作用域12.内存对齐的问题
2024-10-13 15:37:38 138
原创 10.11某小厂
两个或多个线程竞争同一资源所造成的一种僵持的状态。举例:有两个进程 P1 和 P2,以及两个资源 R1 和 R2。P1 先占用了 R1,P2 先占用了 R2,然后 P1 又请求 R2,P2 又请求 R1,这时就可能发生死锁。
2024-10-11 16:59:39 658
原创 10.9文件操作
1.逐行读取: getline();可以通过如上三种方式来写入文件。多个模式之间用" | "联合。4.二进制读取: read()3.按字符读取: get()2.按单词读取: >>
2024-10-11 15:45:33 421
原创 9.30学习记录(补)
在使用多线程时,由于线程是由上至下走的,所以主程序要等待线程全部执行完才能结束否则就会发生报错。通过thread.join()来实现但是如果在一个比较严谨的项目中,我们最好在使用join函数的时候先判断一下是不是可以使用join函数,可以通过joinable函数来判断 它返回的是一个bool值。join函数是阻塞的,当线程函数没有执行完时,整个程序是卡在join函数的位置。
2024-10-04 11:28:38 1112
原创 去哪儿面经
1.三次握手四次挥手?2.为什么不能是两次或者是四次?3.说说单例模式? 懒汉模式和饿汉模式的区别? 如何让懒汉模式如何确保线程安全?4.双重检查一般在哪里进行检查?5.C++智能指针?智能指针的使用场景,share_ptr的使用场景6.二叉树最大路径和7.在网盘项目中 建立一个tcp连接传输文件 和建立多个tcp连接传 会快还是慢8.TCP的连接流程?可以缩短为两次吗?9.http和https的区别?(https的优势)https怎么做到安全的?怎么保证证书是安全有效的?
2024-09-28 13:48:52 390
原创 9.25度小满一面
这里要明白一个概念,定义快慢指针,同时指向头结点,让它们俩同时移动,slow移动一个节点,fast移动两个节点,当fast指向空时,slow一定指向中间节点。是因为每次fast比slow快移动一个,fast的速度是slow的2倍,而当fast指向末尾时,slow刚好移动fast的一半距离,所以说slow指向了链表的中间节点。→ Ln-1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …将这个题拆分一下就不难了,首先是找到链表的中间节点,
2024-09-25 23:02:37 837
原创 9.22日常记录
给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。memccpy是一个用于内存复制的函数,它的原型通常在<cstring>,memccpy函数的作用是从源内存区域复制字节到目标内存区域,直到遇到特定的字符或者复制了指定数量的字节为止。如果在复制过程中找到了指定的字符,memccpy函数将返回一个指向目标内存区域中紧跟在复制的字符后的位置的指针。
2024-09-24 22:54:43 453
原创 9.18日常记录
其中第五个参数是Qt::ConnectionType类型,用于指定连接的类型,主要有以下几种: 1.Qt::AutoConnection:这是默认的连接类型。调用的顺序是不确定的,除非使用Qt::DirectConnection连接方式,此时槽函数会在发出信号的线程中立即执行。槽函数可以有任意的参数和返回类型,但必须与连接的信号的参数和返回类型相匹配。信号classA不关心有多少槽函数与之绑定,它只管触发信号,具体要触发哪些槽函数,是由Qt的信号和槽机制来实现的。信号和槽:是对象之间通信的一种机制。
2024-09-18 22:13:19 701
原创 9.15日常记录
这里的=并不是赋值运算符,是初始化,表明String类对象string隐式调用以“cherno”为唯一参数的构造函数,这种隐式调用特性可通过explicit(在对应构造函数前)关键字关闭这里的=才是赋值运算符,一是重载赋值运算符,接受字符串类型赋值给类。
2024-09-18 19:53:54 314
原创 9.16日常记录
理解了如何添加节点之后,下面的也就难度不大了,要注意的一点是,在moveToHead函数中,不能改变俩个函数的位置,因为如果改变之后,就会报错内存错误--在释放堆内存之后继续使用。向其中插入数据,如果不存在,就将其添加到哈希表<值,双链表指针>,并且放在头部,并判断此时的容量是否大于最大容量,若大于,淘汰尾部节点,并将节点对应的值从哈希表中移除。定义了一个双链表结构体,并定义了前驱节点和后继节点,双向链表按照被使用的顺序存储了这些键值对,靠近头部的键值对是最近使用的,而靠近尾部的键值对是最久未使用的。
2024-09-18 19:53:41 578
原创 9.17日常记录
首先让甲和乙带着手电筒过去,时间是2,然后让甲带着手电筒回到桥头,时间:2+1,之后让丙和丁带着手电筒一起过桥,时间:2+1+8,然后让乙带着手电筒过桥,时间是2+1+8+2,最后再让甲乙带着手电筒回来,时间是:2+1+8+2+2=15min。就让乙球从21-29层之间从低到高尝试,直到找到让乙球碎裂的一层,如果是50层的话就从第5,10,15,20这么丢球就行。类似于二分法来做:先丢第一个球,10层,20层,30层,看到那一层有碎裂,如果甲在30层碎了,
2024-09-18 19:53:18 345
原创 9.13信锐面经
在一个项目中,重复包含两个或以上头文件就会出现问题。可以使用static定义一个静态变量区别:一、存储位置和生命周期不加static的成员变量: 存储在类的每个对象实例中。每个对象都有自己独立的一份非静态成员变量的副本。生命周期与对象的生命周期相同。当对象被创建时,非静态成员变量被分配内存;当对象被销毁时,非静态成员变量的内存被释放。加static的成员变量: 存储在静态存储区。不依赖于任何特定的对象实例而存在。生命周期从程序开始运行时起,到程序结束时止。
2024-09-13 21:32:26 1510
原创 9.12日常记录
在使用的时候,首先需要把关注的 Socket 集合通过 select/poll 系统调用从用户态拷贝到内核态,然后由内核检测事件,当有网络事件产生时,内核需要遍历进程关注 Socket 集合,找到对应的 Socket,并设置其状态为可读/可写,然后把整个 Socket 集合从内核态拷贝到用户态,用户态还要继续遍历整个 Socket 集合找到可读/可写的 Socket,然后对其处理。重写:在派生类中,有和基类虚函数同名,同参数列表,同返回类型的函数,用于改变基类虚函数的行为。2.不返回有用的错误信息。
2024-09-12 21:56:15 1216
原创 9.9日记录
给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。双指针yyds,一个指针指向最后一个字符串的最后一个字符,另一个指针指向第一个,相减即可。public:i--;int j=i-1;=' '){j--;return i-j;
2024-09-10 11:43:59 826
原创 9.8笔试记录
t:制表符,用于在输出中进行水平制表,相当于一定数量的空格,通常是 8 个字符的位置。\:反斜杠本身,用于在字符串中表示一个反斜杠字符。1.sizeof是一个运算符,用于计算对象的大小,它的计算是在编译阶段完成的,而不是在程序运行的阶段,sizeof的结果与字节序无关。2.strlen是一个函数,用于计算字符串的长度(不包括终止符\0),它的计算是在程序运行阶段完成的。\r:回车符,将光标移动到当前行的开头,可用于覆盖当前行的部分内容。\b:退格符,将光标向左移动一个位置,可用于删除前一个字符。
2024-09-08 23:01:37 776
原创 9.5LeetCode
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:和删除有序数组的重复项1很相似,1是不允许有两个一样的元素,而2是不允许有三个一样的元素,这就需要额外定义一个len来管理长度问题了,如果出现两个以上相等的元素,便不会进入if语句中,不会更改nums数组。
2024-09-05 18:55:40 1156
原创 9.4日常记录
这里定义了一个字符数组。这个字符串 "Hello, World!" 的内容被直接存储在这个数组中,数组的大小由字符串的长度加上一个额外的位置用于存储字符串结束符'\0'自动确定。例如,这个数组的大小为 13(12 个字符加上一个结束符)。可以修改这个数组中的内容,因为它是在栈上分配的可修改的内存区域。: 这里定义了一个字符指针,它指向一个字符串常量。这个字符串通常存储在只读的内存区域(如常量数据段)。不能通过这个指针修改所指向的字符串内容,因为它指向的是常量。
2024-09-04 22:45:33 1189
原创 day45.动态规划
思路: 和最长公共子序列也是蛮像的,不过else的语句里只有dp[i][j-1],没有dp[i-1][j],因为s是子串,不能用子串来判断。注意 i和j可以等于是,s,size和t.size() 因为 让i可以等于s.size()是为了完整地检查s是否是t的子序列,确保考虑到了s的所有字符与t的不同部分进行匹配的情况。思路:定义一个dp数组,这道题目的核心就在于推出递归公式,dp[i]意义在于包括下标i(以nums[i]为结尾)的最大连续子序列和为dp[i]。是数组中的一个连续部分。
2024-08-30 20:40:44 634
原创 day44.动态规划
如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。思路:dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的最长公共子序列为dp[i][j]例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。
2024-08-29 23:23:06 674
原创 补录.day43动态规划
想要推导出递推公式,dp[i]=max(),由于是要求最大的长度,所以取最大值,最大值分别是(如果nums[i]大于nums[j]的话)dp[i],和dp[j]+1二者取一。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。
2024-08-29 18:51:23 492
原创 day.43 动态规划+MySQL
思路: 同II挺像的 只不过他最多限制了两笔交易 要想找出两笔交易的最大值的话就需要考虑4种状态了,如下所示。注意递推公式:dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。思路:和买卖股票的最佳时机II 挺像的,只需要加上手续费操作就可以了。给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。编写一个解决方案,找出至少有五个直接下属的经理。
2024-08-27 22:37:45 565
原创 day41.动态规划
查找这些员工的id,他们的薪水严格少于$30000 并且他们的上级经理已离职。当一个经理离开公司时,他们的信息需要从员工表中删除掉,但是表中的员工的manager_id 这一列还是设置的离职经理的id。思路:dp[i][1] 表示第i天不持有股票所得最多现金 dp[i][0] 表示第i天持有股票所得最多现金。写一个解决方案,要求获取在 2020 年 2 月份下单的数量不少于 100 的产品的名字和数目。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
2024-08-26 23:21:11 416
原创 day40.动态规划
思路:此题有些意思,就是上述表格中计算时间的题目 由于共有三台机器 ROUND(..., 3)函数: 这个函数用于将括号内的表达式结果进行四舍五入,保留到小数点后三位。根据代码随想录的思路,使用记忆化递归来做,用一个哈希表来存储树的节点和对应的值,因为树形dp存储的值是(当偷这个节点时可以获得的最大价值) 这样的话当在遇到这个节点之后就可以不用计算直接返回此值。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额。编写解决方案,找出与之前(昨天的)日期相比温度更高的所有日期的 id。
2024-08-25 23:42:53 826
原创 day39.动态规划+MySQL数据库复习
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。思路: 如果只有一家 那直接就偷;首先初始化数组,dp[i]的含义是。
2024-08-24 23:43:28 1139
原创 day38.动态规划+MySql数据库复习
完全平方数 是一个整数,其值等于另一个整数的平方;1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤。给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true。MySQL数据库是一种关系型数据库,由多张表相互连接的二维表组成的数据库,注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。给你一个整数 n ,返回 和为 n 的完全平方数的最少数量。多行注释: /* 注释内容 */
2024-08-23 23:43:05 752
原创 day37动态规划+三.Github链接本地仓库
给你一个二进制字符串数组 strs 和两个整数 m 和 n。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集。思路:这道题更像是另一种的0-1背包问题 其中m和n相当于背包容量,字符串本身的个数相当于物品的价值(value[i])。首先初始化dp数组,然后要统计每个字符串的0和1的数量,才能进行下面的操作,
2024-08-22 22:58:25 1393
原创 day36.动态规划+重载操作符
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。思路:这道题和分割等和子集很像的。
2024-08-22 00:39:09 660
原创 day35.动态规划--代码随想录0-1背包问题
思路:我们要直到dp[i][j]代表从下标(0,i)的物品里任意取,放到背包容量为j的背包里,最大价值为dp[i][j],而动态规划问题就是保存局部最优解,确定递推公式:如果当前背包容量小于当前物品的容量,就继承上一个 i-1的值,否则的话,就判断,是i-1的最优解大一些,还是加上当前的物品的价值再加上剩余的dp[i][j]最优解大一些**(难点),取二者较大的值,继续遍历,最后在dp数组的最后就是我们0-1背包问题的最优解。删除元素的话要注意,删除元素后,元素所对于的空间并没有被删除。
2024-08-20 23:40:53 921
原创 day33动态规划
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。2.确定递推公式,想要求出dp[i][j]只有两个方向可以推出来,1.dp[i-1][j],2.dp[i][j-1]. 所以dp[i][j]应该等于他们两个的和。思路:机器人从0,0出发,到m-1,n-1节点。
2024-08-19 21:51:18 1025
原创 day32+学习记录
思路:这道题由于前两个楼梯不需要花费体力,所以直接初始化dp数组如下,然后由题意可知,dp[i]:到达第i台阶所花费的最少体力为dp[i]。可以推导出,递推公式是由,dp[i]==dp[i-1]+cost[i-1]和dp[i-2]+cost[i-2]的最小值,这样就可以推导出登顶之后的最小花费了。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。思路:同理, 爬到第i层楼梯,有dp[i]种方法,由于第三层楼梯有dp[1]+dp[2]种方法,所以可以得出递推公式。需要 n 阶你才能到达楼顶。
2024-08-17 22:50:27 1565
原创 day.26贪心算法2
首先,将数组排序,定义一个自定义静态函数,让绝对值最大的数排在前面,然后for循环遍历,如果k大于0且nums的值小于0,将其乘-1,k--,遍历完成后,如果此时k不为0,代表数组中只剩下正数了,就去数组中最小的数,将他变为负数,最后将数组的所有元素相加。思路: 最大利润2虽然是中等题,但并不难,就是局部最优推出整体最优,当后一天的价格大于前一天时,就将其卖出记录利润,此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑。判断你是否能够到达最后一个下标,如果可以,返回 true;
2024-08-16 22:45:10 619
原创 GET新知识-如何通过Ubuntu和Windows进行文件交互
点击添加可选功能,找到openSSH并下载。安装完成之后,要记得去服务里面看一下有没有启动,没有启动的话要手动启动一下.但是windows@192.168.120.1's password: 这个passwd无论怎么试,都无法失败。2.在Windows上也安装open SSH,具体位置在这里:在windows搜索框中输入可选,点击可选功能。知识记录篇改求助篇了呜呜呜~~~ ,到最后一步passwd咋样都无法链接了。然后就会出现这个,输入Y确认,即可安装成功。有大佬知道这是怎么回事吗?
2024-08-15 19:31:29 188
原创 代码随想录--回溯章节补录
思路: 全排列二和全排列一的不同就是全排列二包含重复的元素,所以要加一个去重的操作,给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
2024-08-14 20:06:49 290
原创 贪心算法补录:
思路:将数组排序,因为贪心算法是根据局部最优推出整体最优吗,此题的局部最优就是优先将最大的饼干给胃口最大的孩子,就是用双指针均指向(排序好的)二维数组的尾部,然后比较判断,如果饼干满足,count++,指针向前移动,否则将指向孩子的指针向前移动,最后返回count即可。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。
2024-08-14 14:43:26 398
原创 day23回溯算法
思路: 总的来说吧,与昨天的77.组合挺像的,有不同的地方就是动态数组中的字可以被无限重复的被选取,因此只需要在startIndex上动一下手脚就好了,如下所示,传入时传的是当前的i值即可了,这样的话就可以满足重复被选取查找了,如果在for循环中i赋值的是0而不是startIndex的话,那么返回值就会多很多,将那些重复的值 [2, 2, 3] 和 [3, 2, 2] 这样的重复组合也算进去了。给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。
2024-08-11 22:41:08 1091
原创 补录:day023-回溯法
思路: 和上一道题很像,主要就是和组合二大体思路的去重,树层去重和树枝去重,通过一个used数组来记录是否使用过这个数字,当当前的值与前一个值相等时,并且前一个值为FALSE,代表是树层去重,无需遍历当前的树枝了,因为前面的树枝遍历已经包含了这个的树枝遍历,还需要注意的一点是,因为子集是找出所以的组合并记录,所以要在回溯函数开头将一维数组存到二维数组中。思路:组合题目二,这个题目与组合一的区别在于,本题目中的candidates的每个元素只能使用一次,而且本题中的candidate数组中会有重复的元素。
2024-08-10 20:38:44 1381 2
原创 Cpp中的this指针--复习记录
每个类都有一个this指针,我们的非静态成员函数可以通过这个this指针来操作对象的成员属性。this指针存储的就是类的实例的地址,this指针时时刻刻指向的都是这个实例对象本身。由下图可知:我在主函数中栈上创建了一个类的实例(由操作系统自动回收释放),然后再用s调用learn打印出当前this指针的地址,由终端可见,此时类对象地址与this指针的地址是相同的。static是从C/C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。链接属性由外部变成内部,即对其他文件不可见,只能在本文件使用。
2024-08-08 22:23:27 1204
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人