自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 乐观锁与悲观锁

什么是乐观锁? 乐观锁顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,向数据库如果提供类似于write_condition机制的其实都是提供乐观锁。什么是悲观锁?悲观锁顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所...

2019-04-24 17:04:52 140

原创 C++四种强制类型转换

C语言中的类型转换 在C语言中的类型转换一般有一下几种int i = 1;double d = i;//隐式类型转换int *p = &i;int add = (int) p;//强制类型转换但是这两种类型转换的可视性比较差,所有的转换形式都是以一种相同的形式书写,难以跟踪错误的转换。为什么需要四种类型转换? 1.隐式类型转换有些情况下会出问题。...

2019-04-22 21:59:58 1508

原创 Linux查看cpu和磁盘占有率的指令,以及查看内存泄漏

查看磁盘使用情况df-a, --all 列出包括BLOCK为0的文件系统--block-size=SIZE use SIZE-byte blocks 指定块的大小-h,--huma-readable" 用常见的格式显示出大小(例如:1K 234M 2G)-H,--si" 同上,但是这里的1k等于1000字节而不是1024字节-i, --inodes 用信息索引点代...

2019-04-11 13:31:30 819

原创 HTTP和HTTPS的区别

背景: 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。 为了解决HTTP协议的这一缺陷,需要使用另外一种协议,安全套接字层超文本传输协议HTTP...

2019-04-10 15:00:49 163

原创 输入一个URL后敲下回车发生了什么?

输入URL 拿百度为例,输入一个 https://www.baidu.com/ ,URL由三个部分组成:协议,域名,端口号。这里的端口号是默认的所以隐藏。这里的协议用的是https协议,端口号是443,还有一些常见的协议,比如http:80,ssh:20,ftp:21,telnet:23等。缓存 首先浏览器先会到缓存里面去找,如果有就直接打开,如果没有或者缓存过期就对URL进行...

2019-03-24 21:15:07 837

原创 智能指针

为什么需要智能指针? 申请出来的空间没有进行释放,存在内存泄漏。 异常安全问题,如果在malloc和free之间如果程序抛出异常,那么还是有内存泄漏。这样的问题就存在程序异常安全问题。RAII RAII是一种利用对象的生命周期来控制资源的简单技术。 在对象构造时获取资源,对象所控制的资源在整个生命周期内有效,最后在对象调用析构函数的时候对资源进行释放,借此我们...

2019-03-22 20:40:23 107

原创 如何处理服务器的高并发问题

高并发处理的基本思路1)从客户端看 : 尽量减少请求数量,比如:依靠客户端自身的缓存或处理能力;尽量减少对服务端资源的不必要耗费,比如:重复使用某些资源,如连接池客户端处理的基本原则就是:能不访问服务端就不要访问。2)从服务端看: 增加资源供给,比如:更大的网络带宽,使用更高配置的服务器,使用高性能的Web服务器,使用高性能的数据库;请求分流,比如:使用集群,...

2019-03-21 14:14:58 1922

原创 内联函数

说到内联函数大家应当不陌生,它又是一个C89标准下C语言没有的函数。它的具体做法和宏非常相似,也是在调用处直接将代码展开,只不过宏它是在预编译阶段展开,而内联函数是在 编译阶段进行处理的。同时,宏作为预处理并不进行类型检查,而inline函数是要进行类型检查的,也就可以称作“更安全的宏”。内联函数和普通函数的区别:内联函数没有栈帧的开辟回退,一般我们直接把内联函数写在头...

2019-03-21 14:10:51 148

原创 库函数和系统调用的区别

一、系统调用系统调用,我们可以理解是操作系统为用户提供的一系列操作的接口(API),这些接口提供了对系统硬件设备功能的操作。这么说可能会比较抽象,举个例子,我们最熟悉的 hello world 程序会在屏幕上打印出信息。程序中调用了 printf() 函数,而库函数 printf 本质上是调用了系统调用 write() 函数,实现了终端信息的打印功能。二、库函数库函数可以理...

2019-03-21 14:09:44 597 1

原创 C/C++的动态内存分配

