- 博客(29)
- 收藏
- 关注
原创 轻松分享------基于HTTP的文件共享系统
文章目录项目名称项目简绍开发环境使用技术模块简绍项目源码项目流程图总结问题1问题2改进 项目名称 基于HTTP服务器的共享文件系统 项目简绍 通过HTTP服务器基于C++ 设计出客户端与服务器交互的共享文件系统 ,用户可以通过网页的形式上传或者下载网页中的文件, 也可以浏览文件内容 开发环境 Linux 服务器 , g++ 编译器 , vim编辑器 , gdb 调试器 , make工具 使用技术 ...
2020-03-24 12:08:04
3105
原创 tcpsocket / udpsocket
/*封装一个tcpsocket类向外提供简单接口,能够实现客户端服务端编程流程*/ /*1.创建套接字 2.绑定地址信息 3.开始监听/发起连接请求 4获取已完成链接 5发送数据 6接收数据 7关闭套接字*/ #include <iostream> #include <string> #include <unistd.h> #include <netine...
2020-02-19 16:51:34
193
原创 牛客OJ练习
汽水瓶 题目描述: 有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝...
2019-11-28 10:29:43
445
原创 Linux------网络层与链路层
网络层 功能: 负责地址管理和路由选择(为一条数据在复杂网络中选择一条合适的路径) IP协议 基本概念 主机: 配有IP地址, 但是不进行路由控制的设备 路由器: 既配有IP地址, 又能进行路由控制 节点: 主机和路由器的统称 协议头格式 4位版本:IPV4/IPV6 4为首部长度: 标记IP报头有多长 20~60 8位服务类型(TOS)—3位弃用 , 1位保留, 4位服务类型...
2019-11-25 22:39:30
178
原创 Linux------常见的几种典型IO(实现服务器并发)
典型IO 阻塞IO 非阻塞IO 信号驱动IO 定义IO信号回调, 当IO条件具备后, 操作系统发送信号通知进程, 直接进行IO 异步IO 为了IP发起调用, 但是IO由操作系统完成, 完成之后通过信号通知进程, 进程进行数据处理 阻塞:为了完成功能发起调用, 当前不具备完成条件 , 则调用一直等待 非阻塞: 为了完成功能发起调用, 若当前不具备完成条件, 则调用直接...
2019-11-25 22:32:57
325
原创 Linux-----深度理解TCP/UDP协议
UDP 特性: 无连接, 不可靠, 面相数据报 面相数据报: 传输数据有大小限制, 并且向上层交付数据时是整条整条交付 无连接不可靠 : 只要知道对端地址就可以发送数据 , 且不关心是否丢失数据 协议字段: 16位源端口, 16位目的端口, 16位数据报长度, 16位校验和 16位源端口 16位校验和-- 校验接收到的数据和发送的数据是否完全一致 二进制反码求和算法: 假设原数据为1100...
2019-11-19 16:39:22
236
原创 牛客OJ练习
进制转换 题目描述 给定一个十进制数M,以及需要转换的二进制数N。将十进制数M转换为N进制数 输入描述: 输入为一行,M(32位整数),N(2≤N≤16),以空格隔开 输出描述: 为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(例如,10用A表示,等等) 样例: 输入: 7 2 输出: 111 该题的目的很明确, 写一个程序让输入的十进制数M以N...
2019-11-09 22:44:11
870
原创 C++ ------模拟实现STL中的list类
模拟实现list - STL中list实现主要由三个模块实现节点node , 迭代器iterator 以及list本身\ 1.节点 template<class T> struct ListNode { ListNode<T>* _prev; ListNode<T>* _next; T _data; ListNode(const T&...
2019-11-06 12:46:33
256
原创 Linux------深入理解HTTP协议
HTTP协议 虽然我们说,应用层协议是我们程序猿自己指定的, 但实际上早已有大佬定义了一些现成的, 有非常好用的应用层协议供我们参考, 而HTTP(超文本传输)就是其中之一 HTTP早期用于传输如视屏, 音乐, 文件等各种超文本数据 它其实就是在传输层基于tcp协议实现的一个应用层协议 认识URL 平时我们俗称的网址其实就是说的 URL URL称为统一资源定位符 协议方案名: 使用htt...
2019-11-05 19:10:11
193
原创 计算机网络------套接字编程
网络编程(套接字编程) 网络通信是两端通信(客户端 , 服务端) 1.主动发出请求的是客户端, 被动接受的是服务端 2.永远是客户端先向服务端发送数据, 通信中数据数据中数据需要通过tcp/ip四层, 层层封装, 每一层都有典型协议, 但是传输层有两个协议, 分别是TCP/UDP所以我们需要做出选择 TCP :传输控制协议—面向连接, 可靠传输, 提供字节流服务(传输性能较UDP弱) 1....
2019-10-30 12:13:19
707
原创 计算机网络------网络基础
网络的发展背景: 局域网、城域网、广域网:通过网络覆盖范围进行划分 互联网,因特网 -----上网 以太网,令牌环网(垃圾东西,已淘汰)----组网方式 IP地址,网络中每一个主机的唯一标识 ---uint32_t IPV4 uint32_t : DHCP---动态地址分配/NAT:NAT网络地址转换技术 IPV6 uint8_t ip[16] --不兼容IPV4 所以没推...
2019-10-24 20:30:50
196
原创 C++ ------模拟实现STL中的vector类
模拟实现vector类 vector是表示可变大小数组的序列容器 就像数组一样, Vector也采用了连续存储空间来存储元素, 也就是意味着可以采用下标对vector的元素进行访问, 和数组一样高效. 但不像数组, 它的大小是可以改变的 , 而且大小会被容器自动处理 本质来说, vector使用动态分配数组来储存它的元素. 当新元素插入时, 这个数组需要被重新分配大小 ,为了增加存储空间, 它就...
2019-10-19 17:15:34
269
原创 C++------模拟实现string类
模拟实现String类 /** *简单实现一个String类,以及各个接口函数 */ #include <string> #include <stdlib.h> #include <iostream> #include <string.h> #include <assert.h> using namespace std; tem...
2019-10-19 14:00:18
141
原创 Linux------生产者与消费者模型
什么是生产者与消费者模型 一个场所, 两种角色, 三种关系 两种角色: 生产者与消费者 三种关系: 1.同步关系 2.互斥关系 3.同步加互斥关系 为什么使用这种模型 1.解耦合 2.支持忙闲不均 3.支持并发 实现 1.基于信号量来实现生产者与消费者模型 /* * 文件名称: * * 创 建 * * 创建日期: * * 描 述:使用信号量...
2019-10-17 11:34:53
246
原创 Linux-------线程安全
为什么会产生线程安全问题 线程之间通信极为方便灵活,但是多个线程作为多个执行流对同一个临界资源进行访问,就有可能出现数据二义性,所以这就产生了线程安全 临界资源:多个线程执行流共享的资源就叫做临界资源 如何实现线程安全 1.同步: 多个线程之间对临界资源访问的时序合理性 —通过对方是否满足对临街组员的操作条件来判断线程是否等待或唤醒这种方式实现对临界资源访问的时序合理性 2.互斥: 线...
2019-10-15 17:07:54
306
原创 Linux-------线程控制
为什么要有线程控制 操作系统并没有直接提供创建线程的系统调用接口 , 所以有前辈们自己封装了一套线程库来实现线程控制 ; 所以别人也称我们穿件的线程是一个用户态线程,在内核中对应了一个轻量级进程实现程序的调度运行. 线程创建 int pthread_creat(pathread_t *tid, const pthread_a_t *attr , void* (*start_routine)(v...
2019-10-15 16:10:23
166
原创 Linux-------多线程基础
线程概念 Linux下的线程是以进程PCB模拟实现的,并且这些pcb共用同一个虚拟地址空间,共享进程中的大部分资源,Linux下的线程是一个进程,因为Linux线程以进程的pcb模拟实现线程---俗称轻量级进程 因为线程是Pcb--因此线程是cpu调度的基本单位, cpu通过调度pcb来实现程序调度 因为程序运行起来,系统资源是分配给整个线程组的,因此进程(线程组)是资源分配的基本单位 ...
2019-09-18 20:33:48
140
原创 Linux------基础IO+进程间通信+进程信号
基础IO 回顾标准库IO接口: 最常用:、 fopen: r :只读方式打开文件 r+ :读写方式打开文件 w:只写方式打开文件,文件不存在则创建,存在则清空内容 w+:读写方式打开文件,文件不存在则创建,存在则清空内容 a:写 追加方式打开文件,文件不存在则创建,每次写入数据都是些在文件末尾 a+:可读,写,追加方式打开文件,文件不存在...
2019-09-17 17:05:42
218
原创 数据结构-----用链表实现循环队列
实现 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <...
2019-09-17 16:28:39
697
原创 数据结构------链表
链表分类 单向、双向 有头、无头 有循环、无循环 可以随机组合 链表与顺序表的区别 顺序表的空间是一段连续的空间,而链表的空间为不连续空间 顺序表支持随机访问,链表不支持随机访问 在任意位置插入/删除元素时,顺序表没有链表方便 顺序表不需要频繁申请空间,而链表需要,因为链表容易造成空间碎片 无头单向不循环链表的相关接口实现 1 #pragma once ...
2019-09-13 18:26:19
176
原创 数据结构-----动态顺序表行管接口的实现
什么是顺序表 顺序表是在计算机内存以数组保存的线性结构表,线性表的顺序存储实质用一组地址连续的存储单元一次存储线性表中的各个元素,使线性表在逻辑结构上连续。 顺序表的特点 支持随机访问,可用过下标进行访问 ...
2019-09-13 10:33:32
115
原创 Linux------进程概念、进程控制
进程概念: 冯诺依曼体系结构:奠定了计算机硬件体系结构 计算机五大硬件单元:(硬件结构决定软件行为) 输入设备 键盘 鼠标 输出设备 显示器 喇叭 存储器 内存 固态硬盘 运算器 CPU 控制器 操作系统(一个软件)【搞管理的】(对下管理软硬件资源,对上提供良好的执行环境空间) 目的: 让计算机更好用 功能: ...
2019-09-05 10:43:10
132
原创 Linux------开发工具的使用
常用工具 yum: 软件包管理工具 软件安装方法: 手动源码安装(非常不推荐) 使用工具安装 工具自身可以解决软件包的依赖关系 常用操作(除安装外都需root权限) 查看 yum list 查看能够安装什么 yum list installed | grep package 查看已经安装了什么 安装 yum install p...
2019-09-03 16:16:35
333
原创 Linux------基础操作
经过一个假期时间的Linux学习,现将暑假所学Linux的基础操作同一整理 目录相关命令: ls :列出当前目录中的内容,一个终端打开之后,就会处于一个目录 ls + 目录名 进一步查看目录 . 当前目录自身 .. 目录自身的上一路径 -a 浏览虽有文件,包含隐藏文件 ,linux下以( . 开头的是隐藏文件) -l 列出文件的长信息(详细信息) -t 对浏览文...
2019-09-03 15:44:17
160
原创 练习4
1.用递归的方式求出Sn=a+aa+aaa+aaaa+aaaaa的前5项之和 #include<stdio.h> #include <stdlib.h> #include <math.h> int zongshu(int a,int n) { if (a>9 || a<=0 || n<=0) { return 0; } int num...
2018-12-10 17:21:47
262
原创 练习3
1.编写一个程序数一下 1到 100 的所有整数中出现多少次数字9 #include <stdio.h> #include <stdlib.h> int nineCount(int x) { int count = 0; if (x % 10 == 9){ ++count; } if (x / 10 == 9) { ++count; } return ...
2018-12-10 17:11:42
121
原创 代码练习2
1.求两个数的最大公约数。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(){ int a = 0; int b = 0; int temp = 0; printf("请输入两个整数\n"); scanf("%d %d", &a, &b); if (a < b){ temp =...
2018-12-10 17:06:25
198
原创 代码练习
1.判断1000年—2000年之间的闰年 #include<stdio.h> #include<stdlib.h> int main() { int i; for (i = 1000; i <= 2000; i++) { if ((i % 4 == 0) ||( (i % 400 == 0) && (i%100!=0))) print...
2018-12-10 16:56:20
652
原创 风起
1 自我介绍 姓名:王旭坤 我是一名大二的在读本科生,专业是信息与计算科学.为什么我想当一名程序员呢?因为我们这个专业是一个混合专业,它将计算机和数学内容混为一体,有了这样的数学功底使我们研究计算机的很多领域有了坚实的基础,这也让使我更想去加入程序员这个大家庭. 2 目标 一:将C语言的基础打好 二:C++的学习 三:Linux系统的学习 四:尝试参加ACM竞赛一次 3方法 每天坚持码代码,争取在...
2018-10-25 13:17:13
223
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