自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (4)
  • 收藏
  • 关注

原创 ucore lab1结合原理的实现

首先,从计算机硬件启动开始说起,开始启动的时候,CPU产生一个RESET,设定一些处理器,从ROM的0Xfffffff0开始执行,进行POST(上电自检),初始化硬件设备,紧接着搜索操作系统来启动,在这个过程中试图访问磁盘的第一个扇区也称为引导扇区(512个字节),只要能找到一个有效的磁盘,那就将这个扇区拷贝到内存0x00007c00开始的位置,跳转,加载这个扇区的代码,也就是bootloader

2018-01-07 20:24:47 1066

原创 生产者消费者,多线程问题

生产者消费者问题

2017-12-30 15:52:50 400

原创 两个线程共享一个数据的实验

两个线程共享一个数据,会进行串改,解决方案

2017-12-30 14:07:45 732 1

原创 进程间利用管道进行通信:打印斐波那契数列

进程间利用管道进行通信:打印斐波那契数列

2017-12-30 13:44:24 515

原创 TCP/TP基础(二)以太网协议,ARP协议,ICMP协议

(1)最大传输单元MTU以太网和IEEE 802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作M T U,最大传输单元。不同类型的网络大多数都有一个上限。如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。路径MTU

2017-12-22 13:07:37 1535

原创 TCP/IP基础(一)OSI7层模型、TCP4层模型、封装与分用

OSI7层模型、TCP4层模型、封装与分用、端口

2017-12-22 12:41:01 7328 1

原创 new和delete续

new和delete的重载和示例,多参数的重载及示例,string类当中的应用

2017-12-17 19:27:57 208

原创 object Model(对象模型):关于vptr和vtbl

这里设置了3个class,A,B,C之间是继承的关系,A有之间的data1和2,B继承了A,有了A的数据,然后加上自己的数据,C也是。如果一个类里面有一个虚函数,这个对象里面就会多了一个指针,指向虚函数表。如果父类有虚函数,子类一定有,会继承父类虚函数的调用权,这时候以B为例子,B推翻了vfunc1()重载了,留下了vfunc2().vptr关联了vtbl(里面都是函数指针)然后关联了

2017-12-17 16:41:20 1087

原创 数量不定的模板参数、auto、for的新形式、reference

1、variadic template(c++11)void print(){}templatevoid print(const T& firstArg,const Types&... args){ cout << firstArg << endl; print(args...);}测试代码:print(7.5,"hello",bitset(377),42);...在这里表

2017-12-17 14:55:39 386

原创 成员模板、模板的偏特化和特化、模板模板参数

成员模板就是在一个类里面再声明一个模板,一般来说这个模板是为了能够在类里面实现利用派生类对其进行一个初始化。为了设计一个构造函数,以pair为例子。利用派生类鲫鱼和麻雀,来构造父类的对象,鱼类和鸟类。这就是成员模板在标准库里的用途。模板的特化:template struct hash{};//泛化template<>//特化struct hash{ size_t o

2017-12-10 14:44:06 667 1

原创 智能指针(pointer like class)和仿函数(function like class)

智能指针的语法使用,*以及->重载,仿函数的形式

2017-12-10 13:19:30 558

原创 转换函数与显式构造

