自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

周二Show

周仔今年Offer多多!!!

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

原创 Raft: 基于 Log 复制的共识算法

在上面提及的情况下,新的选举规则并不足以保证安全性(Safety),我们还需要修改提交的规则。到目前为止只要 Leader 发现记录已存于大多数服务器,那么它就认为该记录已被提交。但是为了保证安全性,我们需要增加另一条规则。除了上述规则,Leader 必须能看见至少有一条来自于它本任期内的记录也存于大多数节点,才能认为它所复制的记录是提交的。

2023-04-17 00:35:20 537

原创 iptables 原理概述

Netfilter 包过滤框架和 iptables 防火墙是 Linux 服务器上大部分防火墙解决方案的基础。Netfilter 的内核 hook 和协议栈之间联系紧密,提供了对数据包经过系统时的强大控制功能。 iptables 基于这些功能提供了一个灵活的、可扩展的、将策略需求应用到内核的方案。理解了这些不同模块是如何联系到一起的,就可以更高效地对数据包进行控制。

2023-03-28 15:23:39 399

原创 【RabbitMQ】RabbitMQ 如何保证消息的可靠传输

一、可靠传输本篇文章主要讲 RabbitMQ 如何保证消息的可靠传输,所以在讲RabbitMQ的实现之前,我们需要先来搞懂一个问题,就是什么是消息的可靠传输。在 RabbitMQ 中,一个消息从产生到被消费大致需要经过三个步骤,即生产者生产消息,消息投递到 RabbitMQ,RabbitMQ 再将消息推送消费者(或者是消费者拉取),最终消费者将这条消息成功消费。所以消息丢失也可以划分为三种情况——生产者、消息队列、消费者,如下图所示:所以消息的可靠传输,就是确保消息能够百分百从生产者发送到服务器,

2020-10-13 16:42:12 1442 1

原创 Minor GC 和 Full GC 的触发条件

如题,不过首先需要对 GC 做一个统一的定义,这里引用 《深入理解 Java 虚拟机》中的介绍:部分收集(Partial GC):指目标不是完整收集整个 Java 堆的垃圾收集,其中又分为:新生代收集(Minor GC/Young GC):指目标知识新生代的垃圾收集。老年代收集(Major GC/Old GC):指目标只是老年代的垃圾收集器。目前只有 CMS 收集器会有单独收集老年代的行为。另外请注意“Major GC”这个说法现在有点混淆,在不同资料上常有不同所指,需按上下文区别分别到底是指老

2020-08-23 14:13:13 393

原创 理解 Java 中的类加载器

一、什么是类加载器1. 类加载器JVM 虚拟机团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制流”这个动作放到 Java 虚拟机外部去实现,以便让应用程序自己去决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。2. 命名空间每个类加载器都有自己的命名空间,命名空间由该加载器及所有的父加载器所加载的类组成。在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类。而在不同的命名空间中,有可能会出现类的完整名字(包括类的包名)相同的两个类。子加载器所加载的

2020-08-22 10:24:22 217

原创 【操作系统基础】文件管理系统(二)

