Pythonps应用程序框架中,创建按钮时,调用框架类frame的哪一个方法

做软件测试应该怎样规划自己?

本囚16年毕业技术渣到不行,因为之前的公司都没有要求过要会Python自动化测试这些现在有些迷茫。求助. . .

接触了不少同行由于他们之前一直莋手工测试,现在很迫切希望做自动化测试这其中不乏工作5年以上的人。

本人从事软件自动化测试已近5年从server端到web端,从API到mobile切身体会箌自动化带来的好处与痛楚,在此做个分享

从实习到毕业一直从事测试开发工作,比较喜欢这个岗位同时对这个岗位的发展,相关的噺技术保持着高度的关注以我每次换工作都能涨薪40%以上的工作经历,来阐述一下软件测试岗在市场需求的现状

软件测试工程师成长进階分为8个阶段,正式进入:

自动化必经之路:互联网程序原理

HTML、CSS基本内容学习为什么测试里要学习开发?因为很多自动化测试问题都出洎于开发基础

Web前端开发脚本: JavaScript最主流的脚本学习,同样的这也会在自动化测试中涉及,在一些工具中其实也经常用到动态脚本也是JavaScript語言。

开发者调试工具测试应用: 虽然浏览器的F12被命名为开发者工具但实际上测试不管在功能测试还是自动化测试中,都起到了很关键嘚作用如解析HTML,定位元素调试脚本,监控网络抓包等等

互联网程序网络架构: 通过网络架构详细理解互联网程序的诞生,逻辑细节互联网通讯原理又是如何将数据传递到其他计算机的,TCPUCP,HTTP等等协议的关系又是什么。

HTTP协议数据结构分析: 完整解析HTTP协议数据结构包括Request、Response数据格式,Header的定义和用法各种状态代表什么如何辨别错误。分析协议中参数的位置rest结构,各种常见的body数据形式解析方式,常見数据解析错误的原因

软件测试工程师必备MySQL数据库知识,不能仅仅只是停留在基本的增删改查上

MySQL数据库测试应用:
MySQL环境搭建,客户端Navicat嘚基本使用与数据操作学习并巩固基本的SQL语法,增删改查缺一不可掌握各种条件的使用方法。

MySQL高级查询: 查询升级掌握多表查询,孓查询查询分组,统计函数的使用并对经典面试题进行学习与分析。

MySQL自定义函数: 既然有内置函数当然也不缺自定义函数的位置,吔是经常会使用到的这就好比任意一种开发语言一样都离不开函数的定义与使用。

数据库必不可少的存储过程通常也叫SP,如何定义洳何测试?怎么样使用更安全测试到底用存储过程还能做什么更多便于测试的内容。

MySQL事物与编程:
数据库事务使用案例索引的原理与使用,数据库SQL编程在测试中的应用如何用其快速精准的产生大量指定的测试数据。

只有了解抓包的原理才能真正去用好一个适合的工具,选择合适的方向和方法否则都是徒劳的。

抓包工具选择: 抓包工具的分类与功效什么样的项目适合哪种工具,如何去辨别工具的優势

Fiddler基础功能: 作为专业的HTTP体系的抓包工具,详细介绍其工具原理如何过滤数据,如何搜索想要的数据如何对web,非web手机,HTTPS协议等各种环境进行抓包

Fiddler高级功能: 学会使用其进行接口测试,断电脚本等方式进行数据的修改,替换模拟数据进行接口Mock测试,创建自己萣义的菜单功能

Wireshark: 与其说是抓包,更是一种抓包后的分析工具在各个系统下利用其它与系统一体化的抓包工具进行数据抓取整理并展礻,有着强大的过滤和分析功能

Sniffer: 黑科技抓包工具,有多种版本非常专业的抓包工具。

接口测试神器你绕不开的强大工具:Jmeter,小巧靈活:Postman

Jmeter接口测试入门:
Jmeter简介,环境准备目录结构介绍 ,如何录制脚本以及基础组件的使用,线程、作用域、HTTP请求、定时器、断言等等

Jmeter接口测试进阶使用: Jmeter逻辑控制、前置处理器、后置处理器、监视器、结果树,如何参数化、正则表达式关联、事务、检查点等等并帶领大家对带有token等动态数据的项目进行实战演练。

Jmeter接口测试高级功能: Jmeter脚本思考时间、随机时间、线程启动间隔、并发集合点、联机远程調用webservice、websocket、jdbc、命令调用等等。

Postman接口测试工具使用: 行业标准HTTP、rest接口测试神器基本请求、分组保存、动态变量、脚本、数据关联、参数化、自动断言、批量运行、持续集成。思路类似其他接口工具避免泛滥学习。

了解自动化的目的熟练掌握TestNG & Unittest自动化框架,以及断言与日志處理

自动化框架思路引导: 我们做自动化到底为了什么?节省人力、加快速度、还是让机器代替手动、还是提升自我应该如何建立思蕗,而非无脑进坑任机器摆布

Java & Python3开发环境及基本语法: Java&Python开发环境搭建,基础语法入门让不会代码的以最快速度入门,方便适应后续自动囮测试开发内容学习代码够用即可,并不是学得越多越好

Java&Python3集合类型与面向对象开发: Java&Python各种基本类型、集合数据类型的理解与操作,循環语句、判断语句面向对象的开发,函数的使用类的使用

Selenium3环境与浏览器驱动配置: 基于selenium3的web自动化环境搭建,正确的浏览器配置不再為起不了浏览器而烦恼。支持IE、Firefox、Chrome等等

Selenium3多种定位及动态操作: selenium3常见定位方法属性和值的获取,如何动态判断不一定存在的元素复杂的網页结构,需要多步骤操作的元素等等

特殊情况处理(js、特殊控件等): selenium3自动化测试中常见的特殊情况处理,如日期、控件、智能等待、文件上传下载、网页嵌套结构各种弹窗的处理方式,cookie处理JavaScript脚本调用等

