python开发基础知识

Python基础知识

面向对象和面向过程的区别

面向对象是把构成问题的事物分解成各个对象,建立对象来描述某个事物在解决问题的步骤中行为;
面向过程是分析出解决问题所需要的步骤,然后用一些函数把这些步骤一步步实现,使用的时候依次调用函数就行了。

装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额外功能,它接受一个函数作为参数,并返回一个函数,利用Python的@语法来放置。
功能:1.引入日志。2.函数执行时间统计。3.执行函数前预备处理。4.执行函数后清理功能。5.权限效验。6.缓存。

Python装饰器@staticmethod和@classmethod区别和使用

@classmethod:类方法,类方法是给类用的,类在使用时会将类本身当做参数传给类方法的第一个参数,Python为我们内置了函数定义成类方法。
@staticmethod:静态方法
用上面俩个装饰器就可以不用在实用类前对类进行实例化了。

深拷贝、浅拷贝和等号赋值

等号赋值:简单地拷贝对象的引用,俩个对象的id相同。修改,记住是修改,不是重新赋值,如append、pop、列表的修改这些,修改其中的一个,另一个也会产生变化。
浅拷贝:1.浅拷贝的对象是不可变对象如数值、字符、元组时,和等号赋值一样,对象的id值和浅拷贝原来的值相同;2.如果是可变对象,如列表、字典等,a一个简单的没有嵌套的对象,复制前后的对象相互之间不会影响;b对象中有复杂子对象,如列表嵌套,如改变原来的悐中复杂子对象的值,浅拷贝的值也会受影响,因为浅拷贝只复制了子对象的引用(只拷贝父对象)
深拷贝:新建一个对象,把原来对象的内存完全复制过来,改变复制后的对象,不会改动原来内存的内容。(俩个对象在复制之后是完全独立的对象)

GIL

GIL(全局解释锁)能确保一次执行一个线程,线程轮流保存GIL并且在把他传给下一个线程之前执行一些操作,以达到多个进程在CPU上轮流进行,但是这个转换速度很快,让我们觉得它是并行的。

类(class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
类的继承:当一个类继承自另一个类,它就被称为一个子类/派生类,继承自父类/基类/超类。它会继承/获取所有类成员(属性和方法)。

Python内存管理

  1. 引入计数机制:python内部使用引用计数,来保持追踪内存中的对象,python内部记录了对象有多少个引用,即引用计数,当对象被创建时就创建了一个引用计数,当对象不再需要时,这个对象的引用计数为0,它就被垃圾回收。
  2. 垃圾回收:python会检查引用计数为0的对象,清除其在内存占的空间;循环引用对象则用一个循环垃圾回收器来回收,
  3. 内存池机制:在python中,许多时候申请的内存都是小块的内存,这些小块内存咋申请后,很快又会被释放,由于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着python在运行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响python的执行效率。为了加速python的执行效率,python引入了一个内存池机制,用于管理对小块内存的申请和释放。
    a)python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。
    b)python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的maloc。另外python对象,如整数,浮点数和list,都有其独立的私有内存池,对象间不共享它们的内存池,也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。

参数,传参

位置参数和关键字参数的区别
*args一定要在**kwargs前面

不知道向函数传递多少参数时,比如传递一个列表或元组,就使用*args

def func(*args):…

Func(1,2,3,4,5)

不知道该传递多少关键字参数时,使用**kwargs来收集关键字参数(keyword argument)

def func(**kwargs):…
Func(a=1,b=2,c=3)

普通参数,传参过程中,参数的数据类型是可变对象(列表、字典),则函数参数的传递方式将采用引用传递方式。如果是不可变的,比如字符串、数值、元组,它们就是按值传递。

cookie和session的关系和区别

cookie保存在浏览器端,session保存在服务器端,但是为了区分不同的客户端,服务器会在浏览器中发送一个对应的sessionid保存在cookies中,下次浏览器请求服务器的时候回将sessionid一并发送给服务器。所以session机制依赖于cookie机制。
1、cookie数据存放在客户的浏览器上,session数据存放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie。
5、建议:
将登陆信息等重要信息存放为session
其他信息如果需要保留,可以放在cookie中

