自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 尚硅谷_Java零基础教程(面向对象1.0)-- 学习笔记

Java——面向对象面向对象0、零基础教程目录1、课程框架面向对象0、零基础教程目录1、课程框架1、目录2、主体框架1、面向对象的理解2、类和对象3、类的内部成员

2020-11-26 18:51:24 14

原创 跳跃表(skiplist )详解及其C++编程实现

跳表SkipList跳表SkipList1、背景2、定义2.1、SkipList基本数据结构及其实现3、实现4、使用方法4.1、跳表的创建4.2、跳表插入操作参考跳表SkipList1、背景为什么选择跳表?目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。跳表是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。用跳表吧,跳表是一种随机化的数据结构,目前开源软件

2020-11-18 11:14:39 35 1

转载 Mysql中的锁机制——InnoDB锁

InnoDB锁InnoDB锁一、InnoDB锁参考InnoDB锁一、InnoDB锁参考1、https://www.cnblogs.com/leedaily/p/8378779.html2、https://zhuanlan.zhihu.com/p/2138140003、https://zhuanlan.zhihu.com/p/1492284604、https://zhuanlan.zhihu.com/p/95207161

2020-11-09 09:19:02 40

转载 Mysql中的锁机制——MyISAM表锁

MyISAM表锁MyISAM表锁1、MyISAM表锁1.1、MyISAM存储引擎的锁阻塞实例1.2、如何加表锁参考:MyISAM表锁1、MyISAM表锁MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行的!根据如表20-2

2020-11-08 11:14:06 58

原创 Mysql中的锁机制详解(悲观锁、乐观锁,行锁、表锁)

Mysql里的锁Mysql里的锁1、为什么要加锁?2、什么是锁3、锁是基于什么实现的?4、数据库中的锁分类4.1、什么悲观锁?4.2、什么乐观锁?4.3、表锁(偏读)4.3.1、特征4.3.2、使用4.4、行锁(偏写)4.4.1、特征4.4.2、使用参考Mysql里的锁1、为什么要加锁?我们知道,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。

2020-11-07 10:52:26 43

原创 mysql优化—— 索引查询优化

