python 必了解面试题

一:什么是面向对象

面向对象就是把数据和数据的操作方法放在一起,作为一个相互依存的整体对象。面向对象的核心是对象.

二:面向对象五大原则

单一职责:一个类,最好只做一件事 开放封闭:实体应该是可扩展的,而不可修改的 里氏代换:所有使用基类的地方必须能够透明的使用其子类的对象 依赖倒置:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。 接口隔离:使用多个小的专门的接口,而不要使用一个大的总接口

三:TCP === UDP === 需要建立连接 不需要建立连接 可靠的 不可靠的 工作效率低 工作效率更高 只支持一对一 支持一对一,一对多,多对一,多对多 占用资源多 占用资源少

?

四:线程进程协程的区别===

2,进程: 进程是程序一次动态执行的过程,是程序运行的基本单位。

2、线程 线程又叫做轻量级进程,是CPU调度的最小单位。

3、协程

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。

五:死锁这么造成的 如何解决========== 两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象若无外力作用,它们都将无法推进下去。

解决=== 避免按同一顺序访问对象。 避免事务中的用户交互。 保持事务简短并在一个批处理中。 使用低隔离级别。 使用绑定连接。

 =========================================================================

六:什么是装饰器,原理应用场景及项目中哪些地用到=-

Python装饰器就是利用了闭包的思路,目的是在不改变原函数代码的情况下,给函数增加新的功能。

应用场景:

1.可以在外层函数加上时间计算函数,计算函数运行时间;

2.计算函数运行次数;

3.可以用在框架的路由传参上;

4.插入日志,作为函数的运行日志;

6.缓存,实现缓存处理;

七:python的是如何做内存管理的

内存管理: 1.引用计数:赋值 计数器+1,删除-1 2.垃圾回收:对象的引用为0,引用计数无法解决时 3.内存池机制:将不用的内存放到内存池,不反还给操作系统

八:python的高阶函数有哪些,分别有什么作用

map() Python 内置的高阶函数,它接收一个函数 f 和一个 list,

reduce()接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数f必须接收两个参数,

filter() 对每个元素进行判断, True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,

sorted()可以对所有可迭代的对象进行排序操作

九:什么是递归,哪些业务用到递归.=======

  1. 递归,就是在运行的过程中调用自己。 构成递归需具备的条件:

    1. 子问题须与原始问题为同样的事,且更为简单;

    2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

十:global和nonlocal的作用?

global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量 nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,一般在嵌套函数中使用。对该变量进行修改也会同时修改其引用的上一级函数的局部变量。

margin 外边距 padding 内边距 border 边框 between 在二者之间 background 背景 width 宽 height 高 left 左 right 右 top 上 bottom 下 avatar 头像


=========================================================================


十一:python中的魔法方法有哪些,分别代表什么意思

_ new_:类的构造器,创建初始化后的基本实例对象

_ init_:类的数据初始化方法 ,用来给实例对象添加属性的

? _del_:类的析构器,专门用来在实例对象销毁前调用,释放资源的

? call:可以将实例对象直接声明为一个方法调用,方便调用过程,保护内部实现

十二:静态方法类方法的区别

静态方法: 使用装饰器 @staticmethod,不需要参数,类对象和实例对象都可以调用

类方法: 使用装饰器@classmethod,类对象和实例对象都能调用

十三:什么是元类

用来创建类的类就叫元类函数type其实就是一个元类,type就是Python中用来创建所有类的元类。

十四:什么是反射

反射指的是运行时获取类型定义信息,也叫做自省****

在Python中,能够通过一个对象,找出其type、class的能力***

十五:什么是IO多路复用

  • IO 多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;

  • 一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;

  • 没有文件句柄就绪就会阻塞应用程序,交出CPU。

十六:select、poll、epoll特点是什么

select 可移植性好,对于超时值提供了更好的精度:微秒。

poll 不要求开发者计算大文件描述的大小,没有连接数的限制,可以基于链表来存储的。

epoll 支持一个进程打开大数目的socket描述符(FD) IO效率不随FD数目增加而线性下降,加速内核与用户空间的消息传递。

十七:什么是生产者消费者模型

十八:mysql常用 的数据库引擎

InnoDB存储引擎,mylsam存储引擎,memory存储引擎 ,

十九:myISAM和Innodb的区别是什么

InnoDB 支持事务、外键、行锁 MyISAM 支持表锁,访问快

二十:hash索引和btree的区别

Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引

BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符

二一:索引的作用, 有那些索引种类。

