自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 微服务技术栈-Docker应用部署

之前文章讲到过,docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器,接下来我们将介绍如何使用docker去部署Java web开发的常见服务。在本章中我们介绍了数据卷这个概念,数据卷解决了docker容器在运行过程中的数据持久化问题。然后我们利用Docker来部署了与Java Web开发联系非常紧密的几个服务,可以看出使用了docker之后我们的部署变得十分方便且管理起来非常清晰,在后续的文章中将介绍更多有关docker部署服务的知识。

2023-10-06 15:04:50 1273 2

原创 微服务技术栈-初识Docker

docker技术风靡全球,它的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移。docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器。通过利用Docker的快速交付,测试和部署代码的方法,可以显着减少编写代码和在生产环境中运行代码之间的延迟。在后续章节我们将介绍Docker数据卷和Docerfile的概念,以及用Docker在服务器上部署应用。

2023-10-05 19:01:37 1114

原创 微服务技术栈-Gateway服务网关

在之前的文章中我们已经介绍了微服务技术中eureka、nacos、ribbon、Feign这几个组件,接下来将介绍另外一个组件SpringCloud-Gateway,Gateway网关是我们服务的守门神,所有微服务的统一入口。在本篇文章中,我们又介绍了微服务技术栈的另外一个技术SpringCloud-Gateway,网关具有限流、路由、权限控制等作用,其重要性不言而喻,可以在更多实践中体会网关的魅力。

2023-10-04 23:33:12 1641

原创 微服务技术栈-Nacos配置管理和Feign远程调用

在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念,Nacos除了可以做注册中心,同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式Feign,它可以帮助我们优雅的实现http请求的发送。本章介绍了Nacos配置管理和Feign远程调用,对于哪些配置需要在Nacos中进行管理,哪些需要写到本地还需要根据不同的业务要求来,没有统一的标准。Feign可以帮助我们更加优雅的实现http请求的发送,且代码维护起来更容易。

2023-10-04 21:53:28 1410

原创 微服务技术栈-Ribbon负载均衡和Nacos注册中心

在上面那个文章中介绍了微服务架构的概念以及eureka注册中心的概念,在本节中我们将继续介绍微服务技术栈的其他两个组件Ribbon和Nacos。在上篇文章中已经介绍了eureka这个注册中心,现在来介绍另外一个注册中心Nacos。Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka,Ncaos功能更加丰富,在国内受欢迎程度较高。

2023-10-03 22:36:57 2143

原创 微服务技术栈-认识微服务和第一个微服务Demo

随着业务的不断复杂,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。本章就从微服务架构演变开始讲起,并且介绍一系列微服务技术栈然后搭建一个自己的微服务demo。SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件,同时要注意不能把微服务技术和SpringCloud画等号。在后续的文章中将介绍更多有关微服务技术栈的知识。

2023-10-03 14:36:22 1088

原创 MySQL夺命连环15问,你能坚持到第几问?

本篇文章中列出的有关MySQL的问题,都是作者在平时学习中遇到或者面试中被问到的问题,针对每个问题作者都做了自己的梳理和总结,整篇文章内容很丰富,希望能给读者带来实际的帮助。作为JAVA开发程序员,与数据库打交道是必不可少的。MySQL作为当下热门的一款数据库,被广泛的应用到了企业实际开发中,同时在面试中也占了很大的比重,一定要熟练掌握。

2022-09-20 20:28:55 13346 27

原创 操作系统和计算机网络连环问,你能坚持到第几问?

作为JAVA开发程序员,在学习的过程中不能只盯着JAVA和数据库看,对于计算机网络和操作系统这样的计算机基础课程也要兼顾。本文总结了面试中常问的计网和操作系统问题,供大家参考学习。本篇文章主要介绍了一些计算机网络和操作系统常见的问题,像线程和进程的区别、Linux操作系统的常用命令都是面试的高频面试题。本篇文章内容较多,更多需要记忆。

2022-09-20 18:38:07 1050

原创 设计模式连环问,你能坚持到第几问?

