生成器模式
https://refactoringguru.cn/design-patterns/builder
意图生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。
问题假设有这样一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作。这些初始化代码通常深藏于一个包含众多参数且让人基本看不懂的构造函数中; 甚至还有更糟糕的情况, 那就是这些代码散落在客户端代码的多个位置。
例如, 我们来思考如何创建一个 房屋House对象。 建造一栋简单的房屋, 首先你需要建造四面墙和地板, 安装房门和一套窗户,然后再建造一个屋顶。 但是如果你想要一栋更宽敞更明亮的房屋, 还要有院子和其他设施 (例如暖气、 排水和供电设备), 那又该怎么办呢?
最简单的方法是扩展 房屋基类, 然后创建一系列涵盖所有参数组合的子类。 但最终你将面对相当数量的子类。 任何新增的参数 (例如门廊类型)都会让这个层次结构更加复杂。
另一种方法则无需生成子类。 你可以在 房屋基类中创建一个包括所有可能参数的超级构造函数, 并用它来控制房屋对 ...
建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
1npm install --registry=https://registry.npmmirror.com
Docker镜像导出导入
通过容器查看当前容器1docker ps -a
导出镜像1docker export 容器id > image.tar
导入镜像1docker import 容器名 < image.tar
通过镜像查看镜像1docker images
导出镜像1docker save 镜像id > image.tar
导入镜像1docker load < image.tar
python pytest测试框架介绍 - 日志实时输出
在使用pytest进行自动化测试时,需要将实时日志打印出来,而不是跑完后才在报告中出结果。不过,好在pytest在3.3版本开始,就支持这一功能了,而不用再像nose一样,再去装第三方插件。网上也有相关实时的日志输入说明,但我尝试后,不是我想要的,比如:pytest输出Log所以,有两种方法解决
1.在当前文件夹下写pytest.ini或tox.ini或setup.cfg文件,然后将日志相关写在里面,如下:12345[pytest]log_cli = 1log_cli_level = INFOlog_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s)log_cli_date_format=%Y-%m-%d %H:%M:%S
这时就可以正常打印日志出来。
2.直接用pytest -o方式重写,这个功能在pytest 3.4之后才实现,如下pytest pytest_lean2.py -o log_cli=true -o log_cli_level=INFO
antd2 vue 升级到 antd3 时 table 报错处理
Warning: [ant-design-vue: Table] column.slots is deprecated. Please use v-slot:headerCell v-slot:bodyCell instead.
and3 table 即将废除 slots 写法
antd3 table 新写法
elasticsearch启动不起来,错误码78解决办法
ProblemYou want to run ElasticSearch using docker, but the container immediately stops again using this error message
elasticsearch exited with code 78
or
elasticsearch2 exited with code 78
Solution:If you look through the entire log message, you’ll find lines like
elasticsearch | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
切换到root用户
执行命令:
1sysctl -w vm.max_map_count=262144
查看结果:
1sysctl -a|grep vm.max_map_count
显示:
vm.max_map_cou ...
git修改/添加/删除远程仓库
修改远程仓库地址1git remote set-url origin <remote-url>
仓库路径查询查询1git remote -v
添加远程仓库1git remote add origin <你的项目地址> //注:项目地址形式为:https://gitee.com/xxx/xxx.git或者 git@gitee.com:xxx/xxx.git
删除指定的远程仓库1git remote rm origin
判断一个字典类型的数据结构中是否存在某个键(包括子层级的键)-python
123456789101112131415161718192021222324252627def key_exists(d, key): # 如果键在当前字典的第一层,直接返回 True if key in d: return True # 递归检查所有子字典 for value in d.values(): if isinstance(value, dict): if key_exists(value, key): return True # 如果在所有层级都没有找到键,返回 False return False# 示例data = { "level1": { "level2": { "target_key": "value" } }, "anoth ...
python 实现倒排索引,建立简单的搜索引擎
如下,一个数据表docu_set中有三篇文章的,d1,d2,d3,如下
12345docu_set = { 'd1': 'i love shanghai', 'd2': 'i am from shanghai now i study in tongji university', 'd3': 'i am from lanzhou now i study in lanzhou university of science and technolgy',}
下面用这张表做一个简单的搜索引擎,采用倒排索引首先对所有文档做分词,得到文章的词向量集合
123456all_words = []for i in docu_set.values(): cut = i.split() all_words.extend(cut)set_all_words = set(all_words)print(set_all_words)
首先对 ...
python-判断字符串是数字
123456789101112131415161718def is_number(s): if s is None: return False try: float(s) return True except ValueError: pass try: import unicodedata unicodedata.numeric(s) return True except (TypeError, ValueError): pass return False