- 博客(35)
- 收藏
- 关注
原创 GIT 盘一盘
如果想要配置的git生效于当前机器的所有仓库,则需要加上global关键字。如果文件已经在缓冲区或者已经在本地仓库,我们就需要用版本回退的方式处理了。git的版本回退共分三种模式:--soft,--mixed(但是,如果我们回退到之前的版本,那么新版本也会被覆盖掉。但同一个文件有不同的操作,最后在合并的时候就容易有冲突。此时需要手动解决冲突部分,并且再提交一次。可以通过git tag给提交的ID取别名。此时,head指针指向切换后的分支。在与远程仓库连接,需要相应的命令。写入的文件会被git忽略。
2024-04-05 20:42:17
373
原创 TCP协议(一)
我们注意到, UDP协议首部中有一个16位的最大长度. 也就是说一个UDP能传输的数据最大长度是64K(包含UDP首 部). 然而64K在当今的互联网环境下, 是一个非常小的数字. 如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装;可以看见,每次发送和接受,我们都是需要把OS接口的信息拷贝到缓冲区后在做相关的处理的,所以,我们也要考虑缓冲区容量的问题。UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;
2023-07-01 18:01:25
112
原创 HTTP(一)
其中的Key:value就是协议中需要携带的报头;该网址就是使用的大名鼎鼎的http协议。HTTP网络是一个基于TCP的网络协议。4.一般较大的文件都用Post方式传参.所请求的资源是在哪个主机的哪个端口上。声明用户的操作系统和浏览器版本信息。当前页面是从哪个页面跳转过来的。告诉客户端接下来要去哪里访问。1.Get通过URL传参。2.Post通过正文传参。用于在客户端存储少量信息。3.Get方式不私秘.
2023-06-06 18:51:36
99
原创 LINUX TCP网络
文件描述符;维护连接的数量原文件描述符;struct sockaddr_in 转sockaddr(输入输出型);sizeof(...)(输入输出型)原文件描述符;struct sockaddr_in 转sockaddr;va_end(ap);int fd;public:// 1.创建socketexit(1);
2023-06-02 19:04:07
78
原创 LINUX UDP网络
话接上文,我们大致的介绍了网络的分层,但是具体实现是如何的呢?本章内容将从编码层面实践。UDP网络的C/S模型实现较为简单,我们从UDP服务端开始介绍。
2023-06-01 19:39:03
36
原创 网络初步概述
在初步谈完操作系统后,我们来看看网络,网络其实没有那么神秘,我们大可把远程通信看作是一根很长的传输线。为了方便软件和网络的 问题归类,解耦,以及便于维护,我们将协议分层。
2023-05-31 19:56:35
36
原创 LINUX多线程(五)
信号量本质是一个计数器,且该计数器的++和--是原子的,若线程申请信号量失败就会被挂起。sem:需要初始化的信号量pshared:传入0为线程间共享,非0则进程间共享value:信号量的初始值初始化成功为0,失败返回-1信号量++;成功返回0,失败-1信号量--;成功返回0,失败-1销毁信号量代码demo。
2023-05-28 21:31:11
52
原创 LINUX多线程(四)
话接上文,我们介绍了状态变量的API,那么条件变量究竟怎么用呢?1.条件变量用来等待线程而不是上锁2.条件变量被用来实现线程同步可以看到,条件变量的等待是原子的。
2023-05-26 20:47:54
34
原创 LINUX多线程(一)
1.创建新线程的代价远小于创建一个新进程2.线程切换的代价远小于进程切换3.可充分利用多处理器的并行数量4.等待慢速I/O时,程序可执行其他任务5.计算密集型应用,为了可以在多处理器上运行,将计算分解到多个线程中运行6.I/O密集型应用,线程可以等待多个I/O。
2023-05-21 17:47:33
47
原创 linux:信号(二)
每个信号都有两个标志位,分别表示其阻塞(block)或未决(pending),还有一个函数指针(handle)表示处理动作。被阻塞的信号产生时将保持在未决状态,直到进程解除对此信号的阻塞,才执行递达动作。信号从产生到递达之间的状态称为信号未决(pending)。0:success;sigismember:判断信号是否在信号集中.在接收到信号之后,有些信号会生成core文件.oldset:旧的信号集.(保留原有信号集)sigdelset:将信号从信号集中删除.sigaddset:将信号添加进信号集。
2023-05-05 21:15:18
69
1
原创 Linux:信号(一)
1.在linux系统中,信号对于每个进程来说都是提前已知的,换句话说,对于进程而言,即便信号没有产生,但我们已经有了处理信号的能力。2.信号的产生对于进程来说是异步的,所以当信号产生的时候,进程可能有以下几种情况:(1)中断进程(执行默认动作)(2)忽略信号(3)自定义操作。
2023-05-02 20:50:45
47
原创 ipc部分资源的管理方式
从这里可以看出在内核中,消息队列,共享内存和信号量这种ipc资源最开头的元素都是struct ipc_prem,在C语言中,结构体的地址和结构体首元素地址在数值上是相同的。当我们想要获取ipc资源中struct ipc_perm内的资源,我们可以直接取用,当我们需要XXXid_ds内的资源,我们可以强转类型。所以,每当我们申请一个ipc资源的时候,内核中会存在一个struct ipc_perm*类型的数组存储我们申请IPC资源的地址。
2023-04-27 16:30:15
157
原创 进程间通信之--------共享内存
在linux中,想要两个进程相互通信,我们有若干种方式,其中较为经典的方法就是共享内存。在此之前,让我们回顾一下通信的本质,通信的本质是在双方都看得见的区域内读写。而共享内存通信的本质是个啥呢?让我们先上图:可以看到,我们在物理内存中开辟了一个内存区,然后通过页表映射,让两个进程都能看见这块内存区域。
2023-04-26 21:46:57
753
原创 进程间管道通信(二)
书接上文,倘若我们需要对多个子进程进行通信,该怎么做呢?简而言之,只需要我们保存下每个匿名管道的读端,或是写端即可。此方法我们的父进程保存了每个子进程记录的管道的写端,并把子进程的pid号和匿名管道的写端做成一个键值对,至此,我们的父进程就可以操控多个子进程了。
2023-04-25 20:10:53
54
原创 linux下动静态库生成及使用
每次当我们需要动态库的时候,我们的动态库在磁盘上被加载进物理内存(此时和地址无关),随后根据页表映射,动态库对于可执行文件的进程而言变得”可见“,在需要用到库的时候会跑过去执行库中的代码。执行完之后再返回执行自己的代码。为什么我们的可执行程序会运行不起来呢,因为,我们在gcc编译的时候,我们把文件的路径都告诉了gcc编译器,但是在可执行文件运行的时候,它是一个进程,它哪知道要去哪找链接的库啊。原理是这样的,静态库在生成可执行文件的时候,库里的代码已经编译进了可执行文件内,就相当于是有了个人所有的东西。
2023-04-23 21:17:28
982
原创 An Image Inpainting Technique Based onthe Fast Marching Method论文阅读
结合了FFM的一种图像修补方式
2022-12-13 10:12:28
402
原创 消除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路说明:快慢指针法设有一个快指
2022-03-08 11:09:23
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人