- 博客(65)
- 收藏
- 关注
原创 Go——Go语言入门(变量定义,数据类型)
Go语言入门一.简介(一)Google家的开源编程语言,性能可以与C++相媲美(二)特点 1.简洁、快速、安全 2.并行、开源 3.内存管理(GC机制)、数组安全、编译迅速(三)语言用途应用于Web服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。二.结构1.包声明:每个go程序都应该有一个main包,package main表示一个可独立运行的程序2.引入包:就类似于C++中的头文件3.函数:func 函数名()(参数列表)/...
2020-11-18 17:22:17
270
原创 LeetCode——二叉树的左右视图(C++语言实现)
问题描述:二叉树的右视图示例:输入:[1,2,3,null,5,null,4]输出:[1, 3, 4]解释: 1 <--- / \2 3 <--- \ \ 5 4 <---分析:二叉树按之字形打印(点击蓝字走起)1.第一眼望去和二叉树按之字形打印有点类似,不过只要每层的最后一个节点2.想着就是还按照之字形的思路,每层的遍历结果都用一个vector存放,再把每层..
2020-08-02 11:20:36
752
原创 C++/数据结构——按之字型打印一颗二叉树
按之字型打印一颗二叉树问题描述:将一颗二叉树按照之字型打印,结果存放在二维数组中分析:例:如图二叉树,按照之字型打印的结果就是:6、9、8、3、2。1.可以看出这是一种类层序遍历的思想;2.与其说是之字型,我更愿意说是“S”型;3.假定根是第一层,我们可以发现奇数层的节点是从左到右打印的;而偶数层的节点是从右到左打印的;思路: 按照层序遍历的思想,不过现在就是把偶数层的顺序逆置一下。附源码:/*struct TreeNode { in...
2020-07-25 20:04:17
630
原创 MySQL——知识点集锦
MySQL:配置文件:/etc/mt.cnf服务端将mysqld进程放到内存中执行,就是启动了MySQL服务上层:server层 1.连接层: 1)检查客户端请求是否合法 2)确定连接协议(TCP/IP,进程间通信) 3)创建一个线程和客户端通信 2.SQL层:处理sql语句: 1)语法检测; 2)语义检查(权限); 3)解析预处理 4)优化器:选择最优方案并执行 告诉存储引擎,应该在磁盘上哪个地方取数据 3.查询缓存:当页表来理解 1)记录日志:记录.
2020-05-19 11:49:17
214
原创 Linux——生产者/消费者模型(条件变量、信号量)
生产者消费者模型简述:有时候对于临界资源的访问是有限制条件的,举例说明打印机:只有有任务来了才可以进行打印;一.条件变量二.信号量
2020-05-19 11:36:29
266
原创 C++——STL-string的模拟实现
#define _CRT_SECURE_NO_WARNINGS//模拟实现一个string类#include <iostream>#include <string.h>using namespace std;class String {private: char* _str; size_t _capacity; size_t _size; public: size_t npos = -1; typedef char* iterator; typedef .
2020-05-16 09:52:45
199
原创 Linux——五种IO模型(阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路转接IO)
五种IO模型五种IO模型分别是:阻塞IO、非阻塞IO、信号驱动IO、异步IO、多路转接IO一.阻塞IO1.含义:为了完成某种功能而发起调用后,若当前不具备IO条件则阻塞等待2.特点: 1)一次只能进行一个IO,多个IO的情况下,是串行的(还是一个接着一个) 2)进程对CPU的利用率不高(因为有大量的时间都在等待IO就绪)3.示意图:二.非阻塞IO1....
2020-04-29 21:01:41
266
原创 笔试题/C++——24点游戏算法
24点游戏算法一.问题描述给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利输入:4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字]输出:trueorfalse二.思路解析:其中的运算符号,我们用函数指针来取代,根据对应的结合方式,采取不同的循环来实现。附:源代码#include <iostream&g...
2020-03-02 22:00:01
1537
原创 C++/数据结构——归并排序(递归和非递归)
归并排序一.算法描述:我们一般采用的是二路归并——折半归并,每次将数字的量缩小一倍;最后再将有序的数组两两合并。二.实现——合并两个有序数组1.意义:在这里,无论是递归还是非递归都是要进行有序数组合并这一步的;2.步骤: 1)将部分有序的数组分割成两个完全有序的数组——需要用到额外的空间来保存数组的值。 2)合并template <cla...
2020-02-26 17:33:21
893
3
原创 C++/数据结构——递归/非递归求二叉树的深度
一.问题描述:求一棵二叉树的深度//二叉树结点的定义struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};二.问题解决:1.递归:1)明确递归边界--树空(深度...
2020-01-22 22:56:45
843
原创 MySQL——一秒钟铭记MyISAM和INNODB的五大区别
MyISAM和INNODB的五大区别MyISAM 和INNODB的五大区别 1. m非聚集性索引 i聚集型 2. m不支持外键 i支持 3. m支持全文索引 i不支持 4. m不支持事务 i支持事务 5. 对于聚合函数count*来说 m效率高,因为它有专门的变量保存 i只能每次都遍历...
2019-11-08 15:53:13
159
原创 MySQL——快速上手-数据库的创建;表的创建与约束
MySQL数据库一.先了解数据库中的几类语言DDL(data definition language):数据定义语言 create 创建 drop 删除 alter 修改DML(data manipulation language):数据操纵语言 insert 插入 delete 删除 update 更新DQL(data query l...
2019-10-27 17:11:12
386
原创 C++/数据结构——红黑树的基本操作
红黑树一.概念:本质上还是一棵二叉搜索树,每个节点又多了一个属性——结点的颜色,每个节点不是红色就是黑色。二.性质:1.根节点是黑色2.对于每个节点而言,从该节点到其后代叶节点路径上的黑色结点数目都是相同的3.不能有连续的红色结点出现。三.实现主要是旋转的情况:1.叔叔节点存在且为红色只需修改将父节点、叔叔节点、祖父节点的颜色即可2.叔叔节点不存在...
2019-10-19 18:05:33
271
原创 腾讯笔试题——安排机器
安排机器1.问题描述小 Q 的公司最近接到 m 个任务, 第 i 个任务需要 xi 的时间去完成, 难度等级为 yi。小 Q 拥有 n 台机器, 每台机器最长工作时间 zi, 机器等级 wi。对于一个任务,它只能交由一台机器来完成, 如果安排给它的机器的最长工作时间小于任务需要的时间,则不能完成,如果完成这个任务将获得 200 * xi + 3 * yi 收益。对于一台机器,它一天...
2019-10-03 20:07:11
306
原创 腾讯笔试题——小Q的歌单
小Q的歌单1.问题描述:小Q的歌单:有X首长度为a的歌和Y首长度为b的歌,现在需要组合有长度刚好是K的歌单问有多少种组合方式,将结果模上10000000072.思路:1.就是在长度为a的选择m首,在长度为b的中选择n首2.计算其组合数即可在这里:组合数的求法: (1)自己定义函数,按照公式求解即可。 (2)组合数就是杨辉三角,对应的...
2019-10-03 19:58:11
265
原创 Linux——传输层基于TCP协议的套接字编程实例
TCP1.含义:同udp相同也是传输层的一种协议。(Transmission Control Protocol 传输控制协议)。2.特点:面向连接、传输可靠、提供字节流服务 面向连接:服务端必须与客户端建立连接。 传输可靠:一系列的机制(应答等)保证数据传输的可靠性。 提供字节流服务:发送数据不会像udp那样一次发送(要么成功,要么失败),而是灵活的发送(能发...
2019-10-03 18:28:15
218
原创 数据结构——堆排序
堆排序1.堆1.概念:本质上就是存储一棵完全二叉树的数组。2.性质:大堆:根节点>左孩子&&根节点>右孩子;小堆:根节点<左孩子&&根节点<右孩子。2.堆排序的实现1.思路:(1)对待排数组进行建堆操作(2)每次取出首元素--最值放入另一个临时数组中来存放(3)将临时数组中的值拷贝到原数组中去过程:...
2019-09-28 16:15:24
287
原创 Linux——IP地址
IP地址一.含义:网络通信所用来识别设备的地址信息。二.组成:网络号、主机号1.网络号:用来区分每一个网络2.主机号:用来识别唯一一台主机三.类型:(一)早期IP地址类型:将所有IP地址分为五类1.内容:A类:0.0.0.0~127.255.255.255B类:128.0.0.0~191.255.255.255C类:192.0.0.0~223.255...
2019-09-25 22:33:17
221
原创 Linux——TCP的3次握手,4次挥手
TCP一.特性的实现1.含义:TCP是网络传输中传输层的一种协议类型。2.特点:面向连接、传输可靠、面向字节流。3.应用范围:对安全性有要求的网络通信--文件的传输等4.过程示意:5.保活机制:如果某一端突然异常退出:那么默认情况下,通信双方要是7200s没有数往来,则每间隔75s回想对方发送一个保活探测数据报,要求其进行响应:(1)若得到响应--表示连接正...
2019-09-23 19:57:55
183
原创 Linux——传输层基于UDP协议的套接字编程实例
UDP1.含义:udp协议是传输层的一种协议。(User Datagram Protocol用户数据报协议)2.特点:无连接、不可靠、面向数据报。 无连接:不用向服务端建立连接 不可靠:数据传输的过程是一个不可靠的--数据可能会丢失 面向数据报:数据报的传输方式3.流程:4.实现:(1)首先封装一个UdpSocket类来实现其基本的功能//传输层基于...
2019-09-23 19:26:51
252
原创 数据结构——快速排序
快速排序一.思路:1.选择一个基准值(以最右边为例)2.分割区间:分割区间的结果是 小于等于基准值的 基准值 大于等于基准值的3.分治:递归处理左右两个区间。 递归边界: (1)区间内没有数字了 (2)区间内只有一个数字——即有序了。二.分割区间的三种方法1...
2019-09-20 14:18:11
170
原创 C++/数据结构——AVL树的基本操作
AVL树一.什么是AVL树?AVL树本质上也是一棵二叉搜索树,不过它是一棵高度平衡的二叉搜索树平衡二叉树:左右子树的高度差不超过1;二.如何实现?在二叉搜索树的前提上为每一个结点加入一个平衡因子成员变量,再加入一个指向父节点的指针变量;平衡因子:右子树高度 - 左子树高度三.旋转1.右边的右边高--左单旋2.左边的左边高--右单旋3.左右双旋:...
2019-09-15 23:39:58
228
原创 Linux——线程池概念以及实现
线程池1.概念:顾名思义就是许多线程的一个集合。2.线程池的意义:虽然线程是轻量级的进程,创建的开销比进程小,但是,频繁的创建与销毁线程也会得不偿失,导致线程的创建与销毁所占的时间成本远大于任务处理的时间成本;因此我们将线程创建后不再销毁而是先放在一起,任务一旦分配就直接进行处理,任务执行完毕,统一销毁。这样就大大提高了任务处理的效率。3.特点:(1)线程池中的线程全是消费...
2019-09-10 13:04:58
207
原创 Linux——进程终止、僵尸进程的解决--进程等待
进程终止:1.终止的场景: 正常退出:结果符合预期 正常退出:结果不符合预期 异常退出2.退出方式:(1)return :退出前会刷新缓冲区(2)exit():退出前会刷新缓冲区(库函数)(3)_exit():退出前不会刷新缓冲区(系统调用接口)3.返回值:查看进程的返回值:echo $进程等待:1.pid_t wait(int *s...
2019-08-28 16:31:39
530
原创 Linux——进程的概念,僵尸进程、进程等待
进程1.概念:顾名思义,即正在运行中的程序;就是操作系统对运行中的程序的描述信息---PCB(Process Control Block)(进程控制块),在Linux下,PCB是一个具体的结构体——task_struct;2.进程创建: 通过fork()函数来创建:该函数是通过复制调用父进程的PCB来实现子进程的创建。通过其返回值来对父子进程进行分流: 在父...
2019-08-28 15:50:40
233
原创 C++——二叉搜索/排序树
二叉搜索/排序树一.什么是二叉搜索树?二叉搜索树就是中序遍历结果有序的二叉树。二.性质:所有的左孩子<根节点<所有的右孩子。如图:三.基本操作四.代码#include <iostream>using namespace std;//二叉搜索树:所有左孩子<根节点<所有右孩子//创建结点template <...
2019-08-16 18:57:45
130
原创 C++——多态、抽象类、虚函数表
多态多态的含义:不同对象,行为不同。一.多态的使用三个要点:1.要在继承关系中才能使用2.必须是虚函数3.调用函数的类型必须是引用/指针虚函数的覆写:1.必须是虚函数2.子类中有相同的函数:与父类函数完全相同(函数名、参数、返回值)例外:1)协变——返回值类型构成继承关系的指针/引用(也可以) 2)析构函数——基类析构函数定义成虚函数...
2019-07-07 10:10:49
311
原创 C++——菱形继承、虚继承
继承一.含义:继承来自父类的成员(数据成员和成员函数)二.访问规则:父类成员变量在子类中的访问权限:在父类中的原有权限和继承方式中取最小即可。min(父类中的原有权限,继承方式)三.切片操作子类为父类赋值(对象、引用、指针)父类不能为子类赋值,除非强制类型转换,但是这样操作的结果就是会出现,访问到非法内存的情况。四.菱形继承1.菱形继承的结构如下:...
2019-07-03 15:27:42
272
原创 C++——List的模拟实现
List的模拟实现在STL中,封装的List能实现的功能有:1.插入元素2.遍历链表3.删除元素4.迭代器访问链表,并可以在访问时修改值以下是List的模拟实现,这里重点强调的是List的迭代器:#include <iostream>using namespace std;//List的实现:////基本的结点template &l...
2019-07-01 10:47:12
186
原创 C++——用栈实现队列
用栈实现队列一.问题描述:用栈实现队列的基本操作。基本思路:1.入队:向enter栈中插入元素即可。2.出队:当exit栈不为空时,直接pop即可;exit栈为空,enter栈不为空,将enter栈内的元素出栈并依此入栈到exit栈中,最后pop掉exit栈的栈顶元素即可。3.返回队首元素:与出队操作相似,只是不需要将exit的栈顶元素出栈。4.判断队列是否为空:两...
2019-06-13 00:45:54
550
原创 C++——用队列实现栈
用队列实现栈一.问题描述:自己设计一个栈,用队列来实现其基本接口。解题思路:1.入栈:向非空队列内插入元素2.出栈:先将非空队列中的前n-1个元素插入到空队列中并出队,再将原非空队列中的元素出队即可。3.获取栈顶元素:即获取非空队列的队尾元素。4.判断栈是否为空:两个队列均为空时即该栈为空。二.代码实现#include <iostream>#...
2019-06-13 00:03:21
362
原创 C++——类和对象(二)成员初始化列表、静态成员、友元
接着上一次的类和对象篇,再次了解一些类和对象的知识类和对象的三大特性:封装、继承、多态一.构造函数1.成员初始化列表构造函数的作用就是用来为类的对象进行初始化的。之前,进行初始化是在构造函数内部为成员变量进行赋值;现在使用成员初始化列表来进行初始化。例://在构造函数内部进行赋值操作 Date(int year = 1999, int month = 1, in...
2019-05-27 20:29:01
589
2
原创 C++——初识string类
(一)string类一.常见接口:1.string():构造空的string类对象2.string(const char* s):用字符串s来构造对象3.string(size_t n,char c):string类对象中包含n个字符c4.string(const string& s):拷贝构造5.string(const string& s,size_...
2019-05-21 21:38:09
198
1
原创 C++——初识模板
模板1.意义:以达到泛型编程的目的。所谓泛型编程,就是程序代码不受类型的限制。一.函数模板1.格式:template <typename T1,typename T2, ……>返回值类型 函数名 (参数列表) { }这里的关键字typename也可以用class代替。2.例:template <class T>void Swap...
2019-05-21 16:18:03
125
原创 C语言——宏的用法、条件编译
宏先了解程序执行的几个步骤:1.预处理: ①将头文件展开 ②宏替换 ③条件编译 ④去掉注释2.编译: ①语义语法纠错 ②将.c文件编译成汇编语言3.汇编:将汇编语言变成二进制机器语言4.链接:将所有的目标文件和依赖的库文件进行汇总,得到最终的可执行程序一.宏的本质:文本替换定义一个宏:#define移除...
2019-05-17 19:18:17
1198
原创 C++——类的几个默认成员函数
一.构造函数1.意义:用来初始化类的对象。2.实现:#include <iostream>using std::cout;using std::endl;class Date {public: void Print();private: int _year; int _month; int _day;};void Date::Print() {...
2019-05-15 19:44:35
251
原创 C++——类和对象(概念、this指针)
一.类和对象1.含义:(小编自己的理解)类是某些集合的特征的抽象。对象是类的实体。比如:世界上有很多人,但是“人”这个词是一开始就存在的吗。并不是,我们把“人”叫做“人”,那么老外可能就会叫做“person”或者“people”。那么我们就可以说“人”就是一种抽象,就是类;而我们每一个人就相当于是“人”这个类的一个个实体。2.class的定义(1)类的内容有哪些?类内成员都有...
2019-05-07 20:36:03
376
原创 C++——auto、nullptr关键字
一.auto关键字1.意义:通过初始化的对象自动推导变量类型。既然是通过初始化来推导,那么用auto关键字定义的变量就必须初始化。2.用法: auto a = 10; cout << typeid(a).name() << endl; auto b = 1.2; cout << typeid(b).name() << endl...
2019-05-06 22:57:44
358
原创 C++——内联函数inline
内联函数先来介绍一下一个程序生成需要经过的几个过程。预处理:展开代码,去除注释、替换宏编译:语义语法纠错、将高级语言代码转换成汇编代码汇编:将汇编代码转换成二进制机器指令链接:链接生成可执行程序所需要的库文件宏的意义就在于:节省了编译的时间但是它的缺点:1.不易读2.不可调试3.没有欸行安全的检查比如:#define MAX(a,b) a>b...
2019-05-04 23:50:52
220
原创 C++——引用
引用一.基本概念1.含义:引用就是给变量起别名。2.特点:①引用的类型与实体类型必须相同。②定义引用时,必须初始化。③一个实体可以有多个引用。④ 引用一经初始化它的指向就不会再发生改变。⑤常引用的值不可更改。⑥引用作函数的返回值时,要保证实体的生命周期大于函数的生命周期。比如:int& add2(int& a, int &...
2019-05-04 20:28:03
314
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人