自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 C++运算符优先级

运算符描述例子可重载性第一级别   ::作用域解析符Class::age = 2;不可重载第二级别   ()函数调用isdigit('1')可重载()成员初始化c_tor(int ...

2020-01-28 21:19:11 136

原创 【持续更新】全栈工程师学习笔记

文章目录互联网软件开发技术与实践学习笔记前端1 脚手架的使用1.1 命令行创建1.2 图形界面创建1.3 项目结构2 基础语法知识2.1 实例化2.2 过滤器2.3 指令和事件2.4 内置指令2.5 计算属性2.6 数组更新、过滤与排序3 组件3.1 组件用法3.2 props父组件向子组件传递数据3.3 单向数据流3.4 数据类型验证4组件通信4.1 自定义事件4.2 在组件中使用v-model...

2020-01-13 23:18:55 1201

原创 C++数组初始化与遍历

现象加括号 auto func = [](int n){ int *B=new int[n](); // 这里加了括号 for(int i=0;i<n;i++){ std::cout<<B[i]<<" "; } std::cout<<std::endl; delete[] B; }; func(5);Linux下/Mac下输出结果一致:0 0 0 0 0

2021-08-26 10:18:52 637

原创 数据总线、地址总线、控制总线

数据总线、地址总线、控制总线这三者分别对应在计算机中的有效信息的三个基本属性:内容、指向、行为。对应到这篇文章中:数据总线是CPU与内存或其他器件之间的数据传送的通道,它的宽度就是总共有多少根数据线来传数据,1根线能传1位,这个数对应字长,也就是同一时间可以处理的二进制位数,我们通常所说的多少位处理器中的多少位,就是指的数据总线宽度。CPU通过地址总线来指定存储单元,地址总线的宽度就是能寻址到的地址的位数,最小寻址单位是字节,比如32位寻址,那寻址空间就是2^32B=4GB这么大的内存空间,我们通常所

2021-07-25 15:34:33 7854

原创 const与#define的区别?

1. const的用法1.1 const可以修饰哪些变量?1.1.1 普通变量比如基本类型int、float等。const int a;float const b; // const 写前写后都可以1.1.2 指针变量这里2. #define的用法在预处理阶段,会对内容做简单替换。#define 比如上面这段内容,在经过预处理阶段后,就会变成下面这样。...

2021-07-24 11:35:36 267

原创 如何用协程解决经典并发问题(生产者消费者、读者写者等)

2.golang的协程实现的核心原理,与现有的pthread进行一些对比6.对腾讯libco协程库进行原理与架构的分析腾讯libco的架构从上到下(从高层到底层)可以分为三大部分:libco接口层系统函数hook层事件驱动层lib接口层lib接口层可以理解为暴露给用户直接使用的库函数/宏定义,主要目的是让用户在尽可能不改变原有业务逻辑的情况下实现原先基于线程的调度方案到现在基于协程调度方案的转变。从具体功能上可以将该层拆分为三个模块:协程原语、协程信号量、协程私有变量。协程原语int

2021-07-21 22:26:43 183

原创 Golang GMP模型和pthread库的异同

首先需要明确的是这两者根本不是一个维度的东西。Golang的GMP是Golang从语言层级支持的协程实现模型,而pthread则是遵从POSIX接口规范的线程库。这里只是由于参加比赛的缘故,所以将这两者联系到了一起。相同点1.都需要在切换时保存相应的上下文,都有运行时栈的概念。不同点1.Golang在语言层级实现了协程,对用户隐藏的细节会更多一些,对用户来说更加易用一些,直接go一个函数,底层就会帮你实现复杂的调度逻辑,尽可能榨干CPU计算性能,而pthread的话,需要用户的多线程编程经验要多

2021-07-21 21:47:15 237

原创 对于Golang中GMP模型的理解

GMP模型1 概念介绍2 调度器策略2.1 线程复用work stealing机制hand off机制2.2 控制并行2.3 抢占原则3 调度器生命周期1 概念介绍golang协程实现的核心机制是GMP。G代表goroutine协程,M代表内核态线程,P代表处理器(不等同于CPU核心)。整个GMP模型从下往上可以按照程序空间分为两部分:运行在内核态的部分、运行在用户态的调度器。运行在内核态的部分从下往上分别为底层硬件CPU核心、OS级别调度器、多个内核线程M。M是真正运行G的实体,OS调度器负责把

2021-06-15 14:01:45 1178

原创 单工、半双工、全双工的区别?

单工是只能A->B,这个方向在任何时刻都不可能反转;半双工是任一时刻只能有一个方向的通信,也就是A->B或者B->A,这个通信的方向在不同时刻可以不一样,比如可以一会儿是A->B,一会儿是B->A;全双工是任一时刻都可以有双向同时发生的通信,也就是A->B和B->A可以在同一时刻发生,TCP是经典的全双工。...

2021-06-05 16:40:37 297 3

原创 大小端怎么判断?

核心在于用一字节的char去截取最高byte/最低byte。// 方法一:unsigned short v = 0x0102;unsigned char *p = (unsigned char *)&v; // 其实就是指针赋值+对内存含义解释变化(类型转换)if (*p == 0x01) printf("big\n");else if (*p == 0x02) printf("small\n");// 方法二:利用union的特性union U{ int i; char

2021-02-25 10:07:41 159

原创 GET和POST请求的区别?

1、get 参数通过url传递,post放在request body中。2、get请求在url中传递的参数是有长度限制的,而post没有。3、get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息。4、get请求只能进行url 编码,而post支持多种编码方式。5、get请求浏览器会主动cache,而post不会(除非手动设置)。6、get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留。7、GET产生一个TCP数据包;POST产生两个TCP数据包。对于

2020-06-21 09:40:06 182

原创 指针和引用的区别?

1.指针有自己的一块空间,而引用只是一个别名;2.使用sizeof看一个指针的大小是41,而引用则是被引用对象的大小;3.指针可以被初始化为nullptr,而引用必须被初始化且必须是一个已有对象的引用;4.作为参数传递时,指针需要被解引用(*)才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象;5.指针存在常量指针和指针常量,而引用只存在常量引用,不存在引用常量2;6.指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能被改变;7.指针可以有多级指针(**p),而引用只

2020-06-20 16:08:03 1460

原创 include头文件的顺序以及双引号和尖括号的区别?

Include头文件的顺序对于include的头文件来说,如果在文件a.h中声明一个在文件b.h中定义的变量,而不引用b.h。那么要在a.c文件中引用b.h文件,并且要先引用b.h,后引用a.h,否则编译器会报变量类型未声明错误。双引号""和尖括号<>的区别编译器预处理阶段查找头文件的路径不一样。双引号和尖括号都包含的是(按照查找头文件路径顺序排列):1.编译器设置的头文件路径(编译器可使用-I显式指定搜索路径)2.系统变量CPLUS_INCLUDE_PATH/C_INCLUDE_P

2020-06-19 22:00:30 1309

转载 C++字母大小写转换

1.string类可以使用#include <algorithm>里的如下方法进行大小写转换;transform(str.begin(),str.end(),str.begin(),::tolower);记得::tolower前面有::, 而且是::tolower,不是::tolower()下面是一个示例:#include <iostream>#include <algorithm> using namespace std;string s;int

2020-06-19 08:36:11 4526

转载 MySQL中一张大表可以如何拆分?

1、水平分区这种形式分区是对表的行进行分区,通过这样的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分割(单分区)或集体分割(1个或多个分区)。所有在表中定义的列在每个数据集中都能找到,所以表的特性依然得以保持。举个简单例子:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其中一年的记录。(注:这里一定要通过某个属性列来分割,譬如这里使用的列就是年份)2、垂直分区这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包

2020-05-11 22:32:24 1830

转载 MySQL的4种隔离级别?

事务隔离级别脏读不可重复读幻读读未提交(read-uncommited)√√√不可重复读(read-commited)×√√可重复读(repeatable-read)××√串行化(serializable)×××

2020-05-11 22:04:13 261

原创 MongoDB和Redis的区别?

相同点数据都存在内存中。不同点内存管理机制Redis 数据定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。MongoDB 数据由 Linux系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。支持的数据结构Redis 支持的数据结构丰富,包括hash、set、list、string、zset。MongoDB 数据结构比较单一,但是支持丰富的数据表达、索引,类似关系型数据库,支持的查询语言非常丰富。...

2020-05-11 17:10:23 275

原创 Top-K问题

1 最小堆法这是一种局部淘汰法。先读取前K个数,建立一个最小堆。然后将剩余的所有数字依次与最小堆的堆顶进行比较,如果小于或等于堆顶数据,则继续比较下一个;否则,删除堆顶元素,并将新数据插入堆中,重新调整最小堆。当遍历完全部数据后,最小堆中的数据即为最大的K个数。2 分治法将全部数据分成N份,前提是每份的数据都可以读到内存中进行处理,找到每份数据中最大的K个数。此时剩下NK个数据,如果内存不能容纳NK个数据,则再继续分治处理,分成M份,找出每份数据中最大的K个数,如果M*K个数仍然不能读到内存中,则继续

2020-05-11 16:49:49 193

转载 什么是跨域?在前后端分离情况下会出现跨域ajax请求,此时应如何处理?

首先明确为什么会出现跨域问题?跨域问题的产生是出于浏览器的同源策略。该策略是浏览器最核心最基本的安全功能。

2020-05-11 16:40:02 341

转载 服务器大量处于TIME_WAIT状态,可能是什么原因,会造成什么影响,怎么解决?CLOSE_WAIT状态呢?

1 服务器保持了大量TIME_WAIT状态1.1 原因这种情况比较常见,一些爬虫服务器或者WEB服务器(如果网管在安装的时候没有做内核参数优化的话)上经常会遇到这个问题,这个问题是怎么产生的呢?值得一说的是,对于基于TCP的HTTP协议,关闭TCP连接的是Server端,这样,Server端会进入TIME_WAIT状态,可想而知,对于访问量大的Web Server,会存在大量的TIME_WAIT状态,假如Server一秒钟接收1000个请求,那么就会积压240*1000=240000个TIME_WAI

2020-05-11 16:31:50 3988 5

转载 DNS解析过程?递归和迭代两种方式的区别?

基础知识1.域名系统2.域名服务器域名解析过程1.在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。2.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。3.如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如

2020-05-11 12:36:02 6227

转载 TCP四次挥手中客户端的TIME_WAIT状态存在的意义?

对于复杂的网络状态,TCP 的实现提出了多种应对措施,TIME_WAIT 状态的提出就是为了应对其中一种异常状况。为了理解 TIME_WAIT 状态的必要性,我们先来假设没有这么一种状态会导致的问题。暂以 A、B 来代指 TCP 连接的两端,A 为主动关闭的一端。四次挥手中,A 发 FIN, B 响应 ACK,B 再发 FIN,A 响应 ACK 实现连接的关闭。而如果 A 响应的 ACK 包丢失,B 会以为 A 没有收到自己的关闭请求,然后会重试向 A 再发 FIN 包。如果没有 TIME_WAIT

2020-05-11 12:13:23 528

转载 在TCP传输中,什么时候会收到RST报文段?

RST即复位字段。1 出现RST包的情况1.连接请求到达时,目的端口不存在。2.向一个已经关闭的连接发送数据。3.向一个已经崩溃的对端发送数据。4.请求超时。 接收端在接收数据超时时,会发送RST包。5.关闭socket时,直接丢弃接收缓冲区未读取的数据,并给对方发一个RST。6.TCP收到了一个根本不存在的连接上的报文。7.处理半打开连接时。一方关闭了连接,另一方却由于网络故障等原因没有收到结束报文,还维持着原来的连接,这种状态就叫做半打开连接。此时另一方往处于半打开状态的连接写数据的话,

2020-05-11 12:00:26 3084

转载 什么是ARP协议和ARP攻击?

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收对应主机返回的消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。ARP是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其

2020-05-11 11:49:46 330

原创 TCP是如何保证可靠传输的?

1.序列号、确认应答、超时重传数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接收的数据序列号。如果发送方迟迟未收到确认应答,那么发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值。2.流量控制与快重传(重复确认应答)TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重

2020-05-11 11:44:55 188

原创 TCP中是如何实现流量控制的?流量控制和拥塞控制的区别?

流量控制所谓流量控制就是让发送发送速率不要过快,让接收方来得及接收。利用滑动窗口机制就可以实施流量控制。原理:运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小。考虑一种特殊的情况,就是接收方若没有缓存足够使用,就会发送零窗口大小的报文,此时发送方将发送窗口设置为0,停止发送数据。之后接收方有足够的缓存,发送了非零窗口大小的报文,但是这个报文在中途丢失的,那么发送方的发送窗口就一直为零导致死锁。为了解决这个问题,TCP为每一个连接设置一个持续计时器(persist

2020-05-11 11:32:35 1674

原创 TCP和UDP的区别?

区别1.连接TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接。UDP无连接。2.服务对象TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一、一对多、多对一、多对多的交互通信。3.可靠性TCP是可靠交付:无差错,不丢失,不重复,按序到达。UDP是尽最大努力交付,不保证可靠交付。4.拥塞控制,流量控制TCP有拥塞控制和流量控制机制。UDP没有拥塞控制机制,网络拥塞不会影响源主机的发送效率。5.首部开销TCP首部开销大,占20字节。UDP首部开销

2020-05-11 11:14:21 185

转载 多线程的优点和缺点?什么场景适合使用多线程?

由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能::(1)多线程技术使程序的响应速度更快,因为用户界面可以在进行其它工作的同时一直处于活动状态。(2)当前空闲的任务可以将处理器时间让给其它任务。(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务。(4)可以随时停止任务。(5)可以分别设置各个任务的优先级以优化性能。在以下情况,最适合采用多线程处理:(1)耗时或大量占用处理器的任务阻塞用户界面操作。(2)各个任务必须等待外部资源(如远程文件传输或Inter

2020-05-11 10:28:39 3358

转载 如何查看共享库在进程中的映射区域?

Windows下有工具如process explorer可以查看一个进程加载的dll被映射到了进程空间的位置。Linux下查看每个共享库在某一进程中的映射区域使用如下命令:cat /proc/$PROC_NAME/maps

2020-05-11 10:14:09 562

原创 C++中的static、extern分别有什么作用?

static1.全局静态变量位置:在静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0。作用域:从定义之处开始,到声明它的文件的结尾。2.局部静态变量位置:静态存储区初始化:未经初始化的局部静态变量会被自动初始化为0。作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域结束。但是当局部静态变量离开作用域后,并没有销毁,而是仍然驻留在内存当中,只不过我们不能再对它进行访问,直到该函数再次被调用,并且再次调用时值不变。3.静态函数函

2020-05-11 10:07:58 291

原创 进程的私有地址空间构成?

一个程序本质上都是由.bss段、.data段、.text段(此处忽略.init和.rodata)三个组成的。可以看到一个可执行程序在存储(没有调入内存)时分为代码段、数据区和未初始化数据区三部分。.bss段(未初始化数据区):通常用来存放程序中未初始化的全局变量和静态变量的一块内存区域。.bss段属于静态分配,程序结束后静态变量资源由系统自动释放。数据段:存放程序中已初始化的全局变量的一块内存区域。数据段也属于静态内存分配。代码段:存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确.

2020-05-11 09:25:10 529

转载 自旋锁是什么,是如何实现的?

自旋锁是一种互斥锁的实现方式而已,相比一般的互斥锁会在等待期间放弃cpu(通过休眠阻塞线程,使其挂起),自旋锁(spinlock)则是不断循环并测试锁的状态,一直占着cpu,处于“忙等”阻塞状态。主要使用场景:锁持有的时间短,而且线程并不希望在重新调度上花太多的成本。...

2020-05-11 08:44:11 628

原创 进程间通信方式有哪些?线程呢?

进程间通信进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。1.管道管道主要包括无名管道和命名管道。1.1 普通管道PIPE1)它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。2)它只能用于具有亲缘关系的进程之间的通信(父子或兄弟进程之间)。3)它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。1.2 命名管道FIFO1

2020-05-11 08:36:34 594

转载 64匹马,8个赛道,找出前4名最少比赛多少场?

结论:最少10次,最多11次第一步全部马分8组,各跑一次,然后淘汰掉每组的后四名。这里需要8次。第二步取每组第一名进行一次比赛,然后淘汰最后四名所在组的所有马。这里需要1次。其实这时候深色区域的马也可以淘汰,且A1可以直接晋级。第三步A2、A3、A4、B2、B3、C1、C2、D1八匹马跑一次,即:在剩下需要排名的马中,除了B1外,其它8匹马跑一次。这里需要1次。分类讨论:1.如果这次排名,B2或C1能进前三名,则加上B1后,B1一定能进前三名,因为B1排名比B2和C1都要靠前。到此

2020-05-10 19:42:54 757

原创 从在浏览器地址栏中输入www.baidu.com到看到百度首页,这个过程中间经历了什么?都涉及到哪些网络协议?

按照时间顺序:1.客户端浏览器获取用户在地址栏输入的域名。2.客户端浏览器将域名发送给DNS域名系统,请求解析。3.DNS解析域名得到相应的IP,返回给客户端浏览器。4.客户端浏览器根据IP向服务器发起TCP三次握手,建立TCP连接。5.客户端浏览器向服务器发送HTTP请求,请求百度首页。6.服务器通过HTTP响应向客户端浏览器返回百度首页文件。7.释放TCP连接。8.客户端浏览器...

2020-05-10 09:32:27 6026

原创 centos7升级gcc编译器使其支持更新的C++语言特性

1.下载gcc源码wget http://ftp.gnu.org/gnu/gcc/$MY_GCC/$MY_GCC.tar.gz这里是$MY_GCC指的是指定版本的gcc,e.g. gcc-4.8.0。可以到gcc下载网站找自己需要的版本(一般来说越新越好)。2.解压并进入目录tar -xvzf $MY_GCC.tar.gz -C /opt/gcccd /opt/gcc/$MY_GCC这里需要注意,如果报类似tar (child): lbzip2: Cannot exec: No such f

2020-05-08 23:12:47 484

原创 HTTP和HTTPS的区别?HTTPS的优缺点?

HTTPS的意思是HTTP on SSL,这里的SSL(Secure Socket Layer)后来进行改进,升级为了TLS(Transport Layer Security)。SSL位于传输层和应用层之间,包含两层:SSL记录(Record)协议,它建立在可靠的传输协议(TCP)之上,可以为高层协议提供数据封装、压缩、加密等基本功能的支持;SSL握手(Handshake)协议,它建立在SSL记...

2020-05-07 17:42:38 300

转载 github PR(Pull request)

总而言之两个作用:1.贡献代码2.同步代码1.贡献代码贡献代码,通俗的说,就是自己修改了代码,希望合并到别人的Repository(仓库)中。将自己的智慧贡献给开源社区。1.1 第一步:fork在GitHub社区闲逛时,看中了某个项目代码,如:spring-projects/spring-framework,点击页面Fork按钮,会生成一个自己的Repository(仓库:thinki...

2020-04-19 17:43:32 610

原创 怎么理解操作系统里的内存碎片,有什么解决办法?

内存碎片分为内部碎片和外部碎片。内部碎片和外部碎片的最明显的区别就是内部碎片能明确指出这部分内存是属于哪个进程的,而外部碎片不属于任何进程。内部碎片是指已经被分配给某个进程、但是该进程却使用不到的内存空间,只有当该进程运行完毕后才能释放这块内存空间给其他进程使用。外部碎片指的是在内存分配过程当中产生的不可被利用的、已申请内存之间的内存空间。外部碎片往往数量比较多,而且每块碎片都很小。现在的...

2020-04-10 17:15:40 2498

原创 进程、线程、协程的区别?

进程是OS进行资源调度和分配的基本单位,线程是CPU分配的最小单位,协程是用户级别的、由用户自行处理程序之间的切换。进程和线程的区别:1.进程是OS进行资源调度和分配的基本单位;线程是CPU调度和分配的基本单位。2.一个进程可以包含多个线程;一个线程只能依赖于一个进程而存在。3.没有亲缘关系的进程之间是相互独立、互不影响的;一个线程挂掉整个进程就挂了。4.进程适用于多核、多机并行;线程适...

2020-04-10 16:49:22 146

空空如也

空空如也

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

TA关注的人

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