一 2019遇到的面试题
- python实现列表去重的方法?
1. 使用集合
def func1(list1):
return list(set(list))
2.使用字典的方式
def func2(list2):
return {}.fromkeys(list2).keys()
3.使用列表推导的方法
def func3(list3):
temp_list = []
for i in list3:
if i not in temp_list:
temp_list.append(i)
return temp_list
4.使用排序的方法
def func4(list4):
result_list = []
temp_list = sorted(list4)
i = 0
while i<len(list4):
if temp_list[i] not in result_list:
result_list.append(temp_list[i])
else:
i += 1
return result_list
- python的内荐数据类型有哪些?
数字型 (整型,浮点型,复数类型);布尔(bool);字符串类型(str);列表和元组类型(list,tuple);字典类型(dict) - 使用列表推导式,求列表所有奇数并构造新列表,a = [1,2,3,4,5,6,7,8,9,10]?
a = [1,2,3,4,5,6,7,8,9,10]
b = [i for i in a if i % 2 ==1]
print(b)
- 列出pythin中可变类型和不可变数据类型,并说明意义。
数字类型,字符串,元组属于不可变类型
列表和字典属于可变类型
不可变数据类型,不允许变量的值发生变化,改变变量的值,相当于新建了一个对象。
可变数据类型,允许变量的值发生改变,变量引用的对象的地址也不会变化。 - 代码实现快速排序和冒泡排序。
冒泡排序:
def bubbling_sorts(arrs):
for i in range(0, len(arrs) - 1):
for j in range(len(arrs) - i - 1):
if arrs[j] > arrs[j + 1]:
arrs[j], arrs[j+1] = arrs[j+1], arrs[j]
return arrs
快速排序:
def quick_sort(mylist, start, end):
if start < end:
i, j = start, end
base = mylist[i]
while i < j:
while (i<j) and (mylist[j] >= base):
j = j -1
mylist[i] = mylist[j]
while (i<j) and (mylist[i] <=base):
i = i + 1
mylist[j] = mylist[i]
mylist[i] = base
quick_sort(mylist, start, i - 1)
quick_sort(myist, j+1, end)
return mylist
Django高并发处理:
电商存在库存问题,团购,秒杀,特价之类的活动,使访问量激增,很多人抢购一个商品,作为活动商品,库存是有限的,设计程序需要注意什么?使用什么样的架构?对于代码可扩展性,可维护性与工作量,时间进度如何平衡?
规范化。
- 描述数组,链表,队列,堆栈的区别?
数组,链表是数据存储方式的概念,数组在连续空间中存储数据,链表在非连续空间内存储数据。
队列和堆栈是描述数据存取方式的概念,队列是先进先出,堆栈是先进后出。 - Django中当一个用户登录A应用服务器(登录状态),然后下次请求被nginx代理到B应用服务器会有什么影响?
如果没有共享session,B应用服务器就没有登录状态。 - Django的请求生命周期?
进入wsgi协议和web服务器,对HTTP请求做成python能识别的语句,进入Django,进入中间件对请求做一些初步的处理,然后分发到路由,进入视图层,对模型层做一些CRUD,渲染模板层。 - Django中间件的五个方法?
process_request(self, request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response
process_exception(self, request, exception)
process_response(self, request, response) - 输入一个字符串,输出该字符串中字符的所有组合?(排列方法)
def perm(s=''):
# 这里是递归函数的出口,为什么呢,因为这里表示:一个长度为1的字符串,它的排列组合就是它自己。
if len(s) <= 1:
return [s]
sl = [] # 保存字符串的所有可能排列组合
for i in range(len(s)): # 这个循环,对应 解题思路1)确定字符串的第一个字母是谁,有n种可能(n为字符串s的长度
for j in perm(s[0:i] + s[i + 1:]): # 这个循环,对应 解题思路2)进入递归,s[0:i]+s[i+1:]的意思就是把s中的s[i]给去掉
sl.append(s[i] + j) # 对应 解题思路2)问题就从“返回字符串中的字母排列组合” **变成了** “返回 第一个字母+除去第一个字母外的字符串的排列组合”
return sl
- 编写一个线程安全的单例
import threading
def synchronied(func):
func.__lock__ = threading.Lock()
def synced_func(*args, **kwargs):
with func.__lock__:
return func(*args, **kwargs)
return synced_func
def singleton(cls):
instacnces = {}
@synchronied
def get_instacnes(*args, **kwargs):
if cls not in instances:
instnaces[cls] =cls(*args, **kwargs)
return instances[cls]
return get_instacnes
- [{'id': 1, 'name': 'a'}, {'id': 3, 'name': 'c'}, {'id': 2, 'name': 'b'}] 降序处理
a = [{'id': 1, 'name': 'a'}, {'id': 3, 'name': 'c'}, {'id': 2, 'name': 'b'}]
b = sorted(a, key=lambda k: k['id'], reverse=True)
print(b)
二 收集到的笔试题
链接:
https://github.com/Martuber/python_interview_question
(有较多重复内容,注重算法方向)