自动化框架断言与日志处理: 自动化中最重要的是什么?作为測试当然是断言没有断言的自动化毫无用处,如何展示日志与结果是自动化测试的根本PageObject框架设计模式

PageObject框架设计模式: 到底是做什么的洳何更好的快速管理控件,从此做起

六、接口与移动端自动化

专业接口调用、测试解决方案。组建完整的web和接口自动化框架Appium整体使用。

Python Requests、Java HTTPclient接口框架都是专业的接口调用、测试的解决方案,使用简单快速结合工具的使用方式和功能,快速上手并对其操作解决其中的疑难杂症。

web+自动化框架整合: 自动化测试是相通的如何将web与接口、甚至更多的测试类型和方向结合起来,组成完整的自动化框架

Appium环境搭建: Appium环境相对复杂,针对Android系统进行完整的环境搭建演练解决环境上的问题,并进行基本的自动化操作

Appium自动化实战与框架结合: Appium整体使用与web自动化类似,引导使用典型功能并针对一款APP进行实战操作。

揭开TestOps的面纱持续集成Jenkins框架烂熟于心。

构建敏捷测试运维架构体系:
敏捷测试是什么为什么需要敏捷,行业都提到的devops又是什么TestOps能做什么

持续集成Jenkins框架实战: 持续集成最常见的一套框架,介绍Jenkins操作、权限、系统管理等常用构建与运行实例讲解。

静态扫描测试Sonar: 一款自动化的代码扫描工具便捷式快速扫描代码中的问题,做到提前发现統一规范,自动化中的代码测试神器

八、性能测试&安全测试

软件测试的彼岸:性能测试和安全测试,选个方向努力爬坑

如何学习性能測试,性能测试到底该怎么学习使用什么工具?工具并不代表性能接口的基础对性能测试非常重要,而工具只是辅助更多的是思路囷策略。你不会并不是分析而是准备阶段

loadrunner脱离浏览器录制专题: IE无法启动被测网站?打不开浏览器程序无法在浏览器中被打开?这些嘟没关系还是一样能录制,但录制是偷懒专用的对于学习有一定的辅助作用,也会带入无法脱离的坑

性能测试工具操作实践: loadrunner、jmeter,囿了前面的基础使用看懂脚本不是问题,带上关键的参数化、动态数据关联、事物、日志大部分的脚本都可以搞定进行实践。

系统监控方案实施: 工具自带监控系统监控?JVM内部监控数据库监控?各种监控的意义何在如何在各种情况下精准监控数据。

安全测试起源與工具介绍: 应该如何进行安全测试安全测试都有哪些分类?都会用到什么样的工具各自的作用又是什么,如web漏洞扫描端口扫描,系统扫描等

web安全测试手工实战: 接口测试在安全中的作用,不会手动的安全测试那就永远无法理解自动化以后产出的结果。

安全扫描笁具测试实践: 实际介绍以及使用APPscan、awvs等专业安全扫描工具

企业安全建设(SDLC): 企业应该如何进行安全建设,制定更安全的软件生命周期从哪些方面进行着手。

内容的价值取决于你的实际行动

新人学习自动化测试,要掌握一门门开发语言掌握一些基础的知识,多在社區交流提升自己找问题以及解决问题的能力。加油现在就行动,总比在路上观望要好

如果你正处于想学或正在学习Python全栈自动化中,吔喜欢软件测试这个行业的话可以加入我们一起学习喔。群里有行业深潜多年的测试人技术分析讲解也会有各项测试资料、面试题发放。期待你的加入!

最后祝愿你能成为一名优秀的软件测试工程师!

喜欢的话欢迎【评论】、【点赞】、【关注】礼貌三连~

}

MySQL的最初的核心思想主要是开源、简便易用。其开发可追溯至1985年而第一个内部发行版本诞生,已经是1995年到1998年,MySQL已经可以支持10中操作系统了其中就包括win平台。此文档將从安装开始带领着读者一步步深入了解mySQL相关功能该文由作者多年实战经验的总結而组成,其中包括如下内容:
  • 多种SQL优化分析手段
  • mySQL横向忣垂直折分

  
  • 日志文件它们位于/var/log目录

  

# 从服务器用于记录中继日志相关信息的文件,默认名为数据目录中的relay-log.info。

# 在一个事务中binlog为了记录sql状态所持囿的cache大小如果你经常使用大的,多声明的事务可以增加此值来获取更大的性能,所有从事务来的状态都被缓冲在binlog缓冲中然后再提交後一次性写入到binlog中,如果事务比此值大会使用磁盘上的临时文件来替代,此缓冲在每个链接的事务第一次更新状态时被创建

# 最大的二進制Cache日志缓冲尺寸。

# 二进制日志文件的最大长度(默认设置1GB)一个二进制文件信息超过了这个最大长度之前,MySQL服务器会自动提供一个新的二进制ㄖ志文件接续上

# 超过7天的binlog,mysql程序自动删除(如果数据重要,建议不要开启该选项)

# 指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能对于内存在4GB左右的服务器来说,该参数可设置为256MB或384MB

# 注意:如果该参数值设置得过大反而会使服务器的整体效率降低!

# 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样该参数对应的分配内存也是每个连接独享。

# 设置进行随机读的时候所使用的缓冲区此参数和read_buffer_size所设置的Buffer相反,一个是顺序读的时候使用一个是随机读的时候使用。但是两者都是针对与线程的设置每个线程都可以产生两种Buffer中的任何一个。默認值256KB最大值4GB。

# 如果经常性的需要使用批量插入的特殊语句来插入数据,可以适当调整参数至16MB~32MB,建议8MB

# 实现MySQL不区分大小。(发开需求-建议开启)

# 从庫可以跳过的错误数字值(mysql错误以数字代码反馈,全的mysql错误代码大全,以后会发布至博客)

# 在做主从的情况下,设置不需要同步的库。

# 表示本机的序列号为1,如果做主从或者多实例,serverid一定不能相同。

# 当需要对于执行REPAIR, OPTIMIZE, ALTER 语句重建索引时MySQL会分配这个缓存,以及LOAD DATA INFILE会加载到一个新表它会根据朂大的配置认真的分配的每个线程。

# 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.

# 自动检查和修复没有适當关闭的 MyISAM 表.

用来设置InnoDB存储的数据目录信息和其他内部数据结构的内存池大小ps应用程序框架里的表越多,你需要在这里面分配越多的内存对于一个相对稳定的应用,这个参数的大小也是相对稳定的也没有必要预留非常大的值。如果InnoDB用广了这个池内的内存InnoDB开始从操作系統分配内存,并且往MySQL错误日志写警告信息默认为1MB,当发现错误日志中已经有相关的警告信息时就应该适当的增加该参数的大小。

# InnoDB使用┅个缓冲池来保存索引和原始数据设置越大,在存取表里面数据时所需要的磁盘I/O越少强烈建议不要武断地将InnoDB的Buffer Pool值配置为物理内存的50%~80%,應根据具体环境而定

# 设置配置一个可扩展大小的尺寸为128MB的单独文件,名为ibdata1.没有给出文件的位置所以默认的是在MySQL的数据目录内。

# InnoDB中的文件I/O线程通常设置为4,如果是windows可以设置更大的值以提高磁盘I/O

# 你的服务器有几个CPU就设置为几建议用默认设置,一般设为8

# 设置为0就等于innodb_log_buffer_size队列满后在统一存储,默认为1也是最安全的设置。

# 默认为1MB通常设置为8~16MB就足够了。

# 确定日志文件的大小更大的设置可以提高性能,但也會增加恢复数据库的时间

# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3

# InnoDB主线程刷新缓存池中的数据。

# InnoDB事务被回滚の前可以等待一个锁定的超时秒数InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用locak tables 语句注意到锁定设置默认值是50秒。

# InnoDB为独立表空间模式每个数据库的每个表都会生成一个数据空间。0关闭1开启。

# 1、每个表都有自己独立的表空间

# 2 、每个表的数据和索引都会存茬自己的表空间中。

# 3、可以实现单表在不同的数据库中移动

# 4、空间可以回收(除drop table操作处,表空不能自己回收)

# 设定在网络传输中一次消息传输量的最大值。系统默认值为1MB最大值是1GB,必须设置为1024的倍数单位为字节。


  
mySQL安装完后默认只能在本机进行SQL客户端的访问,如果伱要使用一台远程主机比如説:
为了能够远程访问mySQL你必须配置远程可连接的用户信息。
为了简单我们可以配置一个用户,用户名为“username@%”这个%代表支持远程任何IP地址的客户端可以访问这台mySQL主机。
但是一般来説为了安全,我们会把username@后面跟上一个具体的ip
所以如果在mySQL刚安裝完毕时,root用户只可以作本地访问为了开启远程访问功能我们一般都有一个root@%这样的用户名。

1. 先登录本地mysql通过命令:

2. 在mysql命令符内执行如下語句:

在我的配置中有这么一段描述

此处注意了网上对于“慢查询”的配置,很多都已经deprecated了请参照我上述这种写法

  • 首先我开启了query_log功能。
  • 在日志查询中我使用的是log-short-format格式而不是long-format因为这样我的mySQL日志更紧凑,要不然一天下来光统计这些日志就要耗掉G的空间了
  • 我指明了我的“慢查询”日志生成的路径位于何处。
  • 我配置了对于超过2秒的查询SQL全部记录在慢查询日志中的功能
  • 同时,我还开启了在查询时凡是没有鼡到索引的SQL全部记录在慢查询日志中

我们在sql客户端执行如下语句

这样看,似乎有一些不太习惯对不对
如果这个日志文件中有成千上百個日志,我们如果需要统计 Top10最慢的那些SQL分别是哪些。怎么办?

这个问题我曾经在面试时碰到过有人説“精通MYSQL“,于是我问了他们这麼一个问题结果是超过90%的人无法回答。
mySQL最重要的两种存储引擎InnoDB与Myisam这是基础,一定要知道下面来看。

每个MyISAM在磁盘上存储成三个文件苐一个文件的名字以表的名字开始,扩展名指出文件类型


  • .frm文件存储表定义。

InnoDB:基于磁盘的资源是InnoDB表空间数据文件和它的日志文件InnoDB 表的夶小只受限于操作系统文件的大小,一般为 2GB

这是一道很早的面试题:

答案:如果表的类型是MyISAM那么是18。 

因为MyISAM表会把自增主键的最大ID记录到數据文件里重启MySQL自增主键的最大ID也不会丢失。 

InnoDB表只是把自增主键的最大ID记录到内存中所以重启数据库或者是对表进行OPTIMIZE操作,都会导致朂大ID丢失


其他) 为什么MyISAM会比Innodb 的查询速度快。

INNODB在做SELECT的时候要维护的东西比MYISAM引擎多很多;


  • 数据块,INNODB要缓存MYISAM只缓存索引块,  这中间还有换進换出的减少; 
  • innodb寻址要映射到块再到行,MYISAM 记录的直接是文件的OFFSET定位比INNODB要快;
  • INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护;

通过为每一行记录添加两个额外的隐藏的值来实现MVCC这两个值一个记录这行数据何时被创建,另外一个记录这行数据何时过期(或者被删除)但是InnoDB并不存储这些事件发生时的实际时间,相反它只存储这些事件发生时的系统版本号这是一个随着事务的创建而不斷增长的数字。每个事务在事务开始时会记录它自己的系统版本号每个查询必须去检查每行数据的版本号与事务的版本号是否相同。让峩们来看看当隔离级别是REPEATABLE READ时这种策略是如何应用到特定的操作的:

SELECT InnoDB必须每行数据来保证它符合两个条件:

InnoDB必须找到一个行的版本它至少偠和事务的版本一样老(也即它的版本号不大于事务的版本号)。这保证了不管是事务开始之前或者事务创建时,或者修改了这行数据的时候这行数据是存在的。

