diff --git a/python-interview-2019-3.md b/python-interview-2019-3.md index 66cf49b285eb715a22bbd1a8cd1e798f52b5097a..a18bf36b5472a7d1cb0ae05fdc9da5ac0865ecce 100644 --- a/python-interview-2019-3.md +++ b/python-interview-2019-3.md @@ -2,7 +2,7 @@ > **答题要求**:将该项目从[地址1]()或[地址2]()**fork**到自己的[GitHub]()或[Gitee](https://gitee.com)仓库并在线填写答案,完成后以发送合并请求(**Pull Request**)的方式提交自己的工作成果,时间120分钟。 -#### 答题人: +#### 答题人:罗双 #### 题目: @@ -17,7 +17,9 @@ 答案: ``` - + [(a,1),(b,2),(c,3),(d,4),(5,)] + {0:item0,2:item4,4:item16} + 9 ``` 2. 下面的Python代码会输出什么。 @@ -32,7 +34,7 @@ 答案: ``` - + 11 ``` 3. 对于第2题的代码,如果要实现相同的功能,用生成式应该怎么写? @@ -40,7 +42,7 @@ 答案: ```Python - + sum([ x//2 for x in items if x**2 > 150]) ``` 4. 用一行代码实现将字符串`k1:v1|k2:v2|k3:v3`处理成字典`{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}`。 @@ -48,7 +50,7 @@ 答案: ```Python - + dict([x.split(':') for x in str1.split('|')]) ``` 5. 写一个装饰函数的装饰器,实现如果函数的返回值是字符串类型,就将该字符串每个单词的首字母大写(不用考虑非英文字符串的情况)。 @@ -56,7 +58,13 @@ 答案: ```Python - + def func1(func): + def fuc2(*args,**kwargs): + response = func(*args,**kwargs) + if isinstance(response,str): + new = response.capitalize() + return new + return fuc2 ``` 6. 下面的字典中保存了某些公司股票的代码(字典中的键)及价格(字典中的值,以美元为单位),用一行代码从中找出价格最高的股票对应的股票代码,再用一行代码将股价高于100美元的股票创建成一个新的字典。 @@ -78,7 +86,8 @@ 答案: ```Python - + max(zip(prices.keys(), prices.values())) + {(x,y) for x,y in prices.items() if prices[x] > 100 } ``` 7. 写一个函数,返回删除列表中重复元素后的新列表,要求保留原有列表元素的顺序。 @@ -86,7 +95,9 @@ 答案: ```Python - + def diff_list(a:list): + new_list=reduce(set(a),key=a.index) + return new_list ``` 8. 写一个函数,该函数的参数是一个保存字符串的列表,列表中某个字符串出现次数占列表元素总数的半数以上,找出并返回这个字符串。 @@ -94,7 +105,10 @@ 答案: ```Python - + def find_str(a:list): + for x in a: + if a.count(x) > len(a)/2: + return x ``` 9. MySQL关系型数据库中有三张表分别表示用户、房源和租房记录,表结构如下所示。 @@ -146,7 +160,14 @@ 答案: ```SQL - +select username +from tb_user where userid=(select userid from tb_record where houseid=1005); + +select username +from tb_user where userid in (select userid from tb_record where count(userid) > 3); + + + ``` 10. 请阐述访问一个用Django或Flask开发的Web应用,从用户在浏览器中输入网址回车到浏览器收到Web页面的整个过程中,到底发生了哪些事情,越详细越好。 @@ -154,7 +175,11 @@ 答案: ``` - + 第一步:用户发送请求,生成request对象,然后进行dns解析,到达nginx服务器 + 第二步:nginx服务器将request对象传输给django应用层,经过process_request方法,到达url.py进行路由匹配 + 第三步:url.py调用process_view方法,选择对应视图 + 第四步:view视图调用相应model,model取数据库取数据,返回给view, + 第五部:视图返回数据給前端前,经过process_response修饰,最后返回给前端页面或者数据 ``` 11. 请阐述HTTPS的工作原理以及TCP是如何保证端到端可靠传输的。 @@ -162,7 +187,10 @@ 答案: ``` - + tcp端到端传输,经过了三次握手, + 第一步,客服端向服务器发送SYN,并生成序列号,发送获取数据请求 + 第二步,服务端向客服端发送SYN,并附带ACK + 第三部,客服端收到ACK,并向服务端发送确认后的ACK,服务端收到,并确认,开始传送数据 ``` 12. 在Linux系统中,假设Nginx的访问日志位于`/var/log/nginx/access.log`,该文件的每一行代表一条访问记录,每一行都由若干列(以制表键分隔)构成,其中第1列记录了访问者的IP地址,如下所示。请用一行命令找出最近的100000次访问中,访问频率最高的IP地址及访问次数。 @@ -181,5 +209,5 @@ 答案: ```Shell - + cat /var/log/nginx/access.log | awk '{print:$1}' | sort | uniq -c| sort -k 1 -n -r | head -1 ``` \ No newline at end of file