自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

APlus

乐于分享

  • 博客(125)
  • 资源 (1)
  • 收藏
  • 关注

原创 x86保护模式——全局描述符表GDT详解

GDT作用GDT全称Global Descriptor Table,是x86保护模式下的一个重要数据结构,在保护模式下,GDT在内存中有且只有一个。GDT的数据结构是一个描述符数组,每个描述符8个字节,可以存放在内存当中任意位置:其中,addr相当于GDT的基地址,GDT的总长度(单位字节)为GDT界限。在实模式中,CPU通过段地址和段偏移量寻址。其中段地址保存到段寄存器,包含:CS、SS、DS、ES、FS、GS。段偏移量可以保存到IP、BX、SI、DI寄存器。在汇编代码mov ds:[si], a

2020-10-29 19:18:37 9290 3

原创 x86架构CPU标志寄存器(FLAG寄存器)介绍

标志寄存器作用x86架构CPU中,标志寄存器主要有3种作用:存储相关指令执行后的结果,例如CF、PF、AF、ZF、OF标志位执行相关指令时,提供行为依据,例如执行JE指令时会读取ZF的值,来决定是否进行跳转。控制CPU的工作方式,例如IF、VM、TF等标志位。16位模式下,标志寄存器名称为FLAG,寄存器大小16位。32位模式下,标志寄存器的名称为EFLAG,寄存器大小32位。64位模式下,为RFLAG,寄存器大小64位。EFLAG寄存器各个位的用途如下,其中灰色的部分为保留位。对于

2020-10-24 21:25:53 6408

原创 Kafka 事务以及幂等

Kafka提供了生产者发送消息的幂等性和事务特性来阻止消息的重复,这两种方式均适用于不同的应用场景,其中:消息的幂等性适用于消息在写入到服务器日志后,由于网络故障,生产者没有及时收到服务端的ACK消息,生产者误以为消息没有持久化到服务端,导致生产者重复发送该消息,造成了消息的重复现象,而幂等性就是为了解决该问题。生产者事务生产者事务有两种典型的用途,一种是将多个消息的提交操作作为一个原...

2020-05-29 19:29:56 1112 1

原创 Linux 文本修正工具sed的使用

何为sedsed是Stream Editor的简称,是Linux自带的一个文本处理工具,以行为单位,对文本进行处理,可以对每行的内容做替换、删除、新增、选取等操作。sed在处理文本时,会把当前行读入到缓冲区,这个缓冲区称为模版块(Pattern Space),然后用相关命令处理模板块的内容,处理完成后,将缓冲区的内容输出,直到文件末尾。此外sed也提供了临时缓冲区(Hold Space),用于...

2020-04-20 08:40:54 321

原创 Linux 文本检索工具grep的使用

何为grep命令grep是Linux系统中强大的文本检索工具,它可以使用正则表达式,搜索输入文本中匹配的记录,并输出。grep命令家族包含grep、fgrep、egrep。fgrep相当于grep -F,egrep相当于grep -E。grep 支持BRE、ERE、Perl规范的正则表达式,默认使用BRE。grep语法grep [-options]grep的options选项主要包含...

2020-04-18 22:13:02 413

原创 Python 2.7 五种标准数据类型的使用

Python 2.7一共有五种标准数据类型:Numbers(数字),包含整数,浮点数,复数等String (字符串)List (列表),类似于Java中的有序集合Tuple(元组),类似于Java中的无序集合Dictionary(字典),类似于Java中的Map1 - Number类型在Python 2.7中,数字类型可以划分为以下几种:int类型,即有符号整型long类...

2020-04-18 02:32:24 1415

原创 2020年腾讯视频春招后端开发实习岗一面面经

前期面试PCG的时候被刷了,又被腾讯视频爱玩游戏中心捞起来了,感觉面试体验比上次好很多。3月31日完成一面,面完后当天接到二面通知约到4月1日下午3点。一面(1小时,视频面)算法题:如何判断一个数是否是2的整数幂次?Java线程同步机制有哪些?HashMap和ConcurrentHashMap底层的区别?JVM类加载过程?String是不可变类吗?什么是不可变类?为什么String...

2020-03-31 21:48:57 790

原创 2020年蘑菇街春招Java后端开发实习岗面经(一面+二面+HR面)

