1. Reactor 官方文档翻译简化版

    2019-06-26 Wed
    By xiayf

    原文:Reactor 3 Reference Guide

    1. 起步

    1.1 Reactor 简介

    Reactor 是为 JVM 准备的一个完全非阻塞的反应式编程基础组件,支持高效的需求管理(以管理“反压”的形式),直接与 Java 8 的函数式 API 集成,尤其是 CompletableFutureStream 以及 Duration,提供可组合的异步序列 API - Flux(适用于 N 个元素的序列)和 Mono(适用于 0 或 1个元素的序列)--- 并且全面地(extensively)实现了 反应式流(Reative Streams) 规范。

    借助 …

  2. Java System.getProperty VS. System.getenv(译)

    2019-06-25 Tue
    By xiayf

    原文:Java System.getProperty vs System.getenv

    1、简介

    Java 应用代码中会自动引入 java.lang 包。这个包包含很多常用的类,包括 NullPointerExceptionObjectMathString 等等。

    其中 java.lang.System 类是一个 final 类,这意味着开发者无法继承它,其所有方法都是静态的(static)。

    System 类中有两个方法,分别来读取系统属性(system properties)和环境变量(environment variables),下面我们来看看这两者的区别。

    2、使用 System.getProperty()

    Java 平台使用一个 Properties 对象来提供本地系统相关的信息和配置 …

    标签: 翻译 Java
  3. Java 单测伴侣 - mockito

    2019-06-17 Mon
    By xiayf

    其实工作以来,我很少写测试/单测代码,一方面是大部分互联网公司团队对测试的要求不高,另一方面是想写好测试代码还挺难的,挺花时间,其中最麻烦的是待测代码可能会访问外部资源(比如数据库、HTTP API),如果不能方便地进模拟访问这些外部资源,那么测试起来会非常麻烦。

    但,对于复杂逻辑,如果不经过严格测试,发布到生产环境,又有些不放心,没底气,或者在代码重构时,如果没有覆盖全面的测试,很难评估代码变动带来的影响。

    直到遇到 mockito,我才觉得是时候认真写写测试代码了。


    mockito 提供两种对象模拟方式:mockspy

    简单来说,mock 模拟的对象是一个完全假的对象,只是具备指定类型的接口,以 java.util.List 为例:

    import static org.mockito.Mockito.mock;
    
    List mockedList = mock(List.class);
    

    虽然 …

    标签: Java mockito 单测
  4. 编写漂亮的 shell 代码

    2018-05-16 Wed
    By xiayf

    使用丑陋的编程语言也能写出漂亮的代码。

    true_then_run() {
        condition=$1
        action=$2
    
        (${condition})
        if [ $? -eq 0 ]
        then
            (${action})
        else
            echo "'$1' is false, don't run '$2'"
        fi
    }
    
    false_then_run() {
        condition=$1
        action=$2
    
        (${condition})
        if [ $? -ne 0 ]
        then
            (${action})
        else
            echo "'$1' is true, don't run '$2'"
        fi
    }
    
    map() {
        for item in $2
        do
            ($1 …
    标签: Bash
  5. 配置 Maven 自动化构建 protobuf 代码依赖

    2018-05-14 Mon
    By xiayf

    1.pom.xml 中添加如下属性配置:

    <properties>
        <!-- protobuf paths -->
        <protobuf.input.directory>${project.basedir}/src/main/protobuf</protobuf.input.directory>
        <protobuf.output.directory>${project.build.directory}/generated-sources</protobuf.output.directory>
        <!-- library versions -->
        <build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
        <maven-antrun-plugin.version>1.8</maven-antrun-plugin.version>
        <maven-dependency-plugin.version>3.0.2</maven-dependency-plugin.version …
    标签: java maven protobuf
  6. 《Python 编程之美》译者序

    2018-04-01 Sun
    By xiayf

    从毕业至今,在互联网行业从事软件研发工作,将近五年。这五年间,做过后端开发、前端开发、大数据处理等,使用过的编程语言包括:Python、PHP、Go、Java、JavaScript 等。

    虽说编程语言各异,但我使用它们来写各种项目的代码却一直坚持两点:代码可读性和自解释性/自文档性(self-documentation)。这很大程度上应该是受到 Python 语言设计哲学的影响 - 追求简单易读易懂的代码。

    很多人可能会认为这两点其实是一点 - 代码可读性,但我想做点区分:代码可读性突出对代码阅读者视觉上的影响,是否存在不必要的理解干扰,比如:必要的空行、变量定义与使用之间的距离、函数体/逻辑分支是否过长、逻辑表达是否直观等等。可读性高的代码通常都非常漂亮、赏心悦目。自解释性代码则更突出语义层面,比如:变量名称/函数名称/类名是否恰当、函数/方法/API 是否单一职责、工程目录结构/包/模块拆分是否符合“高内聚低耦合”原则等等 …

    标签: 翻译 书籍
  7. 《精通Python设计模式》译者序

    在我读大学那几年,设计模式可谓火极一时,各大公司校招面试也几乎都会考设计模式,反观现在,则似乎很少有人聊设计模式的话题。是因为设计模式过时了吗?还是只是一个错误的概念?从个人这几年的开发经验来看,答案是否定的,设计模式并未过时,更不是一个错误的概念。从曾经的“红极一时”到如今的“门可罗雀”,只是说明软件开发行业以更加客观理性的态度来看待设计模式。软件开发领域的技术概念也似乎总是遵循这样的流行度变迁,最终一次又一次地证明不存在“银弹”。

    正确看待设计模式的前提是明白什么是设计模式。正如本书一开始就强调的:“设计模式的本质是在已有的方案之上发现更好的方案(而不是全新发明)”,这是一种务实的态度,设计模式并非是一种高大上或者神秘的东西,而是一些常见的软件工程设计问题的最佳实践方案。

    那么应该如何学习设计模式?个人认为软件开发技术的学习都应该以实践为前提,只有理解实践过程中遇到的种种问题,才能明白那些技术的本质和目的是什么,每种新技术都是因某个/某些问题而出现的,软件开发高手一般都反对新手一开始就一股脑地学习设计模式。有些新手学了点设计模式的理论后,甚至在软件开发过程中生搬硬套,结果是适得其反。因此,软件开发人员应该在积累了一定的开发经验,再系统地学习设计模式,效果往往也能事半功倍。

    现在有些积累一定开发经验的软件开发人员,在谈起设计模式时,一脸鄙夷。我想这也不是一种客观务实的态度。软件开发不是简单的累积代码,在实现业务功能的同时应该仔细考虑如何控制软件的复杂度。软件的复杂度分为两个层面:业务逻辑复杂度和代码实现复杂度。对同一个业务系统,不同的软件开发人员会有不同的实现 …

    标签: 翻译 书籍
  8. 应用MySQL InnoDB全文索引

    问题

    之前涉及的一项工作要求对某些数据做全文索引,并以API向其他内部系统提供搜索查询服务。

    由于需要建全文索引的数据量并不大,且已有的数据都以InnoDB引擎存储,简单起见,我们选择MySQL InnoDB引擎的全文索引特性来实现。MySQL从版本5.6开始支持InnoDB引擎的全文索引,不过“从5.7.6版本开始才提供一种内建的全文索引ngram parser,支持CJK字符集(中文、日文、韩文,CJK有个共同点就是单词不像英语习惯那样根据空格进行分解的,因此传统的内建分词方式无法准确的对类似中文进行分词)”,我们使用的MySQL版本为5.6.28,并且需要建全文索引的数据部分是中文,所以这是个问题。

    方案

    我们先把这项工作按“分治”的思想拆分成几个小问题:

    1. 由于版本5.6.28的MySQL不支持中文的全文索引,那么可以对需要建全文索引的数据进行预处理 - 分词,并以空格为间隔将分词结果拼接成一个字符串。
    2. 但经过第1步仍是不够的 - MySQL的系统变量ft_min_word_lenft_max_word_len分别规定了全文检索被编入索引单词的最小长度和最大长度,默认的最小值为4个字符,默认的最大值取决于使用的MySQL版本。为了不改变这个默认值同时也是兼考虑这个值对于英文的意义,则需要通过编码(urlencodebase64汉字转拼音等)将中文词变长 …
    标签: MySQL 笔记

Page 2 / 18