python + web面试题(多年经验讲解,没有之一)(¥47)

1.在web服务器中碰到过哪些安全问题?

a.不使用mysql root密码
b.跨站请求伪造(20年前使用这个技术就是很牛的存在)现在django自带跨站请求伪造的防止(csrf_token)
c.记录用户密码使用hash,不要使用明码(以前的csdn存用户密码就是明码)
d.linux相关软件的安装避免使用root (在测试服务器才会使用到root用户)
e.关闭web服务器debug模式.(报错的时候只会有提示码,不会显示具体的错误信息)

f.注意数据库操作防止sql注入攻击(在项目上线的时候debug要关闭,报错是会有错误日志的体现,别人可以通过错误日志看到我们的错误结构和我们使用的sql语句,有些扫描器就是扫描这些debug没关闭的网站,来进行sql注入攻击)通过在我们的网址后面构建一个参数,写入sql语句,请求到我们的页面上,即可对用户信息等进行修改登录,

**sql注入攻击:**SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
这些只是容易理解的

2.Flask中的请求上下文和应用上下文是什么?
a. 在Flask中处理请求时,就会产生一个 “请求上下文” 对象,整个请求的处理过程,都会在这个上下文对象中进行。这保证了请求的处理过程不被干扰。包含了和请求处理相关的信息,同时Flask还根据werkzeug.local模块中实现的一种数据结构LocalStack用来存储“请求上下文”对象。
b. “应用上下文” 也是一个上下文对象,可以使用with语句构造一个上下文环境,它也实现了push、pop等方法。“应用上下文” 的构造函数也和 “请求上下文” 类似,都有app、url_adapter等属性。“应用上下文” 存在的一个主要功能就是确定请求所在的应用。

3.如何提升web项目的性能,你们公司如何做压力测试,并发是多少?

压力测试对人来说,就是我们运动的极限。当然对我们的网站来说,网站能支持2000人同时访问,2000人同时并发的时候就是压力测试。(当然需要使用压力测试工具如:http_load,webbench,ab(apache ab),Siege),使用的时候后台会显示运行情况,来判断网站的承载量。(形象的比喻就是和我们对手机跑分一样)服务器好不好,先跑个分。

其次在面试的时候要表明使用过阿里云,自己或者公司的配置,可以支持多少人的并发,表达你使用过。

a.使用合理的架构(nginx uwsgi app server(django flask)),使用nginx的负载均衡,构建app server集群 (使用前后端分离的web开发应用程序,发挥nginx对静态资源处理比较好的特点,又发挥nginx的负载均衡和反向代理机制,根据用户的访问量,实时的在后台并发多个应用程序server来进行负载均衡,这样来提升web项目的性能,)

b.优化数据库的访问(优化sql语句,优化读写操作,使用redis做缓存实现读写分离) (背景:电脑上访问最快的存储是cpu上的一级缓存(cpu的更新换点主要是提高cpu一级缓存的命中率,操作系统配合cpu的更新))redis是key velue型的数据库

c.数据库的分表(将数据放到不同的表中,将item表分成item01,item02,item03,表具有相同的结构)

d.redis作为mysql的缓存服务器(读写分离)

e.loadrunner(1,2千)
Apache ab并发负载压力测试

4.跨域的原理,在Flask及Django中如何处理跨域(jsonp的原理)

a. XMLHttpRequest只能访问同一个域下的资源
b.jsonp本质使用

c.服务器端通过安装django和flask的cors插件实现

d.在响应中添加response.headers[‘Access-Control-Allow-Origin’] = ‘*’实现

5.Web开发中如何处理日志

a.使用系统logging模块记录
b.严格按照日志级别打印(info,debug,warn,error)
c.严格按照指定格式输出到指定文件

6.在Web开发中有没有碰到过Sql性能问题,如果找出有问题的Sql语句?如何优化Sql查询

a.联合查询过多,嵌套查询过多
b.业务复杂(比如:购物流程),需要优化业务流程
c.设计表结构严格按照数据库范式,减少冗余字段
d.使用redis缓存进行读写分离

7.你们公司的项目是如何部署上线及测试的

a.nginx+uwsgi+django 
b.使用docker容器化技术进行部署和测试

8.web项目中如何处理大批量的二进制文件

 a.不要把二进制文件直接存库,存地址和本机存放的路径
 b.fastdfs

9.一个电商网站开启了一个秒杀活动,需要大量的查询访问,是否能够直接查询关系型数据库,能否优化该流程
a.使用redis进行读写分离
b.使用锁机制保证购买结果不冲突。

10.是否用过存储过程和触发器,简单介绍
a.存储过程是mysql提供的函数,批量执行sql语句
b.触发器是表发生增删改查操作的时候,可以关联执行的sql语句

11.如何优化Python的性能?
a.程序的角度
b.编译器的角度
CPython
PyPy

猜你喜欢

转载自blog.csdn.net/weixin_43721133/article/details/89005136