運維工程師速成

一、處理問題:html

你處理過的問題python

二、Mysql 索引類型mysql

Fulltext:針對全文檢索,能夠設置關鍵字或者分詞,適用於like %%,對中文支持很差算法

Hash:將一列或幾列hash出一個值,將查詢條件也hash,查看hash值相等的,取出硬盤上的地址,一次查找比btree效率高,可是隻適用於=,不適用於範圍查找,而且由於沒法避免全表掃描,因此表大的時候效率不高,在內存數據庫數據量小的狀況下很好用sql

Btree:二叉樹,折半查找,默認數據庫

RTree:範圍查找比較好,在mysql中使用不多數組

http://www.cnblogs.com/yuan-shuai/p/3225417.html瀏覽器

三、Mysql innodb和myisam區別服務器

一、InnoDB不支持FULLTEXT類型的索引。網絡

二、InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,可是MyISAM只要簡單的讀出保存好的行數便可。注意的是,當count(*)語句包含 where條件時,兩種表的操做是同樣的。

三、對於AUTO_INCREMENT類型的字段,InnoDB中必須包含只有該字段的索引,可是在MyISAM表中,能夠和其餘字段一塊兒創建聯合索引。

四、DELETE FROM table時,InnoDB不會從新創建表,而是一行一行的刪除。

五、LOAD TABLE FROM MASTER操做對InnoDB是不起做用的,解決方法是首先把InnoDB表改爲MyISAM表,導入數據後再改爲InnoDB表,可是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。

六、兩種類型最主要的差異就是Innodb 支持事務處理與外鍵和行級鎖

七、只讀不寫的數據,myisam強於innodb

八、Myisam數據和索引分開,innodb綁在一塊兒沒有壓縮,因此innodb

九、Innodb非主鍵查詢也鎖全表

四、交換機端口類型

Access 只屬於一個vlan 鏈接PC

Trunk 屬於多個vlan 服務器之間

Hybrid 混合

接收

端口接收到的報文類型

報文幀結構中攜帶VLAN標記

報文幀結構中不攜帶VLAN標記

Access端口

丟棄該報文

爲該報文打上VLAN標記爲本端口的PVID

Trunk端口

判斷本端口是否容許攜帶該VLAN標記的報文經過。若是容許則報文攜帶原有VLAN標記進行轉發,不然丟棄該報文

同上

Hybrid端口

同上

同上

interface g 1/0/1

port link-type trunk

port trunk allow-pass vlan 2 to 4094

發送

Access端口

剝掉報文所攜帶的VLAN標記,進行轉發

Trunk端口

首先判斷報文所攜帶的VLAN標記是否和端口的PVID相等。若是相等,則剝掉報文所攜帶的VLAN標記,進行轉發;不然報文將攜帶原有的VLAN標記進行轉發

Hybrid端口

首先判斷報文所攜帶的VLAN標記在本端口須要作怎樣的處理。若是是untagged方式轉發,則處理方式同Access端口;
若是是tagged方式轉發,則處理方式同Trunk端口

 

五、Vlan

隔離二層網絡,同一個vlan是同一個二層網絡,vlan之間經過三層網絡ip鏈接

Vlanif vlan的邏輯端口,爲vlan下全部用戶的網關

六、華爲交換機配置路由

ip route-static 10.1.200.0 255.255.255.0 10.10.2.2

七、華爲交換機配置OSPF

同一個網絡裏不一樣的ospf自治域,每一個area有本身的id,不一樣area之間經過邊緣交換機鏈接,這裏例如area1 area1兩個自治域,area0是兩個核心交換機鏈接的地方,在

配置vlan

interface g 1/0/1

port hybrid pvid vlan 10

設置vlanif接口地址

interface vlanif 10

ip address 192.168.0.1 24

配置area

router id 1.1.1.1

ospf

area 0

network 192.168.0.0  0.0.0.255反掩碼

quit

area 1

network 192.168.1.0  0.0.0.255

Quit

 

對端核心交換機上配置ospf

配置vlan

interface g 1/0/1

port hybrid pvid vlan 10

設置vlanif接口地址

interface vlanif 10

ip address 192.168.0.2.24

配置area

router id 2.2.2.2

ospf

area 0

network 192.168.0.0  0.0.0.255反掩碼,宣告路由

quit

area 2

network 192.168.2.1  0.0.0.255

Quit

 

其餘的邊緣交換機

Routerid 3.3.3.3

Ospf

area 2

network 192.168.0.0  0.0.0.255反掩碼

quit

https://wenku.baidu.com/view/c55b6a36ccbff121dc368315.html

驗證

display ospf peer鄰居

display ospf routing路由

https://wenku.baidu.com/view/c55b6a36ccbff121dc368315.html

八、TCP滑動窗口

發送緩衝區中一部分數據(窗口大小),B接收後發送確認,再滑動窗口發送,以此類推

