真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

51ctogo語言的簡單介紹

09-kubernetes中的域名解析流程

從Kubernetes 1.11版本開始,Kubernetes集群的DNS服務(wù)由CoreDNS提供。CoreDNS是CNCF基金會(huì)的一個(gè)項(xiàng)目,是用Go語言實(shí)現(xiàn)的高性能、插件式、易擴(kuò)展的DNS服務(wù)端。CoreDNS解決了KubeDNS的一些問題,例如dnsmasq的安全漏洞、externalName不能使用stubDomains設(shè)置,等等。

成都創(chuàng)新互聯(lián)專注于崇陽網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供崇陽營銷型網(wǎng)站建設(shè),崇陽網(wǎng)站制作、崇陽網(wǎng)頁設(shè)計(jì)、崇陽網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造崇陽網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供崇陽網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

CoreDNS支持自定義DNS記錄及配置upstream DNS Server,可以統(tǒng)一管理Kubernetes基于服務(wù)的內(nèi)部DNS和數(shù)據(jù)中心的物理DNS。

CoreDNS沒有使用多個(gè)容器的架構(gòu),只用一個(gè)容器便實(shí)現(xiàn)了KubeDNS內(nèi)3個(gè)容器的全部功能。

從kubernetes官方提供的 coredns.yml 文件中,不難看出coredns服務(wù)配置至少需要一個(gè)ConfigMap、一個(gè)Deployment和一個(gè)Service共3個(gè)資源對象。ConfigMap coredns 主要配置文件Corefile的內(nèi)容:

其中主要有二個(gè)地方來解析配置

1、這段配置的意思是cluster.local后綴的域名都是kubernetes內(nèi)部域名,coredns會(huì)監(jiān)控service的變化來修改域名的記錄

2、如果coredns沒有找到dns記錄,則去找 /etc/resolv.conf 中的 nameserver 解析

接下來使用一個(gè)帶有nslookup工具的Pod來驗(yàn)證DNS服務(wù)能否正常工作:

通過nslookup進(jìn)行測試。

查找defaul命名空間存在的ng-deploy-80服務(wù)

如果某個(gè)Service屬于不同的命名空間,那么在進(jìn)行Service查找時(shí),需要補(bǔ)充Namespace的名稱,組合成完整的域名。下面以查找kubernetes-dashboard服務(wù)為例,

眾所周知, DNS 服務(wù)器用于將域名轉(zhuǎn)換為 IP (具體為啥要轉(zhuǎn)換建議復(fù)習(xí)下 7 層網(wǎng)絡(luò)模型). Linux 服務(wù)器中 DNS 解析配置位于 /etc/resolv.conf , 在 Pod 中也不例外,

DNS 策略可以逐個(gè) Pod 來設(shè)定。當(dāng)前kubernetes支持這4中DNS 策略

如果我們不填dnsPolicy, 默認(rèn)策略就是 ClusterFirst 。

kubelet 在起 pause 容器的時(shí)候,會(huì)將其 DNS 解析配置初始化成集群內(nèi)的配置。配置: 它的 nameserver 就是指向 coredns 的

k8s里面有4種DNS策略, 而coredns使用的DNS策略就是Default, 這個(gè)策略的意思就是繼承宿主機(jī)上的/etc/resolve.conf, 所以coredns Pod 里面的/etc/resolve.conf 的內(nèi)容就是宿主機(jī)上的內(nèi)容。

在集群中 pod 之間互相用 svc name 訪問的時(shí)候,會(huì)根據(jù) resolv.conf 文件的 DNS 配置來解析域名,下面來分析具體的過程。

pod 的 resolv.conf 文件主要有三個(gè)部分,分別為 nameserver、search 和 option。而這三個(gè)部分可以由 K8s 指定,也可以通過 pod.spec.dnsConfig 字段自定義。

nameserver

resolv.conf 文件的第一行 nameserver 指定的是 DNS 服務(wù)的 IP,這里就是 coreDNS 的

clusterIP:

也就是說所有域名的解析,都要經(jīng)過coreDNS的虛擬IP 10.100.0.2 進(jìn)行解析, 不論是內(nèi)部域還是外部域名。

search 域

resolv.conf 文件的第二行指定的是 DNS search 域。解析域名的時(shí)候,將要訪問的域名依次帶入 search 域,進(jìn)行 DNS 查詢。

比如我要在剛才那個(gè) pod 中訪問一個(gè)域名為 ng-deploy-80的服務(wù),其進(jìn)行的 DNS 域名查詢的順序是:

options

resolv.conf 文件的第三行指定的是其他項(xiàng),最常見的是 dnots。dnots 指的是如果查詢的域名包含的點(diǎn) “.” 小于 5,則先走 search 域,再用絕對域名;如果查詢的域名包含點(diǎn)數(shù)大于或等于 5,則先用絕對域名,再走 search 域。K8s 中默認(rèn)的配置是 5。

也就是說,如果我訪問的是 a.b.c.e.f.g ,那么域名查找的順序如下:

通過 svc 訪問

在 K8s 中,Pod 之間通過 svc 訪問的時(shí)候,會(huì)經(jīng)過 DNS 域名解析,再拿到 ip 通信。而 K8s 的域名全稱為 "service-name.namespace.svc.cluster.local",而我們通常只需將 svc name 當(dāng)成域名就能訪問到 pod,這一點(diǎn)通過上面的域名解析過程并不難理解。

參考

(1)K8S落地實(shí)踐 之 服務(wù)發(fā)現(xiàn)(CoreDNS)

(2)自定義 DNS 服務(wù)

(3)Kubernetes 服務(wù)發(fā)現(xiàn)之 coreDNS

(4)Kubernetes 集群 DNS 服務(wù)發(fā)現(xiàn)原理

(5)Kubernetes之服務(wù)發(fā)現(xiàn)和域名解析過程分析

GOOGLE共開發(fā)了多少種編程語言

Golang, Dartlang, 是t, 啊哥們兒~。 python 是Guido 為慢慢悠悠搞出來的一個(gè)東西?,F(xiàn)在在Google。

ELK應(yīng)用之Filebeat

Filebeat是本地文件的日志數(shù)據(jù)采集器,可監(jiān)控日志目錄或特定日志文件(tail file),并將它們轉(zhuǎn)發(fā)給Elasticsearch或Logstatsh進(jìn)行索引、kafka等。帶有內(nèi)部模塊(auditd,Apache,Nginx,System和MySQL),可通過一個(gè)指定命令來簡化通用日志格式的收集,解析和可視化。

