1. 關於用python計算豎乘的問題,具體要求和希望輸出格式如下
草稿版
#coding:utf-8
'''
***
x***
------------
****
****
****
------------
******
eachstartisanumber;
sumforeachlineshallbesame
'''
importrandomasRND
defNumberListFactory(width=3):
standard=range(10)
ret=[]
foriinxrange(0,width):
ifi==0:
value=standard.pop(RND.randint(1,len(standard)-1))
else:
value=standard.pop(RND.randint(0,len(standard)-1))
ret.append(value)
returnret
defNumber2List(num):
ret=[]
tmp=0
foriinxrange(len(str(num))-1,0,-1):
key=(num-tmp)/(10**i)
ret.append(key)
tmp=tmp+key*(10**i)
ret.append(num-tmp)
returnret
defList2Number(lst):
ret=0
foriinxrange(0,len(lst)):
ret+=lst[i]*(10**(len(lst)-i-1))
returnret
defList2String(lst):
return''.join([str(i)foriinlst])
defIsUniq(lst):
foriinlst:
tmp=lst[:]
tmp.remove(i)
ifiintmp:
returnFalse
returnTrue
counter=0
result=None
whileresultisNone:
counter+=1
p1=NumberListFactory()
p2=NumberListFactory()
standard=sum(p1)
ifstandard!=sum(p2):
continue
else:
multiResult=[]
foriinxrange(len(p2)-1,-1,-1):
tmp=Number2List(p2[i]*List2Number(p1))
iflen(tmp)!=4:#
continue
else:
ifIsUniq(tmp):
multiResult.append(tmp)
#filterresultwhenzero
iflen(multiResult)!=3:
continue
#
flag=True
forjinmultiResult:
ifstandard!=sum(j):
flag=False
break
ifflagisFalse:
continue
#
result=Number2List(List2Number(p1)*List2Number(p2))
iflen(result)!=6orstandard!=sum(result)orIsUniq(result)isFalse:
result=None
continue
else:
print'SUMofLine->{}'.format(standard)
print'LoopID:{} '.format(counter)
print'{}'.format(List2String(p1))
print'x{}'.format(List2String(p2))
print'-'*12
forkinxrange(len(multiResult)-1,-1,-1):
print'{}{}'.format(''*k*2,List2String(multiResult[len(multiResult)-1-k]))
print'-'*12
printList2String(result)
print' Over'
可以的話,做一些優化。
2. (求演算法高手!)將一個正整數表示為N個不同的正整數之和。
200分懸賞啊,我要試一試啊。
首先是思路:
n能被拆分成不同的整數之和 =
S(1) = (n-1) + 1能被拆分成不同的整數之和
S(2) = (n-2) + 2能被拆分成不同的整數之和
。。。
S(n-1) = (n-1)能被拆分成不同的整數之和
最後一步:求並集
S(n) = Union( S(1), S(2), S(3), ..., S(n-1) )
=========================================
手動模擬一下這個演算法:
n=6 能被拆分成不同的整數之和
5 + 1能被拆分成不同的整數之和 => S1 = [5,1]
4 + 2能被拆分成不同的整數之和 => S2 = [4,2]
3 + 3能被拆分成不同的整數之和
這一步要遞歸
3能被拆分成不同的整數之和
= 2 + 1能被拆分成不同的整數之和 => [2,1]
= 1 + 2能被拆分成不同的整數之和 => 重復
=>S3 = [3,2,1]
2 + 4能被拆分成不同的整數之和,重復,S4=[]
1 + 5能被拆分成不同的整數之和,重復,S5=[]
S = Union( S1, S2, S3, S(4), S(5) )
= [[5,1], [4,2], [3,2,1]]
=========================================
最後就是代碼啦,python實現的
有2個函數,NumberSplit計算所有的拆分,checkuniq用來去重復的,去重復用了點python技巧,C++的話用hash_set應該也可以。
def NumberSplit( n ):
if n<0:
raise Exception
if n<3:
return [[n]]
sumArray = list()
for i in range(1,n):
t = NumberSplit(n-i)
for item in t:
if i in item:
continue
item.append(i)
sumArray.append(item)
return sumArray
def checkuniq(x):
for item in x:
item.sort()
return list(set(map(tuple, x)))
========================
試一下結果:
>>> checkuniq(NumberSplit(9))
[(1, 3, 5), (2, 7), (2, 3, 4), (1, 2, 6), (1, 8)]
整個大點的數字,呵呵有點慢,沒有優化。
>>> g=checkuniq(NumberSplit(20))
>>> g.sort()
[(1, 2, 3, 4, 10), (1, 2, 3, 5, 9), (1, 2, 3, 6, 8), (1, 2, 3, 14), (1, 2, 4, 5, 8), (1, 2, 4, 6, 7), (1, 2, 4, 13), (1, 2, 5, 12), (1, 2, 6, 11), (1, 2, 7, 10), (1, 2, 8, 9), (1, 2, 17), (1, 3, 4, 5, 7), (1, 3, 4, 12), (1, 3, 5, 11), (1, 3, 6, 10), (1, 3, 7, 9), (1, 3, 16), (1, 4, 5, 10), (1, 4, 6, 9), (1, 4, 7, 8), (1, 4, 15), (1, 5, 6, 8), (1, 5, 14), (1, 6, 13), (1, 7, 12), (1, 8, 11), (1, 9, 10), (1, 19), (2, 3, 4, 5, 6), (2, 3, 4, 11), (2, 3, 5, 10), (2, 3, 6, 9), (2, 3, 7, 8), (2, 3, 15), (2, 4, 5, 9), (2, 4, 6, 8), (2, 4, 14), (2, 5, 6, 7), (2, 5, 13), (2, 6, 12), (2, 7, 11), (2, 8, 10), (2, 18)]
3. 運維需要掌握的技術
運維需要掌握的技術有:linux系統基礎、網路服務、shell腳本和另一個腳本語言、sed和awk工具、文本處理命令、資料庫、資料庫、監控工具、集群和熱備、數據備份。
1、Linux系統基礎
是基礎中的基礎,參考書籍,至少要掌握這書60%內容,沒必須全部掌握。
6、資料庫
首選mysql,因為Linux用得最多絕對是mysql,增刪改查必學,特別要學熟查,其它方面可能不太需要,因為運維人員使用最多還是查,哪些優化和開發語句不會讓你弄的。
7、防火牆
防火牆技術是通過有機結合各類用於安全管理與篩選的軟體和硬體設備,幫助計算機網路於其內、外網之間構建一道相對隔絕的保護屏障,以保護用戶資料與信息安全性的一種技術。
8、監控工具
有cacti、nagios、zabbix、Prometheus,企業用得最多應該是nagios和zabbix。
4. TypeScript 類型挑戰 Medium
[[toc]]
Medium , #infer , #built-in
實現 TS 內置的 ReturnType<T> ,但不可以使用它。
答案
Medium , #union , #built-in
不使用 Omit 實現 TypeScript 的 Omit<T, K> 泛型。
Omit 會創建一個省略 K 中欄位的 T 對象。
答案
Medium , #readonly , #object-keys
實現一個通用 MyReadonly2<T, K> ,它帶有兩種類型的參數 T 和 K 。
K 指定應設置為Readonly的 T 的屬性集。如果未提供 K ,則應使所有屬性都變為只讀,就像普通的 Readonly<T> 一樣。
答案
Medium , #readonly , #object-keys , #deep
實現一個通用的 DeepReadonly<T> ,它將對象的每個參數及其子對象遞歸地設為只讀。
您可以假設在此挑戰中我們僅處理對象。數組,函數,類等都無需考慮。但是,您仍然可以通過覆蓋盡可能多的不同案例來挑戰自己。
答案
Medium , #infer , #tuple , #union
實現泛型 TupleToUnion<T> ,它返回元組所有值的合集。
答案
Medium , #application
在 JavaScript 中我們很常會使用可串聯(Chainable/Pipeline)的函數構造一個對象,但在 TypeScript 中,你能合理的給他附上類型嗎?
在這個挑戰中,你可以使用任意你喜歡的方式實現這個類型 - Interface, Type 或 Class 都行。你需要提供兩個函數 option(key, value) 和 get() 。在 option 中你需要使用提供的 key 和 value 擴展當前的對象類型,通過 get 獲取最終結果。
你只需要在類型層面實現這個功能 - 不需要實現任何 TS/JS 的實際邏輯。
你可以假設 key 只接受字元串而 value 接受任何類型,你只需要暴露它傳遞的類型而不需要進行任何處理。同樣的 key 只會被使用一次。
答案
Medium , #array
實現一個通用 Last<T> ,它接受一個數組 T 並返回其最後一個元素的類型。
答案
Medium , #array
實現一個通用 Pop<T> ,它接受一個數組 T 並返回一個沒有最後一個元素的數組。
額外 :同樣,您也可以實現 Shift , Push 和 Unshift 嗎?
答案
Medium , #array , #built-in
鍵入函數 PromiseAll ,它接受PromiseLike對象數組,返回值應為 Promise<T> ,其中 T 是解析的結果數組。
答案
Medium , #union , `#map
有時,您可能希望根據某個屬性在聯合類型中查找類型。
在此挑戰中,我們想通過在聯合類型 Cat | Dog 中搜索公共 type 欄位來獲取相應的類型。換句話說,在以下示例中,我們期望 LookUp<Dog | Cat, 'dog'> 獲得 Dog , LookUp<Dog | Cat, 'cat'> 獲得 Cat 。
答案
Medium , #template-literal
實現 TrimLeft<T> ,它接收確定的字元串類型並返回一個新的字元串,其中新返回的字元串刪除了原字元串開頭的空白字元串。
答案
Medium , #template-literal
實現 Trim<T> ,它是一個字元串類型,並返回一個新字元串,其中兩端的空白符都已被刪除。
答案
Medium , #template-literal
實現 Capitalize<T> 它將字元串的第一個字母轉換為大寫,其餘字母保持原樣。
答案
Medium , #template-iteral
實現 Replace<S, From, To> 將字元串 S 中的第一個子字元串 From 替換為 To 。
答案
Medium , #template-literal
實現 ReplaceAll<S, From, To> 將一個字元串 S 中的所有子字元串 From 替換為 To 。
答案
Medium , #arguments
實現一個泛型 AppendArgument<Fn, A> ,對於給定的函數類型 Fn ,以及一個任意類型 A ,返回一個新的函數 G 。 G 擁有 Fn 的所有參數並在末尾追加類型為 A 的參數。
答案
Medium , #union
實現聯合類型的全排列,將聯合類型轉換成所有可能的全排列數組的聯合類型。
答案
https://github.com/type-challenges/type-challenges/issues/614
Note
Medium , #template-literal
計算字元串的長度,類似於 String#length 。
答案
Medium , #array
在這個挑戰中,你需要寫一個接受數組的類型,並且返回扁平化的數組類型。
答案
Medium , #object-keys
實現一個為介面添加一個新欄位的類型。該類型接收三個參數,返回帶有新欄位的介面類型。
答案
Medium , #math , #template-literal
實現一個接收string,number或bigInt類型參數的 Absolute 類型,返回一個正數字元串。
答案
Medium , #union , #string
實現一個將接收到的String參數轉換為一個字母Union的類型。
答案
Medium , #object
實現聯合類型的全排列,將聯合類型轉換成所有可能的全排列數組的聯合類型。
答案
Medium , #
FooBarBaz -> foo-bar-baz
答案
Medium , #object
獲取兩個介面類型中的差值屬性。
答案
Medium , #array
在類型系統中實現類似於 Python 中 any 函數。類型接收一個數組,如果數組中任一個元素為真,則返回 true ,否則返回 false 。如果數組為空,返回 false 。
答案
Medium , #union , #utils
實現 IsNever 類型, 解析輸入 T 類型為 never 返回 true 否則 返回 false
答案
Medium , #union , #utils
實現 IsUnion 類型, 解析輸入 T 類型為聯合類型 返回 true 否則 返回 false
答案
Medium
實現 ReplaceKeys 類型, 它將替換聯合類型中類型的鍵值, 如果該類型沒有這個Key則跳過,如果有則替換。
答案
Medium
從對象類型中排除索引簽名。
答案
https://github.com/type-challenges/type-challenges/issues/3542
Medium
實現類型 PercentageParser。根據規則 /^(+|-)?(d*)?(\%)?$/ 匹配類型 T。
匹配的結果由三部分組成,分別是:[ 正負號 , 數字 , 單位 ],如果沒有匹配,則默認是空字元串。
答案
Medium
從字元串中剔除指定字元。
答案
Medium , Math
給定一個正整數作為類型的參數,要求返回的類型是該數字減 1。
答案
Medium , object
從 F 中選出類型相同的屬性
答案
Medium , #object
保留沒有在U中指定的類型的欄位
答案
Medium , #template-literal
實現 StartsWith<T, U> ,接收兩個string類型參數,然後判斷 T 是否以 U 開頭,根據結果返回 true 或 false
答案
Medium , #object
實現一個通用的 PartialByKeys<T, K> ,它接收兩個類型參數 T 和 K 。
K 指定應設置為可選的 T 的屬性集。當沒有提供 K 時,它就和普通的 Partial<T> 一樣使所有屬性都是可選的。
答案
Medium , #object
實現一個通用的 RequiredByKeys<T, K> ,它接收兩個類型參數 T 和 K 。
K 指定應設為必選的 T 的屬性集。當沒有提供 K 時,它就和普通的 Required<T> 一樣使所有的屬性成為必選的。
答案
Medium , #readonly , object-keys
實現一個通用的類型 Mutable<T> ,使類型 T 的全部屬性可變(非只讀)。
答案
Medium , #object
1
答案
Medium
給定只包含字元串的元組,和類型U, 遞歸構建對象
答案
Medium , #tuple
實現類型版本的數組反轉 Array.reverse
答案
Medium , #arguments
實現類型版本的 lodash _.flip 函數
類型 FlipArguments<T> 需要函數 T 並返回一個新的函數類型。這個函數類型擁有相同的參數,但參數類型是被反轉的。
答案
Medium , #array
按深度遞歸展平陣列。
答案
Medium
塊、元素、修飾符方法 (BEM) 是 CSS 中類的流行命名約定。例如,塊組件將表示為 btn ,依賴於塊的元素將表示為 btn__price ,改變塊樣式的修飾符將表示為 btn--big 或 btn__price--warning 。實現 BEM<B, E, M> 從這三個參數生成字元串聯合。其中 B 是字元串文字,E 和 M 是字元串數組(可以為空)。
答案
Medium , #object
實現二叉樹中序遍歷的類型版本。
答案
Medium
實現類型 just-flip-object :
答案
Medium
實現泛型 Fibonacci<T> 傳入數字 T 返回正確的 Fibonacci number .
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
答案
Medium
實現類型 AllCombinations<S> 返回所有字元組合.
答案
Medium , #array
實現類型 GreaterThan<T, U> 來比較大小,就像 T > U 。不需要考慮負數
1
答案
Medium , #tuple
實現 Zip<T, U> 類型。 T, U 必須為 Tuple
答案
Medium , #tuple
實現 IsTuple , 接收類型 T 判斷 T 是否為元組類型
答案
Medium , #tuple
實現 Chunk<T, N> , 它有兩個必填的類型參數, T 必須為 tuple , N 必須為大於1的數字
答案
Medium , tuple
Fill , 一個常用的 JavaScript 函數, 我們用類型實現它. Fill<T, N, Start?, End?> , 它接收4個類型參數, T , N 是必填參數 T 為元組, N 為 any, Start , End 是可選參數,為大於零的數子.
為了模擬真實的功能,測試中可能會包含一些邊界條件,希望大家喜歡:)
答案
Medium
實現 TrimRight<T> 它採用精確的字元串類型並返回一個刪除了空格結尾的新字元串。
答案
Medium , #union , #array
實現一個像 Lodash.without 函數一樣的泛型 Without<T, U>,它接收數組類型的 T 和數字或數組類型的 U 為參數,會返回一個去除 U 中元素的數組 T。
答案
Medium , template-literal
實現類型版本的 Math.trunc . 它接受字元串或數字返回整數部分,提出小數部分
答案
Medium , #array
實現類型版本的 Array.indexOf<T, U> , 它接收數組T 和 U 返回U在T中的索引值
答案
Medium , #array
實現類型版 Array.join<T, U> 接收數組T和字元串或數字 U
答案
Medium , #array
實現類型版本的 Array.lastIndexOf<T, U> , 它接收數組T 和 U 返回U在T中的反向索引值
答案
Medium , #array
實現類型版本的 Lodash.uniq , 它接收數組T,返回去重後的T
答案
Medium
實現 MapTypes<T, R> 它將對象 T 中的類型轉換為類型 R 定義的不同類型,類型 R 具有以下結構。
答案
Medium , #tuple
構造一個給定長度的元組
答案
Medium
有時我們想限制數字的范圍......例如。
答案
Medium , #array , #application , #string
給定一個字元串數組,進行置換和組合。它對於像video controlsList這樣的類型也很有用
答案
Medium , #union
給定一個唯一元素數組,返回所有可能的子序列。
子序列是一個序列,可以通過刪除一些元素或不刪除任何元素而從數組中派生,而不改變其餘元素的順序。
答案
5. MacOS 常用終端命令大全
MAC系統採用Unix文件系統,所有文件都掛在根目錄下面,沒有Windows系統的盤符概念,根目錄用斜杠(/)表示;
根目錄(/)不是可有可無,/System表示根目錄下的System文件,System表示當前目錄下的System文件;
在 Unix系統中區別字元大小寫,A.txt 不等於 a.txt;
關鍵的標點符號:點(.)表示當前目錄;兩個點(..)表示上一級目錄;星號(*)匹配任意字元任意次數;問號(?)匹配任意字元僅一次;
獲得許可權:為了防止誤操作破壞系統,再用戶狀態下沒有許可權操作重要的系統文件,先要獲取root許可權,語法:sudo -s,然後會提示輸入密碼,輸入密碼時沒有任何回顯,連星號都沒有,輸入完密碼按回車鍵即可;
編輯文件:vim directory/file_name,若指定路徑的文件不存在,則新建空文件,輸入字母i或o進入編輯模式,編輯好內容,點擊【esc】鍵後,輸入:w進行保存;輸入:wq進行保存並退出;輸入:q!進行不保存強行退出;
table鍵,單擊可以實現自動補全,雙擊可以列出指定路徑下的所有內容,類似ls命令;
常用位置
驅動所在位置: /Systme/Library/Extensions
用戶文件夾位置:/User/用戶名,可以用波浪號(~)表示
桌面位置:/User/用戶名/Desktop,可以用~/Desktop表示
清理系統
按天進行清理:sudo periodic daily
按每周進行清理:sudo periodic weekly
按每月進行清理:sudo periodic monthly
按上面3種情況進行清理:sudo periodic daily weekly monthly
命令——功能描述——示例
mkdir——創建一個目錄——mkdir dirname
rmdir——刪除一個目錄——rmdir dirname
mvdir——移動或重命名一個目錄——mvdir dir1 dir2
cd——改變當前目錄——cd dirname
pwd——顯示當前目錄的路徑名——pwd
ls——顯示當前目錄的內容——ls -la
dircmp——比較兩個目錄的內容——dircmp dir1 dir2
命令——功能描述——示例
cat——顯示或連接文件————cat filename
pg分頁格式化顯示文件內容——pg filename
more——分屏顯示文件內容——more filename
od——顯示非文本文件的內容——od -c filename
cp——復制文件或目錄——cp file1 file2
rm——刪除文件或目錄——rm filename
mv——改變文件名或所在目錄——mv file1 file2
ln——聯接文件——ln -s file1 file2
find——使用匹配表達式查找文件——find . -name 「*.c」 -print
file——顯示文件類型——file filename
open——使用默認的程序打開文件——open filename(open . 打開當前目錄)
命令——功能描述——示例
head——顯示文件的最初幾行——head -20 filename
tail——顯示文件的最後幾行——tail -15 filename
cut——顯示文件每行中的某些域——cut -f1,7 -d: /etc/passwd
colrm——從標准輸入中刪除若干列——colrm 8 20 file2
paste——橫向連接文件——paste file1 file2
diff——比較並顯示兩個文件的差異——diff file1 file2
sed————非交互方式流編輯器——sed 「s/red/green/g」 filename
grep——在文件中按模式查找——grep 「^[a-zA-Z]」 filename
awk——在文件中查找並處理模式——awk 『{print 111}』 filename
sort——排序或歸並文件——sort -d -f -u file1
uniq——去掉文件中的重復行——uniq file1 file2
comm——顯示兩有序文件的公共和非公共行——comm file1 file2
wc——統計文件的字元數、詞數和行數——wc filename
nl——給文件加上行號——nl file1 >file2
命令——功能描述——示例
passwd——修改用戶密碼——passwd
chmod——改變文件或目錄的許可權——chmod ug+x filename
umask————定義創建文件的許可權掩碼——umask 027
chown——改變文件或目錄的屬主——chown newowner filename
chgrp——改變文件或目錄的所屬組——chgrp staff filename
xlock——給終端上鎖——xlock -remote
命令——功能描述——示例
make——維護可執行程序的最新版本——make
touch——更新文件的訪問和修改時間——touch -m 05202400 filename
dbx——命令行界面調試工具——dbx a.out
xde——圖形用戶界面調試工具——xde a.out
命令——功能描述——示例
ps——顯示進程當前狀態——ps u
kill——終止進程——kill -9 30142
nice——改變待執行命令的優先順序——nice cc -c *.c
renice——改變已運行進程的優先順序——renice +20 32768
命令——功能描述——示例
date——顯示系統的當前日期和時間——date
cal——顯示日歷——cal 8 1996
time——統計程序的執行時間——time a.out
命令——功能描述——示例
telnet——遠程登錄——telnet hpc.sp.net.e.cn
rlogin——遠程登錄——rlogin hostname -l username
rsh——在遠程主機執行指定命令——rsh f01n03 date
ftp——在本地主機與遠程主機之間傳輸文件——ftp ftp.sp.net.e.cn
rcp——在本地主機與遠程主機 之間復制文件——rcp file1 host1:file2
ping——給一個網路主機發送 回應請求——ping hpc.sp.net.e.cn
mail——閱讀和發送電子郵件——mail
write——給另一用戶發送報文——write username pts/1
mesg——允許或拒絕接收報文——mesg n
命令——功能描述——示例
history——列出最近執行過的 幾條命令及編號——history
r——重復執行最近執行過的 某條命令——r -2
alias——給某個命令定義別名——alias del=rm -i
unalias——取消對某個別名的定義——unalias del
命令——功能描述——示例
uname——顯示操作系統的有關信息——uname -a
clear——清除屏幕或窗口內容——clear
env——顯示當前所有設置過的環境變數——env
who——列出當前登錄的所有用戶——who
whoami——顯示當前正進行操作的用戶名——whoami
tty——顯示終端或偽終端的名稱——tty
stty——顯示或重置控制鍵定義——stty -a
——查詢磁碟使用情況—— -k subdir
df——顯示文件系統的總空間和可用空間——df /tmp
w——顯示當前系統活動的總信息——w
命令——功能描述——示例
sudo —— 獲取root許可權 —— sudo -s
Ctr + D / exit —— 退出root許可權
clear ——清除屏幕或窗口內容
ping —— 給網路主機發送回應請求 —— ping www..com
man —— 查看命令說明 —— man ls
q —— 退出查看的命令說明
which —— 查看指定程序的路徑 —— which python
history —— 列出最近執行過的命令及編號
hostname —— 電腦在網路中的名稱
env —— 顯示當前所有設置過的環境變數
passwd —— 修改用戶密碼
date —— 顯示系統的當前日期和時間 —— date
cal —— 顯示日歷 —— cal
time —— 統計程序的執行時間 —— time
所以你可以使用▲(上箭頭)或▼(下箭頭)來上下移動,
使用空格鍵 來翻頁,輸入/和關鍵字來按照關鍵字搜索
按Q來退出使用指南頁面
tab按鍵自動補全唯一路徑
中止一個錯誤的或者發瘋的命令,可以使用組合鍵control + C。
你可以在執行前編輯命令,只需要使用箭頭和鍵盤上的其他字母。
沒有輸入任何命令時,你可以用▲和▼來瀏覽歷史命令。同樣可以編輯和再次執行。
你也可以使用history命令查看歷史記錄。
你可以使用組合鍵control + L清屏。
細節:vim 編輯器 i 進入插入模式 ,在編輯完後按 esc,然後按Shift+":",這個時候輸入wq保存退出。 (注意需要:符號)
6. python 怎麼合並多行為一行
#readdatafromfile
withopen("data_src.txt",'rt')assrc:
data=[ln.strip()forlninsrc]
#','join
withopen("data_sto.txt",'wt')assto:
sto.write(','.join(list(set(data))))
python 中 set 是 「unordered collection of unique elements」 可以自動實現剔除重復數據。
7. python運維自動化取頁面數據
1、linux系統基礎,這個不用說了,是基礎中的基礎,連這個都不會就別幹了,參考書籍,可以看鳥哥linux基礎篇,至少要掌握這書60%內容,沒必須全部掌握,但基本命令總得會吧
2、網路服務,服務有很多種,每間公司都會用到不同的,但基礎的服務肯定要掌握,如FTP, DNS,SAMBA, 郵件, 這幾個大概學一下就行,LAMP和LNMP是必須要熟練,我所指的不是光光會搭建,而是要很熟悉裡面的相當配置才行,因為公司最關鍵的絕對是WEB伺服器,所以nginx和apache要熟悉,特別是nginx一定要很熟悉才行,至少有些公司還會用tomcat,這個也最好學一下。其實網路服務方面不用太擔心,一般公司的環境都已經搭建好,就算有新伺服器或讓你整改,公司會有相應的文檔讓你參照來弄,不會讓你亂來的,但至少相關的配置一定要學熟,而且肯定是編譯安裝多,那些模塊要熟悉一下他的作用,特別是php那些模塊。
這面2點只是基礎,也是必要條件,不能說是工具,下以才是真正的要掌握的工具。
3、shell腳本和另一個腳本語言,shell是運維人員必須具備的,不懂這個連入職都不行,至少也要寫出一些系統管理腳本,最簡單也得寫個監控CPU,內存比率的腳本吧,這是最最最基本了,別以為會寫那些猜數字和計算什麼數的,這些沒什麼作用,只作學習意義,寫系統腳本才是最有意義,而另一個腳本語言是可選的,一般是3P,即python, perl和php,php就不需要考慮了,除非你要做開發,我個人建議學python會比較好,難實現自動化運維,perl是文本處理很強大,反正這兩個學一個就行了。
4、sed和awk工具,必須要掌握,在掌握這兩個工具同時,還要掌握正則表達式,這個就痛苦了,正則是最難學的表達式,但結合到sed和awk中會很強大,在處理文本內容和過濾WEB內容時十分有用,不過在學shell的同時一般會經常結合用到的,所以學第3點就會順便學第4點。
5、文本處理命令,sort , tr , cut, paste, uniq, tee等,必學,也是結合第3點時一並學習的。
6、資料庫,首選mysql,別問我為什麼不學sqlserver和oracle,因為linux用得最多絕對是mysql,增刪改查必學,特別要學熟查,其它方面可能不太需要,因為運維人員使用最多還是查,哪些優化和開發語句不會讓你弄的。
7、防火牆,不學不行,防火牆也算是個難點,說難不難,說易不易,最重要弄懂規則,如果學過CCNA的朋友可能會比較好學,因為iptables也有NAT表,原理是一樣的,而FILTER表用得最多,反正不學就肯定不合格。
8、監控工具,十分十分重要,我個人建議,最好學這3個,cacti,nagios,zibbix,企業用得最多應該是nagios和 zibbix,反正都學吧,但nagios會有點難,因為會涉及到用腳本寫自動監控,那個地方很難。