面试技术点分析(一)

参考链接:https://blog.csdn.net/luo981695830/article/details/82667412?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

1.数据类型有几种、有什么区别

列表  list
元组  tuple
字符串  string
数字   int,float,complex
布尔类型  True,False
字典  dict
集合 set

2.进程、线程、协程定义及区别

进程是操作系统进行资源分配和调度的基本单位,多个进程之间相互独立。
线程是CPU进行资源分配和调度的基本单位,它是比进程更小的能独立运行的基本单位
协程的调度完全由用户控制

区别

线程与进程的比较
1.线程是进程的一个执行单元,进程内至少有一个线程,在一个进程中线程是共享进程的资源,进程与进程之间相互不影响。
2.线程是CPU调度的基本单位,但进程不是
3.二者均可并发执行
4.线程不能独立执行,必须依存在应用程序中(进程)

协程与线程的比较
1.一个线程可以有多个协程,一个进程也可以单独拥有多个协程
2.线程与进程都是同步机制,而协程是异步
3.协程能保留上一次调用的状态

总结

在IO密集型一般使用多线程,CPU密集型使用多进程,强调非阻塞异步并发的一般都是使用协程

3.深浅拷贝的区别

浅拷贝是对原元素的引用,如果修改了原元素中的可变数据类型,拷贝之后的数据也会跟着改

深拷贝是原元素的数据拷贝,放入新开辟的内存地址,修改原元素对深拷贝之后的数据不会产生影响

4.常用设计模式

https://blog.csdn.net/wmj150731/article/details/81589659

5.函数式编程,对象式编程

函数式编程是从头写到尾,中间修改后面也要改(类似流水线生产,从头到尾)

对象式编程相当于组装多个功能,形成一个大功能(类似于把每个流水线生产好的部件在这里组装起来)

6.闭包、装饰器

闭包函数:定义在内部的函数引用外部函数的名字叫做闭包函数

 

 

7.名称空间的查找顺序

查找顺序:局部>>全局>>内置

函数在定义阶段就已经固定查找名字的顺序,不会因为函数的调用的位置改变而改变

8.python中的类可以多继承么,多继承的继承方式

可以,写多个父类就行

9.魔法方法,举例并说明

__init__   初始化函数,在创建实例对象为其赋值时使用
__new__   在__init__之前执行,真正的构造函数,并返回一个实例对象,当做参数self给__init__使用
__call__    当调用一个对象的时候,就会触发类中的__call__方法

创建对象步骤

1.首先调用__new__得到一个对象
2.__init__为这个对象添加属性
3.将对象赋值给变量

10.生成器、迭代器、可迭代对象的定义及区别

可迭代对象:内置有__iter__方法的对象就是可迭代对象
迭代器:可迭代对象执行__iter__方法得到的结果就是迭代器,迭代器既有__iter__方法又有__next__方法
生成器:用户自定义的迭代器,内部加了关键字yield,yield后面的值必须调用__next__方法才能获得
重点:
迭代器一定是可迭代对象,可迭代对象不一定是迭代器
for循环的本质:将in后面的可迭代对象调用__iter__变成迭代器,调用__next__迭代取值

11.垃圾回收机制

引用计数:当内存中的数据没有任何变量名与其有绑定关系,就会被自动回收
标记清除:当内存快要被某个应用程序占满的时候,会自动触发清除
分代回收:根据存活的时间,划分不同的等级,等级越高的垃圾回收机制扫描的频率越低

12.线程安全、死锁、GIL

线程安全:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。存在竞争的线程不安全,不存在竞争的线程就是安全的
死锁:死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
GIL:全局解释器锁,不是python的特性,是cpython中的一个概念。在一个进程中所有线程的资源是共享的,为了保证线程的数据完整性,所以使用了GIL,每次只执行一个线程。

13.解决线程不安全的办法

抢票用多线程实现,可能出现多个用户买同一张票的情况

设置锁Lock,在处理数据之前抢到锁,处理完数据之后释放锁。

14.linux常用命令,举例说明

mv  移动文件     
mv   源文件目录   目标文件目录 
mv test3 test2       把test2文件移动到test3下

grep指令和管道符|使用
查看redis的进程号    ps -ef | grep redis
杀死进程     kill  进程号


cp拷贝指令
cp   原路径   目标路径

16.http状态码

http协议四大特性

1.基于请求和响应
2.基于TCP/IP之上作用于应用层的协议
3.无状态(服务端无法保存用户的状态)
4.无链接(请求来一次就响应一次,之后立马断开连接)

请求数据格式

请求首行(标识HTTP协议版本,当前的请求方式)
请求头(一大堆k,v键值对)
/r/n
请求体(一些敏感信息)

五种响应状态码

1XX:服务端已经成功接收了你的数据正在处理,你可以继续提交额外的数据
2xx:服务端成功响应你想要的数据(请求成功200)
3xx:重定向(当你在访问一个需要登录之后才能访问的页面,你会发现窗口会自动调到登录页面) 301 302
4xx:请求错误(请求资源不存在报404,请求不合法不符合内部规定权限不够报403)
5xx:服务器内部错误(500)

17.http和https的区别

1.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
2.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
3.http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

18.网络编程、通信协议

 

19.三次握手、四次挥手

 

20.http中get 和 post的区别

 

21.缓存怎么做

就是把需要经常使用的数据提前放在某个地方,可以是本机的内存,也可以放在其他地方,这样做可以减少系统开销,提高系统效率。

22.session、cookie的区别

Session是保存在服务端,用来跟踪用户的状态
Cookie是保存在客户端的,用cookie来实现session跟踪的,第一次创建session的时候,服务端会告诉客户端,在cookie里面记录一个session ID,以后每次请求把这个ID发送到服务端就知道是哪个用户了。

23.socket/TCP /UDP/HTTP

1.osi七层协议:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
2.IP 协议对应于网络层,TCP协议对应于传输层,HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用
3.TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据
4.socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API), 通过Socket,我们才能使用TCP/IP协议。
5.TCP之所以可靠是因为有反馈机制,TCP的三次握手举例,TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性
6.UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,正由于这些特点,使得UDP的开销更小数据传输速率更高

 

posted @ 2020-03-30 22:40  只会玩辅助  阅读(267)  评论(0编辑  收藏  举报