帮助mysql进行高效查询的一种数据结构(有序

普通索引:仅加速查询 唯一索引:加速查询+列值唯一(可以有null) 主键索引:加速查询+列值唯一(不可以有null)+表中只有一个 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。 全文索引:对文本的内容进行分词,进行搜索。

22:索引失效的原因是什么,什么情况下用不到索引。

在条件中有or,2,like查询以%开头,索引无效;4、当字段类型为字符串时,条件中数据没有使用引号引用。

数据唯一性差的字段不要使用索引,频繁更新的字段不要使用索引

23:什么情况下不建议使用索引,

1,表的数据量特别小的时候,数据的差异性很小,频繁更新的字段,当修改性能远远大于检索性能时,不应该创建索引。

24:Mysql中的事务有什么作用,事务的特性要那些。

  1. 在mysql中只有使用了innodb,才能使用事务。

  2. 事务的特性: 原子性,一致性,隔离性, 持久性

25:事务的隔离级别有那些?

(读未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。

(读已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。

(重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。

(串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读

:26:Mysql中要那些琐。

表琐---锁住整张表的数据。

行琐----锁住数据所在的行。

27:什么是sql注入

[SQL注入],就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

28:http 和 https的区别

端口:http 端口号是80,https 端口号是443

传输协议:http 是超文本传输协议,属于明文传输;https 是安全的超文本传输协议,是经过 SSL 加密后的传输协议

29:常见的请求方式要那些。

get:请求指定页面信息,并返回实体主体。 head:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。 post:向指定资源提交数据进行处理请求,数据包含在请求体中。 put:从客户端向服务器传送的数据取代指定的文档的内容。

30:常见的响应码有那些。

200,401,403,404,500

pv和uv分别是什么

PV 访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量;统计周期内用户每打开或刷新一个页面就记录1次,多次打开页面则浏览量累计增加。

UV 独立访客,统计1天内访问某站点的用户数;访问一台电脑客户端为访客。理解成访问某网站的电脑数量。一天内相同的客户端多次访问计为1个访客。

什么是跨域,如果解决

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域

利用的是 script 标签 src 属性请求 js 无跨域问题,但具有局限性,只能发送 get 请求

什么是跨站攻击

是指攻击者利用网站程序对用户输入过滤不足,输入显示在页面上对其他用户造成影响的 HTML代码 ,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种*攻击*方式

.如何保证接口的安全

\2. 基于网关实现黑明单与白名单拦截

\4. 对一些特殊字符实现过滤 防止xss、sql注入的攻击

\5. 使用token+图形验证码方法实现防止模拟请求

cookie和session的区别

cookie的数据信息存放在客户端浏览器上。

session的数据信息存放在服务器上。

redis的数据类型及应用场景

字符串(String),Hash(字典),列表(List),集合(Set),有序集合(Sorted Set)。

一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等

什么是雪崩

大量的key设置了相同的过期时间,导致缓存在同一时刻全部失效

什么是击穿

一个存在的key,在缓存过期的一刻,有大量请求

什么是穿透

访问一个不存在的key,缓存不起作用

redis持久化的方式

RDB 持久化机制,是对 redis 中的数据执行周期性的持久化。

AOF:机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,在 redis 重启的时候,可以通过回放 AOF 日志中的写入指令来重新构建整个数据集。

什么是装饰器,原理应用场景及项目中哪些地用到

1.装饰器的实现是由闭包支撑的
2.装饰器本质上是⼀个python函数,它可以在让其他函数在不需    要做任何代码的变动的前提下增加额外的功能;
3.装饰器的返回值也是⼀个函数的对象
​
应用场景:
1.可以在外层函数加上时间计算函数,计算函数运行时间;
2.计算函数运行次数;
3.可以用在框架的路由传参上;
4.插入日志,作为函数的运行日志;
5.事务处理,可以让函数实现事务的一致性,让函数要么一起运行成功,要么一起运行失败;
6.缓存,实现缓存处理;
7.权限的校验,在函数外层套上权限校验的代码,实现权限校验;

python常用的三方模块有哪些

redis  负责连接redis数据库
pymysql   
pyjwt  生成和校验jwt token
django  web开发框架
flask  web开发框架
requests   发送HTTP请求的模块

Python内置模块有哪些

os   操作系统库
time  时间库
re    正则模块
random   随机模块
json   json的序列化和反序列化
hashlib   负责加密的模块

面向对象的五大原则是什么

单一职责:一个类,最好只做一件事
开放封闭:实体应该是可扩展的,而不可修改的
里氏代换:所有使用基类的地方必须能够透明的使用其子类的对象
依赖倒置:依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
接口隔离:使用多个小的专门的接口,而不要使用一个大的总接口

tcp和udp的区别

TCPUDP
需要建立连接不需要建立连接
可靠的不可靠的
工作效率低工作效率更高
只支持一对一支持一对一,一对多,多对一,多对多
占用资源多占用资源少

列举python中的魔法方法

__str__: 管理print输出对象的时候显示的内容
__init__: 构造函数,对象实例化的时候调用
__del__: 析构函数,对象销毁时调用
__call__: 把实例化对象当作方法调用时调用
__iter__: 返回迭代器本身

什么是反射

需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射

说一下python中的迭代器和生成器

迭代器对象就是一个可以迭代的对象。迭代器就是负责迭代这个可迭代的对象的一种工具。提供了两个函数,__iter__和next()
__iter__是返回迭代器本身。
next()是返回可迭代的下一个元素
​
生成器
在Python中,使用生成器可以很方便的支持迭代器协议。生成器通过生成器函数产生,生成器函数可以通过常规的def语句来定义,但是不用return返回,而是用yield一次返回一个结果,在每个结果之间挂起和继续它们的状态,来自动实现迭代协议。
也就是说,yield是一个语法糖,内部实现支持了迭代器协议,同时yield内部是一个状态机,维护着挂起和继续的状态。

什么是元组,和列表的区别是什么

元组列表
不可变的可变的
异构数据同构数据
元组靠()和,来声明依靠[]来声明
联系:元组和列表之间是可以相互转换

range和xrange的区别是什么?

range:得到的返回值是一个列表类型的
xrange:得到的返回值是一个迭代器对象
    
python3中的range,就是python2中的xrange

什么是深浅拷贝,区别,原理及代码实现

深拷贝:复制内存中的内容,重新开辟内存地址。原始数据发生变化,复制的数据不发生变化。copy.deepcopy()
浅拷贝:复制内存地址,原始数据发生变化,复制的数据也会跟着发生变化。copy.copy()

python的是如何做内存管理的

1. 引用计数:赋值+1,删除-1
2. 垃圾回收:当引用计数的值为0的时候,会释放资源。达到了垃圾回收的阈值,触发标记-清除
3. 内存池管理:回收的内存并不会返回给操作系统,而是留在自己内存池中。

什么是递归,哪些业务用到递归

递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

redis的数据类型及应用场景

string  字符串
list  列表
hash  哈希
set  集合
zset 有序集合

redis的优缺点

优点:
性能快、基于内存实现、是目前最快的key-value数据库
可以持久化
数据类型丰富,可以满足多种需求
支持事务
哨兵机制,可以实现分布式集群
​
缺点:
断电可能会造成数据丢失
作为缓存的时候,容易出现缓存雪崩、击穿、穿透

redis的内存淘汰策略有哪些

no-enviction 存储满数据,新加入数据直接报错
allkeys-random 在所有key中随机删除一个key
allkeys-lru 在所有key中,删除最近最少使用的key
volatile-random 在所有有过期时间的key中,随机删除一个
volatile-lru 在所有有过期时间的key中,删除最近最少使用的key
volatile-ttl 在所有有过期时间的key中,删除最近要过期的key

redis如何做内存优化

尽可能使用hash类型,尽可能的将你的数据模型抽象到一个散列表里面,因为hash类型占用内存较少

mysql常用 的数据库引擎

Innodb 
myISAM
memory

myISAM和Innodb的区别是什么

mysql默认存储引擎:5.5之前:myISAM 5.5之后:Innodb

InnodbmyISAM
支持事务不支持
支持外键不支持
行锁表锁
查询速度低查询速度高,批量插入快
不支持支持全文索引
内存使用高内存使用低

hash索引和btree的区别

hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询。
hash索引不支持使用索引进行排序
hash索引不支持模糊查询以及多列索引的最左前缀匹配
hash索引任何时候都避免不了回表查询数据
hash索引不稳定,性能不可预测

索引失效的原因有哪些,或者说什么情况下用不到索引

1、条件中有or,即使其中有条件带索引也不会使用;
2、对于多列索引,不使用的第一部分,则不会使用索引;
3、like查询以%开头,索引无效;
4、当字段类型为字符串时,条件中数据没有使用引号引用。

什么情况下不建议用索引

用不到的字段,不用加索引
数据量较少的表,不用加索引
表中数据变化比较频繁,不用加索引

说一下mysql中的事务

四大特性:原子性、持久性、隔离性、一致性
隔离级别:串行化、可重复读、读已提交、读未提交

事务的隔离级别有哪些

说一下mysql中的锁

按锁的粒度划分:
    表级锁,行级锁,页级锁
按锁的级别划分:
    共享锁、排他锁
按加锁方式分
    自动锁、显式锁
按操作划分:
    DML锁、DDL锁
按使用方式划分:
    悲观锁、乐观锁

死锁是如何造成的,怎么避免

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
​
避免:
按同一顺序访问对象。
避免事务中的用户交互。
保持事务简短并在一个批处理中。
使用低隔离级别。
使用绑定连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值