面试1
1 python如何进行内存管理的?
1小整数对象池,Python 对小整数的定义是 [-5, 257) 这些整数对象是提前建立好的,不会被垃圾回收。
2 大整数对象池,每一个大整数,均创建一个新的对象。
3 intern机制,单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁
4垃圾回收:引用计数机制,每次创建一个对象或者其他什么值的时候,python会将其加入零代链表,在这个过程中,把循环引用减1,为0的释放,不为0的放到1代链表。然后在1代链表中,把循环引用减1,为0的释放,不为0的放到2代链表中
2 dict 的items()方法与iteriterms()方法的不同?
items()返回的是列表对象,而iteritems()返回的是iterator对象
3 python 如何生成随机数
生成随机数可以用random模块,通过random.randint()用于生成
4 redis的并发竞争问题如何解决?
1.客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
2.服务器角度,利用setnx实现锁。
3在并发量过大的情况下,可以通过消息中间件进行处理,把并行读写进行串行化.这种方式在一些高并发的场景中算是一种通用的解决方案,简单的方式可以通过redis的list实现,
5 git冲突的解决方法?
方法一:如果我们确定远程的分支正好是我们需要的,而本地的分支上的修改比较陈旧或者不正确,那么可以直接丢弃本地分支内容,运行如下命令(看需要决定是否需要运行git fetch取得远程分支):
$:git reset --hard origin/master
方法二:我们不能丢弃本地修改,因为其中的某些内容的确是我们需要的,此时需要对unmerged的文件进行手动修改,删掉其中冲突的部分,然后运行如下命令
$:git add filename
$:git commit -m "message"
方法三:如果我们觉得合并以后的文件内容比价混乱,想要废弃这次合并,回到合并之前的状态,那么可以运行如下命令:
$:git reset --hard HEAD
6 django和tornado的关系和区别?
djaingo用于创建模型的对象关系映射,为最终用户设计的完美管理界面一流的 URL 设计,包含大而全的开发组件,它鼓励快速开发,并遵循MVC设计。
Tornado 和现在的主流 Web 服务器框架(包括大多数Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web服务来说,Tornado 是一个理想的 Web 框架
7 beautifulsoup有几种方式查找(爬虫的)?
1 2 3 4 5 6 7 8 9 10 11 12 | find() find_all() find_parent() find_parents() find_next_sibling() find_next_siblings() find_previous_sibling() find_previous_siblings() find_previous() find_all_previous() find_next() find_all_next() |
8 请写出一段python代码实现删除一个list里面的重复元素(不用set函数)
1 2 3 | a = [ 'a' , 'b' , 'c' , 'd' , 'a' , 'a' ] b = [] [b.append(i) for i in a if i not in b ] |
9深拷贝浅拷贝赋值的区别?
Python中对象的赋值都是进行对象引用(内存地址)传递
使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
如果需要复制一个容器对象,以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
10 python中pass语句的作用是什么?
空语句 do nothing
保证格式完整
保证语义完整
11 python 里面match()和search()的却别?
match()从第一个字符开始找,如果第一个就不匹配,会直接返回None,不继续匹配.主要用于匹配开头
search()会在整个字符串中查找,直到找到一个匹配的
12 python 单引号,双引号和三引号的区别?
python字符串通常有单引号('...')、双引号("...")、三引号("""...""")或('''...''')包围,三引号包含的字符串 可由多行组成,一般可表示大段的叙述性字符串。在使用时基本没有差别,但双引号和三引号("""...""")中可以包含单引号,三引号 ('''...''')可以包含双引号,而不需要转义
13 请用自己的算法,按升序合并如下两个list,并去除重复的元素
List1 = [2,3,8,4,9,5,6] list2= [5,6,10,17,11,2]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | list1 = [ 2 , 3 , 8 , 4 , 9 , 5 , 6 ] list2 = [ 5 , 6 , 10 , 17 , 11 , 2 ] list3 = list1 + list2 li = [] for i in list3: if i in li: continue if i not in li: li.append(i) continue if li[ 0 ] >i: li.insert( 0 ,i) |
14 关系型数据库中,表与表之间有左连接,内连接,外连接、分别解释下他们的含义及却别?
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行
15 有订单表orders,包含用户信息user_id和产品信息product_id请写出至少被订购过两次的product_id?
1 | select productid from orders group by productid having count(productid)> 1 |
16 抓了a,b,c,d四名嫌疑人,其中一名是小偷,审讯中:
A说我不是小偷
B 说c是小偷
C 说小偷肯定是d
D说c胡说
其中3个人说的是真的,一个说的是假的,编程推断小偷(用穷举法和逻辑表达式)
1 2 3 4 5 | for i in range ( 4 ): y = (i! = 1 ) + (i = = 3 ) + (i = = 4 ) + (i! = 4 ) if y = = 3 : print ( "%s是小偷" % i) break |
17 redis中的事务和mysql中的事务有什么区别?
mysql |
redis |
|
开启事务 |
start transaction命令 |
multi命令 |
回滚事务 |
使用rollback命令可以回滚事务 |
不能回滚事务。但使用discard命令可以放弃事务queue中的sql |
提交事务 |
commit命令,即使遇到sql语法错误也会提交事务 |
exec命令,如果遇到sql语法错误会放弃事务中的sql |
悲观锁 |
使用select ... for update实现悲观锁 |
无 |
乐观锁 |
通常使用version或时间戳来实现乐观锁 |
使用watch监控对象变化来实现乐观锁 |
原子性(Atomicity) |
具备 |
具备 |
一致性(Consistency) |
具备 |
具备 |
隔离性(Isolation) |
具备 |
具备 |
持久性(Durability) |
具备 |
当redis服务器使用AOF持久化模式并appendfsync设置为always时具备 |
18解释下Http协议
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
HTTP协议的主要特点可概括如下:
1.支持客户/服务器模式。
2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3.灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4.无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
19介绍一下Python下range()函数的用法?
列出一组数据,经常用在for in range()循环中
20 HTTPS和HTTP的区别主要如下:
1、https协议需要申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
21有一个文本文件,有10万行数据,只输出最后20行
1 | tail - n 20 filename |
22简述mysql存储引擎MyISAM和InnoDB的区别
1 MyISAM管理非事务表。提供高速存储和检索,以及全文搜索能力
2 InnoDB和存储引擎支持事务安全表,支持外键。
23 为什么Python中使用多线程会引起性能的下降
Python由于有全锁局的存在(同一时间只能有一个线程执行),并不能利用多核优势。所以,如果你的多线程进程是CPU密集型的,那多线程并不能带来效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降;如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。
24 HTTPS 是如何实现安全传输数据的。
HTTPS 其实就是在 HTTP 跟 TCP 中间加多了一层加密层 TLS/SSL。SSL 是个加密套件,
负责对 HTTP 的数据进行加密。TLS 是 SSL 的升级版。现在提到 HTTPS,加密套件基本
指的是 TLS。原先是应用层将数据直接给到 TCP 进行传输,现在改成应用层将数据给到
TLS/SSL,将数据加密后,再给到 TCP 进行传输。
25 HTTP 请求会有哪些信息发送到后台服务器。
请求行 (请求方式、资源路径和 HTTP 协议版本)POST /demo/login HTTP/1.1
请求消息头
消息正文(也叫实体内容)
26 合并两个列表
ks = [1,2,3,4,5] vs = ['a','b','c','d','e'] c = dict(zip(ks, vs)) print(c)
27 自定义函数排序
import re li = ['班级11','班级21','班级3','33班','21教学楼','4班','2'] print(sorted(li, key=lambda x:int(re.findall(r'\d+', x)[0]))) def sort_key(s): if s: try: c = re.findall(r'\d+', s)[0] except: c = -1 return int(c) print(sorted(li, key=sort_key)) # 具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序 ''' 接受3个参数 1 一个可迭代的对象 2 一个函数具体的是对指定的可迭代对象中的一个元素进行排序 3 是否反转(bool) '''
【推荐】国内首个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编程运行原理