年终小结

一年的最后,想和大家回顾一下今年讲过的技术和书,用一些问答,一起来提炼一下精华。

Spark

为什么需要分布式计算?

计算的增长速度超过了硬件的增长,单一服务器无法负荷。多服务器带来的是复杂度的提升,分布式计算就是解决这种复杂性问题的。

为什么不能对Oracle横向扩容实现分布式?

计算服务不止是满足计算功能,更重要是保证计算的稳定和可靠。

多服务器在可靠性方面,会出现一种单机不存在的问题:部分服务器故障。在部分故障情况下仍保持正常计算,我们称为分区容忍性(P)。

Oracle在可靠性方面是同时满足了一致性(C)和可用性(A),通过思想实验,发现CAP三者是无法全部达到的。

所以对Oracle横向扩容是无法满足P的,会引入不可靠运行的风险。

Spark是什么?

解决方法是牺牲CAP中的某一特性。

一般来说,对分布式计算来说,在CAP中,P是必须满足的,C和A相比,A在大多数场景下更为重要,所以选择牺牲C成本最低。

Spark是一种AP的解决方案,但是需要注意的是,并不是完全牺牲C,而是用最终一致性来替代强一致性。

在具体实现上,Spark延续了Hadoop的思路,对传统数据库技术进行了完全的推倒重来,是一种更为纯粹的分布式技术,非常值得学习。

《例外处理的逆袭》

为什么选择分享这本书?

这是我今年分享的第一本书,最主要的原因是作者的文笔实在是太好了,一本既好看,又有用的书,当然要分享了。

什么是例行处理的逆袭?

核心思想是分而治之,将例外处理分为了fault、error、failure三类,识别难度由高到低,应对难度由低到高,通过标准化的应对方式,可以最大化确保系统运行的稳定。

这本书最大的惊喜是什么?

应该是这句话:fault是无法全部识别的,但是failure确实可以保证的。缺陷无法全部排除,这是一个真相,但是我们往往不愿意正视,这本书让我重新认识了质量工作的方向。测试工作长期占据了统治的地位,但是针对的其实还是缺陷,其实就算再努力,效果也是有效的。如果把视角放到failure上,把质量工作拓展到全生命周期,才能真的切实提高。

《Clean Code》

这本书为什么经典?

作者Uncle Bob是程序员界的大神,他曾经参加了敏捷宣言的制定,提出了OO中非常重要的SOLID原则。而这本书是Uncle Bob自己最为得意的著作之一,我认为业界顶尖人物的思想是我们从业者都不能错过的。

Uncle Bob想说点什么?

整本书内容非常零散,讨论了非常多的主题,但是核心内容就是三个字"整洁感",作者认为这个是程序员的一项核心能力,而整本书是从编程的各个细节出发,来诠释整洁感这个概念。

Uncle Bob为什么要写这本书?

看到过对Uncle Bob的访谈,程序员是一个非常年轻的职业,年轻的职业缺点就在于缺乏思想的沉淀。在编程语言上,Java、Python、C等等各相争鸣,编程范式上OO逐渐主流,但是过程式、FP等也非常活跃,框架技术更是层出不穷。在这种多元化背景下,程序员是非常容易迷失的,Uncle Bob致力于寻找一些在多样化下面的东西,一些可以成为"元能力"的东西。在协作方面提出了敏捷宣言,而在工程实践上,就是"整洁感"。

小结

今年一共分享了15次课程,感谢大家的参与,我也收获良多,希望明年可以和大家一起获得更多不一样的体验。

