有孚网络面试题总结
-
列表与元组区别?
-
向列表内添加元素?两个列表使用“+”号的结果,与append区别?
-
Python全局变量与局部变量?
__name__
是局部还是全局,函数内变量局部与全局的判断? -
Python垃圾回收机制
-
运算符重载?
-
Django ORM 中F查询与Q查询?
-
数据库迁移命令,多人协同开发时数据库迁移问题解决?
-
python的日志,配置过吗?
-
异常处理:try...except...else...,try...finally...执行的过程?
-
Linux下文件操作:
-
-
vim中命令的使用,有没有用过行,列操作
-
-
Signal模块
-
命令行代码演示
# 1.python中的False
bool(0)
bool('')
bool([])
# ...
# 2. 列表操作
[1, 2] * 2
# 3.==与is区别
# 4.变量赋值引用问题
a = 2
b = a
a += 2
print(a, b)
# 5. 函数传参,解压缩
def func(a, b, c=3, d=4):
print(a, b, c, d)
func(3, *(3, 4))
func(3, *(3, 4), c=6, d=7)
太平洋保险面试题
数据库优化,数据库索引,索引的详细知识点
python 中数据类型,哪些可变,哪些不可变
列表和元组排序
map有没有用过
序列化,为什么使用序列化,哪些数据可以序列化
迭代器与生成器的区别
正则表达式匹配网址 ^((https|http|ftp|rtsp|mms)?://)[^s]+
乐言科技面试
装饰器
# 手写一个装饰器,并打印函数内参数
def wrapper(func):
def inner(*args, **kwargs):
print(args, kwargs)
res = func(*args, **kwargs)
return res
return inner
类的property方法,如何修改类属性
class A:
def __init__(self, x):
self.x = x
python2与python3区别
range 返回值 #返回一个生成器
2: xrange == 3: range
前端问题
# a.js
export default {a: 1}
# b.js
# 如何获取a
# 箭头函数的特点
# css
display: 的属性,至少说两个
JWT认证,认证过程(本来想问HTTP协议的,我就说那我说下http协议呗,结果说太宽泛了)
JWT: {"user": "zhaojun"}
{"user": "test"}
{"user": "zhaojun"}: 加密的校验码
base64
扫码登录问题
手机上已经登录了
你就是微信开发者
扫码登录 web
中软国际华为外包
迭代器,list是迭代器吗
装饰器,传参
多继承(C继承A,B,继承顺序)
先传进来哪个就找哪个,如果A上层还有,继续找上层
经典类深度优先,新式类广度优先
如果关系比较乱,使用mro()方法查看继承图
哪些不会被继承,析构方法
魔法方法,如:__del__()
map()与reduce()(reduce()没答上)
map() 会根据提供的函数对指定序列做映射。
map(function, iterable, ...)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
reduce函数对参数迭代器中的元素进行类累积
格式为:reduce(func,iter,init)
func为函数,iter为序列,init为固定初始值,无初始值时从序列的第一个参数开始
多线程的使用场景,GIL原理
使用threading.Thread()方法
继承threading.Thread类
由于GIL的原因, Python解释器只允许同一时间执行一个线程。多线程不能用,使用多进程
I/O 密集型使用多线程
CPU 密集型使用多进程
TCP三次握手,四次挥手
CSRF预防
MySQL隔离级别,哪些产生脏读,哪些产生幻读
MySQL什么情况下创建索引
较频繁地作为查询条件的字段
出现where的字段
Redis,缓存穿透与缓存雪崩,解决办法(解决办法没答布隆过滤器)
缓存穿透:缓存与数据库中都没有,恶意访问,频繁的查数据库,压力大
解决办法:查询一次,如果没有,缓存中增加空值
采用布隆过滤器(将所有可能存在的数据哈希到一个足够大的bitmap中)
缓存雪崩:同一时间,大量键过期,同时访问数据库,压力大
解决办法:设置过期时间为随机
缓存击穿:前台高并发访问一个已经在缓存中恰好过期的数据,全部打到后台数据库
解决办法:互斥锁,Redis的SETNX功能,数据没有,返回一个设定值,再去查数据库
热点数据设置永不过期
Redis的内存清理机制
定时随机清除
惰性清除
配置文件里的清除(常用清理访问次数最少的)
Restful接口,如果是做计算,群增等设计,返回的状态码
Django的路由层,视图层,模板层,模型层的工作流程
Flask的请求流程,请求上下文(栈实现)
上下文:有两种
RequestContext请求上下文:内部有request和session对象
AppContext程序上下文:内部有g和current_app对象
第一步:创建上下文
Flask根据WSGI Server封装的请求等的信息(environ)新建RequestContext对象 和AppContext对象
第二步:入栈
将RequestContext对象push进_request_ctx_stack里面。在这次请求期间,访问request对象,session对象将指向这个栈的栈顶元素
第三步:请求分发
response = self.full_dispatch_request()
Flask将调用full_dispatch_request函数进行请求的分发,之所以不用给参数,是因为我们可以通过request对象获得这次请求的信息。full_dispatch_request将根据请求的url找到对应的蓝本里面的视图函数,并生成一个response对象。注意的是,在请求之外的时间,访问request对象是无效的,因为request对象依赖请求期间的_request_ctx_stack栈。
第四步:上下文对象出栈
这次HTTP的响应已经生成了,就不需要两个上下文对象了。分别将两个上下文对象出栈,为下一次的HTTP请求做出准备。
第五步:响应WSGI
调用Response对象,向WSGI Server返回其结果作为HTTP正文。Response对象是一个可调用对象,当调用发生时,将首先执行WSGI服务器传入的start_response()函数 发送状态码和HTTP报文头。
Django ORM跨表一次性查询
select_related内部自动连表,连表的时候比较消耗资源,但走数据库的次数少
prefetch_related内部不做连表,多次查询的时候比较消耗资源,但刚给用户的感觉和连表操作一样
Celery Broker使用的什么,结果要保存吗,保存到哪里
uWSGI的工作流程,基于什么协议,使用的什么配置
快速排序,大量重复数据重复影响效率吗,怎么处理(会影响效率,优化没回答上来)
会影响效率
解决办法:分组
三相切割快速排序:分三组
Dockerfile中ADD和COPY的区别,是用ADD还是COPY
COPY是从本地,推荐使用,从本地拷贝,不直接解压
ADD是增强版COPY,可以使用url拷贝,直接解压
JWT校验后,是只能一个用户登录还是多用户可以同时在线,怎么实现只能单用户登录
实现一个用户登录:
将token存入redis,每次登录就刷新redis里的token,这样就能保证token永远只有一个
logging模块,日志过大怎么办
python的元类,Django ORM底层用到元类
元类其实就是产生类的类,我们可以通过元类来拦截类的创建过程,这个地方我自己通过元类写过一个简易版本的ORM
首先ORM全称叫对象关系映射,能够让不会数据库操作的程序员通过面向对象的方法简单快捷的操作数据库,ORM有三层映射关系
* 类映射数据库的表
* 对象映射成数据库的表中的一条条记录
* 对象获取属性映射成数据库的表中的某条记录某个字段对应的值
具体做法就是在类创建过程中通过元类拦截它的创建,在类创建出来之前给类赋上表该有的属性表名,主键字段,其他普通字段
MySQL事务+悲观锁,直接用MySQL不会崩吗
上海展湾
在什么情况下使用过多线程
网络编程这块熟悉吧?没有问具体问题?
接口风格是http还是restful?
Celery用在什么场景下?
Docker image过大怎么解决?
Docker的编排容器的命令compose有没有用过?
刀具开发项目(他们想做刀具管理系统)
奥解思(外派花旗银行)
-
面试官是个做NLP的,问的问题都很大,前面都没放开答,后面说他是做NLP的
python用过哪些模块(提到了requests,说一下request怎么实现爬虫)
python的名称空间,怎么实现一个全局变量
Redis在项目中怎么用的
Redis有哪些数据类型
Redis的hash怎么一次性取多个值
Redis获取字符串过程,要做什么
MySQL在项目中用了什么
Django的工作流程
drf怎么实现前后端分离的
celery工作原理
谷露软件
MySQL中 is null 与 ==null 的区别
脏读,幻读
数据库查询优化
Python字典的底层实现
Nginx的工作原理
uWSGI的工作原理
Dockerfile中CMD与ENTRYPOINT区别
把可能需要变动的参数写到 CMD 里面。然后你可以在 docker run 里指定参数,这样 CMD 里的参数(这里是-c) 就会被覆盖掉而 ENTRYPOINT 里的不被覆盖。
霖客达
Python的列表切片,引用与引用切片的区别?
手头有Python的几本书,看完了几本,流畅的Python看过吗?
你印象最深的一本书,提到了三体,问了叶文杰,最深刻的情节,冯诺依曼的情节
算法题
25匹马,5个跑道,找出最快的3匹 分成五组,每组跑一次,找出最快的3匹 我说的把第一名跑一遍,以此类推(方法不太好) 引导我,第一名所在组的前三名,第二组的前两名,第一组的第一名 有6匹,但是5个跑道,怎么解决,第一名不用跑,剩下5匹跑,取前两名
所托瑞安
# 多线程,多进程的应用 # 车辆数据采集,如何实现大量数据的分发
优层
# 一面给的英文代码题 round1 1.1 数字转千分位字符串 1.2 将列表的5的倍数的元素添加到新列表 1.3 比较两个文件中不同的文件,分成三组 1.4 起一个客户端和服务端,客户端分别发送GET请求和POST请求,POST发送字典数据,其中有一个元素是读取图片并转为base64,服务端保存图片 1.5 写一个脚本,起始数字每0.5s增加3,将结果保存到MongoDB,起始数字从MongoDB中读取 1.6 MongoDB实现多个数据库同步 1.7 写一个多进程/多线程脚本,实现0-100打印,间隔随机3-7秒 round2 2.1 使用Docker构建MongoDB,不能使用注册中心的镜像 2.2 在虚拟机中启动以2.1 Docker 镜像的容器 2.3.1 起一个服务端,有两个路由,‘/test/A’ ‘/test/B’,这两个路由能接受要求格式的字典数据{"name": 0,"payload": {"a": "a","b": "b"},"ping": "pong"},A,B的数据分开存储,如果提交的路由中没有相同的name数据,新增一天,如果A,B中有同一个name的数据,删除它们,如果只有一个中有,更新数据,数据能持久化存储,下次启动不受影响 2.3.2 起一个客户端,向2.3.1的接口发送请求,name的值为0-10随机,payload中a,b为随机字符串,每0.5s发送一次请求,发送的接口随机(A,B机率各50%) # 二面现场面 主要聊聊为啥想换工作,项目,整个面试没问技术点 聊一半,出题的老外技术出现了,英文面试,先自我介绍,然后聊用到的技术点和项目,雪崩
菠萝蜜
聊项目 用户校验怎么实现的?浏览器怎么携带和设置Cookie,HTTP的请求数据格式?request.user怎么拿到的(原理)? Celery异步上传图片的过程,多个服务器的话图片放哪里? 使用分页器后,刷新的数据重复问题怎么解决?怎么写SQL? 关注的人在MySQL中的表设计?
软通动力
# 多进程与多线程,多线程数据共享的安全问题,进程间通信? # 你知道的常见通信协议?TCP为什么是可靠的?怎么解决粘包问题? # sql注入及解决方案? # 怎么实现Django读写分离? # 为什么产生跨域问题,Django中怎么解决? # Django中间件的流程,自定义的方法,process_view在什么时候执行?