自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉树的层序、前序、中序、后序遍历实现(递归与非递归的C++实现)

二叉树这种数据结构想必大家都已经非常熟悉了,他的独特的三种遍历方式也广为人知,接下来我们就来解析如何用代码实现对二叉树的遍历首先我们录入一下二叉树结构体和后面四种遍历实现所需要的头文件#include <iostream>#include <vector>#include <stack>#include <unordered_set>...

2019-07-17 09:34:09 916

原创 真核硬货——STL中的sort()函数详解

sort()函数是STL中我们常用到的一个函数,之前好像在哪里模模糊糊的看到过是用快速排序进行排序的但底层究竟是怎样进行排序的,今天我们就来进行一个探索这里先给出一个结论:STL中的sort()函数的排序方法是以快速排序+堆排序+插入排序为组合的排序STL中所有的关系型容器都拥有自动排序功能(底层结构采用RB-tree),所以不需要用到这个sort算法首先sort()函数的主体躯干...

2018-05-07 17:42:57 2146

原创 浅析生产者与消费者模型

生产者与消费模型功能:解耦,支持忙闲不均,支持并发三种关系:生产者与生产者之间是互斥关系 消费者与消费者之间是互斥关系 生产者与消费者之间是同步+互斥关系保证数据的安全:同步:对临界资源操作的时候保证原子性 互斥:在供应的同时不能进行消费版本1:基于链表结构#include<stdio.h>#include<stdlib.h>#i...

2018-04-22 16:30:38 899

原创 单例模式之懒汉模式与饿汉模式

单例模式概念:一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所以程序模块共享单例模式下分为饿汉模式和懒汉模式两种饿汉式无论将来用不用这个对象,程序启动时就创建一个唯一的实例对象场景:适合与创建对象消耗资源少且使用活跃的情况(对性能要求高)特性:程序启动慢,如果存在多个单例对象的创建,创建的顺序将不确定...

2018-04-17 23:17:16 928

原创 Java 常见排序的写法

