一、處理問題: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端口; |
五、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.*中要顯式的繼承object,3.*中默認繼承object。新式類相同父類只執行一次構造函數,舊式類屢次,新式類搜索父類廣度優先,舊式類深度優先
2二、Select poll 和epoll:
Select 和poll差很少,都是先把fd_set或者pollfd從用戶態拷貝到內核,而後__epoll_wait註冊到內核等待隊列中等待喚醒,喚醒後執行回調函數設置mask,select在內核中遍歷fd列表,遇見有喚醒的就拷貝回用戶空間
這樣主要有三個問題
一、 fd屢次拷貝開銷大
二、 在內核中遍歷全部fd開銷大
三、 Select有文件上限
epoll提供了三個函數:epoll_create,epoll_ctl,epoll_wait,epoll_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/
算法
一、 判斷單鏈表是否交叉
判斷是否交叉:兩個鏈表分別遍歷到底,看底部是否相等
判斷是交叉點:長鏈表減去短鏈表以後的位置開始同時遍歷兩邊,查看是否有相等的地方,,相等的地方就是交叉點
二、 二分查找
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,一個fast,slow每次前進一,fast每次前進二,若是slow碰上fast就是有環
環的長度:記錄下slow和fast的碰撞點P,下次相撞前走過的路程l就是環長
鏈接點位置:分別從碰撞點和頭指針開始走,相撞的地方就是鏈接點,由於你碰撞點p到鏈接點對的距離等於頭指針到鏈接點的距離
四、 遍歷二叉樹
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) |
前序遍歷:左子樹-根-右子樹
中序遍歷:根-左子樹-右子樹
後序遍歷:右子樹-根-左子樹