自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

丹丹的后花园

学--讲--写

原创 操作系统武功修炼心法

本篇博客是操作系统这个专栏的目录,在这专栏里,博主会对操作系统进行细致的分析和讲解,主要内容按照操作系统的五大功能(设备管理、作业管理、文件管理、处理机管理和存储器管理)来展开。OS是一门专业课,理论性较强,希望这个专栏能帮助你理解。 目录 ​ 1.计算机操作系统概述 ​ 2.进程和线程的区...

2019-10-29 09:19:19

阅读数 665

评论数 5

原创 Java多线程结合银行家算法避免死锁实践

​ 在前几篇文章中,我们讨论了银行家算法,包含其数据结构、算法步骤和安全性算法。关于银行家算法的具体细节,请参看这篇博文。 ​ 在另一篇文章中,我们使用了Java来模拟实现了银行家算法,并使用一个例子来验证了算法的有效性,具体实现请参看这篇博文。 ​ 本文,让我们一起来看下如何使用Java多线...

2020-02-05 22:49:26

阅读数 2212

评论数 9

原创 存储器管理概述----功能、管理对象、基本模式

存储器一直都是计算机系统的重要组成部分。近年来,随着技术的发展,虽然存储器的容量一直在不断扩大,但是仍不能满足现代软件发展的需要。存储器仍然是一种宝贵而稀缺的资源。如果有效的来管理存储器,不仅直接影响到存储器的利用率,而且对系统的性能也有重大影响。 本文对存储器管理的功能,管理对象,基本模式进行...

2020-02-02 15:31:48

阅读数 957

评论数 2

原创 Java模拟实现银行家算法

银行家算法是我们的老朋友迪杰斯特拉为T.H.E系统设计的一种避免死锁产生的算法。该算法最初是为银行系统设计的,为了保证银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。银行家算法是一个非常经典的算法,也是死锁避免算法中的最具代表性的算法,其思想是非常值得我们学习的。死锁处理的四种方法:预防...

2020-02-01 21:36:02

阅读数 2831

评论数 2

原创 避免死锁-----银行家算法详解

银行家算法是我们的老朋友迪杰斯特拉为T.H.E系统设计的一种避免死锁产生的算法。该算法最初是为银行系统设计的,为了保证银行在发放现金贷款时,不会发生不能满足所有客户需要的情况。银行家算法是一个非常经典的算法,也是死锁避免算法中的最具代表性的算法,其思想是非常值得我们学习的。死锁处理的四种方法:预防...

2020-02-01 12:09:02

阅读数 5223

评论数 0

原创 操作系统中不安全状态为何并非一定转为死锁?

在学习避免死锁、银行家算法时,对于安全状态一定不会产生死锁,不安全状态也并非必然转为死锁,不止你是否会疑惑为何处于不安全状态下,不是必然会发生死锁? 还有死锁定理中,为何发生死锁是资源分配图不可完全简化的充分条件? 今天,让我们一起来讨论下。

2020-01-31 12:26:41

阅读数 3155

评论数 1

原创 死锁的预防、检测与解除

本文主要讨论死锁的预防,如何检测死锁和解除死锁。 预防死锁是通过破坏产生死锁的四个必要条件中的一个或几个,以避免发生死锁。由于互斥条件是临界资源所必须的,不仅不能改变,还应加以保证,因此主要是破坏产生死锁的后三个条件,即请求和保持、不可抢占与循环等待。 系统需要配有死锁检测算法和死锁解除算法,...

2020-01-30 18:23:35

阅读数 2189

评论数 0

原创 死锁概述---定义、危害、必要条件和处理方法

死锁是一组进程在执行的过程中,因为竞争资源或者推进顺序不当导致的一种情况,在这种情况下,每个进程都在持有着自己已经抢占的资源,又同时等待别人释放资源,最终这一组进程都一直僵持谁也无法运行。本文,我们会对死锁的定义、危害,产生死锁的四个必要条件,和处理思索的四种方法来进行细致的讨论,让死锁对你毫无保...

2020-01-29 16:17:46

阅读数 1046

评论数 1

原创 Java基础如何学?

Java Web的学习是需要一定的计算机基础的,主要有前端基础和Java基础和一定的网络基础,这些基础知识还是需要掌握到一定的程度的。 Java语言是整个Java开发的基础,其重要性是不言而喻的,基础不好,也筑不起高台。关于Java基础不是我一篇文章就能说的清楚的,在这里我给大家整理了一些我看到...

