Shi Hai's Blog

随遇而安

软件架构设计数字化

软件架构设计 历史背景 软件架构这个词在1969年第一次被提出,但在20世纪90年代才得到快速发展。 为什么需要软件架构设计? 在我个人看来,软件产品的进化本质和生物的进化没有本质区别,都是往成本最低,运行最高效的方向上演进。怎么算是成本最低,运行最高效呢?那就是职责拆分。在一般情况下,现在的软件产品会被分为:操作系统、编程语言、框架、中间件、各类软件方法论等。 那有些同学可能会有疑问,现在...

记一个python异常返回导致内存泄露问题

一、问题背景 原始问题的介绍见此issue。 import weakref class A: pass ref = None def x(): global ref cool_var = A() ref = weakref.ref(cool_var) assert ref() try: 1/0 except Excepti...

分表性能优化

基本概念介绍 流式查询:返回一个迭代器从而降低内存占用。 面临的问题 单个数据库有20+个分表,每个分表有2w+条记录,直接用Mybatis和Shardingsphere查询所有表中数据,服务就会长期在查询数据库,结果耗时大概需要30分钟+。 导致这个现象的原因我估计是数据层通过流式计算和归并排序算法操作防止占用大量内存却导致时间开销增加了。 另外,对同一数据源的多条相同执行SQL会进行 技...

spring-boot学习实践

学习中,先把能在搜索引擎上找到的信息汇总一起方便学习。 Spring WebFlux Spring框架中的响应式堆栈框架。 Reactive Programming 响应式编程是关于异步和事件驱动的非阻塞式应用。 Reactor Spring框架在内部使用Reactor来提供自身的响应式支持。 Annotated Controllers TBD Response Entity WebFl...

BDD中的step可复用性调研

一、背景介绍 BDD开发测试用例一定时间后,give\when\then语句会越来越多,这会导致BDD用例描述持续恶化,主要表现在: 开发人员的思维和表达方式不同会导致多个语句表达一种行为; 没有复用组合语句会导致测试点越多,行为描述也会越多; 本文主要尝试从业内在BDD的应用重点看一下第二个问题是否有更好的解法或者组织形式。 二、可行性分析 两种维度的复用策略没有哪种更加优秀,而是需...

用例global级资源管理

用例资源管理是用例执行中的重要如何一环,各层级的用例有效管理能促进用例的 有效执行、提升资源利用率、优化用例执行时间。 一、业内实践 1.1 k8s社区 k8s中的e2e用例是直接通过命令行或者相关的client来创建被测资源,用例执行前在beforeEach()函数中对用例前置条件判断也是通过调用client进行判断。举例详情 out, err := exec.Command("gc...

《思考,快与慢》阅读随笔

序言 人们是根据从记忆中提取信息的容易程度来估测事情的重要程度的,而这往往也与媒体报道的广泛程度有关。常被提到的话题就在脑中变得鲜活,而其他的则会慢慢被遗忘。 要是问题很难,一时也想不到巧妙的主意,直觉就可能会发挥作用:脑海里可能会有个答案,但这个答案却不一定是原题的答案。 我们大脑有说不清楚的局限:我们对自己认为熟知的事物确信不疑,我们显然无法了解自己的无知程度,无法确切了解自己所生活的这...

《原则》阅读随笔

导言 不管我一生中取得了多大的成功,其主要原因都不是我知道多少事情,而是我知道在无知的情况下应该怎么做。 想要在市场上赚钱,一个人需要成为一个独立的思考者,习惯于打赌会发生与共识相反的情况,而且赌对。 我的历程 当所有人想法一样时(列如都相信买入“漂亮50股”包赚不赔),这一情况几乎必然会反映在价格中,而把赌注压在这上面,就有可能犯错。 当人们极度悲观时,他们就廉价甩卖,价格通常会变得非常低...

《人类简史》阅读随笔

第一部分 认知革命 第一章 人类:一种也没什么特别的动物 “思考”的代价 与其他动物相较,人类可说是早产儿,许多重要器官的发育都还不够完善。人类之所以会有突出的社交技巧(以及人类独有的社会问题)有一大原因也正出自此处。 个体诞生的背后就只是盲目的演化过程,而没有任何目的。 参考文献 《人类简史》

pytest学习

基础使用 TBD 插件管理 插件管理核心机制 插件的核心管理机制是pluggy,通过pluggy对插件进行注册和管理。pytest重新扩展了一个PluginManager来管理所有插件,初始化过程可以看这里。 插件类别 插件类别主要有三类: 内置插件(builtin plugins):从pytest项目的_pytest目录中加载,pytest的内置插件清单还可以看这里; 外部插件(exte...