自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HTTP/1.0、HTTP/1.1、HTTP/2.0区别

一、HTTP的基本优化影响一个 HTTP 网络请求的因素主要有两个:带宽和延迟。 带宽:如果说我们还停留在拨号上网的阶段,带宽可能会成为一个比较严重影响请求的问题,但是现在网络基础建设已经使得带宽得到极大的提升,我们不再会担心由带宽而影响网速,那么就只剩下延迟了。 延迟: 浏览器阻塞(HOL blocking):浏览器会因为一些原因阻塞请求。浏览器对于同一个域名,同时只能...

2019-09-01 16:23:45 593

原创 TCP三次握手和四次挥手

在计算机网络中,TCP的连接的建立和断开过程即三次握手和四次挥手是相当重要的。本人在面试的时候,就经常会被面试官问到这方面的知识,一开始虽然自己心里是知道但表达出来还是磕磕碰碰的,相当坎坷,但这可能会导致面试官会产生一种觉得你对这块的知识并不是很熟悉的“错觉”。所以把基础的知识掌握并明确的表达出来很重要,本人血的教训QAQ。所以,今天就将TCP的三次握手和四次挥手过程做详细整理,并附上面试过程...

2019-05-17 20:25:58 492

原创 卡特兰公式

卡特兰公式:应用:问题:若已知一序列进栈顺序为a1,a2,a3,a4,问存在多少种可能的出栈序列 答案:14将n=4 代入到卡特兰公式中,C(8,4)/(4+1)=8!/[4!*(8-4)!] / 5=14

2021-08-16 14:13:37 297

原创 wireshark对手机app抓包,手机可以连上共享网络并上网,但是wireshark中所有接口都没有流量

用wireshark对手机app进行抓包,手机连上电脑共享的网络后可以上网,但是wireshark上所有接口都没有流量:排查思路:(1)确认wireshark有权限在mac上使用Wireshark,首先需要打开网卡,允许wireshark访问终端命令:sudo chmod 777 /dev/bpf*之后就可以看到wireshark的ap1接口有流量了,如下图:...

2021-06-23 10:36:54 1139

原创 正则表达式

一、介绍:正则表达式是一种文本模式匹配,包括普通字符(例如,a到z之间的字母)和特殊字符(成为”元字符”)。它是一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子串,将匹配的子串替换或者从,某个字符串中取出某个条件的子串。shell也支持正则表达式,但不是所有的Linux命令都支持正则表达式,常见的命令只有grep、sed、awk命令支持正则表达式。grep -E :指定-E参数,指的是支持正则表达式,等价于egrep正则表达式使用双引号引起来。二、特殊字符定...

2021-01-31 15:20:24 259

原创 shell函数

一、函数介绍将代码模块化,一个模块实现一个功能,这样就能达到逻辑清晰、拍错简单的目的使用函数的优点:(1)代码模块化,调用方便,节省内存(2)代码模块化,代码量少,排错简单(3)代码模块化,可以改变代码的执行顺序二、函数语法三、函数应用函数默认不会执行,除非调用它,可以使用函数名直接调用...

2021-01-31 14:20:35 135

原创 shell流程控制——循环语句

目录一、for循环介绍1、for语法2、循环控制二、while循环三、until语句四、case语句五、shell特殊参数一、for循环介绍for循环又叫做条件循环,或者for i in,前者说的是for的特性,后者说的是for的语法。为什么使用循环?减少代码冗余度,节省内存;结构清晰;节省时间1、for语法(1)for语法1eg:从1数到9#!/bin/bashfor i in `seq 1 9` #等价于for i in..

2021-01-31 14:04:32 210

原创 shell中的运算和流程控制——if语句

一、shell中的运算test命令(man test查看帮助信息)1、数学比较运算运算符解释:-eq(equal) 等于 -gt(greater than) 大于 -lt(less than) 小于 -ge (greater or equal) 大于或等于 -le(lessor equal) 小于或等于 -ne (not equal) 不等于 test 命令可检测比较运算的结果eg:巧妙...

2021-01-31 12:06:06 343

原创 shell数组

一、基本数组数组定义:数组名称=(元素1 元素2 元素3...)数组读出:${数组名称[索引]}数组的赋值方法:数组的查看:declare -a :查看系统中声明过的数组访问数组元素:二、关联数组关联数组可以允许用户自定义数组的索引,使用起来更加方便高效声明一个关联数组(不声明默认是基本数组)declare -A ARRAY1赋值:...

2021-01-30 18:09:54 113

原创 shell变量

定义变量设置一个本地变量(私有用户变量):变量格式:变量名=值 (注意:如果值为字符串,要用带引号或者双引号引起来)在shell编程中变量名和等号之间不能有空格一般情况下,为了区分变量名称和bash里的关键字,一般将变量名定义为大写的字母组合(shell是区分大小写的)unset:取消定义的变量在终端上定义的变量,要使其消失,除了关闭当前终端,还有unset命令注意:若在~/.bash_profile文件里定义了一个变量,source ~/.bash_profile后生效

2021-01-30 17:36:05 106

原创 格式化输出和基本输入

前言:一个程序需要有0个或以上的输入,一个或更多的输出一、echo命令介绍常用的就是\a,\b,\teg:利用echo -e 和\b做倒计时二、echo颜色代码脚本中要使echo显示内容带颜色显示,使用-e参数echo -e "\033[背景色;字体色m字符串\033[0m"颜色对应的码:...

2021-01-30 16:09:12 255 3

原创 shell脚本语法

shell脚本是什么?定义:shell脚本就是将完成一个人物的所有命令,按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限(chmod 700)目录一、如何抒写一个shell脚本脚本格式:(以下3点是脚本必须的)二、如何运行一个脚本三、shll中的特殊符号四、管道五、shell重定向六、shell数学运算七、脚本退出小扩展:echo一、如何抒写一个shell脚本脚本的命名要有意义扩展名:Linux系统下虽然没有扩展名的概念,但是最好加.

2021-01-30 15:20:31 250

原创 为什么MyisAM与InnodDB底层采用B+树做索引

1.为什么不是二叉树、红黑树什么的呢?首先,一般来说,索引本身也很大,不可能全部存在内存中,因此索引往往以索引文件的方式存在磁盘上。然后一般一个结点一个磁盘块,也就是读一个结点要进行一次IO操作。而二叉树这些树类的数据结构,查找时间主要和树的高度有关,所以虽然一颗AVL树或者是红黑树在查找上比起顺序遍历的O(N)有了比较大的改善,但B树和B+树因为每个结点存的元素更多,所以查询更快,对磁盘...

2019-10-09 17:40:54 414

原创 分治法——求子集