计算机网络

HTTP
HTTP和HTTPS的区别
https需要到ca申请证书,因而需要一定费用
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议,成本较高。
http的连接很简单,是无状态的,https协议是由ssl+http协议构建的可进行加密串,身份验证的网络协议。
http用的端口是80,https用的端口是443.
HTTP请求报文的内容
请求行包括请求方法(GET,POST…), URL,HTTP协议版本
请求头 格式为,头部字段:值。常见头部字段有…
请求正文

HTTP劫持

跨域

跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。
同源:域名,协议,端口 均相同
即浏览器只能执行相同协议、相同域名、相同端口下的网站脚本,执行的时候如果网站的脚本不属于现在这个界面,就不会执行。

HTTP请求响应中断原因

网断了,网络阻塞,请求超时,浏览器出问题,服务器出问题。
如何检查
检查网络…检查本地…

HTTP有几种请求方式

HTTP1.0定义了三种请求方法:GET,POST和HEAD方法。
HTTP1.1新增了六种请求方法:options、put、patch、delete、trace和connect方法。

GET和POST的区别

GET的参数放在URL中,返回服务器拿数据;POST在request body里自带一个参数去服务器拿指定的数据;
因为GET的参数暴露在url上,所以安全性不能保证,也有长度的限制。
应用场景
GET用来查询数据,POST用来修改数据

DNS的查找过程(应用层)

用于将用户提供的主机名解析为ip地址
0.浏览器从接收到的url中抽取域名地址,将域名传给DNS应用的客户端。
1.检查浏览器缓存、本地hosts文件是否有这个网址的映射,如果有,就调用这个IP地址映射。
2.如果没有,则查找本地DNS解析器缓存是否有这个网址映射,如果有,返回映射。
3.如果没有,则向DNS服务器提出查询请求。
4.服务器接收到查询时,查询本地配置区域资源,查询到就返回结果。
5.如果查不到,但服务器缓存了此网址映射关系,返回查找结果。
6.如果没有缓存,就继续请求转发至上一级DNS服务器进行查询。最终将解析结果依次返回本地DNS服务器,本地DNS服务器在返回给客户端,并把这个映射存到服务器的缓存中。

浏览器中输入一个URL后,按下回车后发生了什么

URL,统一资源定位符,简单点就是网址=ip或域名+端口号+资源位置+参数+锚点
例:http://mail.163.com/index.html 为一个URL

  • 1)http:// 协议 是http超文本传输协议,网页在网上的传输协议
  • 2)mail 服务器名,代表邮箱服务器
  • 3)163.com 域名 定位网站的独一无二的名字如qq.com
  • 4)mail.163.com 网站名,由服务器名+域名组成
  • 5)/index.html 根目录下的默认网页
    1.输入一个网址之后,首先浏览器通过查询DNS,查找这个URL的IP地址(通过层层向上级DNS服务器查找直到找到对应URL的IP地址)
    2.得到目标服务器的IP地址及端口号(http 80端口,https 443端口)会调用系统函数socket,请求一个TCP流套接字。客户端向服务器发送HTTP请求报文。
    (1)应用层:客户端发送HTTP请求报文。
    (2)传输层:(加入源端口、目的端口)建立连接。实际发送数据之前,三次握手客户端和服务器建立起一个TCP连接。
    (3)网络层:(加入IP头)路由寻址
    (4)数据链路层:(加入frame头)传输数据
    (5)物理层:物理传输bit
    3.服务器端经过物理层>>数据链路层>>网络层>>传输层>>应用层
    4.关闭连接,TCP四次挥手
    5.客户端解析HTTP响应报文,浏览器开始显示HTML

域名解析顺序
域名分层:从右到左分别顶级域名、二级域名…最左为主机名(服务器名)。比如www.baidu.com的com为顶级域名,email.tsinghua.edu.cn中cn为顶级域名,为中国国家域名,edu为教育科研部门域名,edu为教育科研部门域名,email为服务器名。
域名解析时,优先查找匹配的子域名,如果子域名存在,则从子域名的配置文件查询解析结果,如果子域名不存在,就从上一级的配置文件查询结果。

