自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 输入一个url到浏览器页面展示都经历了哪些过程

步骤→ 1- 输入网址→ 2- 缓存解析→ 3- 域名解析→ 4- tcp连接,三次握手→ 6- 页面渲染一:输入网址那肯定是输入你要访问的网站网址了,俗称url;二:缓存解析浏览器获取了这个url,当然就去解析了,它先去缓存当中看看有没有,从 浏览器缓存-系统缓存-路由器缓存 当中查看,如果有从缓存当中显示页面,然后没有那就进行步骤三;缓存就是把你之前访问的web资源,比如一些js,css,图片什么的保存在你本机的内存或者磁盘当中。(1) 在chrome浏览器中输入网址: chrom

2020-10-11 14:49:34 236

原创 MySQL数据库简介

一、数据库介绍1、为什么需要数据库内存掉电后数据丢失,计算机的资源有限,因此需要把程序中用的数据存储下来以便于关机后还能继续使用(数据持久化),而保存数据最简单的方法就是把数据以文件形式写入到磁盘中。随着程序的功能越来越复杂,需要操作的数量也就是越来越来大,管理数据就成了很大的问题,因为读写文件并解析数据需要大量重复的操作,并且从大量数据的增、删、改、查需要非常复杂的逻辑和耗时的操作。如果程序都各息实现读写数据的代码,一方面效率低、容易出错,另一方面是每个程序访问数据的接口、业务逻辑不同,所以代码难

2020-10-11 14:11:39 587 2

原创 C++的继承与多态

一、类的继承1、在解决问题时,先查看当前现在的类能否解决部分问题,如果可以则把旧的继承后再拓展来缩短解决问题的时间,降低解决问题的难度,继承就是为了让代码能够重复使用。2、当面临一个复杂问题时,可以先把问题进行分层,每层的类解决一部分问题,然后通过继承进行汇总,最终得到一个解决问题的类。二、继承的基本语法1、继承表一个子类可以继承多个父类,每个类的继承方式可以不同。class 子类:继承方式 父类1,继承方式 父类2,… //继承表{}2、继承方式 public 公有继承

2020-09-27 19:54:41 398 2

原创 C++模板

一、什么是模板模板是C++中自动生成代码的技术。二、为什么使用模板问题:实现一个通用的排序算法。C语言:通过回调函数实现,使用者调用麻烦。C++语言:函数重载,需要为多种类型实现一个第一版本,还会导致代码段增加。C/C++语言:借助宏函数实现,类型检查不严格,频繁使用还会增加代码段。由于以上原因C++之父在C++中实现了模板技术,既能技术多种类也能兼顾严格的类型检查,能让程序员编程专注思考业务逻辑而不用关系数据类型。三、函数模板1、函数模板的定义template <typename

2020-09-26 20:59:04 3532 4

原创 单例模式

只能创建出一个对象的类叫单例模式。单例模式的应用场景:1、Windows系统的任务管理器。2、Linux\UNIX系统的日志管理系统。3、网站的访问计数器。4、服务器的连接池、线程池、数据池等。创建单一对象的方法:1、定义全局的,但不受控制,且有再次创建的风险。2、专门实现一个类,把类的构造函数调用为私有,然后借助静态成员函数提供一个获取唯一对象的接口。C++实现单例的思路:1、禁止类外创建类对象:把构造和拷贝构造设置为私有的。2、类自己维护一个对象:使用静态指针或静态对象。3、提供

2020-09-22 17:34:08 128 1

原创 运算符重载,赋值运算符

