自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(84)
  • 资源 (1)
  • 收藏
  • 关注

原创 网络—网络层协议(IP协议)

一、IP协议:IP协议是TCP/IP协议族中最核心的协议。所有的TCP、UDP、ICMP、IGMP数据都以IP数据报的格式传输;二、IP协议头格式:4位版本协议:ipv4和ipv6;4位首部长度:ip协议不定长,最长60字节,最短20字节;(40字节的选项数据)8位协议类型(TOS):3位优先权弃用,4位服务类型(最小延迟,最大吞吐量,最高可靠性,最小成本);1位保留字;16位总长度:包括IP报文头部的一个IP报文大小;最大长度不得大于64k;tcp在传输层会选择合适的mss大小数据传输

2020-07-27 12:53:57 576

原创 网络—传输层协议(tcp和udp)

一、udp协议:

2020-07-26 14:12:32 503

原创 网络—HTTP协议(应用层协议)

一、应用层协议:1. 概念:负责应用程序之间数据的沟通,而应用程序是程序员自己写的,因此应用层协议也是程序员自己定义的协议。2. 自定义协议:自己定义的协议,私有协议;3. 序列化和反序列化:(1)网络版计数器:客户端向服务器传送两个数字和一个运算符,服务器进行运算,最后将结果进行返回。例如: int num1 = 1, int num2 = 2, char op = ‘+’;①将三个数据对象进行格式组织,然后通过网络数据传输,传递给服务端;②先将三个数据对象组成一个字符串,例

2020-07-22 22:40:17 1119

原创 TCP连接通信握手为什么三次,挥手为什么四次

TCP三次握手四次挥手的一些问题:(1)握手为什么三次,挥手为什么四次?握手三次:①TCP双向通信需要双方同时保持在现状态,因此客户端,服务端都会向彼此发送SYN请求,防止延迟SYN或是发送了SYN后退出。服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。②例如:假如说是两次握手,客服端会向服务端发送连接请求SYN,但是在服务器滞留了,此时客户端变为了closed状态,而服务器认为client想要建立一个新的连接,于是向客户端发送确认报文段,而客户

2020-07-20 16:35:33 141

原创 TCP协议通信中的三次握手,四次挥手

TCP协议通信建立连接:—三次握手:TCP协议通信断开连接:—四次挥手:

2020-07-19 15:36:08 262 1

原创 网络—套接字编程socket(编写UDP与TCP)

一.socket编程:(一)TCP/UDP介绍:UDP:用户数据报协议。=>无连接,不可靠传输,面向数据报。面向数据报:无连接的不可靠的,无序的,有最大长度限制的数据传输服务。例如:(视频传输),实时性>安全性。TCP:传输控制协议。面向连接,可靠传输,面向字节流。面向字节流:连接的,可靠的,有序的,双向的字节流传输:以字节为单位,不限制上层传输大小的传输方式。例如:(文件传输)(二)网络通信:网络通信:网络两端口主机进程之间的通信。两端:客户端与服务端。客户端发送请求,服

2020-07-16 01:06:35 271

原创 数据结构—红黑树(BRTree树)的认识