本文总结了常见的六种设计模式的基本概念,主要包括单例模式、代理模式、工厂模式等。当然在学习设计模式的时候不能只学习概念,还要看每种设计模式在Java中的实际应用场景,这样才会记忆深刻,所以本文也以举例的方式去展示每种设计模式在Java中的实际应用,加深读者的理解。本篇文章总结了六种常见的设计模式以及在Java体系中的实际应用,都是面试中非常容易被问到的知识点。同时,在学习设计模式的时候一定要结合具体的场景去学习,这样才会记忆深刻。

2022-09-20 12:36:17 371

原创 页面置换算法(OPT、FIFO、LRU、时钟、LFU)

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。本篇文章介绍了缺页中断的基本概念以及五种页面置换算法的基本思想,并且以LRU为重点分析了如果自己实现一个页面置换算法要选择什么样子的数据结构去实现,这种思维特别重要。

2022-09-19 21:44:58 7057

原创 Redis面试连环问,你能撑到哪一问

本篇文章主要介绍了Redis在面试中经常会被问到的一些问题,主要包括Redis的应用场景、网络模型以及缓存穿透、缓存击穿和缓存雪崩等相关问题,非常重要。本篇文章内容较多,但都是Redis最基础也是非常重要的知识点,在面试中被问到的频率也非常高,在后面的文章中将会介绍更多有关Redis的内容,供读者参考学习。

2022-09-19 21:18:58 2139

原创 kafka面试连环问(2),你能撑到哪一问?

本篇文章接着上一篇文章的节奏,继续来总结kafka在面试中经常会被问到的一些问题,主要围绕kafka日志保存了什么以及kafka集群相关知识展开。数据传输的事务定义通常有以下三种级别:1)最多⼀次: 消息不会被重复发送,最多 被传输⼀次,但也有可能⼀次不传输2)最少⼀次: 消息不会被漏发送,最少被传输⼀ 次,但也有可能被重复传输.3)精确的⼀次( Exactly once) : 不会漏传输也不会重复传输,每个消息都传输被⼀次⽽且仅仅被传输⼀次,这是⼤家所期望的。

2022-09-19 20:52:26 631

原创 kafka面试连环问,你能撑到哪一问?

本文总结了与kafka相关的面试问题,主要包括生产者发送消息的方式和消费者提交offset的几种方式以及消息丢失、重复消费等问题,供读者参考学习。文中提到的几个问题都是kafka中很常见的问题,作为kafka的使用者,对于这些问题应该要牢记于心。消息丢失、重复消费、顺序消费、消息积压问题都是实际中使用消息队列时可能遇到的问题,非常重要。

2022-09-19 20:31:40 870

原创 kafka基础-什么是kafka以及kafka中的一些基本概念

在之前的文章中已经介绍了什么是消息队列以及为什么使用消息队列。本篇文章就来介绍一下当今市面上比较流行的一款消息队列-kafka,虽然是基础内容但对后续的学习非常重要。kafka是⼀种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用Scala 语⾔编写,目前是 Apache 的开源项目。⾼性能:以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。持久性:消息最终被持久化到磁盘,且提供数据备份机制防止数据丢失。

2022-09-06 17:06:54 609

原创 使用消息队列的原因以及消息队列的流派

消息队列(Message Queue)是当今市面上非常流行的中间件技术,使用消息队列可以帮助我们解决通信问题。同时,消息队列的流派也非常丰富,可以满足不同场景下的需要。本章主要介绍一下什么是消息队列以及为什么使用消息队列,在以后的文章中将会着重介绍kafka供参考学习。本篇文章主要简单介绍了一下消息的基本概念以及使用消息队列的优点和消息队列的流派。当然使用消息队列也会带来一系列问题,增加了系统的复杂性,以及带来消息丢失和重复消费等一系列问题。

2022-09-06 13:29:12 537

原创 死锁的产生条件以及如何避免死锁

死锁是并发编程中非常重要的一个知识点,死锁使程序运行无法得到正确的结果同时降低操作系统的资源利用率,危害非常大。本篇文章以哲学家就餐问题作为引导,讲解产生死锁的条件以及如何避免死锁,供参考学习。简单来说,死锁问题的产生是由两个或者以上线程并行执行的时候,争夺资源而互相等待造成的。死锁有四个条件,缺一不可,而打破死锁需要打破第四个条件,最常用的方法就是资源有序分配法。...

2022-08-09 18:24:18 1186

原创 进程调度算法-时间片轮转、最高优先级和多级反馈队列调度算法

从上一篇文章中已经介绍了几种常见的单核CPU进程调度算法,本篇文章顺着上一篇文章的节奏,继续讲解几种剩余常见的进程调度算法,例如时间片轮转、最高优先级和多级反馈队列调度算法,供大家参考学习。本篇文章讲解了时间片轮转、最高优先级和多级反馈队列调度算法,多级反馈队列调度算法是公认比较好的调度算法,它是对时间片轮转和最高优先级综合发展,可以兼顾长短作业。...

2022-08-09 17:21:34 2641 1

原创 进程调度算法-先来先服务、最短作业优先调度算法和高响应比优先调度算法

进程是由 CPU 调度的,因此进程调度算法也称 CPU 调度算法。本篇文章介绍几种常见的单核CPU调度算法,虽然现代计算机大多都是多核的,但单核CPU调度算法是多核CPU的基础,所以学好单核CPU调度算法非常重要。进程调度算法是面试中经常会被问到的知识点,本篇文章介绍了三种常见的单核CPU进程调度算法,内容相比较简单,在接下来的文章中还将介绍更多的进程调度算法供大家参考学习。...

2022-08-09 16:23:11 3530

原创 从JDK8源码中看ArrayList和LinkedList的区别

ArrayList和LinkedList的区别是面试中经常会被问到的一点,但是如果只看八股文去背诵着两者的区别,就不会有深刻的认识。本篇文章从数据结构以及JDK8源码的角度来分析这两者的区别,希望给读者带来更多的思考。在看ArrayList和LinkedList的区别之前我们先来看一下数据结构的相关知识。线性表是最常用的一种数据结构,简单来说线性表是n个数据元素的有限序列。线性表有两种实现方式,一种是顺序实现,一种是链式实现。顺序实现是用一组地址连续的存储单元依次存储线性表的数据元素。链式实现用一组任

2022-08-07 16:05:01 321

原创 JDK8中ConcurrentHashMap底层源码解析-扩容机制

在面试中ConcurrentHashMap的扩容机制也是经常会被问到的问题。ConcurrentHashMap的扩容机制比较复杂,在JDK8中加入了多线程扩容来改进效率,源码也是非常的长。本篇文章就来简单的解析一下ConcurrentHashMap扩容的底层源码,供大家参考学习。本章的难度较大,ConcurrentHashMap的源码难就难在它不仅长度长而且逻辑比较复杂,第一次看看不懂是很正常的事情。个人认为看源码还是很有必要的,这会让你对这个知识点有一个全新的认识,而不是局限在背八股文。https。...

2022-08-02 14:42:42 1036

原创 JDK8中ConcurrentHashMap底层源码解析-put和putVal方法以及数组的初始化

JDK1.8中的ConcurrentHashMap选择了与HashMap相同的Node数组+链表+红黑树结构;在锁的实现上,抛弃了原有的Segment分段锁,采用CAS+synchronized实现更加细粒度的锁。本篇文章以JDK8为例,对ConcurrentHashMap的底层源码做一个解析,帮助大家更好的理解ConcurrentHashMap的底层原理。https。...

2022-08-01 16:03:07 585

原创 JDK8中HashMap底层源码解析-treeifyBin和splite方法

本篇文章接着来解析JDK8中HashMap的底层源码treeifyBin和splite方法。其中,treeifyBin和链表转红黑树有关,splite和扩容时红黑树的转移有关。本篇文章解析了treeifyBin和splite方法,如果链表长度大于8且数组长度大于64,先把链表改造为双向链表,并且把节点类型改为TreeNode,在调用treeify()方法改造成红黑树。httpshttpshttpshttps。...