亂序的問題經過Sequence Number序號來解決

九、TCP三次握手四次揮手

 

 

十、http請求過程

一、dns解析

二、TCP三次握手

三、發送get或者post請求,包括http請求頭

四、服務器相應http響應頭,發送html

五、瀏覽器解析

十一、http包請求頭

 

Accept  就是告訴服務器端,我接受那些MIME類型

Accept-Encoding  這個看起來是接受那些壓縮方式的文件

Accept-Lanague   告訴服務器可以發送哪些語言

Connection       告訴服務器支持keep-alive特性

Cookie           每次請求時都會攜帶上Cookie以方便服務器端識別是不是同一個客戶端

Host             用來標識請求服務器上的那個虛擬主機,好比Nginx裏面能夠定義不少個虛擬主機

                那這裏就是用來標識要訪問那個虛擬主機。

User-Agent       用戶代理,通常狀況是瀏覽器,也有其餘類型,如:wget curl 搜索引擎的蜘蛛等    

十二、響應頭

 

Connection            使用keep-alive特性

Content-Encoding      使用gzip方式對資源壓縮

Content-type          MIME類型爲html類型,字符集是 UTF-8

Date                  響應的日期

Server                使用的WEB服務器

Transfer-Encoding:chunked   分塊傳輸編碼 是http中的一種數據傳輸機制,容許HTTP由網頁服務器發送給客戶端應用(一般是網頁瀏覽器)的數據能夠分紅多個部分,分塊傳輸編碼只在HTTP協議1.1版本(HTTP/1.1)中提供

