欢迎光临
我们一直在努力

python后端需要掌握的东西

https://blog.csdn.net/weixin_41738417/article/details/94287073

侧重知识点

在我参加的后台开发岗位面试中,主要有以下知识是比较侧重:

数据库CRUD操作/查询优化以及数据库知识量框架的对比和了解/项目具体模块的业务逻辑描述常见排序算法Linux系统的常用命令和Linux系统了解程度考核项目部署用到的服务器的配置和了解程度

加分项

数据库基本功必须掌握但同时更重要的是理解为什么和是如何实现的,拓展自己知识面Linux系统的底层原理和了解程度目前Golang在后端中也逐渐流行,有时间还是需要去掌握技术没有终点,保持乐于学习和接受新技术的心态,面试官看重技术能力同时也更看重你的心态自信且好学

 

面试问题

问题就给大家了,答案自己去查找吧。只有经过自己努力的东西才会格外珍惜与铭刻。

01. Python相关

实现一个单例模式

实现一个装饰器

用Python实现快排

如果系统中需要很多个Python版本,如何进行Python版本的管理

如何实现一个全局变量?(除了global,还可以通过单例模式)

02. 数据库

数据库的数据是实时更新的吗?每点击一次,数据库数据修改一次?

Redis hash的个数如何修改Redis数据库的库的个数?

Redis数据库如何实现持久化

Redis数据库支持的数据类型

Redis使用AOF方式持久化,aof文件不断增大,如何处理?

Redis数据库如何设置密码

hash表是如何生成的

MySQL数据库如何使用sql语句插入一条数据

MySQL数据库的慢查询有了解过吗

MySQL数据库如何进行查询优化

如何很多请求同时对Redis的同一个键进行访问,如何保证数据安全

说说Redis的淘汰机制

我的MySQL数据库每天晚上12点进行全备份。第二天有员工在9点钟误删除了一个数据库,但在10点钟才被发现。问如何进行恢复被误删除的数据库并同时保留9点到10点钟新增的数据同时不影响业务的正常运行?

当数据越来越多,如何避免hash槽中key出现相同的情况?

MongoDB在哪些场合使用过?

03. 项目部署

大家都说Nginx快?快的原因是什么?

对RPC了解吗?

如何在服务器上设置业务进程数?

说说正向代理和反向代理

 

04. Linux相关

如何查看剩余内存

如何查看端口是否被占用

如何查看一个程序的PID以及它的所有子进程

如何为一个目录下的所有文件添加权限

如果你对一个目录具有写权限,那么你是否具有对这个目录下的所有文件具有删除权限?

对Linux多路复用的理解

修改IP地址的方法

05. 前端相关

1. 对前端HTML CSS 和 JS了解多少?熟悉吗?

2. 对React和bootstrap了解吗?

3. 如何进行http优化?(响应头设置Content-Encoding: gzip)

06. 网络编程

说一下实现TCP建立连接的过程以及当时进入了什么状态?

为什么建立连接只需要3次,断开连接需要4次?

为什么断开连接时第二次和第三次要分开,不能合在一起吗?

 

 

07. 项目相关

说一下一个请求过来到返回response的过程

如何实现单点登录

JWT token是如何进行生成和校验的

了解过哪些后端框架?

Tornado了解吗?

了解过webapp2吗

Django如何实现csrf攻击保护

说说你项目中遇到的困难以及如何解决

说说你认为自己最有成就感或最深刻的项目

对KAFKA了解吗?

用过哪些消息队列?

使用过RabbitMQ吗?

项目团队几个人?开发多长时间?

 

08. 版本控制

如何从远程仓库拉取分支到本地

如何进行版本回退

09. 其他内容

Celery的原理和应用场景

Elasticsearch 的原理

平时是如何学习的?

有关注哪些技术?

Docker的了解,常用命令,

如何暴露端口

对ERP了解吗?

Odoo了解吗?

语言层面
1.精通Python语言,了解Python高级特性,了解设计模式,能够读懂开源框架代码。
2.前端要熟悉HTML/CSS/JS,了解ES6特性,至少会使用一个前端框架,例如JQuery或者Vue。

数据库
1.关系型数据库Mysql、Postgresql,性能调优
2. 非关系型数据库Mongodb(可选)
3. 缓存型数据库Redis (必备)

Python框架
掌握Flask、Django、Tornado或其他Web框架,熟悉或者精通其中任意一个即可,能够了解这些框架的底层实现原理和机制。

Web
熟悉TCP/UDP/HTTP协议等基础理论知识。
熟悉web常见的验证方式,如Basic Authentication、Token Authentication和JWT验证,熟悉第三方登录如OAuth2.0。
熟悉RESTful API的设计理念,熟悉CRUD基本操作
了解Web Sockets

搜索引擎
了解或者熟悉ElasticSearch、Solr、Sphinx

消息队列
了解RabbitMQ、Kafka

其他
熟悉Docker,能够使用Docker部署项目

系统
熟悉Linux的常见操作,熟悉云计算平台如阿里云、腾讯云、AWS,熟悉Nginx或者Apache的常见配置,能够熟练部署项目到Linux服务器上

