一、简答题(20题)
1.什么是 C/S 和 B/S 架构
2.Python的可变和不可变数据类型?
3.with 方法打开文件的作用
4.什么是负索引
5._init_在Python中有什么用?
6.什么是可变数据类型和不可变数据类型
7.解释//、%、* *运算符?
8.Python 中的 GIL
9.谈谈你对多进程、多线程、以及协程的理解,项目是否用?
10.Python 如何收集垃圾(无用的对象)?
11.简述 OSI 七层协议
12.Python支持多重继承吗?
13.什么是pickling和unpickling?
14.Python中的单引号和双引号有什么区别?
15.可变类型与不可变类型
16.Python中append,insert和extend的区别?
17.列出5个常用Python标准库?
18.什么是异步非阻塞
19.单例模式与工厂模式
20.TCP 和 UDP 的区别
参考答案
1.B/S 又称为浏览器/服务器模式。比如各种网站,jupyter notebook 等。优点:零安装,维护简单,共享性好。缺点:安全性较差,个性化不足 C/S 又称为客户端/服务器模式。比如微信客户端,Oracle 客户端等。优点:安全性好,数据传输较快,稳定。缺点:对 PC 机操作系统等有要求,当客户端较多时,服务器端负载较大
2.不可变数据类型:即数据被创建之后,数据的值将不再发生改变,有数值、字符、元祖类型; 可变数据类型:数据别创建之后,数据的值可以发生变化,有列表、字典、集合类型。
3.开文件在进行读写的时候可能会出现一些异常状况,如果按照常规的 f.open 写法,我们需要 try,except,finally,做异常判断,并且文件最终不管遇到什么情况,都要执行 finally f.close() 关闭文件,with 方法帮我们实现了 finally 中 f.close
4.Python 中的序列是有索引的,它由正数和负数组成。正的数字使用’0’作为第一个索引,‘1’作为第二个索引,以此类推 负数的索引从’-1’开始,表示序列中的最后一个索引,’ - 2’作为倒数第二个索引,依次类推
5.“init”是Python类中的保留方法。 它被称为构造函数,每当执行代码时都会自动调用它,它主要用于初始化类的所有变量。
6.在Python中,数据类型可以分为两种:可变数据类型和不可变数据类型。不可变数据类型:这种数据类型的值一旦定义,就不能更改。如果尝试更改其值,实际上会创建一个新的对象。不可变数据类型的例子包括整数、浮点数、字符串、元组。例如,如果你有一个字符串变量,你不能更改这个字符串中的某个字符。试图这样做的话,Python会创建一个新的字符串。可变数据类型:与不可变数据类型相反,可变数据类型的值是可以更改的。也就是说,你可以在不创建新对象的情况下更改对象的值。可变数据类型的例子包括列表、字典以及集合。例如,如果你有一个列表,你可以更改列表中的元素,增加元素,或者删除元素,而不需要创建一个新的列表
7.//(Floor Division)-这是一个除法运算符,它返回除法的整数部分。 例如:5 // 2 = 2 %(模数)-返回除法的余数。 例如:5 % 2 = 1 **(幂)-它对运算符执行指数计算。a ** b表示a的b次方。 例如:5 ** 2 = 25、5 ** 3 = 125
8.GIL 是 Python 的全局解释器锁,同一进程中假如有多个线程运行,一个线程在运行 Python 程序的时候会占用 Python 解释器(加了一把锁即 GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行
9.进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所有进程间数据不共享,开销大。线程: cpu调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在,一个进程至少有一个线程,叫主线程,而多个线程共享内存可以极大地提高了程序的运行效率。协程: 是一种用户态的轻量级线程,协程的调度完全由用户控制,协程拥有自己的寄存器上下文和栈。协程调度时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操中栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
10.Python 使用一种称为引用计数的方法来决定何时需要在内存中收集对象。 简单来说,Python 会计算每个对象的引用计数,当一个对象没有引用时,会自动收集。
11.是网络传输协议,人为的把网络传输的不同阶段划分成不同的层次 七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 五层划分为:应用层、传输层、网络层、数据链路层、物理层 物理层:网线,电缆等物理设备 数据链路层:Mac 地址 网络层:IP 地址 传输层:TCP,UDP 协议 应用层:FTP 协议,Email,WWW 等
12.Python可以支持多重继承。多重继承意味着,一个类可以从多个父类派生。
13.pickling是将Python对象(甚至是Python代码),转换为字符串的过程。 unpickling是将字符串,转换为原来对象的逆过程。
14.在Python中使用单引号(’ ')或双引号(" ")是没有区别的,都可以用来表示一个字符串。 这两种通用的表达方式,除了可以简化程序员的开发,避免出错之外,还有一种好处,就是可以减少转义字符的使用,使程序看起来更简洁,更清晰。
15.可变数据类型:list、dict、set 不可变数据类型:int/float、str、tuple
16.append:在列表末尾添加新元素。 insert:在列表的特定位置添加元素。 extend:合并两个列表。
17.import os import sys import re import math import time import datetime import random import threading import multiprocessing
18.同步异步指的是调用者与被调用者之间的关系 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回,一旦调用返回,就得到了返回值 异步的概念和同步相对,调用在发出之后,这个调用就直接返回了,所以没有返回结果。当该异步功能完成后,被调用者可以通过状态、通知或回调来通知调用者 阻塞非阻塞是线程或进程之间的关系 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)。调用线程只有在得到结果之后才会返回。函数只有在得到结果之后才会将阻塞的线程激活 非阻塞和阻塞的概念相对应,非阻塞调用指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程
19.单例模式:主要目的是确保某一个类只有一个实例存在 工厂模式:包涵一个超类,这个超类提供一个抽象化的接口来创建一个特定类型的对象,而不是决定哪个对象可以被创建
20.TCP 和 UDP 都是 OSI 模型中运输层的协议。TCP 提供可靠的通信传输,而 UDP 则常被用于广播和细节控制交给应用的通信传输。UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。TCP 充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制 TCP 应用:FTP 传输,点对点短信等 UDP 应用:媒体流等