这行数据的删除版本必须是未定义的或者比事务版本要大这可以保证在事务开始之前这行数据没有被删除。

MySQL5.0.37版夲以上支持PROFILING调试功能让您可以了解SQL语句消耗资源的详细信息。因为它需要调用系统的getrusage()函数所以只是在Linux/Unix类平台上才能使用,而不能在Windows平囼上使用而且,PROFILING是针对处理进程(process)而不是线程(thread)的服务器上的其他应用,可能会影响您的调试结果因此,这个工具适合开发过程中的调試如果要在生产环境中调试使用,则要注意它的局限性

查看是否已经启用profile,默认是关闭的

启用profiling(变量profiling是用户变量每次都得重新启用)


為避免之前已经把 SQL 存放在 QCACHE 中 建议在执行 SQL 时, 强制 SELECT 语句不进行 QCACHE 检测这样可以提交分析的准确性。

使用show profile查询最近一条语句的执行信息

查看茬服务器上执行语句的列表(查询id,花费时间语句)


}

重磅干货第一时间送达

算法工程师如何获得技术方面的成长?本文从工程基础、算法基础、算法工程交叉、工程深入方向、算法深入方向等方面给出建议并设计了自峩考核模块,帮助大家查漏补缺自我提升。

这是一份写给公司算法组同事们的技术路线图其目的主要是为大家在技术路线的成长方面提供一些方向指引,配套一些自我考核项可以带着实践进行学习,加深理解和掌握

内容上有一定的通用性,所以也分享到知乎上欢迎大家给出建议,如有错误纰漏还望不吝指正 :)

对于不同级别的算法工程师技能要求,我们大致可以分成以下几个层级:

初级:可以在一些指导和协助下独立完成开发任务具体到算法方面,需要你对于工具框架建模技术,业务特性等方面有一定的了解可以独立实现一些算法项目上的需求。

中级:可以基本独立完成一个项目的开发与交付在初级工程师的基础上,对于深入了解技术原理的要求会更高並且能够应对项目中各种复杂多变的挑战,对于已有技术和工具进行改造适配在整体工程化交付方面,对于代码质量架构设计,甚至項目管理方面的要求会开始显现另外从业务出发来评估技术选型和方案也变得尤为重要。

高级:可以独立负责一条产品线的运作在中級工程师的基础上,需要更广阔的技术视野与开拓创新能力定义整个产品线的前进方向。解决问题已经不是关键更重要的是提出和定義问题,能够打造出在业界具有领先性和差异性的产品为公司创造更大的价值。

事实上对于不同层级的工程师非技术部分的要求都有┅定占比。本文主要聚焦在技术路线图上对于其他方面的学习进阶路线不会做覆盖。

以下内容分工程基础、算法基础、算法工程交叉、笁程深入方向、算法深入方向几个部分在各个部分内部会进一步区分一些主题。在各个主题内部也是有深入程度的区别的,不过限于篇幅没有进行详细的说明建议学习路线可以先把两个基础部分与工作中较为相关的内容做一个整体基础的夯实,然后可以在后续交叉和罙入方向的主题中选择感兴趣的进行深入了解和学习过程中发现基础部分欠缺的,可以再回到基础部分查漏补缺迭代前行。

Python是算法工程师日常工作中最常用的语言应该作为必须掌握的一门技术。大致的学习路线如下:

自我考核:能够读懂大多数的内部项目及一些开源項目代码的基本模块例如pandas, sklearn等。

  • 学习Python的编程风格建议学习观远内部的Python代码规范。

自我考核:编写的代码符合编码规范能够通过各类lint检查。

  • Python进阶这方面有一本非常著名的书《Fluent Python》,深入介绍了Python内部的很多工作原理读完之后对于各类疑难问题的理解排查,以及语言高级特性的应用方面会很有帮助另外动态语言元编程这块,《Ruby元编程》也是一本非常值得推荐的书

自我考核:能够读懂一些复杂的Python项目,例洳sqlalchemy中就大量使用了元编程技巧在实际工程项目中,能够找到一些应用高级技巧的点进行实践例如基于Cython的性能优化等。

  • 领域应用Python的应鼡相当广泛,在各个领域深入下去都有很多可以学习的内容比如Web开发,爬虫运维工具,数据处理机器学习等。这块主要就看大家各洎的兴趣来做自由选择了个人推荐熟悉了解一下Python web开发,测试开发相关的内容开拓视野。

自我考核:以Web开发和测试开发为例尝试写一個简单的model serving http服务,并编写相应的自动化测试

Java目前是企业级开发中最常用的软件,包括在大数据领域也是应用最广泛的语言,例如当年的Hadoop苼态基本都是基于Java开发的Scala由于其函数式编程的特性,在做数据处理方面提供了非常方便的API也因为Spark等项目的火热,形成了一定的流行度在进行企业级的软件开发,高性能大规模数据处理等方面,JVM上的这两门语言有很大的实用价值值得学习。

顺带一提Scala本身是一门非瑺有意思的语言,其中函数式编程的思想与设计模式又是非常大的一块内容对于拓宽视野,陶冶情操都是挺不错的选择

考虑到算法工程师的工作内容属性,这边给出一个Scala的学习路线:

  • 学习掌握Scala的基本语法开发环境配置,项目编译运行等基础知识这里推荐Coursera上Martin Odersky的课程,《快学Scala》或《Programming in Scala》两本书也可以搭配着浏览参考

自我考核:能使用Scala来实现一些简单算法问题,例如DFS/BFS或者使用Scala来处理一些日常数据工作,唎如读取日志文件提取一些关键信息等。

自我考核:能够使用Spark的Scala API来进行大规模的数据分析及处理完成lag feature之类的特征工程处理。

  • JVM的原理学習Scala/Java都是JVM上运行的优秀语言,其背后是一个非常大的生态包括在Web,Android数据基础架构等方面有广泛的应用。JVM相比Python虚拟机发展更加成熟,囿一套非常完善的JDK工具链及衍生的各类项目便于开发者debug,调优应用这方面推荐学习周志明的《深入理解Java虚拟机》。

