自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用muduo编写webserver

在muduo的基础上想写个webserver很简单,只需要在他http的基础上进行改进就可以。最好代码仓库:https://github.com/bugcat9/tinyMuduo。

2023-02-13 15:41:28 754

原创 电脑上玩GBA游戏(GBA模拟器)

最近重温了神奇宝贝系列的动画,想到小时候在GBA上玩的口袋妖怪系列游戏,想在电脑上重新玩一下,所以记录一下几个开源的GBA游戏模拟器。

2022-09-14 10:54:19 13154 2

原创 Linux定时器

学习《Linux高性能服务器编程》第十一章定时器,里面介绍了各种网络程序中的定时事件,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中SIGALRM信号触发的定时器。more。...

2022-08-30 11:26:35 421

原创 Linux信号

Linux 下,一个进程给其他进程发送信号的API是kill函数。这个函数把信号sig发送给目标进程;目标进程pidLinux当中信号都大于0,如果sig取值为0,则kill函数不发送任何信号。这种方法可以用来检测目标进程或进程组是否存在,但是这种方法是不可靠的(这种方法不是原子操作)。该函数成功时返回0,失败则返回-1并设置errno。几种可能的errno如表所示。......

2022-08-27 12:48:03 444

原创 改变工作目录和根目录

工作目录:进程在哪个路径下被运行起来哪个路径就是进程的工作目录(Current Woring Directory, CWD)之后,进程原先打开的文件描述符依然生效,所以我们可以利用这些早先打开的文件描述符来访问调用。动态分配内存,并将进程的当前工作目录存储在其中。的文件(和目录),因为这些文件(和目录〉并非处于新的根目录之下。之后不能直接访问的文件(和目录),尤其是一些日志文件。参数指向的内存用于存储进程当前工作目录的绝对路径名,其大小由。在内部动态创建的缓存区)的指针,失败则返回。进程的当前工作目录。

2022-08-21 21:22:10 1022

原创 进程间关系

Linux下每个进程都隶属于一个进程组,因此它们除了PID信息外,还有进程组ID(PGID)。我们可以用如下函数来获取指定进程PGID该函数成功时返回进程pid所属进程组的PGID,失败则返回-1并设置errno。每个进程组都有一个首领进程,其PGID和PID相同。进程组将一直存在,直到其中所有进程都退出,或者加入到其他进程组。下面的函数用于设置PGID该函数将PID为pid的进程的PGID设置为pgid。如果pid和pgid相同,则由pid指定的进程将被设置为进程组首领;如果pid。

2022-08-21 21:21:01 363

原创 UID、EUID、GID和EGID

程序允许任何用户都可以使用它来修改自己的账户信息,但修改账户时程序不得不访问文件。Linux中id真是太多了进程有pid,然后用户还有UID这种,真是有点绕。:它使得运行程序的用户拥有该程序的有效用户的权限(太过官方这种说法感觉)。文件,普通用户是不可写(只有读权限)的,那么用户怎么能够通过。将其编译一下,然后查看查看文件属性,再运行程序,可以看到。程序时,其有效用户就是该程序的。是一样的,但是对于一些程序如。,那么程序有效的用户就会变成。权限,再运行程序,可以看到。权限,再运行程序,可以看到。

2022-08-21 21:20:07 1341

原创 Linux系统日志rsyslogd

Linux上使用rsyslogd守护进程接收输出的日志和接收日志。用户进程是通过syslogd函数生成系统日志。该函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd则监听该文件以获取用户进程的输出。内核日志是如何进行管理的,在这里我们不进行关系。rsyslogd守护进程在接收到或的日志后,会把它们输出至某些特定的日志文件。默认情况下,调试信息会保存至文件,普通信息保存至文件,内核消息则保存至文件。不过,日志信息具体如何分发,可以在。

2022-08-21 21:18:17 2785

原创 fcntl函数

参数指定执行何种类型的操作。根据操作类型的不同,该函数可能还需要第三个可选参数。比如:终端文件默认是阻塞读的,这里用 fcntl 将其更改为非阻塞读。函数成功时的返回值如表中最后一列所示,失败则返回-1并设置。函数通常用来将一个文件描述符设置为非阻塞的。函数提供了对文件描述符的各种控制操作。函数支持的常用操作及其参数如下表所示。参数是被操作的文件描述符,

2022-08-19 15:44:16 412

原创 tee函数

函数在两个管道描述符之间复制数据,也是零拷贝操作。它不消耗数据,因此源文件描述符上的数据仍然可以用于后续操作。函数成功时返回在两个文件描述符之间复制的数据数量(字节数)。返回0表示没有复制任何数据。参数则控制数据如何移动,它可以被设置为下表中的某些值的按位或,它的参数其实和。程序(同时输出数据到终端和文件的程序,不要和。是文件描述符,但是必须是管道文件描述符。函数,实现了Linux 下。参数指定移动数据的长度。函数混淆)的基本功能。失败时返回-1并设置。

2022-08-19 15:43:01 233

原创 splice函数

它可能返回0,表示没有数据需要移动,这发生在从管道中读取数据(下面用了一个书中的例子,实现一个零拷贝的回射服务器,它将客户端发送的信息通过。参数则控制数据如何移动,它可以被设置为下表中的某些值的按位或。被设置为NULL,则表示从输入数据流的当前偏移位置读入;用于在两个文件描述符之间移动数据,是零拷贝操作。不是一个管道文件描述符(比如 socket),那么。是管道文件描述符)而该管道没有被写入任何数据时。不为NULL,则它将指出具体的偏移位置。参数是待输人数据的文件描述符。是一个管道文件描述符,那么。

2022-08-19 15:41:54 625

原创 sendfile函数

函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷贝。参数是指从读入文件流的哪个位置开始读,如果为空,则使用读入文件流默认的起始位置。函数的文件描述符,即它必须指向真实的文件,不能是socket和管道。成功时返回传输的字节数,失败则返回-1并设置。几乎是专门为在网络上传输文件而设计的。则必须是一个socket。参数是待写入内容的文件描述符。参数是待读取内容的文件描述符。该函数的man手册明确指出,参数指定在文件描述符。

2022-08-19 15:41:15 576

原创 readv函数和writev函数

是个非常有用的函数。比如:当Web服务器解析完一个HTTP请求之后,如果目标文档存在且客户具有读取该文档的权限,那么它就需要发送一个HTTP应答来传输该文档。这个HTTP应答包含1个状态行、多个头部字段、1个空行和文档的内容。其中,前3部分的内容可能被Web服务器放置在一块内存中,而文档的内容则通常被读入到另外一块单独的内存中(通过read函数或mmap函数)。函数则将多块分散的内存数据一并写人文件描述符中,即集中写。的字节数,失败则返回-1并设置errno。结构体封装了一块内存的起始位置和长度。

2022-08-19 15:40:25 1233

原创 dup和dup2函数

