LinEnum

Pytest权威教程21-API参考-04-钩子(Hooks)

爱⌒轻易说出口 提交于 2021-02-16 16:26:02
[toc] 返回: Pytest权威教程 钩子(Hooks) 参考: 编写插件。 引用可由conftest.py文件实现的所有Hook方法。 引导时的Hook方法 引导时的Hook方法要求尽早注册插件(内部和setuptools插件)。 pytest_load_initial_conftests( early_config , parser , args ): 在命令行选项解析之前实现初始conftest文件的加载。 注意:不会为 conftest.py 文件调用此Hook方法,仅适用于setuptools插件。 参数: early_config ( _pytest.config.Config ) - pytest配置对象 args ( list *]*) - 在命令行上传递的参数列表 解析器 ( _pytest.config.Parser ) - 添加命令行选项 pytest_cmdline_preparse( config , args ): ( 不推荐 )在选项解析之前修改命令行参数。 此钩子被认为已弃用,将在未来的pytest版本中删除。考虑 pytest_load_initial_conftests() 改用。 注意:不会为 conftest.py 文件调用此Hook方法,仅适用于setuptools插件。 参数: config ( _pytest.config

动态刻度可视化组件实现

拈花ヽ惹草 提交于 2021-02-16 13:41:28
前言 之前有个网友问我了一个很有价值的问题, 有关实现 数据可视化 的问题, 但是这个可视化问题不是一般的柱状图, 折现图之类的,而是 不规则刻度的数据可视化 .所以笔者思考了一下决定自己实现一个 动态刻度可视化组件 的方案, 来解决这一类的需求. 正文 最初的需求是这样的: 我们只需要输入文字, 数值比例, 就能生成如上图所示的刻度图.但是作为一名有追求的程序员, 需要对问题抽象化, 形成通用的解决方案,所以我们开始重组需求: 由上图我们可以拆解为一下几个需求点: 支持数值自定义 数值单位自定义 支持刻度组件宽度自定义 支持刻度线数量自定义 支持刻度变化幅度自定义 传入已有进度比例,即激活区范围 支持刻度样式自定义 支持数值样式自定义 支持自定义说明文本以及说明文本自定义 以上就是笔者挖掘的通用需求,当然有其他需求也可以渐进的增加. 确认了以上需求之后,我们开始选择技术选型, 笔者之前常用的技术栈是 vue 和 react ,所以接下来我们初步确认该组件采用如下技术方案: react + typescript + umi-library 如果大家擅长使用 vue , 也可以, 笔者之前也写过如何搭建 vue 的 组件库 相关的文章,感兴趣可以学习了解一下, 其本质思想是一致的. 接下来我们开始实现动态刻度可视化组件. 如果对umi不熟悉的,可以参考笔者之前写的文章

【译】浅谈SOLID原则

99封情书 提交于 2021-01-16 06:01:55
SOLID原则是一种编码的标准,为了避免不良设计,所有的软件开发人员都应该清楚这些原则。SOLID原则是由Robert C Martin推广并被广泛引用于面向对象编程中。正确使用这些规范将提升你的代码的可扩展性、逻辑性和可读性。 当开发人员按照不好的设计来开发软件时,代码将失去灵活性和健壮性。任何一点点小的修改都非常容易引起bug。因此,我们应该遵循SOLID原则。 首先我们需要花一些时间来了解SOLID原则,当你能够理解这些原则并正确使用时,你的代码质量将会得到大幅的提高。同时,它可以帮助你更好的理解一些优秀软件的设计。 为了理解SOLID原则,你必须清楚接口的用法,如果你还不理解接口的概念,建议你先读一读这篇文章。 下面我将用简单易懂的方式为你描述SOLID原则,希望能帮助你对这些原则有个初步的理解。 单一责任原则 一个类只能因为一个理由被修改。 A class should have one, and only one, reason to change. 一个类应该只为一个目标服务。并不是说每个类都只能有一个方法,但它们都应该与类的责任有直接关系。所有的方法和属性都应该努力做好同一类事情。当一个类具有多个目标或职责时,就应该创建一个新的类出来。 我们来看一下这段代码: 1 public class OrdersReportService { 2 3 public List

《数据结构与算法》—— O(3N)=O(N) ?

风格不统一 提交于 2020-11-23 09:50:20
<div class="output_wrapper" id="output_wrapper_id" style="font-size: 16px; color: rgb(62, 62, 62); line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%); background-size: 20px 20px; background-position: center center;"><blockquote style="line-height: inherit; display: block; padding: 15px 15px 15px 1rem; font-size: 0.9em; margin: 1em

数据库中的主键与外键的关系,通俗易懂

大兔子大兔子 提交于 2020-11-14 06:43:09
一、什么是主键、外键: 关系型 数据库 中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 课程表(课程编号,课程名,学分) 其中课程编号是唯一的,课程编号就是一个主键 成绩表(学号,课程号,成绩) 成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键 成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键 同理 成绩表中的课程号是课程表的外键 定义主键和外键主要是为了维护关系数据库的完整性,总结一下: 1.主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。 身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。 2.外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。 比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。 二、 主键、外键和索引的区别 主键、外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值

A3C——一种异步强化学习方法

 ̄綄美尐妖づ 提交于 2020-10-31 06:35:22
目录 1、简介 2、算法细节 3、代码 3.1 主结构 3.2 Actor Critic 网络 3.3 Worker 3.4 Worker并行工作 4、参考 1、简介 A3C是Google DeepMind 提出的一种解决 Actor-Critic 不收敛问题的算法。我们知道DQN中很重要的一点是他具有经验池,可以降低数据之间的相关性,而A3C则提出降低数据之间的相关性的另一种方法: 异步 。 简单来说:A3C会创建多个 并行 的环境, 让多个拥有副结构的 agent 同时在这些并行环境上更新主结构中的参数. 并行中的 agent 们互不干扰, 而主结构的参数更新受到副结构提交更新的不连续性干扰, 所以更新的相关性被降低, 收敛性提高. 2、算法细节 A3C 的算法实际上就是将 Actor-Critic 放在了多个线程中进行同步训练. 可以想象成几个人同时在玩一样的游戏, 而他们玩游戏的经验都会同步上传到一个中央大脑. 然后他们又从中央大脑中获取最新的玩游戏方法。 这样, 对于这几个人, 他们的好处是: 中央大脑汇集了所有人的经验, 是最会玩游戏的一个, 他们能时不时获取到中央大脑的必杀招, 用在自己的场景中. 对于中央大脑的好处是: 中央大脑最怕一个人的连续性更新, 不只基于一个人推送更新这种方式能打消这种连续性. 使中央大脑不必像 DQN , DDPG

Java实现大批量数据导入导出(100W以上) -(一)导入

断了今生、忘了曾经 提交于 2020-10-25 11:23:57
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库。可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库。 大数据量报表导出请参考: Java实现大批量数据导入导出(100W以上) -(二)导出 一、为什么一定要在代码实现 说说为什么不能通过SQL直接导入到数据库,而是通过程序实现: 1. 首先,这个导入功能开始提供页面导入,只是开始业务方保证的一次只有<3W的数据导入; 2. 其次,业务方导入的内容需要做校验,比如门店号,商品号等是否系统存在,需要程序校验; 3. 最后,业务方导入的都是编码,数据库中还要存入对应名称,方便后期查询,SQL导入也是无法实现的。 基于以上上三点,就无法直接通过SQL语句导入数据库。那就只能老老实实的想办法通过程序实现。 二、程序实现有以下技术难点 1. 一次读取这么大的数据量,肯定会导致服务器内存溢出; 2. 调用接口保存一次传输数据量太大,网络传输压力会很大; 3. 最终通过SQL一次批量插入,对数据库压力也比较大,如果业务同时操作这个表数据,很容易造成死锁。 三、解决思路 根据列举的技术难点我的解决思路是: 1. 既然一次读取整个导入文件,那就先将文件流上传到服务器磁盘,然后分批从磁盘读取(支持多线程读取),这样就防止内存溢出; 2. 调用插入数据库接口也是根据分批读取的内容进行调用; 3.

gdb命令调试技巧

徘徊边缘 提交于 2020-10-03 06:34:40
gdb命令调试技巧 一、信息显示 1、显示gdb版本 (gdb) show version 2、显示gdb版权 (gdb) show version or show warranty 3、启动时不显示提示信息gdb -q exe 或者.bashrc 添加alias gdb="gdb -q",重启shell 4、退出时不显示提示信息(gdb) set confirm off 5、输出信息多时不会暂停输出(gdb)set pagination off 二、函数 1、列出函数的名字(gdb) info functions 2、是否进入待调试信息的函数(gdb)step s 3、进入不带调试信息的函数(gdb)set step-mode on 4、退出正在调试的函数(gdb)return expression 或者 (gdb)finish 5、直接执行函数(gdb)start 函数名 call函数名 6、打印函数堆栈帧信息(gdb)info frame or i frame 7、查看函数寄存器信息(gdb)i registers 8、查看函数反汇编代码(gdb)disassemble func 9、打印尾调用堆栈帧信息(gdb)set debug entry-values 1 10、选择函数堆栈帧(gdb)frame n 11、向上或向下切换函数堆栈帧(gdb)up n down n 三

Linux基本命令

好久不见. 提交于 2020-08-18 07:28:40
Linux基本命令 echo(printf)即输出 -n:不换行; -e:使用\所引导的转义序列生效(需使用引号,引号前需要空格); \n:换行; \t:水平制表符(相当于tab键); 2.mkdir mkdir - make directories,创建新目录; -p, --parents:在创建目录的时候,如果其父目录不存在,则优先创建之; -v, --verbose:为每个被创建的目录显示一条信息; 3.pwd:显示当前工作目录的名字 4.ls:列表目录的内容 -a --all:显示所有文件,包括隐藏文件; -A, --all-most:显示出了“.”“..”以外的所有文件,包括隐藏文件; --color[=WHEN]:以不同的颜色来显示查询结果; -d,--directory:显示目录本身,而不是目录中的文件名; -h --human-readble:在显示文件大小的时候,显示为更加易读的格式;通常与-1选项一同使用; -l:使用长列表格式显示文件的详细属性: - 5.rm rm - remove files or directory rm [OPTION]... FILE... -f, --force:暴力,强制删除(不推荐使用); -r, -R, --recursive:递归删除目录及目录中的内容; 6.nano:文本模式下的全屏编辑工具。 ^:脱字符,表示crtl键

Java实现大批量数据导入导出(100W以上) -(一)导入

一曲冷凌霜 提交于 2020-08-15 15:15:30
最近业务方有一个需求,需要一次导入超过100万数据到系统数据库。可能大家首先会想,这么大的数据,干嘛通过程序去实现导入,为什么不直接通过SQL导入到数据库。 大数据量报表导出请参考: Java实现大批量数据导入导出(100W以上) -(二)导出 一、为什么一定要在代码实现 说说为什么不能通过SQL直接导入到数据库,而是通过程序实现: 1. 首先,这个导入功能开始提供页面导入,只是开始业务方保证的一次只有<3W的数据导入; 2. 其次,业务方导入的内容需要做校验,比如门店号,商品号等是否系统存在,需要程序校验; 3. 最后,业务方导入的都是编码,数据库中还要存入对应名称,方便后期查询,SQL导入也是无法实现的。 基于以上上三点,就无法直接通过SQL语句导入数据库。那就只能老老实实的想办法通过程序实现。 二、程序实现有以下技术难点 1. 一次读取这么大的数据量,肯定会导致服务器内存溢出; 2. 调用接口保存一次传输数据量太大,网络传输压力会很大; 3. 最终通过SQL一次批量插入,对数据库压力也比较大,如果业务同时操作这个表数据,很容易造成死锁。 三、解决思路 根据列举的技术难点我的解决思路是: 1. 既然一次读取整个导入文件,那就先将文件流上传到服务器磁盘,然后分批从磁盘读取(支持多线程读取),这样就防止内存溢出; 2. 调用插入数据库接口也是根据分批读取的内容进行调用; 3.