工厂设计模式是一种常见的设计模式,用于创建对象,所以它是一种创建型模式。工厂模式有三种不同的变体:静态工厂、工厂方法、抽象工厂。使用工厂模式可以将创建对象的代码与使用对象的代码分离,这种解耦有助于提高代码的可维护性和可扩展性。在本博客中我们将通过一个订购冰淇淋的场景来说明工厂设计模式的优点
Stack
Stack 是一种非常重要的数据类型,在运算表达式的实现、DFS算法、进制转换中都会用到 Stack
简介
Klaus Samelson 和 Friedrich L. Bauer 在1955年提出了 栈 的概念,并在1957年申请了专利,Klaus Samelson 在1988年3月去世时,Friedrich L. Bauer 因发明了栈原理而获得IEEE计算机先锋奖。其实早在1946年 Alan M. Turing 就提出过这种数据堆叠的方式,图灵使用 “bury” 和 “unbury” 表示子程序的调用与返回
原理
栈是一种抽象的数据类型,它是一种后进先出(LIFO)的数据组织方式,核心操作包括 push 、pop。具体表现如下
Java并发编程
随着摩尔定律的失效,现代计算机拥有越来越多的核心数,如何高效利用多核能力提升系统吞吐量、响应速度是非常关键的。在 Java 应用程序中实现安全、高效、可伸缩的并发编程是极其困难的,但仍有一些技巧可遵循
并发问题
所有的并发问题都可以归纳为如何协调对并发状态的访问。可变状态越少,越容易确保线程安全性
- 域如果不需要可变,尽量声明为 final 类型
- 不可变对象一定是线程安全的
- 封装可以有效管理复杂性。例如:可以将同步机制维护在对象内部
- 使用同一把锁保护同一个 不变性条件一组变量的值在某一时刻不会发生变化中的所有变量
- 对复合操作加锁
- 从多个线程中访问同一个未加锁的可变变量,程序肯定会出问题
- 在设计过程中考虑线程安全问题,并文档化
The Clean Coder
如何提升程序员的职业素养?
试试如下几点!
- 编码:编写高质量代码
- 是/否:尽己所能,承诺的事情一定要兑现,无法承诺的事情要敢于说不
- 沟通:与团队、利益相关方进行有效沟通与互助交流
- 责任:对代码、项目、工作质量承担个人责任
- 预估:通过有效的方法提供可信的预估结果。如:PERT计算方法等
- 时间:管理好自己的时间和注意力。如:任务优先级、分辨并拒绝无效会议等
- 压力:学习如何应对压力。如:避免产生压力、寻求帮助等
- 学习:对自己负责。持续学习,提升技能,不断成长
推荐书籍:程序员的职业素养
Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization’s communication structure. - Conway’s law
Clean Code
程序员如何才能写出高质量的代码,以提高团队的开发效率和代码的可维护性?
试试如下几点!
- 可读:代码应该便于自己理解,更应该便于他人理解
- 简洁:消除冗余代码,DRY( Don’t Repeat Yourself )
- 命名:使用清晰有意义且能自我解释的命名。包括:包、类、方法、变量等
- 异常:编写清晰的异常处理代码,不要忽略异常
- 注释:注释可作为代码上下文的补充,不要过多的使用注释,尽量使代码能够自我解释
- 测试:代码应该是容易测试的,并且是能够快速测试的
- 重构:定期重构,消除过往的烂代码
- 指引:学习成功经验,使用设计模式
按照如上几点去写代码,就一定会写出高质量的代码嘛?
不会!
能否写出高质量的代码,最核心的问题是:你是否想成为优秀的程序员?
推荐书籍:代码整洁之道
If you find yourself in a hole, stop digging. - Law of holes