四、文件的物理结构1. 文件块与磁盘块在内存管理中,进程的逻辑地址空间被分为一个一个页面。同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。2. 连续分配连续分配方式要求每个文件在磁盘上占用一组连续的块。当访问一个文件时,用户给出要访问的逻辑块号,操作系统找出该文件对应的目录项(FCB)… ,物理块号 = 起始块号 + 逻辑块号。当然,还需要检查用户提供的逻辑块号是否合法(逻辑块号 ≥

2020-08-13 22:17:22 2072

原创 【操作系统基础】文件管理系统(一)

一、初始文件管理由于系统的内存有限并且不能长期将文件保存在内存中,因此平时总是将它们以文件的形式存放在外存中,需要时再将它们调入内存。如何合理并高效地进行文件管理是操作系统实现的目标。1. 文件的属性计算机中存放了各种各样的文件,一个文件拥有哪些属性?这里简单介绍下:文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件;标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称;类型:指明文件类型;位

2020-08-13 10:14:13 3388

原创 为什么Redis能支持高并发

一、Redis为什么快纯内存K-V操作数据库的工作模式按存储方式分为了磁盘数据库和内存数据库。Redis将数据存储在内存中,并且绝大多数命令都不会受到磁盘 IO 速度的限制,所以速度极快。此外,Redis内部采用了 HashMap 这种数据结构,从根本上获得了优势,因为 HashMap 无论是查找和操作的时间复杂度都是O(1)。采用了多路复用的I/O机制Redis是单线程的,但它底层使用了多路复用 I/O 机制。多路 /O 复用模型是指利用select、poll、epoll 同时监察多个流的

2020-08-07 18:55:31 2582 3

原创 DNS协议解析过程

一、什么是DNS协议DNS是域名系统(Domain Name Service)的缩写,我们通常用来识别主机的方式有两种,一种是通过主机名,另外一种是通过IP地址。主机名便于我们的记忆,而路由器则更喜欢定长的、有着层次结构的IP地址。所以需要一个能将域名转变到IP地址的目录服务,这就是域名服务器存在的意义。二、DNS解析过程当用户在浏览器中输入www.baidu.com的时候,DNS解析大概会有以下过程:首先浏览器会检查自身缓存是否解析过这个域名的IP地址,如果有即缓存命中,那么解析结束;如果浏

2020-08-04 08:49:10 1946

原创 分布式事务的常见解决方案

一、事务起步1. 什么是事务事务这种东西大家都耳熟能详了,通常指由一组操作组成的一个工作单元,这一整个组合要么全部成功,要么全部失败。2. 本地事务在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库和应用在同一服务器,所以基于关系型数据库的事务又被称为本地事务。数据库事务具有原子性(Atomacity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)

2020-08-01 15:09:40 431

原创 Java中几种常用的线程池介绍

一、前言这篇文章记录下Java中常见的几种线程池,线程池可以通过Executors去创建,几个常见的生成线程池的方法如下:newCacheThreadPoolnewFixedThreadPoolnewScheduledThreadPoolnewSingleThreadExecutornewSingleThreadScheduledExecutor在了解线程池之前,我们需要先来了解创建线程池的几个重要的参数:corepollsize:核心池的大小,默认情况下,在创建线程池后,每当有新的

2020-07-30 16:07:14 259

原创 Mybatis中的一级缓存和二级缓存

ORM框架一般都会有缓存机制,像Hibernate和Mybatis中都有提供缓存功能用以提升查询的效率和减少数据库的压力。同样的Mybatis和Hibernate一样有一级缓存和二级缓存,并且预留了集成第三方缓存的接口。一、一级缓存一级缓存是Mybatis对缓存的默认支持,在没有配置的情况下,Mybatis还是会开启一级缓存,一级缓存是相对于同一个SqlSession而言的。在参数和SQL语句相同的情况下,如果我们使用的是同一个SqlSession对象去调用一个Mapper方法,那么只会执行一次SQL

2020-07-27 09:45:50 561

原创 Spring 中 Bean 的生命周期

在Java中,对于普通的Java对象,我们可以用new的方式、反射的方式、调用对象的clone方法或者运用反序列化手段去创建一个对象,当它没有任何引用的时会被垃圾回收机制回收。而对于像由Spring IOC容器所托管的对象,它们的生命周期完全由容器所控制。接下来就来了解一下Bean在Spring中的生命周期。一、Bean的生命周期1. 实例化Bean在这一阶段,Spring容器通过获取BeanDefinition对象中的信息进行实例化,这一步仅仅是简单的实例化,并未进行依赖注入。相当于我们程序中的

2020-07-26 20:09:56 199

原创 Java中运行时异常与受检异常的区别

面试中遇到一条题,Java中运行时异常与受检异常的区别。特此记录一下。所有的异常都集成自java.lang.Throwable,它有两个直接的子类:Error、Exception。Error错误:JVM内部出现的严重问题,无法恢复;Exception异常:普通的问题。通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理;RuntimeException:也叫非受检异常(unchecked exception).这类异常是编程人员的逻辑问题。应该承担责任。Java编译器不进行强制要求处

2020-07-26 00:27:11 1736

原创 Zookeeper的Leader选举流程

一、Zookeeper集群Zookeeper可以配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据都是相同的,每一个服务器均可以对外提供读和写的服务,这点和Redis是相同的,即对客户端来说每个服务器都是平等的。在集群中,需要一个Leader来完成处理事务,协调Zookeeper中的其他节点等工作,接下来就来介绍Zookeeper集群是如何选择出一个Leader节点的。1. ZK集群中服务器的状态Zookeeper集群中服务器被划分为以下四种状态LOOKING:

2020-07-25 15:48:32 264

原创 缓存的三大问题以及解决方案

Redis经常用于系统中的缓存,这样可以解决目前IO设备无法满足互联网应用海量的读写请求的问题。一、缓存穿透缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起id为-1的数据或者特别大的不存在的数据。有可能是黑客利用漏洞攻击从而去压垮应用的数据库。1. 常见解决方案对于缓存穿透问题,常见的解决方案有以下三种:验证拦截:接口层进行校验,如鉴定用户权限,对ID之类的字段做基础的校验,如id<=0的字段直接拦截;缓存空数据:当数据库查询到的数据为空时,也将这条数据进行缓存

2020-07-22 23:23:20 465

原创 Redis常见集群方案详解

本文主要讲解Redis常见集群方案中涉及到的知识,在了解本文前,需要对CAP原理和Redis的持久化方案有所了解。一、主从同步Redis的持久化保证了即使是服务器重启也能恢复几乎全部数据(无论是RDB、还是AOF,除非每条指令保存一次,否则还是会有数据丢失的可能)。因为其持久化方案将数据保存到了磁盘上,那么重启的话就会从磁盘中加载原先的数据。但是这并不是绝对的安全,如果单台服务器发生宕机或者是磁盘损坏,数据发生丢失,那么造成的结果是很严重的。为了避免单点故障,通常会将数据复制多份保存到其他服务器..

2020-07-20 21:53:01 640

原创 【LeetCode-344,双指针,位运算】反转字符串

题目编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]分

