0%

一、索引的原理

说白了,索引问题就是一个查找问题。数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。
为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

上图展示了一种可能的索引方式。左边是数据表,一共有两列七条记录,最左边的是数据记录的物理地址(注意逻辑上相邻的记录在磁盘上也并不是一定物理相邻的)。为了加快Col2的查找,可以维护一个右边所示的二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在O(\(\log _{2}n\) )的复杂度内获取到相应数据。

阅读全文 »

1、进程

进程的出现是为了更好的利用CPU资源使到并发成为可能。 假设有两个任务A和B,当A遇到IO操作,CPU默默的等待任务A读取完操作再去执行任务B,这样无疑是对CPU资源的极大的浪费。聪明的老大们就在想若在任务A读取数据时,让任务B执行,当任务A读取完数据后,再切换到任务A执行。注意关键字切换,自然是切换,那么这就涉及到了状态的保存,状态的恢复,加上任务A与任务B所需要的系统资源(内存,硬盘,键盘等等)是不一样的。自然而然的就需要有一个东西去记录任务A和任务B分别需要什么资源,怎样去识别任务A和任务B等等。登登登,进程就被发明出来了。通过进程来分配系统资源,标识任务。如何分配CPU去执行进程称之为调度,进程状态的记录,恢复,切换称之为上下文切换。进程是系统资源分配的最小单位,进程占用的资源有:地址空间,全局变量,文件描述符,各种硬件等等资源。

2、线程

线程的出现是为了降低上下文切换的消耗,提高系统的并发性,并突破一个进程只能干一样事的缺陷,使到进程内并发成为可能。假设,一个文本程序,需要接受键盘输入,将内容显示在屏幕上,还需要保存信息到硬盘中。若只有一个进程,势必造成同一时间只能干一样事的尴尬(当保存时,就不能通过键盘输入内容)。若有多个进程,每个进程负责一个任务,进程A负责接收键盘输入的任务,进程B负责将内容显示在屏幕上的任务,进程C负责保存内容到硬盘中的任务。这里进程A,B,C间的协作涉及到了进程通信问题,而且有共同都需要拥有的东西-------文本内容,不停的切换造成性能上的损失。若有一种机制,可以使任务A,B,C共享资源,这样上下文切换所需要保存和恢复的内容就少了,同时又可以减少通信所带来的性能损耗,那就好了。是的,这种机制就是线程。线程共享进程的大部分资源,并参与CPU的调度, 当然线程自己也是拥有自己的资源的,例如,栈,寄存器等等。 此时,进程同时也是线程的容器。线程也是有着自己的缺陷的,例如健壮性差,若一个线程挂掉了,整一个进程也挂掉了,这意味着其它线程也挂掉了,进程却没有这个问题,一个进程挂掉,另外的进程还是活着。

阅读全文 »

1.定义介绍

(1).XML定义

扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。

(2).JSON定义

JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。
JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。

阅读全文 »

KV-存储 之 Hash算法

散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

常见hash算法的原理:
散列表,它是基于高速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构能够理解为一个线性表,可是当中的元素不是紧密排列的,而是可能存在空隙。

阅读全文 »

少量数据存储,高速读写访问。此类产品通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景。
详细资料请参考以下网页链接: Redis应用场景

  • 排行榜的一种常见变体模式就像Reddit或Hacker News用的那样,新闻按照类似下面的公式根据得分来排序:score = points / time^alpha ;因此用户的投票会相应的把新闻挖出来,但时间会按照一定的指数将新闻埋下去。下面是我们的模式,当然算法由你决定。

1.您在工作过程中是否使用过内存数据库?您对内存数据库有哪些使用心得和印象?

答:有了解过SAP HANA,还没有使用过。不过未来应该是趋势了,迟早用得上。

2.SAP HANA和OracleTimesTen是内存数据库的两大巨头,您认为它们各自都有哪些优缺点,两者哪个更胜一筹?

TimesTen优势
  ·能够和Oracle后台数据库做无缝集成,数据可以在TimesTen和Oracle直接双向流动,可以做到实时;
  ·TimesTen可以做成多节点并行提供服务的模式,数据在多个TimesTen之间直接实现实时或者非实时的传输, 进一步提高了系统的扩展性和可靠性;
  ·符合RDBMS标准的独立内存数据库服务;
  ·支持SQL92;
  ·支持 ODBC & JDBC;
  ·高性能;
  ·可以作为Oracle数据库的前端Cache,目前不支持其他数据库;
  ·支持本地的高速访问和网络访问方式可靠性高。支持完整日志,支持镜像复制功能。

阅读全文 »

另外的参考资料可以点击:算法的时间复杂度和空间复杂度-总结

排序法

1、时间复杂度

(1)时间频度

一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。

阅读全文 »

平时在一些数据处理中(特别是统计学中),经常会把原始数据取对数后进一步处理。
之所以这样做是基于对数函数在其定义域内是单调增函数,取对数后不会改变数据的相对关系,取对数作用主要有:

1. 缩小数据的绝对数值,方便计算。
例如,每个数据项的值都很大,许多这样的值进行计算可能对超过常用数据类型的取值范围,这时取对数,就把数值缩小了,例如TF-IDF计算时,由于在大规模语料库中,很多词的频率是非常大的数字。
2. 取对数后,可以将乘法计算转换称加法计算。

阅读全文 »

画个图解释清晰一点:

1、首先,开源浏览器一般以8k每块下载html页面。
2、然后解析页面生成DOM树,遇到css标签或JS脚本标签就新起线程去下载他们,并继续构建DOM。
3、下载完后解析CSS为CSS规则树,浏览器结合CSS规则树和DOM树生成Render Tree。
注意:构建CSS Object Model(CSSOM)会阻塞JavaScript的执行。JavaScript的执行也会阻塞DOM的构建。
JavaScript下载后可以通过DOM API修改DOM,通过CSSOM API修改样式作用域Render Tree。
每次修改会造成Render Tree的重新布局和重绘。只要修改DOM或修改了元素的形状或大小,就会触发Reflow,单纯修改元素的颜色只需Repaint一下(调用操作系统Native GUI的API绘制)。

马斯洛的需求层次理论(英语:Maslow's hierarchy of needs)是亚伯拉罕·马斯洛于1943年《心理学评论》的论文〈人类动机的理论〉(A Theory of Human Motivation)中所提出的理论。马斯洛随后延伸了这个想法,包含了他对人类天生好奇心的观察。他的理论与其他人类发展心理学的理论可以并行,尤其是针对人类成长阶段的描述。马斯洛使用了“生理”、“安全”、“隶属”与“爱”、“自尊”、“自我实现”与“自我超越”等术语,描述人类动机推移的脉络。
马斯洛研究了他所谓的模范人物,包含了阿尔伯特·爱因斯坦、简·亚当斯、埃莉诺·罗斯福与弗雷德里克·道格拉斯,不研究有精神病或神经症的人,写下“对于残废、发育不良、不成熟与不健康的个案研究,将只会产生一种残缺的心理学与哲学。”马斯洛研究了大学学生人口中前1%的最健康个案。
马斯洛的理论在他于1954年的书籍著作《动机与个性》(Motivation and Personality)当中完整阐述。这种分层结构仍然是社会学研究、管理培训以及中等与高等教育心理课程的流行架构。
中国的管仲在西方的马斯洛之前两千多年提出类似主张。他说:“仓廪(lǐn)实而知礼节,衣食足而知荣辱。”

马斯洛的需求层次理论,以金字塔图像呈现,基本需求最强的在最底部。

阅读全文 »