01 2023 档案
摘要:1. 阻塞式I/O 1.1. 一种通用且易于理解的方式,因为和程序用户的交互通常符合这样一种顺序执行的方式 1.2. 将系统扩展至支持大量用户时,需要和服务器建立大量TCP连接,因此扩展性不是很好 2. 非阻塞式I/O 2.1. 异步I/O 2.2. 可以处理大量并发网络连接,而且一个线程可以为多个
阅读全文
摘要:1. 并发 1.1. 两个任务共享时间段 1.2. 一个程序要运行两个任务,并且只有一个CPU给它们分配了不同的时间片,那么这就是并发,而不是并行 2. 并行 2.1. 两个任务在同一时间发生 2.2. 为缩短任务执行时间,将一个任务分解成几部分,然后并行执行 2.3. 和顺序执行的任务量是一样的,
阅读全文
摘要:1. 默认方法 1.1. 接口中定义的包含方法体的方法,方法名有default关键字做前缀 1.1.1. 在任何接口中,无论函数接口还是非函数接口,都可以使用该方法 1.2. Collection接口 1.2.1. stream方法 1.3. Iterable接口 1.3.1. forEach方法
阅读全文
摘要:1. 方法引用 1.1. 一种引用方法的轻量级语法 1.1.1. 提供了一种简短的语法 1.1.2. 标准语法为Classname::methodName 1.2. 凡是使用Lambda表达式的地方,就可以使用 1.3. 自动支持多个参数 1.3.1. 前提是选对了正确的函数接口 2. 出现顺序 2
阅读全文
摘要:1. 外部迭代 1.1. for循环是一个封装了迭代的语法糖 1.1.1. 本质上来讲是一种串行化操作 1.2. 很难抽象出不同操作 2. 内部迭代 2.1. 内部迭代中的相应接口:Stream 2.2. 和Iterator类似,Stream是一种内部迭代方式 2.3. 内部迭代将更多控制权交给了集
阅读全文
摘要:1. Java 8函数式编程 1.1. 没有单子 1.2. 没有语言层面的惰性求值 1.3. 没有为不可变性提供额外支持 1.4. 集合类可以拥有一些额外的方法:default方法 2. 现实世界中,数据和行为并存 2.1. 面向对象编程是对数据进行抽象 2.2. 函数式编程是对行为进行抽象 3.
阅读全文
摘要:1. 基本信息 编程与类型系统 Programming With Types:Examples in TypeScript [美] 弗拉德·里斯库迪亚(Vlad Riscutia) 著,赵利通 译 机械工业出版社,2021年1月出版 1.1. 读薄率 书籍【真实】字数17.5万字,笔记总字数1929
阅读全文
摘要:1. Java 8 1.1. 除了增加函数式特性,还增加了一些配合使用的语法糖衣 1.2. 函数式接口 1.2.1. SAM(Single Abstract Method,单抽象方法)接口 1.2.1.1. 含有单一方法的接口是Java的一种习惯用法 1.2.1.2. Runnable和Callab
阅读全文
摘要:1. 语言的分类 1.1. 静态类型 1.1.1. 要求我们事先指定变量和函数的类型 1.2. 动态类型 1.2.1. 允许推迟指定类型 1.3. 强类型 1.3.1. 变量“知道”自己的类型 1.3.1.1. 允许反射和对实例作类型测试,且一直保有自身的类型信息 1.4. 弱类型 1.4.1. 语
阅读全文
摘要:1. 观点 1.1. 抽象隐藏了繁杂的细节,只是有时候会连同重要的考虑因素一起隐藏掉 1.2. 理解掌握的抽象层次永远要比日常使用的抽象层次更深一层 1.3. 交出控制权的观点:放弃对繁琐细节的掌控,关注问题域,而非关注问题域的实现 2. 函数式思维的好处 2.1. 将低层次细节(如垃圾收集)的控制
阅读全文
摘要:1. 命令式编程 1.1. 按照“程序是一系列改变状态的命令”来建模的一种编程风格 1.2. 传统的for循环 1.2.1. 确立初始状态 1.2.2. 每次迭代都执行循环体中的一系列命令 1.2.2.1. 将操作安排在循环内部去执行 1.3. Java 1.3.1. 消除了垃圾收集的麻烦 2. 函
阅读全文
摘要:1. 范式转变 1.1. 学习一种全新的编程范式,困难并不在于掌握新的语言 1.1.1. 真正考验人的,是怎么学会用另一种方式去思考 1.2. 计算机科学的间歇式进步,好思路有时搁置数十年后才变成主流 1.3. 第一种面向对象的语言Simula 67是1967年发明的,可是直到1983年诞生的C++
阅读全文
摘要:1. 范畴论 1.1. 范畴论是数学的一个分支,研究的是由对象及这些对象之间的箭头组成的结构 1.2. 函子和单子的概念来自范畴论 1.3. Haskell是一种编程语言,从范畴论中汲取了许多灵感,所以它的语法和标准库很容易表达函子、单子和其他结构的概念。Haskell完全支持高阶类型 2. 函子(
阅读全文
摘要:1. 常用算法 1.1. map() 1.1.1. 接受一个T值序列和一个函数(value: T) => U,将该函数应用到序列中的全部元素,然后返回一个U值序列 1.1.2. 别名 1.1.2.1. fmap() 1.1.2.2. select() 1.2. filter() 1.2.1. 接受一
阅读全文
摘要:1. 恒等函数 1.1. 在代数中,恒等函数指的是函数f(x) = x 1.2. 恒等逻辑与getNumbers()和assembleWidgets()的问题域解耦,因为恒等逻辑和问题域是正交的,或者说是独立的 2. 类型参数 2.1. 将不同函数的区别,即它们的实参类型参数化 2.2. 一个泛型名
阅读全文
摘要:1. 基本信息 C#代码整洁之道:代码重构与性能提升 ,英文名为Clean Code in C#。 作者:[英] 詹森·奥尔斯(Jason Alls) 著,刘夏 译 机械工业出版社,2022年4月出版。 1.1. 读薄率 书籍总字数489000字,笔记总字数8927字。 读薄率 8927÷48900
阅读全文
摘要:1. 面向对象编程 1.1. (Object-Oriented Programming,OOP) 1.2. 基于对象的概念的一种编程范式 1.3. 对象可以包含数据和代码 1.4. 数据是对象的状态 1.5. 代码是一个或多个方法 1.5.1. 消息是方法,包括名称、实参和返回类型 1.6. 通过使
阅读全文
摘要:1. 子类型 1.1. 在期望类型T的实例的任何地方,都可以安全地使用类型S的实例,则类型S是类型T的子类型 1.1.1. 里氏替换原则(Liskov substitution principle) 2. 名义子类型 2.1. 明确指定 2.2. 显式声明一个类型是另一个类型的子类型 2.3. 大部
阅读全文
摘要:1. 装饰器模式 1.1. 扩展对象的行为,而不必修改对象的类 1.2. 装饰的对象可以执行其原始实现没有提供的功能 1.3. 优势 1.3.1. 支持单一职责原则 1.3.1.1. 每个类只应该承担一种职责 1.4. 经典实现 1.4.1. 一个IComponent接口 1.4.2. 一个具体实现
阅读全文
摘要:1. 策略模式 1.1. 在运行时从一组算法中选择某个算法 1.1.1. 封装一组算法 1.1.2. 在运行时使用其中一个算法 1.2. 把算法与使用算法的组件解耦 1.3. 面向对象实现 1.3.1. 惯例实现 1.3.2. IStrategy接口 1.3.3. ConcreteStrategy1
阅读全文
摘要:1. 避免基本类型偏执 1.1. 把值声明为基本类型,并对其意义做一些隐含的假定时 1.1.1. 例如:使用number表示邮编 1.1.2. 例如:使用string表示电话号码 1.2. 定义类型来显式捕捉值的含义,从而避免错误解释值 1.2.1. 新类型只是简单地封装了一个数字或字符串 1.2.
阅读全文
摘要:1. 复合类型 1.1. 乘积类型 1.2. 组合一个或多个类型将得到一个新类型,其值为组成类型的全部可能的组合 1.3. 元组 1.3.1. 一组类型构成,通过它们在元组中的位置可以访问这些组成类型 1.3.2. 一种特殊的分组数据的方式,允许我们将不同类型的多个值作为一个值进行传递 1.3.3.
阅读全文
摘要:1. 空类型 1.1. uninhabitable type 1.1.1. 声明从不返回的函数 1.2. 不能有任何值的类型,其可取值的集合是一个空集合 1.3. 函数不返回的原因 1.3.1. 函数在所有代码路径上都抛出异常 1.3.2. 函数可能执行无限循环 1.3.3. 导致程序崩溃 1.4.
阅读全文
摘要:1. 引子 1.1. 1999年发射的火星气候探测者号(Mars ClimateOrbiter)进入火星轨道的过程中失去联络 1.2. 原因 1.2.1. Lockheed(洛克希德·马丁公司)开发的一个组件使用磅力秒(美国单位,可简写为lbfs)来测量动量,而NASA开发的另外一个组件则使用牛顿秒
阅读全文
摘要:1. 代码评审注意事项 1.1. 始终保持代码评审的意识 1.2. 保证代码构建成功 1.3. 确保所有的测试都是通过的 1.4. 注意YAGNI原则 1.5. 检查重复代码 1.6. 使用静态分析器 1.7. 在代码开发完成之后,进入QA部门进行测试之前执行 1.8. 小步提交是有效传递信息的方式
阅读全文
摘要:1. API 1.1. Application Programming Interface 1.1.1. 应用程序编程接口 1.2. 一组可以在不同的应用和程序中共享的可复用的程序库 1.3. 由REST服务提供的API=RESTful API 1.3.1. Representational Sta
阅读全文