2020-07-17 23:02:42 160

原创 Redis 持久化之 RDB 与 AOF 详解

一、Redis 持久化我们知道Redis的数据是全部存储在内存中的,如果机器突然GG,那么数据就会全部丢失,因此需要有持久化机制来保证数据不会一位宕机而丢失。Redis 为我们提供了两种持久化方案,一种是基于快照,另外一种是基于 AOF 日志。接下来就来了解一下这两种方案。1. 操作系统与磁盘首先我们需要知道 Redis 数据库在持久化中扮演了什么样的角色,为此我们先来了解数据从 Redis 中到磁盘的这一过程:客户端向数据库发起 write 指令(数据在客户端的内存中);数据库收到 write

2020-07-17 17:04:09 421 1

原创 【LeetCode-19,双指针】删除排序数组中的重复项

题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组 并在使用O(1)额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 num

2020-07-16 23:03:23 139

原创 常见的分布式ID生成算法详解

ID是数据的唯一标识,传统的做法是利用 UUID 和数据库自增ID,在互联网企业中,大部分公司使用的都是MySQL,并且因为需要事务的支持,所以通常会使用InnoDB存储引擎,UUID 太长以及无序,所以并不适合在 InnoDB 中来作为主键,自增 ID 比较合适,但是随着公司的业务发展,数据量将越来越大,需要对数据进行分表,而分表后,每个表中的数据都会按照自己的节奏来进行自增,很有可能出现 ID 冲突,这个时候就需要一个单独的机制来负责生成唯一的 ID,生成的 ID 叫分布式 ID,或者全局 ID。下面来

2020-07-16 09:30:35 645

原创 【负载均衡】常见的负载均衡算法的实现与应用

