Python面试归纳
type
status
date
slug
summary
tags
category
icon
password

Python

gc要点

  1. python gc算法原理是?引用计数为主,标记清除和分代为辅
  1. 为啥单纯引用计数算法不行?因为引用计数无法解决循环引用问题
  1. 标记清除如何运作?可达性算法,从根对象出发,以引用作为有向边,DFS或BFS,未能标记上的对象作为要清除的对象
  1. 怎么分代回收?按经过的gc次数分类,分为新生代,中年代,老年代,新对象总是属于新生代,经过一定次数新生代gc后移动到中年代,以此类推

  1. 新式类和旧式类有什么区别?继承顺序不同,C3
  1. 什么是metaclass?有什么用处?metaclass是类的类,可以用来改变类的创建过程
  1. __new__和__init__的区别?
 

如何实现一个单例模式?

  1. 装饰器
  1. metaclass
  1. __new__方法
  1. staticmethod classmethod 和实例方法有什么区别?
  1. with背后是什么方法?__enter__ 和__exit__ 方法
  1. 装饰器的利弊?使用装饰器极大地复用了代码,但是他有一个缺点就是原函数的元信息不见了,比如函数的docstring__name__、参数列表,不难发现,函数 f 被with_logging取代了,当然它的docstring__name__就是变成了with_logging函数的信息了。好在我们有functools.wrapswraps本身也是一个装饰器,它能把原函数的元信息拷贝到装饰器里面的 func 函数中,这使得装饰器里面的 func 函数也有和原函数 foo 一样的元信息了

GIL

  1. 什么是GIL,有啥用?
  1. GIL对多线程 多进程有什么影响?

深拷贝浅拷贝

  1. 什么是深拷贝?什么是浅拷贝?[:]是浅拷贝,
总结:Python函数传递的是对象的引用值,非传值或传引用。但是如果对象是不可变的,感觉和c语言中传值差不多。如果对象是可变的,感觉和c语言中传引用差不多。
  1. python是传值还是传参?共享引用,这个问题取决于参数是可变对象还是不可变对象,在函数内对可变对象修改时对象值会变,对不可变对象修改时则是重新赋值

装饰器

  1. 什么是装饰器?用来做什么?
  1. 装饰器的原理是什么?
  1. 写一个简单的含参装饰器并打印被装饰函数的名字?

生成器

  1. 什么是生成器?有什么利弊?

cpython源码

  1. 描述一下dict的插入和删除过程?
  1. python的int有大小限制吗?为什么?
  1. python是如何进行内存管理的?

语言问题

  • 进行for遍历到结尾的时候,是如何停止的?

操作系统

os

  1. 进程 线程和协程有什么异同?
  1. 互斥锁和自旋锁的区别?
  1. 堆和栈的区别?

内存管理

进程管理

IO管理

机组

计网

  • OSI 7层网络模型?
  • TCP与UDP的区别?
  • TCP连接和断开过程?(3次握手 4次挥手)
  • 了解TCP半连接吗?
  • TCP粘包了解吗?如何处理?
  • 从输入网址到页面显示的过程?
  • 什么是socket?
  • BIO NIO AIO了解吗?
  • select与epoll的区别?

数据库

  • redis的数据类型及其底层数据结构
  • 如何使用redis实现分布式锁
  • mongodb是CAP的哪种
  • mysql的索引类型
  • mysql的隔离界别
  • 什么是幻读?默认隔离级别会发生幻读吗?

Redis

MySQL

MongoDB

MQ

RabbitMQ

Docker&K8S

docker image中的 layer 是什么?

docker image 是由 dockerfile创建的,dockerfile 中每行表示一个 layer,所有上层的改动都会传递影响到下一层
可考虑将多个命令行合并到一行减少image 大小
所以尽量把频繁变动的命令放后面执行,以复用底层 layer 减小 image size
Linux 实用命令MySQL索引相关
  • Giscus
  • Utterance