自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【《现代操作系统 第4版》】7、死锁

所谓死锁,就是一种"我手上拿着苹果,想要你手上的梨子,你手上拿着梨子,想要我手上的苹果"的僵持状态。资源大部分死锁都和资源有关。所谓资源就是需要排他性使用的对象。资源可以是硬件设备(如蓝光驱动器)或是一组信息(如数据库中一个加锁的记录)。通常在计算机中有多种(可获取的)资源。一些类型的资源会有若干个相同的实例,如三台蓝光驱动器。当某一资源有若干实例时,其中任何一个都可以用来满足对资源的请求。简单来说,资源就是随着时间的推移,必须能获得、使用以及释放的任何东西。资源的分类可抢占资源:可以从拥有

2020-08-07 01:41:01 1024

原创 【《现代操作系统 第4版》】6、进程间的通信之经典的IPC问题

哲学家就餐问题1965年,Dijkstra提出并解决了一个他称之为哲学家就餐的同步问题。这个问题可以简单地描述如下∶五个哲学家围坐在一张圆桌周围,每个哲学家面前都有一盘通心粉。由于通心粉很滑,所以需要两把叉子才能夹住。相邻两个盘子之间放有一把叉子。哲学家的动作包括思考和进餐,当一个哲学家觉得饿了时,他就试图分两次去取其左边和右边的叉子,每次拿一把,但不分次序。如果成功地得到了两把叉子,就开始吃饭,吃完后放下叉子继续思考。问∶能为每一个哲学家写一段描述其行为的程序,且决不会死锁吗?方案1#define

2020-08-05 11:52:02 365

原创 【《现代操作系统 第4版》】5、进程间的通信之同步

同步与互斥为了克服并发问题中的竞态条件引入了锁机制从而使得多个进程之间能够互斥的访问共享资源。而为了实现进程间的同步又引入了信号量和管程等模型。生产者-消费者问题有两个进程共享一个公共的固定大小的缓冲区。当生产者想要将数据写入缓冲区的时,如果缓冲区已满则让生产者睡眠,等到消费者从缓冲区中取出一个或多个数据项时再唤醒它。同样的,当消费者试图从缓冲区中取数据,如果缓冲区为空则消费者睡眠,等到生产者向其中放入一个新的数据再唤醒它。#define N 100 /* 缓冲区 slot 槽的数量 */

2020-08-04 23:39:50 485

原创 【《现代操作系统 第4版》】3、调度算法

当一个计算机是多道程序设计系统时,会频繁的有很多进程或者线程来同时竞争 CPU 时间片。当两个或两个以上的进程/线程处于就绪状态时,就会发生这种情况。如果只有一个 CPU 可用,那么必须选择接下来哪个进程/线程可以运行。操作系统中有一个叫做 调度程序(scheduler) 的角色存在,它就是做这件事儿的,该程序使用的算法叫做 调度算法(scheduling algorithm) 。尽管有一些不同,但许多适用于进程调度的处理方法同样也适用于线程调度。当内核管理线程的时候,调度通常会以线程级别发生,很少或者根

2020-07-28 06:57:23 1023

原创 【《现代操作系统 第4版》】4、进程间的通信之互斥

进程之间经常需要进行通信。进程间通信(Inter Process Communication,IPC)需要面临如下三个问题:一个进程如何把信息传递给另一个进程如何确保两个或更多的进程在关键活动中不会出现交叉比如两个进程为不同的客户视图争夺飞机上的最后一个座位如何确定程序正确的执行比如进程A产生数据而进程B打印数据,那么B在打印之前必须等待,直到A已经产生一些数据由于在不同地址空间进行通信的线程属于不同进程间的通信,所以除了第一个问题外,后两个问题在线程间的通信中也存在,它们的解决

2020-07-24 09:40:20 536

原创 【《现代操作系统 第4版》】2、进程与线程

进程进程是OS的核心概念,它是对正在运行程序的一个抽象。进程模型一个进程就是一个正在执行程序的实例,包括程序计数器、寄存器和变量的当前值。从概念上说,每个进程拥有它自己的虚拟CPU。真正的CPU在各进程间来回切换,这种快速切换称作多道程序设计。由于CPU在各进程之间来回快速切换,所以每个进程执行其运算的速度是不确定的。而且当同一进程再次运行时,其运算速度通常也不可再现。所以,在对进程编程时决不能对时序做任何想当然的假设。进程和程序间的区别是很微妙的,但非常重要。用一个比喻可以更容易理解这一点。想象