2020-01-29 11:58:36

阅读数 1128

评论数 4

原创 Java Web前端基础

Java Web的学习是需要一定的计算机基础的,主要有前端基础和Java基础和一定的网络基础,这些基础知识还是需要掌握到一定的程度的。 本文主要介绍前端接触,共包括HTML、CSS和JavaScript,学习的过程中,还是要多动手。

2020-01-28 14:35:47

阅读数 429

评论数 0

原创 Java Web开发环境搭建

本文是Java Web系列博客的第一篇,主要为JDK的安装、eclipse的安装、tomcat的下载,eclipse配置tomcat,新建第一个Java Web 项目,并且让第一个项目在Tomcat上运行起来,如果某一部分你已经完成了,可以直接跳过。 在学习的过程中,还请跟着一起多动手,码出技术...

2020-01-27 14:11:22

阅读数 4280

评论数 2

原创 处理机调度算法详解----进程调度

进程调度调度的对象是进程,其主要任务是根据某种算法,选取处于就绪队列中的进程,并由分派程序将处理机分配给被选中的进程。进程调度是一种最基本的调度,在多道批处理、分时和实时等OS中,都必须要配置这级调度。其执行周期最短,也就是执行频率最高,分时系统中10-100ms便要进行一次进程调度,因此也称为短...

2020-01-25 17:43:17

阅读数 278

评论数 1

原创 处理机调度算法详解----作业调度

作业调度调度的对象是作业,作业在概念上和程序还是有些区别的,作业是处于外存中的,也就是在后备队列上的,作业调度的任务就是从外存的后备对列选取某些作业调入内存,并为他们创建进程、分配必要的资源,也只有作业被调入到内存中,并为之分配资源,才能完成进程的创建工作,OS才可以进行其他的调度。

2020-01-24 18:22:35

阅读数 282

评论数 0

原创 OS处理机调度算法----理论篇

在传统的操作系统中(早期,OS为单处理机),处理机的分配和运行都是以进程为单位的(参考进程的定义),因而处理机的管理可归结为对进程的管理。处理机管理的功能主要包含:进程控制、进程同步、进程通信、调度。下面我们一个个的来分析其功能的具体含义。 进程控制是处理机管理中最基本的功能,主要包含为调入内存...

2020-01-23 22:49:24

阅读数 272

评论数 0

原创 经典的进程同步问题-----读者-写者问题详解

经典的进程同步问题-----读者-写者问题详解 ​ 本文和接下来几篇博文是对上篇文章(进程同步机制)的一次实践,通过具体的例子来加深理论的理解,会用三个经典的进程同步问题来进行讲解,并且会配有伪代码和Java实践(使用多线程模拟),深入的进行讲解。 ​ 进程同步问题是一个非常重要且相当有趣的问...

2019-11-25 08:34:08

阅读数 506

评论数 0

原创 经典的进程同步问题-----哲学家进餐问题详解

​ 本文和接下来几篇博文是对上篇文章(进程同步机制)的一次实践,通过具体的例子来加深理论的理解,会用三个经典的进程同步问题来进行讲解,并且会配有伪代码和Java实践(使用多线程模拟),深入的进行讲解。 ​ 进程同步问题是一个非常重要且相当有趣的问题,本文我们对其中比较有名的哲学家进餐问题来进行探...

2019-11-25 08:33:21

阅读数 682

评论数 1

原创 经典的进程同步问题-----生产者-消费者问题详解

经典的进程同步问题-----生产者-消费者问题详解 ​ 本文和接下来几篇博文是对上篇文章(进程同步机制)的一次实践,通过具体的例子来加深理论的理解,会用三个经典的进程同步问题来进行讲解,并且会配有伪代码和Java实践(使用多线程模拟),深入的进行讲解。 ​ 进程同步问题是一个非常重要且相当有趣...

2019-11-25 08:32:47

阅读数 497

评论数 0

原创 Java并发编程模拟管程(霍尔Hoare管程、汉森Hansan管程、MESA管程)