Vary  這個能夠參考(http://blog.csdn.NET/tenfyguo/article/details/5939000

X-Pingback  參考(http://blog.sina.com.cn/s/blog_bb80041c0101fmfz.html

1三、http包結構

請求

 

相應

 

1四、Python變量

Pyton變量是內存中一個對象的引用,能夠視爲是C語言的指針

String tunple numbers是不可更改的,list dict能夠更改

修改python字符串:

a = ‘12345’

b = a[:1]+’3’+a[2:]

或者

List轉成數組

1五、Python staticmethod和classmethon

Classmethod參數有cls,是綁定的類,類對象和實例均可以調用,cls表明類對象,可使用類變量,可是不能訪問實例變量

Staticmethod,類對象和實例對象均可以調用

1六、調用父類的構造函數

在子類的構造函數中使用 FOO.__init__(self)或者 super(Foo2,self).__init__()

1七、類變量和實例變量

Class A:

name = ‘1’

name_lsit = []

a = A()

b = A()

a.name = ‘2’#只改變他本身

a.name_list.append(1)#改變全部的

1八、python雙下劃線與單下劃線

__foo__python內部方法

_foo_:類私有變量

__foo:解析器替換爲__classname__foo,以區別其餘類

1九、Extend與append區別

Extend只能接受列表,append什麼均可以額,兩者都只能接受一個參數

20、Yield

用在循環語句中,返回一個生成器。這個生成器只能被迭代一次

好比 for語句中yield i ,就是返回一個由每次的i組成的列表

2一、新式類和舊式類

新式類在2.2引入,2.*中要顯式的繼承object3.*中默認繼承object。新式類相同父類只執行一次構造函數,舊式類屢次,新式類搜索父類廣度優先,舊式類深度優先

2二、Select poll 和epoll:

Select poll差很少,都是先把fd_set或者pollfd從用戶態拷貝到內核,而後__epoll_wait註冊到內核等待隊列中等待喚醒,喚醒後執行回調函數設置maskselect在內核中遍歷fd列表,遇見有喚醒的就拷貝回用戶空間

這樣主要有三個問題

一、 fd屢次拷貝開銷大

二、 在內核中遍歷全部fd開銷大

三、 Select有文件上限

epoll提供了三個函數:epoll_createepoll_ctlepoll_waitepoll_create建立一個epoll句柄;epoll_ctl註冊要監聽的事件類型註冊要監聽的事件類型epoll_wait等待返回。

一、 epoll_ctl註冊時拷貝fd到內核,省的在epoll_wait中來回拷貝

二、 epoll_ctl時爲每一個fd註冊一個回調函數,若是就緒了,就把本身加入到一個就緒鏈表,這樣內核只要遍歷就緒鏈表就能夠了,不須要遍歷全部

三、 沒有上限,上限和系統同樣

參考文獻

http://www.cnblogs.com/Anker/p/3265058.html

2三、__new__()實例

class LxmlDocument(object_ref):

  cache = weakref.WeakKeyDictionary()

  __slots__ = ['__weakref__']

  def __new__(cls, response, parser=etree.HTMLParser):

    cache = cls.cache.setdefault(response, {})

    if parser not in cache:

      obj = object_ref.__new__(cls)

      cache[parser] = _factory(response, parser)

    return cache[parser]

2四、單例模式

Import自然是單例模式

New單例

class Singleton(object):

    _instance = None

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

        if not cls._instance:

            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)  

        return cls._instance  

 

class MyClass(Singleton):  

    a = 1

 

http://python.jobbole.com/87294/

裝飾器

2

3

4

5

6

7

8

9

10

11

12

13

14

from functools import wraps

 

def singleton(cls):

    instances = {}

    @wraps(cls)

    def getinstance(*args, **kw):

        if cls not in instances:

            instances[cls] = cls(*args, **kw)

        return instances[cls]

    return getinstance

 

@singleton

class MyClass(object):

    a = 1

http://python.jobbole.com/87294/

2五、Awk

awk ‘BEGIN {awk-commands} /pattern/ {awk-commands} END {awk-commands}’ file

使用文件awk ‘……’ -f awkfile

Awk -v variable=value awk變量

--dump-variables = file 打印全局變量到文件

--lint treat error as warn

--profile = file 講程序輸入到文件中

{print $0}打印全部行

示例:

統計行數:

awk ‘/a/ {++cnt} END {print 「Count = 「,cnt}’ file

awk 'BEGIN{FS=" "} /Phys/{print $3 }' marks.txt

內建變量:

ARGC 命令行參數個數

ARGV命令行參數數組

CONVFMT 數字的約定模式

ENVIORON 環境變量數組

FILENAME 當前文件名

FS 分隔符

NF 字段數目

NR 行數

FNR 處理多文件時相對當前文件的行號

OFMT 輸出格式數字

OFS 輸出字符分隔符

ORS 輸出行分隔符

RLENGTH 匹配字符串長度

RS 輸入字符分隔符

RSTART match第一次匹配的位置

數據結構:

數組:

array_name[index] = value

建立數組的方式很是簡單,直接爲變量賦值便可

刪除使用delete

流程控制:

If(condition)command;else command

for(initialisation;condition;increment/decrement)action

while(condition)action

do action while(condition)

內建函數:

數學函數

atan2(y, x)

cos(expr)

exp(expr)

int(expr)

log(expr)

rand

sin(expr)

sqrt(expr)

srand([expr])

 

字符串函數

asort(arr [, d [, how] ])

asorti(arr [, d [, how] ])

gsub(regex, sub, string)

index(str, sub)

length(str)

match(str, regex)

split(str, arr, regex)

sprintf(format, expr-list)

strtonum(str)

sub(regex, sub, string)

substr(str, start, l)

tolower(str)

toupper(str)

 

時間函數

systime

mktime(datespec)

strftime([format [, timestamp[, utc-flag]]])

 

字節操做函數

and

compl

lshift

rshift

or

Xor

參考文獻:

http://blog.jobbole.com/109089/

 

 

算法

一、 判斷單鏈表是否交叉

 

判斷是否交叉:兩個鏈表分別遍歷到底,看底部是否相等

判斷是交叉點:長鏈表減去短鏈表以後的位置開始同時遍歷兩邊,查看是否有相等的地方,,相等的地方就是交叉點

二、 二分查找


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

def binarySearch(l, t):

    low, high = 0, len(l) - 1

    while low < high:

        print low, high

        mid = (low + high) / 2

        if l[mid] > t:

            high = mid

        elif l[mid] < t:

            low = mid + 1

        else:

            return mid

    return low if l[low] == t else False

 

if __name__ == '__main__':

    l = [1, 4, 12, 45, 66, 99, 120, 444]

    print binarySearch(l, 12)

    print binarySearch(l, 1)

    print binarySearch(l, 13)

    print binarySearch(l, 444)

三、 如何判斷鏈表是否有環

設置兩個指針,一個slow,一個fastslow每次前進一,fast每次前進二,若是slow碰上fast就是有環

環的長度:記錄下slowfast的碰撞點P,下次相撞前走過的路程l就是環長

鏈接點位置:分別從碰撞點和頭指針開始走,相撞的地方就是鏈接點,由於你碰撞點p到鏈接點對的距離等於頭指針到鏈接點的距離

四、 遍歷二叉樹


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

## 14 二叉樹節點

class Node(object):

    def __init__(self, data, left=None, right=None):

        self.data = data

        self.left = left

        self.right = right

 

tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node(5), Node(4)))

 

## 15 層次遍歷

def lookup(root):

    stack = [root]

    while stack:

        current = stack.pop(0)

        print current.data

        if current.left:

            stack.append(current.left)

        if current.right:

            stack.append(current.right)

## 16 深度遍歷

def deep(root):

    if not root:

        return

    print root.data

    deep(root.left)

    deep(root.right)

 

前序遍歷:左子樹--右子樹

中序遍歷:根-左子樹-右子樹

後序遍歷:右子樹--左子樹

相關文章
相關標籤/搜索