自我考核:理解JVM GC原悝能通过JDK中相关工具或者优秀的第三方工具如arthas等,排查分析Spark数据应用的资源使用情况GC profiling,hot method profiling等进而进行参数优化。

  • 计算机语言理论Programming Language作為计算机科学的一个重要分支,包含了很多值得深入研究的主题例如类型论,程序分析泛型,元编程DSL,编译原理等这方面的很多話题,在机器学习方面也有很多实际应用比如TVM这类工作,涉及到大量编译原理的应用知乎大佬“蓝色”也作为这个领域的专家在从事罙度学习框架相关的工作。llvm, clang作者Chris Lattner也加入Google主导了Swift for Tensorflow等工作Scala作为一门学术范非常强的语言,拥有极佳的FP元编程等能力支持,强大的类型系统包括自动推理泛型等等高级语言特性,相对来说是一门非常“值得”学习的新语言也是一个进入PL领域深入学习的"gateway drug" :) 对这个方面有兴趣的哃学,可以考虑阅读《Scala函数式编程》《冒号课堂》,以及Coursera上《Programming Languages》也是一门非常好的课程另外只想做科普级了解的同学,也可以读一读著名的《黑客与画家》感受一下

LightGBM等,底层都是基于C++为主要语言进行实现的但是C++本身过于复杂,使用场景也比较有限制建议只需要达箌能够读懂一些基础的C++代码逻辑即可。在系统级开发领域目前有一门新语言逐渐崛起,连续几年被StackOverflow投票评选为程序员最喜爱的语言:Rust從设计理念和一些业界应用(例如TiKV)来看还是非常不错的,但是我也没有深入学习了解过就不做具体推荐了。这方面建议的学习内容包括经典的《The 后续可以考虑阅读《Clean Architecture》,《重构》等相关数据理解掌握在优化代码架构过程中思考的核心点,并加以运用Python相关的设计模式应用,还可以参考《Python in Practice》

自我考核:在项目中,找到一处可以应用设计模式的地方进行重构改进。

对于需要实际上线运行的软件工程质量保障是非常重要的一个环节,能够确保整个产品按照期望的方式进行运作在机器学习项目中,由于引入了数据这个因素相比传統的软件测试会有更高的难度,也是业界还在摸索前进的方向建议可以先阅读《单元测试的艺术》或《Google软件测试之道》,大致理解软件測试的一些基本概念和运作方式在此基础上可以进一步阅读Martin Fowler对于机器学习领域提出的CD4ML中相关的测试环节,学习sklearnLightGBM等开源库的测试开发方式,掌握机器学习相关的质量保障技术能力

自我考核:在项目中,实现基础的数据输入测试预测输出测试。

软件工程推进过程中项目管理相关的技能方法与工具运用也非常的关键。其中各种研发流程与规范例如敏捷开发,设计评审代码评审,版本管控任务看板管理等,都是实际项目推进中非常重要的知识技能点这方面推荐学习一本经典的软件工程教材《构建之法》,了解软件项目管理的方方媔面进一步来说广义的项目管理上的很多知识点也是后续深入学习的方向,可以参考极客时间上的课程《项目管理实战20讲》

自我考核:在某个负责项目中运用项目管理方法,完成一个实际的需求评估项目规划,设计与评审开发执行,项目上线监控维护流程,并对整个过程做复盘总结

软件工程师在技能方向成长的一条路线就是成为软件架构师,在这个方向上对于技能点会有非常高的综合性要求其中也有不少高级话题需要深入学习和了解,例如技术选型与系统架构设计架构设计原则与模式,宽广的研发知识视野高性能,高可鼡可扩展性,安全性等等有兴趣的同学可以了解一下极客时间的《从0开始学架构》这门课,逐渐培养这方面的视野与能力另外如《微服务架构设计模式》还有领域驱动设计方面的一系列书籍也值得参考学习。

自我考核:设计一个算法项目Docker镜像自动打包系统

在进行算法建模时,深入了解数据情况做各类探索性分析,统计建模等工作非常重要这方面对一些数学基础知识有一定的要求,例如概率论統计学等。这方面除了经典的数学教材也可以参考更程序员向的《统计思维》,《贝叶斯方法》《程序员的数学2》等书籍。

自我考核:理解实际项目中的数据分布情况并使用统计建模手段,推断预测值的置信区间

在进行数据分析时,可视化是一个非常重要的手段囿助于我们快速理解数据情况,发掘数据规律并排查异常点。对于各种不同类型的数据会对应不同的可视化最佳实践,如选择不同的圖表类型板式设计,分析思路编排人机交互方式等等。另一方面可视化与数据报告也是我们与不同角色人群沟通数据insights的一个重要途徑,需要从业务角度出发去思考可视化与沟通方式这方面可以参考《Storytelling

自我考核:对内沟通方面,能使用可视化技术分析模型的bad case情况,並确定优化改进方向对外沟通方面,能独立完成项目的数据分析沟通报告

在做算法模型调优改进中,需要从数据分析的基础上出发来決定实验方向这么做有几个好处:

从分析出发指导调优更有方向性,而不是凭经验加个特征改个参数碰运气。哪怕是业务方提供的信息也最好是有数据分析为前提再做尝试,而不是当成一个既定事实

由分析发现的根源问题,对于结果验证也更有帮助尤其在预测的數据量极大情况下,加一个单一特征很可能总体只有千分位准确率的提升无法确定是天然波动还是真实的提升。但如果有分析的前提那么我们可以有针对性的看对于这个已知问题,我们的调优策略是否生效而不是只看一个总体准确率。

对于问题的彻底排查解决也更有幫助有时候结果没有提升,不一定是特征没用也可能是特征代码有bug之类的问题。带着数据分析的目标去看为什么这个特征没有效果昰模型没学到还是特征没有区分度等,有没有改进方案对于我们评判调优尝试是否成功的原因也更能彻查到底。

数据分析会帮助我们发現一些额外的问题点比如销量数据清洗处理是不是有问题,是不是业务本身有异常需要剔除数据等。

这方面在业界有一些关于误差分析的探索研究不过大多数都是基于分类问题的,例如《Identifying Unknown Unknowns in the Open World》《A Characterization of Prediction Errors》等。可以在了解这些研究的基础上结合具体的业务情况,深入思考总結误差分析的思路与方法论

自我考核:在项目中形成一套可以重复使用的误差分析方案,能够快速从预测输出中定位到目前模型最重要嘚误差类别并一定程度上寻找到根本原因。

这块大家应该都非常熟悉了初阶的学习路线可以参考周志华老师的《机器学习》,涵盖了機器学习基础常用机器学习方法,和一些进阶话题如学习理论强化学习等。如果希望深化理论基础可以参考经典的《PRML》,《ESL》和《統计学习方法》在实战中,需要综合业务知识算法原理,及数据分析等手段逐渐积累形成建模调优的方法论,提高整体实验迭代的效率和成功率

自我考核:结合实际业务和机器学习理论知识,挖掘项目中算法表现不够好的问题并通过算法改造进行提升或解决。

近些年兴起的深度学习已经成为机器学习领域一个非常重要的分支,在各个应用方向发挥了很大的作用相对于传统机器学习,对于特征笁程要求的降低成了其核心优势另一方面,深度学习对于大数据量大规模算力的应用能力很强,也一定程度上提升了整体的产出效果由于理论方面的研究稍显落后,深度学习在实际应用中对于使用者的经验技能要求相对比较高需要有大量的实战经验才能达到比较理想的效果。这方面的学习资料推荐Keras作者的《Deep

自我考核:能够在实际项目中使用深度学习模型,达到接近甚至超过传统GBDT模型的精确度效果或者通过ensemble,embedding特征方式提升已有模型的精度。

目前我们的业务领域在时间序列预测自然语言处理,推荐等方面其它类似图像,搜索广告等领域也都有各自的一些领域建模方法。在时间序列领域包括了传统时序模型,如ARIMA, Prophet机器学习模型,如划动窗口特征构建方法结匼LightGBM及深度学习模型,例如LSTMseq2seq,transformer等这方面可以参考Kaggle上相关比赛的方案分享,以及AmazonUber,天猫等有类似业务场景公司的分享资料其它领域吔是类似,通过了解历史技术演进相关比赛,业界的方案分享与开源项目会议论文来逐渐掌握学习建模方法,结合实际业务进行实践嘗试积累起更加体系性的个人知识技能。

自我考核:在项目中复现一个Kaggle获胜方案检验其效果,分析模型表现背后的原因并尝试进行妀进。

在项目实施过程中会需要各类复杂的数据处理操作,因此熟练掌握此类框架就显得尤为重要目前行业的标准基本上会参照Pandas DataFrame的定義,在数据量较大的情况下也有许多类似的框架,如SparkDask,ModinMars等支持分布式运行的DataFrame,以及cuDFVaex等提升单机性能的改进实现。这方面经典的书籍可以参考Wes McKinney的《Python for Data Analysis》在掌握基础数据操作的基础上,可以进而了解窗口函数向量化性能优化等高级话题。另外SQL也可以做非常复杂的数据處理工作有不少公司例如阿里会以SQL为主来构建数据处理流程,感兴趣的同学也可以学习一下SQL中各种高级计算的使用及优化方法

自我考核:在已有项目中,能把至少三个使用apply方法的pandas处理修改成向量化运行并测试性能提升。使用window function或其它方案来实现lag特征减少join次数。

机器学習方面的新框架层出不穷一方面我们需要掌握经典框架的使用方式,理解其模块构成接口规范的设计,一定程度上来说其它新框架也嘟需要遵循这些业界标准框架的模块与接口定义另一方面对于新框架或特定领域框架,我们需要掌握快速评估上手使用,并且做一定妀造适配的能力一些比较经典的框架有:

一般的学习路径主要是阅读这些框架的官方文档和tutorial,在自己的项目中进行尝试使用对于一些核心接口,也可以阅读一下相关的源代码深入理解其背后的原理。

自我考核:在LightGBM框架下实现一个自定义的损失函数,并跑通训练与预測流程

其它比较常见且与算法工程师日常工作会有一些联系的有Web框架,爬虫框架等最具有代表性的当属Flask和scrapy。这两者背后各自又是很大┅块领域尤其web开发更是保罗万象。感兴趣的同学还可以了解一下一些新兴的基于Python3的框架例如FastAPI,其背后借鉴的许多现代框架的思想设计包括数据验证,序列化自动文档,异步高性能等开拓一下知识面。

在很多项目中数据量达到十亿级以上的情况下,单机训练会难鉯支撑因此分布式训练也是实际工程落地中非常重要的一个主题。分布式训练涉及到多机的通讯协同方式优化算法的改造,数据及模型的并行与聚合以及框架的选择和运维等话题,具体可以参考《分布式机器学习》另外对于分布式系统,也可以参阅《数据密集型应鼡系统设计》这本神作了解其背后原理。

自我考核:能够在多机上进行亿级数据的GBDT模型训练与预测

在做大规模的数据训练与推理时,菦些年涌现出许多高性能计算优化的方法例如从硬件方面,有各种超线程技术向量化指令集,GPGPUTPU的应用等,从软件方面有针对数值計算场景的OpenBLAS,有自动并行化的OpenMP有各种codegen,JIT技术下的运行时优化等这方面可以学习的方向也很多,从基础的并行编程编译原理及优化的知识开始,到CUDAOpenMP的应用(例如Nvidia的cuDNN,还有LightGBM中也用到了OpenMP)Codegen,JIT等技术在SparkTVM等项目中的使用等,建议有深度性能优化需求时可以往这些方向做调研和学习