​ 在前面个两篇博文中,我们使用Java模拟了AND型信号量和信号量集,本文将使用Java来模拟管程,关于管程的一些理论知识,可以参考另一篇博客。 ​ 对于管程,在这里我们不做具体的讨论了。不过对于Java和管程之间的一些事,还是很有意思的。Java中,每个对象其实都一个Monitor(java中...

2019-11-21 19:19:16

阅读数 444

评论数 0

原创 进程通信方式总结与盘点

​ 进程通信是指进程之间的信息交换。这里需要和进程同步做一下区分,进程同步控制多个进程按一定顺序执行,进程通信是一种手段,而进程同步是目标。从某方面来讲,进程通信可以解决进程同步问题。 ​ 首先回顾下我们前面博文中讲到的信号量机制,为了实现进程的互斥与同步,需要在进程间交换一定的信息,因此信号量机...

2019-11-20 14:25:23

阅读数 3028

评论数 0

原创 Java并发编程(JUC)模拟信号量集

​ 上一文中,我们使用JUC模拟了AND型信号量,对于信号量集,他的特点就是一次可以申请多个资源,并且可以设置资源分配下限,让设计者可以更好的来控制进程的执行。如果对于进程同步机制还有什么疑惑,可以参考我的另一篇博客。 ​ 为了方便编程,并且信号量集在使用时更加方便,我们定义了一个Semapho...

2019-11-17 12:22:05

阅读数 524

评论数 2

原创 Java并发编程(JUC)模拟AND型信号量

Java并发编程(JUC)模拟AND型信号量 ​ AND型信号量可能大家都听说过并可能都有一定的理解,但是你有使用过么?今天就使用Java来模拟实现! ​ 本文是对上篇文章(进程同步机制)的一次实践,通过JUC提供的一些机制来模拟一些OS中的AND型信号量,因为记录型型信号量可以等价于JUC中...

2019-11-16 09:36:57

阅读数 603

评论数 2

原创 进程同步机制-----为进程并发执行保驾护航

本文是对进程同步机制的一个大总结(9000+字吐血总结),涵盖面非常的全,包括了进程同步的一些概念、软件同步机制、硬件同步机制、信号量机制和管程机制,对每种机制结合代码做了详细的介绍,并且对琐碎的知识点和概念解释的非常清晰。 ​ 在前面的博客中讲述了进程的状态及其状态的转换,每种状态的含义和转换...

2019-11-07 10:24:53

阅读数 778

评论数 19

原创 操作系统进程状态和状态转换详解

进程的状态的转换与PCB详解 ​ 返回主目录 ​ 之前的有博文对进程和线程的区别进行了详细的介绍,并且说明了引入进程的目的是为了能够使程序并发的执行,并且可以对并发执行的程序加以描述和控制。这篇博文,我们就来对进程的状态转换来进行详细的分析。本文除了进程的状态转换,还穿插着对进程的控制的说明。...

2019-11-01 10:33:02

阅读数 1088

评论数 2

原创 计算机操作系统概述---目标、作用、功能、特性和发展过程

最近在研究操作系统这门基础专业课,在前面也写了篇博客–进程和线程的区别,从操作系统的发展过程来引出进程和线程被引入到操作系统的目的,并从六大方面对进程和线程进行对比。在里面简单的提了下操作系统的发展过程,不过总感觉这个OS专栏少了一个大纲性质的东西,因此写了这篇博客,后续的博客也都是对本文中操作系...

2019-10-29 08:51:18

阅读数 2589

评论数 11

原创 纠错--并发和并行的区别

并行性和并发性是既相似又有区别的两个概念,再开始分析之前,我们先给出并发和并行的概念。 ​ 并行是指两个或多个时间在同一时刻发生。 ​ 并发是指两个或多个事件在同一时间间隔内发生。 ​ 大家看到的图一般如下所示: 上述是博主看到的并发和并行的理解,其实我之前也一直是这么认为的,一直...

2019-10-24 19:52:24

阅读数 632

评论数 6

原创 进程和线程的区别---从操作系统的前世今生进行分析

面试的时候,我们经常会被问到进程和线程的区别是什么?这个问题也曾困扰过我,在之前,都是百度搜索一下,记一下答案,就糊弄过去了,一直不曾深入的去研究,今天通过这篇博客,以操作系统的发展作为脉络,从操作系统的出现和发展来和大家一起学习进程和线程,并分析进程和线程间的区别。 1.举个例子 ​ 在正式...

2019-10-14 15:55:03

阅读数 1043

评论数 23

原创 通过tcpdump+wireshark来抓包分析TCP长连接和短连接的区别

最近开发中遇到以下:需要客户端建立一个链接,然后服务器端持有这个链接,当有时间变换(如任务的状态改变),需要后端将事件推送给任务对应的责任人。因为博主之前也研究过WebSocket,开发了个简单的聊天室,但是这次这次应用到实际,我就在想TCP的这个长连接在不发生异常的情况下可以维持多久?在思考这个...

2019-10-11 15:47:28

阅读数 223

评论数 0

原创 一种基于正则的状态变化事件触发机制

问题描述 ​ 在博主开发一个项目时,遇到了这么一个需求,一共有护士、病人、药品、设备、病床等标签(rfid),如果在采集器范围内采集到的标签有状态变化(rfid标签离开/进入采集到的范围),就会触发事件,如果是多个标签的状态同时变化,会触发特殊的场景。 问题分析 ​ 在收到这个需求后,博主思...

2019-10-01 23:00:24

阅读数 246

评论数 1

原创 MongoDB中索引介绍

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文档并选取那些符合查询条件的记录。 mongo中的索引实现方式和引擎有关,版本3.0之前的的引擎默认是MMAPv1,使用内存映射机制 ...

2019-09-30 09:41:43

阅读数 198

评论数 0

原创 正则表达式中的贪婪模式与懒惰模式---以匹配xx开头xx结尾的字符串为例

正则表达式匹配以xx开头以xx结尾的字符串 正则表达式是字符串处理的一大神兵利器,可以很方便的帮我们判断字符串是否符合规则和获取匹配到的结果,减少我们的重复的处理数据。 ​ 博主在开发中,需要将硬件设备采集到的数据进行获取,一条数据已bb开头,以7e结束,硬件发送来的数据可能包含多条,我们...

2019-09-29 21:01:16

阅读数 808

评论数 1

原创 MongoDB初识及其重要特性

数据库分类 ​ 数据库是存放数据的仓库,主要分为两种:关系型数据库和非关系型数据库。 ​ 关系型数据库是把复杂的数据结构归结为简单的二元关系,其通过SQL结构化查询语句来操作数据,其最大优点是可以保持数据的一致性。主流的关系型数据库有Oracle、Mysql、SQL Server等。 ​ 非...

2019-08-03 20:03:39

阅读数 199

评论数 0

原创 MongoDB主键ObjectId(_id)生成策略

每个mongoDB中的文档都需要一个主键,这个主键在每个集合中时唯一的,默认会带唯一索引,主键为_id字段。我们同样可以使用别的值作为 _id的值,但是没有提供时,mongo会自动生成一个 _id。 ​ mongoDB默认的 _id为一个12字节的16进制的字符串,这个字符串中保存着有用的信...

2019-07-31 17:00:43

阅读数 313

评论数 0

原创 SpringBoot使用MyBatis-Generator详解

SpringBoot使用MyBatis-Generator详解MyBatis-Generator简介MyBatis-Generator使用添加maven依赖创建MBG配置文件运行MBG,生成底层类数据库查询 前几天工作中接触到MyBatis-Generator,发现其方便之处,MyBatis-Ge...

2019-05-12 17:26:04

阅读数 978

评论数 1

原创 分布式集群环境下Session共享的简单解决方案

Session在集群环境下工作的解决方案。 之前讲的Session是运行在一台服务器上的,所有的访问都会到达我们的唯一服务器上,这样我们可以根据客户端传来的sessionID,来获取session,或在对应Session不存在的情况下(session 生命周期到了/用户第一次登录)...

2017-08-12 11:06:29

阅读数 14697

评论数 5

原创 Cookie与Session的工作原理解析

cookie和session大家一定不会陌生,至少大家都会知道cookie与session最简单的区别:cookie是存在客户端即浏览器端的,session是存储在服务器端的。作者最近在实习当中使用到了session和cookie,有一点小感触,记录下来与大家一起学习。 主要内容是分为传统serv...

2017-08-05 10:59:37

阅读数 1678

评论数 1

原创 重写hashcode和equal方法让HashMap与HashSet更强大

最近,在进行编程的时候,对于hashmap中的Key与Value总是有些疑问,今天写这个博客来加深一下理解。 相信大家对简单的hashmap和hashset的使用都有些基础了,HashMap<k,v>中大都是Java基础类型的包装类,比如String,Integer,Byte,Cha...

2017-04-26 12:50:56

阅读数 691

评论数 1

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