public class Demo { public static void main(String[] args) { int arr[] = { 12, 4, 67, 22, 5, 88, 1 }; quickSort(arr); for(int x : arr) System.out.println(x);...

2020-03-07 11:46:56 220

原创 模拟实现LRU

前两天有个面试问我了一个问题?拿什么容器实现LRU最合适当时脑子很乱,第一次说用堆来存储,后面又想到改为链表存储更适合其位置不断变化的特征就匆匆过去了后来自己想了想又查了点资料,最终以下文的方式实现LRU为了保持高效的put以及find我们在这里需要用到底层为哈希的容器提高查询效率,加上改变位置的灵活性,这里我选择使用了unordered_map以及list的组合方式class ...

2019-09-08 12:39:36 334 1

原创 模拟实现shareptr 智能指针

shared_ptr的原理通过引用计数的方式来实现多个shared_ptr对象之间共享资源例如:公司晚上会通知,最后走的员工把灯关掉shared_ptr在其内部,给每个资源都维护了着一份计数,用来记录该份资源被几个对象共享 在对象被销毁时(也就是析构函数调用),就说明自己不使用该资源了,对象的引用计数减1 如果引用计数是0,就说明自己是最后一个使用该资源的对象,必须释放该资源 如...

2019-08-28 12:52:33 311

原创 B树B+树以及基于B+树的数据库引擎特点

B树(B-Tree)一个m阶B树特点 每个结点至多拥有m棵子树 根节点至少拥有两颗子树(存在子树的情况下),根节点至少有一个关键字 除了根节点以外,其余每个分支节点至少有m/2棵子树 所有的叶子节点都在同一层上,B树的叶子节点可以看成是一种外部节点,不包含任何信息 有k棵子树的分支节点则存在k-1个关键码,关键码按照递增次序进行排列 关键...

2019-08-19 09:39:28 325

原创 判断是否为二叉搜索树(C++实现)

给定一个根结点如何判断一棵树是否为二叉搜索树呢?下面我们用三种方式来处理这个问题方法一:根据二叉搜索树的特征,二叉搜索树的中序遍历应该为一个有序集合 对树进行中序遍历,将结果保存在temp数组中 检测temp数组是否为升序排列,如果是,则为BST,反之则不是 //这里为了好理解就直接使用递归写void inOrder(TreeNode* tmp, vector&lt...

2019-08-09 11:56:28 2348

原创 内存对齐的规则和原因

对齐原因内存对齐大部分的参考资料都是如是说的:平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。性能原因:数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。对其规则:1.第一个成员在与结构体变量...

2019-07-14 17:12:43 450

原创 Linux语音助手——Lewis小精灵(简陋版小度小度)

最近看一个综艺《向往的生活》被百度的产品小精灵小度所吸引,春招的时候百度来线下宣讲我怎么没举手回答问题拿到这等福利,失手了失手了。本人之前做过一个基于网络通信的Linux聊天室,可能因为做的太挫了,也没人和我用,受这个激发在百度上搜了搜居然可以用小度的文本识别的接口,又找了个语音识别的接口且当自娱自乐就完成了下面这个对话语音小精灵(总算是有人和我聊天了),等有空了接到聊天室里看看好使不。GIT...

2019-07-11 23:11:30 3445 2

原创 关于http服务中session和cookie协议头

首先这两种机制出现的原因都是因为http是无状态协议,第一次请求与第二次请求之间没有联系,所以分别在客户端和服务器的位置引进了这两个机制来缓存cookies是服务器本地机器上存储的小段文本并随每一个请求发送至同一服务器,是客户端保存状态的方案,内容包括名字、值、过期时间、路径和域eg:浏览器能记录你的登陆信息(用户名和密码)在客户端第一次请求服务器时session自底生成s...

2019-07-10 09:54:21 267

原创 https和http有什么区别?

https和http有什么区别?http协议不适合传输一些敏感信息(密码支付信息),https在其基础上增加了SSL协议(依靠证书来验证服务器身份并将通信加密)//网景设计的SSL协议1>https协议需要到ca申请证书,一般免费证书较少,所以一般需要支付费用2>http是超文本传输协议,信息是明文传输,htttp则是具有安全性的ssl加密传输协议3>htt...

2019-07-10 09:45:52 235

原创 C++ 关于内联函数和宏替换

inline内联函数和宏替换1.内联函数只是一个建议(成员函数都是内联函数),而宏是通过文本替换从而一定能够实现的2.inline函数在编译阶段处理,而宏替换在预处理阶段3.宏替换不可调试,内联函数在少部分编译器可以处理4.宏替换容易起到意想不到的副作用5.inline函数允许读取私有数据,宏替换不行6.宏替换和inline函数都不能进行复杂循环操作(递归)...

2019-07-10 09:44:10 603

原创 关于多态实现的一些问题

多态实现的原理首先多态实现必须依赖于两个条件:1)子类重写父类的虚函数2)必须通过基类的指针或者引用来调用虚函数实现多态的机制是通过虚函数表(函数指针的指针数组)来实现的,虚表的最后是一个nullptr虚表的构建过程:1)子类拷贝父类的虚表2)进行重写过的函数指针进行相同偏移量位置的替换3)将新增的虚函数添加在虚表结尾key:多继承未重写的虚函数放在第一个继承基...

2019-07-10 09:41:00 139

原创 new/delete和malloc/free的区别

new/delete和malloc/free的区别maollc/free是函数,new/delete是操作符 new申请的空间可以初始化,malloc不行 malloc的返回值是void*,所以需要计算空间大小并传递且使用时必须更改类型,new不需要 malloc申请失败返回NULL,new需要捕获异常 malloc申请的空间一定在堆上,而new不一定...

2019-07-10 09:34:24 150

原创 设计模式之单例模式和观察者模式

单例模式定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式的优势 由于只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时且进行创建和销毁的性能又无法优化时,该模式具有绝对优势 只有一个实例减少了系统的性能开销,当一个对象的产生需要比较多的资源的时候,可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决 ...

2019-06-25 14:32:22 385

原创 Linux 权限与命令间的关系

什么命令在什么样的权限下才能够运行让用户能进入某目录成为“可工作目录”的基本权限是什么可使用的命令:例如cd等切换工作目录的命令 目录所需权限:用户对这个目录至少需要具有x的权限 额外需求:如果用户想要在这个目录内利用ls查阅文件名,则用户对此目录好需要r的权限让用户在某个目录内读取一个文件的基本权限是什么可使用的命令:cat、more、less等 目录所需权限:用户对...

2019-05-12 17:20:40 126

原创 B/S模式&C/S模式

