image frame

Klus Futuredark's Blog

宜言饮酒,与子偕老。琴瑟在御,莫不静好。

基于设计模式的思考

研发的基本追求——尽可能规避“屎山”系统

必要性:

1、维护成本的增高(所有基于该系统的需求,其开发时长增加);
2、系统稳定性的降低(生产环境下该系统产生bug的概率增加,甚至导致不可用);

阅读更多...

Go依赖引入私有化代码仓库

背景

公司内部一个产品是一个项目,项目中无论是公共基础库还是工具封装库,都只是一个文件夹。

如项目PRO_FIRST目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
.PRO_FIRST
├── common
│   ├── XXX
├── util
│   ├── AAA
│   ├── BBB
│   ├── CCC
├── sys
│   ├── PPP
│   └── main.go
├── go.mod
├── go.sum
├── ...

如果只有一个产品(项目)还好,然而公司内部还有很多PRO_SECONDPRO_THIRD等等产品。

而这些产品对于common/util这种库是公用的,目前的公司内部就是直接在每个产品项目中都粘贴一份common/util的代码来使用。

我认为,这就是代码管理的经典”Bad Case”!!!

阅读更多...

关于具体和抽象的碎碎念

一个架构师应该具备的能力:

  • ① 丰富的软件设计和开发经验(业务拆解和功能拆解能力,行业标准理解);
  • ② 对内要有优秀的组织能力(团队管理);
  • ③ 对外要有极强的沟通和表达能力(向上汇报、跨部门沟通);
  • ④ 多面角色(产品、测试、开发、客户)视角的问题分析能力;
阅读更多...

Linux完整dpkg服务程序

背景

一个旧版本的服务部署包存在bug————如果网管界面服务启动的阶段(监听IP/端口)挂了,只会把启动服务的那个协程干掉,而不是进行重试。

在机器重启时,docker会自动启动服务程序,然而此时系统的网络环境可能还未初始化完成,就可能导致ip绑不上,从而导致了bug被发现。

但是外场客户不愿意升级新版本,我们就想了一个trick的补丁方式:写一个开启自启程序脚本,在上电开机后3分钟运行检测网管服务是否正常启动,否则自动重启一下。

阅读更多...

算法之零壹背包

问题描述

有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

思路

阅读更多...

Linux命名管道

前言

众所周知,Linux的IPC主要有多种方式,本文主要记录命名管道的使用。

使用

  1. 调用 mkfifo() 创建具名管道文件
  2. 读写两端分别调用 fopen() 打开
  3. 调用 fwrite() 写入;调用 fread() 读取
  4. 调用 unlink() 销毁具名管道文件

阻塞

  1. 如果以只写打开,则会阻塞写入直到有读取;如果以只读打开,则会阻塞直到有写入;如果以读写打开,那么就不会阻塞。
  2. 写入直到缓冲区满则阻塞;读取直到缓冲区空则阻塞。

PHP-PoloDB系列之PLDBValue结构

背景

上文提到,在导出的动态库中,并没有实现头文件所申明的那些 PLDBValue 结构相关的接口。

本文主要基于以下几个问题和目标展开:

  1. 实现 PLDBValue 相关(创建、销毁)的接口;
  2. 研究这个结构在数据库底层的具体用途;
阅读更多...
  • Copyrights © 2019-2024 Klusfq
  • Visitors: | Views: