如何学习Python开发:Yandex的新视频课程

去年秋天,第一所后端开发学校在Yandex的莫斯科办公室举行。我们录制了视频课程,今天我们很高兴分享哈布雷学院的完整视频课程。它可以让您学习Python的工业发展。讲座的作者是Yandex的资深开发人员。每个视频都有指向示例和有用材料的链接。

要学习本课程,您需要了解Python的基础知识,并了解如何在服务器上部署应用程序。我们希望您至少可以在初始级别进行数据库查询并知道如何创建Web应用程序。

1. CPython设备
2.面向对象的编程
3.测试
4.数据库
5.数据库:模型,迁移,测试
6.体系结构
7.基础结构
8.算法
9.调试,日志记录,概要分析
10.异步编程。第一讲
11.异步编程。第二讲
12.异步编程。第三讲

1. CPython设备-Egor Ovcharenko


让我们讨论一下为什么以及用Python写什么。我们将讨论解释器和字典的结构,内存管理和类型。您将学习生成器如何工作以及异常如何工作。


演示文稿:yadi.sk/i/dcNx5Sgix4axOA

参考文献


整个解释器:
docs.python.org/3/reference/executionmodel.html
github.com/python/cpython
leanpub.com/insidethepythonvirtualmachine/read

内存管理:
arctrix.com/nas/python/gc
rushter.com/blog/python -memory-managment
instagram-engineering.com/dismissing-python-garbage-collection-at-instagram-4dca40b29172
stackify.com/python-garbage-collection

例外:
bugs.python.org/issue17611

2.面向对象的编程-Valery Lisay


让我们谈谈OOP及其在Python中的实现。考虑主题和概念,例如装饰器,描述符和元类。


演示文稿:yadi.sk/i/f-UpCHCsnxqf9Q

参考文献


habr.com/ru/post/141411
docs.python.org/3/howto/descriptor.html
habr.com/ru/post/145835
ibm.com/developerworks/ru/library/l-pymeta
docs.python.org/ 2.5 / ref / slot.html

3.测试-Maria Zelenova


让我们谈谈什么是软件测试,什么是测试以及为什么编写它们。让我们谈谈测试Python代码的库:unittest,pytest,doctest。我们将找出它们之间的区别,并查看简单的测试示例。我们将涉及持续集成的主题:它是什么,如何在开发中使用它。


演示文稿:yadi.sk/i/g6nd4aORJyrPMQ

参考文献


docs.python.org/3/library/unittest.html
docs.pytest.org/en/latest
docs.python.org/3/library/doctest.html

4.数据库-Tatyana Denisova


让我们讨论一下什么是数据,什么是数据库以及它们之间的区别。您将了解与开发人员一起使用时需要使用数据库的哪些功能。我们将根据系统的当前功能及其将来的扩展规模,讨论如何表征,结构化和存储数据。

得益于在讲座中获得的知识,开发人员将能够理解需要研究提到的哪些主题来解决特定的问题,并且在出现错误的情况下,可以确定使用数据库是否是问题的根源。如果是这样,该挖哪种方式。


演示文稿:yadi.sk/i/Uf5U_xwt5qGBIQ

5.数据库:模型,迁移,测试-Alexander Vasin


这是一个以PostgreSQL为例的有关关系数据库的实际工作的讲座。让我们讨论一下如何选择RDBMS,生产环境中的基础结构是什么样的,比较同步和异步PostgreSQL驱动程序。我们将了解如何安排数据库驱动程序。我们将讨论数据,命名和未命名游标,事务的使用,RETURNING和UPSERT的有效工作。

您将学习如何制作容错和可伸缩的应用程序,什么是Query Builder,ORM以及何时使用它们(以SQLAlchemy为例),如何编写数据库迁移(以Alembic为例)以及为什么以及如何对其进行测试。


演示:yadi.sk/i/DqYmAbrPu6en2g
示例:github.com/alvassin/alembic-quickstart

6.建筑-Oleg Ermakov


让我们考虑设计新系统功能的三个部分:

-用于客户端-服务器交互的API;
-代码级设计模式(参考Martin Fowler进行分解的必要性证明);
-服务间交互的体系结构。


演示:yadi.sk/d/PivB-ZJ0UJGjYQ

参考文献


HTTP协议规范:
tools.ietf.org/html/rfc2616
tools.ietf.org/html/rfc5789

有关使用HTTP协议的15个琐碎事实:
habr.com/ru/company/yandex/blog/265569

Trainee Vasya及其故事关于等当性API:
habr.com/zh-CN/company/yandex/blog/442762

企业应用程序体系结构 模式:martinfowler.com/eaaCatalog/index.html微服务
模式:manning.com/books/microservices-patterns
设计模式:litres.ru / elizabet-robson / head-first-patterny-proektirovaniya-39123671
域驱动设计:解决软件核心问题的复杂性:amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215
优化Netflix API:medium.com/netflix-techblog/optimizing-the-netflix-api-5c9ac715cf19