所谓负载均衡就是将外部发送过来的请求均匀或者根据某种算法分配到对称结构中的某一台服务器中。负载均衡可以分为硬件负载均衡和软件负载均衡,常见的硬件负载均衡有F5、Array等,但是这些设备都比较昂贵。相比之下,利用软件来实现负载均衡就比较简单了,常见的像是 Nginx 的反向代理负载均衡。这篇文章并不去细说 Nginx 这类软件的具体配置,只是着重来了解几种常见的负载均衡算法的实现(本文使用Java描述)与应用。对于我们来讲,所了解的最基本的负载均衡算法包括了:随机、轮询、一致性Hash等几种方式,接下来就

2020-07-15 13:09:29 425

原创 消息队列【RabbitMQ】入门,从安装到整合Spring Boot

一、RabbitMQ起步1. 什么是消息队列Message Queue翻译为消息队列,常被称为消息中间件,基于典型的生产者和消费者模型。在这种模型中,生产者不断向消息队列中生产消息,而消费者则不断从队列中获取消息并消费。因为消息的生产和消费都是异步的,所以无论是消息的发送方还是消息的接收方,都只需要关注于自身的发送和接收,没有业务逻辑的侵入,轻松的实现系统间的解耦。2. 不同MQ的特点当前市面上有很多主流的消息中间件,比较常见的有:ActiveMQ、RabbitMQ、Kafka以及阿里巴巴自主研发的

2020-07-14 09:05:31 255

原创 HTTP协议与HTTPS的加密流程

一、HTTP基础知识HTTP全称Hyper Text Transfer Protocol,即超文本传输协议。HTTP是一个应用层协议,可视为一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。1. HTTP请求流程我们这里就直接以一个常见的面试题引入啦。在浏览器中输入 www.baidu.com 后会发生什么?当一个用户在浏览器里输入 www.baidu.com 这个 URL 时,将会发生很多操作。首先它会请求 DNS 把这个域名解析成对应的 IP 地址,然后

2020-07-12 13:22:04 1777

原创 【操作系统基础】内存管理(三)

四、虚拟内存的基本概念1. 传统存储方式的特征上一节所讨论的各种内存管理策略都是为了同时将多个进程保存在内存中以便允许多道程序设计。它们都具有以下两个共同的特征:一次性作业必须一次性全部装入内存后,方能开始运行。这会导致两种情况发生:当作业很大,不能全部被装入内存时,将使该作业无法运行;当大量作业要求运行时,由于内存不足以容纳所有作业,只能使少数作业先运行,导致多道程序度的下降。驻留性作业被装入内存后,就一直驻留在内存中,其任何部分都不会被换出,直至作业运行结束。运行中的进程,会

2020-07-11 10:53:42 2486 1

原创 【操作系统基础】内存管理(二)

本文接上文,主要讲解操作系统内存分配与回收的几种方式。三、内存的分配与回收1. 单一连续分配在单一连续分配方式中,内存被分为系统区和用户区。系统区通常位于内存的低地址部分,用于存放操作系统相关数据;用户区用于存放用户进程相关数据。内存中只能有一道用户程序,用户程序独占整个用户区空间。优点:实现简单;无外部碎片;可以采用覆盖技术扩充内存;不一定需要采取内存保护(eg:早期的 PC 操作系统 MS-DOS)。缺点:只能用于单用户、单任务的操作系统中;有内部碎片;存储器利用率极低。这里简单解释一.

2020-07-10 08:27:28 727

原创 【操作系统基础】内存管理(一)

一、内存管理的基础知识1. 内存的概念内存可存放数据,程序执行前需要先放到内存中才能被 CPU 处理——缓和 CPU 与硬盘之间的矛盾;扩展:如果计算机“按字节编址”,那么每个存储单元大小为1字节,即1b,8个进制位;如果字长为16位的计算机“按字编制”,则每个存储单元大小为1个字,每个字节为16个二进制位。2. 进程运行的基本原理我们写的代码要翻译成 CPU 能识别的指令,这些指令会告诉 CPU 应该去内存的哪个地址读/写数据,这个数据应该做什么样的处理。2.1 逻辑地址 v.s. 物

2020-07-09 23:19:30 350

原创 【操作系统基础】进程管理(三)进程同步与互斥

