作业
心怀梦想的咸鱼
这个作者很懒,什么都没留下…
展开
-
linux(7)进程间通讯
进程运行时时具有独立性的,让它本身通信是困难的,所以进程通信的前提条件是让进程看到同一份资源(通常指的是某一块内存)**进程间通信的目的**...原创 2019-11-03 16:05:57 · 124 阅读 · 0 评论 -
[网络]——TCP协议分析
TCP有关的资料和书籍,网上搜索恐怕汗牛充栋,我写这篇博客也是为了学习巩固,参考了《计算机网络》和goole的很多博客,毕竟站在巨人的肩膀上才能看的更高走的更远。1.TCP协议TCP协议属于TCP/IP协议中的传输层协议,有以下几个特点。TCP是面向连接的运输层协议。每一条TCP连接只能点对点TCP提供可靠交付的服务TCP提供全双工通讯面向字节流。TCP是面向连接的传输层协...原创 2019-11-02 20:22:30 · 1834 阅读 · 0 评论 -
[网络]——编程套接字和BSD相关API
终于完成了linux的几种设计模式来到了网络的章节,在这里我们可以尝试实现TCP,UDP的c/s服务器,不过在这之前,首先了解网络编程的一些基础概念。套接字套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 ...原创 2019-11-01 12:05:34 · 467 阅读 · 0 评论 -
C语言复习:原反补码
这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。原反补码放出链接原返补码深入探究在大学的C语言课堂上,可能就接触到了原反补码的概念,大学老师说,正数的原反补码就它本身,负数的反码就是符号位不变,其他数值取反,补码则是反码+1.但是为什么,我从大一开始就有这个疑惑,为什么正数就不用变,负数则要这么复杂?直到我拜读了刀斧手...原创 2019-10-25 17:14:52 · 481 阅读 · 0 评论 -
网络基础---数据链路层
在网络的应用层 传输层 网络层 数据链路层 物理层中我的上一篇博客粗略的介绍了网络层的ip协议,在这篇博客你将花费8分钟看有关数据链路层的有关信息1.对比理解“网络层”和“数据链路层”假如有一个主机A想要发送主机B一些数据报文,这些数据报文会从路由器转发到主机B的局域网,再从局域网里给主机B发送数据报文,这个工作就是网络层的IP协议所干的事情。ip协议能够让数据报文从A主机运送到B主...原创 2019-07-20 17:06:45 · 261 阅读 · 0 评论 -
linux(3)进程的地址空间
在C语言刚入门的时候我们曾经见过这一个图片当时我们认为这就是内存,但是今天我们要推翻这个结论,它的真实名字叫进程的地址空间。我们对地址空间先描述再组织,它是一个结构体存在很多的区间,通过调节区间的开始值和结束值来管理虚拟地址。运行如下代码#include <iostream>#include <stdlib.h>#include <unistd.h>...原创 2019-07-25 00:07:25 · 169 阅读 · 0 评论 -
linux(2)进程基础
在我们配置好环境,掌握了linux系统的基本指令后,就要接触进程这一概念,不过在接触进程前我们首先要了解一个概念操作系统原创 2019-07-21 14:05:16 · 186 阅读 · 0 评论 -
linux(4)进程控制
fork函数,在我的前几篇博客中已经使用,在这篇博客里我们具体谈谈fork函数的相关知识fork函数的说明如下fork的功能是创建一个子进程,并且返回两个值,对于父进程返回子进程的PID,对于子进程返回0,这些在前面都说过了,不再浪费时间。当进程调用fork时,内核会做的事情如下分配新的内存块和内核数据结构给子进程将父进程的部分数据结构内容拷贝至子进程添加子进程到系统进程列表中...原创 2019-07-25 23:13:51 · 405 阅读 · 0 评论 -
编写函数 process_create(pid_t* pid, void* func, void* arg)
封装fork/wait等操作, 编写函数 process_create(pid_t* pid, void* func, void* arg), func回调函数就是子进程执行的入口函数, arg是传递给func回调函数的参数.原创 2019-08-03 22:55:41 · 208 阅读 · 0 评论 -
网络基础----子网,IP和网段划分
1.什么是网络划分,网络划分的目的是为了什么?在回答这两个问题之前,我们需要知道ip地址的概念,ip地址一共有32比特位,它由两部分构成,网络号和主机号。两个部分组合在一起就构成了一台主机的地址,这个ip地址有什么用?通过名字就可以看出ip地址类似门牌号,网络号就保证相互连接的两个网段具有不同的标识,主机号:同一网段内,主机之间有相同的网络号当不能有相同的主机号。有相同的网络号的主机构成了...原创 2019-07-19 16:53:41 · 6266 阅读 · 0 评论 -
每日一题(38)
链接:https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32?pos=100&orderByHotValue=1来源:牛客网[编程题]乒乓球筐热度指数:1434时间限制:1秒空间限制:32768K算法知识视频讲解nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要...原创 2019-07-17 12:27:32 · 409 阅读 · 0 评论 -
每日一题(37)
链接:https://www.nowcoder.com/questionTerminal/aed1c7bbc2604e7c9661a2348b0541b8?pos=46&mutiTagIds=579&orderByHotValue=1来源:牛客网[编程题]骆驼命名法热度指数:691时间限制:1秒空间限制:32768K算法知识视频讲解从C/C++转到Java的程序员,一开始...原创 2019-07-16 22:42:16 · 253 阅读 · 0 评论 -
网络基础---NAT穿越技术
1.NAT技术背景在ipv4的协议中一共有32位用来表示ip地址,所以理论上ip地址是42亿9千万,再去除某些特殊ip无法使用,ip地址是远不足42亿,所以NAT技术是为了解决ip地址不足问题的技术,也是路由器的一个重要功能。2.NAT IP转换过程...转载 2019-07-24 00:28:05 · 2310 阅读 · 0 评论 -
每日一题(34)
链接:https://www.nowcoder.com/questionTerminal/610e6c0387a0401fb96675f58cda8559?toCommentId=25418来源:牛客网[编程题]年会抽奖热度指数:1859时间限制:1秒空间限制:32768K算法知识视频讲解今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽...原创 2019-07-12 12:38:05 · 233 阅读 · 0 评论 -
网络基础---ip协议
基本概念:主机:配有ip地址,但不进行路由控制的设备:路由器:既配有ip地址,又进行路由控制;节点:路由器和主机的统称ip协议处于TCP/IP模型中的中间网络层,可谓是上有老下有小,既为上层的传输层(TCP,UDP)服务,又调用数据链路层传输数据。在这里我们认为 ip协议是有能力将数据从A主机传入B主机的。但是有能力不代表一定能做到,举个例子你二大爷家的孙子次次考试都考700多分,我们...原创 2019-07-18 19:05:55 · 183 阅读 · 0 评论 -
每日一题(36)
链接:https://www.nowcoder.com/questionTerminal/ceb89f19187b4de3997d9cdef2d551e8?source=relative来源:牛客网编程题]电话号码热度指数:514时间限制:1秒空间限制:32768K算法知识视频讲解上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应...原创 2019-07-16 13:40:41 · 189 阅读 · 0 评论 -
DNS解析地址
1.DNS域名解析1.1 DNS产生背景用户与互联网的某台主机进行通讯时必须知道对方的IP地址,但是要用户很记住32位ip地址时件很反人类的事情(即使是用点分十进制也不容易记住),而我们睿智的程序员早已经料到这一点,在应用层为了方便用户记忆,连接在互联网上的主机不仅有ip地址还有主机名字。DNS域名系统能够把主机的名字转换为ip地址。在上古年代,准确的说是在APRPANET(1969年),整...原创 2019-07-22 21:36:03 · 2810 阅读 · 0 评论 -
项目---IM多人聊天室
技术要点STLhttp协议websocke协议session和cookiemysql c connectsession 管理mongoose框架理解jsoncpp需要下载的第三方库和文件安装websocket框架mongooshttps://github.com/cesanta/mongoose版本选择:最新6.14,该框架非常简单,只要包含 mongoose....原创 2019-07-31 20:19:47 · 564 阅读 · 0 评论 -
海量数据判重——布隆过滤器(Bloom filter)
布隆过滤器布隆过滤器(Bloom filter)是一个高空间利用率数据结构,由Burton Bloom于1970年提出。被用于测试一个元素是否在集合中(由于集合无重复元素的性质,可用来判重)。布隆过滤器的优势布隆过滤器的思想类似位图,主要是由一个很长的二进制向量和若干个(k个)散列映射函数组成。因为每个元数据的存储信息值固定,而且总的二进制向量固定。所以在内存占用和查询时间上都远远超过一般的...原创 2019-10-06 16:15:40 · 573 阅读 · 0 评论 -
位图
位图今天介绍的数据结构叫做位图,在介绍之前,首先看一道“简单”的题目,给出40亿个数据,给出一个四位数字,判断该数字是否在这四十亿个数字中。这道题难点并不在思路,之前我们使用的链表红黑树等算法思想都能解决这个问题,但是有一点无法解决,40亿个数太太太太大了,换算成int类型大约16G大小的空间,计算机的内存可不一定够,聪明的读者可能想到了char类型来出错结构,从16G的需求降低到4G的...原创 2019-10-06 13:24:16 · 177 阅读 · 0 评论 -
哈希表
哈希表在之前实现的数据结构中,查找一个数据在顺序表中的时间复杂度为O(n),在平衡二叉树和树的高度有关,为O(logn)。但是理想状态下的数据的查询为O(1),有没有数据结构能够实现?从标题就知道今天要介绍的数据结构是哈希表,但是在介绍之前,先介绍哈希。哈希是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。通过映射的方式将数据存在表中,...原创 2019-10-04 21:46:13 · 306 阅读 · 0 评论 -
红黑树
之前博客实现了AVL树,但是AVL树的频繁的插入和删除,会引起频繁的rebalance,导致效率下降;红黑树不是高度平衡的,算是一种折中,插入最多两次旋转,删除最多三次旋转。所以红黑树在查找,插入删除的性能都是O(logn),且性能稳定,所以STL里面很多结构包括map底层实现都是使用的红黑树。红黑树也是一种二叉平衡树,它不使用平衡因子来维护树的形状,而是使用红黑节点来决定,使得最长节点的长度...原创 2019-10-03 16:07:19 · 199 阅读 · 0 评论 -
二叉搜索树
二叉搜索树(BST)——基本概念及基本实现代码二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树例如下图为一个二叉搜索树:二叉搜索树的操作包括查找,插入,删除等其中需要特别注意的是删除操作。二叉...原创 2019-09-30 21:55:48 · 119 阅读 · 0 评论 -
C++编译器模板机制剖析
思考:为什么函数模板可以和函数重载放在一块。C++编译器是如何提供函数模板机制的?一、编译器编译原理什么是gcc gcc(GNU C Compiler)编译器的作者是Richard Stallman,也是GNU项目的奠基者。 什么是gcc:gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器(GNU C Compiler),现...转载 2019-09-30 18:59:25 · 210 阅读 · 0 评论 -
string基础模拟实现深浅拷贝
string实现string(const char* str)string(string&string)operator=(string &string)~string()为什么要有深拷贝?浅拷贝又称为位拷贝,是将资源按位拷贝,如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,造成重...原创 2019-09-29 21:00:53 · 129 阅读 · 0 评论 -
剑指offer(1-20)
1.定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:需要两个栈,主栈和辅助栈,每次插入主栈的值时确定,插入的值比辅助栈top大还是比辅助栈top小,只有在辅助栈的size为0或者比辅助栈小的情况下入辅助栈栈,pop操作也是同理,pop的值与辅助栈做比较,当相同时辅助栈做出栈操作。class Solution {public: ...原创 2019-09-27 21:24:43 · 108 阅读 · 0 评论 -
自定义str函数
// ConsoleApplication32.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <stdio.h>#include <assert.h>#include <string.h>char* my_strcpy(char* copy, const char* proto){ char* r...原创 2019-09-04 23:13:11 · 297 阅读 · 0 评论 -
C语言扫雷
// ConsoleApplication31.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>#include <math.h>#include <time.h>#define ROW 9#define COL 9using namespace std;void menu(...原创 2019-09-04 20:33:41 · 123 阅读 · 0 评论 -
浏览器中输入url后发生的事情
浏览器中输入url后发生的事情有什么?这是面试的时候可能会遇到的问题,下面是我根据从图解http和网上的博客中学习整理的过程,如果哪一步有问题,希望正指出来,十分感谢。输入url后可以大概分为六个部分DNS域名解析建立TCP连接发起HTTP请求接受响应结果浏览器解析html浏览器布局渲染在说明这之前我们需要知道数据传输的层次顺序(图一选自图解http协议1.3.3 TCP/I...原创 2019-09-02 23:11:05 · 223 阅读 · 0 评论 -
linux(5)写一个私人shell
在我们学了fork,wait,exec等函数后,就可以尝试写一个我们私人的shell,下面是我的源代码。#include <unistd.h>#include <string.h>#include <iostream>#include <stdlib.h>#include <sys/wait.h>#include <st...原创 2019-07-27 16:59:31 · 164 阅读 · 0 评论 -
每日一题(33)
链接:https://www.nowcoder.com/questionTerminal/5973a31d58234b068fa1fe34f7290855来源:牛客网NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人...原创 2019-07-11 17:07:10 · 415 阅读 · 0 评论 -
linux(1)常见指令及使用
在配置好环境后,我们需要对linux的基本指令了解并且使用1. ls指令功能:列出该目录的所有子目录与文件,对于文件列出文件名及其属性信息常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件...原创 2019-07-15 19:16:57 · 196 阅读 · 0 评论 -
每日一题(32)
链接:https://www.nowcoder.com/questionTerminal/1046cd038f7a4b04b2b77b415973de1c来源:牛客网一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?输入描述:输入包含多组数据。每组数据包含两个字符串s,t,分别是成对出现的花布条和...原创 2019-07-10 15:14:28 · 282 阅读 · 0 评论 -
源代码:堆
头文件#include <stdio.h>#include <assert.h>#include <malloc.h>#include <string.h>#include <time.h>#include <windows.h>#include <math.h>结构体组成typedef原创 2019-01-16 00:17:03 · 205 阅读 · 0 评论 -
学习之路:C++模板
什么是C++的模板?模板在生活中用处很大,类似流水线作用,手机外壳的制作等方方面面都离不开模板,原创 2019-01-21 18:26:31 · 127 阅读 · 0 评论 -
学习之路:C/C++内存管理
在C中内存分布为:代码段:储存可执行代码和只读常量数据段:全局数据和静态数据堆:用于程序运行时动态内存分配,C中可以用malloc,C++中用new分配,在内存上是向上增长的栈:又叫栈堆,储存非静态局部变量,函数返回值,函数参数等,是向下增长的内核空间:内核总是驻留在内存中,是操作系统的一部分。内核空间为内核保留,不允许应用程序读写该区域的内容或直接调用内核代码定义的函数(还有内存映...原创 2019-01-21 16:53:20 · 138 阅读 · 0 评论 -
C++类与对象(中)
1.类的6个默认成员函数类六个默认函数包括构造、拷贝构造、析构、赋值运算符重载、取地址操作符重载、const修饰的取地址操作符重载,默认生成2.构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次特性如下1. 函数名与类名相同。2. 无返回值。(也没有void返回值...原创 2019-01-15 17:34:22 · 149 阅读 · 0 评论 -
二叉树的基本操作
以下为二叉树的性质//树的存储形式-->双亲,孩子,孩子双亲,孩子兄弟表示法 //二叉树的存储//完全二叉树:如果一棵有N个节点的二叉树的结构与满二叉树的前N个//节点的结构相同,称为完全二叉树//二叉树的性质:若规定根层数为1则第i层最多有2的i-1次方// 最多有2的i次方减一个节点//对任何二叉树,如果其叶节点个数为n0,度为2的非叶节点为n2...原创 2019-01-09 18:36:28 · 142 阅读 · 0 评论 -
C++类与对象(上)
类与对象在现实生活中有很多的东西,例如动物植物昆虫等,他们都有自己的属性与特点,例如年龄外貌体积等,人们通过归纳总结,把他们的特点记录下来,然后就根据这些特点来确定一个物体到底属于什么类似的在C++世界里,我们先设置一个类再用类来产生东西,也就是实例。C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分...原创 2019-01-14 21:47:52 · 208 阅读 · 0 评论 -
C++入门
1. C++关键字 c的关键字有32个关键字,而c++大约是c的两倍可以看出c语言的关键字都在c++的范围内,同时c++兼容大部分的c语言特性,所以学好c语言对c++的学习有促进作用 #include <iostream>int main(){std::cout<<"hello world"<<std::endl;}可以看...原创 2019-01-13 15:26:30 · 667 阅读 · 0 评论