网页卡顿原因

网速慢、宽带不足、硬件配置低、内存被占满。
JS脚本过大,阻塞了页面的加载。
网页资源过多,接受数据时间长、加载某个资源慢。
DNS解析速度。
怎么检查
硬件问题:检查网线或者无线网卡有没有插好,有没有连上路由器,底层是不是联通状态;
软件问题:查看是否有对应的驱动,服务器好不好,DNS对不对,或者可能是代理没关。

TCP断开连接为何要TIME_WAIT:

防止服务器在处于LAST_ACK状态下未收到ACK报文而重发FIN报文,这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

SYN_FLOODSYN注入攻击

TCP怎么实现可靠传输

确认和重传机制:建立连接、发送包时的确认,运输过程中校验失败、丢包或延时发送端重传。
数据排序:把数据分成很多包,按顺序进行传输。
流量控制:滑动窗口计时器
拥塞控制:慢启动、拥塞避免、快速重传、快速恢复。

流量控制
作用于接收方,控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。由由滑动窗口实现

  • 滑动窗口
    – TCP进行流量控制的方式,接收方通过告诉对方自己的窗口大小,从而控制发送方的发送速度,以防止由于发送方发送速度过快而导致自己被淹没的现象。
  • 计时器
    – 发送端收到为0的窗口后开启一个计时器, 时间到了之后发包询问现在的滑动窗口,防止死锁(接收端发回的不为0的窗口的包丢失,双方互相等待)

拥塞控制
作用于网络,防止过多的数据注入到网络中,避免出现网络负载过大的情况。
拥塞:对网络中某一资源的需求超过了该资源所提供的可用部分,影响到网络性能。
拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至过载。
拥塞窗口:发送方 使用的流量控制,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。

慢启动和拥塞避免

慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。
拥塞窗口一开始设为1,没收到一次确认,就让拥塞窗口变为原来的两倍,当窗口值为16时(慢启动门限),改为加法增大,每次+1,直到网络拥塞。拥塞时让新的慢启动门限设为拥塞时的一半,并把拥塞窗口置为1,再让他重复,这时一瞬间会将网络数据量大量降低。
拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。

快重传和快恢复
快重传:接收方每收到一个失序的报文段(收完2后就收到了4说明3丢了)就立即发出包2的重复确认,这样可以让发送方尽早知道包丢了。
发送端连续收到三个重复确认就立即重传3.
快恢复:发送方收到3个连续确认时,把慢开始门限减半,把拥塞窗口的值置为慢开始门限的一半,实行拥塞避免算法,每次确认收到后+1。

操作系统

操作系统的四个特性

并发:同一段时间内多个程序执行(与并行区分,并行指的是同一时刻有多个事件,多处理器系统可以使程序并行执行)。
共享:系统中的资源可以被内存中多个并发执行的进程共同使用。
虚拟:通过分时复用(如分时系统)以及空分复用(如虚拟内存)技术把一个物理实体虚拟为多个。
异步:系统进程用一种走走停停的方式执行,(并不是一下子走完),进程什么时候以怎样的速度向前推进是不可预知的。

线程和进程

进程是操作系统进行资源分配和调度的最小单位,多个进程之间相互独立,如果一个进程崩溃,不会影响其他进程;
线程是CPU进行分配和调度的最小单位(或者说是进程的最小单位,进程的一部分),一个进程下可以有很多个线程共享该进程的所有资源,如果一个线程崩溃,整个进程就会崩溃。
进程和线程的区别
线程是操作系统进行资源分配和调度的最小单位,每个进程有自己的一部分独立的资源,如果一个进程崩溃,不会影响其他进程;线程是CPU分配和调度的最小单位,一个进程下可以有很多个线程共享该进程的所有资源,如果一个线程崩溃,整个进程就会崩溃。
线程一般是共享资源,在创建、或是进行调度的时候开销比进程小很多,通信同步也比较方便。
通信方面进程间通讯需要同步或互斥手段,来保证数据的一致性,线程间可以直接读/写进程数据段(如全局变量)来进行通信。