C/S:客户/服务器模式 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统;客户端需要安装专用的的客户端软件B/S:Brower/Server 客户机只要安装一个浏览器(Browser);服务器安装大型数据库,浏览器通过Web Server同数据库进行数据交互 环境:C/S建立在局域网上,B/S建立在广域网上 安全:C/S面向相对固定的用户群,对信息安全控制力高...

2019-05-09 09:45:36 239

原创 MySQL笔记——复合查询&内外连接

集合查询子查询单行子查询select * from EMP WHERE deptno = (select deptno from EMP where ename='smith');多行子查询in:查询和10号部门的工作相同的雇员的名字,岗位,工资,部门号,但是不包含10自己的select ename,job,sal,empno from emp whe...

2019-05-08 17:20:49 280

原创 MySQL笔记——视图特性&用户管理

视图创建视图create view view_name AS select ...删除视图drop view view_name修改视图数据或者基表数据产生的变化两者都会存在视图规则和限制 视图不能添加索引,也不能有关联的触发器或者默认值 视图可以提高安全性,但是必须有足够的访问权限 order by 可以用在视图中,但是如果从该...

2019-05-08 17:18:27 145

原创 MySQL笔记——索引

索引:提高数据库的性能,索引是物美价廉的东西了常见索引: 主键索引 唯一索引 普通索引 全文索引——解决中子文索引问题 添加索引后索引会形成一颗二叉树,查找的时候用二分查找的思想索引说明 占用磁盘空间 当添加一条记录,除了添加到表中,还要维护二叉树,速度有影响,但不大 添加一个索引之后,不能够解决所有查询问...

2019-05-08 17:16:42 155

原创 MySQL笔记——事务管理

事务的基本操作开启一个事物start transaction创建一个保存点savepoint 保存点名;回到保存点rollback to 保存点名;事务操作注意事项 如果没有设置保存点,也可以回滚,只能回到事物的开始(直接使用rollback),但前提是事物必须没有提交 如果一个事务被提交了(commit),则不可以回退(roll...

2019-05-08 17:13:19 93

原创 MySQL笔记——SQL函数

日期函数字符串函数数学函数

2019-05-08 17:12:01 243

原创 MySQL笔记——表的基本查询

SQL查询中各个关键字的执行先后顺序 from > on> join > where > group by > with > having > select > distinct > order by > limit表的增删改查插入单行数据/多行数据+全列插入INSERT [INTO] table_name...

2019-05-08 17:10:40 145

原创 MySQL笔记——表的约束

空属性name varchar(20) not null默认值age tinyint unsigned default 0默认值生效:数据在插入的时候不给该字段赋值,就使用默认值列描述sex char(2) default '男' comment '性别'desc tablename //查看不到注释信息show create table t...

2019-05-08 17:05:56 139

原创 MySQL笔记——SQL数据类型

整型 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的 可以通过UNSIGNED来说明某个字段是无符号的 bit类型 bit字段在显示时,是按照ASCII码对应的值显示 如果我们有这样的值,只存放0或1,这时可以定义bit(1),以用来节省空间 小数类型floatat[(m, d)] [unsigne...

2019-05-08 17:03:06 187

原创 MySQL笔记——库/表操作

库操作1.创建数据库CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]create_specification: [DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLAT...

2019-05-08 17:01:16 86

原创 cin和geline(cin, str)一起使用容易被忽略的一个坑(异常)和解决方法

int main(){ int n; while (cin >> n) { string res; for (int i = 0; i < n; i++) { string tmp; getline(cin, tmp); res = res + tmp; } cout << res << endl; } sys...

2019-04-13 08:13:07 525 1

原创 map&unordered_map的区别

map和unordered_map1.底层结构不同:map——>红黑树,unordered_map——>哈希桶2.使用场景:期望有序则用map,期望效率高则用unordered_map3.效率:map低——>O(logN),unordered_map高——>O(1)4.是否扩容:map不需要扩容,unordered_map需要进行扩容——>降低哈...

2019-04-09 10:40:26 1211

原创 C++四种转型 const_cast/dyamic_cast/reinterpret_cast/static_cast

C++提供了四种新式转型(C++-style casts) const_cast<T>通常被用来将对象的常量性转除。它也是唯一有此能力的C++转型操作符。 dyamic_cast<T>主要用来执行“安全向下转型”,也就是用来决定某对象是否归属继承体系中的某个类型。它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。 reint...

2019-04-08 15:02:40 523

原创 关于左值引用和右值引用

左值引用和右值引用变量的两个属性,左值和右值。(左值既能出现在=左边也能够出现在=右边,而右值只能出现在=右边)左值是变量的地址,右值是变量存储的内容。变量本质即存储空间的名称,编译后变为对应地址。[左值是可以被修改的,右值仅能通过其成员函数被修改]C++11提出了右值引用的概念,实现了转移语句和精确传递 消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率 ...

2019-04-07 19:14:09 229

原创 C++中的static关键字

static修饰变量是静态成员变量static类成员需要单独在类外进行单独的初始化静态成员变量: 静态成员变量不属于某个具体的对象,是类对象的共享 静态成员变量存储在全局数据区 静态成员变量在定义时分配存储空间,所以可以在没有对象时就操作 静态成员变量可用 <类名> :: <静态成员> / <...

2019-04-07 13:03:50 129

原创 抽象类和接口的区别

抽象类和接口的区别抽象类是不能实例化的类,接口是一组方法集合抽象类是本体的抽象,接口是行为的抽象1>接口不含成员变量,抽象类可以有2>接口全是纯虚函数,抽象类可以有普通函数3>接口全是public,抽象类可以有其他权限4>接口支持多继承,抽象类仅支持单继承5>接口不能存在static方法,抽象类可以6>继承抽象类可以不进行重...

2019-04-04 17:07:51 89

原创 进程&线程

进程? 进程=程序段+数据段+进程控制段1)进程是一个运行起来的程序,程序在运行的时候需要加载到内存,进程是操作系统资源分配的基本单位2)进程在linux下就是也可以说是一个PCB(进程控制块),实际上是一个task_struct结构体,底层实现上是一个双向链表 ps -ef(查看所有标准进程)3)标识符(PID),状态(僵尸"资源泄漏"、运行、停止、可中断/不可中断睡眠),...

