自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Phoebe的专栏

退役后还是一个弱渣

  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 scala中的一切皆对象

scala中的一切皆对象单纯从面向对象的角度来看待scala,可以说scala就是一门纯面向对象的编程语言,因为在scala中,一切都可以看做是对象。这点和java是不同的,java中区分基本数据类型和引用类型。可以说scala比Java的面向对象理念还彻底!数字对象scala> 5210000 + 1 *1024 / 1res0: Int = 5211024scal

2018-01-31 12:24:20 631

原创 scala中的泛型编程

Scala中的泛型编程简介在Java或者C++里面,像列表(List)这些数据结构,在编写的时候,都不需要指定其中元素的类型,而是构造的时候指定,这一特性就称为泛型。同样,Scala中也提供了泛型,而且功能比Java的泛型更加强大。List strList = new ArrayList();strList.add("one");strList.add("two");st

2018-01-31 05:17:40 1274

原创 scala中的require和assert

Scala中的require和assertrequire和assert都用于在运行时执行某些检查来验证某些条件。那么他们的差别是什么呢?assert意味着你的程序已经达到了不一致的状态,这可能是目前的方法/函数的一个问题(我喜欢把它想成HTTP 500 InternalServerError)require意味着方法的调用者有问题,应该修复它的调用(我喜欢把它看作HTTP 400

2018-01-27 12:57:57 7391

原创 Scala中的Any、Nothing、Null、Nil

Scala中的Any、Nothing、Null、NilAny在scala中,Any类是所有类的超类。Any有两个子类:AnyVal和AnyRef。对于直接类型的scala封装类,如Int、Double等,AnyVal是它们的基类;对于引用类型,AnyRef是它们的基类。Any是一个抽象类,它有如下方法:!=()、==()、asInstanceOf()、equals()、hash

2018-01-27 10:30:25 6382

原创 Scala中的抽象类与特征

Scala中的抽象类与特征抽象类Scala的抽象类跟Java的一样,不能被实例化。其中一些特性也与Java的抽象类非常类似。定义抽象类需要使用abstract在抽象类中,变量不使用就无需初始化,可以等到子类继承时再进行初始化。在抽象类中,抽象方法无需使用(也不能)用abstract进行修饰。 一个方法只要是没有它的实现(没有等号或没有方法体),它就是抽象的,在子类中覆写或者

2018-01-27 01:28:50 1464

原创 Scala中的类和构造器

Scala中的类摘要网络上很多资料讲得不清不楚的,有些甚至是片面的错误的,看语言应该是直接用翻译器将英文翻译成中文。所以依照着网上的一些说法和自己的实验重新将一些概念和定义讲解一些。scala编译器会自动为类中的字段添加getter方法和setter方法可以自定义getter/setter方法来替换掉编译器自动产生的方法用@BeanProperty注解来生成JavaBeans

2018-01-26 02:44:49 5856 3

原创 Scala中的override

Scala中的overrideoverride是覆盖的意思,在很多语言中都有,在scala中,override是非常常见的。在类继承方面,它和java不一样,不是可写可不写的了,而是必须写的。如果不写而覆盖了对应的属性或者方法的话,编译器就会报错了。基础用法/*基本的override特性*/object Testclass { class A {

2018-01-25 06:53:10 3161

原创 scala中的高阶函数和柯里化

高阶函数在计算机科学中,高阶函数是至少满足下列一个条件的函数:接受至少一个函数作为输入输出一个函数在数学中它们也叫做算子(运算符)或泛函。微积分中的导数就是常见的例子,因为它映射一个函数到另一个函数。高阶函数的例子假设有一个函数对给定两个数区间中的所有整数求和:def sumInts(a: Int, b: Int): Int = if(a > b) 0

2018-01-23 22:09:51 784

原创 scala中的尾递归

递归一个函数直接或间接的调用它自己,就是递归了。例如,递归计算阶乘:def factorial(n: Int): Int = { if( n 1 ) 1 else n * factorial(n-1)}以上factorial方法,在n>1时,需要调用它自身,这是一个典型的递归调用。如果n=5,那么该递归调用的过程大致如下: factorial(5)

2018-01-20 07:22:14 2037 1

原创 scala中的方法

scala中的方法在OOP中,方法作用于对象,是对象的行为,在Scala中的方法也是如此。 方法定义定义方法的基本格式是:def 方法名称(参数列表):返回值 = 方法体scala中方法的返回值默认是方法体重的最后一行表达式 的值,当然也可以用return来执行返回值,但scala并不推荐这么做。 def function1(param1: String, para

2018-01-20 07:21:38 264

原创 scala中的call-by-name和call-by-value

scala中的call-by-name和call-by-valuevar/def/val/lazy valdef:类似于每一次重新赋值,如果是用def定义函数,则是每一次重新获得一个函数,做call-by-name操作。val:获得一次,并立即执行,且在生命周期内不能再被修改,使用的是call-by-value操作。var:在生命周期内可以被再次赋值lazy val:惰性执行,

2018-01-20 05:01:08 1396

原创 函数式编程介绍

历史来源讲述历史来源,不喜欢的可以跳过。但是我个人认为这对理解有帮助。在计算机的世界中,有两位巨擘对问题的可计算性做了模型化描述[4]。一位是阿兰.图灵(Alan Turing),他提出的图灵机。计算机系的各种学科中都充斥着这个概念,假设有一个纸带和一个打孔机,然后有一套指令,能够控制打孔机在纸带上移动、能够读取当前位置是否打了孔、能够在当前位置打一个孔,这就是一个图灵机,假设一个问题

2018-01-19 10:44:59 32448 23

原创 高级数据库二十五:不易失内存数据库

Non-Volatile Memory Databases背景新兴的存储技术提供像DRAM一样的低延迟读取/写入,但具有永久写入和大容量等类似SSD的特性。AKA存储级内存,永久内存最早的设备将是块地址(NVMe),但是基于块地址的设备并不被数据库研发人员所青睐,它的性能仅仅类似于一个更好更快的NAND flash内存。后来的设备,字节地址改变了人们设计操作系统结构的方

2018-01-17 10:41:33 1168

原创 高级数据库二十四:内存存不下的内存数据库

Larger-than-Memory Databases背景我们知道DRAM价格非常昂贵,且运行耗电量也非常大。那么当内存数据库存储的信息更大了之后,我们就希望使用更加便宜的存储设备,希望改善DRAM带来的一些不利条件。新技术因此就产生了Larger-than-Memory Databases这种技术。即,允许内存中的DBMS存储/访问磁盘上的数据,而无需重新引入面向磁

2018-01-17 08:38:58 539

原创 高级数据库二十二:矢量化运行(二)

Vectorized Execution (Part II)上一次将的哥大的论文的矢量化算法在没有四五个SIMD寄存器的情况下是没法运行的。因为DBMS需要将64位的地址和64位的数据存入寄存器考虑到数据压缩技术,我们不能改变64位的地址,但是我们不一定要全部存储64位的数据。这样产生的问题是,压缩数据的位宽不一定自然地适合SIMD寄存器插槽。如你压缩前128位的寄存器存储了4个32位

2018-01-16 13:36:31 924

原创 高级数据库二十二:矢量化运行

Vectorized Execution (Part I)说实话,这节课有点没听明白。上节课说到了通过矢量化来加速查询的优化,需要这么做的原因是:构建一个DBMS是非常难的一件事情DBMS中有很多的问题需要去克服新的CPU加速效果不明显,所以必须想别的办法来提升效果硬件方面一般来说,现在用的CPU主要分为两种MULTI-CORE CPUS使用少量高功率内

2018-01-16 12:25:23 1680 1

原创 高级数据看二十一:查询计划编译

Query Compilation背景对于in-memory数据库,因为所有的数据都在内存之中,所以很多其他影响速度的因素(如磁盘IO等)都消失了,所以提高吞吐量的唯一方法是减少执行的指令数量。提高十倍速度,DBMS需要减少90%的指令提高百倍速度,DBMS需要减少99%的指令我们可以通过code specialization来实现这种指令数量的减少。即,通过生成DBMS

2018-01-15 13:34:11 889

原创 高级数据库二十:并行JOIN算法(Sorting)

Parallel Join Algorithms (Sorting)背景关于Join的其他背景可以查看上一篇讲Hash Join的文章。SINGLE INSTRUCTION, MULTIPLE DATA (SIMD)有一系列的CPU指令允许处理器同时在多个数据点上执行相同的操作。目前的AMD和Intel CPU均具有ISA和微体系结构,支持SIMD操作。优点:

2018-01-15 07:21:37 1800

原创 高级数据库十九:并行JOIN算法(Hashing)

Parallel Join Algorithms (Hashing)背景我们在执行Join操作的时候,肯定会使用多线程。但是这些多线程不是完全独立运行的,因为你需要在进入下一个阶段前将这一个阶段的所有数据处理完,而不能让一个线程先进入下一个阶段。所以如何设计Join算法来减少overhead就是非常关键的事情了。这篇文章我们将介绍Hash Join的算法,下片文章介绍的是Sort-

2018-01-14 10:39:43 2311 1

转载 系统设计入门

原文地址:github.com/donnemartin/system-design-primer 译文地址:系统设计入门 译文出自:掘金翻译计划 译者:XatMassacrE、L9m、Airmacho、xiaoyusilen、jifaxu 这个 链接 用来查看本翻译与英文版是否有差别(如果你没有看到 README.md 发生变化,那就意味着这份翻译文档是最新的)。 系

2018-01-13 10:46:55 24767

翻译 数据库设计的非正统方法:Shard的来临

数据库设计的非正统方法:Shard的来临关于Shard和Partition的区别,大家可以看看What’s the difference between sharding DB tables and partitioning them?以及Database sharding Vs partitioning。简单而言,就是通常意义上的Partition是在本地数据上的分片,Shard是在多台

2018-01-13 10:02:52 977

翻译 技术面试的系统设计题(二)

可扩展性基础现在您已经设计了一个可靠的抽象体系结构,下一步就是将其扩展。如果你从来没有建立过大规模的系统,这个任务看起来有点令人生畏。除了接下来的一个视频和四篇博文的翻译,你也可以看看An Unorthodox Approach To Database Design : The Coming Of The Shard可扩展的Web开发视频地址 课件地址比较建议看一看视

2018-01-13 05:03:13 8220

原创 高级数据库十八:查询规划与执行

Query Execution & Scheduling对于数据库系统,交互模式大致如上。前端有多个用户,也就是多个应用程序来访问后端。后端则发送逻辑查询给DBMS,DBMS得到SQL语句或者其他方式的逻辑查询之后,将之转化为物理查询,得到数据后再返回给后端。查询计划一个查询计划是由多个操作组成的。比如,SELECTION,JOIN等等。一个操作对应到具体的物理查询操作

2018-01-09 22:13:15 848

翻译 技术面试的系统设计题(一)

技术面试的系统设计题(一)本文为课程翻译和学习笔记,课程地址System Design for Tech Interviews。 关于课后题,这儿就不公布答案了。应该还是比较简单的。什么是系统设计题在面试的时候,面试官经常会让我们设计一些系统,比如:设计一个像bit.ly一样的URL缩短服务。你将如何实现谷歌搜索?设计一个C/S应用程序,允许人们互相下棋。如何将关系存

2018-01-09 09:05:05 23707 2

原创 高级数据库十七:优化器估价模型

Optimizer Cost Models我们在上两次讲查询优化文章中,提到了基于成本的查询计划,它们为数据库的当前状态生成执行特定查询计划的查询成本估计。查询成本与我们上一节课讨论的优化器搜索查询策略的方式无关。就像二维平面上的最短路模型(不同的最短路算法,如Dikstra、Floyd)与它采用的距离模型(曼哈顿距离、欧氏距离、切比雪夫距离)无关。那么这节课就是讲解不同的估价模型。

2018-01-08 12:55:56 1326

原创 CAP原则

CAP原则CAP原则1985年Lynch证明了异步通信中不存在任何一致性的分布式算法(FLP Impossibility)的同时,人们就开始寻找分布式系统设计的各种因素。一致性算法既然不存在,但若能找到一些设计因素,并进行适当的取舍以最大限度满足实现系统需求成为当时的重要议题。比如,在CAP之前研究者就已经发现低延迟和顺序一致性不可能同时被满足。2000年,Eric Brewer教

2018-01-07 10:02:08 503

原创 高级数据库十六:查询优化器(二)

Optimizer Implementation(Part II)在这儿解释一下,逻辑查询计划或者逻辑计划指的是关系代数层面的查询语句;物理查询计划或者物理计划指的是具体查询层面的查询算法,具体到每一个JOIN的算法选择,每一个SELECT操作的算法实现(scan或者index)。瀑布模型(Cascades)分层搜索(STRATIFIED SEARCH)首先使用转换规则重写

2018-01-07 09:05:05 5034

原创 高级数据库十五:查询优化器(一)

Optimizer Implementation(Part I)背景在讲述这个优化器的时候,就必须先了解查询过程。在本系列的数据库四:浅谈数据库查询过程(Query Processing)中大致地说明了一下数据库的查询过程,但是没提到查询优化器的具体策略与实现。对于查询而言,我们期望优化器的作用是找到最小代价的正确执行方案。但是这是一个NP完全问题,所以没有一个优化器能够真正地找到

2018-01-05 10:33:03 9637

原创 高级数据库十四:检查点协议

Checkpoint Protocols背景日志允许DBMS在崩溃/重新启动后恢复数据库。 但是这个系统每次都要重做整个日志。检查点允许系统忽略大部分日志以减少恢复时间,就像存档点一样。理想的检查点应该具有:不能减慢常规事务的处理速度。不能引入不可接受的延迟峰值。不能要求过多的内存。CONSISTENT VS. CHECKPOINTS方法1:一致的检查点

2018-01-02 10:24:41 1515 1

poj第1200题

北京大学在线测评网站POJ第1200题的解答,已经AC通过

2013-11-30

空空如也

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

TA关注的人

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