Python史上最全知识重点(超详细版)综合篇

网络知识

  • 什么是 HTTPS?

    • 项目安全的 HTTP 协议,https 需要 cs 证书,数据加密,端口为443,安全,同一网站 https seo 排名会更高
      常见响应状态码
      在这里插入图片描述
  • http 请求方法的幂等性及安全性

  • -WSGI
    在这里插入图片描述

  • RPC

  • CDN

  • SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。

  • SSH(安全外壳协议) 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

  • TCP/IP

    • 虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
    • 因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
    • 三次握手(SYN/SYN+ACK/ACK)
    • 四次挥手(FIN/ACK/FIN/ACK)
    • TCP:面向连接/可靠/基于字节流
    • UDP:无连接/不可靠/面向报文
    • 三次握手四次挥手
    • 为什么连接的时候是三次握手,关闭的时候却是四次握手?
    • 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
  • XSS/CSRF

  • HttpOnly 禁止 js 脚本访问和操作 Cookie,可以有效防止 XSS

Mysql数据库

  • 索引改进过程

线性结构->二分查找->hash->二叉查找树->平衡二叉树->多路查找树->多路平衡查找树(B-Tree)
Mysql面试总结基础篇

  • https://segmentfault.com/a/1190000018371218

  • Mysql面试总结进阶篇

    • https://segmentfault.com/a/1190000018380324
  • 深入浅出Mysql

    • http://ningning.today/2017/02/13/database/深入浅出mysql/
  • 清空整个表时,InnoDB是一行一行的删除,而MyISAM则会从新删除建表

  • text/blob数据类型不能有默认值,查询时不存在大小写转换

  • 什么时候索引失效
    应尽量避免在 where 子句中使用 != 或 <> 操作符,否则引擎将放弃使用索引而进行全表扫描
    尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,即使其中有条件带索引也不会使用,这也是为什么尽量少用 or 的原因
    如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引
    应尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描
    对于多列索引,不是使用的第一部分,则不会使用索引
    以%开头的like模糊查询
    出现隐式类型转换
    没有满足最左前缀原则
    失效场景:
    在这里插入图片描述
    不要在 where 子句中的 “=” 左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引
    应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
    在这里插入图片描述
    不适合键值较少的列(重复数据较多的列)比如:set enum列就不适合(枚举类型(enum)可以添加null,并且默认的值会自动过滤空格集合(set)和枚举类似,但只可以添加64个值)
    如果MySQL估计使用全表扫描要比使用索引快,则不使用索引

  • 什么是聚集索引
    B+Tree叶子节点保存的是数据还是指针
    MyISAM索引和数据分离,使用非聚集
    InnoDB数据文件就是索引文件,主键索引就是聚集索引

Redis 命令总结

