TTTTTTZZZZZZ
没有撤退可言~
花有重开日,人无再少年
展开
-
TTTTTTZZZZZZ (Linux常识) 1
Linux是一个操作系统内核。操作系统=》内核 + 一组配套的应用程序内核来负责对于软件资源和硬件设备的管理centos : 才是操作系统;centos = Linux + 一组配套的应用程序使用Linux发行版操作系统的知名东西:Centos,安卓,Ubuntu,Kail,Debain,Mint...都是基于Linux内核进行开发应用程序的系统go语言就是开发C语言的肯汤普逊开发的,...原创 2019-11-03 20:46:18 · 457 阅读 · 0 评论 -
TTTTTTZZZZZZ(基础命令) 2
ctrl + l = clear 清屏pwd : 查看你当前路径exit命令也可以从root用户切换回普通用户yum install treerm -r(递归式的删除) -i(每一个步骤都要确认) -f(与-i相反,不用每个步骤确认)rm -rf / : 一旦敲下万劫不复快照一般是最好在关机状态下拍摄快照,因为在开机状态下,他也会将内存中的数据给你保存下来,内存太大了,也没有必要...原创 2019-11-04 11:02:32 · 870 阅读 · 0 评论 -
TTTTTTZZZZZZ (基础知识,开发工具介绍) 3(一个没有毛用的十行python代码实现的微信聊天机器人)
shell:运行原理shell又叫命令行解释器,是一个统称,一般是默认的shell程序是bash(bash就是具体的媒婆)bash是使用最广泛的Linux程序,但是不是最好用的,好用的有zsh,fish权限:读,写,执行关于上面的三组不同的用户对这个文件的权限,可以类比于你,你儿子,你儿子的同学这样的关系来记忆,你就是文件的拥有者,你和你儿子属于同一个家族,你儿子就是和你同组的用户,然...原创 2019-11-04 15:32:45 · 566 阅读 · 0 评论 -
TTTTTTZZZZZZ (vim的使用) 4
ctrl + Z并不是退出程序,而是把程序放到后台了,要想切换回来就输入fg + entervim的快捷键直接使用vimtutor,进行查找和学习,在学习中去记忆。:set mouse=a 支持鼠标操作:set mouse-=a 取消鼠标操作:set number 显示行号:set nunumber 不显示行号ctrl + s xshell中冻结界面ctrl + q xshell中...原创 2019-11-04 20:02:44 · 243 阅读 · 0 评论 -
TTTTTTZZZZZZ(gcc,gdb工具,makefile,一发入魂式剖析)5
感觉有几个东西还是比较有用的v 进入可视模式V 进入可视模式的,行模式,一次性选中一行R 替换模式,替换光标下的内容:底行模式有很多特殊的操作,例如字符串查找,替换,i/I/a/A/o/O/c/s 以各自不同的方式进入插入模式感觉这些还是很好用的gcc编译器基本用法: gcc 文件名 -》自动生成a.out可执行文件 gcc 文件名 -o 生成可执行程序文件名 -g...原创 2019-11-05 13:51:10 · 508 阅读 · 0 评论 -
TTTTTTZZZZZZ (基础知识) 6
一个makefile中可以存在很多个目标有的目标并不是为了要生成东西,而仅仅是为了执行一些特定的东西,最经典的就是clean方式清空之前生成的内容直接在shell中敲入make默认的是执行第一个命令当我们想要删除已经创建好的文件就可以使用make clean来清除生成的文件,但是加入当前目录下已经有了一个clean文件,要是还是照着上面图片里面那么敲就有问题了,无法删除你想要清除得文件...原创 2019-11-06 10:51:35 · 752 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程) 1
在Linux下使用ps默认只能够查看当前用户的进行,要想查看当前操作系统上的全部进程ps aux,也可以使用ps aux|less使用管道的方式来进行查看,使得显示更清晰。管道就是多个进程搭配使用的场景,进程搭配使用在Linux下使用的比较多,window不会这样。ps aux:进程和可执行文件不是一个东西,写一段代码里面搞一个死循环,然后运行起来可执行文件,查看ps,发现程序在运行...原创 2019-11-06 14:04:37 · 220 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程)2
所谓的进程就是,当我们双击一个可执行程序的时候,就会将这个可执程序从磁盘中加载到内存中,然后操作系统用就会建立一个结构体,来 描述这个进程,从而管理这个进程。(程序运行起来就会形成进程)总结起来就是一句话,操作系统对于我们的进程就是先描述再组织的,组织用的就是数据结构中的双向链表来进行组织的。创建一个进程就是在那个链表上增加一个test_struct结构体,一个进程退出也就是从链表上将某个结点销...原创 2019-11-06 17:20:23 · 361 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程---进程控制)3
进程调用fork,当控制转移到内核中的fork代码后,内核做:1.分配新的内存块和内核数据结构给子进程2.将父进程部分数据结构内容拷贝至子进程3.添加子进程到系统进程列表当中4.fork返回,开始调度器调度内核在软件和硬件之间进行打交道fork的运行规则:1.以父进程为模板,将父进程的Pcb拷贝一份,2.会把父进程的虚拟地址空间拷贝一份作为子进程的地址空间,但是此时的拷贝只是浅拷贝...原创 2019-11-07 14:07:07 · 266 阅读 · 1 评论 -
TTTTTTZZZZZZ(系统编程---进程的程序替换)4
注意事项: 1.wait()这个函数每调用一次只会回收一个子进程,假如wait()的次数比fork()的次数少那么将会有子进程未 被回收,那么就会有僵尸进程。 2.当我们的进程没有子进程的时候,假如这个时候我们尝试wait()的时候就会出错返回-1,而不是阻塞等待。 3.如果有多个子进程,任何一个子进程结束都会触发wait()。pid_t waitpid(pid_t pid,int...原创 2019-11-07 17:35:49 · 183 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程)5
strtok()函数的参数可以是好几个字符串,他都会将按照这些字符进程切分,但是这个函数居然需要循环调用进行切割,每次切割返回的是上一次切割的值strtok()函数,会破坏原始字符串,其实它的内部执行原理是,将你要切割的字符全部替换成‘\0’这样的话就会破坏原始字符串在多线程环境下使用strtok会导致线程不安全,会造成不可预期的后果。boost 是C++的备胎,C++中有很函数都是从b...原创 2019-11-08 17:48:55 · 459 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程) 6
文件描述符就是一个正整数,也就是文件描述符表(文件描述符表也就是一个数组)的索引值,文件描述符表中的每一个,就是一个struct file* 指向的是记录文件信息的一个结构体,所以可以通过文件描述符表的索引来找到文件。一个进程运行起来之后默认是会打开三个文件,标准输入0(strin),标准输出1(strout),标准错误2(strerr)read/write返回的是字节数fread/f...原创 2019-11-09 10:29:57 · 439 阅读 · 1 评论 -
TTTTTTTZZZZZZZ(系统编程--动态库,静态库)7
动态链接库:.dll文件把一些.c/.cpp文件编译成了一种特殊的二进制程序,自身并不能被执行,但是可以被其他的可执行程序调用应用场景:客户端更新的时候不必更新整个程序,而是更新其中的一部分模块,其中就是以动态库的方式组织的。我们的一个游戏很大,但是每次更新的时候貌似只需要更新很小的内存,原因就是将整个程序分成很多的模块,用的时候再去调用,更新的时候也只需要更新几个模块就可以了,而不是全部...原创 2019-11-09 13:07:49 · 3577 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程---进程间通信)8
为什么要进行进程间通信?进程之间具有独立性,每个进程都有自己的虚拟地址空间,进程并不知道其他进程的虚拟地址空间中的数据类容就好比一个人不能知道另一个人脑子里在想啥是一样的进程间通信需要“介质”,两个进程都能访问到的公共资源借助文件就可以完成进程间通信,最简单的进程间通信方式操作系统专门提供的进程间通信方式1.匿名管道2.命名管道3.消息队列4.共享内存5.信号量6.互斥量...原创 2019-11-09 21:43:03 · 223 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程---进程间通信,进程信号,C/C++字符串转数字)9
共享内存的原理是两个进程通过页表映射到同一块物理内存上,然后就可以开始通信了,可以手动解除映射关系,也可以等待进程退出,再解除物理内存和进程的映射关系,但是申请好的共享内存的生命周期并不会随着进程的退出而释放,而是要等到手动释放或者重启内核,也就是开关机才可以释放。插入:C++中的建堆操作#include <iostream>#include <vector>#...原创 2019-11-10 17:07:11 · 408 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程---初识线程,查看线程调用栈的三种方法)10
因为进程的切换开销比较大,所以就又搞了一个线程。又叫轻量级进程1.每次创建一个新的进程,就会重新分配新的虚拟地址空间,2.每次创建一个新的线程,线程就会共用原有的虚拟地址空间。3.因为创建一个进程所需要重新分配虚拟地址空间,所以开销比较大,并且不同的进程之间又是相互独立的, 所以cpu在切换进程的时候也比较慢,开销也比较大。4.线程就不需要创建新的虚拟地址空间,也就不用那么大的开销。...原创 2019-11-11 11:21:07 · 488 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程---线程)11
创建近程属于系统调用。创建线程属于库函数。//看看这段代码 1 #include<stdio.h> 2 #include<unistd.h> 3 #include<pthread.h> 4 void* ThreadEntry(void* arg) 5 { 6 (void) arg; 7 while(1) 8 { ...原创 2019-11-11 16:09:21 · 204 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程--线程) 12
线程不安全:多线程环境下程序的执行结果出现预料之外的值。举一个例子:假如现在有一个全局变量,两个线程分别执行,对这个数据进行++50000次,执行完之后我们发现输出的结果并不是我们想要的100000,而是一些每次都在改变的值,这就属于线程不安全。多个线程访问的那个公共的资源就叫做“临界资源”--------对应上面例子中的全局变量访问临界资源的代码就做“临界区”在临界区中使用“互斥机...原创 2019-11-12 10:36:11 · 169 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程---线程,生产者与消费者模型)13
C++ STL中所提供的容器和算法都是线程不安全的为什么?C++有两个最核心的要点1.和C语言兼容2.对性能追求到极致而一旦加锁性能就会受到影响,因为互斥锁又叫挂起等待锁。生产者与消费者模型:生产者和消费者之间是同步与互斥的关系生产者与生产者之间是互斥关系消费者和消费者之间是互斥关系四个线程,两个负责给一个数组中写数据,写的慢,两个负责从数组中读数据,读的快两个写数据的线...原创 2019-11-12 20:39:46 · 328 阅读 · 0 评论 -
TTTTTTZZZZZZ(系统编程)14
读写模型:1.一个场所2.两种角色,读者,写者3.三种关系:读者和读者之间没有关系,读者和写者之间同步与互斥,写者与写者之间互斥读写者模型适合用于“一写多读”的情况,读者写者模型最大的意义就在于“读者之间没有互斥关系,也就能大大提高效率,大部分的网站都是基于这种模型写出来的 1 #include<stdio.h> ...原创 2019-11-13 11:00:37 · 308 阅读 · 0 评论 -
TTTTTTZZZZZZ(网络编程) 1
网络其实就是跨主机的进程间通信协议分层:1.为啥要分层网络协议比较复杂。如果不拆分那就太复杂了2.分层之后有什么好处a. 拆分成多个层之后,相当于拆分了很多的模块,同时降低了整个系统的耦合程度b.根据实际需求,随时可以替换其中的某一层协议osi七层模型:物数网传会表应TCP/IP模型物数网传应最重要的协议有两个一个是TCP/一个是HTTP一般而言:对于一台主机而言,他...原创 2019-11-13 13:17:37 · 266 阅读 · 0 评论 -
印象笔记,井字棋,
class Board {public: bool checkWon(vector<vector<int> > board) { for(int i = 0; i < 3 ;++ i) { int count1 = 0; int count2 = 0; ...原创 2019-11-18 09:35:16 · 105 阅读 · 0 评论 -
软硬链接
软硬链接转载 2020-02-12 01:39:08 · 79 阅读 · 0 评论 -
典型IO 1
四种典型的IO模型有(阻塞IO,非阻塞IO,信号驱动IO,异步IO) + 多路转接IO模型(select,poll,epoll)IO的过程: IO是缩写,全写是(input & output)也就是输入输出,IO操作主要指的就是读写操作。IO的过程分为: 1. 等待IO就绪(也就是在发起IO请求之后,要等待IO就绪),可能是读也可能是写 1.1. 读:想要读取的数据已经准备好了,可以读取数据了(revefrom) 1.2. 写:想要写数据的空间已经准备好了,可以写数据了(sendto)原创 2020-06-23 16:39:15 · 265 阅读 · 0 评论 -
典型IO 2
典型IO 1原创 2020-06-23 16:39:21 · 181 阅读 · 0 评论 -
典型IO 4
epoll典型IO 3这篇介绍多路复用IO的文章也很不错设置阻塞的常见方式原创 2020-06-23 16:39:28 · 163 阅读 · 0 评论 -
在线oj项目
在线oj项目分析:想法很简单就是实现一个类似于牛客和力扣那样的在线编程系统。这个系统主要是通过浏览器来实现客户端和服务器端的应答,在网络上进行数据的传输。服务端和客户端交互流程:上图是服务端和客户端进行交互的基本的流程,接着我们再对整个程序的服务端进行细致的划分,和各个模块的分析。服务端模块划分:服务器模块主要由oj_sever这一个模块来实现和客户端的交互的,背后负责支持的四个模块是,试题模块:试题存储在服务器,当用户点击图标进行获取的时候我们再将试题的详细内容进行返回编译运行模块:主原创 2020-06-23 16:39:33 · 2053 阅读 · 0 评论 -
高级IO 3
原创 2020-06-23 16:41:31 · 200 阅读 · 0 评论