自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 置顶说明

学习建议:说明:以下无特殊说明,私教课均来自极客时间!C++学习书籍推荐<<C++ Primer 中文版(第5版)>>[美] Stanley B.Lippman / 电子工业出版社<<Effective C++ 改善程序与设计的55个具体做法(第3版)>>梅耶(Scott Meyers) / 电子工业出版社<&lt...

2019-06-25 16:04:00 174

原创 第172场力扣周赛

6和9组成的最大数字(简单)题目描述:给你一个仅由数字 6 和 9 组成的正整数num。 你最多只能翻转一位数字,将 6 变成9,或者把9 变成6 。 请返回你可以得到的最大数字。解题思路:非常简单,只需将当前数组中最靠前(若存在)的数字6翻转为9即可得到最大的数组:class Solution {public: int maximum69Number...

2020-01-20 20:47:25 269

原创 高性能HTTP服务器

高性能HTTP服务器最近一直在做一个高性能的http服务器,首先要构建一个支持TCP的高性能网络编程框架,再完成这个框架之后,再增加上http的特性便可以了。设计需求:采用 reactor 模型,使用 epoll 作为事件分发实现。 必须支持多线程,从而可以支持单线程单 reactor 模式,也可以支持多线程主 - 从 reactor 模式。可以将套接字上的 I/O 事件分离到多...

2020-01-20 05:07:28 1140 2

原创 力扣日常练习

旋转数组(简单)给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。解题:思路:将数组向右移动k个位置,那么首先我们的思路便是申请一个额外的数组,来预存数组中的元素,紧接着再对原数组进行操作,A[(i + k)%size] = B[i]。class Solution {public: void rotate(vector<int>&am...

2020-01-17 02:53:12 220

原创 力扣日常练习

验证回文串(简单)给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。解题:根据题目需求首先过滤掉非字母和数字的字符,紧接着通过双指针首尾遍历字符串,判断是否回文即可。isalnum()函数表示判断字符是否为字母和数字 tolower()函数表示将字符转换为小写格式只需五行代码即可。cla...

2020-01-16 22:12:33 160

原创 力扣日常练习

二叉树的最大深度(简单)给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。解题:采用递归的方式去求解二叉树的最大深度。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...

2020-01-16 06:31:08 140

原创 力扣日常练习

合并两个有序数组给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。解题:首先这道题最直接的方法当然是合并后直接排序,但是这么处理...

2020-01-15 01:56:33 115

原创 力扣日常练习

搜索插入位置(简单)给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。解题:简单的二分查找问题,由于我们知道当排序数组当中存在目标值的情况,则直接返回mid下标即可,当排序数组当中不包含目标值,此时我们可以分析得出,while循环的倒数第一次中,必定left=right,此时定位到...

2020-01-13 18:55:32 274

原创 力扣日常练习

罗马数字转整数(简单)罗马数字包含以下七种字符:I,V,X,L,C,D和M。罗马数字规则 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做...

2020-01-12 20:40:27 91

原创 MongoDB——读操作事务

由于MongoDB是一个分布式数据库,因此我们在读取数据的过程中需要关注以下两个问题:从哪里读?关注数据节点位置 什么样的数据可以读?关注数据的隔离性接下来我们引入了两个参数:readPreference和readConcern来控制。readPreference参数readPreference决定使用哪一个节点来满足正在发起的读请求。可选值包括:primary:只选择主节...

2020-01-02 23:25:14 408

原创 MongoDB——写操作事务

writeConcern参数writeConcern决定一个写操作落到多少个节点上才算成功。writeConcern的取值包括:0:发起写操作,不关心是否成功; 1~集群最大数据节点数:写操作需要被复制到指定节点数才算成功; majority:写操作需要被复制到大多数节点上才算成功。发起写操作的程序将阻塞到写操作到达指定的节点数为止。writeConcern的默认值是1,即我...

2020-01-01 16:38:53 748

原创 SELECT

select函数介绍个人整理select函数思维导图

2019-12-23 22:19:36 179

原创 TIME_WAIT

TCP四次挥手首先先从TCP的四次挥手说起,下面给出TCP四次挥手展示图:TCP四次挥手TCP连接终止时,主机1先发送FIN报文,主机2进入COLSE_WAIT状态,并发送一个ACK应答,同时,主机2通过read调用获得EOF,并将此结果通知应用程序进行主动关闭操作,发送FIN报文。主机1在接收到FIN报文后发送ACK应答,此时主机1进入了TIME_WAIT状态。主机1在TI...

2019-12-19 20:00:26 382

原创 ping命令

ping命令是用来完成对网络连通性的检测ping命令探测与新浪网的网络连通性我们可以看到,每次显示都是按照sequence序列号排序显示的,一并显示的,也包括TTL(time to live),反映了两个IP地址之间传输的时间。最后还显示了ping命令的统计信息,如最小时间、平均时间等等。ping命令原理ping命令是一种基于ICMP的协议而开发的,ICMP又是一种基于...

2019-12-19 18:20:39 1178

原创 MongoDB的CRUD

标题标题标题标题标题标题

2019-12-05 22:20:20 62

原创 如何选取最佳前缀索引长度

有时候需要索引很长的字符列,这会让索引变得大且慢。其中有一种策略是通过自定义哈希索引的方式来模拟哈希索引,但是这样会存在一定的局限性。通常来讲我们可以采用前缀索引的方式,这样可以大大节约索引空间,从而提高索引效率。但是与此同时,这也会一定程度上的降低索引的选择性。索引的选择性是指,不重复的索引值(也称为基数,cardinality)和数据表的记录总数(#T)的比值,范围从1/#T到1之间。索引...

2019-12-03 14:37:23 3538

原创 MySQL为一张表的枚举字段增加ENUM常量

基本技术为:为当前表结构创建一个新的.frm文件,然后用它替换掉已经存在的那张表的.frm文件创建一张具有相同结构的空表,并进行所需的修改(增加ENUM常量) 执行FLUSH TABLES WITH READ LOCK。这将会关闭所有正在使用的表,并且禁止任何表被打开。 交换.frm文件 执行UNLOCK TABLES来释放第二步的读锁下面先给出原表的结构:原表:saki...

2019-12-02 19:54:08 3430 1

原创 LRU缓存机制

class LRUCache {private: int cap; // 双链表:装着 (key, value) 元组 list<pair<int, int>> cache; // 哈希表:key 映射到 (key, value) 在 cache 中的位置 unordered_map<int, list<pair&lt...

2019-09-25 16:42:53 106

原创 C++实现简易Trie树

放码过来#include <iostream>#include <string>using namespace std;struct TrieNode{ char data; TrieNode *children[26]; bool isEndingChar; TrieNode(char data): data(data), isEndingCh...

2019-09-22 21:20:02 129

原创 C++11——std::mutex

互斥量互斥量是一个可以处于两态之一的变量:解锁和加锁。这样,只需要一个二进制位表示它,不过实际上,常常使用一个整型量,0表示解锁,而其他所有的值则表示加锁。互斥量使用两个过程。当一个线程(或进程)需要访问临界区时,它调用mutex_lock。如果该互斥量当前是解锁的(即临界区可用),此调用成功,调用线程可以自由进入该临界区。#include <iostream>#inc...

2019-09-15 20:28:30 4408

原创 C++11——std::thread

线程的创建——线程的启动与结束通过函数来创建一个线程#include <iostream>#include <thread>// 线程入口函数void function(){ std::cout << "The thread is start, thread_id = " << std::this_thread::get_i...

2019-09-15 10:30:42 1794

原创 单例设计模式

单例类单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,即一个类只有一个对象实例。我们知道了单例类只能有一个实例化对象,因此从这一点出发,我们想到了可以使类的构造函数私有化来实现一个单例类:// 这是一个单例类class MyCAS{private: MyCAS() { } ...

2019-09-13 15:14:31 88

原创 C++中的左值与右值以及右值引用到底是什么?

左值与右值通常来说你确实可以使用一个值在表达式中的位置信息来判断这个值的左右值类型,比如说在下面这段代码中:int x = 10;int y = 20;int sum = x + y;最后一行当中,位于" = " 左侧的sum就是一个左值,而右侧的 " x + y " 就是一个右值。除此之外,还可以用另外一种常用的方式来判断:可以取地址的,有名字的就是左值 反之不...

2019-09-12 10:27:35 808 3

原创 并发编程学习(三)

Happens-Before规则Happens-Before规则表达的意思:前面一个操作的结果对后续操作是可见的!程序的顺序性规则这条规则是指在一个线程中,按照程序顺序,前面的操作Happens-Before于后续的任意操作。class VolatileExample { int x = 0; volatile boolean v = false; pu...

2019-08-25 21:25:54 134

原创 并发编程学习(二)

Java中实现线程的两种方式class TestThread extends Thread{ @Override public void run() { System.out.println("通过继承Tread类实现线程"); }}public class TestRunnable implements Runnable { @Ov...

2019-08-24 17:15:21 118

原创 并发编程学习(一)

并发编程——背景概述这些年,虽然我们的CPU、内存、I/O设备都在不断的发展,但是在发展的过程中,一直有一个核心矛盾存在,就是这三者的速度差异。程序里大部分语句都要访问内存,有些还要访问I/O,由于木桶理论,程序整体的性能取决于最慢的操作——读写I/O设备,也就是说单方面提高CPU性能是无效的。为了合理利用CPU的高性能,平衡三者的速度差异,计算机体系结构、操作系统、编译程序都做出了贡...

2019-08-24 03:47:53 121

原创 阿里面试复盘

C++中的this指针在 C++ 中,每一个对象都能通过this指针来访问自己的地址。this指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有this指针,因为友元不是类的成员。只有成员函数才有this指针。下面给出一个案例帮助我们更好的理解:#include <iostream>#include <s...

2019-08-16 17:39:46 195

原创 SQL

MySQL中SELECT语句执行顺序语句编写顺序:SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...下面先给出一个完整的SELECT语句:下面是一个完整的SELECT语句:SELECT columns_name -- 查询结果列名FROM tab...

2019-08-12 19:31:22 98

原创 Vector

vector简介vector是序列式容器(sequence containers)中的一种。向量(vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。vector的数据安排以及操作方式,与array非常相似。两者唯一的差别在于空间的运用的灵...

2019-08-07 17:26:46 1571

原创 Qt安装及测试

Qt下载这里给出Qt的离线安装包下载地址:http://download.qt.io/archive/qt/Qt离线安装包下载页面可以看出,在2019年6月18号,Qt发布了最新的版本5.13.0,我这里安装的版本是5.11.1:http://download.qt.io/archive/qt/5.11/5.11.1/5.11.1版本我这里是windows系统因...

2019-06-27 22:11:36 1946

原创 随便写写——C++实现简易整型数组类

用C++实现一个简单的整型数组类该整型数组类包含以下简要几个功能:默认构造函数(最大容量为10) Array() 有参构造函数(自定义最大容量) Array(int capacity) 获取数组容量 getN() 获取当前...

2019-06-25 14:18:47 3614

原创 InnoDB存储引擎——聚簇索引

之前学习了数据库实战45讲的前半部分,觉得应该需要停下来沉淀一下,过一阵子再去继续学习。今天,来分析一下InnoDB存储引擎管理的InnoDB表如何基于聚簇索引建立的!其实之前在学校的数据库课程上,我一直以为聚簇索引是一种索引类型,然后结合InnoDB存储引擎,自然而然的便认为聚簇索引即表中的B+树主键索引,殊不知一直理解的是错误的概念,前阵子在学习<高性能MySQL>这...

2019-05-31 15:06:42 1446 1

原创 Fighting——Day4

今天计划先完成昨天未完成的SQL在线编程题由于在上一篇博客当中已经给出了所有表的创建语句,这里就不再重复说明了,我们就直接开始吧!光速打脸现场,下面给出表的定义:CREATE TABLE `departments` ( // 部门表`dept_no` char(4) NOT NULL, // 部门号`dept_name` varchar(40) ...

2019-05-22 14:02:29 146

原创 Fighting——Day3

今天打算复习数据库SQL,计划完成牛客网上的数据库SQL实战30道题!下面给出"员工表"的SQL创建语句:CREATE TABLE `employees` ( // 员工表`emp_no` int(11) NOT NULL, // 员工号`birth_date` date NOT NULL, // 出生日期`fir...

2019-05-18 16:29:47 92

原创 Fighting——Day2

复习<<数据结构与算法——栈>>栈是一种“操作受限”的线性表,从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端进行数据的插入与删除。后进者先出,先进者后出,这就是典型的“栈”结构。为什么要引入栈?我们之前学习了顺序表和链表这两种结构体,分别是线性表的不同实现方式。对于这两种数据结构,我们没有任何的操作限制,可以在任意位置进行增删查改,那为什么会...

2019-05-17 20:54:07 131

原创 Fighting——Day1

复习<<数据结构与算法——复杂度分析>>学习数据结构与算法的目的为了提高代码的执行效率及降低代码所占用的存储空间,因此时间复杂度及空间复杂度是评估一个算法的重要因素。而关于这两者的分析统称为复杂度分析。复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半。为什么需要复杂度分析?我们知道,可以直接通过统计、监控,就可以直接得到算法...

2019-05-14 21:10:54 224

原创 MySQL——计数器表

如果应用在表中保存计数器,则在更新计数器时可能碰到并发问题。计数器表在Web应用中很常见。可以用这种表缓存一个用户的朋友数、文件下载次数等。创建一张独立的表存储计数器通常是个好主意,这样可以使计数器表小且快。使用独立的表可以帮助避免查询缓存失效,并且可以使用以下的一些高级技巧。计数器表的创建假设有一个计数器表,只有一行数据,记录网站的点击次数:CREATE TABLE hit_c...

2019-05-03 16:51:16 452

原创 MySQL——VARCHAR和CHAR类型

前述VARCHAR和CHAR是两种最主要的字符串类型。不幸的是,很难精确地解释这些值是怎么存储在磁盘和内存中的,因为这跟存储引擎的具体实现有关。下面的描述假设使用的存储引擎是InnoDB和/或者MyISAM。如果使用的不是这两种存储引擎,请参考所使用的存储引擎的文档。先看看VARCHAR和CHAR值通常在磁盘上怎么存储。请注意,存储引擎存储CHAR或者VARCHAR值的方式在内存中和在...

2019-05-03 15:04:57 37331 4

原创 普通索引与唯一索引

所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。所谓唯一索引,就是在创建索引时,限制索引的值必须是唯一的。通过该类型的索引可以更快速地查询某条记录。普通索引还是唯一索引?假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,就会...

2019-04-08 20:20:06 18840

原创 TCP/IP协议

运输层的两个主要协议TCP/IP运输层的两个主要协议都是互联网的正式标准,即:用户数据报协议UDP(User Datagram Protocol)[RFC 768] 传输控制协议TCP(Transmission Control Protocol)[RFC 793]用户数据报协议UDP用户数据报协议UDP只在IP的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及...

2019-04-02 22:22:00 361

空空如也

空空如也

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

TA关注的人

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