为什么这么快?

  • 因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。

  • 基于内存,由 C 语言编写

  • 使用多路I/O复用模型,非阻塞 IO

  • 使用单线程减少线程间切换

  • 数据结构简单

  • 自己构建了 VM 机制,减少调用系统函数的时间

  • 优势

    • 性能高 – Redis 能读的速度是110000次/s,写的速度是81000次/s
    • 丰富的数据类型
    • 原子 – Redis 的所有操作都是原子性的,同时 Redis 还支持对几个操作全并后的原子性执行
    • 丰富的特性 – Redis 还支持 publish/subscribe(发布/订阅), 通知, key 过期等等特性
      什么是 redis 事务?
    • 将多个请求打包,一次性、按序执行多个命令的机制
    • 通过 multi,exec,watch 等命令实现事务功能
    • Python redis-py pipeline=conn.pipeline(transaction=True)
  • 持久化方式

    • save(同步,可以保证数据一致性)
    • bgsave(异步,shutdown时,无AOF则默认使用)
    • RDB(快照)
    • AOF(追加日志)
  • 怎么实现队列

    • push
    • rpop
  • 常用的数据类型(Bitmaps,Hyperloglogs,范围查询等不常用)

    • skiplist(跳跃表)
    • intset或hashtable
    • ziplist(连续内存块,每个entry节点头部保存前后节点长度信息实现双向链表功能)或double linked list
    • 整数或sds(Simple Dynamic String)
    • String(字符串):计数器
    • List(列表):用户的关注,粉丝列表
    • Hash(哈希):
    • Set(集合):用户的关注者
    • Zset(有序集合):实时信息排行榜
  • 与 Memcached 区别

    • Memcached只能存储字符串键
    • Memcached用户只能通过APPEND的方式将数据添加到已有的字符串的末尾,并将这个字符串当做列表来使用。但是在删除这些元素的时候,Memcached采用的是通过黑名单的方式来隐藏列表里的元素,从而避免了对元素的读取、更新、删除等操作
    • Redis和Memcached都是将数据存放在内存中,都是内存数据库。不过Memcached还可用于缓存其他东西,例如图片、视频等等
    • 虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的Value 交换到磁盘
    • 存储数据安全–Memcached挂掉后,数据没了;Redis可以定期保存到磁盘(持久化)
    • 应用场景不一样:Redis出来作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和Session等
  • Redis实现分布式锁

    • 使用setnx实现加锁,可以同时通过expire添加超时时间
    • 锁的value值可以是一个随机的uuid或者特定的命名
    • 释放锁的时候,通过uuid判断是否是该锁,是则执行 delete释放锁
  • 常见问题

    • 当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级
    • 数据过期,进行更新缓存数据
    • 初始化项目,将部分常用数据加入缓存
    • 请求访问数据时,查询缓存中不存在,数据库中也不存在
    • 短时间内缓存数据过期,大量请求访问数据库
    • 缓存雪崩
    • 缓存穿透
    • 缓存预热
    • 缓存更新
    • 缓存降级
  • 一致性Hash算法

    • 使用集群的时候保证数据的一致性
      基于redis实现一个分布式锁,要求一个超时的参数

    • setnx

  • 虚拟内存

  • 内存抖动

Linux

Unix五种i/o模型

+ 项目select
+ 项目poll
+ 项目epoll
+ 项目并发不高,连接数很活跃的情况下
+ 项目比select提高的并不多
+ 适用于连接数量较多,但活动链接数少的情况
+ 阻塞io
+ 非阻塞io
+ 多路复用io(Python下使用selectot实现io多路复用)
+ 信号驱动io
+ 异步io(Gevent/Asyncio实现异步)

比 man 更好使用的命令手册
*tldr:一个有命令示例的手册
kill -9和-15的区别

*-15:程序立刻停止/当程序释放相应资源后再停止/程序可能仍然继续运行
*-9:由于-15的不确定性,所以直接使用-9立即杀死进程 分页机制(逻辑地址和物理地址分离的内存分配管理方案):

+ 操作系统为了高效管理内存,减少碎片
+ 程序的逻辑地址划分为固定大小的页
+ 物理地址划分为同样大小的帧
+ 通过页表对应逻辑地址和物理地址

分段机制

+ 为了满足代码的一些逻辑需求
+ 数据共享/数据保护/动态链接
+ 每个段内部连续内存分配,段和段之间是离散分配的

查看 cpu 内存使用情况?
+ top
+ free 查看可用内存,排查内存泄漏问题

设计模式

单例模式
在这里插入图片描述
工厂模式
在这里插入图片描述
构造模式
在这里插入图片描述

数据结构和算法

python实现各种数据结构

快速排序
在这里插入图片描述
选择排序
在这里插入图片描述
插入排序
在这里插入图片描述
归并排序
在这里插入图片描述

堆排序heapq模块
在这里插入图片描述


在这里插入图片描述

队列
在这里插入图片描述

二分查找
在这里插入图片描述

以上就是今天的全部内容分享,觉得有用的话欢迎点赞收藏哦!

Python经验分享

学好 Python 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。
小编是一名Python开发工程师,自己整理了一套最新的Python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,这份【最新全套Python学习资料】 一定对你有用!

小编为对Python感兴趣的小伙伴准备了以下籽料 !

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑培训的!

  • 学习时间相对较短,学习内容更全面更集中
  • 可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。带你从零基础系统性的学好Python!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)

我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】

*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值