一、红黑树的概念:红黑树:是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。红黑树的性质:(一头一脚黑,黑同红不同)(1)每个结点不是红色就是黑色(2)根节点是黑色的(3)如果一个节点是红色的,则它的两个孩子结点是黑色的(4)对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点(5) 每个叶子结点都是黑色的(

2020-07-06 00:16:30 377

原创 Linux操作系统—多线程解析。

一、线程与进程。线程与进程的区别和联系:

2020-07-02 01:55:27 168

原创 AVL树平衡调整与应用解析

一、 AVL树的概念。二、AVL树的操作。三、AVL树的模拟实现。四、AVL树的应用及解析。

2020-06-25 00:53:09 596

原创 C++中的重载,覆盖,和重定义(同名隐藏)

一、基础概念重载:函数在同一作用域中,且函数名字相同,参数列表不同。注意:只有返回值不同的函数不能构成重载。覆盖:两个函数分别在基类和子类里,基类中的函数必须是虚函数,子类必须重写父类的方法。注意:基类和子类的两个函数都是虚函数。虽然子类重写父类的虚函数时有时候不加virtual,但子类的函数也是虚函数。重定义:两个函数分别在子类和父类,两函数的函数名相同,在继承中,子类会隐藏父类的方法。注意:(1)如果派生类的函数与基类的函数同名,参数不相同,此时,不论有无virtual关键字,基类的函数

2020-06-16 23:45:02 369

原创 C++中的继承与虚拟菱形继承

一.继承的概念。继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。例如:class person{public: void print() { cout << _age << endl; }private: int _age

2020-05-31 20:40:58 153

原创 字符串操作函数strlen(),strcpy(),strcat(),strcmp()。

一.strlen()函数使用:size_t strlen ( const char * str );字符串已经 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。参数指向的字符串必须要以 ‘\0’ 结束。注意函数的返回值为size_t,是无符号的( 易错 )注意:sizeof 与 strlen的区别:int main(){ char *ptr = "hello world"; cout << sizeof(pt

2020-05-16 22:58:16 859

原创 小型点餐系统实现

一.项目简介。编写一个点餐系统服务器,能够支持顾客能够在浏览器上面查阅菜单并进行下单,并且支持管理员在后台对菜单和订单进行处理。二.项目设计。(一)概要设计MVC设计框架:model—view—controller(二).功能设计浏览访问一个餐管页面:顾客:点击查看所有菜单:勾选菜品,进行下单。商家:上传菜品,修改菜品,查看菜品,查看订单,修改订单。(三).详细...

2020-05-05 00:37:12 529

原创 哈希表实现(开散列法解决冲突)

一.哈希概念

2020-04-21 15:28:03 698

原创 文件快速搜索工具

一.项目简介:Linux操作系统中提供了find指令查找指定文件,为了实现在Windows操作系统中实现文件的快搜搜索,利用所学知识实现文件搜索神器,与软件everything工具具有一定的相同功能,即:快速通过汉字,首字母,拼音实现文件的快速搜索。二.项目需求及环境(一)需求通过首字母,汉字,拼音实现文件快速搜索。实现搜索关键字的高亮处理。(二)开发环境编译器 : VS2...

2020-04-20 17:39:50 525

原创 数据结构—二叉树链式结构的实现

一.二叉树的链式结构。二叉树的链式存储结构是指用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链。二.链式结构的实现。1.二叉树管理:节点管理:#define BSTDataType int...

2020-04-19 22:06:07 740

原创 泛化编程和模板的使用

在学习的过程中,我们在写代码的时候会使用一些形式相同,参数相同,但参数类型和返回值类型不同的一些函数。当初我们学过函数重载,但函数重载存在以下一些不好的地方。-例如:重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数。代码的可维护性比较低,一个出错可能所有的重载均出错。泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的...

2020-04-13 17:53:23 411

原创 iOS常见的设计模式:工厂设计模式

iOS常见的设计模式:工厂设计模式简单工厂模式:简单工厂模式(Simple Factory Pattern):专门定义一个类(工厂类)来负责创建其他类的实例。可以根据创建方法的参数来返回不同类的实例,被创建的实例通常都具有共同的父类。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tu62uKwC-1647246809429)(%E7%AE%80%E5%8D%95%E5%B7%A5%E5%8E%82.png)]①创建一个工厂类,可乐抽象类。②可口可乐和百事可乐继承于

2022-03-14 16:34:10 3917 1

原创 iOS中id与instancetype的区别

1. 关联返回类型与非关联返回类型关联性返回类型根据Cocoa的命名规则,满足下述规则的方法:(1)类方法中,以alloc或new开头(2)实例方法中,以autorelease,init,retain或self开头会返回一个方法所在类类型的对象,这些方法就被称为是关联返回类型的方法。换句话说,这些方法的返回结果以方法所在的类为类型。例如:@interface NSObject + (id)alloc; - (id)init; @end[NSArray alloc]与[[

2022-01-20 15:23:59 1778

原创 iOS中@property参数详情

内存管理特性:assign(默认参数):setter方法直接赋值,不进行任何retain操作,不改变引用计数。该方法只会针对“纯量类型”(CGFloat或NSInteger等)和C数据类型(int, float, double, char, 等等)的简单赋值操作,id类型也要用assign,所以一般iOS中的代理delegate属性都会用assign来标示。retain:生成符合内存管理的set方法(release旧值,retain新值),适用于OC对象的成员变量。copy:生成符合内存管理的set

2022-01-15 12:41:11 262

原创 自定义View注意的问题

本文重点关于自定义View的初始化方法关于addSubview关于frame与bounds关于自定义View的初始化方法通常我们会创建私有方法createUI方法来创建当前自定义View所需要的子View。将createUI放在哪个方法中呢?init()?initWithFrame()?通过验证说明:首先在CustomView的init方法中调用createUI方法。- (instancetype)init { if (self = [super init]) {

2022-01-13 14:40:47 1724

原创 iOS应用的生命周期

一、AppDelegate详细介绍: 每个iPhone应用程序都有一个UIApplication,UIApplication是iPhone应用程序的开始并且负责初始化并显示 UIWindow,并负责加载应用程序的第一个UIView到UIWindow窗体中。UIApplication的另一个任务是帮助管理应用程序的 生命 周期,而UIApplication通过一个名字为UIApplicationDelegate的代理类来履行这个任务。尽管 UIApplication 会负责接收事件,而UIApplicati

2022-01-11 16:44:34 4465 2

原创 编写OC代码时应该注意的事项:内存管理

1.引用计数的理解(1)工作原理:retain:递增保留字,release:递减保留字,autorelease:待稍后清理“自动释放池”,在递减保留计数。(2)引用计数机制通过可以递增递减的计算器来管理内存。对象创建好之后,其保留计数至少为1,若保留计数为正,则对想继续存活不释放。当计数为0时,对象就被销毁了。(3)在对象生命周期中,其余对象通过引用计数机制来保留和释放对象。保留与释放操作分别会递增和递减保留计数。2.ARC使用简化引用计数(1) 使用ARC时必须遵循方法命名规则:alloc,ne

2021-12-24 17:42:36 1211

原创 写OC代码时注意事项:接口设计

1.用前缀来避免出现命名冲突:最好的方法是公司名或应用程序名命名。2.提供全能的初始化方法,其他初始化方法都应该调用此方法。(1)全能初始化方法与超类不同,需要覆写超类的对应方法。(2)如果超类的初始化方法不适用子类,需要覆盖超累的方法,并抛出异常。3.实现description方法主要是实现日志的清晰打印。若想实现更详细的信息,需要实现debugDescription方法。- (NSString *)description { return [NSString stringWithFor

2021-12-24 17:41:13 1110

原创 编写OC代码时注意事项:对象,消息,运行周期

1.对属性概念进行了解,在创建属性的时候需要进行分析。@interface ViewController ()@property NSString *name;@property NSString *message;@end相当于:@interface ViewController ()-(NSString *)name;-(void)setName:(NSString *)name;-(NSString *)message;-(void)setMessage:(NSString

2021-12-24 17:38:32 1453

原创 编写OC代码时应该注意的事项:协议与分类.md

1.通过委托协议和数据源协议进行数据通信(1)自定义协议需要定义协议方法和协议属性,属性必须为weak防止循环引用。(2)实现委托对象的办法是声明某个类遵从委托协议,然后将协议中的方法在类中进行实现。(3)协议方法的一般调用: if([_delegate respondsToSelector:@selector(getData)]) { [_delegate getData]; }但有必要,可实现含有位段的结构体,将委托对象是否响应相关协议方法这一信息缓存在其中。

2021-12-17 18:00:34 128

原创 iOS多线程-GCD

进程与线程进程比作是一个电子厂,那么线程就是一条条的流水作业线。电子厂与电子厂之间相互独立,当前电子厂的作业流水线只能使用自己电子厂资源。1.进程进程是指在系统中正在运行的一个应用程序,比如打开的Xcode。每个进程之间是独立的,每个进程运行在专有的而且受保护的内存空间中。2.线程线程是进程的基本执行单元,一个进程的所有任务都在线程中执行。进程想要执行任务,必须要有线程,进程至少要有一条线程用来执行任务。程序启动时会默认开启一条线程,这条线程被称为主线程或者UI线程。3.线程和进程

2021-11-25 12:16:57 1440

原创 编写OC代码时应该注意的事项:熟悉OC

1.OC是C语言增添了面向对象的特性。在运行时才会进行检查。运行期环境是由编译器决定的。2.掌握好C语言的内存和指针。3.在类的头文件中尽量少引入其他头文件,减少使用者引入头文件数量。会增加编译时间。4.无法使用向前声明的情况下,比如声明某种协议,则将协议声明移到分类中。如果还不行,则需要将协议单独放在一个头文件中,然后引用。5.多用字面量语法,少用与之等价的方法。(字面量语法:NSString *str = @“hello world”; NSNmuber *someNumbr = @1;)。好处

2021-09-26 20:10:39 457

原创 UITextView

iOS开发基础–UITextViewtext: 设置 textView中文本_textView.text = @“Now is the time for all good developers to come to serve their country.\n\nNow is the time for all good developers to come to serve their country.”; // 设置它显示的内容font: 设置textView中文字的字体_textView

2021-08-14 13:36:23 166

原创 IO模型(阻塞IO,非阻塞IO,信号驱动IO,异步IO,多路转接IO)

一、五种典型的IO模型阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路转接模型。IO的过程:发起IO调用,等待IO条件就绪,然后将数据拷贝到缓冲区中进行处理——等待/拷贝。1. 阻塞IO:为了完成IO,发起IO调用,此时若不具备调用条件,则一直等待,直到条件满足,完成IO调用。流程很简单,一个IO完毕后才能进行下一个IO调用,对于资源未能完全充分利用,大部分时间处于等待状态。2.非堵塞IO:为了完成IO,发起调用,若当前不具备IO条件,则立即报错返回。(通常返回进行其他操作后再

2020-08-05 18:03:34 303

原创 模板特化以及模板分离操作

一、模板特化。(一). 函数模板的特化:函数模板的特化步骤:必须要先有一个基础的函数模板关键字template后面接一对空的尖括号<>函数名后跟一对尖括号,尖括号中指定需要特化的类型函数形参表: 必须要和模板函数的基础参数类型完全相同,如果不同编译器可能会报错。#include<iostream>#include<sring.h>using namespace std;template<class T>// 函数模板bool IsE

2020-08-04 00:49:21 245

转载 【转】单例模式(懒汉模式与饿汉模式)

本文链接:https://blog.csdn.net/king457757706/article/details/51887611最近写代码因为疏忽单例的判断,导致程序快速切换多次启动时出现了bug ,借这个机会梳理一下几种单例模式的构造方式。单例模式存在的意义是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。解决方法1(懒汉式)一种实现方法是定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有的静态方法获取该实例。单例模式通过类本身来管理其唯一实例

2020-07-28 11:47:46 155

原创 DNS域名解析流程及ICMP、NAT技术。

一、DNS域名解析(一)DNS域名介绍:DNS:域名系统–用于进行域名解析,通过域名获取IP地址的系统。域名:www.baidu.com—服务器名称。域名解析服务器:采用分布式存储,域名解析服务器遍布世界各地并且进行了层级划分,增加了容灾能力,提高了性能。域名层级划分:根域名服务器(向权威机构授权)---->顶级域名服务器(.com,.org,.gov,.cn,.jp…)---->二级域名服务器(.baidu.com/.qq.com)---->三级域名服务器(.news.bai

2020-07-28 11:30:44 456

原创 网络—其他常见协议(以太网协议,ARP协议)

一、链路层协议:负责相邻设备间的数据传输;相邻设备:连接起来的两个设备就是相邻设备。一个路由器可能连接很多设备,也就是说一个设备有很多相邻设备,如何使被指定的相邻设备呢?相邻设备的识别通过物理网卡的硬件设备进行识别:MAC地址识别。IP地址描述的是路途总体的 起点 和 终点;MAC地址描述的是路途上的每一个区间的起点和终点。1. 以太网帧协议格式:(1)目的地址/源地址–6字节:指网卡的硬件地址,表示从哪个地址到那个地址;(2)类型–2字节:上层网络层协议类型,用于数据的分用;(IP,

2020-07-27 23:21:45 469

原创 C++中的几个特殊类(在堆上,栈上创建对象)

1. 设计一个类只能在堆上创建对象。实现方式:(1)将类的构造函数,拷贝构造函数设置为私有,防止别人调用,防止别人调用拷贝在栈上生成对象。(2)提供静态成员函数,在函数中完成堆对象的创建。class Base{private: Base() {} Base(const Base&) { } Base(const Base& a) = delete;//C++11的做法;public: static Base* fun() { return new Ba

2020-07-25 00:23:25 518

原创 HTTPS的加密方式(对称加密、非对称加密、签名证书)

一、https介绍:https协议就是加密后的http协议。https经常使用的端口:443;http:80。二、https的加密方式:数据在网络中传输是容易被劫持的,因此需要对传输的数据进行加密,同时接收端在对数据进行解密。从而保持数据传输的安全性。1. 对称加密算法:(1)加密算法与解密算法想同。(2)加密算法的优点:加密解密的效率很高;(3)加密算法的缺点:容易被劫持,使用时间稍长就会被中间劫持,根据数据规率找破解出加密算法。(3)解决方案:可以每次通信都动态协商一个加密算法

2020-07-24 00:12:51 2606

原创 实现一个简单的HTTP

实现简单HTTP服务器,在页面显示“hello world”:socket套接字编程中服务端代码改编:#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdio.h>#include <string.h>#include <stdlib.h>void Usage(

2020-07-23 00:12:22 224

原创 C++—浅谈智能指针

一、智能指针概念:(1)内存泄露及其危害:内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。检测内存泄露的工具:①windows下检测:VLD;②LInux下检测:(2)智能指针原理:智能指针:它具有指针的行为,指针可以解引用

2020-07-22 01:26:55 151

原创 C++中的异常捕获

一、概念:1. C语言中错误处理机制:(1)终止程序,assert。通过assert终止错误,用户无法查看错误信息。(2)返回错误代码,系统会通过醋无信心返回错误代码,程序员需要进行查看才能知道错误信息。2. C++中的异常概念:异常是一种错误处理方式,...

2020-07-21 11:12:54 3999

原创 C++11中线程库的使用

线程库:1.线程库介绍:在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含< thread >头文件。2. 线程库函数的使用: thread() 构造一个线程对象,没有关联任何线程函数,即没有启动任何线程 thread(fn,args1,

2020-07-19 00:05:06 450

Swift学习(中文版).zip

Swift学习资源基础及进阶

2021-11-25

空空如也

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

TA关注的人

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