整理下目前涉及到的python的技术栈和工具栈(用过或了解的, 其他的后续用到再补充)

  • 编辑器

最常见: vim / SublimeText2 / PyCharm

Vim有兴趣可以看看 k-vim 适合Python/Golang开发

  • 本地环境
    pip/easy_install 包管理

viertualenv + virtualenvwrapper 库/版本管理, 环境隔离

ipython/ipdb

  • Web 框架
    Python 的Web 框架非常多……

个人偏好[有分先后]

flask 轻量! 可以灵活组合各类组件进行开发(第三方组件很丰富), 简单高效, 便于快速开发和维护.

tornado 异步, 高性能, 最新版本4.0

django 有些重, 配置和约定众多, 可以快速开发一些”管理”性质的后台, 其版本更新非常快

其他:

bottle 类flask, 一个文件, 足够小

SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL.

似乎这个就足够了, 无出其右

  • 模板

只提第三方(很多框架自带了, 例如Django/Tornado), 话说天下模板都大同小异

Jinja2, 最喜欢的一个, 之前写了篇 PYTHON模板-JINJA

Mako, 介绍PYTHON模板-MAKO

还有挺多的, 后续了解后补充

  • 代码管理及Wiki

使用git, 搭建gitlab
gilt针对项目级别, 可以用markdown写一些文档, 可以简单的code review, 可以进行讨论等等.

Wiki的选择:

gollum 很赞

trac老牌, 但是个人不大喜欢其语法编辑方式.

  • 代码发布

fabric + rsync

rsync 用于生产代码目录的同步, 足够简单强大

fabric 用于自动化部署, 将流程固化到脚本中重复使用, 提高效率降低风险, PYTHON FABRIC实现远程操作和部署

Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.

  • 项目部署

nginx 服务器, 主要用于负载均衡, 反代等

gunicorn a Python WSGI HTTP Server for UNIX, 用来运行Flask项目

Supervisor A Process Control System, 配置管理各种程序, 进程监控, 自动重启等

  • 监控

nagios 服务器各类参数监控, 负载,内存,IO, 网络等, 也可以配置对进程进行监控报警

sentry 实时收集事件日志, 可以在管理后台查看到当前程序异常及报错具体信息, 很强大的平台, 支持多种语言的程序

statsd + graphic

statsd 实时服务数据收集(e.g. counters and timers) 收集后数据提供给graphic进行展示

graphic 企业级开源监控工具(数据绘图工具),用于采集服务器实时信息并进行统计, Graphite 自己本身并不收集具体的数据,这些数据收集的具体工作通常由第三方工具或插件完成. 其控制台前端项目 tessera

  • NOSQL

redis 缓存/持久化/特殊需求(计数-排行榜-时间线等)

memcached 集群, 多用于有时限性质的缓存

mongodb 在技术选型玩了下, 没有正式在生产用过

  • 数据库

mysql 不解释, 感觉是不是所有Python的底层db都是mysql……

postgresql 开发日志统计系统使用过, 学院派, 各种牛叉的功能, 对json的支持令人印象深刻.

  • 抓取

beautifulsoup 配合urllib2或者requests库进项简单的抓取分析工作

scrapy 很牛的抓取框架, 适合规模较大,需求复杂的的抓取任务

完成搜索功能, 虽然Python也有一些实现, 但是感觉还是使用成熟的方案会好些, 文档/资源丰富, 便于开发和维护. Solr, 足够简单及强大.

  • 好用的第三方

requests HTTP for humans, 非常好用, 强烈推荐

jieba 中文分词

  • 异步和队列

gearman 支持分布式的任务分发框架, 并行/不同语言之间的通信. 之前使用主要用来跨机器任务分发.

celery 分布式任务队列

zeromq 之前使用的消息系统是基于这个的, 没有研究过

  • 日志

logstash 日志收集和分析, 支持不同来源不同格式, 进行统一收集和分析处理

Elasticsearch 数据

Kibana A log analyzing web interface for logstash and elasticsearch

三者组合

web框架
这个是最直接的,一门语言要成为web后台语言,首先要有处理web后台相关的库,然后在一些巨人的封装下,形成web框架。python目前热门的web框架有:Django、tornado、flask,web.py,web2.py等。我自己接触过,web.py、tornado。

restfull
目前后台组织代码比较火的规范之一。

pep8
目前python代码编码规范之一

web server
webserver为网上信息浏览服务,对后台来说,生产环境往往会涉及这部分的内容。所以常见的webserver的配置,优化。是必修的功课之一。而且目前webserver往往作为软件负载均衡最终要的一环。所以地位更加重要。常用的webserver:nginx,Lighttpd,apache等。我目前接触够,Lighttpd,nginx

语言数据库相关的lib
python以众多的库作为自己的有点之一。自然少不了数据库相关的,而目前项目数据库往往使用ORM相关的库。我目前接触过的:peewee

数据库
目前接触过的:mysql 、redis,memcached。数据库目前作为大型web应用方便的技术点:集群,读写分离,数据分片,灾备,负载。

