- 博客(35)
- 资源 (8)
- 问答 (1)
- 收藏
- 关注
原创 leetCode滑动窗口相关题目
若输入t = 3,nums = [1,5,9,1,5,8],我们按照上面的思路,进行划分,因为0 < nums[0] = 1 < t,于是我们放入第一个桶,t + 1 = 4 < nums[1] = 5 < 2t = 6,于是放入第二个桶,其它同理,最后我们得到分布了数据的三个桶。比如某次遍历符合题意的子数组为 ABCX,那么在该条件下符合条件的有X,CX,BCX,ABCX共四个(可以进行多个例子,发现个数符合right-left+1)有一个问题,如果元素分布在两个桶中,那么它们的绝对值之差一定大于t吗?
2024-03-05 22:18:16
1135
原创 [面经整理]——操作系统(不定期更新)
操作系统死锁概念,解决方法必要条件:解决方法;父进程与子进程之间的通信进程间通信方式线程同步的方式怎么使用线程比进程具有哪些优势什么时候使用多进程?什么时候使用多线程?虚拟内存及其优缺点CPU执行程序过程内核的基本能力进程状态进程状态变迁创建进程过程终止进程过程阻塞进程过程唤醒进程过程发生进程上下文切换有哪些场景线程的优缺点线程的优点线程的缺点线程与进程的比较线程的实现用户线程的优缺点优点:缺点:内核线程的优缺点优点:缺点:调度算法分类:调度原则:先来先服务算法(FCFS)最短作业优先算法(SJF)高相应比
2022-02-03 23:30:55
2872
原创 [源码阅读]——Sylar服务器框架:Address模块
Address模块address模块概述address模块实现其他address模块概述 这一部分主要是为后面的网络模块进行服务了,其主要作用就针对IPv4、IPv6、Unix的网络地址进行一系列封装和方法的实现,通过统一的对外接口实现网络地址的相关查询等,方便了后续socket等模块的实现。 本人感觉从这一模块开始,sylar的代码阅读难度就没有之前那么难了,更多的是功能的实现、接口的封装等,相比于IO协程调度、定时器等这些理解有难度的模块,可以说是简单了一些。address模块实现 从基
2021-12-27 15:20:31
815
原创 [源码阅读]——Sylar服务器框架:Hook模块
Hook模块Hook模块概述Hook模块实现总结Hook模块概述 关于Hook模块,本人真的属于无能为力了,甚至自己很多地方都没读懂,建议大家看路强大佬的笔记Hook模块 我所理解的hook在sylar中的应用主要就是为了对系统调用API进行一次封装,可以由用户自己选择是直接调用底层的接口,还是调用我们自己重新实现的接口。比如sleep(1),在系统实现中,就是使其睡眠1秒钟,但是我们可以选择调用我们自己实现的sleep(1),其会设定1秒钟的定时器,然后swapout到其他任务,等定时器达到了,
2021-12-12 17:56:15
1831
2
原创 [源码阅读]——Sylar服务器框架:定时器模块
定时器模块定时器模块概述sylar定时器设计Timer类定时器管理类总结定时器模块概述 sylar是基于epoll实现了定时器的功能,由于epoll的精度是毫秒级,所以其定时器的精度也是毫秒级。关于定时器有基于时间轮的设计、时间堆的设计等,在sylar中,其采用了最小堆的设计。具体关于定时器的讲解大家可以参考本人之前做的阅读笔记:【阅读】《Linux高性能服务器编程》——第十一章。 定时器通常至少包含两个成员:超时时间和任务回调函数。如果用链表作为容器来串联所有的定时器,则每个定时器还要包含指向
2021-12-07 12:26:34
564
原创 [源码阅读]——Sylar服务器框架:IO协程调度模块
IO协程调度模块epoll相关内核事件表epoll_wait函数LT和ET模式EPOLLONESHOT事件IO协程调度模块概述IO协程调度器具体实现总结epoll相关内核事件表 epoll是Linux特有的I/O复用函数。其使用一组函数来完成任务,将用户关心的文件描述符上的事件放在内核里的一个时间表中,无需像select和poll每次调用都要重复传入文件描述符集或事件集。epoll需要使用一个额外的文件描述符,来比唯一标识内核中的事件表。#include <sys/epoll.h>
2021-12-06 15:40:50
1619
原创 [源码阅读]——Sylar服务器框架:协程模块
协程模块协程概念sylar协程模块其他协程概念 按照本人简单的理解,协程可以看成是一个轻量级的线程,或者是可以切换出去的函数。相比之下本人认为其和函数更像,只是在程序中,如果我们在函数fun()中执行函数test(),则是test()必须执行完毕后,才会返回fun()继续执行。而对于协程来说,其可以执行一半退出,让出cpu执行权。同样,当满足其执行要求时,其会从退出的地方继续执行,又获得了CPU的使用权。所以也可以将其理解成一个轻量级的线程。但和线程不同的是,协程是完全在用户态执行的,而且一个线程可以
2021-11-25 21:19:07
1005
3
原创 [源码阅读]——Sylar服务器框架:线程模块
线程模块线程模块概述Linux线程库基础功能信号量互斥锁条件变量线程同步机制包装类线程池详细线程池实现其他线程模块概述 线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。线程可分为内核线程和用户线程。一个进程可拥有M个内核线程N个用户线程,且M<=N。按照M:N的取值,线程的实现方式可分为:完全在用户空间实现、完全由内核调度和双层调度。 完全在用户空间实现的线程的优点:创建和调度线程都无需内核的干预,速度加偶爱,且不占用额外的内核资源,既是一个进程有多个线程,也不会对系统造成明
2021-11-24 11:40:01
830
原创 [面经整理]——计算机网络(不定期更新)
计算机网络UDP和TCP的区别TCP的概念UDP的概念TCP的粘包问题怎么解决粘包问题解决方法TCP第四次挥手为什么要等待2MSLTCP为什么是可靠连接具体措施TCP和UDP分别对应的协议TCP对应的协议UDP对应的协议:TCP的拥塞控制原理浏览器输入URL后的流程UDP和TCP的区别TCP是面向连接的(即通信前需要提前建立连接),UDP是面向无连接的(无需建立连接)。UDP程序结构比较简单。TCP是面向字节流的,UDP是基于数据报的。TCP可以保证数据正确性和顺序,可提供可靠的服务。但UDP无
2021-11-24 10:16:13
1822
原创 [源码阅读]——Sylar服务器框架:配置模块
配置模块配置模块概述配置模块相关类YAML配置文件类型转换的偏特化配置模块与日志模块的整合还需进一步理解问题配置模块概述 在sylar的配置模块设计中,采用约定优于配置的思想,其常规使用方法如下:sylar::ConfigVar<int>::ptr g_int_value_config = sylar::Config::Lookup("system.port", (int)8080, "system port");// 定义了system.port未int类型的8090,可通过
2021-11-23 15:04:20
1783
原创 [源码阅读]——Sylar服务器框架:日志模块
日志模块日志模块概述日志模块工作流程1、通过调用方法进行日志输出:2.宏定义输出日志其他未解决的地方日志模块概述 通过初始格式化或自定义格式化输出程序日志,可选择标准输出和输出到文件夹。其日志内容主要包括:class LogEvent{private: // 文件名 const char* m_file = nullptr; // 行号 int32_t m_line = 0; // 程序启动开始到现在的毫秒数 uint32_t m_elapse =
2021-11-19 16:22:07
2841
原创 【阅读】《Linux高性能服务器编程》——第十七章:系统监测工具
系统监测工具tcpdump17.2 lsof17.3 nc17.4 strace17.5 netstat17.6 vmstat17.7 ifstat17.8 mpstattcpdump tcpdump是经典的网路抓包工具其常见选项为:-n:使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称;-i:指定要坚挺的网卡接口。“-i any”标识抓取所有网卡接口上的数据包;-v:输出一个稍微详细的信息;-t:不打印时间戳;-e:显示以太网帧头部信息;-c:紧抓去指定数量的数据
2021-10-21 17:55:00
145
原创 【阅读】《Linux高性能服务器编程》——第十六章:服务器调制、调试和测试
服务器调制、调试和测试 /16.1 最大文件描述符16.2 调整内核参数16.2.1 /proc/sys/fs目录下的部分文件16.2.2 /proc/sys/net目录下的部分文件16.3 gdb调试16.3.1 gdb调试多进程程序16.3.2 gdb调试多线程程序16.4 压力测试16.1 最大文件描述符 Linux对应用程序能打开的最大文件描述符数量有两个层次的限制:用户级限制和系统级限制。用户级限制是指目标用户运行的所有进程总功能打开的文件描述符;系统及限制指所有用户能打开的文件描述符。
2021-10-21 17:50:20
225
原创 【阅读】《Linux高性能服务器编程》——第十五章:进程池和线程池
进程池和线程池15.1 进程池和线程池概述15.2 处理多客户15.3 半同步/半异步线程池实现15.4 使用进程池实现的简单的CGI服务器15.5 半同步/半反应堆线程池实现15.6 使用线程池实现的简单Web服务器15.6.1 http_conn类15.6.2 main函数 动态创建子进程或子线程的缺点:动态创建进程或线程比较耗费时间,将导致较慢的客户响应;动态从创建的子进程或子线程通常只能为一个客户服务,将导致系统上产生大量的细微进程或线程,且进程、线程间切换将消耗大量的CPU事件;动态创
2021-10-21 17:48:26
523
2
原创 【阅读】《Linux高性能服务器编程》——第十四章:多线程编程
多线程编程14.1 Linux线程概述14.1.1 线程模型14.1.2 Linux线程库14.2 创建线程和结束线程14.3 线程属性14.4 POSIX信号量14.5 互斥锁14.5.1 互斥锁基础API14.5.2 互斥锁属性14.5.3 死锁举例14.6 条件变量14.7 线程同步机制包装类14.8 多线程环境14.8.1 可重入函数14.8.2 线程和进程14.8.3 线程和信号14.1 Linux线程概述14.1.1 线程模型 线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实
2021-10-19 10:32:23
433
原创 【阅读】《Linux高性能服务器编程》——第十三章:多进程编程
多进程编程13.1 fork系统调用13.2exec系列系统调用13.3 处理僵尸进程13.4 管道13.5 信号量13.5.1 信号量原语13.5.2 semget系统调用13.5.3 semop系统调用13.5.4 semctl系统调用13.5.5 特殊键值IPC_PRIVATE13.6 共享内存13.6.1 shmget系统调用13.6.2 shmat和shmdt系统调用13.6.3 shmctl系统调用13.6.4 共享内存的POSIX方法13.6.5 共享内存实例13.7 消息队列13.7.1 m
2021-10-19 10:31:35
641
原创 【阅读】《Linux高性能服务器编程》——第十二章:高性能I/O框架库libevent
高性能I/O框架库libevent12.1 I/O框架库概述12.2 Libevent源码分析12.1 I/O框架库概述 基于Reactor模式的I/O框架库包含组件:句柄、事件多路分发器、具体事件处理器、Reactor。句柄:I/O框架库要处理的对象,即I/O事件、信号和定时器,统一称为事件源。一个事件源通常和一个句柄绑定在一起。当内核检测到就绪事件时,通过句柄来通知应用程序。时间多路分发器:事件的到来是随机的、异步的,因此程序需要循环地等待并处理事件,即事件循环。等待事件通常使用I/O复用
2021-10-18 08:55:37
171
原创 【阅读】《Linux高性能服务器编程》——第十一章:定时器
定时器11.1 socket选项SO_RCVTIMEO和SO_SNDTIMEO11.2 SIGALRM信号11.2.1 基于升序链表的定时器11.2.2 处理非活动连接11.3 I/O复用系统调用的超时参数11.4 高性能定时器11.4.1 时间轮11.4.2 时间堆11.1 socket选项SO_RCVTIMEO和SO_SNDTIMEO socket选项的SO_RCVTIMEO和SO_SNDTIMEO分别用来设置socket接收数据超时事件和发送数据的超时时间,仅对send、sendmsg、recv
2021-10-17 17:07:53
738
原创 【阅读】《Linux高性能服务器编程》——第十章:信号
信号10.1 Linux信号概述10.1.1 发送信号10.1.2 信号处理方式10.1.3 Linux信号10.1.4 中断系统调用10.2 信号函数10.2.1 signal系统调用10.2.2 sigaction系统调用10.3 信号集10.3.1 信号集函数10.3.2 进程信号掩码10.3.3 被挂起的信号10.4 统一事件源10.5 网络编程相关信号10.5.1 SIGHUP10.5.2 SIGPIPE10.5.3 SIGURGLinux产生进程的条件:对于前台进程,用户可以通过输入特殊的
2021-10-15 16:32:42
183
原创 【阅读】《Linux高性能服务器编程》——第九章-程序
I/O复用的高级应用9.5 I/O复用的高级应用一:非阻塞connect9.6 I/O复用的高级应用二:聊天室程序9.7 I/O复用的高级应用三:同时处理TCP和UDP服务9.5 I/O复用的高级应用一:非阻塞connect#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>
2021-10-15 10:44:00
191
原创 【阅读】《Linux高性能服务器编程》——第九章:I/O复用
I/O复用9.1 select系统调用9.1.1 select系统调用9.1.2 文件描述符就绪条件9.1.3 处理外带数据9.2 poll系统调用9.3 epoll系列系统调用9.3.1 内核事件表9.3.2 epoll_wait函数9.3.3 LT和ET模式9.3.4 EPOLLONESHOT事件9.4 三组I/O复用函数的比较9.5 I/O复用的高级应用一:非阻塞connect9.6 I/O复用的高级应用二:聊天室程序9.7 I/O复用的高级应用三:同时处理TCP和UDP服务9.8 超级服务xinet
2021-10-14 15:02:03
379
原创 【阅读】《Linux高性能服务器编程》——第八章:高性能服务器程序框架
高性能服务器程序框架8.1 服务器模型8.1.1 C/S模型8.1.2 P2P模型8.2 服务器编程框架8.3 I/O模型8.4 两种高效的事件处理模式8.4.1 Reactor模式(适合同步I/O模型)8.4.2 Proactor模式(适合异步I/O模型)8.4.3 模拟Proactor模式8.5 两种高效的并发模式8.5.1 半同步/半异步模式8.5.2 领导者/追随者模式8.6 有限状态机8.7 提高服务器性能的其他建议8.7.1 池8.7.2 数据复制8.7.3 上下文切换和锁I/O处理单元。
2021-10-14 08:46:01
625
1
原创 【阅读】《Linux高性能服务器编程》——第七章:Linux服务器程序规范
Linux服务器程序规范7.1 日志7.1.1 Linux系统日志7.1.2 syslog函数7.2 用户信息7.2.1 UID、EUID、GID和EGID7.2.2 切换用户7.3 进程间关系7.3.1 进程组7.3.2 会话7.3.3 用ps命令查看进程间关系7.4 系统资源限制7.5 改变工作目录和根目录7.6 服务器程序后台化Linux服务器程序一般以后台进程形式运行(守护进程-daemon),它没有控制终端,也不会意外收到用户输入。守护进程的父进程通常是init进程(PID为1);Linux
2021-10-14 08:39:22
150
原创 【阅读】《Linux高性能服务器编程》——第六章:高级I/O函数
高级I/O函数6.1 pipe函数dup函数和dup2函数6.3 readv函数和writev函数6.4 sendfile函数6.5 mmap函数和munmap函数6.6 splice函数6.7 tee函数6.8 fcntl函数6.1 pipe函数 pipe函数可用于创建一个管道,以实现进程间通信。其定义如下:#include <unistd.h>int pipe( int fd[2] );// 函数成功时返回0,并将一对打开的文件描述符值填入其参数指向的数组// 函数失败返回-
2021-10-12 16:18:18
321
原创 【阅读】《Linux高性能服务器编程》——第五章:Linux网络编程基础API
Linux网络编程基础API5.1 socket地址API5.1.2 通用socket地址5.1.3 专用socket地址5.1.4 IP地址转换函数5.2 创建socket5.3 命名socket5.4 监听socket5.5 接受连接5.6 发起连接5.7 关闭连接5.8 数据读写5.8.1 TCP数据读写5.8.2 UDP数据读写5.8.3 通用数据读写函数5.9 带外标记5.10 地址信息函数5.11 socket选项5.11.1 SO_REUSEADDR选项5.11.2 SO_RCVBUF和SO_
2021-10-12 14:09:08
174
原创 【阅读】《Linux高性能服务器编程》——第四章:TCP/IP通信案例
TCP/IP通信案例:访问Internet上的Web服务器4.1 实例总图4.2 部署代理服务器4.2.1 HTTP代理服务器的工作原理4.2.2 部署squid代理服务器4.3 使用tcpdump抓取传输数据包4.4 访问DNS服务器4.5 本地名称查询4.6 HTTP通信4.6.1 HTTP请求4.6.1 HTTP应答4.1 实例总图 在客户端运行wget客户端程序,在服务器运行squid代理服务器程序。客户端通过代理服务器的中专,获得Internet上主机www.baidu.com的首页文档。
2021-10-11 16:35:51
388
原创 【阅读】《Linux高性能服务器编程》——第三章:TCP协议详解:TCP协议详解
TCP协议详解3.1 TCP服务的特点3.2 TCP头部结构3.2.1 TCP固定头部结构3.2.2 TCP头部选项 TCP头部的最后一个选项字段是一个可变长的可选信息,其最多包含40字节。3.3 TCP连接的建立和关闭3.3.1 使用tcpdump观察TCP连接的建立和关闭3.3.2 半关闭状态3.3.3 连接超时3.4 TCP状态转移3.4.1 TCP状态转移总图3.4.2 TIME_WAIT状态3.5 复位报文段3.5.1 访问不存在的端口3.5.2 异常终止连接3.5.3 处理半打开连接3.6 T
2021-10-11 16:31:57
194
原创 【阅读】《Linux高性能服务器编程》——第二章:IP协议详解
第二章 IP协议详解IP服务的特点2.2 IPv4头部结构2.2.1 IPv4头部结构2.2.2 使用tcpdump观察IPv4头部结构2.3 IP分片2.4 路由2.4.1 IP模块工作流程2.4.2 路由机制2.4.3 路由表更新2.5 IP转发2.6 重定向2.6.1 ICMP重定向报文2.6.2 主机重定向实例2.7 IPv6头部结构2.7.1 IPv6固定头部结构2.7.2 IPv6拓展头部IP服务的特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。
2021-10-07 14:32:30
185
原创 【阅读】《Linux高性能服务器编程》——第一章:TCP/IP协议详解
1.1 TCP/IP 协议族体系结构及其主要协议1.1.1 数据链路层(对接物理传输媒介)ARP协议(地址解析协议)RARP协议(逆地址解析协议) 网络层使用IP地址寻址一台机器,数据链路层使用物理地址寻址一台机器。因此网络层将目标机器的IP地址转化成物理地址,从而使用数据链路层提供服务。1.1.2 网络层(数据包的选路与转发)IP协议(因特网协议):根据数据包的目的IP地址决定如何传递数据;ICMP协议(因特网控制报文协议):IP协议补充,用于检测网络连接,其报文格式如下:| -
2021-10-06 14:53:11
357
原创 Windows平台使用VSCode配置Yaml-cpp
Windows平台使用VSCode配置Yaml-cppVSCode下载、安装VSCode配置C++环境CMake下载Yaml-cpp下载VSCode中配置测试VSCode下载、安装可参考CSDN VSCode安装VSCode配置C++环境可参考CSDN VSCode配置C++环境CMake下载可参考CSDN CMake下载Yaml-cpp下载源码地址YAML-CPP下载后解压到自己目标文件夹下新建build文件夹进入到build文件夹打开CMake-gui点击“Configur
2021-09-10 16:11:56
4116
3
基于雨水感应板传感器的自动雨刷(硬件、软件、说明书、论文、视频、仿真电路).rar
2024-03-04
红外飞机小目标数据集_data2
2021-12-03
红外飞机小目标数据集_data1
2021-12-03
data_label.rar
2021-12-03
请问一下pip install这个警告是什么意思?
2021-04-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人