2020-07-24 09:39:34 306

原创 【Java多线程】01、Java线程的基本概念

进程与线程进程是程序运行的实例,是OS中进行资源分配和调度的基本单位。比如当启动QQ时,会将QQ相关的代码从磁盘加载至内存,这时就开启了一个进程。线程是执行调度的基本单位,进程中包含至少一个线程,同一个进程中的所有线程共享该进程中的资源。同步和异步同步和异步通常用来形容方法调用。同步方法一旦调用,调用者必须等待结果返回后才能继续后续的行为。类似去餐馆吃饭。异步方法一旦调用,不需要等待结果返回调用者可以继续后续的操作。异步方法调用更像是一个消息传递。如果异步调用需要返回结果,那么当该异步调用完

2020-06-07 18:42:45 163

原创 【Java程序员应该掌握的底层知识】 02 操作系统

OS的主要作用管理硬件管理应用内核内核是OS的核心,它管理着系统的各种资源。内核的作用内核的分类宏内核宏内核:kernel+一些高级的虚拟接口(控制硬件)简单的说,宏内核相当于一个是一个中央集权控制中心,把内存管理,文件管理等功能全部管理。PC上用的比较多,比如常见的windows、Linux。微内核微内核:提供操作系统核心功能的内核的精简版本,它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口。比如DOS、华为的鸿蒙。如嵌入式系统一样,可针对不同

2020-06-07 18:38:19 431 1

原创 【Java程序员应该掌握的底层知识】 01 硬件知识

