自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 select、poll、epoll的优缺点及底层实现

select模型select优点select缺点poll模型poll优点poll缺点epoll模型epoll优点epoll缺点首先我们要知道,这三种都是IO多路转接模型什么叫IO多路转接所谓IO多路转接模型,就是指对大量描述符进行监控,大量描述符中有我们所关心的描述符就绪了,则调用返回,并且告诉哪些进程就绪了select模型int sel...

2019-08-20 16:17:04 1117

原创 SSA大法好

在学一门语言的过程中,如果不看中间代码和源码怎么能知晓这门语言调度器的调度过程呢?今天我就来介绍一个用于看golang重点代码的小工具GOSSAFUNC=hello go build hello.go例如这么一个问题首先我们在本地创建一个hello.go插入代码package mainimport "fmt"func main() { a := new(struct{...

2020-01-16 20:07:52 510 1

原创 Git基础学习总结

几个常用命令git status 查看状态git branch 查看当前处于那个分支git checkout *** 对分支的操作git add 将文件添加到缓冲区git commit 添加描述 一般是-mgit merge 合并分支,一般使用--no-ff,不删除原有分支,又名”快进式合并“git push 推送,就是将缓冲区的代码上传到github仓库中...

2019-12-06 17:28:13 200

原创 将你的VIM配置成go的IDEA

https://learnku.com/articles/24924主要配置时还是要借助上面这个链接,当我在mac上部署的时候,配置出来屏幕变成蓝色,最后发现原因是在主题颜色,将主题颜色和24Bit颜色删掉即可解决配置时出现pulg不是编译器命令curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.git...

2019-11-12 11:06:37 347

原创 75. 颜色分类

给定一个包含红色、白色和蓝色,一共n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决方案是使用计数排序的两趟扫描算法。...

2019-11-04 20:05:03 169

原创 70. 爬楼梯

假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 ...

2019-11-04 19:29:33 167

原创 RTTI

这个神奇的东西用于存储类的相关信息,用于在运行时识别类对象的信息。C++里面只纪录类的名字和类的继承关系链。使得编译成二进制的代码,对象可以知道自己的名字,以及在继承链中的位置根据这个内存中模型,明显可以看到RTTI info存在于虚表的第一项。所以说RTTI依赖于虚表,所以说dynamic_cast对应的类中一定要有虚函数。验证:http://www.openrce.org/...

2019-11-04 19:19:46 271

原创 64. 最小路径和

给定一个包含非负整数的 mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[[1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。直接动规,没啥好说的class Solution {public: in...

2019-11-03 21:34:07 145

原创 62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?说明:m和 n 的值均不超过 100。示例1:输入: m = 3, n = 2输出: 3解释:从左...

2019-11-02 22:21:31 110

原创 56. 合并区间

给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。...

2019-11-01 22:13:25 116

原创 49. 字母异位词分组

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]说明:所有输入均为小写字母。不考虑答案输出的顺序。直接借助map的特性,...

2019-10-31 20:37:27 111

原创 48. 旋转图像

给定一个 n×n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix =[ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3...

2019-10-30 22:09:42 148

原创 39. 组合总和

给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,所求解集为:...

2019-10-29 21:58:26 148

原创 33. 搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2...

2019-10-28 21:56:10 133

原创 34. 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是O(log n) 级别。如果数组中不存在目标值,返回[-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例2:输入: nums = [5,7,7,8,8,10]...

2019-10-27 21:34:15 138

原创 MySQL中的索引和锁

索引常见的几种类型索引常见的类型有哈希索引,有序数组索引,二叉树索引,跳表等等。在建表的时候我们可能会添加多个索引,而InnDB会为每个索引建立一个B+树进行存储索引,假如我们在建表的时候创建了一个主键索引和普通索引,那么这时候InnDB会为我们建立两个B+索引树一个是主键的 聚簇索引,另一个是普通索引的 辅助索引辅助索引上面的叶子节点的值只是存了主键的值,而在主键的 聚簇索引 ...

2019-10-27 20:30:52 139

原创 C++内存空间分布

如上所示即为典型C内存空间分布图,从高地址向低地址进行说明:1.stack,即栈区,存放自动变量,以及函数调用时保存的信息。每当进行函数调用时,函数的实参和返回地址以及调用者的上下文环境会被存放在栈中;栈区由编译器自动分配,从高地址向低地址扩展,为什么会这样?我也不知道2.heap,即堆区,动态内存分配都是发生在堆区,堆区由程序员分配释放,或程序结束后由操作系统自动回收,从低地址向高地址扩...

2019-10-24 15:53:38 438

原创 事务管理

什么是事务事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体事务的基本操作开始一个事务start transaction;创建一个保存点savepoint 保存点名;回到保存点rollback to 保存点名;操作注意事项:如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用r...

2019-10-24 15:15:26 112

原创 索引

什么是索引索引是一种数据结构,对数据库表中一列数据或者多列数据进行排序的一种结构,实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。索引的优缺点索引能提高查询的速度但是索引会降低更新表的速度而且索引也会占据额外的磁盘空间MySQL中索引底层的数据结构选择当我们使用索引查询的时候不可能把整个索引全部加载到内存,只能逐一加载每个磁盘页,磁盘页对...

2019-10-23 21:14:03 200

原创 表的查询

select列全列查询select * from exam_result;指定列查询select id,name from exam_result;查询字段为表达式select id,yingyu+yuwenfrom exam_result;为查询结果指定别名SELECT column [AS] alias_name [...] FROM table_name;...

2019-10-20 22:11:46 129

原创 表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业 务逻辑角度保证数据的正确性。比如有一个字段是email,要求是唯一的。 表的约束很多,这里主要介绍如下几个: null/not null,default, comment, zerofill,primary key, auto_increment,unique key 。空属性nul...

2019-10-20 17:34:13 219

原创 MySQL中对于表的操作

创建表CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎; 不同的存储引擎,创建表的文件不一样。例如存储引擎是MyISAM,在数据目录中有三个不同的文件,分别是表名.frm...

2019-10-20 16:40:08 92

原创 MySQL中对于库的操作

创建数据库语法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] 示例:创建名为db1的数据库create database db1;当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ gene...

2019-10-20 16:05:50 126

原创 SQL语句分类

DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,IN...

2019-10-20 15:34:44 115

原创 TCP标志位

每个TCP段都有一个目的,这是借助于TCP标志选项来确定的,允许发送方或接收方指定哪些标志应该被使用,以便段被另一端正确处理。TCP标志字段是六位的,与所有标志一样,值1表示特定标志为“开”1. FLAG - 紧急指针第一个标志是紧急指针标志,此标志用于将输入数据标识为“紧急”。这样的进入段不必等待直到先前端被接收端消耗,而是直接发送并立即处理。在数据传输流中,主机正在向远程机器...

2019-10-14 21:53:44 395

原创 MySQL中myisam与innodb的区别

1.InnoDB支持事物,而MyISAM不支持事物2.InnoDB支持行级锁,而MyISAM支持表级锁3.InnoDB支持MVCC, 而MyISAM不支持4.InnoDB支持外键,而MyISAM不支持5.InnoDB不支持全文索引,而MyISAM支持。6.InnoDB不能通过直接拷贝表文件的方法拷贝表到另外一台机器, myisam 支持7.InnoDB表支持多种行格式, ...

2019-10-08 21:32:37 185

原创 HTTPS的工作过程

1. 客户端发送自己支持的加密规则给服务器,代表告诉服务器要进行连接了;2. 服务器从中选出一套加密算法和 hash 算法以及自己的身份信息(地址等)以证书的形式发送给浏览器,证书中包含服务器信息,加密公钥,证书的办法机构;3. 客户端收到网站的证书之后要做下面的事情: 3.1 验证证书的合法性; 3.2 如果验证通过证书,浏览器会生成一串随机数,并用证书中的公钥进行加密...

2019-10-08 21:16:12 170

原创 TCP粘包是怎么产生的

发送方产生粘包 采用 TCP 协议传输数据的客户端与服务器经常是保持一个长连接的状态(一次连接发一次数据不存在粘包),双方在连接不断开的情况下,可以一直传输数据。但当发送的数据包过于的小时,那么 TCP 协议默认的会启用 Nagle 算法,将这些较小的数据包进行合并发送(缓冲区数据发送是一个堆压的过程);这个合并过程就是在发送缓冲区中进行的,也就是说数据发送出来它已经是粘包的状态了。...

2019-10-08 20:39:22 313

原创 浅谈对TCP拥塞控制的理解

拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不至于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以...

2019-10-08 20:34:56 336

原创 浅谈对滑动窗口的理解

TCP利用滑动窗口实现流量控制的机制。滑动窗口是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发送不了数据,所以就有了滑动窗口机制来解决此问题。TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的...

2019-10-08 19:36:03 550 1

原创 Java和C++的异同

两者均为面向对象语言,都使用了面向对象思想(封装,继承,多态)不同点如下va为解释型语言,C++为编译型语言。java的运行过程:源代码经过java编译器编译成字节码,然后由JVM解释执行;C++运行过程:源代码经过编译和链接后生成可执行的二进制代码。所以,java执行速度比C++慢 java可以跨平台(对每种数据类型都分配固定的长度),C++不能(在不同的平台上会分配不同的字节数)...

2019-10-08 16:49:54 107

原创 停止等待协议

停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。主要包括以下几种情况:无差错情况、出现差错情况(超时重传)、确认丢失和确认迟到、确认丢失和确认迟到。...

2019-10-08 15:44:24 723

原创 网络中保活计时器的作用

除时间等待计时器外,TCP 还有一个保活计时器(keepalive timer)。设想这样的场景:客户已主动与服务器建立了 TCP 连接。但后来客户端的主机突然发生故障。显然,服务器以后就不能再收到客户端发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就需要使用保活计时器了。服务器每收到一次客户的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时都没有收到客户端的数据...

2019-10-08 15:41:08 466

原创 HTTP 1.0 和 1.1、1.2 的主要变化

HTTP1.1 的主要变化: 1. HTTP1.0 经过多年发展,在 1.1 提出了改进。首先是提出了长连接,HTTP 可以在一次 TCP 连接中不断发送请求。2. 然后 HTTP1.1 支持只发送 header 而不发送 body。原因是先用 header 判断能否成功,再发数据,节约带宽,事实上,post 请求默认就是这样做的。3. HTTP1.1 的 host 字段。由于虚...

2019-10-07 21:51:07 857

原创 域名缓存

为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管...

2019-10-07 21:36:01 336

原创 DNS协议的解析过程

1. 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。2. 本地域名服务器向...

2019-10-07 21:31:46 345

原创 初识Java

Java是一种面向对象开发的语言面向对象的三大特征封装性:将客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的信息隐藏。简而言之就是,内部操作对外部而言不可见(保护性)继承性:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。多态性:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。...

2019-10-05 22:09:31 94

原创 内联函数和宏定义的区别

宏定义宏定义是#define 所修饰的,宏只是一种定义,他定义了一个语句块,当程序编译时,编译器首先要执行一个“替换”源程序的动作,把宏引用的地方替换成宏定义的语句块,就像文本文件替换一样。1)宏做的只是简单的字符串替换,而函数的参数的传递,参数是有主句类型的 2)宏的参数替换是不经过计算而直接处理的 3)宏在编译前进行,即先用宏替换宏名,然后再编译的 ...

2019-10-03 12:31:39 114

原创 Truncate/Delete/Drop table的特点和区别

言简意赅的说一下delete 和 truncate 仅仅删除表数据,truncate会改变表的高水位线,drop 连表数据和表结构一起删除 delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚 执行的速度上,drop>truncate>deleteTruncate的特点...

2019-09-30 20:30:00 455

原创 23.合并K个排序链表

合并k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6/** * Definition for singly-linked list. * struct Li...

2019-09-26 15:33:54 89

空空如也

空空如也

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

TA关注的人

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