面试2
1 | https: / / mp.weixin.qq.com / s / mqs5ZriV1BUxOfT0tWTsFQ |
1 给定两个 list A,B,找出相同元素和不同元素。
1 2 3 4 5 6 | # 找出相同的元素 a = [ 1 , 2 , 3 ] b = [ 3 , 4 , 5 ] a = set (a) b = set (b) print (a&b) |
1 2 3 4 5 6 | # 找出不相同的元素 a = [ 1 , 2 , 3 ] b = [ 3 , 4 , 5 ] a = set (a) b = set (b) print (a^b) |
2 请反转字符串
1 | new_str = old_str[: - 1 ] |
3 用 select 语句输出每个城市中心距离市中心大于 20km 酒店数
1 | select count(hotel)i from hotel_table where distance > 20 group by city |
4 给定一个有序列表,请输出要插入值 k 所在的索引位置
1 2 3 4 5 | k = int ( input ( '要插入的数字:' )) a = [ 1 , 2 , 5 ] a.append(k) a = sorted (a) print (a.index(k)) |
或
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 给定一个有序列表,请输出要插入值 k 所在的索引位置 str1= int (input( '请输入要插入的数字' )) a=[1,1,5] max_valuse = max(a) for index,item in enumerate(a): if str1>= max_valuse: print( '所在的位置是:' , len(a)) break if item > str1: # 找到第一个大于str的值 a.insert(index,str1) print( '所在的位置是:' , index) break print(a) |
5 正则表达式贪婪与非贪婪模式的区别
1 2 3 4 | ① 形式上非贪婪模式有一个“?”作为该部分的结束标志;<br> ② 在功能上贪婪模式是尽可能多的匹配当前正则表达式,可能会包含好几个满足正则表 达式的字符串,非贪婪模式,在满足所有正则表达式的情况下尽可能少的匹配当前正则表 达式 |
6 写出开头匹配字母和下划线,末尾是数字的正则表达式
1 | r“^[A - Za - z]|_. * \d$” |
7 请说明 HTTP 状态吗的用途,请说明常见的状态码机器意义。
通过状态码告诉客户端服务器的执行状态,以判断下一步该执行什么操作
常见的状态机器码有:
100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完 成整个处理过程。
200-299:表示服务器成功接收请求并已完成处理过程,常用 200(OK 请求成功)
300-399:为完成请求,客户需要进一步细化请求。302(所有请求页面已经临时 转移到新的 url),304、307(使用缓存资源)。
400-499:客户端请求有错误,常用 404(服务器无法找到被请求页面),403(服 务器拒绝访问,权限不够)
500-599:服务器端出现错误,常用 500(请求未完成,服务器遇到不可预知的 情况)
8 当输入 http:mioji3.com 时,返回页面的过程中发生了什么
1 2 3 4 5 6 7 8 9 10 11 12 | 1 浏览器向 DNS 服务器发送 mioji3.com 域名解析请求 2 DNS 服务器返回解析后的 ip 给客户端浏览器,浏览器想该 ip 发送页面请求 3 DNS 服务器接收到请求后,查询该页面,并将页面发送给客户端浏览器 4 客户端浏览器接收到页面后,解析页面中的引用,并再次向服务器发送引用资 源请求 5 服务器接收到资源请求后,查找并返回资源给客户端 6 客户端浏览器接收到资源后,渲染,输出页面展现给用户 |
9 闭包
1 2 | 在函数内部再定义一个函数,并且这个函数调用外部函数的变量,这个函数<br> 和用到的变量称之为闭包 |
10 给定一个 list a, 满足 a[i+1] >= a[i], 给定 int key ,找出 list a 中第 一个大于等于 key 的元素的 index,无满足要求的元素则返回-1。
11 请写出一段 python 代码实现删除一个 list 里面的重复元素?
1 2 3 | li = [ 11 , 11 , 22 , 33 , 44 , 5 , 22 ] li = set (li) print (li) |
12 生成 100 内的偶数列表?
1 | [i for i in range ( 100 ) if i % 2 = = 0 ] |
13 请尽量用简洁的方法二维数组转换成一维数组
方法 1
1 2 | li = [[ 1 , 2 ],[ 3 , 4 ],[ 5 , 6 ]] print ([j for i in li for j in i] ) |
方法 2
1 2 3 | t = [] [t.extend(i) for i in li] print (t) |
14 下面的代码的输出是什么,为什么会是这个结果?
15 请阅读下面的代码
iterator = (i for i in range (1,4)) matrix = [[x*y for y in iterator] for x in iterator] 期望的输出为: [[1,2,3],[2,4,6],[3,6,9]]
上述的代码是否复合预期,原因是什么?如何修改?
1 | 不符合预期,因为是生成器,取出后的结果为[[ 2 , 3 ]] |
修改后的代码:
iterator = [i for i in range (1,4)] matrix = [[x*y for y in iterator] for x in iterator]
16 http post 和 get 的区别,cookie 和 session 的区别?
post 安全,将信息封装到请求体内,
get 不安全,发送请求时会将信息暴露在 url 上 post 和 get 都能发送或接收数据,但是语义上一般是 post 发送,get 是从服务 器获取
cookie 和 session 的区别:
1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
2、cookie 不是很安全,别人可以分析存放在本地的 COOKIE 并进行 COOKIE 欺骗 考虑到安全应当使用 session。
17 如何拓展 auth_user 的字段,请给出实现实例,如何替换 auth_user?
自定义一个抽象类里面添加用户拓展的字段,在让用户类继承抽象类,然后 在 settings.py 中指明用户认证类的路径。
18 django 里面有多个数据库的自动路由是如何实现的?
自定义一个类指明数据路由来控制特定模型的访问性,定义 def for_read()定 义读取数据的路由 def for_write()定义写入数据的路由 def for_relation() 定义是否支持关联查询的路由。 然后在配置文件中,声明自动路由类的路径
19 烧一根不均匀的绳用一个小时,如何用它来判断半个小时?
先把一根绳子两头点燃,同时点燃另一根绳子的一头.(烧完要用刚好半小时)
20 Python 内置数据结构
列表,元组,字符串,bytes,bytearray,集合,字典
共同点:都是可迭代对象
不同点:列表,bytearray,字典三种是可变的
元组,字符串,bytes,集合四种不可变
21 *args 和**kwargs 使用方法?
加了星号(*)的变量 args 会存放所有未命名的变量参数,args 为元组; 而加**的变量 kwargs 会存放命名参数,即形如 key=value 的参数, kwargs 为 字典
22 常用的多线程解决并发的方法
使用 thread 模块,创建线程 greenlet 模块,创建协程
23 有两个有序整形数组,A 和 B,都是从小到大排列,要求把 A 和 B 合并成数 组 C 也是有序的,例如 A = [1,3,5,7….] b = [2,4,6,8…],合并后 c = [1,2,3,4,5,6,7,8…], 请写一个方法尽可能高效率的来实现(不调用系统的函数)
合并后在冒泡
24 类的加载顺序(类中有继承有构造,有静态 )
(1)、调用静态成员时,会加载静态成员真正所在的类及其父类。 通过子类调用父类的静态成员时,只会加载父类而不会加载子类。
(2)、第一次 new 对象的时候 加载(第二次再 new 同一个类时,不需再加载)。
(3)、加载子类会先加载父类 。
25 请简要概括 django 的测试工具
test client 是一个 python 类,来模拟一个简单的“哑”浏览器,允许你来测试 你的 view 函数.
1.模拟"Get"和"Post"请求,观察响应结果--从 HTTP(headers,status codes)到 页面内容.
2.检查重定向链(如果有的话),在每一步检查 URL 和 status code。
3.用一个包括特定值的模板 context 来测试一个 request 被 Django 模板渲染。
26 jango 的继承方式有那些?
Django 目前支持三种不同的继承方式,包括抽象基础类,多表继承和代理。
27 有一张商品购买记录表 T,其中包含字段 uid(用户 id),pid(商品 id),现在要 统计即购买了商品 A(即 pid 为 A)又买了商品 B(即 pid 为 B)的用户 uid,请写出 对应的 SQL 语句。
1 | select uid from T where pid = a and pid = b; |
28 将列表按下列规则排序,补全代码
1 正数在前负数在后
2 整数从小到大
3 负数从大到小
例子: 排序前[7,8,5,4,0,-2,-5] 排序后[0,4,5,7,-2,-5,-8]
补全代码: Sorted(lst,key=lambda x:______) 补全后的代码
1 | sorted (list1,key = lambda x:(x< 0 , abs (x))) |
29 去除多余嵌套的列表
1 2 3 4 5 6 7 8 9 10 11 12 | def f(x): ret = [] for b in x: if isinstance (b, list ): for a in f(b): ret.append(a) else : ret.append(b) return ret list2 = [ 11 , 22 , [ 33 , 44 ], [ 55 , [ 66 , 77 ]], [ 88 , [ 99 , [ 100 , [ 200 , [ 300 ]]]]]] ret = f(list2) |
TCP 传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。
tcp通信需要经过创建连接、数据传送、终止连接三个步骤。
tcp 传输控制协议,通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,"打电话""
UDP 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地
OSI 七层模型
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
三次握手:
(面试回答)
(1)首先,必须先由客户端发起连接的请求
(2)接下来,服务器接收到请求之后,回复给客户端两个标识,一个syn表示服务器接收到请求,一个ack表示服务器在做准备工作,两个标识一起回复给客户端
(3)最后,客户端接收到服务器的回复,客户端准备连接的所有资源,开始进行连接,发送给服务器一个ack表示客户端的连接准备工作已经完成(此时表示客户端和服务器可以相互连接了)
如果面试官问你,哪句代码体现了三次握手?
回答:服务器端的accept,客户端connect
四次挥手
(面试回答)
(1)首先由连接双方任意一方发起断开连接的请求,发起方发送的请求表示是我没有数据要继续发送了,可以断开连接了,但是你如果还有数据可以继续向我发送数据.
(2)接收方回复给发起方,表示接到了发起放的断开请求,开始着手准备断开事宜
(3)接收方准备完成后,给发起方发送一个标识,表示接受方没有数据继续发送了,可以断开连接了
(4)发起方接收到消息后,准备断开连接,回收资源
如果面试官问你,哪句代码体现了四次挥手?
回答:close()
问题:4G 内存怎么读取一个 5G 的数据?
方法一:
可以通过生成器,分多次读取,每次读取数量相对少的数据(比如 500MB)进行处理,处理结束后再读取后面的 500MB 的数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def get_lines_1(): my_list = [] with open ( "file.txt" , "r" ) as f: for eachline in f: my_list.append(eachline) return my_list def get_lines_2(): with open ( "file.txt" , "r" ) as f: while True : data = f.readlines( 10 ) if not data: break yield data if __name__ = = '__main__' : for e in get_lines_1(): print (e) # 处理每一行数据 print ( "*" * 50 ) for e in get_lines_2(): print (e) |
方法二:
可以通过 linux 命令 split 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理