官方網(wǎng)址:

Filebeat涉及兩個(gè)組件:查找器prospector和采集器harvester,來讀取文件(tail file)并將事件數(shù)據(jù)發(fā)送到指定的輸出。

啟動(dòng)Filebeat時(shí),它會(huì)啟動(dòng)一個(gè)或多個(gè)查找器,查看你為日志文件指定的本地路徑。對于prospector所在的每個(gè)日志文件,prospector啟動(dòng)harvester。每個(gè)harvester都會(huì)為新內(nèi)容讀取單個(gè)日志文件,并將新日志數(shù)據(jù)發(fā)送到libbeat,后者將聚合事件并將聚合數(shù)據(jù)發(fā)送到你為Filebeat配置的輸出。

當(dāng)發(fā)送數(shù)據(jù)到Logstash或Elasticsearch時(shí),F(xiàn)ilebeat使用一個(gè)反壓力敏感(backpressure-sensitive)的協(xié)議來解釋高負(fù)荷的數(shù)據(jù)量。當(dāng)Logstash數(shù)據(jù)處理繁忙時(shí),F(xiàn)ilebeat放慢它的讀取速度。一旦壓力解除,F(xiàn)ilebeat將恢復(fù)到原來的速度,繼續(xù)傳輸數(shù)據(jù)。

Harvester負(fù)責(zé)讀取單個(gè)文件的內(nèi)容。讀取每個(gè)文件,并將內(nèi)容發(fā)送到the output,每個(gè)文件啟動(dòng)一個(gè)harvester, harvester負(fù)責(zé)打開和關(guān)閉文件,這意味著在運(yùn)行時(shí)文件描述符保持打開狀態(tài)。

如果文件在讀取時(shí)被刪除或重命名,F(xiàn)ilebeat將繼續(xù)讀取文件。這有副作用,即在harvester關(guān)閉之前,磁盤上的空間被保留。默認(rèn)情況下,F(xiàn)ilebeat將文件保持打開狀態(tài),直到達(dá)到close_inactive狀態(tài)

關(guān)閉harvester會(huì)產(chǎn)生以下結(jié)果:

1)如果在harvester仍在讀取文件時(shí)文件被刪除,則關(guān)閉文件句柄,釋放底層資源。

2)文件的采集只會(huì)在scan_frequency過后重新開始。

3)如果在harvester關(guān)閉的情況下移動(dòng)或移除文件,則不會(huì)繼續(xù)處理文件。

要控制收割機(jī)何時(shí)關(guān)閉,請使用close_ *配置選項(xiàng)

Prospector負(fù)責(zé)管理harvester并找到所有要讀取的文件來源。如果輸入類型為日志,則查找器將查找路徑匹配的所有文件,并為每個(gè)文件啟動(dòng)一個(gè)harvester。每個(gè)prospector都在自己的Go協(xié)程中運(yùn)行。

Filebeat目前支持兩種prospector類型:log和stdin。每個(gè)prospector類型可以定義多次。日志prospector檢查每個(gè)文件來查看harvester是否需要啟動(dòng),是否已經(jīng)運(yùn)行,或者該文件是否可以被忽略(請參閱ignore_older)。

只有在harvester關(guān)閉后文件的大小發(fā)生了變化,才會(huì)讀取到新行。

注:Filebeat prospector只能讀取本地文件,沒有功能可以連接到遠(yuǎn)程主機(jī)來讀取存儲(chǔ)的文件或日志。

配置文件:$FILEBEAT_HOME/filebeat.yml。Filebeat可以一次讀取某個(gè)文件夾下的所有后綴名為log的文件,也可以讀取指定的某一個(gè)后綴名為log的文件。

配置文件詳解( )

(1)字段解釋

paths: 指定要監(jiān)控的日志,目前按照Go語言的glob函數(shù)處理。沒有對配置目錄做遞歸處理,比如配置的如果是:

