复习随笔日志

1. 小数的精度损耗的问题

2. bin 二进制 oct  八进制   hex  十六进制

3. 数据类型 number(int,float,bool,conmplex)、string、list、set、tuple、dict

4. 不可变的数据类型  或 可哈希的数据: Number、string、tuple

5. set的去重是通过两个函数__hash__和__eq__结合实现的。
        5.1、当两个变量的哈希值不相同时,就认为这两个变量是不同的
        5.2、当两个变量哈希值一样时,调用__eq__方法,当返回值为True时认为这两个变量是同一个,应该去除一个。返回FALSE时,不去重

        某种意义上可以把集合当用值为空的字典

6. () > not > and > or   逻辑短路  True or ...     False and ...

7. 算 位 比 身 成 逻 赋    

8. 切片  左闭右开

9. // 地板除  可以获取一个数的高位   % 取余  可以获取一个数的低位

10. pass  占位符   break 终止所有循环   continue 跳过当前循环

11.  字符串相关的方法  

        capitalize title upper lower find index  isdight  isdecimal  join split strip replace

12. list 相关的方法

        切片 append insert extend  pop remove  clear index count sort reverse=True

13. 元组的相关方法

        切片  count index

14. copy.copy  copy.deepcopy

        浅拷贝 只拷贝第一层 其余层次沿用以前的数据

        深拷贝  完全独立的个体

15. dict 相关的方法

        dic[] = xxx      pop()  popitem()  clear()  update()   get()   keys()  values()  .items()

16. set 的相关的方法

        交差并补       &   - | ^     add()  clear()  remove()  issubset()   issupperset()

        frozenset   冰冻集合    不能进行修改 智能做   交差并补 

17.  文件操作   w  a r  w+ a+ r+  wb  rb

        with open   异常自动保存退出   __exit__    __enter__   __finally__

        read()    seek(0)  开头   seek(0,2) 文件末尾   字节数

        文件对象是 可迭代对象   具有可迭代性   

        fp.readable()   fp.writeable()   fp.readline()   fp.readlines()    fp.writelines()  fp.truncate() 

18. *args  收集普通实参  元组  **kwargs  收集关键字实参  字典

19. 全局变量: 在函数外部定义或函数内部定义并使用global   作用横跨整个文件   

      局部变量: 在函数内部定义  作用只限定于函数内部

        LEGB   局部变量  外部变量  全局变量  内置变量

20. nolocal  用来修饰局部变量  修改当前作用域上一级的局部变量

21. 闭包

        内函数使用了外函数的局部变量   外函数将内函数返回出来

        装饰器就是闭包

22. 大驼峰命名法 FamilyNmae

23. 递归函数  自己调用自己的函数

24. 匿名函数  lanbda  三元运算符   lambad 参数: 返回值

25.   map reduce  sorted  filter

26. 迭代器 能被next调用 不断返回下一个值的对象   优点: 节省空间  不是一下子全部数据加载到内存中

        iter()    next()    

        dir()  中 __iter__   __next__

        from collection import Iterator, iterable

        迭代器一定是可迭代对象  可迭代对象不一定是迭代器

27. 生成器  允许自定义逻辑的迭代器

        yeild   或   生成器表达式  (i for i in range())

28. chr  assic - > string   ord

        eval  exec   repr   input  hash

29. math模块

        ceil() 向上取整   floor()向下取整   pi() 圆周率常数

30. json  序列化为字符串    pickle  序列化为字节流

        ensure_ascii=False  显示中文

        ensure_keys=True 对键进行排序

31.  __init__  实例化对象 初始化的时候触发

        __new__  

32. 继承   继承父类的方法与属性

        supper()  用于调用父类的方法

33. jieba分词进行 提取高频词

34. orm  对象关系映射   主要是程序对象个挂逆行数据库的映射

        提高开发效率  开发对象化  减少重复性代码

        因为orm要转为sql  耗费时间长 内存多

35. restful  每一个url就是一种资源  通过http的方法 实现增删改查

        drf  django restful fromework  序列化器  视图类  其他功能 权限 认证 限流等等

36. 请求报文

        请求行   请求方法  http版本

        请求头部    user-agent  accept  host  language  content-type

        请求体

37. 响应报文

        状态行    http版本   状态码 描述信息

        消息报头

        响应体

        400  请求与语法错误

        401  未认证

        403  权限不够

        404  资源找不到

        402  请求方法不对

38. http 请求流程

        百度输入url  构建请求  dns 域名解析 ip端口  建立连接  tcp链接  http请求  服务器响应 然后渲染页面  结束通话

39. tcp的三次握手 四次挥手

最总的作用是什么  其实就是 规避掉那些 过期的连接

syn  seq  ack  fin    todo

