python后端面试第七部分:项目部分--长期维护

##################    Python语法基础        #######################

项目部分

4.python适合的场景有哪些?当遇到计算密集型任务怎么办?

Python适合的场景1. 科学计算 2. 快速原型开发 3.网站. 4. 脚本。 实际上在各个方向上它都有挺多应用,前列几项算是比较火的吧。计算密集型任务模块用C/C++做。多进程,多线程也可以稍微提高些。

5.python高并发解决方案?我希望听到twisted->tornado->gevent,能扯到golang,erlang更好

安全

web安全相关 
1.sql注入是怎么产生的,如何防止?

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,

最终达到欺骗服务器执行恶意SQL命令的目的。

如何防止:

1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和

双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

2.xss如何预防?html escape后能否避免xss?

密码技术

1.什么是分组加密?加密模式有哪些?ecb和cbc模式有什么区别?为什么需要iv向量?

2.简单说说https的过程?

http 运行在TCP 之上,数据明文传输。HTTPS 运行在SSL/TLS之上,SSL/TLS运行在TCP之上,是加密协议,因此HTTPS传输

的已经是加密的数据,加密采用对称加密。但对称加密的密钥用服务器方的证书进行了非对称加密。

SSL/TLS中使用了非对称加密,对称加密以及HASH算法。

http://www.cnblogs.com/binyue/p/4500578.html

HTTPS一般使用的加密与HASH算法如下:
非对称加密算法:RSA,DSA/DSS
对称加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256

3.对称加密与非对称加密区别?

对称加密是指加密和解密使用的密钥是同一个密钥,或者可以相互推算。

对称加密的优点是算法简单,加解密效率高,系统开销小,适合对大数据量加密。

缺点是解密加密使用同一个密钥,需要考虑远程通信的情况下如何安全的交换密钥,如果密钥丢失,

所谓的加密解密就失效了。

非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公开,被称为公钥,另一个只有所有者知道,

称作私钥。
用公钥加密的信息必须用私钥才能解开,反之,用私钥加密的信息只有用公钥才能解开。

4.如何生成共享秘钥? 如何防范中间人攻击?

后端工程师的一年经验总结

这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼。遂决定梳理一下自己所学的东西,为大家分享一下。

经过一年意识到以前也有很多认识误区,比如:

偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动。

不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因,不要只会用不知道原理,那是加工厂出来的。现在ide查看代码那么方便,ctrl+点击就进入了JDK查看实现细节。

好高骛远,在计算机基础不牢固的情况下,总想着要做架构,弄分布式,搞大数据之类。

不重视性能,只求能实现功能,sql查询是不是可以优化,是否有算法妙用,大对象是否要清除。

不重视扩展性,模块之间紧密耦合,常用方法不提取成工具类,调用关系混乱等问题。

都是让简单的介绍下你在公司的项目,不管是不是后端相关的,主要是要体现出你干了什么;

你在项目中遇到最难的部分是什么,你是怎么解决的;

十万个人抢100个红包,怎么实现?然后又跟着这个继续问了一些问题;

说一下你最近看的三本书,介绍一下;

说一下你看的书中印象最深的东西,我说了看redis实现原理中有个跳跃表,竟然以前不知道,然后让我介绍一下,没说出来,尴尬了。自己不熟的东西还是不能说啊,不然分分钟打脸;

如果在内部进行技术分享,你会分享什么?

记不住了。。

主要按照我简历上的内容来问,比如画一下现在的结构图,用的主要表,怎么优化数据库等;

别的竟然想不起来了,好像主要就是问的项目的问题;

Python并发的解决方案

Twisted是一个事件驱动型的网络引擎,不同于单线程和多线程模式,这种模式不需要过多去关心线程锁的问题,当遇到高并发问题时候,采用twisted会很好解决数据共享的问题。

Tornado既是一个web server,也是web framework。就是说这个web框架有自己内置的web server,在写web时候可以用到它的高性能网络库,甚至有公司拿这个来做游戏的服务器,可以用它处理高并发问题。

Gevent是基于协程的Python网络库,基于libev的快速事件循环,基于greenlet的轻量级执行单元,API的概念和Python标准库一致。

sanic基于uvloop和httptools实现高并发异步网络框架

什么是敏捷开发?

敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
107. 简述 jenkins 工具的作用?

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
108. 公司如何实现代码发布?
1、开发人员提交代码更新,主要提交的字段包括“更新理由”,“svn代码路径”;
2、后端收到请求后,把此数据插入到数据库,标记此更新单为“等待预发布环境更新”的状态;
3、后台进程定时查询是否有等待预发布环境更新的更新单,如果有,读取svn路径,执行svn up更新代码操作,并标记此更新单为“预发布环境已更新,等待完成测试”;
4、开发人员或者测试人员通过预发布环境的域名来测试功能是否正常,如果不正常,作代码修改后提交svn,再到web发布后台点击“返回修改”,对svn路径或者不做任何修改再点击“重新提交”,然后更新单又一次回到”等待预发布环境更新“状态。循环3、4步骤,直至预发布环境测试通过为止;
5、在确认测试通过后,开发人员点击”测试通过“,这时更新单进入”等待审核状态“;
6、负责人确认可以发布后,点击”审批“按钮,这时更新单进入”审核通过,等待执行发布操作“的状态。这时,开发人员得到发布代码的授权;
7、开发人员点击”发布代码“按钮,更新单进入”已执行发布,等待系统完成发布“状态;
8、后台进程查询状态为”已执行发布,等待系统完成发布“的更新单,执行git发布命令。git命令大概为,进入预发布代码目录,执行git add .;git commit -m “更新原因”;git tag 上一次版本号+1,再进入已发布代码的目录,执行git pull同步预发布代码目录的更改。最后调用rsync命令同步代码到生产环境。

http://blog.jobbole.com/110304/

简述 RabbitMQ、Kafka、ZeroMQ的区别?
RabbitMQ
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正因如此,它非常重量级,更适合于企业级的开发。同时实现了Broker构架,这意味着消息在发送给客户端时先在中心队列排队。对路由,负载均衡或者数据持久化都有很好的支持。

Redis
Redis是一个基于Key-Value对的NoSQL数据库,开发维护很活跃。虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。对于RabbitMQ和Redis的入队和出队操作,各执行100万次,每10万次记录一次执行时间。测试数据分为128Bytes、512Bytes、1K和10K四个不同大小的数据。实验表明:入队时,当数据比较小时Redis的性能要高于RabbitMQ,而如果数据大小超过了10K,Redis则慢的无法忍受;出队时,无论数据大小,Redis都表现出非常好的性能,而RabbitMQ的出队性能则远低于Redis。

ZeroMQ
ZeroMQ号称最快的消息队列系统,尤其针对大吞吐量的需求场景。ZeroMQ能够实现RabbitMQ不擅长的高级/复杂的队列,但是开发人员需要自己组合多种技术框架,技术上的复杂度是对这MQ能够应用成功的挑战。ZeroMQ具有一个独特的非中间件的模式,你不需要安装和运行一个消息服务器或中间件,因为你的应用程序将扮演这个服务器角色。你只需要简单的引用ZeroMQ程序库,可以使用NuGet安装,然后你就可以愉快的在应用程序之间发送消息了。但是ZeroMQ仅提供非持久性的队列,也就是说如果宕机,数据将会丢失。其中,Twitter的Storm 0.9.0以前的版本中默认使用ZeroMQ作为数据流的传输(Storm从0.9版本开始同时支持ZeroMQ和Netty作为传输模块)。

ActiveMQ
ActiveMQ是Apache下的一个子项目。 类似于ZeroMQ,它能够以代理人和点对点的技术实现队列。同时类似于RabbitMQ,它少量代码就可以高效地实现高级应用场景。

Kafka/Jafka
Kafka是Apache下的一个子项目,是一个高性能跨语言分布式发布/订阅消息队列系统,而Jafka是在Kafka之上孵化而来的,即Kafka的一个升级版。具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka通过Hadoop的并行加载机制统一了在线和离线的消息处理。Apache Kafka相对于ActiveMQ是一个非常轻量级的消息系统,除了性能非常好之外,还是一个工作良好的分布式系统。
110. RabbitMQ如何在消费者获取任务后未处理完前就挂掉时,保证数据不丢失?


111. RabbitMQ如何对消息做持久化?

https://www.cnblogs.com/xiangjun555/articles/7874006.html
112. RabbitMQ如何控制消息被消费的顺序?

https://blog.csdn.net/varyall/article/details/79111745
113. 以下RabbitMQ的exchange type分别代表什么意思?如:fanout、direct、topic。