一、运算符重载C++中是运算符当作函数来看待,所以C++中的运算符可以重载,这样可以让类对象支持运算符,对类对象进行定制化操作。例如:string类就支持很多运算符来代替标准库中的函数。= strcpy+= strlen==|!=|>=|<= strcmp二、双目录运算符重载假如:Test a,b; a+b操作可以调用两种函数Test的成员函数:a是触发者,b是参数Test operator+(cosnt Test& b) const{return a+b; //

2020-09-22 17:31:08 375

原创 C和C++的区别

C与C++的区别int n(int as,bs,int n){}一、C++介绍本贾尼·斯特劳斯特卢普,于1979年4月份贝尔实验室的本贾尼博士在分析UNIX系统分布内核流量分析时,希望有一种有效的更加模块化的工具。1979年10完成了预处理器Cpre,为C增加了类机制,也就是面向对象,1983年完成了C++的第一个版本,C with classes也就是C++。C++与C的不同点:1、C++完全兼容C的所有内容2、支持面向对象编程思想3、支持运算符、函数重载4、支持泛型编程、模板5、

2020-09-16 19:58:58 830 1

原创 利用生产者与消费者模型实现线程池

#ifndef THREADPOOL_H#define THREADPOOL_H#include "array_queue.h"typedef struct ThreadPool{ pthread_t* tid; size_t thread_cnt; void (*task)(void*); ArrayQueue* queue; pthread_mutex_t mutex; pthread_cond_t full; pthread_cond_t null;}ThreadPool;

2020-09-10 10:31:04 265 3

原创 NetWork---socket服务端/客户端通用代码

#ifndef NETWORK_H#define NETWORK_H#include <stdio.h>#include <stdbool.h>#include <netinet/in.h>// 网络通信结构typedef struct NetWork{ int sock; // socket描述符 int type; // 协议类型 struct sockaddr_in addr; // 通信地址 socklen_t

2020-09-10 10:29:05 1628

原创 Linux下利用socket多线程实现简单网络聊天室

服务端#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <signal.h>#include <pthread.h>#include <semaphore.h>#include <sys/socket.h>#include <netinet/in.h>#includ

2020-09-06 21:59:27 2113 1

原创 线程通信,锁

一、基本概念竞争与同步:同一个进程中的线程能共享进程中的绝大多数资源,当它们随意竞争时可以导致资源会破坏、脏数据、不完整、不一致等问题。通过一些方法让进程在竞争资源时相互协调,避免出现数据不完全、不一致等问题,这就叫线程同步。临界区与临界资源:被多个线程同时访问的代码叫临界区,被同时访问的资源叫临界资源。原子操作:中间不会打断的操作叫原子操作。二、互斥量(互斥锁)pthread_mutex_t 是一种数据类型,可以定义变量。int pthread_mutex_init(pthread_mu

2020-09-04 17:02:45 206 3

原创 socket套接字

一、套接字基本特点:socket是一种接口技术,被抽象成一个文件操作,可以让进程之间通信,也可以让不同计算机的进程通信(网络)。int socket(int domain, int type, int protocol);功能:创建套接字domain: AF_UNIX/AF_LOCAL 本地通信,进程间通信 AF_INET 基于IPv4地址通信 AF_INET6 基于IPv6地址通信type: SOCK_STREAM 数据流协议 SOCK_DGRAM 数据

2020-09-01 20:57:03 906 3

原创 进程与线程

进程基本概念:1、进程与程序程序就是存储在磁盘上的可执行文件,程序被加载到内存中开始运行叫进程。一个程序可以被多次加载生成多个进程,进程就是处于活动状态的计算机程序。2、进程的分类进程一般分为三种类型:交互进程、批处理进程、守护进程。守护进程一般都处于活跃状态,运行在后台,由于系统在开机时通过启动脚本自动创建的。3、查看进程简单形式:ps 显示当前用户有控制终端的进程信息。列表形式:ps auxw 显示进程详细信息a 所有用户的有控制终端的进程x 无终端控制的进程u 显示进程的详细信息

2020-08-27 20:58:04 117 5

原创 消息队列

消息队列:基本特点:是由内核负责维护管理的数据链表,通过消息类型收发数据。int msgget(key_t key, int msgflg);功能:创建/获取消息队列key:IPC键值msgflg:IPC_CREAT 创建消息队列IPC_EXCL 如果消息队列已经存在则返回错误mode_flags:创建消息队列时需要提供权限返回值:成功返回IPC标识符,错误返回-1。int msgsnd(int msqid, const void *msgp, size_t msgsz, int msg

2020-08-27 20:24:59 770 3

原创 操作系统——文件相关的函数

文件同步:1、在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率。2、但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提供了一个函数可以让缓冲区中的数据立即写入到磁盘。void sync(void);功能:把缓冲区中的数据同步到磁盘注意:并不等到数据同步完成后才返回,而是把缓冲区的数据加入到写入队列。int fsync(int fd);功能:把指定文件的内容从缓冲区同步到磁盘注意:会等到完全定稿磁盘才返回int fdatasync(in

2020-08-25 14:38:20 193 2

原创 Linux/Unix 系统简介

UNIX系统介绍:最早版于1970年问世于贝尔实验室,作者是丹尼斯.里奇和肯.汤普逊。是最早的多用户、多任务、支持多种CPU架构,高安全性、高稳定性、高可靠性。既能构架大型关键性业务系统的商用服务器,也能支持嵌入式设备。MiniX基于微内核加载的类UNIX系统,名为MINIX(即小型的UNIX),并开放全部源代码给大学教学和研究工作,Linux之父林纳克斯,正是在受了MiniX的启发,才开发了Linux系统。Linux系统介绍:Linux,全称GNU/Linux,其内核由林纳斯・托瓦兹于199

2020-08-20 14:50:22 1527 6

原创 操作系统

一、内存管理用户层STL 自动分配/释放内存 调用C++C++ new/delete 调用CC malloc/free 调用POSIXPOSIX brk/sbrk 调用LinuxLinux mmap/munmap 调用内核系统层kernal kmalloc/vmalloc 调用驱动driver get_free_page二、进程映像程序是存储在磁盘上的可执行文件,当执行程序时,系统会将可执行文件加载到同

2020-08-20 14:46:28 135

原创 数组与矩阵

数组与矩阵:数组:存储空间连接的表结构。矩阵:带二维信息的数据,一般使用二维数据来存储矩阵。特殊矩阵:上三角形矩阵:[0][1][3][6][ ][2][4][7][ ][ ][5][8][ ][ ][ ][9]压缩方法:用一维数组进行存储数组的长度:(n+1)*n/2对应关系:(j+1)*j/2+ii和j要满足:i<=j下三角形矩阵[0][ ][ ][ ][1][2][ ][ ][3][4][5][ ][6][7][8][9]压缩方法:用一维数组进行存储数组的长

2020-08-17 21:45:44 366

原创

树型结构:1、树的基本概念一种表示层次关系的(一对多)数据结构。有且仅有一个特定的节点,该节点没有前驱,被称为根节点。剩余的n个互不相交的子集,其中每个子集也都是一棵树,被称为根节点的子树。注意:树型结构具有递归性(树中有树)。2、树的表示方法:倒悬树、嵌套法、凹凸法。3、树的专业术语:节点:组成树的基础元素,同时它也是一棵树。节点的度:该节点子树的数量。树的度(密度):树中节点的数量。叶子节点:节点的度为0的节点。双亲和孩子:节点的子树被称为孩子节点,该节点就是它们的双亲。兄弟:

2020-08-17 21:43:56 87

原创 AVL ,图,查找算法

平衡二叉树:前提是有序的二叉树,它的左右子树的高相差不超过1,它的所有的子树也要满足这个要求。如果一个有序二叉树呈单支状(接近单支),它的效率接近链表,因此只有达到平衡时它的效率才最高。由于节点的位置受值的影响,因此只能进行调整,而不能强行修改。二叉树不平衡的基础原因: x y / \ / \ y t1 以为轴向右旋转 z x /

2020-08-17 21:42:32 172

原创 十大排序算法

算法的时间复杂度并不能代表算法的实际执行时间,有些时候看似复杂度高的速度反面快。查找算法:顺序查找:对待查找的数据没有要求,时间复杂度: O(n)二分查找:对待查找的数据必须有序,时间复杂度: O(logn)块查找:是一种数据处理的思想,不是特定的算法,当数据量过多时,可以先把数据进行分块处理,然后再进行查找,例如英语词典。哈希查找:数据 经过哈希函数 计算出数据在哈希表中的位置,然后标记,方便之后的查找,它的时间复试度最快能达到:O(1)。但是该算法有很大局限性,不适合浮点型、字符串型

2020-08-17 21:40:59 138

原创 Makefile与宏

预处理指令:C代码不能直接被编译器编译,需要一段程序把它翻译一下,负责翻译的程序叫作预处理器,,翻译的过程叫预处理,被翻译的语句叫预处理指令,以#开头都是预处理指令。gcc -E code.c 查看预处理结果gcc -E code.c -o code.i 把预处理的结果保存在文件中。1、文件包含 #include 把一个头文件导入到当前文件中。 #include <> 从系统指定的路径查找并导入头文件。 #include "" 先从当前路径下查找,

2020-07-27 20:46:59 486

原创 字符串

字符串:由字符组成的串型结构,’\0’是它的结束标志。存在形式:字符串字面值:存储在代码段 只读 修改会产生段错误 地址 末尾有隐藏的’\0’const char* str = “hehe”;sizeof(“xixihaha”) 结果是9字符数组:栈内存 可以修改 要为’\0’预留位置一般使用字符串字面值初始化字符数组。char str[4] = “hehe”; // 不建议设置数组长度输入:char str[255];scanf("%s",str); 不能输入带空格的字符串gets

2020-07-27 20:45:36 85

原创 内存管理

什么是堆内存:是进程的一个内存段(text、data、bss、heap、stack),由程序员手动管理,特点就是足够大,缺点就是使用麻烦。为什么使用堆内存:1、随着程序的复杂数量变多。2、堆内存的申请释放受控制。如何使用堆内存:注意:C语言中没控制堆内存的语句,只能使用C标准库提供的函数。#include <stdlib.h>void *malloc(size_t size);功能:从堆内存中申请size个字节的内存,申请内存中存储是什么内容不确定。返回值:成功返回申请到的

2020-07-27 20:44:47 248

原创 指针

什么是指针:指针是一种数据类型,使用它可以用来定义指针变量,指针变量中存储的其实是整数,这种整数代表了内存的编号。为什么要使用指针:1、函数之间相独立,但有些时候需要共享变量。传参是值传递全局变量容易命名冲突使用数组还需要传递长度命名空间是独立的,但地址空间是同一个,所有指针可以解决这个问题。2、由于函数之间传参是值传递(内存拷贝),对于字节数比较多的变量,值传递效率较低,如果传递变量的地址只需要传递4|8字节。3、堆内存无法取名字,它不能像data、bss、stack让变量名与内存建立联

2020-07-27 20:43:29 130

转载 C语言指针详解(经典,非常详细)

转载:https://blog.csdn.net/liu100m/article/details/90731422 原文不详前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:int p; //这是一个普通的整型变量i

2020-07-15 20:58:25 368 1

原创 进程映像以及类型限定符

进程印象进程映像指的就是函数的分布情况# 堆heap由程序员手动管理 特点就是够大栈stack函数调用开始到函数执行结束只能在函数内使用存储局部变量,块变量等数据静态数据段bss存储未初始化过的变量text代码段存储是二进制指令,常量数据,权限是只读,强制修改会产生段错误。data数据段存储初始化的变量类型限定符auto用于定义自动分配、释放内存的变量(局部变量),不加就代表加。全局变量不能用它修饰。extern声明变量,意思是此变量在别处已经定义,请放心使用。但只临

2020-07-15 20:49:07 246

原创 gcc参数以及c代码的执行过程详解

****有好几个月没有更新了还是很抱歉,接下的更新会稳定下了,一周一篇或者多篇今天给大家分享一下gcc的相关参数以及c代码变为可执行程序的过程gcc是GNU社区为了编译Linux代码而开发一款免费的编译器,默认采用C89语法,-std=gnu99可以设置C99语法。常用的参数:-E 显示预处理结果-c 只编译不链接-o 设置编译结果的名字-I 指定头文件的加载路径-S 生成汇编代码-l 指定要使用库,-lm 使用数学库-Wall 以严格的标准来检查代码,显示更多的警告提醒-Werro

2020-07-07 19:29:54 551

原创 近期题目分享以及疑惑

hello,大家许久不见,这段时间虽然题目写的不少,但是一直都没有机会跟大家一起分享,接下来我给大家分享几题近期写的几道比较有意思的题目吧题目均引自pat乙级题库1.1070 结绳题目思路:这题是一题比较明显的数学题,只要我们把思路搞对,那我们就可以根据题目进行编程。#include<stdio.h>int main(){int n=0;scanf("%d",&n);int a[n],cnt=0;for(int i=0;i<n;i++){scanf("%.

2020-05-18 18:57:25 223

原创 pat刷题分享——数字分类

现在开始放假了,我也开始准备pat乙级的考试了,以后我会不定期与大家分享一些 题目,今天和大家分享一下我昨天刷的一道关于数字分类的题目题目如下给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:A​1= 能被 5 整除的数字中所有偶数的和;A2​= 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;A​3= 被 5 除后余 2 的数...

2020-01-14 12:03:26 179

原创 week04总结

现在学习进度有一些慢,最近一周学习的主要是一些子函数的编写与运用,还有对递归思想的一些理解,递归确实是有那么一点点绕,所以建议还是不要深究了。然后练习题的话还没有做,原谅我的懒惰。。下周我给大家分享一些自己做的一些关于递归和子函数的题目吧因为要期末考了,所以学习也有一点怠慢,这周也不知道写啥,下周给大家补齐,对不起大家了,加油加油。...

2019-12-08 19:35:40 95

原创 week3——数组

大家好,这周主要是对数组的学习,随着学习的深入,难度也逐渐增加因为平时课业繁忙,所以只能在周末的时候进行额外的学习,所以学习进度比较慢,希望大家不要介意啊那我接下来给大家整理yi什么是数组:变量的组合,是一种定义变量的手段。定义:类型 数组名[数量];数组定义后,默认值同样不确定,因此也需要初始化。 int arr[5] <==> int num1,num2,num3,nu...

2019-12-01 21:20:53 122

原创 vim的使用方法

目前vs软件虽然非常好用方便,但是在学习初期我还是更倾向于使用vim,这样能让我学习的更加扎实。下面我来介绍一些vim的基本快捷键和使用语法【vim】vim hello.c 进入vim 如果文件不存在 则创建输入i 进入插入模式 ,可以编辑文件按esc 然后输入:X 【保存退出】vim有三大主要模式正常模式(菜单模式):vim刚进入的模式,适合阅读修改,有大量的快捷键...

2019-11-24 12:27:13 134

原创 初学C语言学习心得

这写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑...

2019-11-16 20:07:36 631 5

C语言学习笔记.rtf

C语言学习笔记,一些学习笔记与大家分享

2019-11-24

空空如也

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

TA关注的人

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