40. https 比 http 安全 加入 ssl tls 加密传输协议

        http 端口 80   https 端口 443

        https 协议 需要申请到 ca 证书

41. 传输层 tcp  udp

      网络层  ip

       数据链路层   arp   parp

       应用层 dns

42. tcp  

        利用滑动窗口来事项流量控制

        滑动窗口 流量控制  拥塞控制

        todo

43. 进程  线程  协程

        进程 资源分配的最小单位

        线程 cpu调度的基本单元

        协程  微线程 一种用户态的轻量级线程

44. ACID    原子性 一致性 隔离性 持久性

        ru 脏读  rc  不可重复读  rr  幻读  se 可序列化

45. mysiam  表级锁   Innodb 行锁  外键 事务  mvcc  

        mysql 查询不区分 大小写 

46. 数据库的三大范式

        1. 字段是具有原子性的  不可分割

        2. 每一列都和主键相关

        3. 确保每一列都要和主键列直接相关  而不是间接相关

 47. truncate 与 delete 的区别

        truncate 不支持 where 语句 直接删除数据 

        truncate 删除速度快  不知会 回滚   ddl操作     delete是 dml操作

48. 悲观锁  乐观锁  

49. 如何确认sql是否命中 索引 explain

50. redis  rdb  aof

51. 慢查询调测三步

        查看是否命中索引   是否包含不必要的数据列  数据条数是不是过大  要不要考虑分区分表

52. sql 调优

        避免select * 指定必要的字段

        使用连接 join 避免子查询

        使用limit 限制条数

        使用exists 代替 in

        尽量避免使用佛那个  or  in  <>  !=

       

53. B树的两个明显特点

        树内的每个节点都存储数据

        叶子节点五指针相邻

        B+树

        数据只出现在叶子节点

        所有的叶子节点都增加了一个链指针

54. 列表去重 并按原始顺序

        lst1 = set(lst)

        lst1.sort(key=lst.index)

55. __new__  实例化类生产对象的时候     cls

         new 用于创建对象   init 用于初始化对象

class singleton():

        __obj=None

        def __new__(cls, *args, **kwargs):

                if cls.__obj is None:

                        cls.__obj = object.__new__(cls)

                return cls.__obj

        

56. 装饰器  在不改变原函数的基础上,增加新的功能

闭包   以及  flask 的注册路由 @

57. 正则表达式

        \d  \D  \w  \W   [1-9a-zA-Z]  ^  $  

        贪婪模式 非贪婪模式  ?

        re.findall()     re.search()   re.match()

58. 反射

hasattr()   检测对象/类 是否有该成员

getattr()   获取对象成员的值

setattr   delattr

59. 异常  try  except  raise 

IndexError  keyerror  nameerror   attributionerror  assertionerror

60. tcp 面向连接 可靠的传输层协议

      udp 不连接 不可靠的传输层协议

        syn  创建连接   ack  确认响应  fin断开连接

        msl  最大报文生存时间   

61. 守护进程 darmon=True

start 启动子进程   join 阻塞 等待子进程完成

62. https 特性

基于tcp/ip协议

请求-响应协议

无状态

无连接

63.  mvc 模型  mtv模型

64. python manage.py makemigrations

     python manage.py migrate

65. 面向对象的三大特征   继承 封装 多态

继承  继承父类的方法与属性

封装  对类中成员属性和方法保护  控制外界对内部成员的访问

多态   不同的子类对象调用相同的父类方法 产生不同的执行结果

66. os.mknod mkdir remove  rmdir  

67. os.path.basename  dirname  splite  join  splitext  getsize  isdire  abspath  

68. supper  只应用与绑定方法 用于调用父类的绑定方法

69. issunclass   isinstance   mro

70. datetime

      datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

71. 冒泡  快排

冒泡思路 相邻的两个数进行比较 进行排序

快排思路 选取一个值左右中间值  或基准值 然后对整个序列进行排序  

def func(lst):

length = len(lst):

for i in range(length):

for j in range(i, length-j-1):

if lst[j] > lst[j+1]:

lst[j],lst[j+1] = lst[j+1]lst[i]

return lst

def func(lst):

if len(lst) < 2:

return lst

stand = lst[0]

a_lst = [i for i in lst[1:] if i < stand]

b_lst = [i for i in lst[1:] if i > stand]

return func(a_lst) + [stand] + func(b_lst)

72. pandas 常用方法

## 读写
pd.series #定义一维标记数组
pd.dataframe #定义数据框
pd.read_csv #读取逗号分隔符文件
pd.read_excel #读取 excel 表格
pd.to_excel #写入 excel 表格
pd.read_sql #读取 sql 数据
pd.read_table #读取 table
pd.read_json #读取 json 文件
pd.read_html #读取 html
pd.read_clipboard() #从剪切板读入数据
df.to_csv #写入 csv 文件
df.to_excel #写入 excel 文件
df.to_sql #写入 sql 表
df.to_json #写入 json 文件
df.to_html #写入 html 表格
df.to_clipboard() #写入剪切板

