愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

Dart学习笔记(二):方法

一、Dart方法 Dart中,方法也是对象并且是Function类的实例,因此,方法可以赋值给变量,也可以当做其他方法的参数,还可以是把Dart类的实例当做方法来调用,示例如: String greet(String name) { return 'Hello,...

通过一次场景模拟来深入理解和实践持续集成(CI)

最近参加 leader 所举办的 CI 相关的 CoP(Communication of Practice),过程相当精彩且收获甚多,本文是听完了第二场分享“CI in action”之后的一次总结,分享本身是基于 Java 和 Gradle 进行的,但是由于对前端开发者而言,可能以前端所了解的技术栈进行总结更为熟悉。因此,本着吸收分享内容且结合前端实际开发的初衷,写下本文

持续集成(Continuous Integration)的基础概念

一、持续集成的特点 至少每日集成一次 有助于快速解决问题 不止一个过程 二、所谓持续,是至少每日集成一次 持续集成(Continuous Integration, CI)是一种开发实践,它要求开发者将 代码 在一日内集...

《编程语言实现模式》学习笔记(一):LL(1)递归下降的词法分析器

一、什么是Lexer? 在阅读的时候,人们会无意识地将字母合成单词,然后将合成的单词组成句子,之后考虑语法结构,最终明白句子的含义。在编译的过程中,编译器为了更好地进行语法分析,就也需要先将字符流识别分类为有意义的一个个单元,而这些单元便称之为词法单元,编译器解析字符流到生成词法...

使用rebase的Git工作流

Git是目前最为强大的代码版本管理工具,被开源社区和各大公司所广泛使用。使用Git进行团队协作开发是很便利的一件事情,但是在多人协作的过程中,我们也会面临如何运用好Git的问题。这种情况下,就出现了各种各样的Git Workflow,而本文将介绍一种基于rebase的工作流,这种工作流也是目前开源社区所比较推崇的做法,了解了这种工作流之后可以更好地优化对git...

BDD工具Cucumber学习记录

一、前言 BDD(Behavior Driven Development)是一种有效的软件开发与测试方法,它能够清晰化地描述应用程序的行为,用于在业务方、开发者与测试人员之间明确业务需求,并且为更好地自动化测试提供指导。Cucumber是广泛使用的一个BDD工具,支持多种语言,本文则基于JS...

彻底理解JavaScript中的Event Loop

一、前言 Javascript从诞生之日起,就一直是一门单线程的非阻塞的语言。即便后面出现了WebWorker,但是其本质上还是主线程的子线程,帮助主线程分担一部分计算任务,并非真正意义上的多线程。由于浏览器环境和Node环境在处理Event Loop上大致相同,但又有所区别,所以本文将区分开讲解 二、...

关于前端枚举的一点思考

一、枚举的业务场景与遇到的问题 我们在日常业务开发中,经常遇到枚举,如商品状态、页面状态、审核状态等,翻阅以往的一些业务代码,会发现很多地方都是这么写的: <span v-if="status == 0">审核中</span> <span v-else-if="...

可能是比Mixin更好的方案:React新特性Hooks探索

一、什么是Hooks? Hooks是React新引入的一个特性,它允许我们能够不采用类式声明组件方式来使用状态和React其他特性(如生命周期、Ref、Context等),简单的例子如下: import { useState } from 'react' function Example() { const [count, se...

Node.js之Stream的应用与原理探索

为什么使用流? 假设我们现在要读取一个文件,通常情况下,会写成: const fs = require('fs') fs.readFile(fileName, (err, body) => { console.log(body.toString()) }) 这在文件比较小的时候...

LeetCode - 买卖股票的最佳时机

一、题目 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4] 输出: 5 解释: 在第 2 天(股票价格...

LeetCode - 最大子序列和

一、题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精...