自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 alloc 和 malloc的区别?

C语言跟内存分配方式(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程...

2021-09-18 20:45:30 3352

原创 什么是工作窃取算法?

工作窃取(work-stealing)算法是指某个线程从其他队列里窃取任务来执行。一个大任务分割为若干个互不依赖的子任务,为了减少线程间的竞争,把这些子任务分别放到不同的队列里,并未每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应。比如线程1负责处理1队列里的任务,2线程负责2队列的。但是有的线程会先把自己队列里的任务干完,而其他线程对应的队列里还有任务待处理。干完活的线程与其等着,不如帮其他线程干活,于是它就去其他线程的队列里窃取一个任务来执行。而...

2021-09-15 17:50:06 781

原创 MySQL权限更改何时生效?

5.7.7 权限更改何时生效?当mysqld启动时,所有授权表的内容被读进内存并且从此时生效。当服务器注意到授权表被改变了时,现存的客户端连接有如下影响:表和列权限在客户端的下一次请求时生效; 数据库权限改变在下一个USE db_name命令生效; 全局权限的改变和密码改变在下一次客户端连接时生效;如果用GRANT、REVOKE或SET PASSWORD对授权表进行修改,服务器会注意到并立即重新将授权表载入内存。如果你手动...

2021-09-03 09:16:40 552

原创 sync、fsync的区别是什么?

调用系统函数write时有写延迟,write负责把东西写到缓存区上,sync负责把缓存区上的东西排到写队列中(缓冲区->写队列),在由守护进程负责把队列里的东西写到磁盘上,而sync函数在把缓存区上的东西排到写队列后不管写队列中的内容是否写到磁盘上都立即返回。fsync函数则是对指定文件的操作,而且必须等到写队列中的内容都写到磁盘后才返回,并且更新文件inode结点里的内容。...

2021-08-31 11:02:39 6857

转载 MQTT协议笔记之头部信息

前言MQTT(Message Queue Telemetry Transport),遥测传输协议,提供订阅/发布模式,更为简约、轻量,易于使用,针对受限环境(带宽低、网络延迟高、网络通信不稳定),可以简单概括为物联网打造,官方总结特点如下:使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 对负载内容屏蔽的消息传输。 使用 TCP/IP 提供网络连接。 有三种消息发布服务质量: “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别...

2021-08-26 15:54:07 408

转载 深入学习JVM-JVM 安全点和安全区域

目录一、安全点1.1 垃圾回收的痛点1.2 安全回收必要条件1.3 安全点定义 1.4 线程中断方式1.5 安全点设置位置二、安全区域一、安全点1.1 垃圾回收的痛点JVM进行垃圾回收是一个非常复杂的过程,如何进行垃圾标记、什么时候进行垃圾回收、如何进行垃圾回收等等都非常复杂,当前主流的JVM在垃圾回收时都会进行STW(stop the world),即使宣称非常快的CMS垃圾回收期早期也会STW标记垃圾状态。那么这里有个问题,什么时...

2021-08-25 00:40:00 296

转载 Clickhouse优缺点及性能情况

目录一、优点二、缺点三、性能情况四、相关优化五、MySQL VS ClickHouse一、优点为了高效的使用CPU,数据不仅仅按列存储,同时还按向量进行处理; 数据压缩空间大,减少IO;处理单查询高吞吐量每台服务器每秒最多数十亿行; 索引非B树结构,不需要满足最左原则;只要过滤条件在索引列中包含即可;即使在使用的数据不在索引中,由于各种并行处理机制ClickHouse全表扫描的速度也很快; 写入速度非常快,50-200M/s,对于大量的数据更新非常适用。二、缺点

2021-08-24 21:59:55 18599

转载 “三次握手,四次挥手”你真的懂吗?

转载:“三次握手,四次挥手”你真的懂吗?一、什么是“3次握手,4次挥手”TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。TCP提供了一种可靠、面向连接、字节流、传输层...

2021-08-23 16:58:33 180

转载 MySQL的三个流行分支介绍

转载:超越MySQL:三个流行MySQL分支的对比摘要尽管MySQL是最受欢迎的程序之一,但是许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长。该需求以及Oracle对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的子项目和分支。导读:本文将讨论受人们关注的三个流行MySQL分支:Drizzle、MariaDB和Percona Server(包括XtraDB引擎)。文中简要介绍每个分支出现的原因及其目标,以及是否可在您自己的生产环境中使用它们。...

2021-08-23 14:11:39 1220

转载 TCP死锁、糊涂窗口综合症?

TCP流量控制所谓流量控制就是让发送发送速率不要过快,让接收方来得及接收。利用滑动窗口机制就可以实施流量控制。通过运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小。流量控制引发的死锁当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。持续计时器为了避免流量控制引发的死锁,TCP使用了持

2021-08-17 19:57:04 676

转载 序列化的作用

一、概述我们应该都用过各种序列化(serialization)的方法(如Python中的pickle.dumps),甚至自己也写过一些序列化的小工具。维基百科对于序列化的解释比较冗长;相比之下,百度百科的解释更为简单:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程这里面重点强调了两个概念:格式的转变和转变的目的[格式的转变] 转变前的格式是对象状态信息,转变后的格式是“可以存储或传输的形式” [转...

2021-08-02 13:35:44 1084

转载 有趣的霍夫曼编码

转载:有趣的霍夫曼编码前言霍夫曼编码 ( Huffman coding ) 是一种可变长的前缀码。霍夫曼编码使用的算法是 David A. Huffman 还是在MIT 的学生时提出的,并且在 1952 年发表了名为《 A Method for the Construction of Minimum-Redundancy Codes 》的文章。编码这种编码的过程叫做霍夫曼编码,它是一种普遍的熵编码技术,包括用于无损数据压缩领域。霍夫曼编码过程霍夫曼编码使用一种特别的方法为信号源中的每

2021-07-22 00:51:27 104

转载 大端小端详解

转载:大端小端详解1>"大端" "小端"的来源关于大端小端名词的由来,网传有一个有趣的故事,可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。《格利佛游记》:“Lilliput和Blefuscu这两个强国在过去的36个月中一直在苦战。战争的原因是:我们都知道,吃鸡蛋的时候,原始的方法是打破鸡蛋较大的一端,可是那时的皇帝的祖父由于小时侯吃鸡蛋,按这种方法把手指弄破了,因此他

2021-07-22 00:12:59 574

转载 序列化的作用

转自:谈谈序列化的作用1. 写在前面我们应该都用过各种序列化(serialization)的方法(如Python中的pickle.dumps),甚至自己也写过一些序列化的小工具。维基百科对于序列化的解释比较冗长;相比之下,百度百科的解释更为简单:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程这里面重点强调了两个概念:格式的转变和转变的目的[格式的转变] 转变前的格式是对象状态信息,转变后的格式是“可以存储或传输的形式”[转变的目的] 转变成

2021-07-21 23:40:11 1258

转载 TCP流量控制和拥塞控制

一:流量控制什么是流量控制?流量控制的目的?如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。如何实现流量控制?由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。流量控制引发的死锁?怎么避免

2021-07-20 09:05:18 344

转载 TCP校验和(Checksum)的原理和实现

概述TCP校验和(Checksum)是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。TCP校验和覆盖TCP首部和TCP数据,而IP首部中的校验和只覆盖IP的首部,不覆盖IP数据报中的任何数据。TCP校验和、IP校验和的计算方法是基本一致的,除了计算的范围不同。TCP的校验和是必需的,而UDP的校验和是可选的。...

2021-07-20 08:51:26 2423

转载 线程切换浅述

Linux采用一对一的线程模型,用户线程切换与内核线程切换之间的差别非常小。同时,如果忽略用户主动放弃用户线程的执行权(yield)带来的开销,则只需要考虑内核线程切换的开销。一、什么引起线程切换时间片轮转 线程阻塞 线程主动放弃时间片二、线程切换的开销2.1 直接开销直接开销是线程切换本身引起的,无可避免,必然发生。(1)用户态与内核态的切换线程切换只能在内核态完成,如果当前用户处于用户态,则必然引起用户态与内核态的切换。(...

2021-07-19 21:39:43 421

转载 cpu调度算法总结

一、批处理系统中采用的调度算法重要指标(吞吐量,周转时间,CPU利用率,公平平衡)非抢占式的先来先服务算法(FCFS):按照进程就绪的先后顺序使用CPU特点:公平,实现简单,但是长进程后面的短进程需要等待很长时间,不利于用户体验。非抢占式的最短作业优先(SJF):具有最短完成时间的进程优先执行最短剩余时间优先(SRTN):SJF抢占式版本,即当一个新就绪的进程比当前运行进程具有更短完成时间时,系统抢占当前...

2021-07-19 21:26:42 701

转载 进程切换与线程切换的区别

注意这个题目问的是进程切换与线程切换的区别,不是进程与线程的区别。当然这里的线程指的是同一个进程中的线程。这个问题能很好的考察面试者对进程和线程的理解深度,有比较高的区分度。一、虚拟内存解放生产力对于程序员来说,我们在编程时实际上是不怎么操心内存问题的,对于使用Java、Python、JavaScript等动态类型语言的程序员来说更是如此,自动内存回收机制的引入使得使用这类语言的程序员几乎完全不用关心内存问题;即使对于编译型语言C/C++来说,...

2021-07-19 20:58:50 234

原创 寄存器一般多大,cpu一级缓存一般多大

寄存器个数,现在Intel的最新一代CPU里大概有上百个寄存器,扣除重复使用的相同空间的寄存器,寄存器的大小大概是2KB多,具体的寄存器如下图:在这一堆寄存器里,最大的就是AVX/AVX2寄存器,但这个是用来做特殊计算的。通用寄存器则非常少,64位下通用寄存器也就是R0~R15,其余的寄存器大部分也用不上。cache的大小跟寄存器个数没太大关系。一级缓存(Level 1 Cache)简称L1 Cache,位于CPU内核的旁边...

2021-07-19 20:48:24 8925

转载 一条sql的执行过程

写操作执行过程  如果这条sql是写操作(insert、update、delete),那么大致的过程如下,其中引擎层是属于 InnoDB存储引擎的,因为InnoDB是默认的存储引擎,也是主流的,所以这里只说明 InnoDB的引擎层过程。由于写操作较查询操作更为复杂,所以先看一下写操作的执行图。方便后面解析。组件介绍Server层1、连接器  1)负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。  ...

2021-07-12 00:30:13 98

转载 什么是mmap?

平时在面试中你肯定会经常碰见的问题就是:RocketMQ为什么快?Kafka为什么快?什么是mmap?这一类的问题都逃不过的一个点就是零拷贝,虽然还有一些其他的原因,但是今天我们的话题主要就是零拷贝。传统IO在开始谈零拷贝之前,首先要对传统的IO方式有一个概念。基于传统的IO方式,底层实际上通过调用read()和write()来实现。通过read()把数据从硬盘读取到内核缓冲区,再复制到用户缓冲区;然后再通过write()写入到socket缓冲区,最后写入网卡设备。整个过程发

2021-07-11 18:26:34 84

转载 深入理解Linux内核进程上下文切换

1.进程上下文的概念进程上下文是进程执行活动全过程的静态描述。我们把已执行过的进程指令和数据在相关寄存器与堆栈中的内容称为进程上文,把正在执行的指令和数据在寄存器与堆栈中的内容称为进程正文,把待执行的指令和数据在寄存器与堆栈中的内容称为进程下文。实际上linux内核中,进程上下文包括进程的虚拟地址空间和硬件上下文。进程硬件上下文包含了当前cpu的一组寄存器的集合,arm64中使用task_struct结构的thread成员的cpu_context成...

2021-06-26 21:20:36 251

转载 TLB、PCID与ASID的故事

转载:TLB、PCID与ASID的故事 最近学习过程中了解到TLB和PCID、ASID等概念,突然发现自己将TLB与Cache的概念容易搞混。于是深入了解这几个名词和关系,本周做一些总结。本文的各部分内容分布如下:TLB的引入 TLB与Cache PCID和ASID的引入与作用一、TLB的引入1.1 二级页表的地址访问 让我们想象这样的应用场景:CPU执行指令时,直接访问的是虚拟地址,若想获取到内存的真实数据时,需要先将虚拟地址转化为物理地址,然后由CPU访问物...

2021-06-26 20:07:45 735

转载 为什么InnoDB没有像MyISAM那样记录表的总行数

SELECT count(*) FROM table1;如果执行上述代码对于MyISAM:因为MySQL对该引擎的count有对应优化,精确的行数会被储存在存储引擎中,因此此类没有where条件的单表总行数查询会迅速返回结果。对于InnoDB:因为InnoDB的事务特性,在同一时刻表中的行数对于不同的事务而言是不一样的,因此count统计会计算对于当前事务而言可以统计到的行数,而不是将总行数储存起来方便快速查询。InnoDB会尝试遍历一个尽可能小的索引除非优化器提示使用别的索引。如果二级.

2021-06-22 01:05:28 538

转载 高性能MySQL——Count(1) OR Count(*)?

转载:高性能MySQL——Count(1) OR Count(*)?如果问一个程序员MySQL中SELECT COUNT(1)和SELECT COUNT(*)有什么区别,会有很多人给出这样的答案“SELECT COUNT(*)”最终会转化成“SELECT COUNT(1),而SELECT COUNT(1)省略了转换的这一步,所以SELECT COUNT(1)效率更高“,甚至有一些面试官也会给出类似的答案。最近在看一些历史遗留代码,绝大多数统计数量的SQL都在用SELECT COUNT(1),觉得有必要搞

2021-06-22 00:50:22 73

转载 springboot的启动原理分析

spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server。对spring boot的两个疑问刚开始接触spring boot时,通常会有这些疑问spring boot如何启动的?spring boot embed tomcat是如何工作的? 静态文件,jsp,网页模板这些是如何加载到的?下面来分析spring boot是如何做到的。

2021-06-20 16:33:58 120

转载 Netty 基本组件小结--Channel、EventLoop、Bootstrap等

本文源自转载:Netty基本组件小结Netty 基本组件小结--Channel、EventLoop、Bootstrap等一、什么是Channel?Channel按照其字面意思非常容易理解,那就是"管道"。自来水通遍千家万户需要架设管道,暖气也需要架设管道,同样,网络通信也需要架设管道,这个管道就是我们的Socket。我们发现,自来水管道中流通的是自来水,暖气管道中流通的是暖气,那么Socket中流通的当属我们的字节流了。说了这么多,那么到底什么是Channel呢?小编理解,Channel就是

2021-06-19 17:38:01 344

转载 Nginx实现负载均衡的几种方式

转载:https://www.huaweicloud.com/articles/b24f0d5384a2d769be8b8e6ef363bdff.html

2021-06-01 23:31:34 2157

转载 面试总被问分库分表怎么办?这些知识点你要懂

转载:https://mp.weixin.qq.com/s?__biz=MzAxNTM4NzAyNg==&mid=2247483882&idx=1&sn=9e0901dd19e3e06a135fe96780c43477&chksm=9b859117acf218017d9273d4328258c01f6a105180ae8534dc0aaa362cc0c3020dd55de3a95e&token=361009039&lang=zh_CN#rd

2021-05-30 13:53:01 445

转载 一口气说出 9种 分布式ID生成方式,面试官有点懵了

转载:一口气说出 9种 分布式ID生成方式,面试官有点懵了

2021-05-30 12:20:58 86

转载 一口气说出 6种,@Transactional注解的失效场景

引言昨天公众号粉丝咨询了一个问题,说自己之前面试被问@Transactional注解哪些场景下会失效,一时语塞致使面试失败。所以今天简单的和大家分享一下@Transactional相关的知识。@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分

2021-05-30 11:55:41 40

转载 Spring事务传播行为详解

前言Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。事务传播行为是Spring框架独有的事务增强特性,他不属于的事务实际提供方数据库行为。这是Spring为我们提供的强大的工具箱,使用事务传播行可以为我们的开发工作提供许多便利。但是人们对他的误解也颇多,你一定也听过“service方法事务最好不要嵌套”的传言。要想正确的使用工具首先需要了解工具。本文对七种事务传播行为做详细介绍,内容主要代码示例的方式呈现。基础概念1. 什么是事务传播行为?事务传播

2021-05-30 10:00:32 50

转载 Spring AOP JDK和CGLIB动态代理的区别

转载:Spring AOP JDK和CGLIB动态代理的区别

2021-05-29 20:08:48 333

转载 Java常量池理解与总结

转载:Java常量池理解与总结

2021-05-29 19:03:48 47

转载 Spring MVC 请求处理流程

一、Spring MVC请求处理流程SpringMVC框架是一个基于请求驱动的Web框架,并且使用了‘前端控制器’模型来进行设计,再根据‘请求映射规则’分发给相应的页面控制器进行处理。(一)整体流程具体步骤:1、 首先用户发送请求到前端控制器,前端控制器根据请求信息(如 URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图中的 1、2 步骤;2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在 ...

2021-05-28 11:58:58 966

转载 websocket和socket的区别是什么?

区别:Socket是TCP/IP网络的API,是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口;而WebSocket则是一个典型的应用层协议。本教程操作环境:windows7系统、Dell G3电脑。相关推荐:《编程视频》WebSocket介绍与原理WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。——百度百科目的:即时通讯,.

2021-05-28 11:45:30 1112

转载 redis 中setex、setnx、set、getset 命令的区别与使用

介绍几个常用的redis命令:SET 命令set key value设置指定 key 的值为 value。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。127.0.0.1:6379> set testSetKey aaaOK127.0.0.1:6379> get testSetKey"aaa"127.0.0.1:6379> set testSetKey bbb # 会覆写旧值OK127.0.0.1:6379> get test

2021-05-27 18:30:04 1877

转载 synchronized同步机制——如果你愿意一层一层剥开我的心

前言synchronized,是解决并发情况下数据同步访问问题的一把利刃。那么synchronized的底层原理是什么呢?下面我们来一层一层剥开它的心,就像剥洋葱一样,看个究竟。Synchronized的使用场景synchronized关键字可以作用于方法或者代码块,最主要有以下几种使用方式,如图:接下来,我们先剥开synchronized的第一层,反编译其作用的代码块以及方法。synchronized作用于代码块public class SynchronizedTest {

2021-05-27 12:46:29 436

转载 为什么HashMap底层树化标准的元素个数是8

本文源自转载:阿里P7岗位面试,面试官问我:为什么HashMap底层树化标准的元素个数是8目 录一、一般的面试题二、HashMap的基本知识点三、为什么要转成红黑树呢?四、为什么树化标准是8个五、hash方法六、为什么退化为链表的阈值是6一、一般的面试题对于HashMap,我们再熟悉不过了,日常开发最常用的Java集合类就是它了,而且面试的时候对于HashMap知识点基本是必问的,就拿我之前的面试经历来看,问的最多的无非是这么几个:1、HashMap的...

2021-05-27 00:02:42 614

空空如也

空空如也

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

TA关注的人

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