适合人群:非科班或未阅读过相关书籍的从业者读书的原则不求甚解,观其大略。俗话说,“买书如山*倒,读书如抽丝”。计算机类的书籍都是砖头书,工作后如果从头到尾的仔细通读全书,不仅效率低下而且特别痛苦,还会慢慢地打击读书的积极性,往往半途而废。工作后读书,应该先快速的通读,大体读明白,了解轻重点。把对自己目前有用的东西先拿来用,用着用着,很多道理就明白了。然后再去读相关部分,往往会有醍醐灌顶的感觉。书籍推荐《编码:隐匿在计算机软硬件背后的语言》:基本上高中理科生就能理解《深入理解计算机系统》(.

2020-06-07 18:38:05 563

原创 【《计算机组成 结构化方法 第6版》】04、了解性章节(4、5、7)

2020-06-07 18:37:35 250

原创 【《计算机组成 结构化方法 第6版》】03、数字逻辑层

门和布尔代数这章写的行云流水,作为电子专业的科班,纯当复习了,虽然忘的也差不多了╮(╯▽╰)╭门数字电路只能表示两个逻辑值。一般用电压 0~0.5V 表示二进制的0,电压 1 ~ 1.5V 表示二进制的1。通常用门来表示这种电子设备,由二极管构成,门是所有数字计算机的硬件基础(如CPU和存储器)。布尔代数布尔代数是数字计算机的基础。通过布尔代数可以表示各种电路。任何一个电路都可以用真值表来表示:基本数字逻辑电路组合逻辑电路输出信号由输入信号的当前状态唯一确定的电路就是组合逻辑电

2020-06-07 18:37:06 700

原创 【《计算机组成 结构化方法 第6版》】02、计算机系统组成

数字计算机是由处理器、存储器和输入/输出设备组成的内部互连系统。处理器CPU:通过总线从主存储器中逐条进行取指令、分析指令和执行指令的过程来执行程序主要由控制器、算术逻辑单元(ALU) 和 寄存器组(Registers)构成控制器:负责从主储存器中取指令和确定指令类型ALU:完成如加法、逻辑等运算指令寄存器组:存放计算时的中间结果和一些控制信息;它们的容量都相同,可被CPU高速读写PC:程序计数器。存放下一条将被取出执行的指令IR:指令寄存器。存放当前正在执行的指令通过寄存器:存

2020-06-07 18:35:55 610

原创 【《计算机组成 结构化方法 第6版》】01、结构化计算机组成

1、新版变化链接: https://pan.baidu.com/s/15lD6PNs5iJmA3qZLqyrkPQ提取码: qbtj示例上的变化桌面计算机:Core i7(x86指令)移动计算:OMAP4430(ARM指令)嵌入式:ATmega168(AVR指令)汇编语言:80882、章节变化第2章:增加 GPU、Flash存储设备、触摸屏第3章:增加 FPGA第4章:内容没大的改变,只换了示例第5、6章:仅就新的示例体系结构所涉及的部分做了改写,增加了对 ARM

2020-06-07 18:35:32 1211

原创 Java8源码 java.lang 包 11、包装类总结

文章目录1、继承抽象父类 Number2、实现 Comparable 接口3、不可变性4、创建包装类对象5、类变量6、equals7、hashCode8、包装类与基本类型的转换9、字符串、包装类、基本类型之间的转换1、继承抽象父类 Number数值类型(byte、short、int、long、float、double)的包装类都继承抽象父类 Number 类,它实现了 Serializable...

2020-02-18 13:55:01 169

原创 Java8源码 java.lang 包 10、Long类

Long 类是基本类型 long 的包装类,有着很多和 Integer 类似的方法。同时提供了 long 和 String 之间互相转换的方法,以及很多处理 long 时非常有用的其他方法和常量。类的定义public final class Long extends Number implements Comparable<Long>同 Integer 。静态内部类 Long...

2020-02-17 16:07:30 240

原创 Java8源码 java.lang 包 11、Float类

文章目录类的定义成员变量类变量构造方法其他方法核心方法floatToIntBitsfloatToRawIntBitsintBitsToFloat重写 Object的方法equals(Object obj)hashCode()toString()float转字符串 toString(float f)字符串转float重写Number的方法数值判断是否是非数字 isNaN是否是无穷数 isInfini...

2020-02-17 15:32:33 518

原创 Java8源码 java.lang 包 09、Integer类

Integer 类是基本类型 int 的包装类,有着很多和 Byte、Short 类似的方法。同时提供了 int 和 String 之间互相转换的方法,以及很多处理 int 时非常有用的其他方法和常量。类的定义public final class Integer extends Number implements Comparable<Integer> 同 Byte、Short...

2020-02-16 22:14:56 662

原创 Java8源码 java.lang 包 06、Number类

抽象类 Number 是表示数值的类,它是 BigDecimal、BigInteger、Byte、 Short、Integer、Long 、Float、和 Double 的父类。它定义了各种的 xxxValue 方法,用于将数值对象转换为基本类型。如 intValue() 就是将数据转换为 int 类型。在进行转换时,由于每个基本类型的数据范围不一样,要注意范围越界、精度丢失等问题。比如 byt...

2020-02-16 09:37:53 165

原创 Java8源码 java.lang 包 08、Short类

文章目录概述类的定义静态内部类 ShortCache成员变量构造方法其他方法toString(short)parseByte(String s) 与 parseByte(String, int)valueOf(String) 与 valueOf(String, int)valueOf(short)重写父类的xxxValue()toString()hashCode()equals()compareT...

2020-02-15 22:09:05 196

原创 Java8源码 java.lang 包 07、Byte类

文章目录概述类的定义父类 Number静态内部类 ByteCache成员变量构造方法其他方法toString(byte)parseByte(String s) 与 parseByte(String, int)valueOf(String) 与 valueOf(String, int)valueOf(byte)重写父类的xxxValue()toString()hashCode()equals()co...

2020-02-15 21:47:37 247

原创 Java8源码 java.lang 包 05、Boolean类

文章目录概述类的定义成员变量构造方法Boolean(boolean value)Boolean(String s)其他方法parseBoolean(String)booleanValue()valueOf 系列toString 系列hashCode()equals(Object)getBoolean(String)比较布尔运算概述Boolean 类将基本类型 boolean 的值包装在一个对象...

2020-02-15 21:47:04 176

原创 Java8源码 java.lang 包 04、04.StringBuffer 和 StringBuilder

文章目录概述StringBuilder类的定义构造方法无参构造方法String参数构造方法int参数构造方法CharSequence参数构造方法其他方法writeObjectreadObjecttoString其他StringBuffer类的定义成员变量构造方法其他方法writeObjectreadObjecttoString实现 CharSequence 接口的方法重写的方法概述String...

2020-02-15 21:38:56 138

原创 Java8源码 java.lang 包 03、AbstractStringBuilder 类

文章目录概述类的定义成员变量构造方法常用方法实现CharSequence的方法length()charAt(int)subSequencegetValuecapacityensureCapacity逻辑总结trimToSizesetLengthgetCharsappend 系列deletedeleteCharAtreplacesubstringinsert 系列indexOflastIndexOf...

2020-02-15 21:10:10 163

原创 Java8源码 java.lang 包 02、String类

文章目录1、类的定义String 类CharSequence 接口2、成员变量String 为什么要设计成不可变类呢?常量池1)class 文件中的常量池2)运行时常量池3、构造方法1)利用字节数组来生成字符串不带编码带编码2)利用字符数组来生成字符串3)利用字符串来创建一个新的字符串4)利用 StringBuffer/StringBuilder 来创建一个新的字符串5)保护型构造方法4、其他方法...

