03 2020 档案

指令和运算 - 编译、链接和装载之程序装载:640K内存真的不够用么
摘要:指令和运算 编译、链接和装载之程序装载:640K内存真的不够用么 [toc] 计算机组成原理目录: 在前面几节中,我们已经知道高级语言通过编译、链表生成可执行文件,但这个可执行文件只有先被加载到内存中,才能被 CPU 执行。但问题是内存是有限的,如何加载越来越多的程序呢? 比尔·盖茨在上世纪 80 阅读全文

posted @ 2020-03-31 12:34 binarylei 阅读(465) 评论(0) 推荐(1) 编辑

指令和运算 - 编译、链接和装载之静态链接:代码复用成为可能
摘要:指令和运算 编译、链接和装载之静态链接:代码复用成为可能 [toc] 计算机组成原理目录: 在第一小节中,我们分析了高级语言通过编译和汇编后,最终翻译成计算机指令。之后的两个小节,我们又知道 CPU 是如何执行计算机指令,包括指令跳转和函数调用的实现原理。我们知道编译、链接和装载是程序执行的必不可少 阅读全文

posted @ 2020-03-31 10:58 binarylei 阅读(507) 评论(0) 推荐(0) 编辑

指令和运算 - 指令执行之函数调用:函数调用和递归调用是怎么实现的
摘要:指令和运算 指令执行之函数调用:函数调用和递归调用是怎么实现的 [toc] 计算机组成原理目录: 1. 为什么我们需要程序栈 1.1 示例 同样编译一下 function_example.c 文件后,使用 objdump 查看汇编指令: 我们把这个程序编译之后,objdump 出来。我们来看一看对应 阅读全文

posted @ 2020-03-31 10:46 binarylei 阅读(898) 评论(0) 推荐(0) 编辑

指令和运算 - 指令执行之指令跳转:条件分支和循环语句是怎么实现的
摘要:指令和运算 指令执行之指令跳转:条件分支和循环语句是怎么实现的 [toc] 计算机组成原理目录: 在上一节中,我们分析了高级语言是如何翻译成计算机指令,本节内容则是分析 CPU 是如何执行这些计算机指令的。除了最简单的顺序执行外,指令跳转是如何实现的呢? 1. CPU 是如何执行计算机指令 现代 I 阅读全文

posted @ 2020-03-31 10:45 binarylei 阅读(2212) 评论(0) 推荐(0) 编辑

指令和运算 - 计算机指令:高级语言是如何翻译成计算机指令
摘要:指令和运算 计算机指令:高级语言是如何翻译成计算机指令 [toc] 计算机组成原理目录: 本小节聚焦在高级语言是如何翻译成机器码,以及机器码的格式。之后的两小节则深入讲解 CPU 如何执行条件、循环、函数、递归这些完整的语句。 1. 机器码 vs 计算机指令 计算机只认知 "0" 和 "1",那我们 阅读全文

posted @ 2020-03-31 09:55 binarylei 阅读(2955) 评论(1) 推荐(1) 编辑

计算机组成 - 性能指标:通过 CPU主频谈谈性能究竟是什么
摘要:计算机组成 性能指标:通过 CPU主频谈谈性能究竟是什么 [toc] 计算机组成原理目录: 1. 性能 = 1 / 响应时间 响应时间(Response time)或者叫执行时间(Execution time) 吞吐率(Throughput)或者带宽(Bandwidth) 2. 计算机的计时单位:C 阅读全文

posted @ 2020-03-31 09:44 binarylei 阅读(3808) 评论(0) 推荐(0) 编辑