一面(视频面试,50分钟)实习经历(20分钟)介绍一下Spring AOP,AOP是如何实现的。JDK动态代理和CGLIB动态代理的区别?思考:public class ServiceA { public void methodA() { this.methodB(); } public void methodB() {}} pub...

2020-03-31 21:34:00 699

原创 2020年美团点评春招后端开发实习岗面经(一面+二面+HR面,已收到Offer)

一面(电话,48min):自我介绍怼项目,怼了30分钟(基本就是问项目是如何实现的,没有问Netty)为什么使用NIO而不是BIO,NIO快在哪里?MySQL的索引为什么使用B+树,而不使用B树或者红黑树?线程池构造参数有哪些。线程池的线程数量如何选择线程池在调用execute方法提交任务后,其内部的处理逻辑是怎样的?线程数量是如何变化的?使用Spring框架遇到的坑,我简单说了...

2020-03-31 21:23:55 1327

原创 操作系统——死锁概念和死锁预防、避免、检测

1 死锁的定义死锁是一组互相竞争系统资源或进行通信的进程间的永久阻塞。当一组进程中的每一个进程都在等待某个事件,而仅有这组进程中被阻塞的其他进程才可触发该事件时,就称这组进程发生了死锁。死锁在没有外界干预的情况下是永久性的。2 死锁的条件死锁有3个必要条件:互斥:一次只有一个进程可以使用一个资源,其他进程不能访问已经分配给其他进程的资源。不可剥夺:不能够抢占其他进程已有的资源。占有且...

2020-02-29 22:07:24 4273

原创 操作系统知识总结——进程

进程的概念进程是程序的一次执行过程,是一个动态的概念,是操作系统进行资源分配和调度的基本单位每个进程都有自己的地址空间,一般包含文本区域、数据区域和堆栈。一个进程有三种基本状态:就绪态、阻塞态、运行态。就绪态:进程已经持有除CPU资源以外的所需资源,正等待被分配CPU资源。进程调度的方法有多种,例如基于时间片的调度算法、响应比优先调度算法、最短作业调度算法、先来先服务调度算法等。运行态...

2020-02-27 01:24:21 885

原创 软件测试——黑盒测试基本方法

黑盒测试的定义黑盒测试又称功能测试,它是通过一系列测试用例来检测软件的功能是否正常。在黑盒测试中,我们把软件看成是一个黑盒子(不关注内部的实现原理),通过关注软件的输入输出结果,来判断软件是否存在问题。黑盒测试主要有以下几种方法:等价类划分法边界值分析法判定表法因果图法等价类划分法等价类划分法将程序所有可能输入的数据划分为若干部分(子集),然后从每个子集中选取具有代表性的数据...

2020-01-04 01:54:38 7703 1

原创 编译原理——文法的基本概念

文法的概念每一种自然语言或者是编程语言都需要文法来描述,文法相当于语言学的语义分析,即分析每一句话所表示的含义,编译器需要利用文法来完成其语法分析和语义分析。在目前编程语言领域,上下文无关文法作为程序语言的描述工具,比如a = b + c是一个合法的赋值语句。符号和符号串的定义每个程序都可以看成是一个“基本符号”串,如果有一个基本符号集,那么C语言等编程语言可以看成是在这个基本符号集上定...

2019-12-31 18:58:49 7499 1

原创 编译原理——将代码翻译成四元式序列

