小课堂Week10 例外处理设计的逆袭Part3 今天是<例外处理设计的逆袭>这本书阅读的第三天,也是最后一天,我们会主要通过实例,对Part2中提出的例外处理等级进行解读. Level1 Level1的要求是立即中止运行 ,所有例外都往外抛,全部报告给使用者,或者开发者使用. 案例1 我们看一个实例,如下代码存在一些什么样的问题: public int withdraw(int amount) { if (amount > 100) return -1; else return 100…
小课堂Week9 例外处理设计的逆袭Part2 今天继续阅读<例外处理设计的逆袭>这本书,我们先看两个案例: 案例1 问:如果要设计一个依据学号到数据库中查询学生资料的函数,当找不到符合条件的学习资料时候,是不是要丢出异常? 分析: 根据Part1中的介绍,例外的生命周期包括fault.error.failure,那么要抛出的首先应该是一个fault. 让我们看下案例中的这个场景属于哪类fault. 首先,这个不是component fault,因为与环境无关. 找不到资料,看起来是主观引入的…
小课堂Week8 例外处理设计的逆袭Part1 今天和大家讲一本书,书名是<例外处理设计的逆袭>. 为什么想讲这本书,是因为,例外处理在程序代码中到处存在,但是这些到底该如何写好,总觉得有些懵懵懂懂.正好听到Jackson老师的推荐,读到了这本书,如获甘霖,好东西和大家分享. 什么是例外处理 这本书的作者是一位台湾的大牛叫Teddy Chen.台版和港版的书有一个比较好的习惯,就是对于英文的技术词汇,解释但不翻译,因为中文和英文在某些词汇的描述上强度是不同的,直译往往会丢失一部分的含义,所以先…
Spark小课堂Week7 从Spark中一个例子看面向对象设计 今天我们讨论了个问题,来设计一个Spark中的常用功能. 功能描述:数据源是一切处理的源头,这次要实现下加载数据源的方法load() 初始需求 需求:支持Json数据源加载 具体:输入一个path,需要返回一个Relation, Relation中提供scan()和write()两个方法 示意代码: class Context{ public Relation json(String path){ return new Relat…
Spark小课堂Week2 Hello Streaming 我们是怎么进行数据处理的? 批量方式处理 目前最常采用的是批量方式处理,指非工作时间运行,定时或者事件触发.这种方式的好处是逻辑简单,不影响联机业务,但是性能不行. 理想方式 对于数据处理的问题,我们的最终理想解,应该是满足业务规则正确的情况下,实时的完成处理. 平衡点 理想方式难度比较高,批量方式往往又不给力,我们可以在批量方式和理想方式中间,找到一个平衡点,就是流处理. 流处理 我们的理想情况是当不断有数据进来,就不断的进行处理.…
Spark小课堂Week1 Hello Spark 看到Spark这个词,你的第一印象是什么? 这是一朵"火花",官方的定义是Spark是一个高速的.通用的.分布式计算系统!!! 用途:进行大数据计算,这里要注意,大数据是一个相对概念,并没有绝对的量化指标,一般我们认为在业务特定场景要求下,一台机器处理不了的数据都能称为大数据. 前身:大数据计算的开山鼻祖Hadoop,Spark和Hadoop的主要区别就是更快,更通用. 功能:Spark内核设计的非常通用,具有很高的扩展性,目前已经发…
年终小结 一年的最后,想和大家回顾一下今年讲过的技术和书,用一些问答,一起来提炼一下精华. Spark 为什么需要分布式计算? 计算的增长速度超过了硬件的增长,单一服务器无法负荷.多服务器带来的是复杂度的提升,分布式计算就是解决这种复杂性问题的. 为什么不能对Oracle横向扩容实现分布式? 计算服务不止是满足计算功能,更重要是保证计算的稳定和可靠. 多服务器在可靠性方面,会出现一种单机不存在的问题:部分服务器故障.在部分故障情况下仍保持正常计算,我们称为分区容忍性(P). Oracle在可靠性…
小课堂Week12 Clean Code Part1 今天的主题是函数,让我们看一个函数,找一找其中的"不整洁". 我们也根据这段代码,讨论下对于整洁代码的两个重要原则. public static String testableHtml(PageData pageData, boolean includeSuiteSetup) throws Exception { WikiPage wikiPage = pageData.getWikiPage(); StringBuffer buf…
小课堂Week11 会说话的代码 今天主要讨论下,在编码过程中和"命名"相关的问题.因为命名方法比较自由,如果要提高可读性,我们需要尽量使其符合正规的英文语法习惯. 变量/属性 通常来说,变量/属性应该是一个名词,比如message. 但有两种特殊情况要注意: 比如如下代码, List<Message> getMessageList(String name){ } messageList的写法并不好,应该使用复数的名词. List<Message> getMes…
Spark小课堂Week6 启动日志详解 作为分布式系统,Spark程序是非常难以使用传统方法来进行调试的,所以我们主要的武器是日志,今天会对启动日志进行一下详解. 日志详解 今天主要遍历下Streaming的启动日志. 授权等操作 Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 16/07/19 15:06:04 INFO SparkContext: Running Spark ve…