计算机组成 - 冯·诺依曼体系结构
摘要:计算机组成 冯·诺依曼体系结构 [toc] 计算机组成原理目录: 计算机组成原理在整个计算机课程中的地位如下图所示: 图1:计算机体系结构 计算机组成原理这门课会围绕冯·诺依曼体系的五大组成部分展开,分别介绍运算器、控制器、存储器、输入设备和输出设备。 1. 冯·诺依曼体系结构 冯·诺依曼体系结构( 阅读全文

posted @ 2020-03-31 09:42 binarylei 阅读(3543) 评论(0) 推荐(0) 编辑

存储器 - I/O 性能指标:如何理解 IOPS
摘要:存储器 I/O 性能指标:如何理解 IOPS [toc] 计算机组成原理目录: 1. I/O 性能指标 IO 性能、顺序访问和随机访问如果去看硬盘厂商的性能报告,通常会看到以下指标。 1. 响应时间(Response Time):程序发起一个硬盘的写入请求,直到这个请求返回的时间。 2. 数据传输率 阅读全文

posted @ 2020-03-31 09:40 binarylei 阅读(2543) 评论(0) 推荐(0) 编辑

存储器 - 总线:计算机内部的高速公路
摘要:存储器 总线:计算机内部的高速公路 [toc] 计算机组成原理目录: 本文主要梳理计算机里不同的组件之间的通信问题,也就是总线机制。总线的设计思路,核心是为了减少多个模块之间交互的复杂性和耦合度。实际上,事件总线是一个常见的设计模式,通常事件总线也会和订阅者发布者模式结合起来,成为大型系统的各个松耦 阅读全文

posted @ 2020-03-30 20:24 binarylei 阅读(1090) 评论(0) 推荐(1) 编辑

存储器 - 内存:程序的虚拟内存是如何映射到物理内存
摘要:存储器 内存:程序的虚拟内存是如何映射到物理内存 [toc] 计算机组成原理目录: 程序运行时,指令和数据都需要先加载到内存里面,才会被 CPU 拿去执行。那程序中的虚拟地址最终是如何映射到内存中的物理地址呢?从简单页表,到多级页表,再到 TLB,都解决了那些问题? 1. 简单页表:类似数组,时间复 阅读全文

posted @ 2020-03-30 20:22 binarylei 阅读(7306) 评论(1) 推荐(6) 编辑

存储器 - 缓存一致性 MESI 协议:如何让多核CPU的高速缓存保持一致
摘要:存储器 缓存一致性 MESI 协议:如何让多核CPU的高速缓存保持一致 [toc] 计算机组成原理目录: 在上一篇 "存储器 高速缓存(CPU Cache):为什么要使用高速缓存" 中,我们分析了高速缓存(CPU Cache) 的数据结构,及如何进行读写操作。在写操作时,可以通过使用写回策略替换直接 阅读全文

posted @ 2020-03-29 08:01 binarylei 阅读(1967) 评论(0) 推荐(1) 编辑

存储器 - 高速缓存(CPU Cache):为什么要使用高速缓存
摘要:存储器 高速缓存(CPU Cache):为什么要使用高速缓存? [toc] 计算机组成原理目录: 1. 为什么需要高速缓存 CPU 和内存访问性能的差距非常大。如今,一次内存的访问,大约需要 120 个 CPU Cycle。这也意味着,在今天,CPU 和内存的访问速度已经有了 120 倍的差距。 C 阅读全文

posted @ 2020-03-28 19:43 binarylei 阅读(8980) 评论(2) 推荐(3) 编辑

存储器 - 金字塔层次结构:越靠近CPU速度越快,容量越小,价格越贵
摘要:存储器 金字塔层次结构:越靠近CPU速度越快,容量越小,价格越贵 [toc] 计算机组成原理目录: 1. 金字塔层次结构 现代计算机的存储设备一般有 Cache、内存、HDD(SSD) 硬盘。这些存储设备越靠近 CPU 速度越快,容量越小,价格越贵。 寄存器(Register):寄存器与其说是存储器 阅读全文

posted @ 2020-03-28 19:40 binarylei 阅读(11682) 评论(1) 推荐(3) 编辑

计算机组成原理目录
摘要:计算机组成原理目录 本文是极客时间 "《深入浅出计算机组成原理》" 的学习笔记,感兴趣的可以订阅正版。 1. [基础概念] [1.0 计算机组成原理怎么学] "1.1 计算机组成 冯·诺依曼体系结构" "1.2 计算机组成 性能指标:通过 CPU主频谈谈性能究竟是什么" 2. [指令和运算] "2. 阅读全文

posted @ 2020-03-28 08:04 binarylei 阅读(1953) 评论(0) 推荐(1) 编辑

锁原理 - AQS 源码分析:有了 synchronized 为什么还要重复造轮子
摘要:锁原理 AQS 源码分析:有了 synchronized 为什么还要重复造轮子 [toc] 并发编程之美系列目录: 在前两篇文章中,我们主要是分析在并发编程问题上,计算机硬件、操作系统和编程语言分别提供了那些支持: 1. 计算机硬件: CAS 原子操作是基于已有的状态更新成另一个状态,如 count 阅读全文

posted @ 2020-03-23 21:20 binarylei 阅读(3507) 评论(2) 推荐(1) 编辑

锁原理 - 信号量 vs 管程:JDK 为什么选择管程
摘要:锁原理 信号量 vs 管程:JDK 为什么选择管程 [toc] 并发编程之美系列目录: 管程和信号量都能解决并发问题,它们是等价的。所谓等价指的是用管程能够实现信号量,也能用信号量实现管程。但是管程在信号量的基础上提供条件同步,使用更容易,所以 Java 采用的是管程技术。synchronized 阅读全文

posted @ 2020-03-22 08:29 binarylei 阅读(7897) 评论(4) 推荐(10) 编辑

并发编程 - 可见性、原子性和有序性问题:并发编程 Bug 的源头
摘要:并发编程 可见性、原子性和有序性问题:并发编程 Bug 的源头 [toc] 并发编程之美系列目录: 本文是并发编程的第一篇,主要介绍为什么需要并发编程,同时分析并发编程问题的根本原因 可见性、原子性和有序性三个方面。下一章我们会继续分析 JVM 是如何解决这三个问题。 1. 并发程序幕后的故事 为什 阅读全文

posted @ 2020-03-20 18:38 binarylei 阅读(564) 评论(0) 推荐(0) 编辑

Java 算法 - 跳表:为什么 Redis 一定要用跳表来实现有序集合
摘要:Java 算法 跳表:为什么 Redis 一定要用跳表来实现有序集合? [toc] __数据结构与算法之美目录()__ 推荐文章: √《 "Skip Lists: A Probabilistic Alternative to Balanced Trees" 》 "【Redis 源码分析 skipli 阅读全文

posted @ 2020-03-13 09:58 binarylei 阅读(1621) 评论(0) 推荐(0) 编辑

Java 数据结构 - HashMap 源码解读:如何设计工业级的散列表
摘要:Java 数据结构 HashMap 源码解读:如何设计工业级的散列表 [toc] __数据结构与算法目录()__ 在 "Java 数据结构 散列表原理" 一文中,提到评价一个散列表的标准有三个:散列函数、散列冲突、加载因子(动态扩容)三个指标。那像 HashMap 这样工业级的散列表应该具有哪些特性 阅读全文

posted @ 2020-03-10 13:23 binarylei 阅读(457) 评论(0) 推荐(0) 编辑

Java数据结构 - 散列表原理
摘要:Java数据结构 散列表原理 [toc] __数据结构与算法目录()__ 散列表(Hash table) 也叫哈希表,借助散列函数对数组进行扩展,利用的是数组支持按照下标随机访问元素的特性。散列表两个核心问题是散列函数和散列冲突。散列函数有 MD5、SHA、CRC 等哈希算法。散列冲突开放寻址法和链 阅读全文

posted @ 2020-03-07 09:56 binarylei 阅读(862) 评论(1) 推荐(0) 编辑

Java 算法 - 二分法查找
摘要:Java 算法 二分法查找 [toc] __数据结构与算法之美目录()__ 二分法查找是一种非常高效的查找方式,时间复杂度为 O(logn)。 唐纳德·克努特(Donald E.Knuth)在《计算机程序设计艺术》的第 3 卷《排序和查找》中说到:"尽管第一个二分查找算法于 1946 年出现,然而第 阅读全文

posted @ 2020-03-06 15:32 binarylei 阅读(4226) 评论(0) 推荐(2) 编辑

Java 排序算法 - 线性排序:桶排序和基数排序
摘要:Java 排序算法 线性排序:桶排序和基数排序 [toc] __数据结构与算法目录()__ 前面我们介绍了时间复杂度分为 O(n2) 和 O(nlogn) 的排序算法,本文介绍的则是复杂度分为 O(n) 的排序算法:桶排序和基数排序。线性排序时间、空间复杂度分析起来也很简单,但是对要排序的数据要求很 阅读全文

posted @ 2020-03-06 15:27 binarylei 阅读(661) 评论(0) 推荐(0) 编辑

Java 排序算法 - 为什么快速排序要比归并排序更受欢迎呢?
摘要:Java 排序算法 为什么快速排序要比归并排序更受欢迎呢? [toc] __数据结构与算法目录()__ 上一节分析了冒泡排序、选择排序、插入排序这三种排序算法,它们的时间复杂度都是 O(n2),适合小规模数据排序。今天,本文继续分析两种时间复杂度为 O(nlogn) 的排序算法:归并排序和快速排序。 阅读全文

posted @ 2020-03-05 13:52 binarylei 阅读(4796) 评论(0) 推荐(0) 编辑

Java 排序算法 - 为什么插入排序要比冒泡排序更受欢迎呢
摘要:Java 排序算法 为什么插入排序要比冒泡排序更受欢迎呢 [toc] __数据结构与算法之美目录()__ 对于大多数程序员来说,我们学习的第一个算法,可能就是排序。大部分编程语言中,也都提供了排序函数。在平常的项目中,我们也经常会用到排序。排序算法太多了,有很多可能连名字都没听说过,比如猴子排序、睡 阅读全文

posted @ 2020-03-05 09:29 binarylei 阅读(1390) 评论(0) 推荐(0) 编辑

Java 算法 - 递归算法
摘要:Java 算法 递归算法 [toc] __数据结构与算法之美目录()__ 递归本质是借助栈的数据结构,加上一个简单的逻辑算法实现。 递归是一种应用非常广泛的算法,很多数据结构和算法都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等等。所以,搞懂递归非常重要,否则,后面复杂一些的数据结构和 阅读全文

posted @ 2020-03-03 21:07 binarylei 阅读(1406) 评论(0) 推荐(0) 编辑

Java 数据结构 - 队列
摘要:Java 数据结构 队列 [toc] __数据结构与算法目录()__ 我们今天要讲的数据结构是队列,比如 Java 线程池任务就是队列实现的。 1. 什么是队列 和栈一样,队列也是一种操作受限的线性结构。使用队列时,在一端插入元素,而在另一端删除元素。 1.1 队列的主要特性 队列中的数据元素遵守 阅读全文

posted @ 2020-03-03 17:51 binarylei 阅读(574) 评论(0) 推荐(0) 编辑

Java 数据结构 - 栈
摘要:Java 数据结构 栈 [toc] __数据结构与算法之美目录:__ 我们今天要讲的数据结构是栈,比如浏览器的前进后退功能就可以用栈来实现。 1. 什么是栈 栈是一种先进后出的线性存储结构,先进先出就是队列结构。 栈(stack)是限制插入和删除只能在一个位置上进行的线性表,该位置是表的末端,叫作栈 阅读全文

posted @ 2020-03-03 09:05 binarylei 阅读(499) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示