四元式的定义四元式的一般形式为(op, arg1, arg2, result),其中:op为一个二元(也可以是零元或一元)运算符arg1和arg2为两个运算对象,可以是变量、常数或者系统定义的临时变量名result为运算结果。在中间代码生成阶段中,我们需要对源代码生成一个四元式序列。其中,op可以为数学运算符(+,-,*,/,%,=等),例如:a = b + c的四元式为(+, ...

2019-12-29 19:23:49 38876 7

原创 Spark 2.4 RDD操作API(Java语言描述)

MapMap的作用就是将RDD中的值逐一转换为另外一个值,例如下面将一个数组[1,2,3,4,5]中每个元素都计算平方并返回:public class SparkDemo { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("SparkDemo")....

2019-12-07 21:27:29 547

原创 Elasticsearch 7.x 常用指标聚合、桶聚合搜索RESTful API

Elasticsearch的聚合搜索用于对数据做一些复杂的分析统计,主要分为指标聚合、桶聚合、管道聚合、矩阵聚合。其中指标聚合、桶聚合最常使用。本文测试数据采用官方测试数据库shakespeare(莎士比亚),可在Elasticsearch官网中下载到。此外本文内容均参考官方文档内容。1 指标聚合1.1 Max AggregationMax Aggregation用于查找最大值,例如查找s...

2019-11-30 23:12:02 1138

原创 Elasticsearch 7.x 检索文档的三种方式:全文搜索、词项搜索、复合搜索

Elasticsearch 7提供了多种检索文档的方式,我们可以通过Restful API的方式来搜索索引中的文档。Elasticsearch的搜索可以分为以下几个类型:全文搜索词项搜索复合搜索嵌套搜索位置搜索特殊搜索1 全文搜索全文搜索通常用于搜索文本字段,需要用户提供关键字来完成。1.1 match搜索match搜索会对用户给出的关键词进行解析,首先会将其进行分词处理,...

2019-11-24 23:19:31 5376 1

原创 Elasticsearch 7.x 映射(Mapping)中的字段类型

概念Elasticsearch的映射用来定义一个索引中的文档如何被存储,定义一个映射类似于定义一个Mongo DB集合,在Elasticsearch 7.x中,映射和索引是一对一的关系。映射分为静态映射和动态映射,前者需要用户手动定义,后者则直接在向一个未生成的索引添加文档的时候自动生成。...

2019-11-11 20:48:34 9605

原创 ZooKeeper Leader服务器选举流程

进行前提进行Leader选举的前提是ZooKeeper必须是集群,即至少2台以上ZooKeeper服务器。满足集群的条件后,Leader的选举在以下情况下发生:ZooKeeper服务器进程启动ZooKeeper服务器进程在运行期间无法连接到Leader服务器注意:“Leader的选举”这个过程是对于单个ZooKeeper服务器进程而言的,并不是整个ZooKeeper服务器集群。当一个Z...

2019-11-04 20:22:35 392 1

原创 LeetCode股票买卖问题通用解法

问题描述给定一个数组,它的第 iii 个元素为一支给定的股票在第 iii 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 kkk 笔交易。注意:你不能同时参与多笔交易,你必须在再次购买前出售掉之前的股票。示例 1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔...

2019-10-25 21:21:20 1706

原创 旅行商问题解法(2019年字节跳动校招笔试算法题“毕业旅行问题”)

问题原型给定一系列城市和每对城市之间的距离,求推销员从某个城市出发后经过所有城市,然后回到出发城市的最短路径。为了方便讲解,我们以2019年字节跳动校招笔试题“毕业旅行问题为例”。牛客原链接:https://www.nowcoder.com/profile/4097742/codeBookDetail?submissionId=58509076题目描述小明目前在做一份毕业旅行的规划。打算从...

2019-10-22 00:10:20 8660 1

原创 正权图的最短路径算法:Dijkstra算法

概念Dijkstra算法用于解决无向图或者有向图(有环无环皆可)中起点到各个顶点的最短路径,前提是该图的所有边权必须大于等于0。如果图的边有负权值,就需要用到Bellman-Ford算法。本篇博客仅介绍Dijkstra算法。Dijkstra算法是基于贪心思想的算法。具体过程是:将图中节点从0~n标号,定义起点为0。定义一个数组way,长度为n + 1,记录从起点到某个点的最小距离。并将数...

2019-10-19 19:04:29 1334

原创 最长公共子序列长度(LCS)和最长上升子序列长度(LIS)问题的解法

概念理解在了解LCS和LIS问题前,我们先来了解基本的概念子序列给定一个序列,将序列中0个或多个元素去掉之后得到的结果即为子序列。例如给定序列 A=[1,2,3]A = [1, 2, 3]A=[1,2,3],那么 AAA 的子序列有:[][][],[1][1][1],[2][2][2],[3][3][3],[1,2][1,2][1,2],[1,3][1,3][1,3],[2,3][2,3][...

2019-10-17 23:28:07 367

原创 Spring Cloud 服务注册中心 Netflix Eureka 介绍

Eureka简介Spring Cloud Eureka基于Netflix Eureka开发,负责整个Spring Cloud微服务架构中的服务治理,具体来讲就是两个功能:服务注册:每个服务在启动时都需要连接到Eureka,并向Eureka提供本服务的名称、主机名、端口、通信协议等信息,Eureka则根据这些信息,按照服务名称组织好服务清单,例如:服务名服务提供者CRM-S...

2019-10-15 22:46:45 145

原创 Servlet 3.1中的WebSocket编程规范

如果不是很清楚WebSocket协议,可以参考这篇博客。包结构Servlet 3.1以上的版本制定了WebSocket的编程规范,位于包javax.servlet中:javax.servlet.websocket下包含了客户端和服务器端公用的注解、接口、类和异常javax.servlet.websocket.server下包含了创建和配置WebSocket服务端所需的注解、接口和类。M...

2019-10-10 21:00:02 1068

原创 WebSocket协议规范浅析

初识WebSocketWebSocket是一个持久化应用层协议,随HTTP2.0协议标准发布,客户端(浏览器)和服务端可以维持一个长连接,双方均可自由地发送、接收数据(全双工),从而真正实现双向通信。WebSocket不像HTTP协议是请求——响应模式,需要客户端主动请求才能返回响应,HTTP1.1的长连接(keep-alive机制)实际上是一个伪长连接,它是无状态的,并且会在短时间完成数据请求...

2019-10-10 00:01:33 768

原创 Linux操作系统进程间通信方式:消息队列

什么是消息队列Linux内核提供的消息队列可以达到一个进程向另外一个进程发送消息的目的,并且消息队列可以根据消息中的类型字段自动为消息归类,接收进程可以通过指定类型字段来接收指定的消息,也可不区分类型接收队首的消息。消息队列的生命周期和共享内存类似,都是和内核的生命周期相同的,在创建后需要用户显式删除。消息队列的使用消息队列相关的函数定义在sys/msg.h中,其中包含了消息队列的创建、...

2019-09-27 20:10:50 714

原创 Linux操作系统进程间通信方式:共享内存

什么是共享内存共享内存是内存上的一个区域,允许多个进程同时访问、写入数据,使用起来类似于使用malloc函数分配的内存,在写入数据时另外一个进程可以立刻获取到最新的数据。共享内存的生命周期和系统内核的生命周期是一致的,也可于命令行界面显式释放。需要注意的是共享内存没有提供同步机制,也就是说,假设有多个进程同时写入数据,那么可能会造成其中的数据不是我们所预期的,所以需要我们自己定义其同步机制,例...

2019-09-26 18:36:22 1311 3

原创 Linux操作系统进程间通信方式:管道(Pipeline)

什么是管道管道是Linux两个进程间的一种通信方式,两个进程可以通过这个共享区域来传递信息,并且管道中的数据只能是单向流动的,也就是说只能有一个固定的写进程和读进程。管道可以细分为两种类型:匿名管道和命名管道。匿名管道匿名管道只能在父子进程间进行通信,其具体读写规则有:管道内无数据时,读端会发生阻塞直到有数据可读管道数据满时,写端会发生阻塞,直到读端开始读取数据如果写端对应的文件...

2019-09-25 21:39:19 1865

原创 Linux操作系统进程通信方式:信号(Signal)

什么是信号信号是一条小的消息,由内核或者其它进程生成并发送至目标进程,目标进程可以根据该信号来做出响应。信号可以由进程或者内核发出,例如:用户在Bash界面通过键盘对正在执行的进程输入Ctrl+C、Ctrl+\等信号命令,或者执行kill命令发送信号。进程执行出错,例如访问了一个非法的地址、除0运算,就会由内核向进程发送一个信号。进程执行kill命令向目标进程发送信号。...

2019-09-24 19:58:59 3505

转载 Java 11 新特性介绍

本文转载自:https://www.ibm.com/developerworks/cn/java/the-new-features-of-Java-11/index.htmlJava 11 已于 2018 年 9 月 25 日正式发布,之前在 Java 10 新特性介绍中介绍过,为了加快的版本迭代、跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个大版本,每个季度发布一...

2019-09-15 13:08:55 158

原创 Kafka 2.2.0 消息日志清理机制:日志删除 日志压缩

Kafka将消息持久化到磁盘中的Log中,为了控制日志文件的大小就需要对消息进行清理操作。每个Log对应一个分区副本,Log可以分为多个日志分段,便于日志的清理操作。Kafka有两种日志清理策略:日志删除:按照保留策略删除日志分段需要将Broker端参数log.cleanup.policy设置为delete(默认值)日志压缩:根据每个消息的key进行整合,对于有相同的key的消息,只保留...

2019-09-14 21:36:44 3237

原创 Kafka 2.2.0 服务端消息存储方式

Kafka通过主题(topic)将消息归类,各个主题相互独立,每个主题包含一个或多个分区(partition),分区数量可以动态修改,Kafka保证消息在一个分区中是有序的,分区中的每个消息都有一个唯一的偏移量(offset)。一个分区同时可以包含多个分区副本:一个leader副本和一或多个follower副本,只有leader副本负责消息的接收和发送,其余副本负责与leader副本保持同步,从而...

2019-09-12 19:41:45 605

原创 Kafka 2.2.0 Java客户端开发——消息消费者

快速入门Kafka消息消费者逻辑应当具备以下步骤:配置消费者参数,创建KafkaConsumer实例;订阅至少一个主题;拉取消息获得ConsumerRecords,遍历ConsumerRecords获取ConsumerRecord对象,从中提取消息的内容;程序退出或者无需消费消息时关闭KafkaConsumer。public class Consumer { public ...

2019-09-08 15:23:55 1664

原创 Kafka 2.2.0 Java客户端开发——消息生产者

快速入门Kafka消息生产者逻辑应当具备以下步骤:配置生产者参数,创造生产者实例KafkaProducer构建待发送的消息ProducerRecord发送消息程序退出或者无需生产消息时关闭生产者实例KafkaProducer示例代码:public class Producer { public static void main(String[] _args) throws...

2019-09-07 00:52:31 661

原创 InnoDB存储引擎事务ACID的实现

InnoDB存储引擎对事务有着良好的支持,完全符合ACID的特性,支持以下几种事务类型:扁平事务带有保存点的事务链事务分布式事务InnoDB不支持嵌套事务,用户可通过带有保存点的事务来模拟串行的嵌套事务。1 事务的实现事务隔离性由锁来实现,原子性、一致性、持久性由InnoDB的redo log和undo log来完成...

2019-09-03 21:02:06 413

原创 InnoDB存储引擎的锁机制详解

数据库的锁机制用于管理对共享数据的并发访问。InnoDB存储引擎的锁实现和Oracle数据库很类似,提供了一致性的非锁定读、行级锁支持。行级锁没有相关额外的开销,并可以同时得到并发性和一致性。在了解InnoDB锁机制之前,我们先要关注lock和latch的区别。它们二者都可以称之为锁,但使用场景有着很多区别。latch要求锁定的时间必须很短,如果锁定的时间很长,则会严重影响性能。在InnoDB...

2019-09-02 14:26:33 341

原创 InnoDB存储引擎的索引实现:B+树索引、全文索引、自适应哈希索引

InnoDB存储引擎支持以下索引:B+树索引全文索引哈希索引InnoDB存储引擎支持的哈希索引是自适应的,它会根据表的实际查询情况自动为表生成哈希索引,不能对哈希索引进行人为的干预。B+树索引并不能找到一个给定键值的具体行,只能找到被查找数据行所在的页,通过把该页读入到内存进行查找,最后将数据返回给客户端。B+树索引B+树索引在数据库中一般都在2~4层,也就是说查找到一条记录所在...

2019-08-30 20:24:37 645

原创 InnoDB存储引擎的数据存储方式(存储模式)

逻辑存储结构在InnoDB存储引擎中,所有数据都存放在表空间(tablespace)中,表空间由段(segment)、区(extent)、页(page)、行(Row)组成,它们的关系如下图:表空间(tablespace)在MySQL中,所有InnoDB存储引擎表中的数据都存储在表空间中。如果用户启用了innodb_file_per_table,那么每张表内的数据可以存储在一个单独的表空间文...

2019-08-28 14:06:49 2564

原创 InnoDB存储引擎的重做日志文件(Redo log)

默认情况下,InnoDB存储引擎的数据存放目录下有两个名为`ib_logfile0`和`ib_logfile1`文件,这两个文件就是重做日志文件(`redo log file`),该文件记录了对于InnoDB存储引擎的事务日志。重做日志的作用是当数据库发生宕机导致发生`media failure`时,可以通过这个文件进行数据恢复,用来保证InnoDB表存储的数据不会轻易因为宕机而丢失。具体来说,就是用来**恢复已经提交的事务中因为宕机的缘故还没有来得及持久化到磁盘的事务操作**。

2019-08-16 23:39:43 764

MySQL测试数据库employees(SQL文件)

MySQL官方测试数据库,已将DUMP文件整合进SQL文件。 MySQL官方测试数据库,已将DUMP文件整合进SQL文件。

2018-11-06

空空如也

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

TA关注的人

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