Linux常考命令
早期采用LAMP/LNMP架构为什么要学 Linux? 大部分企业应用跑在 linux server上 ◆熟练在 Linux服务器上操作 ◆了解 Linux工作原理和常用工具 ◆需要了解查看文件、进程、内存相关的一些命令,用来调试和排查
如何查询linux命令的用法
Linux命令众多,如何知道一个命令的用法 使用man命令查询用法。但是man手册比较晦涩 ◆使用工具自带的help,比如pip --help ◆这里介绍一个man的替代工具tldr. Pip install tldr软链接的inode 和 源文件的inode 不一样 只是创建了一个指向原文件的绝对路径,访问的时候相对于替换指向源文件的路径。
例子:门牌号
硬链接的inode 和 源文件是一样的 创建了一个普通文件,但是inode指向的是同一个文件(区块) 例子:开了两个门
文件/目录操作命令
掌握常见的文件操作工具 ◆ chown/ chmod/ chgrp ◆ ls/rm/cd/cp/mv/touch/rename/ln(软链接和硬链接)等 ◆ locate/find/grep 定位查找和搜索find . -name '*.pyc' -delete
文件查看 文件或者日志查看工具 编辑器ⅵ/nano ◆cat/head/tail查看文件 ◆more/less交互式查看文件
进程操作命令 掌握常见的进程操作工具 ◆ps 查看进程 ◆kill 杀死进程 ◆top/htop 监控进程
内存操作命令
掌握常见的内存操作工具 ◆ free 查看可用内存 ◆ 了解每一列的具体含义 ◆ 排查内存泄露问题网络操作命令
掌握常见的网络工具 ◆ ifconfig 查看网卡信息 ◆ lsof/netstat 查看端口信息 ◆ ssh/scp远程登录/复制。 tcpdump抓包用户/组操作命令
掌握常见用户和组操作 ◆ useradd/usermod ◆ groupadd/groupmod参考
学习 linux命令 ◆man命令可以查询用法。或者cmd-help 《鸟哥的 linux私房菜》,学习简单的 shell脚本知识 ◆多用才能熟悉进程和线程的区别
进程和线程对比
◆进程是对运行时程序的封装,是系统资源调度和分配的基本单位 ◆线程是进程的子任务,Cpu调度和分配的基本单位,实现进程内并发 ◆一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存什么是线程安全
Python哪些操作是线程安全的? ◆ 一个操作可以在多线程环境中安全使用,获取正确的结果 ◆ 线程安全的操作好比线程是顺序执行而不是并发执行的(i +=1) ◆ 一般如果涉及到写操作需要考虑如何让多个线程安全访问数据import threading
lock = threading.Lock()
n = [0]
def foo():
with lock:
n[0] = n[0] + 1
n[0] = n[0] + 1
threads = []
for i in range(5000):
t = threading.Thread(target=foo)
threads.append(t)
for t in threads:
t.start()
print(n)
线程同步的方式
了解线程同步的方式,如何保证线程安全 ◆互斥量(锁):通过互斥机制防止多个线程同时访问公共资源 ◆信号量(Semphare)控制同一时刻多个线程访问同一个资源的线程数 ◆事件(信号):通过通知的方式保持多个线程同步进程间通信的方式
Inter-Process Communication进程间传递信号或者数据 ◆管道/匿名管道/有名管道(pipe) ◆信号 Signal:比如用户使用Ctrl+c产生SIGNT程序终止信号 ◆消息队列(Message)Python中如何使用多线程
threading模块 ◆ threading.Thread类用来创建线程 ◆ start() 方法启动线程 ◆ 可以用join()等待线程结束Python中如何使用多进程
Python有GIL,可以用多进程实现cpu密集程序 ◆ multiprocessing 多进程模块 ◆ Multiprocessing.Process 类实现多进程 ◆ 一般用在cpu密集程序里,避免GIL的影响import multiprocessing
def fib(n):
if n <= 1:
return 1
return fib(n - 1) + fib(n - 2)
if __name__ == '__main__':
jobs = []
for i in range(10, 20):
p = multiprocessing.Process(target=fib, args=(i,))
jobs.append(p)
p.start()
操作系统内存管理机制常见考题
现代化编程语言一般有垃圾回收机制什么是分页机制
操作系统为了高效管理内存,减少碎片逻辑地址和物理地址分离的内存分配管理方案 ◆程序的逻辑地址划分为固定大小的页(Page) ◆物理地址划分为同样大小的帧(Frame) ◆通过页表对应逻辑地址和物理地址
什么是分段机制
分段是为了满足代码的一些逻辑需求 ◆数据共享,数据保护,动态链接等 ◆通过段表实现逻辑地址和物理地址的映射关系 ◆每个段内部是连续内存分配,段和段之间是离散分配的
分页和分段的区别
分页vs分段 ◆页是出于内存利用率的角度提出的离散分配机制 ◆段是出于用户角度,用于数据保护、数据隔离等用途的管理机制 ◆页的大小是固定的,操作系统决定;段大小不确定,用户程序决定什么是虚拟内存
通过把一部分暂时不用的内存信息放到硬盘上 ◆局部性原理,程序运行时候只有部分必要的信息装入內存 时间局部性与空间局部性 ◆内存中暂时不需要的内容放到硬盘上 ◆系统似乎提供了比实际內存大得多的容量,称之为虚拟内存什么是内存抖动(颠簸)
本质是频繁的页调度行为 ◆频繁的页调度,进程不断产生缺页中断 ◆置换一个页,又不断再次需要这个页 ◆运行程序太多;页面替换策略不好。终止进程或者增加物理内存Python的垃圾回收机制原理?
Python无需我们手动回收内存?它的垃圾回收是如何实现的呢? ◆引用计数为主(缺点:循环引用无法解决) ◆引入标记清除和分代回收解决引用计数的问题 ◆引用计数为主+标记清除和分代回收为辅小整数对象池 悲剧:引用计数无法。解决循环引用问题
两个对象互相引用之后引用计数无法归零