##################    项目部分       #######################

1,你怎么测试自己的代码的?自测

2,开发使用windows还是Linux,虚拟环境的问题,一个项目一个虚拟环境,Python的多版本管理,

6. 有一个问答平台,每个用户对一个问题最多只能回答一次,同一个问题最多只能对一个答案点赞;1)设计合适的数据库结构;2)写出SQL获取点赞数最多的10个问题;
我平时也就用数据库查数据,在设计数据库上没有深入研究,因此的我答案就简单写了有哪些表,字段分别是什么,至于题中的条件限制,就交由后台的程序逻辑去处理,而不是在数据库设计层面去限制。因为是自己设计的表结构,SQL本身也就不难。

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的区别?

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

  1. 记搜狗一次不成功的Python后端面试经历

    面试搜狗Python后端结束快一个月了,终于有时间来做一个简单的总结了. 简介:工作不久,基础后端岗位,一面结束,失败. 先做了几个笔试题,面试开始会根据笔试题问一些内容.下面将整理一下还能想起来的内 ...

  2. 知乎Python后端面试总结

    一面 写个快速排序热热身,分析一下复杂度,如果不使用额外的空间,应该怎么写? 说一下Flask中g是怎么实现的,原理是什么? 说一下浏览器从输入url到页面渲染的过程,越详细越好: 了解web安全吗? ...

  3. python后端面试第八部分:制作简历和如何面试--长期维护

    ###############     就业指导    ################ 这里面有套路,你懂了这个套路,你会找到更好的工作,你会更快的找到工作, ,如何制作简历,五颗星 ,如何投递简历 ...

  4. 如何应对外包公司(文思海辉)的Python后端面试

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_151 最近春招如火如荼,我接触到的几位同学也纷纷去市场里试了试水,不得不说由于疫情的影响,导致目前中等水平的开发者择业有了些许困难 ...

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

    1. 果壳 电话面试: 说一下TCP的三次握手,四次挥手,为什么会这样? http安全的性的了解,说一下对cookie和session的了解: 对mysql的了解,说一下你常用的数据类型,char和v ...

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

    ##################     Linux操作系统      ####################### 1,讲一下你常用的Linux/git命令和作用: 2,查看当前进程是用什么命 ...

  7. python后端面试第二部分:网络编程和并发编程--长期维护

    1. 简述 OSI 七层协议. 2. 什么是C/S和B/S架构? 3. 简述 三次握手.四次挥手的流程. 4. 什么是arp协议? 5. TCP和UDP的区别? 6. 什么是局域网和广域网? 7. 为 ...

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

    ################## git版本控制 ####################### 1,git常见命令作用 2,某个文件夹中的内容进行版本管理:进入文件夹,右键git bash 3, ...

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

    1. 列举常见的关系型数据库和非关系型都有哪些?2. MySQL常见数据库引擎及比较?3. 简述数据三大范式?4. 什么是事务?MySQL如何支持事务?5. 简述数据库设计中一对多和多对多的应用场景? ...

随机推荐

  1. MAVEN报错Could not get the value for parameter compilerId for

    Maven:Could not get the value for parameter compilerId for plugin execution default-compile..... 前两天 ...

  2. C++代码质量度量工具大阅兵

    姊妹篇:Java代码质量度量工具大阅兵: https://www.cnblogs.com/jiangxinnju/p/10010177.html cppcheck cppcheck: https:// ...

  3. Android studio中2种build.gradle文件介绍

    根目录下的build.gradle通常不需要修改这个文件中的内容,除非需要添加一些全局的项目构建配置 buildscript { repositories { google() //声明代码托管仓库G ...

  4. LeetCode——973. 最接近原点的 K 个点

    我们有一个由平面上的点组成的列表 points.需要从中找出 K 个距离原点 (0, 0) 最近的点. (这里,平面上两点之间的距离是欧几里德距离.) 你可以按任何顺序返回答案.除了点坐标的顺序之外, ...

  5. jsp动作标签学习

    <jsp:useBean> <jsp:useBean>标签用于在指定的域范围内查找指定名称的JavaBean对象,如果存在则直接返回该JavaBean对象的引用,如果不存在则实 ...

  6. Ivory Coast Map

    Fun Facts about Cote d'Ivoire The Republic of Cote d'Ivoire (previously known as the Ivory Coast) is ...

  7. SVN提交时忽略不必提交的文件夹和文件,如node_modules

    空白处右键>选中TortoiseSVN>设置(settings)>常规设置(General)>Subversion>编辑(edit)>在弹出的config文件中找g ...

  8. 【图论算法】Dijstra&BFS

    选择V-S中的点加入S时用了贪心思想,即求d[]中legth最小且未被标记(未加入加入S)的点. 一点都没优化的实现: import java.lang.reflect.Array; /** * Cr ...

  9. Google Guava入门教程

    以下资料整理自网络 一.Google Guava入门介绍 引言 Guava 工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [cachi ...

  10. CF 1047 C - Enlarge GCD [素数筛]

    传送门:http://codeforces.com/contest/1047/problem/C 题意:给出n个数字,求最少删除几个数可以使剩下的数字的GCD大于n个数字的GCD 思路:最开始想的是先 ...