指向相同的文件、管道或者网络连接。并且dup返回的文件描述符总是取系统当前可用的最小整数值。,文件描述符fd2原来指向"text2.txt"文件的,调用。函数创建一个新的文件描述符,该新文件描述符和原有文件描述符。后,fd2改为指向"text.txt"。用于复制文件描述符,通常用于重定向。的整数值的文件描述符的功能,并且。类似,不过它将返回第一个不小于。,成功就返回新的文件描述符。的整数值的文件描述符,并且。指向的文件将会被关闭(除非。这个文件描述符也将会指向。直接返回复制的文件描述符。

2022-08-19 15:38:10 566

原创 socket选项

读取和设置socket文件描述的方法如下参数指定被操纵的目标socket,level参数指定要操作的协议选项,optname参数则指定选项的名字,optval和optlen参数分别是操作选项的值和长度。截图了一下书中的表格。moregetsockopt和setsockopt这两个函数成功时返回0,失败时返回-1并设置errno。需要注意的是,在服务器端setsockopt最好在listen。...

2022-08-14 20:36:26 109

原创 socket网络信息查询API

学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket网络信息查询API,包括gethostbyname和gethostbyaddr、getservbyname和getservbyport、getaddrinfo、getnameinfo。socket当中两要素:IP和端口号,都是用数值表示的。但是有时候我们可以使用主机名代替IP,使用服务名代替端口号。这个功能就是使用网络信息API实现的。more。...

2022-08-14 20:32:49 344

原创 socket地址信息函数

学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket地址信息函数。如果我们要查询一个连接socket的本端socket地址,以及远端的socket地址,可以使用下面两个函数。所指内存区的大小,那么该socket地址将被截断。对应的远端地址(远端连接的地址)。两个函数都把地址存储在。参数指定的内存中,将该地址的长度存放在。对应的本端地址(本地自己的地址),如果实际socket地址的长度大于。......

2022-08-14 20:28:12 168

原创 socket数据读写

学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket数据读写的部分,包括TCP数据读写、UDP数据读写和通用数据读写。...

2022-08-14 20:27:07 1435

原创 socket相关命令

学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket相关的命令,包括创建socket、命名socket、监听socket、接受连接、发起连接和关闭连接。...

2022-08-14 20:24:26 1799

原创 Linux中socket地址API

学习《Linux高性能服务器编程》第五章Linux网络编程基础API,为了印象深刻一些,多动手多实践,所以记下这个笔记。这一篇主要记录Linux中socket地址的基础,包括主机字节序和网络字节序、socket地址和IP地址转化函数。.........

2022-08-11 23:25:42 523

原创 tcpdump进行IP抓包

在学习《Linux高性能服务器编程》中,看到作者对IP头部使用tcpdump进行抓包,所以本着实践出真知、多看多练的道理,也进行抓包,顺带记录一下。more。

2022-08-06 22:57:50 5836

原创 tcpdump进行DNS抓包

第一个数据包中(DNS查询报文),从ip:10.0.4.5(本机)端口39454发向ip:183.60.83.19(DNS服务器)的53端口(DNS服务的端口),47814是DNS查询报文的标识值,因此该值也出现在DNS应答报文中。”表示使用A类型的查询方式。“CNAME www.a.shifen.com., A 112.80.248.76, A 112.80.248.75”则表示3个应答资源记录的内容。其中CNAME表示紧随其后的记录是机器的别名,A表示紧随其后的记录是ip地址。...

2022-08-06 22:56:14 3418

原创 tcpdump进行ARP抓包

在学习《Linux高性能服务器编程》中,看到作者对ARP使用tcpdump进行抓包,所以本着实践出真知、多看多练的道理,也进行抓包,顺带记录一下。ARP协议的功能是实现网络层地址到任意物理地址的转换,简单理解ARP能够实现从转化为的转化。...

2022-08-06 22:52:45 4326

原创 python使用opencv提取光流

记录一下光流特征提取的算法,方便自己之后进行使用

2022-07-27 10:55:57 5452 42

原创 python舞蹈链数独游戏

数独游戏是一款古老的智力游戏,据说最早可以追溯到中国古代的“河图洛书”,但是真实可查的是在18世纪数学家欧拉等人发明了“拉丁方阵”等成为数独的最早的样子,后来经过日本的改进逐渐成为现代的数独游戏[1]。数独游戏一共有9×99 \times 99×9个单元格子,在数独游戏当中,玩家需要根据已有的数字去推理出所有的剩余空格的数字,并且要保证 9×99 \times 99×9的单位格子中每一行、每一列以及每个3×33 \times 33×3的九宫格内的数字不重复。数独游戏在开始的适合叫做初盘(如图1(a)所展示)

2022-07-12 16:55:44 1552

原创 Background Suppression Network for Weakly-supervised Temporal Action Localization

Background Suppression Network for Weakly-supervised Temporal Action Localization提出问题:弱监督视频动作定位中,先前的方法聚合帧级别的类分数,以产生视频级别的预测并从视频级别的动作中学习。此方法无法完全模拟问题,因为背景帧被迫错误地分类为行动类别,无法准确预测视频级标签。做了什么:设计了背景抑制网络(BaSNet),该网络引入了背景的辅助类,并具有带有非对称度量训练策略的两分支权重共享体系结构。这使BaSNet可以抑制

2021-06-17 10:26:40 808 3

原创 编程更改镜像总结

编程更改镜像总结在学习编程的过程中,总是会遇到各种各样的网络问题(指包下载的网络问题),所以总结一下这些镜像源的更改,方便自己更快的下载这些包。因为本人电脑是windows系统的,所以注意总结windows系统下的镜像更改。python中pip更改镜像源pip安装包的时候默认都是从国外安装,网速堪忧,所以一般安装完python,都需要将自己使用的pip源进行更换。windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下: [gl

2021-05-23 10:15:40 817

原创 Next主题美化

Next主题美化最近使用hexo的next主题在github上搭建了一个博客,但是发现这个next主题并不完全是自己想要的,所以还需要美(zhe)化(ten)一下。主要折腾了三个方面:鼠标点击特效个性化回到顶部打字特效上传文件中带有READ.md鼠标点击特效添加鼠标点击礼花特效????,效果如下在themes\next\source\js\cursor\目录下 创建fireworks.js,具体fireworks.js的内容可以点击????fireworks.js进行查看(不展示因为

2021-05-22 22:08:11 871 2

原创 eclipse中android环境配置

eclipse中android环境配置java环境配置java下载去Oracle官网下载自己需要的java版本我这里选择的是windows的jdk8ps:下载需要登录自己Oracle账号,注册登录一下就行下载之后的exe文件双击开,安装到你需要安装的位置即可,我这里安装位置是D:\Program Files\Java\jdk1.8.0_271环境配置在系统变量里面加入了变量JAVA_HOME,值为安装的位置然后在Path里面加入了%JAVA_HOME%\bin和%JAVA_HOME

2021-01-22 19:59:45 2638

原创 Android studio 下载安装

Android studio 下载安装java环境配置java下载去Oracle官网下载自己需要的java版本我这里选择的是windows的jdk8ps:下载需要登录自己Oracle账号,注册登录一下就行下载之后的exe文件双击开,安装到你需要安装的位置即可,我这里安装位置是D:\Program Files\Java\jdk1.8.0_271环境配置在系统变量里面加入了变量JAVA_HOME,值为安装的位置然后在Path里面加入了%JAVA_HOME%\bin和%JAVA_HOME

2021-01-17 12:36:24 4312 9

原创 背包问题小结

背包问题小结介绍学算法的时候,背包问题是一个很常见的动态规划问题,像什么01背包、完全背包、多重背包等,当时学的时候就有一些懵懵懂懂的,现在复习的时候又不会了,所以进行总结一下,方便日后查看学习。问题基本上都是lintcode上面的题目,然后在github上还找到一个专门讲背包问题的仓库:https://github.com/tianyicui/pack背包问题在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i],题目地址:https://www.lintco

2020-07-11 22:57:15 257

原创 多数之和小结

多数之和小结在刷leetcode的时候发现了一类多数之和的问题,基本上都是采用排序+双指针解决,所有总结一下。两数之和题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]

2020-07-11 22:56:41 313

原创 括号问题

括号问题刷Leetcode时,遇到过许多括号问题,总结一下有效括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:输入: "([)]"输出: false示例

2020-07-11 22:55:36 266

原创 字符串匹配问题小结

字符串匹配问题小结刷Leetcode时,发现有两个字符串匹配问题很巧妙,所以记录一下正则表达式匹配问题描述给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = "a

2020-07-11 22:54:55 486

原创 排列组合题目小结

排列组合题目小结排列题目全排列给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]没有重复元素,比较简单,可以放心的进行交换class Solution { public List<List<Integer>> permute(int[] nums) { public List<Li

2020-06-23 19:18:51 201

原创 springboot当中整合Druid

springboot当中整合Druid简介jdbc是连接数据库的基础,springboot当中也可以直接使用jdbc进行相应的访问,并且在学习当中springboot整合jdbc过程中学习了一下Druid,所以记录一下。讲解1.jdbc配置使用jdbc我们需要在application.yml或者application.properties进行配置,我使用的是mysql,配置如下,其中springboot是对应的数据库spring: datasource: username: root

2020-05-15 18:16:37 428

原创 springboot注册Servlet三大组件

springboot注册Servlet三大组件简介Servlet三大组件Servlet、Filter、Listener我们听说的比较多,在springboot当中也可以添加这三大组件,使用起来也比较方便讲解编写三大组件添加三大组件之前我们需要先编写三大组件MyServlet:public class MyServlet extends HttpServlet { /** * 处理get请求 * @param req * @param resp

2020-05-15 18:15:51 718

原创 springboot拦截器小例子

springboot拦截器小例子简介拦截器顾名思义就是拦截一些请求达到我们想要的目的,在这里我写了一个简单的拦截器小例子记录一下。讲解假设我们有这样一个需求,需要系统在登录之后才能使用其他功能,如果没有登录就访问其他请求就强制返回登录页面。对于这个请求我们可以通过拦截器进行实现,拦截系统访问,判断是否已经登录,如果没有登录,则返回到登录界面。1.登录功能编写既然有登录那我们需要先编写登录登录界面login.html<!DOCTYPE html><html lang="en

2020-05-14 20:10:42 1523 1

原创 springboot错误数据、错误页面定制

springboot错误数据、错误页面定制介绍在springboot中如果发生访问错误,如404的话,如果是浏览器访问它会给你一个默认的定制页面比如下面这样如果是其他的,会返回json数据(来自idea插件RestfulToolkit):那我们可以定制自己的错误页面吗,答案是肯定的,下面就讲解如何定制自己的错误页面已经信息方法一、定制错误页面使用了模板引擎情况使用了模板引擎thymeleaf的情况下,我们只需要在resources的templates下创建error文件夹,在里面创建

2020-05-13 17:48:43 455

原创 springboot中restfulCRUD例子

springboot中restfulCRUD例子简介在学习了springboot和web相关的内容时,学习了一下增删改查相关的讲解,所以自己也写一个增删改查的例子来记录一下,先说明为了简单本次例子中不含有数据库相关的操作,只是为了举例。讲解假设我们有一个学生类student需要进行展示,并且对其进行增删改查。首先我们写一下对应的uri:普通CRUD(uri来区分操作)RestfulCRUD查询getStudentstudent–get添加addStudents

2020-05-11 22:20:57 306

空空如也

空空如也

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

TA关注的人

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