7.基础设施-德米特里·奥尔洛夫(Dmitry Orlov)


让我们讨论围绕Python程序的基础结构:Python包索引存储库(PyPI),virtualenv工具,部署过程,Ansible配置管理系统,虚拟化和容器化。


演示文稿:yadi.sk/i/9eOXdelTpXkoEQ

参考文献


Python套件:docs.python.org/3.8/distutils/setupscript.html
virtualenv:docs.python.org/3.8/library/venv.html
软件部署:en.wikipedia.org/wiki/Software_deployment
Ansible:docs.ansible.com /ansible/latest/user_guide/quickstart.html
虚拟化:en.wikipedia.org/wiki/Hardware_virtualization
容器en.wikipedia.org/wiki/OS-level_virtualization

8.算法-Ilya Volkov


让我们谈谈数据结构,计算和摊销的复杂性。

通过使用简单任务列表及其逐步改进的示例,我们考虑了编写Web应用程序服务器端任务的方法。我们将回顾优化任务和代码的方法和常用技术。在演讲的最后部分,我们将考虑在IT公司中通过技术面试的过程。


演示文稿:yadi.sk/i/hBbOjd4SqMlw5g

链接


名单在Python实现:docs.python.org/3.7/faq/design.html#how-are-lists-implemented-in-cpython
实现对哈卜尔在Python列表中的分析:habr.com/en/post/273045
算法B的分析-Habr上的habr.com/en/post/114154
LRU算法分析:habr.com/en/post/136758
Redis中LRU缓存的工作:redis.io/topics/lru-cache
有计算困难的Redis命令列表-可能猜测幕后情况:redis.io/commands
银河算法:en.wikipedia.org/wiki/Galactic_algorithm
演讲中的采访任务示例:leetcode.com/problems/trapping-rain-water

哈布雷复杂性理论简介:habr.com/zh-CN/post/196560
编程实践服务摘要:tproger.ru/digest/competitive-programming-practice
带有或多或少简单任务探索新语言的服务示例:exercism.io

9.调试,日志记录和性能分析-Yuri Shikanov


在讲座的开始,您将了解操作系统(特别是Linux)的基础知识。然后,我们将考虑内存管理,进程,多任务,IPC,文件,系统调用。我们将向您展示如何使用Python内置的Pdb调试器。让我们来讨论一般的日志记录以及Python中的日志记录库。我们将学习如何处理程序性能不足的问题,以及如何找到消耗最多处理器或内存资源的瓶颈。


演示:yadi.sk/d/BCky8YkLcbVeUA
Linux系统编程书:oreilly.com/library/view/linux-system-programming/9781449341527

10.异步编程。第一讲-爱德华·甲壳虫


考虑一下同步应用程序的问题是什么以及可以采取什么措施。

我们将讨论在HTTP请求期间从操作系统的角度来看发生了什么,如何同时处理多个请求,以及Web服务器中进程和线程的优缺点。您将了解Python中线程的功能。让我们讨论非阻塞I / O:如何在单个线程中处理多个请求。

让我们谈谈什么是事件循环以及为什么需要它。我们将在同步和异步解决方案之间进行选择。


演示文稿:yadi.sk/i/OhqXMEOKzNlK6g

参考文献


带有异步协同程序的网络爬虫:aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html
大卫·比兹利:生成器:最终领域:youtube.com/watch ?v= D1twn9kLmYg

11.异步编程。第二讲-亚历山大·瓦辛


本讲座是对asyncio的简短概述:Python异步编程的库,接口和标准。

我们将研究高级异步接口(协程,任务,未来和使用它们的方法),低级接口(事件循环,策略)以及Python异步接口(上下文管理器,迭代器,生成器,理解力)。我们将告诉您为什么需要aiohttp,如何在其上编写Web应用程序。您将了解什么是中间件,aiohttp如何允许您序列化数据以及如何在后台执行异步任务。


演示:disk.yandex.ru/i/4gyVoP1DM9enxQ

参考文献


你自己的异步生成(由大卫比兹利):youtu.be/Y4Gt3Xjd7G8
今天和明天(尤里Selivanov)ASYNCIO:youtu.be/3rSAtD2gKQE
的PEP 492:与异步和语法的await协程:python.org/dev/peps/pep-0492
的PEP 530:异步理解:python.org/dev/peps/pep-0530

12.异步编程。第三讲-德米特里·奥尔洛夫


使用Python和asyncio开发异步应用程序时,有时会遇到与管理后台任务,阻止标准输出,重试策略和阻止操作相关的问题。您将了解Edadil服务团队如何使用aiomisc解决这些问题,此开源项目的基本概念,基类,现成的服务,装饰器,使用流以及更多内容。


演示:yadi.sk/i/SAJnWVQNfdHV0w aiomisc
文档:pypi.org/project/aiomisc

All Articles