## 数据展示和统计
df.info() #统计数据信息
df.shape() #统计行数和列数
df.index() #显示索引总数
df.columns() #显示数据框有哪些列
df.count() #显示有多少个记录
df.head(n) #返回前 n 个,默认 5
df.tail(n) #返回后 n 个
df.sample(n) #随机选取 n 行
df.sample(frac = 0.8) #百分比为 0.8 的选取
df.dtypes #查看每一列的数据类型
df.sum() #数据框按列求和
df.cumsum() #数据框累计求和
df.min() #给出每列的最小值
df.max() #给出每列的最大值
df['列名'].idxmin() #获取数据框某一列的最小值
myseries.idxmin() #获取 series 的最小值
df['列名'].idxmax() #获取数据框某一列的最大值
myseries.idxmax() #获取 series 的最大值
df.describe() #关数据的基本统计信息描述
df.mean() #给出数据框每一列的均值
df.median() #给出数据框每一列的中位数
df.quantile #给出分位数
df.var() #统计每一列的方差
df.std() #统计每一列的标准差
df.cummax() #寻找累计最大值,即已出现中最大的一个
df.cummin() #累计最小值
df['列名'].cumproad() #计算累积连乘
len(df) #统计数据框长度
df.isnull #返回数据框是否包含 null 值
df.corr() #返回列之间的相关系数,以矩阵形式展示
df['列名'].value_counts() #列去重后给每个值计数

## 数据选择
myseries['列名'] #用中括号获取列
df['列名'] #选取指定列
df.列名 #同上
df[n0:n1] #返回 n0 到 n1 行之间的数据框
df.iloc[[m],[n]] #iloc按行号来索引,两层中括号,取第 m 行第 n 列
df.loc[m:n] #loc 按标签来索引,返回索引 m 到 n 的数据框,loc、iloc 主要针对行来说的
df.loc[:,"列1":"列2"] #返回连续列的所有行
df.loc[m:n,"列1":"列2"] #返回连续列的固定行
df['列名'][n] #选取指定列的第 n 行
df[['列1','列2']] #返回多个指定的列

## 数据筛选和排序
df[df.列名 < n] #筛选,单中括号用于 bool 值筛选
df.filter(regex = 'code') #过滤器,按正则表达式筛选
df.sort_values #按某一列进行排序
df.sort_index() #按照索引升序排列
df['列名'].unique() #列去重
df['列名'].nunique() #列去重后的计数
df.nlargest(n,'列名') #返回 n 个最大值构成的数据框
df.nsmallest(n,'列名') #返回 n 个最小的数据框
df.rank #给出排名,即为第几名

## 数据增加删除修改
df["新列"] = xxx #定义新列
df.rename #给列重命名
df.index.name = "index_name" #设定或者修改索引名称
df.drop #删除行或者列
df.列名 = df.列名.astype('category') #列类型强制转化
df.append #在末尾追加一行
del df['删除的列'] #直接删除一列

## 特别的
df.列名.apply #按列的函数操作
pd.melt #将宽数据转化为长数据(拆分拉长),run 一下下面例子就知道什么意思了
pd.merge #两个数据表间的横向连接(内连接,外连接等)
pd.concat #横向或者纵向拼接

df.fillna().values.tolist()

df[]  df.at  df.iat  af.loc df.iloc

73. celery  常见面试题

生产者 消费者模式   工厂模式

74. 消息队列 

kafka  基本的存取

rabbitmq  默认端口 15672  gust  gust

75. 分布锁

setnx

延时双删机制   避免零为一个进程 有吧老数据加载到缓存中

过期机制怎么处理的

定期删除 + 懒汉式删除(查询的时候去判断 如果过期了先删除在做其他操作)

执行频率 执行时长   

缓存淘汰机制

先进先出  fifo

最近最少使用  LRU  离当前最远时间的数据被淘汰     根据时间

最不经常使用  LFU  某一段时间没使用次数最高的淘汰  根据次数

缓存方案

客户端缓存 浏览器缓存 app缓存

cdn缓存

nginx缓存   静态资源

服务端缓存   本地缓存  外部缓存

数据库缓存 

缓存穿透  缓冲查不到  数据库也查不到   数据库承担压力 

1. 参数校验

2. 将查询为空的结果也加入到缓存中 可以加少许的过期时间

3. 引用布隆过滤器  在访问redis之前 判断数据是否存在

缓存击穿 reids 没有 数据库中有 一般在缓存初始化或者 key过期的情况   数据库压力

1. 设置热点缓存永不过期  数据更新的问题  另一个线程定期去更新缓存

2. db往缓存写的时候 加锁   防止并发