2020-02-15 14:16:36 294

原创 Java8源码 java.lang 包 01、Object 类

文章目录概述equals()hashcode()toString()getClass()clone()finalize()wait、notify、notifyAll概述Object 类是类继承结构的根。它是每个类的顶级父类。所有对象(包括数组)都实现这个类的方法。Object 类中的方法如下:equals()public boolean equals(Object obj) { ...

2020-02-15 13:16:44 153

原创 开发工具: IDEA使用技巧

文章目录说明1. 隐藏 IDEA 的项目配置文件2. 常用默认快捷键3. 常用工具3.1 rest client工具3.2 SSH远程管理工具4.高效开发4.1 查找指令(Find Action)4.2 界面定位4.3 各种跳转4.3.1 项目之间的跳转4.3.2 文件之间的跳转1)查找最近打开的文件2)查找最近编辑过的文件3)跳转到上次修改的位置3)跳转到光标之前停留过的地方4)跳转到光标...

2020-02-14 00:26:02 566

原创 设计模式 01、uml与设计原则

文章目录1. UML1.1 类图1.1.1 属性1.1.2 方法1.2 类之间的关系1.2.1 关联(association)1.2.1.1 单向关联1.2.1.2 双向关联1.2.1.3 自关联1.2.1.4 多重性关联1.2.1.5 聚合(Aggregation)1.2.1.6 组合(Composition)1.2.2 依赖(Dependency)1.2.3 继承(Generalizatio...

2020-02-13 23:23:55 145

原创 开发工具:静态代码扫描工具sonarqube

文章目录1.准备环境2.配置2.1 配置sonarqube2.2 运行 sonarqube3.代码分析3.1 Analyzing with SonarQube Runner3.1.1 配置sonar-scanner3.1.2项目中配置3.2 Analyzing with Maven3.2.1 方式1:设置 maven3.2.2 方式2:添加插件4.在 idea 中使用 sonarLint4.1 打...

2020-02-13 23:12:51 912

原创 开发工具: git 13、使用二分法查找哪一次提交引入了线上bug

文章目录场景命令实战原理场景当线上有 bug 需要排查 bug 时,要最终定位到是哪个类的哪几行代码造成的这个 bug,此时就需要去看到底是哪一次提交的,是谁对这几行代码的修改造成了这次线上 bug,需要去定位责任人,发生时间等。如果是比较严重的 case,比如导致用户无法支付,给公司造成了500万的经济损失,这肯定是要追查谁是责任人的。命令#开始二分查找git bisect star...

2020-02-13 21:09:24 253

原创 开发工具: git 12、远程和本地同时撤回分支合并操作

文章目录git merge --abortgit reset --hard head^推送到远程仓库之后想要撤回衍生的问题总结git merge --abort使用场景:如果两个分支 merge 时出现了冲突,临时打算取消 mergegit reset --hard head^使用场景:如果仅仅是在本地完成了 merge 后想要撤回,可以直接将分支挪回 merge 之前的 commit推...

2020-02-13 21:04:17 1090

原创 开发工具: git 11、对本地刚做出的修改、暂存和提交进行撤回

文章目录场景回顾reset 撤回git reset --soft HEAD^git reset HEAD^git reset --hard HEAD^修改了工作区中的内容,同时放入了暂存区,但是还没提交git reset headgit reset --hard HEAD修改了工作区中的内容放入了暂存区且提交了场景如果你刚对工作区的代码进行了修改,或者将部分代码加入了暂存区,或者是提交了一个c...

2020-02-13 20:40:02 325

原创 开发工具: git 10、对本地不规范的提交历史进行修改和调整

文章目录1.对上一次commit的备注或者代码进行修改2.对上一次commit加入几行遗漏的代码3.对历史上的多个commit进行修改4.对几天前的commit加入代码5.删除commit以及调整commit的顺序6.将多个commit合并为一个commit7.将一个commit切分为多个commit1.对上一次commit的备注或者代码进行修改比如张三刚刚执行了一个不规范的commit备注...

2020-02-13 18:59:07 336

原创 开发工具: git 09、feature分支开发到一半时切换到bugfix分支

文章目录场景stash 保护现场stash 恢复现场方式一方式二方式三(暂存区)删除 stash注意事项场景线上在使用的用户突然发现系统或者 app 运行不正常了,比如说突然网站的商品显示不出来。用户通常会打电话给客服投诉,客服找到运营后,运营直接在缺陷跟踪系统上提工单(比如在 jira 上提一个 task),里面会写上详细的一些 bug 信息,包括什么时间,谁反馈,截图,如何复现等。随后这个...

2020-02-13 17:41:34 1422

原创 开发工具: git 08、将暂存区中的多个功能代码分成多次提交

文章目录场景实践场景如果某天下午张三家里突然有事回家了,忘了提交今天写好的那个部门管理的功能,第二天过来接着继续写代码完成了另外一个员工管理的功能,然后一下子 git add --all .,将昨天和今天写好的代码一起都放入暂存区突然,张三想到好像应该将这批代码分成两次提交,才能符合公司的规范啊!实践git add -i此时需要先执行r如上命令,进入交互式模式它会给你列出来当前...

2020-02-13 17:27:56 518

原创 开发工具: git 07、细粒度地比较不同分支之间差异

文章目录场景工作区和最近一次 commit 之间的差异最近两次 commit 之间差异查看2个分支之间的差异diff 的意义场景比如说我今天开发了一些代码,还没提交,或者是已经提交了,此时我希望看一下,确认一下今天跟昨天的代码之间的差异是什么?工作区和最近一次 commit 之间的差异# 显示工作区中的代码和仓库中最近一次 commit 的代码之间的差异git diff HEAD昨天...

2020-02-13 17:21:02 259

原创 开发工具: git 06、粗粒度地比较不同分支之间差异

文章目录1. 核心回顾2. git log 和 git reflog 的区别3.比较不同分支之间差了哪些 commit 还没有合并3.1 情景13.2 情景23.3 情景33.4 情景43.5 情景51. 核心回顾三个区域(三棵树):工作区,暂存区,仓库分支即指针:commit树无论在哪个分支上做开发和提交,都是在这个项目公共的一个commit树上在添加不同的commit,形...

2020-02-13 15:59:26 183

原创 开发工具: git 05、工作流之改进的GitFlow工作流

文章目录改进后的GitFlow工作流总结工作流总结改进后的GitFlow工作流GitFlow工作流如果多个版本频繁并行开发,此时完全参照 GitFlow 是不现实的。因为它会导致在 develop分支 里会混合多个版本的代码,同时在进行集成测试,如果一个版本先测试完,要先进入QA测试环节,是不可以直接基于 develop分支 去拉 release分支 的,因为 release分支 会混合多...

2020-02-13 15:30:21 312

原创 开发工具: git 04、工作流之经典的GitFlow工作流

文章目录GitFlow工作流1.创建项目,建立develop分支2.设置push/pull免密码3.创建develop分支4.创建特性分支,RD开始开发张三李四5.提交PR,发起CR张三李四6.基于develop分支的集成测试张三李四7.打tag上线8.线上出现bug9.GitFlow 工作流适用的场景是什么10.GtiFlow 工作流的不足之处在于什么GitFlow工作流1.创建项目,建立...

2020-02-13 15:04:31 353

原创 开发工具: git 03、工作流之功能分支工作流

文章目录适用场景本地开发推送远程适用场景面向内部的那种需求不是很频繁的内部系统,5人以内的项目。本地开发首先,在第2节的基础上张三和李四各先修改下代码并完成一次 commit。张三先拉取最新的代码 git pull origin master写代码提交到远程李四拉取最新的 master 分支写代码提交到远程张三拉取最新的 m...

2020-02-13 14:14:33 181

原创 开发工具: git 02、git分支

文章目录1. commit object与分支1.1 commit object1.2 分支2.实战模拟2.1 环境准备2.2 创建分支2.3 切换分支2.4 查看分支2.5 查看分支指向的commit object2.6 删除分支2.6 远程分支2.6.1 在码云上新建项目(仓库)2.6.2 添加公钥2.6.4 推送本地分支到远程仓库2.6.5 抓取远程分支新增的分支2.6.6 解决g...

2020-02-13 11:44:26 192

空空如也

空空如也

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

TA关注的人

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