操作系统

linux常考命令

tldr:类似于man命令

1
pip3 install tldr

文件、目录操作

  • chown chmod chgrp
  • ls rm cd cp mv touch rename ln(软连接和硬链接)
  • locate find grep 定位查找和搜索

文件或日志查看工具

  • 编辑器 vi nano
  • cat head tail 查看文件
  • more less 交互式查看文件

进程操作的命令

  • ps 查看进程
  • kill 杀死进程
  • top htop 监控进程

内存相关命令

  • free 查看内存

网络操作命令

  • ifconfig 查看网卡信息
  • lsof、netstat 查看端口信息
  • ssh scp 远程登录和复制 tcpdump 抓包

常见用户、组操作命令

  • useradd 、usermod 增加和修改用户
  • groupadd、groupmod 增加和修改组

进程与线程

进程与线程的区别

  • 进程是对运行时程序的封装,是系统资源调度和分配的基本单位
  • 线程是进程的子任务,cpu调度的基本单位,实现进程内并发
  • 一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存

什么是线程安全

python那些操作是线程安全的?

  • 一个操作可以在多线程的环境中安全使用,获取正确结果
  • 线程安全的操作就好比线程是顺序执行,而不是并发执行的
  • 一般涉及到写操作数据需要考虑如何让多个线程安全访问数据

线程同步的方式

  • 互斥量(锁) :通过互斥机制防止多线程同时访问公共资源
  • 信号量:控制同一时刻多线程访问同一资源的线程数
  • 事件:通过通知的方式保持多个线程同步

进程之间通信的方式

  • 管道 匿名管道 有名管道
  • 信号 比如ctrl + c 产生sigint 程序终止信号
  • 消息队列
  • 共享内存
  • 信号量
  • 套接字(socket)

linux内存相关

什么是分页机制

  • 逻辑地址和物理地址分离的内存分配管理方案
  • 程序的逻辑地址划分为固定大小的页
  • 物理地址划分为同样大小的帧
  • 通过页表对应逻辑地址和物理地址

什么是分段机制

  • 分段为了满足代码的一些逻辑需求
  • 数据共享 数据保护 动态链接
  • 通过段表实现逻辑地址和物理地址的映射关系
  • 每个段内部都是连续的内存分配,段和段之间是离散分配的

分页和分段的区别

  • 页是出于内存利用率的角度提出的离散分配机制
  • 段是出于用户角度,用于数据保护,数据隔离等用途的管理机制
  • 页的大小是固定的,操作系统决定,段的大小不确定,用户程序决定

什么是虚拟内存

  • 通过把部分暂时不用的内存信息放在硬盘上
  • 局部性原理,程序运行时只有部分必要信息装入内存
  • 内存中暂时不需要的内容放到硬盘上
  • 系统似乎提供了比实际内存大的多的容量,称之为虚拟内存

什么是内存抖动(颠簸)

  • 本质是频繁的页调度行为
  • 频繁的页调度,进程不断产生缺页终端
  • 置换一个页,又不断再次需要这个页
  • 运行程序太多,页面替换策略不好,终止进程或者增加物理内存

python垃圾回收机制的原理

  • 引用计数为主(缺点:循环引用)
  • 引入标记清除和分代回收解决引用计数的问题
  • 引用计数为主+标记清除和分代回收为辅

什么时候引用计数增加?

  • 对象被创建 a=1
  • 对象被引用 b = a
  • 对象作为参数被传递 func(a)
  • 对象存储在容器中 l = 【a】

什么时候引用计数减少?

  • 显示使用del a
  • 引用指向别的对象 b = None
  • 离开的对象的作用域比如函数执行结束
  • 从一个容器移除对象或销毁容器