2022-07-27 16:11:41 907

原创 JDK8中HashMap底层源码解析-resize方法

上一篇文章已经解析过JDK8中HashMap的put和putVal底层源码,这篇文章顺着上一篇文章的节奏,来解析一下另外一个非常重要的方法resize方法。本章主要解析了JDK8中HashMap的resize方法的底层源码,这个方法主要有两个作用,一是用来初始化数组,二是用来扩容,而扩容的时候就需要转移元素,转移元素又分为四种情况。同时在转移红黑树的时候还提到了一个方法split()方法,在以后的文章中将会解析到。httpshttps。...

2022-07-27 14:17:10 508

原创 JDK8中HashMap底层源码解析-put和putVal方法以及数组下标的计算方式

我想只要JAVA程序员,都躲不过HashMap这一关,面试官的HashMap夺命连环问经常把求职者虐的体无完肤。因此,本篇文章以JDK8为例,对HashMap的底层源码做一个解析,帮助大家更好的理解HashMap的底层原理。刚开始阅读HashMap底层源码时可以会感到困惑,但只要理清楚逻辑多看几遍,就会对HashMap有一个更清晰的认识。在以后的文章中还将解析其他的HashMap方法源码,供大家参考学习。httpshttps。.........

2022-07-26 13:33:45 749

原创 分不清楚信号驱动IO以及异步IO?用最贴近生活的例子带你理解这三者的区别!

从上篇文章分不清楚阻塞IO,非阻塞IO,IO复用?用最贴近生活的例子带你理解这三者的区别!中我们已经学习了五中IO模型中的三种,今天我们就来看一下剩下的两种IO模型,信号驱动模型IO以及异步IO模型。五种IO模型,层层递进,一个比一个性能高,当然模型的复杂度也一个比一个复杂。在学习IO模型的过程中我们也可以看出,我们解决的其实就是如何优化数据等待阶段和数据复制阶段这两个问题。最后,用一张图总结五种IO模型的区别。httpshttpshttps。...

2022-07-24 12:20:30 635

原创 分不清楚阻塞IO,非阻塞IO,IO复用?用最贴近生活的例子带你理解这三者的区别!

在《Unix网络编程》一书中提到了五种IO模型,分别是阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型,供大家参考学习。计算机视角理解IO对于计算机而言,任何涉及到计算机核心(CPU和内存)与其他设备间的数据转移的过程就是IO。IO对于计算机而言有两层意思IO设备比如我们最常见的打印机、鼠标、键盘。对IO设备的数据读写。程序视角理解IO现代操作系统将空间划分为用户空间和内核空间。用户空间https。.........

2022-07-22 19:01:10 3401 1

原创 不知道HTTPS的加密原理,相信我,看这一篇就够了!

HTTP传输信息以明文的方式,不提供加密,因此不适合密码等重要信息。为了提高安全性,HTTPS加入了SSL协议,SSL依靠证书来验证服务器的身份,并对数据进行加密,以保障数据传输安全性,端口一般是443。本篇文章详细介绍一下HTTPS的加密原理,供大家参考学习。关于整个HTTPS的加密原理以及流程已经介绍完毕,可能第一遍看完会有点晕,但只要多看几遍,相信下一次在遇到整个问题你一定要从容的讲出。最后,附上HTTPS加密的整个流程。httpshttpshttpshttpshttps。......

2022-07-19 15:40:36 632 1

原创 SpringBoot是怎么对依赖进行自动管理的?SpringBoot的场景启动器究竟是什么?看这一篇

在普通的spring项目的中我们需要自己去定义依赖的版本,经常会遇到jar包冲突的情况。而SpringBoot会帮我们自动管理这些依赖的版本,给我们的开发省去了不必要的麻烦,提高我们的开发效率。这篇文章就来介绍一下SpringBoot是怎么对依赖进行自动管理的。springboot在父项目中定义了很多版本号,帮助开发人员把版本号管理起来。httpshttps。...

