zoukankan      html  css  js  c++  java
  • 第6章 操作系统考察点

    linux常考命令

    介绍

    • 早期采用LAMP/LNMP架构

    • Linux + Apache(Nginx) + Mysql + Php/Python

    • 现在微服务架构容器技术

    为什么要学习linux?

    • 大部分企业应用跑在linux server上

    • 熟练在linux服务器上操作

    • 了解linux工作原理和常用工具

    • 了解查看文件,进程,内存相关的一些命令,用来调试和排查

    如何查询linux命令用法

    • man

    • info

    • help

      • eg: pip --help
    • man的替代工具tldr, Pip install tldr

    文件/目录操作命令

    常见的文件操作工具

    • chown/chmod/chgrp

    • ls/rm/cd/cp/mv/touch/rename/ln(软链接和硬链接)等

    • locate/find/grep 定位查找和搜索

      • eg:find . -name "*.pyc" -delete

    文件查看

    文件或者日志查看工具

    • 编辑器 vi/nano

    • cat/head/tail查看文件

    • more/less 交互式查看文件

    进程操作命令

    掌握常见的进程操作工具

    • ps查看进程

    • kill杀死进程

    • top/htop 监控进程

    内存操作命令

    掌握常见的内存操作工具

    • free查看可用内存

      • 了解每一列的具体含义
    • 排查内存泄漏问题

    网络操作命令

    掌握常见的网络工具

    • ifconfig查看网卡信息

    • lsof/netstat 查看端口信息

    • ssh/scp 远程登录/复制。tcpdump抓包

    用户/组操作命令

    掌握常见用户和组操作

    • useradd/usermod

    • groupadd/groupmod

    总结:

    • 多用才能熟悉

    操作系统线程和进程常考题

    线程和进程的区别

    进程和线程对比

    • 进程是对运行时程序的封装,是系统资源调度和分配的基本单位

    • 线程是进程的子任务,cpu调度和分配额基本单位,实现进程内并发

    • 一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存

    线程安全

    py哪些操作是线程安全的?

    • 一个操作可以在多线程环境中安全使用,获取正确的结果

    • 线程安全的操作好比线程是顺序执行而不是并发执行的(i += 1)

    • 一般如果涉及到写操作需要考虑如何让多个线程安全访问数据

    线程同步的方式

    了解线程同步的方式,如何保证线程安全

    • 互斥量(锁): 通过互斥机制防止多个线程同时访问公共资源

    • 信号量(Semphare): 控制同一时刻多个线程访问同一资源的线程数

    • 事件(信号): 通过通知的方式保持多个线程同步

    进程间通信的方式

    Inter-Process Communication 进程间传递信号或者数据

    • 管道/匿名管道/有名管道(pipe)

    • 信号(signal): 比如用户使用Ctrl+c产生SIGINT程序终止信号

    • 消息队列(Message)

    • 共享内存(share memory)

    • 信号量(Semaphore)

    • 套接字(socket): 最常用的方式, web应用使用的都是这种方式

    py中使用多线程

    • threading模块

    • threading.Thread类用来创建线程

    • start()方法启动线程

    • 可以用join()等待线程结束

    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)
    

    py中如何使用多进程

    py有GIL 可以用多进程实现cpu密集程序

    • multiprocessing 多进程模块

    • Multiprocessing.Process 类实现多进程

      • 一般用在cpu密集程序里,避免GIL的影响
    #多进程
    import multiprocessing
    
    def fib(n):
    	"""worker function"""
    	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分段

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

    什么是虚拟内存

    通过把一部分暂时不用的内存信息放到硬盘上 局部性原理,程序运行时候只有部分必要的信息装入内存

    内存中暂时不需要的内容放到硬盘上, 系统似乎提供了比实际内存大得多的容量,称之为虚拟内存

    什么是内存抖动(颠簸)

    本质是频繁的页调度行为

    ​ 频繁的页调度,进程不断产生缺页中断 置换一个页,又不断再次需要这个页

    ​ 运行程序太多,页面替换策略不好,终止进程或者增加物理内存

    py的垃圾回收机制原理?

    • 引用计数为主(缺点: 循环引用无法解决)

    • 引入标记清除和分代回收解决引用解决引用计数的问题

    • 引用计数为主+标记清除和分代回收为辅

    引用计数解决不了循环引用问题

    • 两个对象相互引用无法清除

    • 标记清除(Mark and Sweep)

    • 分代回收

      • 分三代 0 1 2 每一代使用双向链表
    • 标记回收 阈值

    线程练习题

    编写多线程爬虫

    如何使用py的threading模块

    使用py的Threading模块完成一个多线程爬虫类

    ​ 要求1:该类可以传入最大线程数和需要抓取的网址列表

    ​ 要求2:该类可以通过继承的方式提供一个处理response的方法

  • 相关阅读:
    Java多线程、并发
    Java I/O系统
    Java注解
    Arthas(Java诊断工具)
    Java泛型
    Java内部类
    libpcap使用
    python文件服务器
    设计模式
    protobuf
  • 原文地址:https://www.cnblogs.com/xzpin/p/11616779.html
Copyright © 2011-2022 走看看