自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hanani_Jia的博客

计算机科学与技术专业萌新

  • 博客(269)
  • 收藏
  • 关注

原创 TCP实现简单聊天程序

  上次我们通过UDP来实现了简单的聊天程序,这次我们用TCP协议来实现,TCP和UDP不同的是TCP需要创建连接。//这是一个通过TCP协议来实现聊天的程序//1.创建socket//2.为socket绑定地址//3.向服务端发送链接请求//4.发送数据//5.接受数据//6.断开连接//#include<stdio.h>#include<stdlib...

2018-10-27 19:52:43 1812

原创 UDP协议实现聊天小程序

  今天我们用之前讲解过的UDP协议来写一个最基础,最简单的网络聊天程序。//我们通过udp协议来实现一个简单的网络聊天程序//这是客户端的实现//过程:// 1.创建套接字// 2.绑定地址信息// 3.向服务端发送数据// 4.接受服务端发送的数据// 5.关闭socket#include<stdio.h>#include&l...

2018-10-24 16:25:51 1781

原创 UDP和TCP

  之前我们对TCP协议进行了一个简单的介绍,TCP(传输控制协议)是面向链接的、可靠的、面向字节流的传输层通信协议。今天我们主要介绍和他在同一层次上的UDP协议,并且对比一下他们两个有什么区别。相比起来TCP,UDP算是恰恰相反的一个协议,他是无连接、不可靠、面向数据报的。   UDP和TCP、IP一样他也拥有自己的头部,不过他的头部信息十分的简单,UDP的头部包含源端口,目标端口,...

2018-10-23 20:50:54 298

原创 OSI参考模型

   今天我们主要来讲解一下网络里边的OSI参考模型。   在经过最初商议之后,制定了一个网络体系结构OSI模型,OSI的全称为Open System Interconnection 开放系统互联,在这个模型中将通信协议中必要的功能划分成了七层,通过将网络分层,然后使得那些比较复杂的网络协议变的更加的简单化。   在这个模型中每一层都接受由他的下一层为他提供的服务,并且他也为自己的上一层提...

2018-10-22 15:38:13 1243

原创 LeetCode--所有可能的路径

class Solution {public:vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {vector<vector<int>> ret;int num = graph.size() - 1;vec...

2018-10-22 10:21:26 1230

原创 C++服务器十三 C++深入学习

   我们这里是用C++这门语言来编写我们的服务器,这里我们在前期,先介绍一下C++这门语言里的一些语法。  我们用到的编译器是g++或者clang。在ubuntu下可以用sudo apt-get install g++来安装。还要安装make和cmake。   之后我们就开始介绍我们C++这门语言。C++是在C的基础上扩展的,所以和C语言区别并不是很大。我们这里就直接开始介绍。   ...

2018-10-21 23:23:36 553

原创 TCP协议讲解二

