2018年3月Python面试总结

本人2月份由于个人原因离开了深圳,也同样离开了在深圳的公司,后来面试了好多家公司,基本都是已经融资的,下面给小伙伴们分享一下,我在这期间遇到的面试题,希望能给小伙伴在未来找工作或者学习中带来一丝的帮助。

1,nginx与uwsgi是如何通信的?

我们知道,nginx把浏览器等发过来的请求通过proxy_pass或者uwsgi_pass转发给上游的web application进行处理,然后把处理的结果发送给浏览器。uwsgi_pass命令的处理函数为ngx_http_uwsgi_handler,也就是说,当有请求到达配置uwsgi_pass的location时,会调用ngx_http_uwsgi_handler方法,而该方法是整个uwsgi事件处理的入口方法。下面来看该方法:

static ngx_int_t ngx_http_uwsgi_handler(ngx_http_request_t *r)
{
    ngx_http_upstream_t *u;
    ngx_http_uwsgi_loc_conf_t   *uwcf;
    uwcf = ngx_http_get_module_loc_conf(r, ngx_http_uwsgi_module);
    u = r->upstream;
    ……
    u->create_request = ngx_http_uwsgi_create_request;//根据wsgi协议创建请求包体
    u->process_header = ngx_http_uwsgi_process_status_line;//根据wsgi协议解析uwsgi发送来的头部
    ……
    rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);//从浏览器读取body数据
    ……
}

2,nginx与uwsgi是多线程还是多进程 ?

  • uwsgi是用c语言写的一个webserver,可以启动多个进程,进程里面可以启动多个线程来服务。进程分为主进程和worker进程,worker里面可以有多个线程。
  • Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。Nginx主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。
  • 在工作方式上,Nginx分为单工作进程和多工作进程两种模式。在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;在多工作进程模式下,每个工作进程包含多个线程。Nginx默认为单工作进程模式。

3,写一个连表查询

select * from erp as o left join a as p on o.id = p.id where o.price > 20;

4,用Django的ORM写一个连表查询

Entry.objects.filter(blog__name='Beatles Blog')

5,写一个单例模式

class Singleton(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, 'happle'):
            cls.happle = super(Singleton, cls).__new__(cls, *args,**kwargs)
        return cls.happle

class SingleSpam(Singleton):
    def __init__(self,s):
        self.s = s

    def __str__(self):
        return self.s

s1 = SingleSpam('spam')
print id(s1) # 4487315984
s2 = SingleSpam('spa')
print id(s2) # 4487315984

6,请你说出几种常见的反爬策略?

1,监控user-agent

2,监控ip

3,登录才能访问

4,nginx的加密

7,请说一下线程与进程的区别

  • 进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文
  • 进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

8,下面的程序 会是什么情况?答案会报参数错误。

class A(object):
    def run(self,a):
        return a

class B(A):
    def run(self,a,b):
        return b

B().run(1)

django orm 常用查询筛选(自己新增)

大于、大于等于

__gt  大于
__gte  大于等于

User.objects.filter(age__gt=10)    // 查询年龄大于10岁的用户
User.objects.filter(age__gte=10)  // 查询年龄大于等于10岁的用户

小于、小于等于

__lt  小于
__lte 小于等于

User.objects.filter(age__lt=10)     // 查询年龄小于10岁的用户
User.objects.filter(age__lte=10)   // 查询年龄小于等于10岁的用户

in

__in

查询年龄在某一范围的用户
User.objects.filter(age__in=[10, 20, 30])

like

__exact        精确等于 like 'aaa'
__iexact       精确等于 忽略大小写 ilike 'aaa'
__contains     包含 like '%aaa%'
__icontains    包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。

is null / is not null

__isnull  判空

User.objects.filter(username__isnull=True)    // 查询用户名为空的用户
User.objects.filter(username__isnull=False)  // 查询用户名不为空的用户

不等于/不包含于

User.objects.filter().excute(age=10)    // 查询年龄不为10的用户
User.objects.filter().excute(age__in=[10, 20])  // 查询年龄不为在 [10, 20] 的用户

9,put与post的区别?

POST
用于提交请求,可以更新或者创建资源,是非幂等的
举个例子,在我们的支付系统中,一个api的功能是创建收款金额二维码,它和金额相关,每个用户可以有多个二维码,如果连续调用则会创建新的二维码,这个时候就用POST


PUT
用于向指定的URI传送更新资源,是幂等的
还是那个例子,用户的账户二维码只和用户关联,而且是一一对应的关系,此时这个api就可以用PUT,因为每次调用它,都将刷新用户账户二维码

10,http有几种方式?

OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。

HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。

GET:向特定的资源发出请求。

POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。

PUT:向指定资源位置上传其最新内容。

DELETE:请求服务器删除Request-URI所标识的资源。

TRACE:回显服务器收到的请求,主要用于测试或诊断。

CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

一次查询1亿数据应该怎么优化呢?

https://jingyan.baidu.com/article/e75057f2c413e8ebc91a89b0.html


以上答案都是本人课后查找的,水平有限,仅供参考,如果发现错误请及时联系作者,谢谢!共同进步!!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,605评论 24 1,002
  • 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单...
    rosekissyou阅读 10,168评论 5 124
  • Nginx简介 解决基于进程模型产生的C10K问题,请求时即使无状态连接如web服务都无法达到并发响应量级一万的现...
    魏镇坪阅读 1,980评论 0 9
  • I/O模型Nginx介绍Nginx的安装和目录结构Nginx的配置Nginx的编译安装 一、I/O模型 (一)I/...
    哈喽别样阅读 884评论 0 4
  • 河北省唐山市地方政府把地方的各个路桥收费站取消了。取消路桥收费站这事可谓大快人心。 但是收费站的工作人员就不乐意了...
    小考拉俱乐部阅读 636评论 0 0