https://www.cnblogs.com/shenyixin/p/9084249.html
114. 简述 celery 是什么以及应用场景?
Celery是由Python开发的一个简单、灵活、可靠的处理大量任务的分发系统,它不仅支持实时处理也支持任务调度。
http://www.cnblogs.com/wupeiqi/articles/8796552.html
115. 简述celery运行机制。


116. celery如何实现定时任务?


117. 简述 celery多任务结构目录?


118. celery中装饰器 @app.task 和 @shared_task的区别?

原文地址:https://www.cnblogs.com/andy0816/p/12228530.html

时间: 2024-11-06 07:39:23

python后端面试第七部分:项目部分--长期维护的相关文章

python后端面试第二部分:网络编程--长期维护

##################    Python语法基础        ####################### 1,tcp/ip协议,tcp和udp, 2,进程,线程,协程, 原文地址:https://www.cnblogs.com/andy0816/p/12228495.html

python后端面试第一部分:python基础--长期维护

python后端面试第一部分:python基础 ##################    Python语法基础        ####################### 变量常量 数据类型:数值型,字符串,列表,元组,集合,字典的操作, 控制语句:for循环,while循环,if语句 ##################    Python函数        ####################### 函数的定义 函数的参数 匿名函数 高级函数, Python内置函数 Python的:

python后端面试第五部分:Linux操作系统--长期维护

##################    Python语法基础        ####################### Linux操作系统 操作系统,可以直接认为是linux,毕竟搞后端的多数是和linux打交道. 1. tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗? TCP/UDP, 可靠与非可靠:三次握手,四次挥手:滑动窗口,拥塞控制: TCP粘包: http://blog.chinaunix.net/uid-429659-id-5207848.html 2.

记2017年年底,几次Python后端面试

前记:16年本科毕业,选了大公司的QA,工作一段时间后发现更喜欢做开发,遂走上了转岗之路,在一家小公司的做了半年开发之后,由于公司原因,遂开始了艰难的投简历面试之路.临近年底,工作机会不是很多,下面记录了部分面试的公司,因为这些都记不全问了啥了,就统一写在一个里了.之前之后有其他文章记录了剩余公司的面试. 1. 果壳 电话面试: 说一下TCP的三次握手,四次挥手,为什么会这样? http安全的性的了解,说一下对cookie和session的了解: 对mysql的了解,说一下你常用的数据类型,ch

Python后端技术栈(七)--web框架

1.7 Python web 框架 上篇文章对数据库中的一些经典问题做了总结,比如关系型数据库中事务.隔离级别.慢查询分析.索引原理以及非关系型数据库的数据结构等等. 本篇文章将开始 Python web 框架的相关内容,开始咯~ 1.7.1 Python WSGI 与 web 框架 1.7.1.1 什么是 WSGI ? 我们经常使用 uwsgi/gunicorn 部署 Django/Flask 应用,但是大家思考过一个问题没有,为什么不同的框架可以部署在相同的 web 服务器上呢?比如为什么

python后端面试第八部分:HR面试部分--长期维护

##################    Python语言       ####################### HR面试部分 hr面 聊了下为啥离职: 聊了下基本情况: 薪资问题, 原文地址:https://www.cnblogs.com/andy0816/p/12228586.html

python后端面试第六部分:git版本控制--长期维护

##################    Python语法基础        ####################### git版本控制 git常见命令作用某个文件夹中的内容进行版本管理:进入文件夹,右键git bashgit init 初始化,当前所在的文件夹可以被管理且以后版本相关的数据都会存储到.git文件中git status 查看当前文件夹以及子目录中文件是否发生变化:内容修改/新增文件/删除,已经变化的文件会变成红色,已经add的文件会变成绿色git add . 给发生变化的文

python后端面试第四部分:django框架--长期维护

##################    Python语法基础        ####################### django框架部分 1,流程 2,admin 3,视图 3,路由 4,csrf 3.csrf是什么?django是如何防范的? django请求的生命周期, 浏览器-wsgi-中间件-路由-视图-然后处理数据等,返回数据 3,什么是wsgi?是一个协议,还有一些需要理解, 4,中间件是什么?在视图之前定制一些操作, 5,使用中间件做什么?做过什么认证,权限,跨域,等,

python后端面试第二部分:数据储存与缓存相关--长期维护

##################    数据储存与缓存相关        ####################### mysql数据库, redis数据库, 原文地址:https://www.cnblogs.com/andy0816/p/12228500.html