8lovelife's life
0%

工厂设计模式是一种常见的设计模式,用于创建对象,所以它是一种创建型模式。工厂模式有三种不同的变体:静态工厂、工厂方法、抽象工厂。使用工厂模式可以将创建对象的代码与使用对象的代码分离,这种解耦有助于提高代码的可维护性和可扩展性。在本博客中我们将通过一个订购冰淇淋的场景来说明工厂设计模式的优点

阅读全文 »

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 应用程序中实现安全、高效、可伸缩的并发编程是极其困难的,但仍有一些技巧可遵循

并发问题

所有的并发问题都可以归纳为如何协调对并发状态的访问。可变状态越少,越容易确保线程安全性

  • 域如果不需要可变,尽量声明为 final 类型
  • 不可变对象一定是线程安全的
  • 封装可以有效管理复杂性。例如:可以将同步机制维护在对象内部
  • 使用同一把锁保护同一个 不变性条件一组变量的值在某一时刻不会发生变化中的所有变量
  • 对复合操作加锁
  • 从多个线程中访问同一个未加锁的可变变量,程序肯定会出问题
  • 在设计过程中考虑线程安全问题,并文档化

关于Java线程内容可以到这里了解 Java线程基础并发与多线程

阅读全文 »

如何提升程序员的职业素养?

试试如下几点!

  1. 编码:编写高质量代码
  2. 是/否:尽己所能,承诺的事情一定要兑现,无法承诺的事情要敢于说不
  3. 沟通:与团队、利益相关方进行有效沟通与互助交流
  4. 责任:对代码、项目、工作质量承担个人责任
  5. 预估:通过有效的方法提供可信的预估结果。如:PERT计算方法等
  6. 时间:管理好自己的时间和注意力。如:任务优先级、分辨并拒绝无效会议等
  7. 压力:学习如何应对压力。如:避免产生压力、寻求帮助等
  8. 学习:对自己负责。持续学习,提升技能,不断成长

推荐书籍程序员的职业素养

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

程序员如何才能写出高质量的代码,以提高团队的开发效率和代码的可维护性?

试试如下几点!

  1. 可读:代码应该便于自己理解,更应该便于他人理解
  2. 简洁:消除冗余代码,DRY( Don’t Repeat Yourself )
  3. 命名:使用清晰有意义且能自我解释的命名。包括:包、类、方法、变量等
  4. 异常:编写清晰的异常处理代码,不要忽略异常
  5. 注释:注释可作为代码上下文的补充,不要过多的使用注释,尽量使代码能够自我解释
  6. 测试:代码应该是容易测试的,并且是能够快速测试的
  7. 重构:定期重构,消除过往的烂代码
  8. 指引:学习成功经验,使用设计模式

按照如上几点去写代码,就一定会写出高质量的代码嘛?

不会!

能否写出高质量的代码,最核心的问题是:你是否想成为优秀的程序员?

推荐书籍代码整洁之道

If you find yourself in a hole, stop digging. - Law of holes

快速排序算法由 TONY HOARE(1934-) 在1959年在莫斯科国立大学期间发明,于1961年发布于ACM算法存储库。霍尔的老板曾在工作中要求他实现希尔排序,霍尔认为他有比希尔排序更好的算法,为此他还和老板打赌了六便士,结果是霍尔赢了

简介

快速排序是一种不稳定的交换排序算法,它利用分治的思想将一个大的问题分解为若干小问题,然后逐一击破小问题,从而高效的解决最终问题。算法的核心是如何分,常见的分区方案有:Lomuto partitionHoare partition。本文使用的是 Hoare partition 方案

阅读全文 »

希尔排序算法由 DONALD L. SHELL(1924-2015) 发明,于1959年发布于ACM算法存储库,它的算法复杂度取决于间隙序列的选择,当前仍无法确认希尔排序的算法复杂度

简介

希尔排序是一种不稳定(排序后可能会改变相同值的相对位置)的插入排序算法,它是一种自适应排序算法(当待排序队列部分有序时,算法执行更快),它是对插入排序的一种高效改进,通过增量序列使得元素能够快速移动,从而加速整个排序过程。增量序列的选取是希尔排序的关键,选择不当性能甚至会低于插入排序。10W个随机整数排序情况如下

image

阅读全文 »

大部分编程语言都支持异步编程,异步编程作为一种并发编程模型,可以使用少量的操作系统线程完成大量的并发任务。通过多线程也可以提高系统处理任务的效率。本文记录说明他们之间的差异与各自的优势,并会给出一个简单HTTP SERVER(Rust语言实现)多线程版本与异步版本的基准测试

并发模型

与常规的顺序编程相比,并发编程不那么标准化,不同语言有各自所支持的并发编程模型,并发性可以由不同的并发编程模型表达。以下为常见并发编程模型

阅读全文 »

文章主要记录我是如何使用Vector获取系统观测数据,并将观测数据存储到Clickhouse中

Clickhouse

Clickhouse由C++语言实现,是一种快速的面向列存储的OLAP数据库管理系统,支持通过SQL查询并实时生成分析报表

阅读全文 »