缓存雪崩  缓存大面积过期  压力来到db

1. 缓存失效时间 分散开   加随机值

正则 match group(1)

类方法 静态方法

类方法 中有cls     可以调用类属性类方法 静态方法

类方法中没有self  不能调用对象属性 对象方法  私有方法

静态方法没有cls  不能调用类属性 类方法

没有 self 也不能调用 对象属性 对象方法 私有方法

with 上下文管理器  enter() exit()

enter 进入with代码块前的准备操作

exit 退出时的善后操作

exec_type    exc_val   exc_tb

队列 和 栈

propety    获取私有属性

字典排序  sorted(dic.items(), key=lambda x:x[1])

参数传递是值传递还是引用传递

如果是不可变类型的话是值 可变类型的话是引用传递

最简单的办法就是  写个变量 写个函数进行修改 然后看值是否会变

回调函数    把函数当作参数去调用

search  match   

match是从最开始开始匹配的  但是search不是

读取大文件 

分段取  循环

while True:

part = fp.read(1024)

if part:

yeild part

else:

return None

遍历目录

256  分个段   大于256是两外一个空间

小整数  <256  内存地址是一样的

lambda 函数  一行函数  主要是用在回调函数

主要应用中在 高阶函数中  

迭代器 主要用于迭代 循环

生成器 是要是为了节省内存  大文件  大数据 为了防止一一下子加载到内存中

闭包 延迟绑定

猴子补丁  比如 协程库 gevent中就有用到   

也就是来回切换 不用修改源代码

菱形继承  

默认参数是列表   会是闭包

模块就是一个文件  

包就是有一个 init文件的文件夹

reverse(fangfa)

90. 时间复杂度和空间复杂度   二者相对的矛盾的

占用的时间 占用内存

91. socket 搭建tcp服务

socket对象 搭建tcp协议的

监听 绑定 accept  三次握手 四次挥手

然后 send recev

关闭连接

92.  select poll epoll

select 需要不断的去轮询数据   性能较低

epoll  不回去轮询 回去监听事件  数据有变化就通知  

连接数少的情况下 select 会比 epoll 好

epoll 水平触发  和 边缘触发

不去处理但是每次都会通知

监控描述符发生变化  只会通知一次

93.  linux 进程调度方法

先来先服务  短作业服务

高优先权优先调度算法

94. 运行态 进行态 阻塞态

95. 最左前缀原则     

96. 索引底层   

97. B树 B+树

B树 每个节点都可以存数据  B+树 只能是 叶子节点存数据

叶子节点有指针 

所有存的数据都在叶子节点

一个节点有多个元素  也是有排序

innodb  

page

子查询

索引原理  就是 吧无需的数据变得有序的查询

1. 把创建索引的列的内容进行排序

都结果生成倒排表

在倒排表内容上拼上数据地址链

在查询的时候先去拿到倒排表内容 然后在渠道具体数据地址连  从而拿到数据

acid是靠什么保证的

a原子性 uodo log 日志保证  记录需要回滚的日志信息

c 一致性 有其他三大特性保证的

i 隔离性 又 mvcc保证的

d 持久性  redo log   

mvcc 多版本并发控制

就是读取诗句通过 类似快照的方式将数据保存起来

面试题

1. dataclass     数据类  开箱即用的方法来创建自定义数据, 可以直接实例化

2. 主键索引 和  唯一索引的  区别

主键创建和后一定存在一个唯一索引

唯一索引不一定是主键

唯一索引允许空置  主键不允许空值

一个表只能创建一个主键 但是可以创建多个唯一索引

主键是一种约束  唯一索引是一种索引

3. python的视图  view   视图去操作model获取数据然后将数据返回

一个视图函数(类),简称视图,是一个简单的Python 函数(类)包含的是业务逻辑,它接受Web请求并且返回Web响应。

matplotlib  散点图 折线图  直方图

4. 如何查看文件占用的进程    lsof

5. redis的数据类型  hash是干嘛的

用户对象,包含姓名,年龄,生日等信息,

6. 类方法 和静态方法的意义是什么

类方法需要用修饰器@classmethod来标识,告诉python解释器这是一个类方法

在开发时,如果需要在类中封装一个方法,这个方法既不需要访问实例属性或者调用实例方法,也不需要访问类属性或者调用类方法,这个时候,可以把这个方法封装成一个静态方法。

调用静态方法方式:不需要创建对象

调用静态方法可以无需创建对象

既不需要访问到实例的属性和方法 也不需要访问到类的属性和方法  那就需要静态方法

静态方法就是一个普通方法 就是和类相关 但是不一定要绑定

静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。

7. 项目框架 orm  数据相关的

k8s    

openstack    k8s  云计算

数据库相关的 

mvcc  介于 rc rr 之间  ReadView

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值