内存分配方式有三种:从静态存储区分配:内存在编译的时候已经分配好,这块内存在程序的整个运行期间都存在(例:全局变量、static变量)在栈上创建:局部变量在栈上创建,函数执行结束时这些存储单元自动被释放。效率高,但容量有限。从堆上分配:动态内存分配。程序员用时自己申请和释放,使用灵活,但会存在内存泄漏。 volatile:编译时不优化,执行时不缓存,每次需从内存中读出。static...

2019-03-21 14:08:03 184

原创 C和C++的区别

C是面向过程,而C++是面向对象的1.函数默认值 C++中函数传参时可以为缺省值,而C语言不支持,并且C++必须遵循从右向左赋初始值。2.inline内联函数 叫做“更安全的宏”在调用点直接展开,不生成符号,没有栈帧的开辟回退,仅在Release版本下生效。一般写入到到文件中。3.函数重载 静多态:函数重载、函数模板,重载时必须考虑到函数名、参数个数、参数类型,重载...

2019-03-21 14:06:32 157

原创 进程信号

进程信号: 信号实际就是一个软中断 信号更多的是通知时间的发生,信号产生之后第一时间也不是直接处理而是先存储下来 Linux下有62种信号使用kill -l命令查看 信号分了两类信号:1-31不可靠信号(非实时信号) 34-64可靠信号(实时信号) 处理信号的产生->信号的注册->(信号的阻塞)信号的注销...

2019-03-20 09:59:01 165

原创 网络编程套接字

