linux常考命令python
介紹linux
早期採用LAMP/LNMP架構web
Linux + Apache(Nginx) + Mysql + Php/Pythonsql
如今微服務架構容器技術編程
爲何要學習linux?安全
大部分企業應用跑在linux server上服務器
熟練在linux服務器上操做網絡
瞭解linux工做原理和經常使用工具多線程
瞭解查看文件,進程,內存相關的一些命令,用來調試和排查架構
如何查詢linux命令用法
man
info
man的替代工具tldr, Pip install tldr
文件/目錄操做命令
常見的文件操做工具
chown/chmod/chgrp
ls/rm/cd/cp/mv/touch/rename/ln(軟連接和硬連接)等
文件查看
文件或者日誌查看工具
編輯器 vi/nano
cat/head/tail查看文件
more/less 交互式查看文件
進程操做命令
掌握常見的進程操做工具
ps查看進程
kill殺死進程
top/htop 監控進程
內存操做命令
掌握常見的內存操做工具
網絡操做命令
掌握常見的網絡工具
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 多進程模塊
#多進程 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)
標記回收 閾值
線程練習題
編寫多線程爬蟲
如何使用py的threading模塊
使用py的Threading模塊完成一個多線程爬蟲類
要求1:該類能夠傳入最大線程數和須要抓取的網址列表
要求2:該類能夠經過繼承的方式提供一個處理response的方法