2019-04-04 16:55:16 101

原创 指针和引用的区别

指针和引用的区别 引用在定义时必须初始化,指针没有要求 引用在初始化时引用一个实体后,就不能再进行引用其他实体,而指针可以在任何时候指向任何一个同类型实体 没有NULL引用,但有NULL指针 在sizeof中含义不同:引用结果为引用类型的大学,但指针始终是地址空间所占字节个数 引用自加既引用实体增加1,指针自加即指针向后偏移一个类型的大小 有...

2019-04-04 16:41:54 119

原创 二维数组正确初始化规则

最近刷题总在二维数组初始化这里栽跟头,接下来总结一点二维数组的初始化规则以便记忆这里提一句一维数字代表行,二维数字代表列arr[2][3]就是创建两行三列的数组二维数组在初始化的时候可以分行进行初始化int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } };二维数组也可以进行放在一起进行初始化int arr[2][3] = { 1, 2, 3, ...

2019-03-19 20:30:50 23036 4

原创 【C++】简述主流的排序算法——插入、选择、交换、归并算法

上图是最常见的几类算法的整体对比对于稳定性做出解释,就是说值相同数据在排序完成之后他们是否会保持排序前在数列中的先后顺序下面我们将这几种算法一一进行解析- 插入排序1.常规插入排序void insertSort(int *a, int len){ int i, j, n, tmp; for (i = 1; i &amp;amp;lt; len; i++) { if(a[i]&amp;amp;lt;a[i-1...

2019-03-17 15:25:55 265

原创 【网络聊天室】——基于socket编程的TCP/UDP网络聊天服务器

早期网络刚刚普及的时候,给人们印象最深的就是上网聊天,虽然作为一名上世纪的尾巴刚刚出生的我没有经历过,但仍从有所耳闻,那个时期是网络聊天室风靡的年代,全国知名聊天室大家都争破头的想要进去,基于如上和一点点小的机遇我摸索完成了一个能基本实现聊天功能的聊天室项目先贴一下源码,Github代码:https://github.com/GreenDaySky/ChatSystem_我们先来看一下的聊...

2019-03-15 09:35:13 3422

原创 【项目】#防翟天临老师翻车神器# ——实现文本查重

最近找实习的事基本上算是凉了,时间终于没那么紧迫了,学了点QT的皮毛给这个小工具搞了个简单的界面不准说丑!!!!!!!! ...

2019-02-21 16:11:36 739

网络.xmind

该XMind文件为我在校招之前为准备公司所需的网络技能知识所总结的资料,大家可以参考阅读学习

2019-08-16

空空如也

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

TA关注的人

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