- 博客(94)
- 资源 (2)
- 收藏
- 关注
原创 linux gdb 基本调试命令介绍
启动gdb调试方法: gdb 可执行文件名list:简写l ,查看源代码,默认一次10行run:简写r,开始运行程序,直到遇见断点break 行号:简写b,设置断点在某行continue:简写c,从当前断点继续向后执行quit:简写q,退出gdb调试next:简写n,按行调试,不进入函数体step:简写s,单步调试,碰到函数进入函数体until:跳出当前循环体代码,until + 行号,执行到当前行finish:跳出当前执行的函数体,并打印堆栈和返回值等信息到界面。
2022-09-15 03:32:42
1313
1
原创 华为OD机试:路灯照明问题(100分)
一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间的距离是100m。每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,未照明区间的长度和。第一行为一个数N,表示灯的个数,[1, 100000] 第二行为N个空格分隔的数,表示路灯的照明半径,[1,100*100000]输入:8 10 10 10 250 10 10 10 10 输出:160。第一个路灯和最后一个路灯之间,未照明区间的长度和。输入:4 50 70 20 70 输出:20。输入:2 50 50 输出:0。
2022-09-10 06:33:38
2310
原创 二分查找算法及其实例
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
2022-07-07 17:09:28
615
原创 leetcode 寻找数组的中心下标
- 给你一个整数数组 nums ,请计算数组的 中心下标 。- 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。- 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。- 如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 。...
2022-07-07 14:54:08
253
原创 leetcode 9 回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
2022-07-07 13:08:26
101
原创 leetcode 字符串转换整数 (atoi)
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)函数 myAtoi(string s) 的算法如下:
2022-07-06 20:18:20
122
原创 leetcode整型练习题 整数反转
给你一个 32 位的x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 ,就返回 0。
2022-07-06 17:42:00
221
原创 leetcode字符串练习题 Z 字形变换
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。LISHIRING" 行数为 3 时,排列如下:之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string s, int numRows);.........
2022-07-06 14:32:58
119
原创 leetcode数组练习题:两个正序数组的中位数
寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。解题思路及代码:第一种思路就是先合并数组,然后再找到中位数,这种方法的时间复杂度为O(m+n)第二种思路就是不合并数组,只去两数组中找到中位数所在的位置,找到后再取出即可,此时可以使用二分法来找到目标元素,时间复杂度为log(m+n)第一种方法时间复杂度不满足题目要求,不过也可解题其代码如下:第二种方法最终目标就是要找到中位数的位置,这其中
2022-07-03 20:00:38
158
原创 leetcode链表练习题 两数相加
给你两个的链表,表示两个的整数。它们每位数字都是按照 的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个的链表,你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输出:[8,9,9,
2022-07-02 16:13:05
331
原创 leetcode数组练习题:摆动排序 II
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。例如:输入:nums = [1,5,1,1,6,4]输出:[1,6,1,5,1,4]解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。输入:nums = [1,3,2,2,3,1]输出:[2,3,1,3,1,2]观察上述题解,可得出输出结果是小大交叉排列的,那么初步思想就是先对数组进行整体排
2022-07-01 20:15:24
250
原创 面试题:给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
面试题给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c ,使得 a + b + c = 0?找出所有满足条件且不重复的三元组。示例例如, 给定数组nums = [-1, 0, 1, 2, -1, -4]满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]题解#include<iostream>#include<vld.h>#include<vector>#include<alg
2021-03-18 23:48:22
3606
原创 面试题:有一个箱子容积为v,同时有n个物品,每个物品有一个体积。要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间最小。
面试题有一个箱子容积为v,同时有n个物品,每个物品有一个体积。要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间最小。输入箱子的容积 v物品个数 n每个物品占的空间 x1,x2输出最小剩余空间 s题解#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<vld.h>using namespace std;using namespace std;void sort(int
2021-03-18 17:13:48
2795
1
原创 tinyhttpd 超轻量型HTTP服务器源码详细解析
tinyhttpd 超轻量型HTTP服务器源码详细解析源码解析入口函数里定义了几个变量,分别是:服务器套接字、客户端套接字,端口号、用于处理TCP网络通信地址的结构体sockaddr_in、其长度client_name_len、线程标识符调用startup函数,其步骤是创建http套接字,绑定地址信息,建立监听连接,最后返回监听套接字循环等待浏览器的连接,当每次获取到新连接时,为该请求创建一个新套接字,并启动线程处理新连接接受到浏览器连接请求后,按行获取http请求报文,具体方法是先按单个字符
2021-03-09 13:45:23
245
原创 实现C++中的红黑树
实现C++中的红黑树RBTree.h#pragma once#include<iostream>using namespace std;enum Color { RED, BLACK };template<class T>struct RBTreeNode //红黑树节点{ RBTreeNode(const T& x = T(), Color c = RED) :left(nullptr) , right(nullptr) , parent(n
2021-03-01 19:12:31
185
原创 C++:图解AVL平衡二叉树的原理
1. AVL树的性质AVL树是一种平衡二叉树,一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:它的左右子树都是AVL树左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)2. AVL树的操作...
2021-02-27 16:29:30
227
原创 C++:底层数据结构之二叉搜索树
C++:底层数据结构之二叉搜索树1. 二叉搜索树概念二叉搜索树又称二叉排序树。它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树2. 二叉搜索树的特性特性:任意节点都比其左子树中所有节点大,比其右子树中所有节点小最左侧节点一定是最小的,最右侧节点一定是最大的中序遍历:可以得到一个有序序列3. 二叉搜索树的操作二叉搜索树的查找
2021-02-27 13:42:11
182
原创 STL中的关联式容器比较及其常用接口测试:map、multimap、set、multiset
STL中的关联式容器比较及其常用接口测试:map、multimap、set、multiset1. 关联式容器的异同点比较2. map常用接口测试2. multimap常用接口测试3. set接口测试4. multiset接口测试1. 关联式容器的异同点比较共同点:底层结构相同—红黑树使用迭代器进行遍历:都是关于key有序的序列(遍历规则:中序插入/查找/删除----O(logN))value值可以重复不同点:map:元素类型为K-V键值对,而且要求key一定要唯一mult
2021-02-25 20:19:06
182
原创 C++中的排序算法
C++中的排序算法(必考)1. 排序的概念2.排序的稳定性3. 内部排序和外部排序4. 排序的分类5. 详述各个排序算法5.1 插入排序5.2 希尔排序5.3 直接选择排序5.4 堆排序5.5 冒泡排序5.6 快速排序5.7 归并排序1. 排序的概念排序是将一批无序的记录(数据)重新排列成按关键字有序的记录序列的过程。2.排序的稳定性稳定排序:对于关键字相等的记录,排序前后相对位置不变。不稳定排序:对于关键字相等的记录,排序前后相对位置可能发生变化。3. 内部排序和外部排序内部
2021-02-23 23:35:25
667
原创 C++:多态详解
C++:多态详解1. 多态的概念2. 多态的分类2.1 静态多态2.2动态多态3. 动态多态的实现条件4. 虚函数的重写5. 多态的实现原理5.1 对象模型5.2 基类和子类虚表的构建过程5.3 虚函数调用原理6. 抽象类7. 多态相关的面试题1. 多态的概念多态是在不同继承关系的类对象,去调同一函数,产生了不同的行为。通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。举例子来说:比如现在你有两只不同的猫,然后你给猫买了很多小鱼干,一只猫完成吃鱼干这个动
2021-02-22 17:45:37
1062
原创 C++:继承详解
C++:继承详解1. 继承的概念2. 继承的格式及其方法3. 基类和派生类的赋值转换4. 继承中的作用域5. 继承类的默认成员函数6. 继承与友元7. 继承与静态成员8. 复杂菱形继承和菱形虚拟继承9. 总结1. 继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的
2021-02-21 18:24:36
638
3
原创 C++:模拟实现一个优先级队列
C++:模拟实现一个优先级队列1. 优先级队列介绍优先级队列的底层结构使用的是堆堆:将数据保存在一个数组中形成完全二叉树,如果该完全二叉树中任意节点的值都比其孩子节点大(小),则成为大(小)堆。大(小)堆:堆顶元素是左右元素中最大(小)的优先级队列(堆)的应用:堆排序、TOP-K问题2. 优先级队列的使用优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置
2021-02-20 20:56:44
395
1
原创 C++:模拟实现链式队列结构
C++:模拟实现链式队列结构1. 队列队列是一种先进先出的数据结构,数据进入的一段称为队首,数据送出的一段称为队尾队列也分顺序队列和链式队列。链式队列是基于单链表实现的,数据在链表的末端添加,在链表的头部移除。顺序队列则是通过数组来实现的。2. 队列的接口入队操作:Push(const T& data)出队操作:Pop()队列判空:Empty()队首元素:FrontQueue()3. 队列实现#define _CRT_SECURE_NO_WARNINGS 1#i
2021-02-20 18:02:46
174
原创 C++:模拟实现顺序栈结构
C++:模拟实现顺序栈结构1. 栈的介绍在数据结构中,栈是很特殊的一种结构,它是先进后出的存储结构,进行数据的插入和删除的一段为栈顶,另外一端为栈底。栈也分为顺序栈和链式栈两种,两中栈采用的线性表不同,实现的机制也有所差异。链式栈可以在链表的一段自由添加元素,顺序栈不可以。2. 栈的接口判栈空: empty()元素进栈: Push(x)元素出栈: Pop()取栈顶元素:Top()3. 实现代码#define _CRT_SECURE_NO_WARNINGS 1#inclu
2021-02-20 14:38:59
130
原创 linux编程:多路转接IO之epoll模型
linux编程:多路转接IO之epoll模型epoll模型:linux下最好用的多路转接模型epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Leve
2021-02-18 14:07:03
194
原创 linux编程:多路转接IO之poll模型
linux编程:多路转接IO之poll模型poll模型针对每个描述符构建一个事件结构,描述要监控的是哪个描述符,监控的是什么IO状态,然后在内核中进行遍历判断接口和参数int poll(struct pollfd *fds, nfds_t nfds, int timeout);fds:描述符的事件结构数组首地址,struct pollfd( int fd–监控的描述符;short events–要监控的事件;short revents–实际就绪事件;}nfds: fds参数中监控的有效事
2021-02-17 17:21:47
155
原创 linux编程:多路转接复用IO之select模型
linux编程:多路转接复用IO之select模型多路转接IO概念描述的是转接IO,就是对大量的描述符的IO状态进行监控,能够让程序知道哪个描述符IO是就绪的,可以进行IO操作,直接让程序针对就绪描述符进行IO操作,提高效率(更多用于网络通信服务器)。IO就绪状态可读状态:套接字接收缓冲区中,数据大小大于低水位标记(默认-1字节)可写状态:套接字发送缓冲区中,剩余空间大小大于低水位标记(默认-1字节)异常状态select模型实现思路就是在内核中轮询遍历所有监控的描述符,判断IO
2021-02-16 18:37:47
287
原创 网络中的IP地址管理策略及其划分
网络中的IP地址管理策略及其划分1. 为什么进行地址管理现在通用的IPv4版本的网络协议的IP地址只有无符号4个字节:其IP地址总量不超过43亿,但是依然不够用。2. 解决方案DHCP 动态地址分配:只给上网的主机分配地址NAT 地址转换技术:组建私网,私网中的大量主机使用同一个IP地址进行上网3. IP地址的分网络管理lP地址组成分为两部分:网络号+主机号网络号:互联网通过大量的网络组成,网络号用于标识一个网络,网络号俗称网段(每个IP地址都会包含有自己所在网络的网络号) —
2021-02-13 17:39:02
2256
原创 IP协议解析及MTU最大传输单元的应用
IP协议解析及MTU最大传输单元的应用1. IP协议解析IP协议是属于网络层协议,IP协议只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。2. 具体字段的意义及其功能4位协议版本:当前版本默认为4,表示lPv44位头部长度:以4字节为单位,IP报头固定最小20字节,最大60字节8位服务类型:3位弃用,1位固定0,4位tos字段:最高可靠性,最小成本,最大吞吐量,最小延时16位报文长度:IP报文必须小于64k(tcp报文中数据必须小于64k-40,udp中数据最大小于64k-
2021-02-13 15:00:09
1009
原创 详述TCP协议中的格式及其传输机制
详述TCP协议中的格式及其传输机制一、TCP协议解析:1. 整体协议格式16位源端端口,16位对端端口,32位序列号,32位确认序列号,4位头部长度,6位保留位,6位标志位,16位窗口大小,16位校验和,16位紧急指针,0~40字节的选项数据和数据。2. 各个位置上的功能描述:16位源端口、16位对端端口:描述通信两端进程;32位序列号、32位确认序列号:完成包序管理,以及确认应答的功能;(序列号决定了当前数据在原始数据中的位置,确认序列号是告诉发送方确认序号之前的数据都已经收到了);4
2021-02-09 16:39:58
1220
原创 图解TCP:三次握手和四次挥手及面试问题整理
图解:服务端和客户端之间的三次握手和四次挥手1. 通信流程图2. 三次握手第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入[^1]SYN_SEND状态,等待服务器确认。SYN:同步序列编号(Synchronize Sequence Numbers)...
2021-02-08 19:03:17
803
原创 HTTP编程:极简版HTTP服务器搭建
HTTP编程:极简版HTTP服务器搭建极简版http服务器的搭建:http协议是一种应用层的数据格式约定,在传输层使用tcp协议实现两端传输http服务器本质就是一个tcp服务器,只是在应用层的业务处理中根据http协议格式解析请求和响应然后做出对应业务请求处理http_server.c#include<stdio.h>#include<unistd.h>#include<string.h>#include<netinet/in.h>/
2021-02-07 17:42:44
678
原创 套接字编程:基于TCP协议的通信编程(优化)
套接字编程:基于TCP协议的通信编程(优化)问题解决解决了上篇代码中每个客户机只能和服务器通信一次的问题解决措施通过fork()创建子进程来解决这个问题,每当服务器与一个客户端新建一个连接后,这时就为其创建一个子进程。然后让子进程再来处理用新套接字newfd进行数据收发的工作,然后在处理完这个客户端与服务器的通信任务后,再自动退出。而父进程则只负责用最开始生成的套接字sockfd来监听,并为新的连接生成套接字newfd。最后每当有一个子进程退出的时候用通过回调函数signal(SIGC
2021-02-06 14:17:02
141
原创 套接字编程:基于TCP协议的通信编程
套接字编程:基于TCP协议的通信编程TCP协议传输控制协议(TCP协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。服务端server的工作创建套接字:在内核中创建socket结构体套接字绑定地址:告诉操作系统发往哪个端口和地址的数据应该交给当前套接字进行处理,以及发送数据的时候指定源端地址信息。开始监听:开始受理客户端的连接请求获取新建连接:获取客户端连接请求后,产生一个新的套接字,用于与该客户端通信。收发数据:使用这个获取的新建连接,与指定的客户端进行数据通信发送数
2021-02-05 21:31:01
493
原创 套接字编程:基于UDP协议的通信编程
套接字编程:基于UDP协议的通信编程服务端server的任务创建套接字在内核中创建一个socket结构体,使进程与通信网卡之间建立联系。为套接字绑定地址在创建的socket结构体中描述端口,IP,协议信息 为了告诉操作系统,当前这个套接字使用了哪个端口,若是收到了发往这个端口的数据则交给这个套接字进行处理 ,注意只能绑定本机上已有的IP地址。接收数据通过创建套接字的句柄,找到内核中socket结构体,然后从结构体的接收缓冲区中,取出一条数据 ,因为udp无连接,因此接收数据的同时,也会接收
2021-02-05 16:37:50
440
2
原创 /lib/../lib64/crt1.o:在函数‘_start’中(.text+0x20)对‘main’未定义的引用 collect2: error: ld returned 1exit status
/lib/…/lib64/crt1.o:在函数‘_start’中(.text+0x20)对‘main’未定义的引用 collect2: error: ld returned 1exit status今天在linux虚拟机写代码时,make的时候报错了,我先附上我在网上找的不同类型的解决方案:https://blog.csdn.net/u013245162/article/details/88923808https://blog.csdn.net/k916631305/article/details
2021-02-05 15:26:17
2989
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人