/var/log/* /*.log

則只會(huì)去/var/log目錄的所有子目錄中尋找以".log"結(jié)尾的文件,而不會(huì)尋找/var/log目錄下以".log"結(jié)尾的文件。

encoding: 指定被監(jiān)控的文件的編碼類型,使用plain和utf-8都是可以處理中文日志的。

input_type: 指定文件的輸入類型log(默認(rèn))或者stdin。

exclude_lines: 在輸入中排除符合正則表達(dá)式列表的那些行。

include_lines: 包含輸入中符合正則表達(dá)式列表的那些行(默認(rèn)包含所有行),include_lines執(zhí)行完畢之后會(huì)執(zhí)行exclude_lines。

exclude_files: 忽略掉符合正則表達(dá)式列表的文件(默認(rèn)為每一個(gè)符合paths定義的文件都創(chuàng)建一個(gè)harvester)。

fields: 向輸出的每一條日志添加額外的信息,比如"level:debug",方便后續(xù)對日志進(jìn)行分組統(tǒng)計(jì)。默認(rèn)情況下,會(huì)在輸出信息的fields子目錄下以指定的新增fields建立子目錄,

fields_under_root: 如果該選項(xiàng)設(shè)置為true,則新增fields成為頂級目錄,而不是將其放在fields目錄下。自定義的field會(huì)覆蓋filebeat默認(rèn)的field。

ignore_older: 可以指定Filebeat忽略指定時(shí)間段以外修改的日志內(nèi)容,比如2h(兩個(gè)小時(shí))或者5m(5分鐘)。

close_older: 如果一個(gè)文件在某個(gè)時(shí)間段內(nèi)沒有發(fā)生過更新,則關(guān)閉監(jiān)控的文件handle。默認(rèn)1h。

force_close_files: Filebeat會(huì)在沒有到達(dá)close_older之前一直保持文件的handle,如果在這個(gè)時(shí)間窗內(nèi)刪除文件會(huì)有問題,所以可以把force_close_files設(shè)置為true,只要filebeat檢測到文件名字發(fā)生變化,就會(huì)關(guān)掉這個(gè)handle。

scan_frequency: Filebeat以多快的頻率去prospector指定的目錄下面檢測文件更新(比如是否有新增文件),如果設(shè)置為0s,則Filebeat會(huì)盡可能快地感知更新(占用的CPU會(huì)變高)。默認(rèn)是10s。

document_type: 設(shè)定Elasticsearch輸出時(shí)的document的type字段,也可以用來給日志進(jìn)行分類。

harvester_buffer_size: 每個(gè)harvester監(jiān)控文件時(shí),使用的buffer的大小。

max_bytes: 日志文件中增加一行算一個(gè)日志事件,max_bytes限制在一次日志事件中最多上傳的字節(jié)數(shù),多出的字節(jié)會(huì)被丟棄。默認(rèn)是10MB。

multiline: 適用于日志中每一條日志占據(jù)多行的情況,比如各種語言的報(bào)錯(cuò)信息調(diào)用棧。這個(gè)配置的下面包含如下配置:

pattern: 多行日志開始的那一行匹配的pattern

negate: 是否需要對pattern條件轉(zhuǎn)置使用,不翻轉(zhuǎn)設(shè)為true,反轉(zhuǎn)設(shè)置為false。

match: 匹配pattern后,與前面(before)還是后面(after)的內(nèi)容合并為一條日志

max_lines: 合并的最多行數(shù)(包含匹配pattern的那一行),默認(rèn)為500行。

timeout: 到了timeout之后,即使沒有匹配一個(gè)新的pattern(發(fā)生一個(gè)新的事件),也把已經(jīng)匹配的日志事件發(fā)送出去

tail_files: 如果設(shè)置為true,F(xiàn)ilebeat從文件尾開始監(jiān)控文件新增內(nèi)容,把新增的每一行文件作為一個(gè)事件依次發(fā)送,而不是從文件開始處重新發(fā)送所有內(nèi)容。

backoff: Filebeat檢測到某個(gè)文件到了EOF之后,每次等待多久再去檢測文件是否有更新,默認(rèn)為1s。

max_backoff: Filebeat檢測到某個(gè)文件到了EOF之后,等待檢測文件更新的最大時(shí)間,默認(rèn)是10秒。

backoff_factor: 定義到達(dá)max_backoff的速度,默認(rèn)因子是2,到達(dá)max_backoff后,變成每次等待max_backoff那么長的時(shí)間才backoff一次,直到文件有更新才會(huì)重置為backoff。比如:?

如果設(shè)置成1,意味著去使能了退避算法,每隔backoff那么長的時(shí)間退避一次。

spool_size: spooler的大小,spooler中的事件數(shù)量超過這個(gè)閾值的時(shí)候會(huì)清空發(fā)送出去(不論是否到達(dá)超時(shí)時(shí)間),默認(rèn)1MB。

idle_timeout: spooler的超時(shí)時(shí)間,如果到了超時(shí)時(shí)間,spooler也會(huì)清空發(fā)送出去(不論是否到達(dá)容量的閾值),默認(rèn)1s。

registry_file: 記錄filebeat處理日志文件的位置的文件

config_dir: 如果要在本配置文件中引入其他位置的配置文件,可以寫在這里(需要寫完整路徑),但是只處理prospector的部分。

publish_async: 是否采用異步發(fā)送模式(實(shí)驗(yàn)功能)。

具體的一個(gè)yml采集配置樣例如下:該配置文件是filebeat采集數(shù)據(jù)的依據(jù),并根據(jù)需求添加必要配置,filebeat收集日志后發(fā)往logstash,配置如下:

cd FILEBEAT_HOME

nohup ./bin/filebeat -f config/test.conf /FILEBEAT_HOME/logs/filebeat.log

后臺(tái)啟動(dòng)filebeat,配置對應(yīng)的參數(shù)

啟動(dòng)多個(gè)filebeat配置,新建一個(gè)目錄(conf)存放多個(gè)filebeat的配置文件,

#nohup ./bin/filebeat -f conf/* /FILEBEAT_HOME/logs/filebeat.log

注意:一臺(tái)服務(wù)器只能啟動(dòng)一個(gè)filebeat進(jìn)程。

ps -ef |grep filebeat

kill -9 $pid

注意: 非緊急情況下,殺掉進(jìn)程只能用優(yōu)雅方式。

A、filebeat運(yùn)行不成功

問題:配置文件格式有問題,配置文件遵循yml文件格式, 多或少一個(gè)空格 都會(huì)導(dǎo)致啟動(dòng)問題,可以使用cmd命令窗口到filebeat安裝路徑下,使用filebeat.exe –c filebeat.yml 查看報(bào)錯(cuò),也可以看filebeat路徑下的log文件夾中的filebeat文件

B、 filebeat第一次運(yùn)行成功無數(shù)據(jù)

問題:a、路徑有問題

b、運(yùn)行條件設(shè)置有問題(例如只采集某個(gè)條件下的數(shù)據(jù),文件中沒有符合條件的數(shù)據(jù),這種情況下先注釋掉采集條件測試一下)

C、filebeat運(yùn)行成功第一次運(yùn)行后有數(shù)據(jù),第二次無數(shù)據(jù)

問題:filebeat讀取文件后會(huì)生成一個(gè)registry文件,注意windows機(jī)器中這個(gè)文件在手動(dòng)啟動(dòng)的情況下會(huì)在filebeat安裝目錄下的data文件夾中,服務(wù)注冊啟動(dòng)的情況下會(huì)在C盤下隱藏文件夾C:\ProgramData\filebeat中,刪除掉這個(gè)就可以了

D、filebeat運(yùn)行成功有數(shù)據(jù),但是新添加數(shù)據(jù)不讀取問題

問題:filebeat傳輸存在反壓機(jī)制,在數(shù)據(jù)量特別大或者傳輸通道不通的情況下,filebeat會(huì)進(jìn)行反壓,暫停發(fā)送,等到數(shù)據(jù)量穩(wěn)定或者數(shù)據(jù)傳輸通道正常的之后才會(huì)發(fā)送

Filebeat 保存每個(gè)文件的狀態(tài)并經(jīng)常將狀態(tài)刷新到磁盤上的注冊文件中。該狀態(tài)用于記住harvester正在讀取的最后偏移量,并確保發(fā)送所有日志行。如果輸出(例如Elasticsearch或Logstash)無法訪問,F(xiàn)ilebeat會(huì)跟蹤最后發(fā)送的行,并在輸出再次可用時(shí)繼續(xù)讀取文件。

在Filebeat運(yùn)行時(shí),每個(gè)prospector內(nèi)存中也會(huì)保存文件狀態(tài)信息,當(dāng)重新啟動(dòng)Filebeat時(shí),將使用注冊文件的數(shù)據(jù)來重建文件狀態(tài),F(xiàn)ilebeat將每個(gè)harvester在從保存的最后偏移量繼續(xù)讀取。

每個(gè)prospector為它找到的每個(gè)文件保留一個(gè)狀態(tài)。由于文件可以被重命名或移動(dòng),因此文件名和路徑不足以識(shí)別文件。對于每個(gè)文件,F(xiàn)ilebeat存儲(chǔ)唯一標(biāo)識(shí)符以檢測文件是否先前已被采集過。

如果你使用的案例涉及每天創(chuàng)建大量新文件,你可能會(huì)發(fā)現(xiàn)注冊文件增長過大。請參閱注冊表文件太大?編輯有關(guān)你可以設(shè)置以解決此問題的配置選項(xiàng)的詳細(xì)信息。

Filebeat保證事件至少會(huì)被傳送到配置的輸出一次,并且不會(huì)丟失數(shù)據(jù)。 Filebeat能夠?qū)崿F(xiàn)此行為,因?yàn)樗鼘⒚總€(gè)事件的傳遞狀態(tài)存儲(chǔ)在注冊文件中。

在輸出阻塞或未確認(rèn)所有事件的情況下,F(xiàn)ilebeat將繼續(xù)嘗試發(fā)送事件,直到接收端確認(rèn)已收到。如果Filebeat在發(fā)送事件的過程中關(guān)閉,它不會(huì)等待輸出確認(rèn)所有收到事件。

發(fā)送到輸出但在Filebeat關(guān)閉前未確認(rèn)的任何事件在重新啟動(dòng)Filebeat時(shí)會(huì)再次發(fā)送。這可以確保每個(gè)事件至少發(fā)送一次,但最終會(huì)將重復(fù)事件發(fā)送到輸出。

也可以通過設(shè)置shutdown_timeout選項(xiàng)來配置Filebeat以在關(guān)閉之前等待特定時(shí)間。

注意:Filebeat的至少一次交付保證包括日志輪換和刪除舊文件的限制。如果將日志文件寫入磁盤并且寫入速度超過Filebeat可以處理的速度,或者在輸出不可用時(shí)刪除了文件,則可能會(huì)丟失數(shù)據(jù)。

在Linux上,F(xiàn)ilebeat也可能因inode重用而跳過行。有關(guān)inode重用問題的更多詳細(xì)信息,請參閱filebeat常見問題解答。

Logback日志切割用的是JDK里File#renameTo()方法。如果該方法失敗,就再嘗試使用復(fù)制數(shù)據(jù)的方式切割日志。查找該方法相關(guān)資料得知,只有當(dāng)源文件和目標(biāo)目錄處于同一個(gè)文件系統(tǒng)、同volumn(即windows下的C, D盤)下該方法才會(huì)成功,切不會(huì)為重命名的后的文件分配新的inode值。也就是說,如果程序里一直保存著該文件的描述符,那么當(dāng)程序再寫日志時(shí),就會(huì)向重命名后的文件中寫。那么問題來了,filebeat是會(huì)一直打開并保存文件描述符的,那么它是怎么得知日志被切割這件事的呢?

如果只用當(dāng)前文件描述符一路監(jiān)控到天黑的話,那么當(dāng)logback把日志重命名后,filebeat仍然會(huì)監(jiān)控重命名后的日志,新創(chuàng)建的日志文件就看不到了。實(shí)際上,filebeat是通過close_inactive和scan_frequency兩個(gè)參數(shù)(機(jī)制)來應(yīng)對這種情況的:

(1)close_inactive

該參數(shù)指定當(dāng)被監(jiān)控的文件多長時(shí)間沒有變化后就關(guān)閉文件句柄(file handle)。官方建議將這個(gè)參數(shù)設(shè)置為一個(gè)比文件最大更新間隔大的值。比如文件最長5s更新一次,那就設(shè)置成1min。默認(rèn)值為5min。

(2)scan_frequency

該參數(shù)指定Filebeat搜索新文件的頻率(時(shí)間間隔)。當(dāng)發(fā)現(xiàn)新的文件被創(chuàng)建時(shí), Filebeat會(huì)為它再啟動(dòng)一個(gè) harvester 進(jìn)行監(jiān)控,默認(rèn)為10s。

綜合以上兩個(gè)機(jī)制,當(dāng)logback完成日志切割后(即重命名),此時(shí)老的harvester仍然在監(jiān)控重命名后的日志文件,但是由于該文件不會(huì)再更新,因此會(huì)在close_inactive時(shí)間后關(guān)閉這個(gè)文件的 harvester。當(dāng)scan_frequency時(shí)間過后,F(xiàn)ilebeat會(huì)發(fā)現(xiàn)目錄中出現(xiàn)了新文件,于是為該文件啟動(dòng) harvester 進(jìn)行監(jiān)控。這樣就保證了切割日志時(shí)也能不丟不重的傳輸數(shù)據(jù)。(不重是通過為每個(gè)日志文件保存offset實(shí)現(xiàn)的)

軟考必須要從初級開始考嗎?51CTO告訴你

 了解軟考的都知道軟考有三個(gè)級別,分別是初級、中級和高級,那么問題來來,軟考必須得從初級開始考嗎?下面呢51CTO就來簡單說一下。

這里51CTO告訴大家,不是必須的。軟考的報(bào)考是沒有學(xué)歷,年齡等等限制,并且報(bào)考資格考試時(shí),是可以任意選擇一個(gè)報(bào)考。

但是,大家不要因?yàn)檎f可以任意選擇,就直接往高級報(bào)名,雖然沒有限制,但是它在考試難度那里隱形的設(shè)置了一條線。

一般來說,無經(jīng)驗(yàn)者報(bào)考初級,通過的概率大,畢竟從來沒接觸過,當(dāng)然是考初級試試自己的水平更好。

相關(guān)專業(yè)的在校大學(xué)生和工作經(jīng)驗(yàn)比較少的朋友,建議報(bào)考中級資格考試。中級考試其實(shí)也不簡單,像軟件設(shè)計(jì)師、軟件評測師的考試內(nèi)容都會(huì)涉及到程序語言,這些如果是沒有經(jīng)驗(yàn)的初學(xué)者來考的話,難度有點(diǎn)太大。

高級資格考試就更難了,它的考試也是隱形的設(shè)置了門檻,像高項(xiàng)論文,如果你沒有項(xiàng)目方面的工作經(jīng)驗(yàn),你寫論文就是一大難關(guān)。高項(xiàng)論文如果未能詳細(xì)討論項(xiàng)目開發(fā)的實(shí)際經(jīng)驗(yàn)、而是從書本知識(shí)和根據(jù)資料摘錄進(jìn)行討論的,基本上就是不及格的分?jǐn)?shù)。

所以,雖然在層次級別上沒有限制大家,但是報(bào)考的時(shí)候大家還是要根據(jù)自己的實(shí)際情況來選擇。

往低了報(bào)是沒什么大問題的,頂多就是再多考一個(gè)層次級別高的證。往高了報(bào)考的,很有可能就什么也沒得到,浪費(fèi)了時(shí)間浪費(fèi)金錢。量力而行四個(gè)字大家一定要記住!

如何評價(jià)《精通Python網(wǎng)絡(luò)爬蟲》作者韋瑋

(1)關(guān)于我的職業(yè)問題

我對自己的定位是商人,說得好聽一點(diǎn)就是企業(yè)家,說得難聽一點(diǎn)就有各種叫法了,重慶韜翔網(wǎng)絡(luò)科技有限公司與上海萌優(yōu)電子商務(wù)有限公司都是我創(chuàng)辦的企業(yè),工商官方站點(diǎn)可以查證,并且都做得不錯(cuò)。

現(xiàn)在的商人不比以前的商人,其實(shí)現(xiàn)在的商人要求是比較高的,如果能力不行,很容易把公司弄倒閉。

所以,除了商人的本職工作之外,我也深入研究了一些技術(shù),并且在公司中,很多技術(shù)難點(diǎn)都是我親自帶團(tuán)隊(duì)解決的,常用的技術(shù)有Python、PHP、數(shù)據(jù)挖掘、容器云技術(shù)、Go語言等,因?yàn)椋谇捌诘臅r(shí)候,作為新技術(shù)產(chǎn)業(yè)項(xiàng)目的創(chuàng)始人,不懂技術(shù),會(huì)很吃虧的,所以最好還是根據(jù)項(xiàng)目需求來,需要用到什么技術(shù),那一定要去研究,不要擺創(chuàng)始人的架子。像馬化騰、李彥宏等前輩,其實(shí)對技術(shù)研究也是非常深的,雖然我暫時(shí)離他們的距離還非常非常遠(yuǎn),但是也要向他們看齊啊。當(dāng)然除了這些IT技術(shù)之外,我還關(guān)注運(yùn)營方面的技巧與思路。

再者,由于對這些技術(shù)的研究,有幸受到了51CTO學(xué)院的邀請,并且之后挺多學(xué)員喜歡的,自然我又多了一份兼職職業(yè),IT技術(shù)講師,同時(shí)后面也與CSDN、極客學(xué)院、天善智能等建立了合作,都是他們機(jī)構(gòu)中比較早入行的講師,再后來與出版社合作,將這些經(jīng)驗(yàn)整理成書,并又成了IT作家,所以現(xiàn)在導(dǎo)致了基本上每天都熬夜,因?yàn)楫吘谷说木τ邢?,同時(shí)兼顧太多,付出的時(shí)間也會(huì)很多,我經(jīng)常會(huì)在半夜回復(fù)郵件等,所以有時(shí)很可能半夜本書策劃編輯以及我的好友楊福川老師便收到了我的微信信息,這些凌晨三四點(diǎn)發(fā)消息的事情楊哥以及很多熟悉我的朋友都應(yīng)該遇到過。

其實(shí),這么多東西,我對自己的定位就是商人,一切公司需求的核心技術(shù)我都會(huì)去研究,并且由于基礎(chǔ)還不錯(cuò),所以基本上研究進(jìn)展會(huì)比較快,并且大部分時(shí)候都可以有利推動(dòng)項(xiàng)目的進(jìn)展。

所以,我不敢保證我寫的,我講的都是對的,但,都是干貨。我覺得把我的經(jīng)驗(yàn)分享給大家,大家能夠真正的學(xué)到東西,那就夠了,至于書籍是否完美,顯然是不完美的,但也會(huì)盡力去做到更好。

(2)關(guān)于作者為什么懂那么多的問題

自己夸自己多么有能力是一件非常蠢笨的事情,所以以下我只說明一下我做到了什么,以及我為什么能夠做到這些,關(guān)于我的才能怎樣,我想自有時(shí)間去驗(yàn)證,大家也自有自己的看法。

首先,上面已經(jīng)提到,我是做企業(yè)的,所以我會(huì)花更多的精力去研究市場、各種需要的技術(shù),我是一個(gè)提倡以需求作為導(dǎo)向的人。我認(rèn)為,如果帶著需求、問題去學(xué)習(xí)研究,效果會(huì)更好,并且技術(shù)很多都是用則進(jìn),不用則廢。所以如果你也在學(xué)習(xí)某一樣?xùn)|西,最好使用起來,比如,現(xiàn)在你有建站的需求,可以深入研究PHP技術(shù)以及相關(guān)框架,如果你有數(shù)據(jù)采集與數(shù)據(jù)挖掘需求,可以深入研究Python已經(jīng)相關(guān)技術(shù),如果公司需要構(gòu)建服務(wù)器數(shù)據(jù)中心或者容器技術(shù),你可以深入研究Go語言以及Docker等技術(shù)??傊?,帶著需求去學(xué)習(xí),效果會(huì)更好,我也是如此,這就是為什么我需要研究多種技術(shù)的原因,并且你研究得越多,你越會(huì)發(fā)現(xiàn)技術(shù)之間其實(shí)是相通的,你真正精通掌握了一門技術(shù),其他的技術(shù)很容易便能深入掌握。

其次,至于說我是全才,那就過獎(jiǎng)了,我不是全才,我也做不了全才,我只是懂得比較多,付出得比較多而已。

學(xué)什么編程語言

我想,每個(gè)人可能會(huì)根據(jù)工作要求的必然條件、興趣愛好的充分條件,做出相應(yīng)不同的選擇。

也有很多工程師在學(xué)習(xí)一門新的技術(shù)時(shí),會(huì)擔(dān)心自己所學(xué)的技術(shù)是否會(huì)越來越流行,盡量去避免學(xué)習(xí)了一個(gè)非常小眾和冷門的技術(shù)。

這種擔(dān)憂是可以理解的,畢竟,一門技術(shù)使用的人越多,對于早期學(xué)習(xí)這門技術(shù)的工程師來說,就有越多的好處和優(yōu)勢。

與此同時(shí),如果學(xué)習(xí)了一門冷門的技術(shù),不但英雄無用武之地,而且,在求職市場上也沒有什么優(yōu)勢。

要問我的入門編程語言選擇,我首選一定是 Python,其具體原因可以引用一位網(wǎng)友的回答,「學(xué)完 Python,可以上天」。

Python 流行度

如果大家身處互聯(lián)網(wǎng),一定能夠切身地感受到 Python 語言的流行程度。Python 語言由于其簡單易學(xué)、語法優(yōu)美、應(yīng)用領(lǐng)域廣泛等諸多優(yōu)點(diǎn),俘獲了大批的粉絲。

但是,拿不出確切的證據(jù),很多開發(fā)者也無法說服自己靜下心來學(xué)習(xí),接下來我們就用數(shù)據(jù)來說話。

編程語言排行榜

首先,我們了解一下近期編程語言排行榜中,Python 語言排名的變化。TIOBE 每個(gè)月發(fā)布的編程語言排行榜是編程語言流行趨勢的一個(gè)指標(biāo),每個(gè)月更新。

這份排行榜排名基于互聯(lián)網(wǎng)上有經(jīng)驗(yàn)的工程師、課程和第三方廠商的數(shù)量,使用搜索引擎進(jìn)行計(jì)算而得,一定程度上反映了編程語言的熱度。

從近三個(gè)月的排行看,Python 一直穩(wěn)定在排行榜的前五名。但編程語言排行榜僅能反應(yīng) Python 語言當(dāng)下的流行程度,并不能回答 Python 是否越來越流行這個(gè)問題。

不過,我們可以從 TIOBE 發(fā)布的歷史數(shù)據(jù)中找到一些線索。在 2015 年 2 月份發(fā)布的 TIOBE 編程語言排行榜中,Python 還排在第 8 名的位置,短短兩年半的時(shí)間,Python 語言已經(jīng)躥升到第 4 名,其上升速度不可謂不快。

Google trends

既然 TIOBE 的編程語言排行榜是根據(jù)搜索引擎得到的數(shù)據(jù),那么,我們也可以通過搜索引擎得到 Python 的搜索指數(shù),通過搜索指數(shù)來查看 Python 語言熱度的變化。圖1.1 給出了最近 4 年,Python 這個(gè)關(guān)鍵詞的 Google 搜索指數(shù)。

圖 1.1 中可以看到,從全球范圍來看,Python 語言是越來越流行的,其熱度超過了以往任何時(shí)候。

從中國的搜索指數(shù)來看,Python 語言已經(jīng)不是越來越流行這么簡單了,而是出現(xiàn)了爆發(fā)式的增長。2014 年以前,Python 在中國都屬于小眾語言,從 2014 年開始,Python 在中國越來越火爆。

一個(gè)有趣的事實(shí)是,在圖 1.1 給出的 Python 搜索指數(shù)中,Python 在中國的搜索每年都會(huì)有一個(gè)非常明顯的、向下的尖刺。

這個(gè)尖刺所在的時(shí)間正好與春節(jié)的時(shí)間吻合,說明春節(jié)對所有中國人都是一個(gè)重要的節(jié)日,在春節(jié)期間,很少有人還在鉆研技術(shù)了。

微信搜索指數(shù)

我們再來看一下最新發(fā)布的微信搜索指數(shù)中,Python 語言的熱度如何。圖 1.2 給出了Python、Java、PHP 和 Ruby 的微信搜索指數(shù)對比圖。

由于微信最多支持 4 個(gè)關(guān)鍵詞進(jìn)行比較,因此,我們選擇了 Java、PHP、Ruby 與 Python 進(jìn)行比較。

選擇 Java 是因?yàn)樗且婚T比 Python 使用更加廣泛的編程語言;選擇 PHP 是因?yàn)樗徽J(rèn)為是“世界上最好的”編程語言;選擇 Ruby 是因?yàn)?,它是所有編程語言中,與 Python 定位最接近的編程語言。

從圖中可以看出,Python 語言和 Java 語言的微信搜索指數(shù)遙遙領(lǐng)先,并且,Python 語言的微信搜索指數(shù)比 Java 語言還要略高一點(diǎn)。

基于以上的編程語言排行榜、Google 搜索指數(shù)和微信搜索指數(shù)這幾個(gè)不同的數(shù)據(jù)來源,檢視了 Python 語言的流行程度。

現(xiàn)在,我們可以非常明確的得出一個(gè)結(jié)論——Python 語言越來越流行,而且現(xiàn)在非?;稹?/p>

為什么 Python 語言會(huì)越來越流行

原因諸多,例如:

越來越多的工程師使用 Python 進(jìn)行大數(shù)據(jù)處理。

科研工作者開始使用 Python 來進(jìn)行數(shù)據(jù)分析。

系統(tǒng)管理員使用 Python 管理 Linux 系統(tǒng)。

開源的云計(jì)算平臺(tái) OpenStack 使用 Python 語言開發(fā)。

很多編程愛好者使用 Python 進(jìn)行爬蟲等。

但是,筆者認(rèn)為,Python 語言之所以越來越流行,使用越來越廣泛,主要還是得益于其自身的諸多優(yōu)點(diǎn)。對 Python 的愛與恨,可以歸集到那些不得不說的優(yōu)缺點(diǎn):

顯著的優(yōu)點(diǎn)

Python 語言擁有諸多的優(yōu)點(diǎn),以下幾個(gè)優(yōu)點(diǎn)特別顯著:

簡單易學(xué):Python 語言相對于其他編程語言來說,屬于比較容易學(xué)習(xí)的一門編程語言,它注重的是如何解決問題而不是編程語言的語法和結(jié)構(gòu)。

正是因?yàn)?Python 語言簡單易學(xué),所以,已經(jīng)有越來越多的初學(xué)者選擇 Python 語言作為編程的入門語言。

例如,在浙江省 2017 年高中信息技術(shù)改革中,《算法與程序設(shè)計(jì)》課程將使用 Python 語言替換原有的 VB 語言。

語法優(yōu)美:Python 語言力求代碼簡潔、優(yōu)美。在 Python 語言中,采用縮進(jìn)來標(biāo)識(shí)代碼塊,通過減少無用的大括號(hào),去除語句末尾的分號(hào)等視覺雜訊,使得代碼的可讀性顯著提高。

閱讀一段良好的 Python 程序就感覺像是在讀英語一樣,它使你能夠?qū)W⒂诮鉀Q問題,而不用太糾結(jié)編程語言本身的語法。

豐富強(qiáng)大的庫:Python 語言號(hào)稱自帶電池(Battery Included),寓意是 Python 語言的類庫非常的全面,包含了解決各種問題的類庫。無論實(shí)現(xiàn)什么功能,都有現(xiàn)成的類庫可以使用。

如果一個(gè)功能比較特殊,標(biāo)準(zhǔn)庫沒有提供相應(yīng)的支持,那么,很大概率也會(huì)有相應(yīng)的開源項(xiàng)目提供了類似的功能。合理使用 Python 的類庫和開源項(xiàng)目,能夠快速的實(shí)現(xiàn)功能,滿足業(yè)務(wù)需求。

開發(fā)效率高:Python 的各個(gè)優(yōu)點(diǎn)是相輔相成的。例如,Python 語言因?yàn)橛辛素S富強(qiáng)大的類庫,所以,Python 的開發(fā)效率能夠顯著提高。相對于 C、C++ 和 Java 等編譯語言,Python 開發(fā)者的效率提高了數(shù)倍。

實(shí)現(xiàn)相同的功能,Python 代碼的文件往往只有 C、C++ 和 Java 代碼的 1/5~1/3。雖然 Python 語言擁有很多吸引人的特性,但是,各大互聯(lián)網(wǎng)公司廣泛使用 Python 語言,很大程度上是因?yàn)?Python 語言開發(fā)效率高這個(gè)特點(diǎn)。

開發(fā)效率高的語言,能夠更好的滿足互聯(lián)網(wǎng)快速迭代的需求,因此,Python 語言在互聯(lián)網(wǎng)公司使用非常廣泛。

應(yīng)用領(lǐng)域廣泛:Python 語言的另一大優(yōu)點(diǎn)就是應(yīng)用領(lǐng)域廣泛,工程師可以使用 Python 做很多的事情。

例如,Web 開發(fā)、網(wǎng)絡(luò)編程、自動(dòng)化運(yùn)維、Linux 系統(tǒng)管理、數(shù)據(jù)分析、科學(xué)計(jì)算、人工智能、機(jī)器學(xué)習(xí)等等。

Python 語言介于腳本語言和系統(tǒng)語言之間,我們根據(jù)需要,既可以將它當(dāng)做一門腳本語言來編寫腳本,也可以將它當(dāng)做一個(gè)系統(tǒng)語言來編寫服務(wù)。

不可忽視的缺點(diǎn)

Python 并不是沒有缺點(diǎn)的,最主要的缺點(diǎn)有以下幾個(gè):

Python 的執(zhí)行速度不夠快:當(dāng)然,這也不是一個(gè)很嚴(yán)重的問題,一般情況下,我們不會(huì)拿 Python 語言與 C/C++ 這樣的語言進(jìn)行直接比較。

在 Python 語言的執(zhí)行速度上,一方面,網(wǎng)絡(luò)或磁盤的延遲,會(huì)抵消掉部分 Python 本身消耗的時(shí)間;另一方面,因?yàn)?Python 特別容易和 C 結(jié)合起來。

因此,我們可以通過分離一部分需要優(yōu)化速度的應(yīng)用,將其轉(zhuǎn)換為編譯好的擴(kuò)展,并在整個(gè)系統(tǒng)中使用 Python 腳本將這部分應(yīng)用連接起來,以提高程序的整體效率。

Python 的 GIL 鎖限制并發(fā):Python 的另一個(gè)大問題是,對多處理器支持不好。如果讀者接觸 Python 時(shí)間比較長,那么,一定聽說過 GIL 這個(gè)詞。

GIL 是指 Python 全局解釋器鎖(Global Interpreter Lock),當(dāng) Python 的默認(rèn)解釋器要執(zhí)行字節(jié)碼時(shí),都需要先申請這個(gè)鎖。這意味著,如果試圖通過多線程擴(kuò)展應(yīng)用程序,將總是被這個(gè)全局解釋器鎖限制。

當(dāng)然,我們可以使用多進(jìn)程的架構(gòu)來提高程序的并發(fā),也可以選擇不同的 Python 實(shí)現(xiàn)來運(yùn)行我們的程序。

Python 2 與 Python 3 不兼容:如果一個(gè)普通的軟件或者庫,不能夠做到后向兼容,那么,它會(huì)被用戶無情的拋棄了。

在 Python 中,一個(gè)槽點(diǎn)是 Python 2 與 Python 3 不兼容。因?yàn)?Python 沒有向后兼容,給所有的 Python 工程師帶來了無數(shù)的煩惱。

Python 如何上手?

了解了 Python 的整體趨勢及優(yōu)缺點(diǎn),接下來自然是如何學(xué)習(xí) Python?

在此筆者的建議是:

找一本淺顯易懂比較好的教程。無須多種選擇,僅精選一本,從頭到尾看完。將教程中的案例自己親手實(shí)踐一遍。

通過實(shí)際項(xiàng)目練手。如果僅是紙上談兵,可能過目就忘,所以最好是要有真實(shí)的項(xiàng)目做。注意,真實(shí)項(xiàng)目不一定非要是商業(yè)項(xiàng)目,例如自己動(dòng)手搭建網(wǎng)站,其關(guān)鍵是要核心功能完整。

最好能找到一個(gè)已經(jīng)會(huì) Python 的人。問他一點(diǎn)學(xué)習(xí)規(guī)劃的建議,然后在遇到卡殼的地方找他指點(diǎn)。這樣會(huì)事半功倍。但是,要學(xué)會(huì)搜索,學(xué)會(huì)如何更好地提問。

運(yùn)維要不要追趕 Python 的熱潮?

Python 這么熱,運(yùn)維要不要追趕 Python 的熱潮?現(xiàn)階段,掌握一門開發(fā)語言已經(jīng)成為高級運(yùn)維工程師的必備技能。

不會(huì)開發(fā),你就不能充分理解你們系統(tǒng)的業(yè)務(wù)流程,你就不能幫助調(diào)試、優(yōu)化開發(fā)人員開發(fā)的程序,因?yàn)殚_發(fā)人員有的時(shí)候很少關(guān)注性能的問題。

這些問題就得運(yùn)維人員來做,一個(gè)業(yè)務(wù)上線了,導(dǎo)致 CPU 使用過高,內(nèi)存占用過大,如果你不會(huì)開發(fā),你可能只能查到進(jìn)程級別,也就是哪個(gè)進(jìn)程占用這么多,然后呢? 然后就交給開發(fā)人員處理了,這樣怎么體現(xiàn)你的價(jià)值?

其次,不會(huì)一門開發(fā)語言的運(yùn)維,你就不能自己寫運(yùn)維平臺(tái)復(fù)雜的運(yùn)維工具,一切要借助于找一些開源軟件拼拼湊湊。

如果是這樣,那就請不要抱怨你的工資低,你的工作不受重視了,話說人家 FaceBook 一個(gè)運(yùn)維工程師管 2 萬臺(tái)機(jī)器,運(yùn)維工程師年薪十幾萬 USD,你以為人家是蓋的呢? 哪個(gè)不是身懷絕技,開發(fā)運(yùn)維兼?zhèn)?

Python 可以用來做什么

在我看來,基本上可以不負(fù)責(zé)任地認(rèn)為,Python 可以做任何事情。無論是從入門級選手到專業(yè)級選手都在做的爬蟲,還是 Web 程序開發(fā)、桌面程序開發(fā)還是科學(xué)計(jì)算、圖像處理,Python 都可以勝任。

或許是因?yàn)檫@種萬能屬性,周圍好更多的小伙伴都開始學(xué)習(xí) Python。Python 現(xiàn)在到底有多熱呢?我覺得我們可以看以下的這 2 組數(shù)據(jù)。

Python 排名穩(wěn)居前五

如上文的 Python 排行,不多說,得益于 Python 在多個(gè)領(lǐng)域的應(yīng)用都在逐漸變熱,Python 在 TIOBE 榜上已經(jīng)是穩(wěn)居前 5 了。

越來越多的公司在用 Python 做網(wǎng)站

除了大家熟悉的知乎、豆瓣,已經(jīng)有越來越多的公司開始用 Python 來快速搭建網(wǎng)站產(chǎn)品。相應(yīng)的,也有越來越多的公司開設(shè)了 Python Web 的職位。

根據(jù)我們的統(tǒng)計(jì),目前在招的 Python Web 職位,所需技能按優(yōu)先級中,Python 基礎(chǔ)和 Django 的優(yōu)先級是最高的。

具體的排序,大致可以參考以下的這張圖表:

運(yùn)維為什么要用 Python

Good question?。。槭裁床挥?PHP,JAVA, C++,Ruby?

這里我只能說,見人見智, 如果你碰巧已經(jīng)掌握了除 Python 之外的其他語言,那你愛用啥用啥,如果你是一個(gè)連 Shell 都還沒寫明白的新手,想學(xué)個(gè)語言的話,請用 Python,為什么呢?

首先,PHP 是跟 Python 比的最多的,其實(shí)他倆根本就不用比,為什么呢? 兩個(gè)語言適用性不同,PHP 主要適用于 Web 開發(fā),可以迅速的做出中小型,輕量級的 Web?網(wǎng)站。

但后端嘛,基本還是要借助其它語言,借助什么語言呢?Shell?Python?呵呵。而 Python 呢,是個(gè)綜合語言,前后端都可以,單拿出來比 Web,也一點(diǎn)不比 PHP 差,但為什么 Web 方向上 PHP 比 Python 要火?

先入為主嘛,PHP 90 年代誕生就是做 Web 的,Python 2000 年后才出現(xiàn) Web 框架,但論優(yōu)秀程度上,Python 的 Web 框架基本上出其無左,至少是跟 PHP 比。

搞個(gè)運(yùn)維小平臺(tái),用 Java?真心沒啥必要,在我看來,Java?就是穩(wěn)定的中年男人,穩(wěn)定、成熟、禿頂,而 Python 代表的就是青春,簡潔、快、干凈、帥!

C++/C,這個(gè)嘛,我只能說,如果你會(huì)了 Python,又會(huì) C 的話,那你會(huì)更吃香,但是不會(huì) C 的話,其實(shí)也無大礙。但對新手來講,不建議把 C 做為第一門語言開始學(xué)習(xí),為什么呢?打擊自信心…呵呵,你懂的。

Ruby,日本開發(fā)的,還不錯(cuò),風(fēng)格跟 Python 有點(diǎn)像,因?yàn)?Ruby on rails 出了名,國外用的比較多,國內(nèi),放心吧!沒戲,Python 已經(jīng)把它的想象空間都占死了。

當(dāng)然還有新的語言 GO,有些搞運(yùn)維的看見做開發(fā)的人員搞 GO,也想湊熱鬧,覺得是未來,我想說,別沒事跟風(fēng),GO 再成功,也不會(huì)變成運(yùn)維開發(fā)語言。

一個(gè)博士講過一句話,他說:程序效率高低,80% 都是寫程序的人決定了,語言本身就占 20%。

所以下次有人再說 Python 效率低的時(shí)候,請讓他先回去自己檢查下自己的程序多了多少無用的邏輯、循環(huán)等等。

這個(gè)博士自己用 Python 寫的 Web?程序,一臺(tái)服務(wù)器每天能處理上億請求,一秒并發(fā)近兩萬,什么 Web?框架這么牛 B?別問它是誰,它叫 tornado。

在選擇使用哪一門編程語言之前,我還想提醒讀者的是——“世界上只有兩種編程語言,一種是天天被人吐槽但卻被廣泛使用的編程語言,一種則是無人問津沒有存在感的編程語言”。

Python 語言作為排名第一的動(dòng)態(tài)類型語言,自然有它的道理。如果我們充分了解它的優(yōu)缺點(diǎn),在使用的時(shí)候,取其精華去其糟粕,那么,Python 一定是工程師解決問題的一把利劍。

--來自wechat公眾號(hào)《51CTO技術(shù)?!?/p>
文章標(biāo)題:51ctogo語言的簡單介紹
本文來源:http://weahome.cn/article/doddhod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部