一、进程同步、互斥的基本概念1. 什么是进程同步进程具有异步性的特征。异步性是指各并发执行的进程以各自独立的、不可预知的速度向前推进。举一个线程通信的例子,管道通信:读进程和写进程并发运行,由于并发必然导致异步性,因此“写数据”和“读数据”两个操作执行的先后顺序是不确定的。而实际应用中,又必须按照“写数据→读数据”的顺序来执行。如何解决这种异步问题,就是“进程同步”所讨论的内容;同步亦称直接制约关系,它是指为了完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置协调它们的工作次序而产生的

2020-07-08 21:31:05 1464 3

原创 【LeetCode-15,双指针】判断数组中是否存在三数和为零

题目给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]分析这种题一看就知道需要数组遍历了,需要思考的就是如何更高效地遍历,如何不重复自己已经走过的路,这里采用排序+双指针的方式来实

2020-07-07 23:57:47 1623

原创 【操作系统基础】进程管理(二)处理机调度

一、调度的基本概念当有一堆任务要处理,但由于资源有限而无法同时处理。这是需要确定以某种规则来决定处理这些任务的顺序,这就是“调度”所研究的问题。调度可以分为三个层次,分别是高级调度(作业调度),中级调度(内存调度)以及低级调度(进程调度)。其中:高级调度是外存与内存之间的调度,每个作业只调入一次、调出一次,作业调入与调出时创建或者撤消相应的 PCB。中级调度则是决定将哪个处于挂起状态的进程重新调入内存。而低级调度的主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。调度类别

2020-07-07 21:53:52 729

原创 【LeetCode-141,双指针】判断链表中是否有环?

题目给定一个链表,判断链表中是否有环。分析首先可以回想追及问题:在一条操场跑道上,如果两个人跑步速度一块一慢,那么两人在同一起点开始后,最后一定会在跑到的某个节点相遇。从此引入快慢指针的概念,定义两个指针,同样从头节点开始起步往后移动,一个指针一次移动两个节点(快指针),另外一个指针一次移动两个节点(慢指针)。如果现在链表没有环的话,那么这两个指针是一定不会再次遇见的,指针只会走到该节点没有下一节点后停下;而如果链表中有环,那么两个指针就一定辉会在链表中的某一节点相遇。用图来演示一下,假设现在有

2020-07-07 12:16:40 242

原创 【操作系统基础】进程管理(一)进程与线程的描述与控制

一、进程的定义与特征1. 进程的定义与特征进程(Process)是资源分配的基本单位。进程是动态的,是程序的一次执行过程,同一个程序执行会对应多个进程。相反,程序是即是静态的,就是存放在磁盘里的可执行文件,就是一系列的指令集合。2. 进程的组成程序段、数据段、PCB三部分组成了进程的实体(进程映像),引入进程实体的概念后,可把进程定义为:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。2.1 PCB当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”——PID

2020-07-07 10:32:55 505

原创 【操作系统基础】操作系统核心概述

一、何为操作系统操作系统(OS,Operating System)是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充。它在计算机系统中占据了重要地位,汇编程序、编译程序、数据库管理系统等系统软件,都依赖于操作系统的支持,需要取得操作系统的服务。二、 操作系统的功能和目标1. 作为资源的管理者OS 提供的计算机系统资源管理如下:处理机管理:用于分配和控制处理器;存储器管理:负责内存的分配和回收;文件管理:负责文件的存取、共享和保护;设备管理:负责 I/O 设备的分配和操纵。2.

2020-07-06 16:48:15 3961

原创 聊聊线程池,ThreadPoolExecutor源码详解

一、线程池起步1. 线程池的基本介绍首先Java里的线程利用的线程模型是KLT,这带来了许多好处,比如线程的阻塞不会带来进程的阻塞,能更加高效地利用CPU的资源等。但这也意味着在Java里的线程的创建和销毁是一个相对偏且消耗资源的操作,Java线程依赖于内核线程,创建线程需要进行操作系统状态切换,为避免资源过度消耗需要设法重用线程执行多个任务。线程池就起到这么一个重用,它负责了线程缓存,也负责对线程进行统一的分配、调优与监控。通过多个任务重用线程,实现线程复用的效果,最终减少系统开销;1.1 什么

