
作业
心怀梦想的咸鱼
这个作者很懒,什么都没留下…
展开
-
linux(7)进程间通讯
进程运行时时具有独立性的,让它本身通信是困难的,所以进程通信的前提条件是让进程看到同一份资源(通常指的是某一块内存)**进程间通信的目的**...原创 2019-11-03 16:05:57 · 155 阅读 · 0 评论 -
[网络]——TCP协议分析
TCP有关的资料和书籍,网上搜索恐怕汗牛充栋,我写这篇博客也是为了学习巩固,参考了《计算机网络》和goole的很多博客,毕竟站在巨人的肩膀上才能看的更高走的更远。1.TCP协议TCP协议属于TCP/IP协议中的传输层协议,有以下几个特点。TCP是面向连接的运输层协议。每一条TCP连接只能点对点TCP提供可靠交付的服务TCP提供全双工通讯面向字节流。TCP是面向连接的传输层协...原创 2019-11-02 20:22:30 · 1903 阅读 · 0 评论 -
[网络]——编程套接字和BSD相关API
终于完成了linux的几种设计模式来到了网络的章节,在这里我们可以尝试实现TCP,UDP的c/s服务器,不过在这之前,首先了解网络编程的一些基础概念。套接字套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 ...原创 2019-11-01 12:05:34 · 534 阅读 · 0 评论 -
C语言复习:原反补码
这篇博客是对于我个人的知识的复习,当然如果有某位大佬能够指出这里面有哪些概念含糊不清或者难懂,麻烦指出来感激不尽。原反补码放出链接原返补码深入探究在大学的C语言课堂上,可能就接触到了原反补码的概念,大学老师说,正数的原反补码就它本身,负数的反码就是符号位不变,其他数值取反,补码则是反码+1.但是为什么,我从大一开始就有这个疑惑,为什么正数就不用变,负数则要这么复杂?直到我拜读了刀斧手...原创 2019-10-25 17:14:52 · 540 阅读 · 0 评论 -
海量数据判重——布隆过滤器(Bloom filter)
布隆过滤器布隆过滤器(Bloom filter)是一个高空间利用率数据结构,由Burton Bloom于1970年提出。被用于测试一个元素是否在集合中(由于集合无重复元素的性质,可用来判重)。布隆过滤器的优势布隆过滤器的思想类似位图,主要是由一个很长的二进制向量和若干个(k个)散列映射函数组成。因为每个元数据的存储信息值固定,而且总的二进制向量固定。所以在内存占用和查询时间上都远远超过一般的...原创 2019-10-06 16:15:40 · 633 阅读 · 0 评论 -
位图
位图今天介绍的数据结构叫做位图,在介绍之前,首先看一道“简单”的题目,给出40亿个数据,给出一个四位数字,判断该数字是否在这四十亿个数字中。这道题难点并不在思路,之前我们使用的链表红黑树等算法思想都能解决这个问题,但是有一点无法解决,40亿个数太太太太大了,换算成int类型大约16G大小的空间,计算机的内存可不一定够,聪明的读者可能想到了char类型来出错结构,从16G的需求降低到4G的...原创 2019-10-06 13:24:16 · 200 阅读 · 0 评论 -
哈希表
哈希表在之前实现的数据结构中,查找一个数据在顺序表中的时间复杂度为O(n),在平衡二叉树和树的高度有关,为O(logn)。但是理想状态下的数据的查询为O(1),有没有数据结构能够实现?从标题就知道今天要介绍的数据结构是哈希表,但是在介绍之前,先介绍哈希。哈希是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。通过映射的方式将数据存在表中,...原创 2019-10-04 21:46:13 · 364 阅读 · 0 评论 -
红黑树
之前博客实现了AVL树,但是AVL树的频繁的插入和删除,会引起频繁的rebalance,导致效率下降;红黑树不是高度平衡的,算是一种折中,插入最多两次旋转,删除最多三次旋转。所以红黑树在查找,插入删除的性能都是O(logn),且性能稳定,所以STL里面很多结构包括map底层实现都是使用的红黑树。红黑树也是一种二叉平衡树,它不使用平衡因子来维护树的形状,而是使用红黑节点来决定,使得最长节点的长度...原创 2019-10-03 16:07:19 · 233 阅读 · 0 评论 -
二叉搜索树
二叉搜索树(BST)——基本概念及基本实现代码二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树例如下图为一个二叉搜索树:二叉搜索树的操作包括查找,插入,删除等其中需要特别注意的是删除操作。二叉...原创 2019-09-30 21:55:48 · 150 阅读 · 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 · 233 阅读 · 0 评论 -
string基础模拟实现深浅拷贝
string实现string(const char* str)string(string&string)operator=(string &string)~string()为什么要有深拷贝?浅拷贝又称为位拷贝,是将资源按位拷贝,如果对象中管理资源,最后就会导致多个对象共享同一份资源,当一个对象销毁时就会将该资源释放掉,而此时另一些对象不知道该资源已经被释放,造成重...原创 2019-09-29 21:00:53 · 149 阅读 · 0 评论 -
剑指offer(1-20)
1.定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:需要两个栈,主栈和辅助栈,每次插入主栈的值时确定,插入的值比辅助栈top大还是比辅助栈top小,只有在辅助栈的size为0或者比辅助栈小的情况下入辅助栈栈,pop操作也是同理,pop的值与辅助栈做比较,当相同时辅助栈做出栈操作。class Solution {public: ...原创 2019-09-27 21:24:43 · 135 阅读 · 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 · 328 阅读 · 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 · 141 阅读 · 0 评论 -
浏览器中输入url后发生的事情
浏览器中输入url后发生的事情有什么?这是面试的时候可能会遇到的问题,下面是我根据从图解http和网上的博客中学习整理的过程,如果哪一步有问题,希望正指出来,十分感谢。输入url后可以大概分为六个部分DNS域名解析建立TCP连接发起HTTP请求接受响应结果浏览器解析html浏览器布局渲染在说明这之前我们需要知道数据传输的层次顺序(图一选自图解http协议1.3.3 TCP/I...原创 2019-09-02 23:11:05 · 250 阅读 · 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 · 229 阅读 · 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 · 597 阅读 · 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 · 186 阅读 · 0 评论 -
linux(4)进程控制
fork函数,在我的前几篇博客中已经使用,在这篇博客里我们具体谈谈fork函数的相关知识fork函数的说明如下fork的功能是创建一个子进程,并且返回两个值,对于父进程返回子进程的PID,对于子进程返回0,这些在前面都说过了,不再浪费时间。当进程调用fork时,内核会做的事情如下分配新的内存块和内核数据结构给子进程将父进程的部分数据结构内容拷贝至子进程添加子进程到系统进程列表中...原创 2019-07-25 23:13:51 · 444 阅读 · 0 评论 -
linux(3)进程的地址空间
在C语言刚入门的时候我们曾经见过这一个图片当时我们认为这就是内存,但是今天我们要推翻这个结论,它的真实名字叫进程的地址空间。我们对地址空间先描述再组织,它是一个结构体存在很多的区间,通过调节区间的开始值和结束值来管理虚拟地址。运行如下代码#include <iostream>#include <stdlib.h>#include <unistd.h>...原创 2019-07-25 00:07:25 · 192 阅读 · 0 评论 -
网络基础---NAT穿越技术
1.NAT技术背景在ipv4的协议中一共有32位用来表示ip地址,所以理论上ip地址是42亿9千万,再去除某些特殊ip无法使用,ip地址是远不足42亿,所以NAT技术是为了解决ip地址不足问题的技术,也是路由器的一个重要功能。2.NAT IP转换过程...转载 2019-07-24 00:28:05 · 2498 阅读 · 0 评论 -
DNS解析地址
1.DNS域名解析1.1 DNS产生背景用户与互联网的某台主机进行通讯时必须知道对方的IP地址,但是要用户很记住32位ip地址时件很反人类的事情(即使是用点分十进制也不容易记住),而我们睿智的程序员早已经料到这一点,在应用层为了方便用户记忆,连接在互联网上的主机不仅有ip地址还有主机名字。DNS域名系统能够把主机的名字转换为ip地址。在上古年代,准确的说是在APRPANET(1969年),整...原创 2019-07-22 21:36:03 · 2878 阅读 · 0 评论 -
linux(2)进程基础
在我们配置好环境,掌握了linux系统的基本指令后,就要接触进程这一概念,不过在接触进程前我们首先要了解一个概念操作系统原创 2019-07-21 14:05:16 · 221 阅读 · 0 评论 -
网络基础---数据链路层
在网络的应用层 传输层 网络层 数据链路层 物理层中我的上一篇博客粗略的介绍了网络层的ip协议,在这篇博客你将花费8分钟看有关数据链路层的有关信息1.对比理解“网络层”和“数据链路层”假如有一个主机A想要发送主机B一些数据报文,这些数据报文会从路由器转发到主机B的局域网,再从局域网里给主机B发送数据报文,这个工作就是网络层的IP协议所干的事情。ip协议能够让数据报文从A主机运送到B主...原创 2019-07-20 17:06:45 · 315 阅读 · 0 评论 -
网络基础----子网,IP和网段划分
1.什么是网络划分,网络划分的目的是为了什么?在回答这两个问题之前,我们需要知道ip地址的概念,ip地址一共有32比特位,它由两部分构成,网络号和主机号。两个部分组合在一起就构成了一台主机的地址,这个ip地址有什么用?通过名字就可以看出ip地址类似门牌号,网络号就保证相互连接的两个网段具有不同的标识,主机号:同一网段内,主机之间有相同的网络号当不能有相同的主机号。有相同的网络号的主机构成了...原创 2019-07-19 16:53:41 · 6404 阅读 · 0 评论 -
网络基础---ip协议
基本概念:主机:配有ip地址,但不进行路由控制的设备:路由器:既配有ip地址,又进行路由控制;节点:路由器和主机的统称ip协议处于TCP/IP模型中的中间网络层,可谓是上有老下有小,既为上层的传输层(TCP,UDP)服务,又调用数据链路层传输数据。在这里我们认为 ip协议是有能力将数据从A主机传入B主机的。但是有能力不代表一定能做到,举个例子你二大爷家的孙子次次考试都考700多分,我们...原创 2019-07-18 19:05:55 · 211 阅读 · 0 评论 -
每日一题(38)
链接:https://www.nowcoder.com/questionTerminal/bb4f1a23dbb84fd7b77be1fbe9eaaf32?pos=100&orderByHotValue=1来源:牛客网[编程题]乒乓球筐热度指数:1434时间限制:1秒空间限制:32768K算法知识视频讲解nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要...原创 2019-07-17 12:27:32 · 448 阅读 · 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 · 337 阅读 · 0 评论 -
每日一题(36)
链接:https://www.nowcoder.com/questionTerminal/ceb89f19187b4de3997d9cdef2d551e8?source=relative来源:牛客网编程题]电话号码热度指数:514时间限制:1秒空间限制:32768K算法知识视频讲解上图是一个电话的九宫格,如你所见一个数字对应一些字母,因此在国外企业喜欢把电话号码设计成与自己公司名字相对应...原创 2019-07-16 13:40:41 · 252 阅读 · 0 评论 -
linux(1)常见指令及使用
在配置好环境后,我们需要对linux的基本指令了解并且使用1. ls指令功能:列出该目录的所有子目录与文件,对于文件列出文件名及其属性信息常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件...原创 2019-07-15 19:16:57 · 218 阅读 · 0 评论 -
每日一题(35)
链接:https://www.nowcoder.com/questionTerminal/b388bdee5e3e4b1c86a79ad1877a3aa4?toCommentId=400703来源:牛客网Each input file contains one test case, which gives in one line the two rational numbers in ...转载 2019-07-13 23:48:07 · 210 阅读 · 0 评论 -
每日一题(34)
链接:https://www.nowcoder.com/questionTerminal/610e6c0387a0401fb96675f58cda8559?toCommentId=25418来源:牛客网[编程题]年会抽奖热度指数:1859时间限制:1秒空间限制:32768K算法知识视频讲解今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽...原创 2019-07-12 12:38:05 · 256 阅读 · 0 评论 -
每日一题(33)
链接:https://www.nowcoder.com/questionTerminal/5973a31d58234b068fa1fe34f7290855来源:牛客网NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人...原创 2019-07-11 17:07:10 · 448 阅读 · 0 评论 -
每日一题(32)
链接:https://www.nowcoder.com/questionTerminal/1046cd038f7a4b04b2b77b415973de1c来源:牛客网一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?输入描述:输入包含多组数据。每组数据包含两个字符串s,t,分别是成对出现的花布条和...原创 2019-07-10 15:14:28 · 327 阅读 · 0 评论 -
每日一题(31)
链接:https://www.nowcoder.com/questionTerminal/754921e9c98b43d1b2d70c227b844101来源:牛客网NowCoder在淘宝上开了一家网店。他发现在月份为素数的时候,当月每天能赚1元;否则每天能赚2元。现在给你一段时间区间,请你帮他计算总收益有多少。思路:用两个数组来记录每个月的天数,和每个月每天的收益,用迭代来...原创 2019-07-09 22:00:00 · 785 阅读 · 0 评论 -
Linux初次学习(一)环境的配置
Linux有多个版本例如著名的red hat centos等版本,这里我选择centos的版本进行下载,首先下载VMware Workstation Pro用于虚拟机配置,再进centos官网下载镜像文件(这里我选择DVD版本),最后我选择下载xshell6用来管理linux虚拟机,再VMware Workstation Pro的linux虚拟机中我个人认为作为linux的学习者,选择最小化安...原创 2019-07-07 19:20:09 · 162 阅读 · 0 评论 -
mysql的学习笔记
这篇博客是对我自己的学习的一个记录。1.如何设计一张表?确定需求找到对象(明确的实体)找到关系确定属性确定属性类型以及其他越是可以有优化的进阶部分2.对于表的增删改查没什么可说的,值得注意的是有一个truncate + 表名功能是把表截断,不要在生产环境用。如果要在生产环境中修改表的结构,通常会导致短时间内的服务停止,这是不能允许的,所以一般的做法是,先用一个表拷贝现有的旧表,...原创 2019-05-28 02:52:45 · 93 阅读 · 0 评论 -
C++智能指针
看智能指针前要看下面四个问题1.为什么需要智能指针?答:在申请资源时通常有借有还,例如new了一份地址空间,就要delete回来,malloc分配,free归还,而如果由程序员来写,不仅费时费力,更重要的是,可能会有突发事件,如new和delete中间抛异常或者return返回值,导致内存泄漏,这个时候我们就需要一个能够自动管理指针,释放资源的对象,避免内存泄漏,智能指针就是这个对象。2.什...原创 2019-05-26 20:58:32 · 236 阅读 · 0 评论 -
C++面试题:写出只允许定义在堆上的类,只允许定义在栈上的类。
面试题1.写出只允许定义在堆上的类class onlyheap{ public: static onlyheap* getheap() { return new onlyheap; } private: onlyheap() { cout<<"正在调用构造函数"; }; onlyheap(onlyheap &heap);}; ...原创 2019-05-13 23:56:36 · 299 阅读 · 0 评论 -
C++里new 和 delete new[] delete[]
new源代码如下void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc){ // try to allocate size bytes void *p; while ((p = malloc(size)) == 0) if (_callnewh(size) == 0) { // report no memor...原创 2019-05-12 11:10:30 · 239 阅读 · 0 评论