外存

知之为知之,不知本文知——操作系统超详解说

会有一股神秘感。 提交于 2020-08-19 16:21:04
基础知识 操作系统 操作系统(Operation System, OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 操作系统是计算机系统资源的管理者: 处理机管理 存储器管理 设备管理 文件管理 操作系统是用户与计算机硬件系统之间的接口,同时也是计算机硬件和其他软件的接口: 命令接口 程序接口 功能: 管理计算机系统的硬件、软件及数据资源; 控制程序运行; 改善人机界面; 为其他应用软件提供支持,让计算机系统所有资源最大限度地发挥作用; 提供各种形式的用户界面,使用户有一个好的工作环境; 为其他软件的开发提供必要的服务和相应的接口等。 特征: 并发:两个或者多个事件在同一时间间隔内发生; 共享:系统中的资源可供内存中多个并发执行的进程共同使用; 虚拟:把一个物理上的实体变为若干个逻辑上的对应物; 异步:在多道程序环境下,允许多个程序并发执行,但因资源有限,进程的执行不是一贯到底,而是走走停停,以不可预知的速度向前推送,这就是进程的异步性。 基本概念 互斥:进程之间访问临界资源时相互排斥的现象; 临界资源:一次仅允许一个进程使用的资源,如 打印机。 临界区:每个进程中访问临界资源的那段代码。 并发:同一时间段有几个程序都处于已经启动到运行完毕之间,并且这几个程序都在同一个处理机上运行

用户数据库不给开放存储过程写权限了,以前的报表都是存储过程后面写好的,这可咋办?

喜你入骨 提交于 2020-08-18 08:49:36
那就不能再用存储过程了,得快点找替代方案。 原来存储过程是“不得不用”,因为前端的报表工具不具备复杂计算能力,而为报表准备数据的逻辑又很复杂,用存储过程方便些。 但存储过程的缺点实在太多,除了不好调试,没法扩展,无法移植,还容易造成报表应用跟数据库的高耦合,改报表就得去数据库里创建 / 修改存储过程。估计用户也是因为这个禁止使用存储过程了。 一个方案是:用 JAVA 硬编码来做复杂计算,然后给报表做呈现;但这种做法的复杂度太高了,对于报表开发来说就要很多高级程序员参与才行,不太划算。 比较好的选择是使用带脚本计算能力的报表工具,在报表里就直接搞定原来存储过程的那些计算(库外存储过程),而且相对简单,原来的报表开发人员就都能搞定。 画了一个简图,可以感受一下: 新型报表应用结构中,存储过程挪到库外做了以后,数据库还是要承担一点计算任务的,比如过滤、分组之类,主要是为了减少取数的 IO 消耗。 另外,新型结构的“存储过程”支持异构库或外部数据混合计算,比原来数据库的存储过程功能还扩展了。 这里详细介绍了带脚本计算能力的报表工具如何完成库外存储过程,供参考: 怎样减少报表开发中对存储过程的依赖 来源: oschina 链接: https://my.oschina.net/u/3651044/blog/4319472

我在阿里写代码学会的六件事

邮差的信 提交于 2020-08-18 07:30:28
写了多年的代码,始终觉得如何写出干净优雅的代码并不是一件容易的事情。按 10000 小时刻意训练的定理,假设每天 8 小时,一个月 20 天,一年 12 个月,大概也需要 5 年左右的时间成为大师。其实我们每天的工作中真正用于写代码的时间不可能有 8 个小时,并且很多时候是在完成任务,在业务压力很大的时候,可能想要达到的目标是如何尽快的使得功能 work 起来,代码是否干净优雅非常可能没有能放在第一优先级上,而是怎么快怎么来。 在这样的情况下是非常容易欠下技术债的,时间长了,这样的代码基本上无法维护,只能推倒重来,这个成本是非常高的。欠债要还,只是迟早的问题,并且等到要还的时候还要赔上额外的不菲的利息。还债的有可能是自己,也有可能是后来的继任者,但都是团队在还债。所以从团队的角度来看,写好代码是一件非常有必要的事情。如何写出干净优雅的代码是个很困难的课题,我没有找到万能的 solution,更多的是一些 trade off,可以稍微讨论一下。 代码是写给人看的还是写给机器看的? 在大部分的情况下我会认为代码是写给人看的。虽然代码最后的执行者是机器,但是实际上代码更多的时候是给人看的。我们来看看一段代码的生命周期:开发 --> 单元测试 --> Code Review --> 功能测试 --> 性能测试 --> 上线 --> 运维、Bug 修复 --> 测试上线 --> 退休下线

深入了解机器学习决策树模型——C4.5算法

可紊 提交于 2020-08-17 18:26:58
云栖号资讯:【 点击查看更多行业资讯 】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 之前介绍了一种最简单构造决策树的方法——ID3算法,也就是每次选择一个特征进行拆分数据。这个特征有多少个取值那么就划分出多少个分叉,整个建树的过程非常简单。 如果你还不会决策树,那你一定要进来看看 既然我们已经有了ID3算法可以实现决策树,那么为什么还需要新的算法?显然一定是做出了一些优化或者是进行了一些改进,不然新算法显然是没有意义的。所以在我们学习新的算法之前,需要先搞明白,究竟做出了什么改进,为什么要做出这些改进。 一般来说,改进都是基于缺点和不足的,所以我们先来看看ID3算法的一些问题。 其中最大的问题很明显,就是它无法处理连续性的特征。不能处理的原因也很简单,因为ID3在每次在切分数据的时候,选择的不是一个特征的取值,而是一个具体的特征。这个特征下有多少种取值就会产生多少个分叉,如果使用连续性特征的话,比如说我们把西瓜的直径作为特征的话。那么理论上来说每个西瓜的直径都是不同的,这样的数据丢进ID3算法当中就会产生和样本数量相同的分叉,这显然是没有意义的。 其实还有一个问题,藏得会比较深一点,是关于信息增益的。我们用划分前后的信息熵的差作为信息增益,然后我们选择带来最大信息增益的划分。这里就有一个问题了,这会导致模型在选择的时候,倾向于选择分叉比较多的特征。极端情况下

我在阿里写代码学会的六件事

醉酒当歌 提交于 2020-08-17 15:47:46
写了多年的代码,始终觉得如何写出干净优雅的代码并不是一件容易的事情。按 10000 小时刻意训练的定理,假设每天 8 小时,一个月 20 天,一年 12 个月,大概也需要 5 年左右的时间成为大师。其实我们每天的工作中真正用于写代码的时间不可能有 8 个小时,并且很多时候是在完成任务,在业务压力很大的时候,可能想要达到的目标是如何尽快的使得功能 work 起来,代码是否干净优雅非常可能没有能放在第一优先级上,而是怎么快怎么来。 在这样的情况下是非常容易欠下技术债的,时间长了,这样的代码基本上无法维护,只能推倒重来,这个成本是非常高的。欠债要还,只是迟早的问题,并且等到要还的时候还要赔上额外的不菲的利息。还债的有可能是自己,也有可能是后来的继任者,但都是团队在还债。所以从团队的角度来看,写好代码是一件非常有必要的事情。如何写出干净优雅的代码是个很困难的课题,我没有找到万能的 solution,更多的是一些 trade off,可以稍微讨论一下。 代码是写给人看的还是写给机器看的? 在大部分的情况下我会认为代码是写给人看的。虽然代码最后的执行者是机器,但是实际上代码更多的时候是给人看的。我们来看看一段代码的生命周期:开发 --> 单元测试 --> Code Review --> 功能测试 --> 性能测试 --> 上线 --> 运维、Bug 修复 --> 测试上线 --> 退休下线

系统架构设计笔记(59)嵌入式系统的组成

非 Y 不嫁゛ 提交于 2020-08-17 05:40:54
嵌入式系统一般都由软件和硬件两个部分组成,其中嵌入式处理器 、 存储器和外部设备构成整个系统的硬件基础。 嵌入式系统的软件部分可以分为3个层次:系统软件 、 应用支撑软件和应用软件。其中,系统软件和支撑软件是基础,应用软件则是最能体现整个嵌入式系统的特点和功能的部分。 1 硬件架构 图 1 是一个嵌入式系统的基本硬件架构。微处理器是整个嵌入式系统的核心,负责控制系统的执行。外部设备是嵌入式系统同外界交互的通道,常见的外部设备有 Flash 存储器 、 键盘 、 输入笔 、 触摸屏 、 液晶显示器等输入 / 输出设备,在很多嵌入式系统中还有与系统用途紧密相关的各种专用外设。 嵌入式系统中经常使用的存储器有3种类型:RAM 、 ROM( Read-Only Memory ,只读内存)和混合存储器。系统的存储器用于存放系统的程序代码 、 数据和系统运行的结果。 1.1 嵌入式处理器 嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前世界上嵌入式处理器的种类已经超过了 1000 种,比较流行的也有 30 几个系列。根据目前的使用情况,嵌入式处理器可以分为如下几类: (1)嵌入式微处理器 嵌入式微处理器( Embedded Micro Processing Unit , EMPU )是由通用计算机中的 CPU 演变而来。嵌入式微处理器在功能上跟普通的微处理器基本一致

为个人PC安装内存条

ぐ巨炮叔叔 提交于 2020-08-16 16:44:48
CONTENTS WHAT IS RAM HOW TO INSTALL AND THEN 目录只是唬人滴,其实这就是一篇非常简单滴教程,为了让 Jun 同学顺利完成内存条安装,外加一点点的小知识,下面入正文。 WHAT IS RAM 关于电脑,我们平时经常提到什么硬盘、机械、固态、内存、外存、寄存器、缓存之类的,那么我们首先做一个简单地区分叭。 硬盘: 平时听到的以128G、256G、512G、1T或更大为容量的一般指的就是硬盘(外存)(ROM,Read-Only-Memory,即只读存储器),分为机械硬盘(HDD)和固态硬盘(SSD),固态读取速度要快机械硬盘很多倍,而我们电脑中的及各分区(比如C盘,D盘等)就是对硬盘的划分,一般C盘为系统盘,所以如果更换了系统硬盘为固态,就提高了开机时加载各类启动项的速度,进而加快开机速度,另外还可加快一切与硬盘之间涉及存取操作的速度,这个等我回去把那块固态寄给你。 内存: 平时听到的以2G、4G、8G、16G或更大等为容量的一般指的就是内存(RAM,Random-Access-Memory,即随机访问存储器)。和外存(ROM)的主要区别在于,外存断电数据不丢失(想想你的U盘或者手机里的照片,断电数据还存在),而内存断电数据丢失,这也就说明了其实内存只在电脑工作的时候才会进行存取工作,而你工作的负载会对内存的容量(带宽)提出一定的要求,比如

八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)