IP地址:唯一定位网络上的一台主机 无符号四个字节的整数 ---uint32_t端口:标识一台主机上网络通信的进程 无符号两个字节的数据 ---uint16_t 0-65535 进程的标识为什么不用pid? 进程的PID会随着进程的创建而改变sip + sport + dip + sport + proto 一条信息的五元组(用于标识...

2019-03-20 09:57:43 198

原创 进程控制

1.进程创建: fork() 1.以父进程为模板复制创建出一个子进程,父子进程代码共享,数据独有(写时拷贝) 2.fork的返回值,父进程返回值为子进程的PID,子进程返回0 3.取决于CPU的调度 vfork()也是创建一个子程序: 1.子进程没有(退出)或者运行其他程序则父进程是阻塞的,也就是以为这子进程是先运行的 父进程退出(不能再ma...

2019-03-20 09:56:48 124

原创 进程间通信方式

因为进程的独立性,所以导致进程间进行数学据通信将变得非常麻烦,操作系统不得不提供方法来使进程间能够通信 为什么要进程通信:进程间的协作(事件通知,数据传输,进程控制) 想办法能够让两个进程通信:提供一个介质能够让多个进程都能访问 操作系统为我们提供进程间通信的方式不止一种,因为通信的公共介质有所不同,因此进程间方式其实不止一种 进程间通信方式:管道:(命名管道...

2019-03-20 09:55:55 116

原创 进程概念

冯诺依曼体系结构: 冯诺依曼奠定了现代计算机的硬件结构体系,它规定了计算机应该具有五大硬件单元 输入设备-输出设备-存储器(内存)-运算器-控制器 硬件结构决定软件行为操作系统: 操作系统是一款搞管理的软件----管理 操作系统如何管理----管理体系 管理者/被管理者 库函数与系统调用接口的关系: ...

2019-03-20 09:53:01 136

原创 多线程

线程是什么? Linux下没有真正的线程,因为linux下的线程是用进程pcb模拟的。所以linux下的线程也叫轻量级进程。 既然Linux下pcb成了线程,Linux下的进程变成了线程组,所以进程的tgid(leader pid)就代替了原来的pid成为进程ID。 linux下的pcb是线程,线程是CPU调度的基本单位。 进程是操作系统资源分配的基本单位:运...

2019-03-20 09:51:21 156

原创 Makefile的使用

makefile makefile的编写规则 makefile的执行规则 永远只生成第一个目标对象 makefile会检测文件的最后一次修改时间,如果可执行程序的修改时间迟于源文件则不需要 编译 声明伪对象:每次都要重新生成 make命令执行的时间可以指定要生成makefile中哪一个目标对象 = ?=若变量不为空...

2019-03-20 09:50:23 256

原创 Linux的基本命令

Linux的命令操作: 讲解的是最常用的命令 命令的使用结构 命令名称 [操作选项][操作原对象][操作目标对象] 对目录进行的操作(目录==文件夹) ls默认查看当前目录下的内容 -a 查看隐藏文件,并且Linux下以.开头都是隐藏文件 . 当前目...

2019-03-20 09:49:30 104

原创 继承

继承的概念。 继承机制是面向对象程序设计使代码可以复用的重要手段,它允许程序员在保持原有类的基础上进行扩展,继承呈现了面对对象程序设计的层次结构,继承是类设计层次的复用。1.派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函 数,则必须在派生类构造函数的初始化列表阶段显示调用。 (1)关于编译器生成构造函数的问题 语法:如果一个类没有显示...

2019-03-20 09:48:06 99

原创 多态

多态: 什么是多态? 1.概念:同一事物在不同场景下表现出不同的状态。 多态的例子 2.实现多态的条件 >>基类中必须存在虚函数,派生类必须要对基类中的虚函数进行重写 >>用基类的引用或指针来调用虚函数 表现:基类的指针调用虚函数 在代码运行期间,根据基类指针指向不同子类的对象,来确定实际调用那个类的虚函数 重...

2019-03-20 09:47:07 93

原创 深度解析HTTP中的POST和GET

当我们想到HTTP中的POST和GET的区别时,无疑都会想到一下几点:GET请求方式将请求信息直接加在URL以?隔开的后面,而POST请求方式将请求信息加在消息主体中。 GET有长度限制,POST没有长度限制。 GET会将访问页面进行缓存,而POST不会进行缓存。 GET在浏览器中回退是无害的,而POST回退时需要再次请求。 GET请求只能接受URL格式编码,而POST能够适应各...

2019-03-17 20:48:21 590

原创 多人畅聊系统

背景: 如今,随着互联网时代的崛起,通信成为了我们生活中不可或缺的一部分,社交软件的层出不穷,功能也非常的繁多,作为一个技术菜鸟,想了解其背后所实现的技术实现,所以自己就模拟一个小的群聊系统。技术特点:利用socket网络编程技术,实现客户端和服务器模型。 利用多线程技术,通过信号量控制线程的同步与互斥。 服务器端利用生产者与消费者模型对数据进行收发。 利...

2019-03-14 11:19:19 368

原创 浅析文本相似度

- 前言 在生活中,信息检索、文档复制检测等领域都应用到“文本相似度”。可能有人觉得文本是文字,其实不尽然,文本相似度的应用更广,除了文字的匹配,还可以是图片,音频等,因为他们的实质都是在计算机中都是以二进制的方式存在的。 相似度,实质就是计算个体间相程度。什么是个体?对于语句,个体就是语句,对于图片,个体就是图片。- 实现原理: 基于词频:统计词频,构建词频特征向量,利用特征向量余...

2019-03-03 20:21:47 1737

原创 Linux下Jsoncpp的安装及其使用

Centos7版本下的安装及使用:博主为了安装和使用jsoncpp走了不少弯路,话不多说直接给大家介绍首先先检测一下自己的的yum安装包里是否有jsoncpp-devel的安装包$ yum list | grep jsoncpp-devel如果有就把所有的都安装如果没有以上安装包的人,则输入以下命令:yum -y install epel-release...

2019-03-02 15:34:10 3220 5

原创 快速排序-hoare版、挖坑法、前后指针法

快速排序基本可以分为两种:递归和非递归法。又可以将区间按照基准值划分为左右两半部分进行排序,排序方法有hoare版(左右指针法)、挖坑法、前后指针法。好话不多说,上代码。递归快排的递归方法```void Quicksort(int *arr, int left, int right){ if (right - left > 1) { int div = Parti...

2019-02-21 20:12:13 422

原创 进程概念

进程是什么?    我们所写的叫程序,程序是死的,存放在硬盘,运行起来的程序叫进程,程序运行起来需要被加载到内存。    站在操作系统的角度看进程,进程就是操作系统对进程的描述,而这个描述有一个名字叫PCB(process control block进程控制块),linux下PCB有自己的名字叫做task_struct    操作系统如何管理进程:就是task_struct结构体描述进程,使...

2018-11-27 20:15:04 269

转载 LINUX下的软件安装

一、rpm包安装方式步骤: 1、找到相应的软件包,比如soft.version.rpm,下载到本机某个目录; 2、打开一个终端,su -成root用户; 3、cd soft.version.rpm所在的目录; 4、输入rpm -ivh soft.version.rpm详细介绍:1. 安装:  我只需简单的一句话,就可以说完。执行:  rpm –ivh rpm的软件包名   ...

2018-11-27 17:33:51 104

原创 简单实用Makefile

makefile的编写规则:   生成文件:依赖文件[\t](按tab键)   执行的shell命令例: #Makefile               main:main.c               gcc main.c -o main   makefile的执行规则:   当makefile编写完毕,保存退出后,直接敲击make命令,那么make这命令所对应的程...

2018-11-27 17:22:29 236

原创 类的默认成员函数

类的默认成员函数1.构造函数1.1概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。2.2特性1.成员函数名与类名相同。2.无返回值。3.对象构造时编译器会自动调用构造函数。4.构造函数可以重载。5.构造函数可以在类中定义,也可以在类外定义。6.如果用户没有显示定义构造函数...

2018-11-04 20:48:51 117

原创 日期类(C++)实现

话不多说直接上代码!!!!!       #include<iostream>using namespace std;class Date{ //输出运算符重载 friend ostream& operator<<(ostream& _cout, const Date d) { _cout << d....

2018-10-27 22:32:37 230

原创 Linux基本指令

命令的使用结构           命令名称  [操作选项][操作原对象][操作目标对象]对目录进行的操作(目录==文件夹)             ls默认查看当前目录下的内容             -a 查看隐藏文件,并且Linux下以.开头都是隐藏文件              . 当前目录              .. 上一层目录             -l 列出...

2018-10-19 16:44:14 125

原创 带头结点的单向链表

#pragma once #include<assert.h>#include<malloc.h>#include<stdio.h>typedef int  Datatype;typedef struct SHListNode{    struct SHListNode* next;    Datatype data;}Node;Nod...

2018-08-24 21:32:10 563

原创 双向链表

DList.h#pragma once#include <assert.h>#include<stdio.h>#include<malloc.h>typedef int DataType;typedef  struct DListNode{    struct DListNode* next;    struct DListNode* pr...

2018-08-24 21:29:27 109

原创 简单的迷宫C语言实现

利用栈实现简单的迷宫Mase.h#pragma once#define ROW 6#define COL 6#include<stdio.h>#include<assert.h>typedef struct Maze{    int tmp[ROW][COL];}Maze;typedef struct Position{    int x...

2018-08-24 21:24:02 696

原创 贪吃蛇小游戏C语言实现

做一个简单的贪吃蛇小游戏Snake.c#include "Snake.h"void CreatWall(){    int i = 0;    for (i = 0; i <= 58; i+=2)    {        SetPos(i, 0);        printf(WALL);    }    for (i = 0; i <= 58; i +...

2018-08-24 21:16:22 361

转载 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针

指针数组指针数组是一个用来存放指针的数组以 int *arr[10] 为例:因为“[ ]”比“ * ”的优先级高,arr会先和“[ ]”结合,构成一个数组,数组名为arr,int *修饰的是数组的内容,即数组的元素。所以指针数组是数组。在int *arr[10]中存放了10个int * 类型的元素。数组指针数组指针是指向数组的指针以 int (*p) [10] 为例:p先和“*”结合,形成指针变量...

2018-06-06 19:10:45 115

原创 扫雷的C语言实现

为提升游戏的体验性,不会让玩家第一次就踩到雷 game.c#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include"game.h"void display(char show[rows][cols]){ int i = 0; int j = 0; printf(" "); for (i

2018-04-07 16:06:17 162

原创 三子棋的C语言程序实现

其实只要理清思路,这个程序还是挺简单的test.c#define _CRT_SECURE_NO_WARNINGS 1  #include "game.h"  #include &lt;stdio.h&gt;  #include &lt;time.h&gt;  #include &lt;stdlib.h&gt;  void menu(){ printf("**********************...

2018-04-07 09:42:24 155

原创 竟然还有你不知道的操作符

C语言操作符的分类:算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式。一、算术操作符:+、-、*、/、%1.除了%操作符之外,其他的几个操作符可以用作整数和浮点数。2.除了/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。3.%操作符的两个操作数必须为整数。返回的是整除之后的余数。二、移位操作符〈〈左移操作符:...

2018-03-28 20:18:08 114

空空如也

空空如也

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

TA关注的人

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