转换函数,谁把谁转成什么呢。再考虑一下这个函数出现的位置,我们就可以知道,把一个class转换为另一种类型,这种类型可以自己来定义。class A{public: A(int num,int den = 1):num(num),den(den){} operator double() const{//转换函数不可能去改变里面的数据,所以const return (

2017-12-10 11:12:03 210

原创 第十二章 使用结构和指针

单链表,利用二重指针实现,为什么要用二重指针的过程,双链表的实现,如何简化if else语句,作业题单链表的反转与删除

2017-12-08 16:31:20 201

原创 第十章结构和联合、十一章动态内存分配

第十章结构C语言中的结构就是Struct,几个特点注意:1、不能自引用。要用自身必须要用指针。2、复合使用2个结构体,需要在前面使用不完整声明例如struct B;struct A{ struct B;...}struct B{...}3、结构的存储分配需要满足边界对齐条件,如:struct ALIGN{ char a; int b;

2017-12-08 16:07:50 182

原创 第九章:字符串、字符和字节

对字符串操作进行一个回顾

2017-12-08 15:38:40 193

原创 第七章:函数、第八章:数组

小结函数这一章,分析了数组和指针下标的优劣性,考虑了怎么提高使用指针的效率,多维数组,指针数组的初始化以及函数的形参问题,对于表格,二维数组矩阵的乘法,8皇后问题进行解答

2017-12-08 15:06:54 226

原创 第六章课后题:质数Eratosthenes筛选法

#include #include #include #include void isprime(int *a,int n){ memset(a,1,n*sizeof(a[0]));//利用a数组做标记,看这个数是不是不是质数 for (int i = 2; i <= sqrt(n+0.1); i++) { if(a[i]) for (int j = i*i; j <=

2017-12-08 13:34:56 234

原创 第六章:指针

一、先来看定义式:int a = 300;int b* = &a;这时候b的内存里面存的是a的地址,a的内存地址里面存300。比如这时候设置一个int* c =b;一个指针作为右值,是把它的值交出去,所以c得到了a的地址,如果是作为左值,就是获得右值放入自己的地址内容里。这非常重要!!当然*b就是间接访问,由于b的值是一个地址,然后就可以对这个地址取值,就取了a的值。二、未初始

2017-12-08 13:26:32 239

原创 第十七章经典抽象数据结构四:树的前中后序遍历

#include "tree.h"#include #include #include #include using namespace std;stack mystack;stack poststack;//********************递归版***********************////void do_pre_order(Node* tree){//递归实现

2017-12-07 20:52:44 230

原创 利用随机数函数掷骰子

//首先掷骰子需要概率相等,如果随机数生成0到32767,那么这些值的概率就不是相等的,32766,32767返回的值是0,1会增加概率//所以,一旦出现就重新生成.#include #include #include #include const unsigned int MAX_OK_RAND = (RAND_MAX/6)*6-1;//(int)((((long)RAND_MAX

2017-12-07 14:35:17 2038

原创 树用链表实现(链表使用二重指针减少判断以及空间复杂度)

首先定义每一个结点:struct Node{ int value; Node* left; Node* right;};查找函数:Node** find(int i){ Node* tmp; Node** link =&root; while ((tmp=*link) != NULL) { if(tmp->value > i) link = &tmp->left

2017-12-07 13:03:42 478

原创 第十七章经典抽象数据结构二:树(数组实现)

二叉搜索树插入:可以首先要判断树是不是为空(针对链表结构是必须的,因为要分配动态内存),然后插入。有2种选择,递归和循环,因为递归是尾部递归,牺牲了空间复杂度获得了可读性,可以转换为循环。删除结点:分为3种情况:1、删除没有孩子的结点,直接删除2、删除只有一个孩子的结点,删除原有结点,指向孩子结点。3、删除有2个孩子的结点,删除左子树的最大结点,把值放在当前结点。代码实

2017-12-06 20:49:11 222

原创 第十七章经典抽象数据类型(一)

堆栈,没什么太多要总结的,主要是实现问题,这里自己实现了一下,当然从书本中吸取到的是程序代码效率的提升和assert断言的应用判断。代码的提升在于top_element的初值是0和1,对于push,pop本来就要改变的函数来说没什么变化,但是对于top这样的函数,只需要返回其顶部数据,但是每一次都要-1的话,就会成为很大的困扰,汇编出来的时候,必然会减去1乘以这个数组的类型大小,这就使得效率降

2017-12-05 21:17:26 169

原创 第四章:语句与第五章:操作符和表达式

第四章的语句没有什么特别的东西,都是if,while,for,等正常使用的语句,唯一需要注意的是,switch语句中加default语句形成好习惯,之后的学习中会提到使用函数指针来形成转接表代替某些switch操作。goto语句不提倡使用虽然可以从最内层的循环直接跳出,但是很危险,容易产生依赖,跳出内层循环可以以如下的方式进行:enum{exit,ok} status;status =

2017-12-05 19:22:06 186

原创 第二、三章小结

第二章主要是阐述了C语言的环境:编译和执行。在编译中基本上编译器分为4部分动作:1.由预处理器进行处理,执行一些文本操作,#define以及#include这些动作2.编译,-s把代码翻译成汇编语言3.汇编,把汇编语言翻译成二进制文件,也就是各个目标代码4.链接,最后把目标代码捆绑在一起,同时引入标准库的函数程序。第三章主要是通过数据来描述各个类型:1.为了保持可移植性

2017-12-05 18:23:48 171

原创 第一章:快速上手注意点

给出第一章的源代码,简要的述说一下注意事项(平时在编程中经常会忘记的)#include #include #include #define MAX_COLS 20 /* max # of columns to process */#define MAX_INPUT 1000 /* max len of input & output lines */int read_column

2017-12-05 16:39:14 221

原创 以简单的设计模式代码阐述如何设计委托

先来看看composite组合模式下,是怎么实现委托的,如果现在面对一个问题,file system,有目录,目录里可以放文件,目录还能和其他的文件结合在一起放在另外的目录里面,这时候需要写个个体,需要一个组合物,这个组合物应该可以容纳组合物和个体,那么如何做到,一个容器容纳2个不同的东西,除非他们是is a拥有父类,这样其实就是属于同一种东西,只是不同的表现罢了,所以由如下的关系图:clas

2017-12-04 22:26:10 199

原创 侯捷老师的虚函数和多态小结

一个类中成员函数分为3种:non-virtual:不希望派生类对其进行重写(override).virtual:希望派生类对其进行重写(override).pure-virtual(纯虚函数):希望派生类一定要对其进行重写class Shape{public: virtual void draw() const =0;//pure-virtual virtual

2017-12-04 18:48:39 481

原创 面向对象编程的3种关系:组合,委托和继承

看了侯捷老师一节课的视频,做一个记录和小结,在OOP语言中,面向对象编程,类和类之间有3种关系:1)Inheritance(继承)2)Composition(复合)3)Delegation(委托)先从Compositon开始讲起,其实在C语言中也见到过,一个结构体里面包含另外一个结构体,在C++中复合也是一样的,侯捷老师以标准库来形象的说明了这种情况,在queue类中包含了dequ

2017-12-03 22:10:00 5080

原创 浅谈static、类模板和函数模板

首先,我们先来看static,从C语言我们知道,他是一个静态变量的标识符,可以让一个变量在离开作用域后,还能够存活。那么如果我们在类当中定义了一个static数据会怎么样,这个static数据会在程序开始前就会存在,而且仅此一份。那么static function呢,简而言之就是,操纵static变量的函数,举个例子,现在我们要计算一个基金增长利率,那么这个利率对于所有的对象来说,都是一样的,那么

2017-12-03 15:31:55 2093

原创 C++编程中类class的编写(二):含指针数据的类

从上一篇文章一中,我们提到过编写的类分为2种,在这里再对含指针数据的类来进行考量,对于含指针数据的类,必须要进行自己编写拷贝构造和拷贝赋值(为了防止浅拷贝也就是2个对象的指针数据指向同一块内存单元),同时也必须使用析构函数(对于指针进行了new或者malloc进行动态分配,必须回收资源),那么由此以编写简单的string类做一个总结:class String{private: char*

2017-12-03 11:24:29 582

原创 观侯捷老师new和delete以及malloc在vc当中调试模式和运行下分配内存

在讲到new和delete不得不想到c语言中的malloc and free 以及其经常用于动态内存分配,而简单来说,动态内存分配在堆中,不会因为离开作用域而删除,而栈中存储的一般为函数参数,返回值以及作用域下的local orient.那我们可想而知的是,在函数中如果我创建指针,肯定为了不浪费内存,我们选择动态分配内存的方式,那么就是利用C++中的new或者c中的malloc,我们需要养成一

2017-12-02 19:53:10 656 5

原创 C++编程中类CALSS的编写(一):不含指针数据的类

首先,在我理解当中,C++编程中的类可以分为两种类型,第一种是包含指针的,另一种则是不包含的,不包含指针的类,其中private里填写自己的数据,这时候其中的数据类型比如int,double,float等等类型都是标准库里面已经写好的,也自动为我们分配了内存,不用去考虑内存分配问题,也就不会有别名的问题产生,当然此时,析构函数也不用编写了,在程序结束的时候,自动析构。此时主要编写的程序有构造函数,

2017-12-02 17:55:16 553

深入理解计算机系统视频CMU的 带字幕 CSAPP

卡内基梅隆大学的神课视频,有字幕,csapp,深入理解计算机系统,17年到18年最新版视频(【公开课】【含自动字幕】CMU计算机必修课 15-213: Introduction to Computer Systems(2017年秋季) 2017年秋季,由 Randy Bryant 和 Phil Gibbons 授课,共28讲 bilibili)

2018-05-08

博览网 陈硕网络编程实战 绝对有效

博览网 网络编程实战,陈硕400块的视频,均正确录制,保证有效

2017-12-20

中科院关于人工智能机器学习,模式识别的视频资源

中科院关于人工智能,机器学习,计算机视觉,模式识别,矩阵分析等等资源

2017-12-20

c++教程网的linux网络编程视频下载

教程非常不错,价值280元,绝对是干货 Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RARP 03TCPIP基础(三) IP数据报格式 网际校验和 路由 04TCPIP基础(四) TCP特点 TCP报文格式 连接建立三次握手 连接终止四次握手 TCP如何保证可靠性 05TCPIP基础(五) 滑动窗口协议 UDP特点 UDP报文格式 Linux网络编程之socket编程篇 06socket编程(一) 什么是socket IPv4套接口地址结构 网络字节序 字节序转换函数 地址转换函数 套接字类型 07socket编程(二) TCP客户/服务器模型 回射客户/服务器 socket、bind、listen、accept、connect 08socket编程(三) SO_REUSEADDR 处理多客户连接(process-per-conection) 点对点聊天程序实现 09socket编程(四) 流协议与粘包 粘包产生的原因 粘包处理方案 readn writen 回射客户/服务器 10socket编程(五) read、write与recv、send readline实现 用readline实现回射客户/服务器 getsockname、getpeername gethostname、gethostbyname、gethostbyaddr 11socket编程(六) TCP回射客户/服务器 TCP是个流协议 僵进程与SIGCHLD信号 12socket编程(七) TCP 11种状态 连接建立三次握手、连接终止四次握手 TIME_WAIT与SO_REUSEADDR SIGPIPE 13socket编程(八) 五种I/O模型 select 用select改进回射客户端程序 14socket编程(九) select 读、写、异常事件发生条件 用select改进回射服务器程序。 15socket编程(十) 用select改进第八章点对点聊天程序 16socket编程(十一) 套接字I/O超时设置方法 用select实现超时 read_timeout函数封装 write_timeout函数封装 accept_timeout函数封装 connect_timeout函数封装 17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程(十五) udp聊天室实现 21socket编程(十六) UNIX域协议特点 UNIX域地址结构 UNIX域字节流回射客户/服务 UNIX域套接字编程注意点 22socket编程(十七) socketpair sendmsg/recvmsg UNIX域套接字传递描述符字 Linux网络编程之进程间通信篇 23进程间通信介绍(一) 进程同步与进程互斥 进程间通信目的 进程间通信发展 进程间通信分类 进程间共享信息的三种方式 IPC对象的持续性 24进程间通信介绍(二) 死锁 信号量 PV原语 用PV原语解决司机与售票员问题 用PV原语解决民航售票问题 用PV原语解决汽车租赁问题 25System V消息队列(一) 消息队列 IPC对象数据结构 消息队列结构 消息队列在内核中的表示 消息队列函数 26System V消息队列(二) msgsnd函数 msgrcv函数 27System V消息队列(三) 消息队列实现回射客户/服务器 28共享内存介绍 共享内存 共享内存示意图 管道、消息队列与共享内存传递数据对比 mmap函数 munmap函数 msync函数 29System V共享内存 共享内存数据结构 共享内存函数 共享内存示例 30System V信号量(一) 信号量 信号量集结构 信号量集函数 信号量示例 31System V信号量(二) 用信号量实现进程互斥示例 32System V信号量(三) 用信号集解决哲学家就餐问题 33System V共享内存与信号量综合 用信号量解决生产者消费者问题 实现shmfifo 34POSIX消息队列 POSIX消息队列相关函数 POSIX消息队列示例 35POSIX共享内存 POSIX共享内存相关函数 POSIX共享内存示例 Linux网络编程之线程篇 36线程介绍 什么是线程 进程与线程 线程优缺点 线程模型 N:1用户线程模型 1:1核心线程模型 N:M混合线程模型 37POSIX线程(一) POSIX线程库相关函数 用线程实现回射客户/服务器 38POSIX线程(二) 线程属性 线程特定数据 39POSIX信号量与互斥锁 POSIX信号量相关函数 POSIX互斥锁相关函数 生产者消费者问题 自旋锁与读写锁介绍 40POSIX条件变量 条件变量 条件变量函数 条件变量使用规范 使用条件变量解决生产者消费者问题 41一个简单的线程池实现 线程池性能分析 线程池实现 网络编程, Linux, 密码

2017-12-20

空空如也

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

TA关注的人

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