2022-07-16 15:52:48 516

原创 简单清晰的SpringBoot启动流程

SpringBoot启动流程总体分为两步,第一步先SpringApplication对象,第二步为执行run()方法。我们只要抓住这个思路,在深入研究每一步背后做了什么,对SpringBoot的启动流程就能熟练掌握。1.首先进入run()方法,run方法中new创建了一个SpringApplication实例。2.下面是创建SpringApplication实例所做的一系列操作。总结:SpringApplication实例所做的一系列操作有以下几个关键步骤:创建完SpringApplication

2022-07-12 22:34:48 2037

原创 简单清晰的SpringBoot自动装配原理

SpringBoot自动装配原理是面试中的难点,如果不抓住重点直接看源码很可能会迷失方向。本章结合SpringBoot源码,带大家剖析一下SpringBoot自动装配原理,希望能给读者带来帮助。SpringBoot的自动装配是指:SpringBoot会自动将一些配置类的bean注册到ioc容器,我们可以在需要的地方使用@Autowired或@Resource等注解来使用它。@SpringBootApplication注解是SpringBoot的核心注解,它其实是一个组合注解,包括三个注解,按住Ctrl+鼠

2022-07-11 23:07:28 527

原创 Python基础语法-文件和异常

在本章中,将介绍处理文件,让文件能够快速地分析大量的数据。同时将学习异常,用于管理程序运行时出现的错误。这些知识点我们都不陌生,只需学习下基本语法就能掌握使用。要利用文本文件中的信息,我们首先需要将信息读取到内存中。在读取文件时可以一次性全部读取,也可以每次读取一行。1.首先我们在D盘下创建一个文本文件pi_digits.txt2.一次性读取整个文件,使用read()方法,使用关键字with不再需要访问文件后将其关闭,你只管打开文件,并在需要时使用它,Python自会在合适的时候将其关闭。3.逐

2022-07-08 17:57:37 238

原创 Python基础语法-函数+类

对于函数和类的概念我们自然也不会陌生,python和java一样都是面向对象的语言,很多思想都是想通的。编写python函数就像编写java方法一样,通过函数,使程序的编写、阅读和测试都更加容易。在面向对象编程中,可以编写类表示现实世界中的事物和情景。1.下面是一个简单的函数,名为greet_user,作用是显示简单的问候语。2.我们也可以创建一个多参数的函数,同时可以使用关键字传参,关键字传参的好处就是直接在实参中将名称和值关联起来,而不关心顺序。3.编写函数时,可给每个形参指定默认值,如果我们

2022-07-06 16:17:10 533

原创 Python基础语法-用户输入+while循环

大多数程序都是需要和用户进行交互的,例如让用户输入账号和密码,才能验证用户能否正常登陆。通过获取用户输入,就可编写出交互式程序。同时可以通过编写while循环,让程序不断的运行。函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后,Python将其存储在变量中,方便使用。input()函数接受一个参数,即向用户显示的说明或提示。1.下面一个小例子展示了input()函数的基本用法。2.为了编写更清晰的程序,我们可以将提示语句单独放在一个变量中,然后传给input()函数。如下图所示

2022-07-05 16:40:26 3393

原创 Python基础语法-条件语句+字典

本章继续介绍Python基本语法的内容,包括if条件语句以及字典的使用,另外还将学习存储字典的列表、存储列表的字段和存储字典的字典。对于if语句我们并不陌生,之前其他语言的学习中也都了解过,这里不再阐述if语句概念,下面直接看一个简单的Python条件语句代码,其含义为如果名字为jim,则以大写形式打印,不然以小写形式打印。查询特定值是否不包含在列表中,例如设置一些禁言名单,如果不在禁言名单则可以讲话。经常需要超过两个的情形,为此可使用python提供的if-elif-else结构。例如,根据不同

2022-07-05 11:54:55 623

原创 Python基础语法-列表简介+操作列表+元组简介

