1.熟悉 PEP8 编码规范,OOP(Object Oriented Programming) 编程思想,有良好的编码习惯
1 尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。
2 模块命名尽量短小,使用全部小写的方式,可以使用下划线。
3 包命名尽量短小,使用全部小写的方式,不可以使用下划线。
4 类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。
5 异常命名使用CapWords+Error后缀的方式。
6 全局变量尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是__all__机制;二是前缀一个下划线。
7 函数命名使用全部小写的方式,可以使用下划线。
8 常量命名使用全部大写的方式,可以使用下划线。
9 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
9 类的属性有3种作用域public、non-public和subclass API,可以理解成C++中的public、private、protected,non-public属性前,前缀一条下划线。
11 类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。
12 为避免与子类属性命名冲突,在类的一些属性前,前缀两条下划线。比如:类Foo中声明__a,访问时,只能通过Foo._Foo__a,避免歧义。如果子类也叫Foo,那就无能为力了。
13 类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
OOP是一种程序设计范型,同时也是一种程序开发的方法,实现OOP的程序希望能够在程序中包含各种独立而又互相调用的对象,每一个对象又都应该能够接受数据、处理数据并将数据传达给其它对象,因此每个对象都可以被看作一个小型的”机器”,而整个程序系统就是由这些小机器相互协助、组合构建起来的。
2.熟练使用 Python 常用标准库以及第三方库
著名第三方库
1.Web框架
Django: 开源Web开发框架,它鼓励快速开发,并遵循MVC设计,开发周期短。
ActiveGrid: 企业级的Web2.0解决方案。
Karrigell: 简单的Web框架,自身包含了Web服务,py脚本引擎和纯python的数据库PyDBLite。
Tornado: 一个轻量级的Web框架,内置非阻塞式服务器,而且速度相当快
webpy: 一个小巧灵活的Web框架,虽然简单但是功能强大。
CherryPy: 基于Python的Web应用程序开发框架。
Pylons: 基于Python的一个极其高效和可靠的Web开发框架。
Zope: 开源的Web应用服务器。
TurboGears: 基于Python的MVC风格的Web应用程序框架。
Twisted: 流行的网络编程库,大型Web框架。
Quixote: Web开发框架。
2.科学计算
Matplotlib: 用Python实现的类matlab的第三方库,用以绘制一些高质量的数学二维图形。
SciPy: 基于Python的matlab实现,旨在实现matlab的所有功能。
NumPy: 基于Python的科学计算第三方库,提供了矩阵,线性代数,傅立叶变换等等的解决方案。
3.GUI
PyGtk: 基于Python的GUI程序开发GTK+库。
PyQt: 用于Python的QT开发库。
WxPython: Python下的GUI编程框架,与MFC的架构相似。
4.其它
BeautifulSoup: 基于Python的HTML/XML解析器,简单易用。
PIL: 基于Python的图像处理库,功能强大,对图形文件的格式支持广泛。
PyGame: 基于Python的多媒体开发和游戏软件开发模块。
Py2exe: 将python脚本转换为windows上可以独立运行的可执行程序。
3.熟悉Python 多线程、多进程开发
http://www.cnblogs.com/tyomcat/p/5486827.html
https://www.cnblogs.com/whatisfantasy/p/6440585.html?utm_source=itdadao&utm_medium=referral
4.熟悉 Linux 基本操作命令
1、日常操作命令
**查看当前所在的工作目录
pwd
**查看当前系统的时间
date
**查看有谁在线(哪些人登陆到了服务器)
who 查看当前在线
last 查看最近的登陆历史记录
2、文件系统操作
**
ls / 查看根目录下的子节点(文件夹和文件)信息
ls -al -a是显示隐藏文件 -l是以更详细的列表形式显示
**切换目录
cd /home
**创建文件夹
mkdir aaa 这是相对路径的写法
mkdir -p aaa/bbb/ccc
mkdir /data 这是绝对路径的写法
**删除文件夹
rmdir 可以删除空目录
rm -r aaa 可以把aaa整个文件夹及其中的所有子节点全部删除
rm -rf aaa 强制删除aaa
**修改文件夹名称
mv aaa angelababy
**创建文件
touch somefile.1 创建一个空文件
echo "i miss you,my baby" > somefile.2 利用重定向“>”的功能,将一条指令的输出结果写入到一个文件中,会覆盖原文件内容
echo "huangxiaoming ,gun dan" >> somefile.2 将一条指令的输出结果追加到一个文件中,不会覆盖原文件内容
用vi文本编辑器来编辑生成文件
******最基本用法
vi somefile.4
1、首先会进入“一般模式”,此模式只接受各种快捷键,不能编辑文件内容
2、按i键,就会从一般模式进入编辑模式,此模式下,敲入的都是文件内容
3、编辑完成之后,按Esc键退出编辑模式,回到一般模式;
4、再按:,进入“底行命令模式”,输入wq命令,回车即可
******一些常用快捷键
一些有用的快捷键(在一般模式下使用):
a 在光标后一位开始插入
A 在该行的最后插入
I 在该行的最前面插入
gg 直接跳到文件的首行
G 直接跳到文件的末行
dd 删除行,如果 5dd ,则一次性删除光标后的5行
yy 复制当前行, 复制多行,则 3yy,则复制当前行附近的3行
p 粘贴
v 进入字符选择模式,选择完成后,按y复制,按p粘贴
ctrl+v 进入块选择模式,选择完成后,按y复制,按p粘贴
shift+v 进入行选择模式,选择完成后,按y复制,按p粘贴
查找并替换(在底行命令模式中输入)
%s/sad/88888888888888 效果:查找文件中所有sad,替换为88888888888888
/you 效果:查找文件中出现的you,并定位到第一个找到的地方,按n可以定位到下一个匹配位置(按N定位到上一个)
3、文件权限的操作
****linux文件权限的描述格式解读
drwxr-xr-x (也可以用二进制表示 111 101 101 --> 755)
d:标识节点类型(d:文件夹 -:文件 l:链接)
r:可读 w:可写 x:可执行
第一组rwx: 表示这个文件的拥有者对它的权限:可读可写可执行
第二组r-x: 表示这个文件的所属组对它的权限:可读,不可写,可执行
第三组r-x: 表示这个文件的其他用户(相对于上面两类用户)对它的权限:可读,不可写,可执行
****修改文件权限
chmod g-rw haha.dat 表示将haha.dat对所属组的rw权限取消
chmod o-rw haha.dat 表示将haha.dat对其他人的rw权限取消
chmod u+x haha.dat 表示将haha.dat对所属用户的权限增加x
也可以用数字的方式来修改权限
chmod 664 haha.dat
就会修改成 rw-rw-r--
如果要将一个文件夹的所有内容权限统一修改,则可以-R参数
chmod -R 770 aaa/
chown angela:angela aaa/ <只有root能执行>
目录没有执行权限的时候普通用户不能进入
文件只有读写权限的时候普通用户是可以删除的(删除文件不是修改它,是操作父及目录),只要父级目录有执行和修改的权限
4、基本的用户管理
*****添加用户
useradd angela
要修改密码才能登陆
passwd angela 按提示输入密码即可
**为用户配置sudo权限
用root编辑 vi /etc/sudoers
在文件的如下位置,为hadoop添加一行即可
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
然后,hadoop用户就可以用sudo来执行系统级别的指令
[hadoop@shizhan ~]$ sudo useradd huangxiaoming
5、系统管理操作
*****查看主机名
hostname
****修改主机名(重启后无效)
hostname hadoop
*****修改主机名(重启后永久生效)
vi /ect/sysconfig/network
****修改IP(重启后无效)
ifconfig eth0 192.168.12.22
****修改IP(重启后永久生效)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
mount **** 挂载外部存储设备到文件系统中
mkdir /mnt/cdrom 创建一个目录,用来挂载
mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/ 将设备/dev/cdrom挂载到 挂载点 : /mnt/cdrom中
*****umount
umount /mnt/cdrom
*****统计文件或文件夹的大小
du -sh /mnt/cdrom/Packages
df -h 查看磁盘的空间
****关机
halt
****重启
reboot
******配置主机之间的免密ssh登陆
假如 A 要登陆 B
在A上操作:
%%首先生成密钥对
ssh-keygen (提示时,直接回车即可)
%%再将A自己的公钥拷贝并追加到B的授权列表文件authorized_keys中
ssh-copy-id B
——————————————————————————————————
******后台服务管理
service network status 查看指定服务的状态
service network stop 停止指定服务
service network start 启动指定服务
service network restart 重启指定服务
service --status-all 查看系统中所有的后台服务
设置后台服务的自启配置
chkconfig 查看所有服务器自启配置
chkconfig iptables off 关掉指定服务的自动启动
chkconfig iptables on 开启指定服务的自动启动
*****系统启动级别管理
vi /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
5.熟悉Django框架、Flask 框架, 了解tornado框架
Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。
Django 框架的核心组件有:
1.用于创建模型的对象关系映射
2.为最终用户设计的完美管理界面
3.一流的 URL 设计
4.设计者友好的模板语言
5.缓存系统。
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们各自的职责如下:
层次 | 职责 |
---|---|
模型(Model),即数据存取层 | 处理与数据相关的所有事务: 如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等。 |
模板(Template),即表现层 | 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示。 |
视图(View),即业务逻辑层 | 存取模型及调取恰当模板的相关逻辑。模型与模板的桥梁。 |
1.Flask是一个使用 Python 编写的
1).轻量级 Web 应用框架。
2).其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。
3).Flask使用 BSD 授权。
4)根据 URL 可以返回特定网页
2.Flask 属于微框架(micro-framework)这一类别,微架构通常是很小的不依赖于外部库的框架。这既有优点也有缺点,优点是框架很轻量,更新时依赖少,并且专注安全方面的 bug,缺点是,你不得不自己做更多的工作,或通过添加插件增加自己的依赖列表。Flask 的依赖如下:
Werkzeug 一个 WSGI 工具包
jinja2 模板引擎
3.WSGI: Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口)。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。
得利于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。
Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本 [1] 。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。
6.熟悉面向切面编程AOP和装饰器
AOP
简言之、这种在运行时,编译时,类和方法加载时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。
优点是:这样的做法,对原有代码毫无入侵性
装饰器
装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。
概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。
7.熟悉Git版本控制
分布式版本控制系统
是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
8.熟悉Nginx + uwsgi/gunicorn部署服务器
https://blog.csdn.net/holmehai/article/details/80044867?utm_source=blogxgwz1
https://www.cnblogs.com/Pushy/p/8453218.html
https://blog.csdn.net/my_chenjie/article/details/81089014?from=singlemessage
9.熟悉Django-rest-framework实现前后端分离
Nodejs的逐渐成熟和日趋稳定,使得越来越多的公司开始尝试使用Nodejs来练一下手,尝一尝鲜。在传统的web应用开发中,大多数的程序员会将浏览器作为前后端的分界线。将浏览器中为用户进行页面展示的部分称之为前端,而将运行在服务器,为前端提供业务逻辑和数据准备的所有代码统称为后端。
前后端分离是web应用的一种架构模式。在开发阶段,前后端工程师约定好数据交互接口,实现并行开发和测试;在运行阶段前后端分离模式需要对web应用进行分离部署,前后端之间使用HTTP或者其他协议进行交互请求。在前后端分离架构中,后端只需要负责按照约定的数据格式向前端提供可调用的API服务即可。前后端之间通过HTTP请求进行交互,前端获取到数据后,进行页面的组装和渲染,最终返回给浏览器。
从目前应用软件开发的发展趋势来看,主要有两方面需要注意:
越来越注重用户体验,随着互联网的发展,开始多终端化。
大型应用架构模式正在向云化、微服务化发展。
10.熟悉 MySQL 数据库,熟练使用 SQL 语句
https://www.cnblogs.com/1234abcd/p/5530314.html
11.熟悉 mysql、Redis数据库
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
12.熟悉MVT/MVC 开发思想,
MVC各部分的功能
M全拼为Model,主要封装对数据库层的访问,对数据库中的数据进行增、删、改、查操作。
V全拼为View,用于封装结果,生成页面展示的html内容。
C全拼为Controller,用于接收请求,处理业务逻辑,与Model和View交互,返回结果。
MVT各部分的功能
M全拼为Model,与MVC中的M功能相同,负责和数据库交互,进行数据处理。
V全拼为View,与MVC中的C功能相同,接收请求,进行业务处理,返回应答。
T全拼为Template,与MVC中的V功能相同,负责封装构造要返回的html。
13.熟悉 Scrapy 框架使用
组件
Scrapy Engine
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
调度器(Scheduler)
调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。
下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给spider。
Spiders
Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。 更多内容请看 Spiders 。
Item Pipeline
Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。 更多内容查看 Item Pipeline 。
下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response(也包括引擎传递给下载器的Request)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看 下载器中间件(Downloader Middleware) 。
一句话总结就是:处理下载请求部分
Spider中间件(Spider middlewares)
Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看 Spider中间件(Middleware) 。
一句话总结就是:处理解析部分
数据流(Data flow)
Scrapy中的数据流由执行引擎控制,其过程如下:
引擎打开一个网站(open a domain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。
引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。
引擎向调度器请求下一个要爬取的URL。
调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。
一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。
Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。
(从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。
14.熟练使用 Xpath 与 BeautifulSoup分析页面结构
https://www.cnblogs.com/vipchenwei/p/7807860.html
15.熟练使用numpy、pandas、matplotlib对数据进行清洗、及可视化