从问题角度来思考设计模式(2) – 结构编

目录

  1. 生成编
  2. 结构编
  3. 行为编

让API返回信息适配多样性

  • 改造前
FooAPI fooAPI = new FooAPI(lat, lng);
FooPlace place = new FooPlace();
place.setAddress(fooAPI.getPostalCode() + " " + fooAPI.getAddress()); // 邮编 **市**区
place.setStation(
    new StringJoiner(",")
    .add(fooAPI.getStation1())
    .add(fooAPI.getStation2())
    .add(fooAPI.getStation3())
    .toString());  //A车站,B车站,C车站

上面代码是API返回信息整形用例。这里只使用了FooAPI,未来如果返回信息的整形方式不变的话,倒也没有什么问题。但从易维护的角度思考,这称不上一个好的设计。
Continue reading

从问题角度来思考设计模式(1) – 生成编

目录

  1. 生成编
  2. 结构编
  3. 行为编

简介

关于设计模式可以理解为,那些经常会遇到的问题以及如何解决所洗练出来的总结。所以我们在考虑进行设计时,首先要做的就是查询当前所面临的问题,是否已经有很好的解决方案,而不是闭门造车。身边有些同事喜欢需求来了,直接上来就撸代码,认为为了迎合设计模式而设计的工作,会有过度设计的嫌疑。什么时候是导入新工具,新技术的最佳时机?当一个事物让人难以忍受的时候,这时改变所带来的团队收益远大于痛苦程度,就可以很平缓地推进。反之,强推工具反而引来的不是技术上的问题,而是人为的抵制。是不是很奇妙!

本文主要通过问题配合设计模式,来说明设计模式所带来的前后效果,加深大家各种模式的印象。

Continue reading

linux删除超过指定天数的文件

场景

现在流行的云服务器自身所附带的硬盘大小是小的,如阿里云是按大小增量收费。不过通常我们也是将程序代码部署到云服务器作为一个应用服务器,也不会将云服务器当成一个文件服务器来用。
这就有一个问题,我们的日志文件,该如何保存。有些访问频繁的接口/页面很快就会将自身的磁盘给填充满。如何解决这种问题,又保证日志文件不丢失?网上一搜就会有很多解决方案。
以前见过有人将日志文件定期同步到dropbox,腾讯的微云网盘号称T级别。题外话了,本文主要介绍,如何删除已经同步过的旧文件。

如何定位旧文件

find ./ -mtime +30 -name "*.gz" | xargs ls -ltrh

上条命令主要功能是查询当前目录下时间超过30天.gz结束所有文件名,并将其信息打印出来。关于find -mtime的详细用法,可以百度下。

Continue reading

类图中的聚合关系(aggregation)和组合关系(composition)比较

前言

在画类图时,空心菱形(聚合关系)和实心菱形(组合关系)两者分别在什么场景下使用?由于两者概念有些相近,相信搞混的人还是存在的。本文通过类图对比来说明两者的根本区别。

X先生的回答

  • 空心菱形代表has - a 即持有/拥有的意思
  • 实心菱形代表part - of 即 ~的一部分的意思

Continue reading

获取ubuntu键盘按键记录

简介

通常一台服务器都会开放权限给运维,开发等用户。随着服务器台数增长,用户交接/离职等,服务器的管理及安全也就成为一个重要的课题。如员工离职在服务器上留后门或恶意代码,这样的场景如何追踪该员工?
没错,可以借用键盘按键记录器。本文主要介绍如何通过logkeys来记录用户按键记录。

安装

sudo apt-get install logkeys

Continue reading