好久不见. 提交于 2020-08-16 12:40:43
一、分类 1.内部排序和外部排序  内部排序 :待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程。 外部排序 :待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。 2.比较类排序和非比较排序 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 二、复杂度分析,算法稳定性和适用场景 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 三、八大排序算法详解 1.选择排序 1.1 动图演示 1.2 思路分析 1. 第一个跟后面的所有数相比, 如果小于(或小于)第一个数的时候,暂存较小数的下标,第一趟结束后,将第一个数,与暂存的那个最小数进行交换,第一个数就是最小(或最大的数) 2. 下标移到第二位,第二个数跟后面的所有数相比,一趟下来,确定第二小(或第二大

Java基础之IO流

妖精的绣舞 提交于 2020-08-15 03:08:33
Java IO 一、什么是IO? Java中I/O操作主要是指使用Java进行输入,输出操作.。Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示数据源的对象都会提供以数据流的方式读写它的数据的方法。 IO又分为流IO(java.io)和块IO(java.nio) 流IO的好处是简单易用,缺点是效率较低;块IO效率很高,但编程比较复杂。 二、流IO 在电脑上的数据有三种存储方式,一种是外存,一种是内存,一种是缓存。比如电脑上的硬盘,磁盘,U盘等都是外存,在电脑上有内存条,缓存是在CPU里面的。外存的存储量最大,其次是内存,最后是缓存,但是外存的数据的读取最慢,其次是内存,缓存最快。这里总结从外存读取数据到内存以及将数据从内存写到外存中。对于内存和外存的理解,我们可以简单的理解为容器,即外存是一个容器,内存又是另外一个容器。那又怎样把放在外存这个容器内的数据读取到内存这个容器以及怎么把内存这个容器里的数据存到外存中呢? 1、IO的分类 1)根据流向分为输入流和输出流: 输出:把程序(内存)中的内容输出到磁盘、光盘等存储设备中; 输入:读取外部数据(磁盘、光盘等存储设备的数据)到程序(内存)中。 2)根据传输数据单位分为字节流和字符流: 字节流:数据流中最小的数据单元是字节 ;

QingStor 对象存储架构设计及最佳实践

送分小仙女□ 提交于 2020-08-14 08:48:09
对象存储概念及特性 在介绍 QingStor®️对象存储内部的的架构和设计原理之前,我们首先来了解一下对象存储的概念,也就是从外部视角看,对象存储有什么特性,我们应该如何使用。 对象存储本质上是一款存储产品,与其他的存储,如文件存储、块存储,功能是类似的,主要的功能都是数据的读和写。最大的不同在于对象存储是把数据作为对象进行管理,这是它最主要的特征,所有的数据在这里面都当做一个对象处理。 对象存储有一些非常鲜明的特点: 它的结构是扁平的,不像文件存储那样有目录层级,在读写数据时不需要对目录进行层层查找和打开。 对象存储具备海量数据存储的能力,这里的海量指的是不仅仅是几百 GB 的量,而是说几百 T 甚至上 PB 的级别。 对象存储适用于非结构化数据的存储,非结构化具体指的是不对数据的类型和格式做任何假设,不管是简单的文本,还是图片、视频、音频都可以存在对象存储里,当做对象来处理。 对象存储通过 Restful 接口对外提供服务,也就是 HTTP 协议,这使得对象存储的访问非常方便,随时随地可以进行数据的上传和下载。 QingStor®️对象存储核心优势 ![0_1591683403636_1.png]( https://community.qingcloud.com/assets/uploads/files/1591683404995-1-resized.png