服务运行环境:linux
web后台大多在Linux上运行;主流的Linux放行版本有:centos,Ubuntu,Debian等。我目前只接触过centos。其中6.5、7.5都使用过。
在此之上,往往需要针对Linux做一些配置:

运行环境:保证后台服务可以运行
自己后台python代码的运行,nginx转发服务的运行。

安全环境:保证后台服务可以持久健康
往往涉及权限,安全:iptables,作为centos下防火墙,路由等功能使用。

定时出发任务
crond,算是良心好用的了。可以独立于web后台之外。

跨平台运行环境:docker
容器作为目前比较火热的技术。自然python web后台也可以结合起来。提供无线方便。

版本控制
常用的版本控制软件:git、svn等

持续交付/集成
作为目前提高效率的主流做法:我接触过的软件有:jenkins.
开发环境
开发工具
Vim/SublimeText2/PyCharm/VS Code
用着顺手就好,我是由vim转PyCharm的。集成开发环境自动补全、单步调试等功能好很多,有利于提高工作效率。
iTerm:Mac下必备,谁用谁知道
Tmux:分屏工具,可以复用session,这点很赞
XShell:远程登录
Sequel:数据库登录
Postman:HTTP接口调试工具
开发环境
pip/easy_install 包管理
viertualenv + virtualenvwrapper 库/版本管理,环境隔离
ipython
pydev
项目开发
代码管理
Git:版本管理,SVN基本已经被淘汰
Gitlab:大部分互联网公司都是搭建自己的Gitlab
Source Tree:Git客户端,方便diff代码 管理分支
Jenkins:持续集成
Web框架
Django:有些重,配置和约定众多,即可作为成熟的web框架,有可快速开发一些”管理”性质的后台
Flask:轻量! 可以灵活组合各类组件进行开发(第三方组件很丰富),简单高效,便于快速开发和维护
Tornado:异步,高性能。
Python Web框架也是超多,目前主流的就是这三个了;目前工作中用过的Django和Tornado。
ORM
SQLAlchemy:标配MySql ORM
PyMongo:MongoDB ORM
peewe:一个更轻量的ORM,简单了解,没在生产环境用过
数据库
MySql:标配,关系型数据库
MongoDB:NoSql数据库,不久前好像不开源最新版本了。
TiDB:高拓展性,后起之秀
缓存Cache
Redis:缓存/持久化/特殊需求(计数-排行榜-时间线等),用codis做集群来访问
Memcached:数据结构没有Redis丰富
目前业务中这2个都有用到,感觉Redis有逐渐取代memcached的趋势
分布式存储
HDFS:大数据分布式存储
Hive:分析数据
Hbase:列数据库,可以存储海量数据,上10亿条不在话下,跟关系型数据库区别较大
消息队列
RabbitMQ:Python中pika操作
celery:分布式的异步任务处理器,配合RabbitMQ或Redis使用
项目测试
软件测试:单元测试,集成测试,压力测试等等;很多开发瞧不起测试,但是考虑周全的、高效的测试不容易
测试工具:请参考我整理的Python 测试工具
项目运维
服务部署
Nginx:主要用于负载均衡,反向代理,使用极为广泛
uWSGI:用来部署Django项目
Gunicorn:a Python WSGI HTTP Server,用来运行Django/Flask项目
日志&监控
Kibana:ElasticSearch可视化平台,方便查log
Falcon:小米开源的监控系统
grafana:可视化的监控平台
运维管理
SaltStack:别名,盐栈。自动化运维工具
Puppet:Ruby开发的服务器管理系统
Fabric:用于自动化部署
Supervisor:A Process Control System,配置管理各种程序,进程监控,自动重启等
Ansible: Ansible一种集成IT系统的配置管理,应用部署,执行特定任务的开源平台
其他
Python学习资源
请参考我整理的Python免费学习资源
常用三方库
请参考我整理的Python常用三方库
前端基础
html,css,JavaScript,jQuery,BootStrap,AngularJS,React,vue.js
作为一个后端工程师,了解一些基本的前端知识也是必要的,关注下业界动态,按需学习即可。
目前工作中用到jQuery + BootStrap + AngularJS来开发后台管理系统。
软件工程
设计模式
Python是动态语言,许多Java复杂的设计模式用Python实现很简单,基本的设计模式也会用到。
常用的有组合模式,单例模式、装饰器模式、工厂模式。
REST接口 vs RPC接口
软件工程说起来可能比较务虚,有比较才有差距,多看别人代码,借鉴提高。
云计算&AI
大数据:Hadoop生态、Spark、Flink等,程序员进阶的方向
容器:K8S,Memos,Docker,目前看起来K8S大局已定
虚拟化:KVM,OpenStack
公有云:AWS,阿里云,Azure
————————————————
版权声明:本文为CSDN博主「dutsoft」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dutsoft/article/details/99687702

赞(0) 打赏
未经允许不得转载:乌西塔 » python后端需要掌握的东西

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

微信扫一扫打赏