小课堂week15 年终小结的更多相关文章

  1. 小课堂Week12 Clean Code Part1

    小课堂Week12 Clean Code Part1 今天的主题是函数,让我们看一个函数,找一找其中的"不整洁". 我们也根据这段代码,讨论下对于整洁代码的两个重要原则. publ ...

  2. 小课堂Week10 例外处理设计的逆袭Part3

    小课堂Week10 例外处理设计的逆袭Part3 今天是<例外处理设计的逆袭>这本书阅读的第三天,也是最后一天,我们会主要通过实例,对Part2中提出的例外处理等级进行解读. Level1 ...

  3. 小课堂Week8 例外处理设计的逆袭Part1

    小课堂Week8 例外处理设计的逆袭Part1 今天和大家讲一本书,书名是<例外处理设计的逆袭>. 为什么想讲这本书,是因为,例外处理在程序代码中到处存在,但是这些到底该如何写好,总觉得有 ...

  4. Spark小课堂Week7 从Spark中一个例子看面向对象设计

    Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() ...

  5. Spark小课堂Week3 FirstSparkApp(Dataframe开发)

    Spark小课堂Week3 FirstSparkApp(代码优化) RDD代码简化 对于昨天练习的代码,我们可以从几个方面来简化: 使用fluent风格写法,可以减少对于中间变量的定义. 使用lamb ...

  6. Spark小课堂Week3 FirstSparkApp(RDD开发)

    Spark小课堂Week3 FirstSparkApp 问题:Java有哪些数据结构 大致有如下几种,其中List与Map是最重要的: List Map Set Array Heap Stack Qu ...

  7. 小课堂Week11 会说话的代码

    小课堂Week11 会说话的代码 今天主要讨论下,在编码过程中和"命名"相关的问题.因为命名方法比较自由,如果要提高可读性,我们需要尽量使其符合正规的英文语法习惯. 变量/属性 通 ...

  8. 小课堂Week9 例外处理设计的逆袭Part2

    小课堂Week9 例外处理设计的逆袭Part2 今天继续阅读<例外处理设计的逆袭>这本书,我们先看两个案例: 案例1 问:如果要设计一个依据学号到数据库中查询学生资料的函数,当找不到符合条 ...

  9. Spark小课堂Week6 启动日志详解

    Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Strea ...

随机推荐

  1. 在SoCEDS环境下编译和更新preloader和uboot程序的方法

    在SoCEDS环境下编译和更新preloader和uboot程序的方法   前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloade ...

  2. struts2+hibernate+poi导出Excel实例

    本实例通过struts2+hibernate+poi实现导出数据导入到Excel的功能 用到的jar包: poi 下载地址:http://poi.apache.org/ 根据查询条件的选择显示相应数据 ...

  3. python 如何找到某一目录下的文件类型(三种方法)

    #!/usr/bin/env python import glob import os os.chdir(“./”) for file in glob.glob(“*.py”): print file ...

  4. 关于litecoin莱特币挖矿、炒作的一点感想

    比特币早在一.二年前我就听说过这个词了,还自己试过搭设矿机,因为没找到显卡驱动,也没有人一起搞,所以中途放弃了. 后来就不断听说涨了多少倍,总想着都涨这么多了,错了也就错过了. 周二组会,一帮人兴起又 ...

  5. Flask框架学习笔记(API接口管理平台 V2.0)

    博主今天把API接口管理平台发布到github了,这次是更新一些功能 如支持本地数据库sqlite3.优化了数据结构 技术方面跟之前V1.0相同,只增加生产本地数据:但是为了支持层级的参数,修改了数据 ...

  6. Oozie JMS通知消息实现--根据作业ID来过滤消息

    一,介绍 本文使用Oozie的消息通知功能,并根据JMS规范中的消息选择器(Selector)实现 根据作业的ID来过滤消息. 首先搭建好JMS Provider(ActiveMQ) ,并进行相关配置 ...

  7. Flex 日期选择器控件

    在构建用户界面时,经常用到日期的输入和选择. 输入日期时,用户可以使用键盘输入,也可以在类似于日历的弹出式对话框中,通过鼠标单击所选日期. 在Flex中可以通过日期输入控件实现输入和选择日期.Flex ...

  8. 慕课网-安卓工程师初养成-4-8 Java循环语句之 do...while

    do...while 循环与 while 循环语法有些类似,但执行过程差别比较大. 语法:  执行过程: <1>. 先执行一遍循环操作,然后判断循环条件是否成立 <2>. 如果 ...

  9. 在.net中序列化读写xml方法

    收集XML的写法 XML是一种很常见的数据保存方式,我经常用它来保存一些数据,或者是一些配置参数. 使用C#,我们可以借助.net framework提供的很多API来读取或者创建修改这些XML, 然 ...

  10. HTML你应该知道的三大基本元素

    顶级.块级.内联,html元素的三大分类 如果将这些元素细分, 又可以分别归为顶级(top-level)元素,块级(block-level)元素和内联(inline)元素. 1. Top-level ...