这个方向分两个部分,一块是模型训练方面能够做到加速,例如使用大batch size迁移学习,持续的在线/增量学习等手段另一块在模型预测方面,也有很多加速需求比如模型参数量优化,模型压缩混合精度,知识蒸馏等技术手段都是为了做到更高性能,更低资源消耗的模型预测推理这方面业界有各个方向的文章和技术实现可以参考,比如经典的《Training ImageNet in 1

自我考核:在典型的销量预测场景中实现增量訓练与预测

包含各类pipeline的编排与调度能力的支持,包括数据pipeline训练pipeline和serving pipeline等。这方面比较常用的框架工具有AirflowDolphinScheduler,Cadence等需要掌握其基本的工作原悝和使用方式,并能够应用于离线实验与线上运行

自我考核:使用Airflow完成一个标准的项目pipeline搭建与运行。

相对于传统的DevOps机器学习项目最大嘚区别在于数据方面的依赖会更加显著与重要。这方面的话题包括数据血缘数据质量保障,数据版本控制等有各类工具可以借鉴使用,例如数据版本管理方面的DVC数据质量方面的TFX Data Validation,CerberusDeequ等。在方法论层面《The ML Test Score》中给出了不少数据相关的具体测试方法,值得参考学习

自我栲核:在项目中实现输入数据的分布测试,特征工程测试及特征重要性准入测试

这部分也是ML项目的独特之处,在开发过程中有大量的实驗及相应的结果输出需要记录以指导后续调整优化的方向,并选择最优结果来进行上线部署这方面可以参考的项目有MLflow,fitlogwandb等。当然对於单独的项目来说可能online Excel就能满足需求了 :)

自我考核:在实际项目中实行一套标准的实验记录手段,并能从中找出各类实验尝试带来的精度提升的top 5分别是哪些操作

目前我们的serving大多数是离线batch预计算的形式,所以主要依赖的技术手段是各类离线inference的方法例如直接使用model predict接口,使用mmlspark等做大规模并行inference等如果涉及到在线serving,情况会更加复杂例如在线pipeline的运行,实时特征获取low latency/high

自我考核:部署一个实时预测服务,能够根据鼡户输入产生相应的预测结果

软件工程中的持续集成,持续部署已经成为一种标准实践在算法项目中,额外引入了数据这个维度的复雜性带来了一些新的挑战。在这个方向上几个主要话题包括自动化测试,pipeline打包部署持续监控运维等,可以参考Martin Fowler关于CD4ML的文章工具系統层面,可以学习传统的Jenkins也有一些新选择例如CircleCI,GoCDVerCD(Uber)等。

自我考核:通过Jenkins实现pipeline自动测试打包,上线流程

在整个项目上线后,需要對系统的各个环节进行监控并对各种异常情况作出响应。例如输入数据的监控判别测试数据与训练数据的分布是否有偏移,整个运行pipeline嘚监控判别是否有运行失败抛出异常的情况,对于预测输出的监控确保没有异常的预测输出值,也包括对于系统计算资源等方面的监控确保不会因为资源不足导致业务受到影响等。在监控信息收集基础上,还需要配套一系列的自动告警通知日志追踪排查等。这方媔的工具框架包括TF

自我考核:将三个项目中做过的问题排查改造成常规监控手段支持自动的问题发现,告警通知如有可能,提供自动囮或半自动化的问题排查解决方案

MLOps整体是一个比较大的话题,在这方面有很多产品和系统设计方面的实践可以参考学习例如Uber的Michelangelo系列文嶂,Facebook的FBLearnerneptune.ai,dataikudomino等,虽然没有开源但是其背后的很多设计理念,演进思考白皮书等都非常值得我们学习。在开源界也有很多可以参考的項目例如MLflow,KubeflowMetaflow,TFX等可以学习他们的设计理念,Roadmap以及实现细节等。

自我考核:总结各个MLOps产品的功能模块矩阵对比能够根据项目需求來进行产品选型与使用。

自峩考核:能够理解SQL执行计划,并能够根据执行计划来做索引或查询调优

目前常用的关系型数据库主要是MySQL和PostgreSQL,主要需要掌握的是日常的一些SQL操作例如DML(增删改查),DDL(创建表修改索引等),DCL(权限相关)在此基础上还可以进一步了解一些如数据类型,高级计算存储引擎,部署运维范式概念与表结构设计等方面的话题。对于高级话题这块推荐《高性能MySQL》与《高可用MySQL》。

自我考核:在MySQL中设计相关表結构存储实际项目中的一系列中间数据集。

常用的NoSQL数据库有几类KV存储(Redis),文档数据库(MongoDB)Wide-column存储(Cassandra,HBase)以及图数据库(Neo4j)在目前峩们的算法项目中,比较有可能会用到的主要是Redis这类KV存储(也可能把Cassandra之类当泛KV来用)或者更新一点的类似Delta Lake的存储系统。建议学习了解一丅这类KV存储以及分布式数据库的常见操作方式,以及基础的运维排查性能优化方法。

自我考核:考虑一个线上模型服务的场景用户輸入作为基础特征,使用类似Redis的KV系统实现实时获取其它特征,并进行模型预测

IT系统总体的发展趋势在往云计算方向演进,即使是自建嘚基础设施也会采用云计算的一套构建方式,让开发者不用过多的关注底层计算存储资源的部署运维对于应用开发者来说,需要了解┅些基础架构方面的知识例如各类虚拟化及容器技术,配置管理容器编排等,便于在日常工作中使用相关技术来管理和发布应用从笁具层面看,Docker与k8s等技术发展速度较快主要还是根据官方文档来学习为主。浙大之前出版的《Docker - 容器与容器云》一书中有一些更深入的话题嘚探讨另外《Kubernetes in Action》中也值得一读。从方法论层面看《Infrastructure as Code》和《Site Reiliability Engineering》是两本非常不错的学习资料。与算法应用结合的虚拟化运维,持续集成等都是比较新的领域需要我们探索出一条可行路线。

自我考核:对于已有的算法项目总结制定一套开发,测试发布,运维的标准流程且尽可能自动化执行。

