中国航天科工二院Python实习面经

Python开发实习生(西安)面经

10.14面试(25min)

1.自我介绍

2.python的浅拷贝和深拷贝你是怎么理解的?

浅拷贝只复制对象的引用,新对象和原对象共享数据,深拷贝复制整个对象及其所有嵌套对象,新对象和原对象独立。用copy模块的copy()函数进行浅拷贝,使用copy模块的deepcopy()函数进行深拷贝。

3.有一个列表,里面的数分别是[1,2,3,[4,5,6]],如果我把[4,5,6]改成[7,8,9],那浅拷贝和深拷贝都有哪些变化?

如果使用浅拷贝,原列表和新列表中的嵌套列表仍然是同一个对象,因此将新列表中的嵌套列表修改为[7,8,9],原列表中的嵌套列表也会被修改为[7,8,9]。

如果使用深拷贝,原列表和新列表中的嵌套列表是不同的对象,因此将新列表中的嵌套列表修改为[7,8,9],原列表中的嵌套列表不会受到影响,仍然是[4,5,6]。

4.面试官:一个服务器有4GB的内存,怎么去读取5GB的数据?首先是可以肯定的是如果你一次把它全部读出来,他服务器肯定就卡死了。

可以将5GB的数据进行分块读取,每次只读取一部分数据并进行处理,处理完成后释放该部分数据的内存,再读取下一部分数据进行处理,以此类推,直到处理完所有数据。这样可以有效避免一次性读取过多数据导致服务器内存溢出的问题。

面试官:对,对于分批你是有什么样的想法?

对于数据分块,可以采用以下方法:

  1. 固定块大小:将数据分成固定大小的块进行处理,例如每块1MB或者2MB。
  2. 动态块大小:根据数据特性来动态调整块大小,例如按行读取文本数据,每个块包含多少行可以动态调整。
  3. 缓存块数据:将数据分成块后,可以将当前块及其前后若干块的数据缓存到内存中,以加快数据访问速度。
  4. 多线程或多进程处理:可以将数据分成多个块,用多线程或多进程同时处理不同的块,以提高处理效率。

5.python有一种节省空间的东西叫什么?

迭代器

6.迭代器这个概念有接触过吗?

Python迭代器是一种访问集合元素的方式,可以逐个返回元素,而无需将整个集合加载到内存中。它通过 __iter__()__next__() 方法实现,可以在for循环中使用。

7.python的字典是有序的还是无序的?

Python 3.7之前的字典是无序的,3.7及以后版本会保持插入顺序,但不是严格意义的有序,可以通过OrderedDict实现严格有序的字典。

8.有一个字典{a: 1,b: 3,c: 2},我怎么通过字典的值去给字典的键值对排一下序呢?

使用字典的 items() 方法将其转化为元组列表,然后使用 sorted() 函数并指定 key 参数为值即可。例如:sorted(d.items(), key=lambda item: item[1]),其中 d 为原字典。

9.有一个列表,列表里面的元素是字典,[{a: 2}, {b: 1}],每个字典只有一个键值对,如何对这个列表里面的字典进行一个排序?

使用 sorted() 函数并指定 key 参数为字典的键即可排序。例如:sorted(lst, key=lambda d: list(d.keys())[0]),其中 lst 为原列表。

10.有一个列表,列表里面的元素都是数值,我怎么能对这个列表的数值进行排序?

使用 sort() 方法或 sorted() 函数对列表进行排序,例如:lst.sort()sorted(lst),默认为升序,可以通过 reverse 参数设置为降序。

11.如何对列表里面的元素去重?

使用 set() 函数将列表转换为集合,集合会自动去重,然后再将其转换为列表即可。例如:lst = list(set(lst)),其中 lst 为原列表。

12.如果列表里面的元素是字典呢?怎么对列表里面的元素进行去重?还能用set吗?

不能直接使用 set() 函数对列表元素是字典的列表进行去重。可以使用 unique_ever_seen 生成器和 json.dumps() 函数对字典进行序列化后再去重。例如:new_lst = list({json.dumps(d, sort_keys=True): d for d in lst}.values()),其中 lst 为原列表。

13.python的匿名函数有接触过吗?或者lambda函数有接触过吗?

Python的lambda函数是一种匿名函数,可以在一行代码中定义简单的函数。使用 lambda 关键字定义,可以接受任意数量的参数,但只能返回一个表达式的值。常用于函数式编程和高阶函数中。例如:lambda x, y: x + y 定义一个接受两个参数的函数,返回两个参数的和。

14.正则有接触过吗?

Python的正则表达式(Regular Expression)是一种字符串处理工具,用于匹配、搜索和替换文本。通过 re 模块使用,支持元字符、字符集、重复和分组等特性。常用于文本处理和数据清洗等场景。例如:re.findall(pattern, string) 在字符串中查找符合某种模式的所有子串并以列表形式返回。

15.正则的贪婪匹配和非贪婪匹配你是怎么理解的?区别是什么?

正则表达式的贪婪匹配是尽可能匹配更长的子串,而非贪婪匹配是尽可能匹配更短的子串。贪婪匹配使用 *+{m,n} 等元字符,非贪婪匹配在元字符后加上 ?,如 *?+?{m,n}? 等。区别是贪婪匹配匹配尽可能多的字符,非贪婪匹配匹配尽可能少的字符。

16.能说一下Django框架的生命周期吗?

Django框架的生命周期包括:1. 请求阶段:中间件和URL路由处理请求;2. 视图阶段:视图函数处理请求并返回响应;3. 响应阶段:中间件处理响应并返回给客户端。每个阶段都有相应的钩子函数、中间件和信号,用于扩展框架的功能和控制请求和响应的处理过程。

17.Django的这个models主键有使用过吗?

18.Django的orm有使用过吗?

19.Django操作数据库是怎么操作的?

Django通过ORM(对象关系映射)操作数据库,将数据库表映射为Python类,通过操作Python类的属性和方法来操作数据库。使用 models 模块定义数据模型和字段,使用 QuerySet 对象查询和过滤数据,使用 migrations 模块管理数据库迁移。支持多种数据库后端和事务管理。

20.在代码里面给一个数据库里面添加一条记录,是怎么添加的?

使用数据模型对应的类创建一个实例,给实例的属性赋值,然后调用 save() 方法保存到数据库中即可。例如:obj = MyModel(field1=value1, field2=value2); obj.save(),其中 MyModel 是数据模型对应的类,field1field2 是该模型的字段名,value1value2 是要添加的记录的值。

21.我有一个班级表,新来一个人员我肯定是要在班级表里面去加上这个人的信息,怎么去写这个操作

使用数据模型对应的类创建一个实例,给实例的属性赋值,然后调用 save() 方法保存到数据库中即可。例如:obj = Student(name='Tom', age=18); obj.save(),其中 Student 是数据模型对应的类,nameage 是该模型的字段名,Tom18 是要添加的学生的姓名和年龄

22.采用了多线程threading开发,具体是这个多线程是怎么写的?这几行语句

23.我如果要给这个传一个参数呢,这个怎么去写?

#中国航天科工二院##实习面经##Python#
全部评论
答案给一下
点赞 回复 分享
发布于 2022-10-19 15:45 广西

相关推荐

点赞 评论 收藏
分享
评论
15
83
分享

创作者周榜

更多
牛客网
牛客企业服务