   慢慢的到了夏天,天气越来越潮湿了,西安虽然很干旱,但是在西安到北京的路上阴雨天气越来越多,大华抱怨到:最近的纸飞机越来越脆弱了,经常就给丢了,烦的一批。我们得想想办法解决啊。   小胖说,要不这样我们在这一路多安插一些人手,让我们的纸飞机一直在我们的视野中,给他们站好岗。   大华就急了:哪来那么多人,给你站岗去,再说了,这么远的路,我一千米一个岗,我耗费多大的人力物力。   小...

2018-10-21 15:44:46 246

原创 TCP协议讲解一

我想给在北京上学的同学发一份包裹,所以我就去了菜鸟驿站找到了大华。我跟他说:“大华我要往北京的同学那里发一份包裹你帮帮我呗”。大华说:“好,可是北京那边有这么多通道你准备走哪一个通道?”我:“那就走80这个通道吧(TCP协议默认端口80)”我跟着大华来到了菜鸟驿站的后边,大华说不急,你先等我跟北京的小胖建立一个连接再说。大华拿出一张纸写了“发货地址:西安市233号,收货地址:北京8...

2018-10-21 14:13:20 621

原创 LeetCode--比特位计数

对于基础的算法很简单,很容易就能写出来。class Solution {public: vector<int> countBits(int num) { int n = num; vector<int> ret; for (int i = 0; i <= num; i++) { ret.push_back(countbit(i));...

2018-10-21 13:44:36 559

原创 Linux讲解 生产者消费者模型

     我们上次通过代码实现了进程间的互斥操作,解决了wps和word同时都去操作我们的队列的话怎么解决这个问题,但是打印机这边又出现了问题,因为我们的进程队列是有限制的,正常来说打印机就在我们的槽里获取数据打印就可以了,但是如果说我们槽满了,这时候应该怎么办?Wps和word是不是都要等着队列空了再往里边放,再或者如果说队列全部空了,打印机也要等着其他进程往里边放东西,所以wps、word和打...

2018-10-18 20:29:18 545 2

原创 LeetCode--子集(Subsets)

   给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。  示例:输入: nums = [1,2,3]输出:[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]class Solution {public:vect...

2018-10-18 19:25:03 438

原创 LeetCode--子域名访问次数

   一个网站域名,如"discuss.leetcode.com",包含了多个子域名。作为顶级域名,常用的有"com",下一级则有"leetcode.com",最低的一级为"discuss.leetcode.com"。当我们访问域名"discuss.leetcode.com"时,也同时访问了其父域名"leetcode.com"以及顶级域名 "com"。  给定一个带

2018-10-16 15:03:37 317

原创 HTTP如何实现长链接

   长链接确实在某些时候有很多的优点,要比我们的短链接方便一些,但是我们都知道在学习HTTP的时候就说过这是一个无状态、无链接的一个协议,那他是怎么来实现我们的长链接的?   如果要想弄清楚怎么实现长链接的就要清楚,那些情况会把我们的长链接断开。 长链接所在进程被杀死,这是很容易理解的一种情况,进程杀死自然就断了。 NAT超时,这里我们介绍一下NAT,我们都知道在IPV4下,...

2018-10-15 23:38:14 4779

原创 HTTP长连接短连接

   我们在介绍HTTP各版本区别的时候说过,HTTP1.1和1.0的区别就是1.1默认情况就是长链接的而在1.0版本里就需要通过头部Connection: Keep-alive来说明链接情况,如果不说明可能就是短连接了。   那到底什么是长链接什么是短连接,这两个又有什么区别呢?   HTTP链接是在应用层的协议,他是建立在传输层协议TCP协议和网络层协议IP协议上,IP协议主要解决了网...

2018-10-15 15:51:47 2869

原创 Linux讲解 进程线程

  我们之前在Linux中引入了进程的概念,今天我们就在仔细的分析一下什么是进程,什么是线程,进程和线程之间有什么关系。  现在有两个程序一个是小红,一个是小蓝。  在计算机发展初期的时候,CPU是一个很稀缺的资源,他们两个必须轮流使用,只有小红执行结束之后,让出CPU,小蓝才能从头开始运行。人们把这种方式叫做批处理。   慢慢的,随着计算机的不断发展,CPU的处理能力越来越快了,...

2018-10-15 15:07:47 406

原创 cookie和session的区别

   今天我们要介绍的是cookie和session,为什么要有这两个机制?HTTP是一个无连接的协议,也就是说他把每一次的链接都当成新的链接,我不知道你上次来过,你在上一个界面登录了,我这个界面是不知道的。所以为了分辨这个链接是谁发起的,就需要我们自己来解决问题。而session和cookie就是来解决这个问题的。   简单的来说cookie是客户端保持状态的方案,而session机制则采用...

2018-10-14 21:56:15 329

原创 GET和POST的区别

  HTTP在客户端请求服务器的时候,大多数用到了两种方法GET和POST两种方式。简单来说GET是从指定的资源请求数据,而POST来说是向指定的资源去提交要被处理的数据。 GET使用URL或cookie进行传参,而POST请求的时候数据在BODY中     GET的URL长度会有一定的限制,但是POST里边没有。但是实际上在协议的规定中对于HTTP的头和HTTP的实体部分...

2018-10-13 22:24:44 429

原创 HTTP和HTTPS的区别

   我们介绍了很多关于HTTP的东西,但是现在访问网页的时候,大多数网页都是用的HTTPS协议,HTTP超文本协议被用在客户端和服务器之间传输信息,但是HTTP协议是以明文的当时来发送内容,并不提供任何加密方式。如果有攻击者拦截了浏览器和服务器之间发送的数据,就能读懂其中的数据信息,这样就就导致HTTP很不安全,所以HTTP协议就不适合传输敏感信息。为了解决这个问题就有了能够保护我们数据安全传输...

2018-10-13 15:46:58 397

原创 在浏览器上请求一个URL的全部过程

  当我们在浏览器中输入一个网址的时候主要经过了六个步骤来最终把网页完整的展现给我们。 第一步要进行的就是域名解析 我们在浏览器中输入的是一个www.baidu.com,浏览器首先要做去获得我们想访问网页的IP地址,浏览器会发送一个UDP的包给DNS域名解析服务器。DNS就会返回给我们百度的IP地址,通常来说浏览器会把访问过的网站的IP保存下来,这样下次访问的时候就会快很多,能够节省很多...

2018-10-13 10:29:34 4280

原创 LeetCode--N叉树的前序遍历

 之前写过二叉树的遍历,当时认为递归是很简单的,但是之前忽略了一个问题,当时在遍历的时候都是直接输出,并没有说将结果存起来,但是如果在线编程的话,是一定会让结果保存在一个数据结构中的。所以这里在最初的时候即使是二叉树也不能像之前写的那样直接输出,如果在函数首部定义一个vector每次递归都会重新创建,里边的数据保存不下来,我也想过定义一个全局变量,但是这样也不妥,这样的话返回值返回什么。...

2018-10-12 15:13:02 671

原创 LeetCode--N叉树的最大深度

  最近在刷领扣的时候遇到了N叉树,之前都是在写二叉树的基本操作,写N叉树的时候难免有些乱,这里简单的总结一下。  我们之前在写二叉树的时候通过递归来实现求最大的深度,是很简单的。其实N叉树也并不难只是把二叉树的思想搬过来就可。我们在写二叉树的时候就是深度不就是我孩子里边深度最深的那个数字加上1就是我当前的深度,不断一层一层的去递归。class Node {public:in...

2018-10-12 15:00:36 1014

原创 HTTP状态码

  我们在介绍响应报头的时候提到了HTTP的状态码的概念,状态码跟随着响应表报头一同返回回来,今天我们主要来讲一下状态码有哪些各自的含义是什么?  状态码就是告诉我们服务器响应的状态,通过它我们能明白我们的状态码由三个十进制的数字组成,第一个十进制数字定义了状态码的类型,后边两个数字没有分类的作用。HTTP状态码分为五类一.1XX:表示请求已经接受,需要请求者继续执行操作二.2XX:代...

2018-10-12 12:48:55 514

原创 HTTP报头

  我们上次在说HTTP版本区别的时候说了,在HTTP1.0的时候加入了报头,报头中包含了很多信息。报头分为两种:一种是请求报头一种是响应报头,自然就是一个是请求的时候发送的一个是响应的时候发送的。 请求报头由四部分构成请求行、请求头、空格和请求数据 这里我们看当你访问百度的时候的请求报头GET / HTTP/1.1 Host: www.baidu.com Conne...

2018-10-11 21:01:25 8359

原创 HTTP各版本区别

 HTTP协议全称HyperText Transfer Protocol,中文名超文本传输协议。是互联网上应用最为广泛的一种网络协议。HTTP是基于TCP/IP协议的应用层协议,不涉及数据包的传输,主要是规定了客户端和服务器之间的通信格式。默认使用80端口。现在HTTP已经演化出了很多个版本。  HTTP 0.9是最早发现的一个版本,在1991年发布,但是现在已经过时了,因为它只允许客户端发送...

2018-10-10 16:43:00 4656

原创 Linux讲解 进程间通信 信号量的互斥

  我们在介绍进程间间通信的时候说到了共享内存,共享内存有一个特点就是共享内存并没有提供同步和互斥机制的,是需要我们自己来实现共享内存访问的同步和互斥。   首先要明白什么是同步与互斥。互斥就是:进程对临界资源的同一时间的唯一访问性。同步就是:进程对临界资源的顺序访问关系。通俗来说互斥就是一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。而同步就是:两个或两个以...

2018-10-08 20:31:07 1242

原创 剑指offer--翻转单词顺序列

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 这里要注意的是...

2018-10-08 17:18:00 369

原创 C++服务器 十二 vim简单使用

  我们接触过Linux的人那肯定都是知道vim的,我之前的博客也对vim有过一些介绍,这里也推荐大家看一下。https://blog.csdn.net/Hanani_Jia/article/details/81631386 vim教程一 基本使用https://blog.csdn.net/Hanani_Jia/article/details/81698760 vim教程二 简单配置 ...

2018-09-28 21:41:41 491

原创 Linux讲解 进程间通信 共享内存

   今天我们要介绍的是最后一个进程间通信的方式也是最重要的一个共享内存,共享内存是最快的一个IPC形式。所以在实际应用中有着很广泛的应用。   共享内存的意思是,我们现在把同一块物理内存映射到进程A和进程B两个进程的地址空间,两个进程都可以看到这一块内存。共享内存之所以要比其他的进程间通信快是因为,我们的进程可以直接读取内存的数据而不需要进行任何拷贝,不需要调用任何系统调用来传递数据。而我们...

2018-09-28 19:41:24 770

原创 Linux讲解 进程间通信 消息队列

   消息队列是进程间通信的另外一种方式,那什么是消息队列呢?消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过使用消息队列来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。消息队列,本质就是一个消息的链表,是一系列保存在内核中消息的列表。用户进程可以向...

2018-09-26 17:33:28 333

原创 领扣--唯一摩尔斯密码

国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-...","-.-.","-..",".

2018-09-26 00:12:07 496 1

原创 剑指offer--从尾到头打印链表

题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。     之前接触过链表的逆置所以这里上来直接用了三指针方法。struct ListNode {       int val;       struct ListNode *next;       ListNode(int x) :             val(x), next(NULL) {...

2018-09-23 16:44:19 490

原创 Linux讲解 进程间通信 命名管道

  上次我们讲了进程间通过管道通信的方式,上次所说的管道也叫做匿名管道,匿名管道创建了一块缓冲区供进程来使用,但是这块缓冲区是没有名字的,因此除了具有亲缘关系的进程之外其他进程都找不到这块缓冲区。  今天我们要介绍的是命名管道,命名管道实际上是一种特殊文件,在同一台计算机的不同进程之间或在跨越一个网络的不同计算机的不同进程之间,支持可靠的、单向或双向的数据通信。在创建这个命名管道的时候给他起一...

2018-09-23 14:33:29 631

原创 剑指offer--机器人的活动范围 回溯法

题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?  写这道题的时候了解到了一个新的方法叫...

2018-09-21 21:34:22 560

原创 Linux讲解 进程间通信 管道

  今天我们讲解进程间的通信,首先回顾一下进程的概念:进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。  进程的用户空间是相互独立的,一般来说是不能相互访问的,但是很多情况需要我们不同的进程共同完成一个任务,或者进程之间需要沟通交流的时候,就必须要用到我们的进程间通信。  经...

2018-09-21 20:05:33 724

原创 Linux讲解 基础IO 软硬链接

  今天我们介绍在Linux文件系统中的软硬链接的概念。  我们上次说了一个概念,一般情况下都是我们的一个文件名对应一个inode号,但是也存在我们不同的文件名字指向了同一个inode结点的可能性,也就是说我打开的不同文件但是内容确实一样的,这就让我想到了我们windows下边的快捷方式。这就是硬链接。可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是,删除一个文件...

2018-09-21 16:11:03 992

原创 领扣--二叉树深度

  在领扣上刷题遇到了求二叉树深度的题目。对于二叉树的深度求解已经很熟悉了通过一个递归五行代码直接解决问题。这是题目,自然直接编写程序。class Solution {public:int maxDepth(TreeNode* root) {if (root == NULL)return 0;return (maxDepth(root->right)>...

2018-09-19 20:44:35 376

原创 Linux讲解 文件系统 inode节点

我们可以通过stat命令来查看更加详细的文件属性。  这里边其中有几个概念我们是要了解清楚的,就是Block,IO Block,以及Inode。  Inode是一个很重要的概念,理解透彻inode对整个文件系统的了解层次就会提升一个等级。  我们需要一点一点说起我们文件存储在磁盘上,磁盘存储的最小单位是扇区,每一个扇区的大小是512字节也就是0.5kb,但是我们的操作系统在读取磁盘...

2018-09-19 19:30:32 1707 1

原创 Linux讲解 文件系统 缓冲区

  这次我们对Linux文件系统进行更加深入的介绍。我们先看一个程序。我们通过三个函数来进行一下输出。我们的printf自然就是直接在屏幕上的输出,fwrite是我们库函数里边的输出,他的参数(获取数据的地址,写入内容的单字节个数,写入单字节数据的个数,文件描述符)这里我们的文件描述符是stdout也就是我们的标准输出,所以他会直接打印到我们的屏幕上边。write有两种用法这里是用的复杂的...

2018-09-19 19:26:52 2313

原创 剑指offer--和为S的连续正数序列

题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数序...

2018-09-17 10:39:59 433

原创 Linux讲解 基础IO 重定向

重定向就是不使用系统的标准输入端口,标准输出端口和标准错误输出端口,而进行重新的指定,所以重定向分为输入、输出和错误重定向,通常情况下重定向到一个文件。重定向的符号有:>      输出重定向到一个文件或设备 覆盖原来的文件>!      输出重定向到一个文件或设备 强制覆盖原来的文件>>      输出重定向到一个文件或设备 追加原来的文件<      ...

2018-09-15 22:23:22 1491

空空如也

空空如也

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

TA关注的人

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