查询优化查询优化一、小表驱动大表查询优化一、小表驱动大表优化原则:对于MySQL数据库而言,永远都是小表驱动大表。/*** 举个例子:可以使用嵌套的for循环来理解小表驱动大表。* 以下两个循环结果都是一样的,但是对于MySQL来说不一样,* 第一种可以理解为,和MySQL建立5次连接每次查询1000次。* 第一种可以理解为,和MySQL建立1000次连接每次查询5次。*/for(int i = 1; i <= 5; i ++){ for(int j = 1; j &l

2020-11-06 10:49:59 18

原创 mysql优化—— 索引失效案例分析

索引失效索引失效索引失效的情况1、全值匹配我最爱2、最佳左前缀法则索引失效索引失效的情况1、全值匹配我最爱。2、最佳左前缀法则。3、不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描。4、索引中范围条件右边的字段会全部失效。5、尽量使用覆盖索引(只访问索引的查询,索引列和查询列一致),减少SELECT *。6、MySQL在使用!=或者<>的时候无法使用索引会导致全表扫描。7、is null、is not nu

2020-11-05 15:50:10 22

原创 mysql优化—— 索引分析

索引分析索引分析1、单表索引分析2、两表索引分析3、三表索引分析结论索引分析1、单表索引分析数据准备DROP TABLE IF EXISTS `article`;CREATE TABLE IF NOT EXISTS `article`(`id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',`author_id` INT(10) UNSIGNED NOT NULL COMMENT '作者id',`cate

2020-11-04 19:36:11 10

原创 mysql优化—— Explain字段介绍和使用

explain详解explain详解1、MySQL数据库基本架构2、explain定义、使用3、explain字段说明3.1、id:表的读取和加载顺序3.2、select_type: 查询中每个select子句的类型3.3、table:对应行正在访问哪一个表,表名或者别名3.4、type:访问类型参考explain详解1、MySQL数据库基本架构MySQL数据库和其他数据库相比,MySQL有点与众不同,主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离。

2020-11-03 16:24:36 25

原创 C++ 函数调用过程中栈区的变化——(栈帧、esp、ebp)

C++ 函数调用过程中栈区的变化C++ 函数调用过程中栈区的变化参考C++ 函数调用过程中栈区的变化参考1、https://blog.csdn.net/m0_38087936/article/details/829380062、https://blog.csdn.net/fang92/article/details/46494665?utm_source=blogxgwz3...

2020-10-11 10:28:05 57

原创 C++ vector中resize()和reserve()区别

vector中resize 和 reserve区别resize 和 reserve区别1、reserve()避免多次不必要的扩容2、resize是改变容器的大小,且创建对象3、resize()和reserve()区别resize 和 reserve区别1、reserve()避免多次不必要的扩容成员方法功能capacity()告诉我们当前 vector 容器总共可以容纳多少个元素。如果想知道当前 vector 容器有多少未被使用的存储空间,可以通过 capacity()-size(

2020-10-09 16:29:32 9

原创 c++ 类的默认八种函数

类的默认八种函数类的默认八种函数参考类的默认八种函数参考1、https://www.cnblogs.com/lsgxeva/p/7668200.html

2020-10-05 10:11:06 18

原创 c++读写锁的实现

读写锁的实现 读写锁的实现1、使用互斥锁和条件变量实现读写锁2、使用2个互斥锁实现读写锁3、用mutex和conditon实现写优先的读写锁参考读写锁的实现1、使用互斥锁和条件变量实现读写锁class readwrite_lock{public: readwrite_lock() : stat(0) { } void readLock() { mtx.lock(); while (stat < 0) cond.wait(mtx); ++stat; mt

2020-10-03 17:39:29 36

原创 C++中构造函数和析构函数常见面试题?

构造函数和析构函数常见面试题?构造函数和析构函数常见面试题?1、永远不要在构造函数或析构函数中调用虚函数2、为什么构造函数不能定义为虚函数3、为什么析构函数可以定义为虚函数4、构造函数的执行顺序?析构函数的执行顺序?5、构造函数的执行顺序?析构函数的执行顺序?参考构造函数和析构函数常见面试题?1、永远不要在构造函数或析构函数中调用虚函数#include<iostream>using namespace std;class Base{public: Base() { Fun

2020-10-02 08:06:42 63

原创 LeetCode分类刷题:二叉树(Tree)——(二叉树之前序、中序、后序、层次遍历、深度相关、侧视图相关)

二叉树 Tree 二叉树(Tree)1、定义2、二叉树之前序、中序、后序遍历3、二叉树之层遍历4、二叉树之深度相关5、二叉树之侧视图相关6、二叉树之递归应用参考二叉树(Tree)1、定义树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等

2020-10-01 08:40:33 38

原创 C++三数之和——无序数组中找出和为0(leetcode15)的三元组以及最接近的三数之和(leetcode16)

C++实现生产者和消费者模型 C++实现生产者和消费者模型C++实现生产者和消费者模型class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> result; int length = nums.size(); if(length < 3)

2020-09-30 08:10:52 52

原创 计算机网络——数据从网卡到应用的过程

数据从网卡到应用的过程 数据从网卡到应用的过程1、过程概述2、网卡3、网卡驱动数据从网卡到应用的过程1、过程概述假设一个HTTP请求的数据到达网卡,那数据是如何被层层处理并到达应用呢?2、网卡网卡(Network Adapter),也称网络适配器,是一个 硬件设备,有全球唯一的 MAC(Media Access Control)地址,MAC地址在网卡生产时就被烧制在ROM中,网卡初始化时恢复到计算机中。1、网卡收到的数据是 光信号或电信号,然后将其还原成 数字信息(1和0组成)。下图是

2020-09-29 09:55:16 114

转载 C++实现字符串匹配——KMP算法:

KMP算法 KMP算法KMP算法#include <iostream>#include <vector>#include <string>using namespace std;int ViolentMatch(string& s, string& p){ int sLen = s.size(); int pLen = p.size(); int i = 0; int j = 0; while (i < sLen &am

2020-09-28 08:33:21 44

原创 一个数组中的元素所有的元素都出现三次,只有一个元素只出现了一次,找出这个元素

一个数组中的元素所有的元素都出现三次,只有一个元素只出现了一次,找出这个元素 题目题目给定一个数组,除了一个数出现1次之外,其余数都出现3次。找出出现一次的数。如:{1, 2, 1, 2, 1, 2,7},找出7.格式:第一行输入一个数n,代表数组的长度,接下来一行输入数组A[n],(输入的数组必须满足问题描述的要求),最后输出只出现一次的数。数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次。请给出最快的方法找到x。应该如何思考呢?如果是两个相同的就可以利用两个相同的数异或结

2020-09-27 08:31:19 47

原创 计算机网络——网络字节序(大端字节序(Big Endian)\小端字节序(Little Endian))

网络字节序 网络字节序1、网络字节序 (Network Byte Order)和本机转换2、字节序转换函数网络字节序1、网络字节序 (Network Byte Order)和本机转换1、大端、小端字节序“大端”和”小端”表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节序;具体的说:①大端字节序(Big Endian):最高有效位存于最低内存地址处,最低有效位存于最高内存处;②小端字节序(Little Endian):最高有效位

2020-09-26 08:23:28 29

原创 最短路径问题 --- Dijkstra算法详解

最短路径问题 最短路径问题1、最短路径问题介绍2、Dijkstra 算法思路3、Dijkstra算法示例演示4、Dijkstra算法的代码实现(c++)参考最短路径问题1、最短路径问题介绍从图中的某个顶点出发到达另外一个顶点的所经过的边的权重和最小的一条路径,称为最短路径1,给定一个带权有向图 G 与起始顶点 v,求从 v 到 G 中其它顶点的最短路径(每条边上都存在有意义的权值);2,Dijkstra 算法核心是通过已知最短路径寻找未知最短路径;2、Dijkstra 算法思路算法特

2020-09-25 08:18:32 60

原创 C++实现图的深度优先遍历和广度优先遍历

图的深度优先遍历 图的深度优先遍历参考图的深度优先遍历参考1、https://blog.csdn.net/todd911/article/details/91914812、https://blog.csdn.net/weixin_42109012/article/details/94199335

2020-09-24 08:25:04 149

原创 c++实现岛问题

岛问题1. 问题描述2、题解1. 问题描述一个矩阵中只有0和1两种值,每个位置都可以和自己的上、下、左、右四个位置相连,如果有一片1连在一起,这个部分叫做一个岛,求一个矩阵中有多少个岛?比如:0 0 1 0 1 01 1 1 0 1 01 0 0 1 0 00 0 0 0 0 0这个矩阵中有三个岛。2、题解思路我们的主体是进行二维数组的遍历,同时我们也定义一个感染函数。比如我们遇到一个1时候,我们对这个点的上下作用进行感染,让其赋值为2,所以会导致一片为1的点都会被感染为2,只

2020-09-23 08:37:59 11

原创 C++递归实现栈逆序

递归实现栈逆序递归实现栈逆序递归实现栈逆序思路:使用递归函数保存栈中变量。递归函数分两个,一个获取并移除栈底元素,另一个负责逆序。其实俩个递归思路基本一致。获取并移除栈底元素的递归结构图如下:...

2020-09-22 08:30:01 46

原创 C++类的虚函数表和虚函数在内存中的位置

C++类的虚函数表和虚函数在内存中的位置C++类的虚函数表和虚函数在内存中的位置参考C++类的虚函数表和虚函数在内存中的位置虚函数表位于只读数据段(.rodata),即:C++内存模型中的常量区;虚函数代码则位于代码段(.text),也就是C++内存模型中的代码区参考1、https://blog.twofei.com/496/2、https://blog.csdn.net/Lily_zhangrongli/article/details/106650195...

2020-09-21 09:30:19 25

原创 深入浅出静态链接和动态链接

静态链接和动态链接静态链接和动态链接参考静态链接和动态链接参考1、https://blog.csdn.net/kang___xi/article/details/802107172、https://blog.csdn.net/u012662731/article/details/78520349

2020-09-20 08:34:10 25

原创 C++ 打印菱形(实心和空心)

打印菱形 打印菱形1、打印实心菱形2、打印空心菱形打印菱形1、打印实心菱形#include<iostream>using namespace std;int main(){ cout << "Please enter the side length of the diamond:"; int n; cin >> n; for (int i = 0; i<n; i++) // 分为上半层打印和下半层打印,首先打

2020-09-19 07:57:28 192

原创 什么是DNS?为什么选择UDP?详细的DNS解析过程?

DNSDNS1、DNS是什么?2、因特网的域名结构3、缓存(Cache)4、 DNS请求实例DNS1、DNS是什么?DNS ( Domain Name Systme)简单理解就是解析器、域名服务器的组合,比如大家访问知乎,会输入http://www.zhihu.com,事实上网站域名只是一个IP 地址,人们是很难记住各式各样的IP地址的,所以就需要DNS服务器了,DNS就像手机通讯录一样,存放着各亲朋好友的手机号。为什么要存储到通讯录里?因为你不可能记得一百个人的手机号码,但是通过名字你可以快速定位某

2020-09-18 08:32:56 224

原创 C++实现生产者和消费者模型

C++实现生产者和消费者模型 C++实现生产者和消费者模型1、实现细节1、单生产者-单消费者模型参考C++实现生产者和消费者模型1、实现细节具体的实现逻辑是构建一个queue来存储生产的数据,queue不满时可以生产,不空时可以消费。对于这个队列,采用阻塞队列的实现思路。先实现构造函数,初始化一个unique_lock供condition_variable使用。如何在类里面使用unique_lock等需要初始化,并且初始化会加锁的对象。这要研究下。我的理解是构造列表初始化,然后函数体里unl

2020-09-17 08:50:04 65

原创 C++矩阵的不同打印方式(转圈打印矩阵、方形矩阵顺时针旋转90度、“之”字形打印矩阵)

矩阵的不同打印方式矩阵的不同打印方式1、转圈打印矩阵2、方形矩阵顺时针旋转90度3、“之”字形打印矩阵矩阵的不同打印方式1、转圈打印矩阵【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 1415 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10【要求】 额外空间复杂度为O(1)。1 2 3 45 6 7 89 10 11 1213 14 1

2020-09-16 08:02:22 61

原创 C++买卖股票的最佳时机(股票买卖大合集)

股票买卖最佳时机股票买卖最佳时机1、买卖股票的最佳时机题目2、穷举框架3、状态转移框架4、 k = 15、 k = 2股票买卖最佳时机1、买卖股票的最佳时机题目原题链接给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股

2020-09-15 08:20:36 27

原创 C++代码实现Top-K问题最优解决办法

Top-K问题Top-K问题1、问题描述2、解法思想和实现Top-K问题1、问题描述Top-K问题是一个十分经典的问题,一般有以下两种方式来描述问题:在10亿的数字里,找出其中最大的100个数;或者在一个包含n个整数的数组中,找出最大的100个数。前边两种问题描述稍有区别,但都是说的Top-K问题,前一种描述方式是说这里也许没有足够的空间存储大量的数字或其他东西,我们最好可以在一边输入数据,一边求出结果,而不需要存储数据;后一种说法则表示可以存储数据,这种情况下,最简单直观的想法就是对数组进行排序,

2020-09-14 08:09:38 48 1

原创 排序算法——O(n^2)(冒泡排序、选择排序、插入排序)

冒泡排序、选择排序、插入排序冒泡排序、选择排序、插入排序1、冒泡排序(BubbleSort)2、选择排序(SelectionSort)3、插入排序(InsertionSort)冒泡排序、选择排序、插入排序1、冒泡排序(BubbleSort)冒泡排序算法的运作如下:1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序

2020-09-13 08:11:24 12

原创 什么是状态机(Finite-state machine)?

有限状态机有限状态机(FSM)1、 什么是“状态”2、什么是状态机?3、状态机图怎么画?参考有限状态机(FSM)1、 什么是“状态”先来解释什么是“状态”( State )。现实事物是有不同状态的,例如一个自动门,就有 open 和 closed 两种状态。我们通常所说的状态机是有限状态机,也就是被描述的事物的状态的数量是有限个,例如自动门的状态就是两个 open 和 closed 。状态机,也就是 State Machine ,不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换

2020-09-12 08:10:30 32

原创 C++简单实现十进制和二进制、八进制、十六进制之间的转换

十进制到二进制、八进制、十六进制的转换十进制到二进制、八进制、十六进制的转换二进制、八进制、十六进制到十进制的转换十进制到二进制、八进制、十六进制的转换#include <iostream>#include <vector>using namespace std;int main(){ cout << "输入要转换的数字:" << endl; long n = 0; cin >> n; cout << "输入要

2020-09-11 07:50:03 194 1

原创 C++ const关键字的总结(全局/局部变量、修饰指针和引用、成员函数和数据成员、修饰类对象、const与宏定义的区别、Static与Const的区别)

const关键字const关键字1、什么是const2、使用原理2.1、const全局/局部变量2.2、cosnt修饰指针和引用2.3、const修饰函数参数2.4、const修饰函数返回值2.5、const成员函数和数据成员2.6、const修饰类对象3、const_cast的知识4、const与宏定义的区别5、Static与Const的区别参考const关键字1、什么是constconst是一个C++语言的限定符,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性

2020-09-10 08:30:08 28

原创 什么是通用网关接口CGI( Common Gateway Interface)?

通用网关接口CGI通用网关接口CGI1、背景2、预备前端知识3、什么是CGI4、CGI使用原理5、缺点参考通用网关接口CGI1、背景早期的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运行动态脚本,为了解决Web服务器与外部应用程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通用网关接口。简单理解,可以认为CGI是Web服务器和

2020-09-09 00:22:48 15

原创 int i =1 是原子操作吗?i++是原子操作吗?

int i =1 是原子操作吗?i++是原子操作吗?int i =1 是原子操作吗?i++是原子操作吗?int i =1 是原子操作吗?i++是原子操作吗?原子操作(atomic operation)指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。现代操作系统中,一般都提供了原子操作来实现一些同步操作,所谓原子操作,也就是一个独立而不可分割的操作。在单核环境中,一般的意义下原子操作中线程不会被切换,线程切换要么在原子操作

2020-09-08 08:59:05 211

原创 【Linux】守护进程( Daemon)的定义,作用,创建流程

守护进程( Daemon)守护进程( Daemon)1、定义2、作用3、创建流程4、实例参考守护进程( Daemon)1、定义守护进程是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或循环等待处理某些事件的发生;它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机才随之一起停止运行;守护进程一般都以root用户权限运行,因为要使用

2020-09-07 08:25:53 53

原创 计算机网络常见面试问题 —— HTTP状态码以及常见的请求字段

HTTP状态码以及常见的请求字段HTTP状态码以及常见的请求字段1、HTTP 概述和特征1、HTTP状态码2、HTTP常见的请求字段参考HTTP状态码以及常见的请求字段1、HTTP 概述和特征HTTP 概述HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:WorldWide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTT

2020-09-06 08:49:49 60

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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