进程死锁
多个并发的进程中,如果每个进程都持有某种资源由等待其他进程释放它现在保持的资源,这些资源都只允许一个进程占用,结果俩个进程都不能继续执行,也不会释放自己占用的资源,所以这种双方循环等待的现象会无限期持续,发生死锁。
原因
互斥条件:资源不能共享只能一个进程用。
请求与保持条件:已经得到资源的进程可以再次申请新的资源。
非剥夺条件:已经分配的资源不能从相应进程中强制剥夺。
循环等待条件:系统中若干进程形成环路,环路中的每个进程都在等待相邻进程正占用的资源。

死锁处理
预防:破坏四个原因中的一个或多个,但会影响到资源利用率及吞吐量。
避免:在资源的动态分配中防止系统进入不安全状态。
检测:死锁发生后用一定的算法进行检测,并确定相关死锁相关的资源和进程,采取方法清除死锁。
解除:对死锁相关进程,通过撤销或挂起的方式,释放一些资源。

待写 计算机操作

Linux

linux常用命令

系统 | Value |晚上 |按顺序

系统管理命令::su切换账户
ifconfig查看IP地址
Ping检查网络是否连接
Kill杀死进程
Kill-9查看IP地址
系统资源查询命令ps查看进程
Ps -ef查看所有进程
Netstart查看网络状况
Netstart -apn查看所有的端口
df显示磁盘空间使用情况
top查看进程资源占有
管道命令(同时执行)Ps -ef \grep查看所有的端口
Chmod赋权命令
目录操作命令cd进入目录里面
cd/根目录
pwd当前目录
mkdir创建目录
rmdir删除目录
ls查看现有的目录
文件编辑命令vi + 文件编辑文件
Cat a.txt查看文件,显示内容
rm -rf强制删除
find /-name.txt在根目录下查找txt文件
cp -ai a.txt test复制a.txt到test目录下
tail -f pin.log显示pin.log文件末尾内容
Find查找
grep文本搜索
touch如果没有就创建,有就不理他
文件解压压缩命令tar -czvf test.tar.gz.test压缩 将文件压缩成 test.tar.gz
tar -xzvf test.tar.gz.test解压 将文件解压成test.tar.gz

linux和windows的区别,linux相比windows有什么优势

linux是一个以开发者为中心的操作系统,而windows是以消费者为中心的操作系统
linux是免费的、开源的,更容易得到他的源代码,也就更容易实现个性化定制
linux的命令行动功能强大,windows的命令行没这么厉害…
linux基于网络,只要有相应权限,就能远程操控相应的服务器

| 是什么:
管道符,就是把符号左边命令本来要打印到终端上的信息当做右边命令的操作对象
linux命令 如何杀死占用指定端口的进程 :先查端口对应的进程,然后kill进程号(ss、netstat查进程)

grep怎么输出文本中包含某个关键字的行,不包含的呢
grep -v xxx输出不包含的

装软件
系统是debian的,apt–get
其他方式还有yum、rpm

du,df的区别
VI显示所有行的行号:vi set number
找到共用80端口的线程
linux基本指令 awk、find、grep
shell脚本:统计一个文件从一台服务器转移到另一台服务器
如何查找出现频率最高的100个ip地址
sh.sh source.sh./a/sh 区别

数据结构

用列表实现队列
用队列实现栈
用栈实现队列
二叉树节点间最小距离
二叉树中的最大路径和
二叉树的序列化和反序列化
深度优化搜索、宽带优化先搜索
堆排序的原理和复杂度

测试相关

白盒测试
白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法。
常见的白盒测试的方法有:语句覆盖,条件覆盖,判定覆盖,条件组合覆盖,基本路径覆盖等等。
优点:可以检测代码的每条分支和路径;可以揭示隐藏在代码中的错误;对代码的测试比较彻底。
缺点:耗费比较大;不能检测代码中遗漏的逻辑;不能直接验证需求的正确性。

黑盒测试
黑盒测试也称功能测试或者数据驱动测试,它不看代码内部的逻辑,只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值