返回顶部

面试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),304307(使用缓存资源)。
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 切割成小文件,然后再对数据进行处理,此方法效率比较高。可以按照行数切割,可以按照文件大小切割。

 

 

 

posted @   Crazymagic  阅读(373)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示

目录导航