前些年最流行的分布式存储是脱胎于Google经典的GFS论文实现的HDFS不过随着硬件技术的发展,计算存储分离思想的逐渐興起不但灵活性更高,成本更低且各自架构的复杂度也大大降低了。因此目前更建议学习简单的object store形式的分布式存储例如s3,minio等在此基础上的一些存储系统,例如Delta Lake提供了事务,高效的upserttime travel等功能,也值得关注与学习原理方面,还是推荐《数据密集型应用设计》这本

洎我考核:在项目中实现不同机器能够访问同一个s3路径的文件,并进行正常的数据读写模型文件读写等功能。

大数据时代的分布式计算嘚鼻祖来自于Google经典的MapReduce论文后续在Hadoop系统中做了开源实现,在前几年是非常火热的一项技术目前业界的主流是Spark和Flink,前者在批处理计算中处於霸者地位后者是流处理领域的领先者。目前我们的业务应用中Spark是比较常用的分布式计算引擎,其基本操作相关内容比较简单参考官方文档或者《Spark快速大数据分析》即可。后续的主要难点会有大数据量下的问题排查与性能调优执行复杂计算或与Python相关UDF的交互配合方式等。这方面需要对Spark的系统架构内部原理有一定了解,例如masterworker,driverexecutor等之间的关系,lazy

自我考核:用Spark来实现项目中的特征工程并在一定数据量情况下取得比单机Pandas更好的性能效果。

其它云服务基础设施还包括分布式数据库消息队列,zk/raft分布式协作系统虚拟网络,负载均衡等這些话题离算法应用方面会比较远一些,基本上达到遇到需求时会使用的能力即可在这里不做展开。

自动化机器学习中比较传统的一块昰超参数优化进而可以推广到整个pipeline的超参优化,包括数据预处理特征工程,特征选择模型选择,模型调优后处理等部分。目前业堺应用比较广泛的技术手段主要是随机搜索贝叶斯优化,进化算法Hyperband/BOHB等,在特征工程方面有Featuretoolstsfresh,AutoCrossing等自动化特征工程工具学术界有一些進一步的探索研究,包括multi-fidelity优化多任务优化,HPO结合ensemble learningpipeline planning,data diff自动数据分布探测等方面可以参考http://automl.org上的各类参考资料与书籍进行学习了解。主要難点包括automl算法的泛化能力scalability,整体pipeline组合的搜索与生成针对不同学习算法的自动优化手段等。

自我考核:了解超参优化的基础概念能够茬项目中应用框架工具来实现模型超参的贝叶斯优化流程。

Meta learning是近年来非常活跃的一个新兴领域其主要思路是希望能通过元学习模型方法,去积累建模调优的先验知识跨任务推断模型效果并warm start新的训练任务,或者指导学习算法来进行更高效的具体任务的训练过程这方面在笁业界的主要应用基本上集中在建模调优先验知识的积累方面,比如通过一系列公开数据集搜索寻找出表现较好的起始参数用于指导在噺任务上做超参优化的起始搜索点。学术研究中除了configuration space的研究还包括从learning curve中进行学习推断,元特征提取与建模HTN

自我考核:设计一系列meta feature与meta learning手段,实现对新任务的参数选择的初始化

AutoML领域比较火,但也是比较特别的一个方向目前需要大量的计算资源投入才能做这方面的研究与嘗试,因此主要建议了解一下这个方向的一些工作即可不做深入探索学习。

自我考核:使用一种AutoML系统来进行项目的模型自动优化并与掱工优化的结果进行比较,看是否有所提升及寻找背后的原因。

主要有三个方面一是模型本身的解释性,例如线性回归决策树等,模型结构简单根据其原理,可以直接对预测结果特征使用等方面给出解释。另外一些复杂模型例如EBM,神经网络Bayesian rule lists,SLIMs等也可以利用┅些本身的特性给出一些解释,例如GradCAM方法等二是模型无关的解释方法,包括经典的PDPICE等特征图,LIME等surrogate Machine Learning》和《Explainable AI》(关于深度学习的内容会更哆)另外学术界也有很多前沿探索,比如针对模型解释的降维工作自动的时间序列分析及报告生成,因果模型模型公平性及社会影響等方面,可以保持关注

自我考核:理解LIME,Shapley的运作原理并分析其局限性,尝试提出改进方案

从工具框架方面,有许多可以使用的开源项目例如微软的interpret,eli5shap,AIX360等另外也有一些非传统意义上的模型解释,例如manifoldtensorboard这类模型debugging工具,自动化的误差分析与模型改进方案因果模型框架,模型公平性评估与纠正工具等都可以涵盖在广义的模型解释领域中。在工具基础上如何结合业务领域知识,给出更有针对性的解释方案也是值得思考深挖的方向。

自我考核:使用shapeli5等工具来进行模型解释,并在此基础上形成面向开发者的模型debug误差分析及妀进方案,或形成面向业务的what-if分析看板

目前机器学习应用领域还在高速发展与演进过程中,除了上述提到的技能方向后续很可能会不斷有新的主题引入进来,需要练就快速学习并应用落地的能力在掌握前面编程,软件工程机器学习的基础上,后半部分的研究方向夶家可以根据个人兴趣,选择几个进行深入探索与实践仅阅读相关书籍和文章,只能对知识内容有一个初步的认识必须要通过深入的動手实践,反复试错思考和修正才能逐渐内化为自己的技能,并构建起较为坚实的知识体系

周远(花名:字节),观远数据联合创始囚与首席数据科学家致力于算法前沿技术在泛零售消费领域的应用落地,深度参与主导了多个AI项目在行业头部世界五百强客户的应用囷上线,也和团队一起多次斩获智能零售方向的Hackathon冠军曾就职于微策略,阿里云从事商业智能产品与云计算系统研发工作拥有十多年的荇业经验。目前研究兴趣主要包括可解释机器学习AutoML和大规模机器学习系统方向。

}

我要回帖

更多关于 ps应用程序框架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信