在本章中,将介绍列表的基本概念以及如何创建以及使用列表。列表可以只包含几个元素,也可以包含数百万个元素,是最强大的python功能之一。列表:由一系列有顺序的排列元素组成,可以将任何东西加入列表,元素之间没有关系,在Python中用[]表示列表。1.下面是一个简单的列表示例,打印列表并且访问列表中的元素2.列表的索引从0开始而不是1,注意边界,不然会出现索引越界。3.修改、添加和删除列表元素创建的列表大多数都是动态的,可以随着程序的运行增删改元素,使用append()方法往列表末尾添加元素。

2022-07-04 12:47:34 545

原创 Python基础语法-变量和简单数据类型

在前面一章已经介绍了Python环境的搭建+第一个Python程序的运行,这一章将学习如何在Python中使用各种数据,如何将数据存储到变量以及如何使用这些变量。现在我们将上一篇文章第一个Python程序的运行的程序代码改成变量形式。我们添加了一个名为message的变量,存储的值为"Hello,World",同时在程序中可随时改变变量的值,而Python始终记录变量的最新值。在Python中使用变量时,需要遵守一些规则和指南,违反这些规则将引发错误,遵守指南能让代码更容易阅读和理解。创建良好的变量名

2022-07-03 23:04:23 229

原创 Python环境的搭建+第一个Python程序的运行

Python是一门杰出的语言,值得你去学习,本篇文章主要介绍了Python开发环境的搭建,搭建完成之后运行我们的第一个Python程序,开启Python世界的大门。学习一门语言之前我们要知道为什么要学习它,学习python的原因主要有以下几点:了解完为什么学习Python之后,我们先来进行Python开发环境的搭建。Anaconda指的是一个开源的Python发行版本,是一个安装、管理python相关包的软件,自带了python、Jupyter Notebook、Spyder、conda等工具,非常有用。

2022-07-03 20:15:31 345

原创 Thread、ThreadLocal、ThreadLocalMap是什么?看这一篇

一提到ThreadLocal,很多人都会心惊胆战,因为ThreadLoca确实算是JAVA并发编程中一大难点,尤其是ThreadLocal、ThreadLocalMap、Thread三者之间的关系更是错综复杂。本文结合JAVA源码,皆以最简单的方式介绍这三者概念以及它们之间的关系,希望能帮读者打通这其中的任督二脉。之前一直有个观念,学习一个新的知识之前,必先了解其为什么诞生以及其解决的是什么问题。之前我们学习多线程的时候就知道,多线程对共享变量进行访问,可以会出现安全问题。ThreadLocal(线程变

2022-06-30 16:38:26 3291 4

原创 聊聊Java的垃圾回收机制

垃圾回收机制是JVM中非常重要的知识点,也是面试的高频问题。这篇文章就来简单的探讨一下有关JAVA中的垃圾回收的问题,包括堆的分区、垃圾回收算法等。前面提到了堆分了新生代和老年代,新生代又分为eden和survivor区,survivor区又分为from和to区。垃圾回收主要在堆中进行,介绍完堆的分区之后,就可以开始进入今天的主题了。以往我们编写程序时候,经常会创建很多对象,但我们从未对这些对象进行回收,那么是谁帮我们完成了对象的回收呢?答案:JVM帮我们做了(自动回收垃圾)垃圾是什么:只要对象不

2022-06-27 10:52:20 296 1

原创 被JAVA内存模型绕晕了?看来看这一篇

网上有很多关于JAVA内存模型的文章,但大多只讲解了JAVA内存模型本身的概念,很少提到JAVA内存模型出现的原因是什么,导致看完之后自己的思维更加混乱。本文简单介绍为什么要有内存模型以及JAVA内存模型的基本概念供参考学习。我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道。而计算机上面的数据,是存放在主存当中的,也就是计算机的物理内存。刚开始,还相安无事的,但是随着CPU技术的发展,CPU的执行速度越来越快。而由于内存的技术并没有太大的变化,所以

2022-06-26 21:31:10 233

空空如也

空空如也

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

TA关注的人

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