2020-07-05 11:09:43 207

原创 TCP协议的流程图解

一、TCP协议起步1. 什么是TCP协议TCP是面向连接的协议,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立确保数据传输的参数。它有以下几个特点:面向连接:TCP一定是“一对一”的,无法像 UDP 协议那样在同一时刻像多个主机发送消息,即无法做到一对多;可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端(当然不是说绝对可靠);基于字节流:消息是“没有边界”的,所以无论我们

2020-07-03 23:19:22 7356

转载 ThreadLocal的使用以及源码剖析

一、ThreadLocal起步ThreadLocal应该都比较熟悉,这篇文章会基于ThreadLocal的应用以及实现原理做一个全面的分析:1. 什么是ThreadLocalThreadLocal,简单翻译过来就是本地线程,但是直接这么翻译很难理解ThreadLocal的作用,如果换一种说法,可以称为线程本地存储。简单来说,就是ThreadLocal为共享变量在每个线程中都创建一个副本,每个线程可以访问自己内部的副本变量。这样做的好处是可以保证共享变量在多线程环境下访问的线程安全性2. Threa

2020-07-02 11:55:41 245

原创 Java中的四种引用类型是哪些?

从一开始学习Java我们就知道Java的数据类型一般有两种,一种是基本数据类型,另一种是引用数据类型。其中,基本数据类型的值通常储存在栈内存中,用于对该类型的对象进行存储;而引用数据类型则在存储堆中对需要引用的对象进行引用。引用是Java面向对象的一个特点,如果一个对象不曾被任何变量应用的话,那么整个程序也就无法再使用这一对象。四种引用类型可以说是在学习Java的过程中经常会接触到的。Java中主要包括了四种引用类型,分别是:强引用,软引用,弱引用以及虚引用。一、强引用强引用是一种最常见的引用形式,

2020-07-01 23:10:51 5823

原创 MySQL中的锁机制详细说明

一、MySQL锁机制起步锁是计算机用以协调多个进程间并发访问同一共享资源的一种机制。MySQL中为了保证数据访问的一致性与有效性等功能,实现了锁机制,MySQL中的锁是在服务器层或者存储引擎层实现的。二、行锁与表锁首先我们来了解行锁与表锁的基本概念,从名字中我们就可以了解:表锁就是对整张表进行加锁,而行锁则是锁定某行、某几行数据或者行之间的间隙。各引擎对锁的支持情况如下:行锁表锁页锁MyISAM√BDB√√InnoDB√√1. 行锁A

2020-06-30 17:45:40 5908 7

原创 【MySQL】SQL优化之explain等工具使用

在应用的开发过程中,由于初期数据量小,开发人员写SQL语句时更重视功能上的实现,但是当应用系统正式上线后,随着生产数据量的急剧增长,很多SQL语句开始逐渐显露出性能问题,对生产的影响也越来越大,此时这些有问题的SQL语句就成为整个系统性能的瓶颈,因此我们必须要对它们进行优化,接下来将介绍SQL优化过程中几种常用的工具的使用方式。一、查看SQL执行频率MySQL客户端连接成功后,通过show [session|global] status命令可以提供服务器状态信息。show [session|global

2020-06-29 16:00:22 433

转载 MySQL 中的存储过程的创建及调用

一、什么是存储过程存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过制定存储过程的名字并给定参数(如果需要)来调用执行。优点(为什么要用存储过程)?将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用;批量处理:SQL + 循环,减少流量,也就是“跑批”;统一接口,确保数据安全;相对于Oracle数据库来说,MySQL的存储过程相对功能较弱,使用较少。二、存储过程的创建和调用

2020-06-29 00:22:47 876

Android仿微信聊天界面,解决软键盘抬升问题

Android仿微信聊天界面,解决软键盘抬升的小Demo。同时也有包含两张聊天气泡图。对应介绍博客[](https://blog.csdn.net/Allen_Adolph/article/details/106467315)。大家可以看看。谢谢支持!

2020-06-01

空空如也

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

TA关注的人

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