题目:给定一个集合,求其子集。如{1,2,3},子集为(1,2,3),(1,2),(1,3),(1),(2,3),(2),(3),(空集)思路:典型的分治法的思想。不过额外定义了一个与原数组相同长度的数组brr初始化全为0,通过修改brr中元素的值,最后根据brr的值来判断是否打印arr数组对应位置的元素,为0不打印,为1则打印。代码实现:void QiuZiJi(int arr...

2019-10-08 22:28:27 517

原创 分治法——全排列

题目:给定一个数组序列,求其全排列。如:{1,2,3},全排列为(1,2,3),(1,3,2),(2,1,3),(2,3,1),(3,1,2),(3,2,1)思路:采用分治算法,不断递归代码实现:void Perm(int arr[],int k,int m){ if(k==m)//数组中只有一个元素 { for(int i=0;i<=m;++i) { ...

2019-10-08 22:21:08 409

原创 关系型数据库和非关系型数据库

当前数据库分为关系型数据库和非关系型数据库,本文将对这两种数据库进行简单介绍。一、关系型数据库关系型数据库是指采用了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。关系模型中常用的概念:关系:一张二维表,每个关系都具有一个关系名,也就是表名元组:二维表中的一行,在数据库中被称为记录属性:二维表中的一列,在数据库...

2019-10-08 17:32:15 561

原创 分治法 / 动态规划——最大子段和

题目:给定n个整数(可能为负整数)组成的序列a1,a2,a3,a4,a5,..an,求该序列子段和的最大值,“子段和”定义为连续(下标递增)的元素之和。当所有的整数均为负整数时定义其最大子段和为0。如序列为{-2,11,-4,13,-5,-2}时,最大子段和为20。该问题可以用分治法或者动态规划来求解。下面给出两种算法的思路及代码实现2.分治法求解思路:将所给的序列分为长度相等的两部分...

2019-10-07 18:51:54 1204

原创 单链表快排

说到快速排序,基于数组时,我们一般使用两个指针,一个指向首元素,一个指向尾元素,通过这两个指针的移动和交换达到快排的目的,但是当基于单链表时,此方法就行不通了,因为单链表是单向的,只有后继指针,无前驱指针,只能向后遍历,不能向前遍历。那么基于单链表时到底应该怎样进行快速排序呢?本文针对于该问题给出具体的解决方法。思路:定义两个指针pfirst和psecond,前者初始化为传入的头结点begin...

2019-10-07 17:10:28 196

原创 动态规划——打家劫舍II

题目(打家劫舍II):在上次盗窃完一条街道之后,窃贼又转到了一个新的地方,这样他就不会引起太多注意。这一次,这个地方的所有房屋都围成一圈。这意味着第一个房子是最后一个是紧挨着的。同时,这些房屋的安全系统与上次那条街道的安全系统保持一致。给出一份代表每个房屋存放钱数的非负整数列表,确定你可以在不触动警报的情况下盗取的最高金额。思路:这个题目比打家劫舍I中多了一个前提,就是所有的房屋围成一圈...

2019-10-07 14:05:26 280 1

原创 动态规划——打家劫舍I

题目:有n个房子,排成一排,已知每个房子的糖果数目,要求不能在相邻两个房子里偷糖果,这样会暴露自己,走一遍所有屋子,最多能拿多少颗糖果思路:动态规划。遍历的时候分两种情况,偷第一个房子的糖果,和不偷第一个房子的糖果,前者总糖果数=第一个房子的糖果数+剩余房子的最大糖果数;后者总糖果数=除了第一个房子的其余房子可得的最大糖果数。用递归算法解决该问题时,会产生很多重叠子问题,效率比较差,一般用...

2019-10-07 13:12:58 239

原创 回溯法——n后问题

题目:在一个N*N的棋盘中,放置n个皇后,要求同一行、同一列、同一对角线上不能存在两个皇后,求放置皇后的策略。思路:将棋盘压缩存储为一维数组ar[N],数组中第i个元素就是棋盘第i行的皇后位置。这样就不存在行冲突的问题,至于列冲突,判断当前ar数组中是否存在与将要放置皇后的j列下标相等的数,即可,若存在,则该位置不可放置皇后,j++;若不存在,则该位置可以防止皇后,对于对角线冲突,从棋盘左上角...

2019-10-06 20:44:41 942

原创 剑指offer25:合并两个有序单链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。例如,输入下图中的链表1和链表2,则合并之后的升序链表如链表3所示,链表节点定义如下所示:typedef struct Node{ int mdata; struct Node* pnext;}Node,*PNode;合并的递归思路:链表1的头结点的值(注意:此处的头结点是指链表中的第一个...

2019-10-06 18:33:46 164

原创 定义结构体时加typedef和不加typedef的区别

不加typedef时:struct S{ int i;}a,b;相当于定义了结构体S和S的两个变量a,b加上typedef:typedef struct S{ int i;}a,b;除了定义结构体S,又给该结构体起了别名a和b;a和b位置的标识符就都是别名而不是变量名,a和b也可以像类型一样用来定义结构体变量。因为是起了别名,所以不起结构体名也没问...

2019-10-06 17:12:40 4215

原创 动态规划——最长公共子序列LCS

一、动态规划算法动态规划算法与分治法类似,其基本思想也是将带求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。然而,不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算...

2019-10-06 12:36:36 937

原创 找毒水和找不同的球

前两天面试的时候,被问到了两个很有意思的题目:一、找毒水一共有100瓶药水,只有一瓶是毒药,已知如果小白鼠喝了这瓶有毒的药水(三天发作),即会在三天时死亡,请问如何在3天的时间里分辨出哪瓶是毒药,并且使用的小白鼠数量最少。答案:7只这个题题目其实很有意思,我当时一开始没搞懂题目意思,就想着3天后才会发作死亡,那怎么都不可能在三天之内找出这瓶毒药的啊。其实我是自己走到了一个死胡同,按...

2019-09-27 01:23:13 365

原创 面经——线程切换开销、弱引用智能指针weak_ptr

这段时间一直在忙着秋招,一边面试,一边整理总结,在面试的过程中也会发现很多问题,自己学习的时候并没有深究,导致“知其然而不知其所以然”,当面试被问到的时候,感到很可惜。其实想想也不必可惜,面试就是一个查漏补缺的过程,在这个过程中发现自己的一些遗漏之处,进一步查阅资料、深入学习,对自己也是很有帮助的。现在对自己遇到的以及和周围的小伙伴交流的他们遇到的其中一些问题,整理下面经,必要时留下有参考意义...

2019-09-24 23:46:51 357

转载 Linux虚拟地址空间布局以及进程栈和线程栈总结

这篇文章转自https://blog.csdn.net/FreeeLinux/article/details/53782986

2019-09-17 22:44:01 204

原创 寻找数组中和为定值的两个数

题目描述:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。下面给出这个题的不同解法(注意阐述中数列有序无序的区别):(1)这个题目相当于,对每个a[i],查找sum-a[i]是否也在原始序列中...

2019-09-08 00:28:56 329

原创 HTTP响应状态码

HTTP1.1状态码分为五类,具体如下:100-199 用于指定客户端应相应的某些动作。200-299 用于表示请求成功。300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。400-499 用于指出客户端的错误。 500-599 用于指出服务器错误。常用的状态码:1x...

2019-09-01 14:57:56 364

原创 【C++】智能指针

目录一、智能指针的引入二、什么是智能指针?三、智能指针的分类3.1 auto_ptr3.2 scope_ptr3.3 shared_ptr强智能指针3.4 weak_ptr 弱智能指针一、智能指针的引入我们都知道,栈上的内存是程序自己开辟自己释放,而堆上的内存是由程序员手动开辟,手动释放。由于C++语言不像java语言自带垃圾回收机制,在利用C++语言编程过程中...

2019-08-30 21:56:49 206

原创 两种高效的事件处理模式——Reactor和Proactor模式

随着网络设计模式的兴起,Reactor 和Proactor事件处理模式应运而生。同步IO模型通常用于实现Reactor模式,异步I/O模型则用于实现Proactor模式。今天我们来看,如何使用同步I/O方式模拟出Proactor 模式。一、Reactor模式Reactor是这样一种模式,它要求主线程(I/O 处理单元,下同)只负责监听文件描述上是否有事件发生,有的话就立即将该事件通知工作线...

2019-08-26 19:55:10 412

原创 I/O操作——同步与异步,阻塞与非阻塞

一、什么是I/O?I/O是Input/Output(输入/输出),可分为I/O设备和I/O接口两个部分。二、什么是I/O操作?在Linux中,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO、管道、终端,一切都是文件,一切都是流。在信息交换的过程中,我们对这些流进行数据的收发操作,简称为I/O操作(input and output),简言之就是磁盘读...

2019-08-26 19:52:06 627

原创 C++设计模式——观察者模式

一、观察者模式引入观察者模式(Observer 模式)应该可以说是应用多、影响广的模式之一,因为 Observer 的一个实例 Model/View/Control(MVC)结构在系统开发架构设计中有着很重要的地位和意义,MVC实现了业务逻辑和表示层的解耦。Observer 模式也是软件开发过程中必须要掌和使用的模式之一。Observer 模式要解决的问题为:建立一个一(Subject)...

2019-08-21 15:55:08 532

原创 TCP可靠传输的实现

TCP可靠传输的实现从三个方面来说:1、传输的所有数据都能到达对端通过32位确认号、超时重传、滑动窗口、拥塞控制等来实现2、数据不乱序通过TCP报头中的32位序号可对其保证,序号还可处理重复的报文段3、数据不出错(不被修改或失真)通过TCP报头中的16位校验和保证(CRC)。不仅可校验TCP头部,而且可校验数据部分。下面分别阐述上述提到的机制:目录1.滑动窗口...

2019-08-20 22:47:48 795 1

原创 TCP协议详解

一、TCP主要特点TCP是面向连接的、可靠的、字节流服务面向连接:应用程序在使用TCP协议之前,必须先建立TCP连接,在传送数据完毕后,必须释放已经建立的TCP连接。也就是说应用进程之间的通信号和像在“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放连接。注意:每一条TCP连接只能有两个端点,是点对点的,所以基于广播和多播(目标是多个主机地址的)应用程序不能使用TCP服务,而无连接协...

2019-08-20 18:46:52 216

转载 Cookie和Session的工作原理及比较

目录一、Cookie详解二、Session详解三、Cookie和Session的区别一、Cookie详解1、简介因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料。最后结帐时,由于HTTP的无状态性,不通过额外的手段,服务器并不知道用户到底买了什么。为了做到这...

2019-08-20 11:49:28 203

原创 TCP/IP五层协议

目录一、计算机网络OSI七层模型、TCP/IP四层、五层网络模型二、TCP/IP协议族1.数据链路层2.网络层3.传输层4.应用层三、各层的物理设备一、计算机网络OSI七层模型、TCP/IP四层、五层网络模型分层的目的:多层之间相互独立,灵活性好;结构上可分割开来,易于实现和维护;促进标准化工作。二、TCP/IP协议族TCP/IP协议族是一个四层协议...

2019-08-13 17:42:01 4212

原创 C++设计模式——工厂模式

目录一、工厂模式功能二 、三种工厂模式1.简单工厂模式2.工厂方法模式3.抽象工厂模式一、工厂模式功能1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次...

2019-08-13 16:34:41 373

原创 面向对象五大设计原则

1.单一职责原则(Single-Resposibility Principle)"对一个类而言,应该仅有一个引起它变化的原因。"声明一个对象/类应该只有一个职责。本原则是我们非常熟悉地"高内聚性原则"的引申,但是通过将"职责"极具创意地定义为"变化的原因",使得本原则极具操作性,尽显大师风范。同时,本原则还揭示了内聚性和耦合生,基本途径就是提高内聚性;如果一个类承担的职责过多,那么这些职责就会...

2019-08-13 15:37:02 441

原创 C++设计模式——单例模式

我们应该知道,C++中有21种设计模式,常见的有单例模式、迭代器模式、工厂模式、抽象工厂模式、观察者模式。今天我们先来说一下单例模式。单例模式(Singleton)是设计模式中最为简单、最为常见、最容易实现的模式。单例模式就是怎样去创建一个唯一的变量(对象),即类只能实例化一个对象1.单例模式实现思路:1.屏蔽构造函数:屏蔽生成对象的方法(私有化):将构造函数和拷贝构造函数写在私有...

2019-08-12 20:55:22 261

空空如也

空空如也

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

TA关注的人

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