網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
python學(xué)到什么程度
技術(shù)學(xué)到多厲害,才能順利進入 BAT? 營銷視頻課程
點擊上方“ CSDN ”,選擇“置頂公眾號”
關(guān)鍵時刻,第一時間送達!
上周日,我們寫了一篇題為《那些一心想要離開 BAT 的人,后來怎么樣了?》的文章,因著制度流程一體化、每天開不完的會議、改不完的需求等各種因素,身在 Google、騰訊里的人想要從「圍城」里逃離出來。不過,從留言中我們能夠看到大部分的想法還是 —— 得先進了 BAT,然后再選擇。有一位 HR 的看法很值得我們借鑒,在此也分享給大家:
作為一名 IT 的 HR,個人覺得圍城內(nèi)外都沒有錯,只要自己想好了就行!在職業(yè)初期,如果不想去 BAT,那是假話,可能人人說大公司的制度一體化??墒?,沒有經(jīng)歷過系統(tǒng)規(guī)范的體制,又談何發(fā)展?可能在每個人的職業(yè)后期,已經(jīng)閱盡千帆,倒是可以尋求職位與薪資等等的發(fā)展,這是每個人的最終歸宿……
那么,在這篇文章中,CSDN 專家博主、BAT 某廠 C++ 研發(fā)工程師張義飛(天千)分享了他是如何學(xué)好 Linux、C++,并搞定 BAT 面試的。一起來看看吧,希望他的經(jīng)歷與經(jīng)驗?zāi)軌蚪o大家?guī)硪欢ǖ膯l(fā)。
起始于 Linux、C++ 的技術(shù)進階之路
本科時,我對 Linux 特別感興趣,心中一直向往成為一名運維工程師,就開始沒日沒夜地看相關(guān)的書籍。
到了大約 2013 年前后,發(fā)現(xiàn) DevOps 開始流行起來了,就開始學(xué)習(xí) Python 希望成為一名 DevOps 工程師。但后來出去實習(xí)才發(fā)現(xiàn),從事運維相關(guān)的工作并不是我的追求。
苦于在合肥這樣的城市真的很難找到一份專職做 DevOps 的地方(當時在科大訊飛時,做的就是純運維的工作,該公司的 DevOps 也才有個雛形)。
所以我萌生了考研的想法,希望在 Linux 內(nèi)核這個層面做深造。最終,我選擇了西安郵電大學(xué),因為該校的陳莉君老師是我比較崇拜的對象,一直在拜讀她的《深入理解 Linux 內(nèi)核》一書。
后來上了研究生后,我開始專注 Linux 內(nèi)核、C/C++ 服務(wù)端開發(fā)等工作。至于為何選擇 C/C++,理由很簡單 —— 大家都去學(xué) Java 了,我要是也去學(xué) Java,那么我的優(yōu)勢何在?而且,C/C++ 也更偏向底層,是我比較感興趣的地方,所以最終選擇了 C/C++。
我的研究生三年所有的心思都投入到了 C/C++ 以及 Linux 內(nèi)核上,不敢說對 C/C++有什么獨特的見解,至少我覺得自己的學(xué)習(xí)經(jīng)歷還是可以給大家作為一個參考。
Linux 從運維到 DevOps
先簡單花一些篇幅介紹下我的這段學(xué)習(xí)經(jīng)歷。我的 Linux 啟蒙老師,還是要源于培訓(xùn),大學(xué)那會經(jīng)常有一些培訓(xùn)公司會來我們學(xué)習(xí)做免費培訓(xùn),想讓我們花錢去培訓(xùn)。記得當時最流行的兩個證書一個是 RHCE(RedHat 相關(guān)的認證),另外一個則是 CCNA、CCNP(思科網(wǎng)絡(luò)相關(guān)的認證),彼時的我深深地被 Linux、OpenSource、Linux 那酷炫的黑框框吸引了。
我理想中的 Hacker 應(yīng)該就是整天在黑框框中敲著一堆看不懂的字符。就這樣,開始一頭扎到 Linux 的世界中,我的第一本入門書是大學(xué)圖書館借的一本 Linux 用戶指南,具體的書名已經(jīng)記不起來了。
后來開始讀鳥哥的私房菜,這本書在當時真的很好,我沒有想太多,只知道瘋狂地讀完整本書,一遍、二遍……就這樣我讀了五遍,上面的實驗不停地練習(xí)、命令不停地練習(xí)。
但入門后,我開始迷茫了,因為不知道下一步該學(xué)什么,便又瘋狂地開始尋找下一個目標,也就有了“西安鵬程 Linux 網(wǎng)絡(luò)服務(wù)視頻”帶領(lǐng)著我進入到 Linux 最神秘的世界。
在這里,我發(fā)現(xiàn) Linux 能做很多很多有趣的事情,便開始搭建 Apache 服務(wù)器了,居然可以運行一個網(wǎng)站了。此外,我還學(xué)會了用 Linux 做 DHCP 服務(wù)器、DNS 服務(wù)器、VSFTP 服務(wù)器。一時間,我像是打開了一個新世界,后來,開始接觸網(wǎng)絡(luò)、搭建路由器、防火墻等等。
當時,覺得 Linux 真的很奇妙,我還利用 Linux 搭建了 HTTP 代理服務(wù)器,然后在宿舍通過學(xué)校實驗室部署的 HTTP 代理服務(wù)器來免費上網(wǎng)。
后來開始出去實習(xí),我就已經(jīng)可以實現(xiàn)不看任何文檔,從頭源碼編譯 LNMP,并搭建 Discuz! 論壇,就靠這個本事我找到了第一份實習(xí),工資是 1800 塊。
不過我卻發(fā)現(xiàn)工作了就沒有心思學(xué)習(xí),所以又回到了學(xué)校,再好好鞏固自己的基礎(chǔ),并下定決心開始考研深入學(xué)習(xí) Linux。在考研的期間,我發(fā)現(xiàn)了馬哥 Linux,這又是我人生中另外一個起點。
馬老師講課注重原理和實踐,七分原理三分實踐,通過他的課程我的 Linux 水平提升了一個很大的檔次,他的全套課程我完整地聽過三遍,每一個課程上的實驗都做了至少五遍以上,這奠定了我的 Linux 和 Shell 腳本的基礎(chǔ)。此后,在我的職業(yè)生涯中,Shell 腳本一直是我最強有力的助手,在研究生階段我還專門做過 Shell 腳本相關(guān)的分享。
在 2013 到 2014 年這段時間開始流行自動化運維、Python,于是我開始學(xué)習(xí) Python,還有現(xiàn)在比較流行的 Flask 框架,自認為應(yīng)該是最早一批 Flask 框架的用戶了。
當時國外人出的一本《Flask Web 開發(fā):基于 Python 的 Web 應(yīng)用開發(fā)實戰(zhàn)》書,我也是第一時間從某寶上買到并閱讀,只可惜后面轉(zhuǎn)到 C++ 后就沒再看過了,這期間用 Flask 做過一個博客。
在研究生階段,還幫同學(xué)和一些朋友運維過一些網(wǎng)站,做一些簡單的調(diào)優(yōu)和加固。到此為止,我的 DevOps 之路終結(jié)了,從此走向了 Linux C/C++ 的路上。
通過上面我的這些經(jīng)歷,給大家簡單地總結(jié)下 —— 我認為學(xué)好 Linux 運維需要做到以下幾點:
多做實驗,實驗環(huán)境完全可以通過 VMware 來模擬,模擬私有網(wǎng)絡(luò),模擬多臺機器,要搞懂 VMware 提供的集中網(wǎng)絡(luò)模式的工作原理(橋接網(wǎng)絡(luò)、宿主機網(wǎng)絡(luò)、NAT 等),這對整個 Linux 后續(xù)的學(xué)習(xí)幫助都非常之大,還可以通過虛擬機模擬 Grub 損壞并進行修復(fù)、模擬忘記密碼并通過單用戶模式修改密碼等等。
LNMP、DHCP、DNS、MySQL 等等這些網(wǎng)絡(luò)服務(wù)需要完全基于源碼來編譯,這樣更加有體感,對于編譯的參數(shù)要理解,因為通過 Yum 安裝的軟件包都是上一個穩(wěn)定版本,并不是最新穩(wěn)定版本,還有另外一點就是編譯安裝可以通過編譯參數(shù)對軟件進行一定的優(yōu)化。
Linux 基礎(chǔ)要扎實,底層原理要理解,典型的文件系統(tǒng)的組成、inode 和數(shù)據(jù)存放的位置、Linux 進程是如何調(diào)度的、調(diào)度算法有哪些、磁盤調(diào)度算法有哪些、TCP/IP 的三次握手和四次揮手的過程是如何的,網(wǎng)絡(luò)中的數(shù)據(jù)是如何流向的(參考《構(gòu)建高性能 Web 站點》),iptables 的三表五鏈、Nginx 的網(wǎng)絡(luò) IO 模型(這個很重要,你要能講清楚為什么 Nginx 要比 Apache 好),馬哥 Linux 對于這個部分的內(nèi)容講解是我最喜歡的,我強力推薦大家都去聽一聽馬哥的視頻。
英文文檔的閱讀能力,閱讀各類開源軟件的官方文檔是必經(jīng)之路,這個也是了解一個開源軟件最快的捷徑,如果你沒有一定的英文閱讀能力,那么你只能等到有人把這些文章翻譯成中文后你才能學(xué)習(xí)到。
寫博客,很多時候,看了視頻和書后,如果你不能講這些知識用你的語言表達出來,那么很大可能,你并沒有真正的理解這些知識,通過寫博客的方式會逼迫你回憶知識,然后總結(jié)出來,博客被大量人訪問也會在一定程度上激勵你,讓你有一定的成就感,促使你把博客寫的更好。
Shell 腳本的要熟悉,運維這條路上腳本會幫我們省掉不少體力活,此外必須要學(xué)習(xí)一門編程語言 Python、Golang 等。
C++ 從小白到入門
C++ 我是從研究生入學(xué)前的兩個月開始學(xué)習(xí),基本算是零基礎(chǔ)吧,就大學(xué)那會學(xué)了一些 C 的知識,經(jīng)常寫一個程序一堆“燙燙燙”,真的是到了本科畢業(yè)還沒搞懂 C 語言。
然后在這兩個月我開竅了,突然發(fā)現(xiàn)對 C 語言融匯貫通了, 而這一切要歸功于《C 和指針》這本書??偨Y(jié)一下,我認為 C 語言要學(xué)好必須理解三個概念。
什么是指針?指針和數(shù)組的關(guān)系。
程序分為哪幾個段,能說清楚全局變量,局部變量,靜態(tài)變量等分別屬于哪個段,各個段的特點是什么?
C 語言的編譯和鏈的接過程。
另外,真心不推薦在 Windows 上來學(xué)習(xí) C 語言,因為它屏蔽了太多的細節(jié),而這些細節(jié)卻又是 C 程序員不可或缺的一部分。
C 語言這個階段過去后,我開始學(xué)習(xí) Linux C 系統(tǒng)編程這個部分,最開始接觸的一本書就是《Unix/Linux 編程實踐教程》強力推薦給大家,這本書會給你介紹如何通過 man 手冊來幫助編程,如何去實現(xiàn) who、cat、ls、ps 等系統(tǒng)命令。通過這本書的學(xué)習(xí)會讓你對 Linux 上很多的原理有一個深刻的認識。
這本書學(xué)完后我就開始看 UNP 和 APUE,其中 APUE 我并不推薦給大家,我推薦給大家的是《Linux/UNIX 系統(tǒng)編程手冊》這本書的內(nèi)容更全面,更新。
建議大家在看這些書的時候可以做詳細的筆記和代碼練習(xí),在我的博客上就有我總結(jié)的文章。
系統(tǒng)編程 ok 后,就要重點看 UNP 了,看這本書的時候要找重點看,里面有的章節(jié)已經(jīng)過時了,還有一些章節(jié)對于我們目前來說用途并不大,比如 STCP 的部分。對于這本書重點有三個部分。
各個 socket API 的對應(yīng)到 OS,做了哪些事情,比如 connect 后,做了哪些事情?,accept 呢?,什么是 RST 報文?,什么是 SIGPIPE,如何觸發(fā)的?
網(wǎng)絡(luò) IO 模型,同步和異步,阻塞和非阻塞的概念,Linux 上各種網(wǎng)絡(luò) IO 模型的優(yōu)缺點對比,epoll、select、信號驅(qū)動 IO 等。
服務(wù)器的網(wǎng)絡(luò)編程模型,多線程、多進程、線程池等,各自優(yōu)缺點。
在我的博客上也有一篇文章介紹了相關(guān)的內(nèi)容,學(xué)完這個后,剩下的就靠多實踐和多讀一些開源的項目來積累自己的經(jīng)驗了,這里推薦 cjson、webbench、Tinyhttpd 等,代碼量都不大,很容易讀懂,在讀懂的基礎(chǔ)上可以進行適當?shù)母脑旌椭貙憽?/p>
C 語言和 Linux 系統(tǒng)編程這個部分結(jié)束后,就要開始踏入 C++ 的世界了,自從 C++11 出來后,我覺得 C++ 易學(xué)了,但是苦于現(xiàn)存的老的 C++ 代碼還是有很多。
所以我們不得不去學(xué)習(xí) C++98 相關(guān)的知識,這里我推薦《C++ primer》一書,注意是 C++ primer,不是《C++ primer plus》我看書的方法都比較老套,第一遍力求看懂,第二遍開始抄代碼,練習(xí),第三遍開始總結(jié)寫博客。
所以這本書我前前后后看了大半年, 后面又看了 C++編程思想上冊,Effective C++、深度理解 C++ 對象模型、Exceptional C++、深入理解 C++11 等經(jīng)典書籍,看書的模式基本上都是二到三遍,通過抄書上的代碼和寫博客來加深記憶。
看完這些書說真的,我覺得我的 C++ 還只是一個小白,真正蛻變要從讀《Linux C++ 服務(wù)端編程》這本書開始,通過這本書,我的 C++ 水平有了一個質(zhì)的飛躍。我理解 C++ 有以下幾個要點(只是部分):
RAII,這個很重要,是 C++ 的核心,很多學(xué)習(xí)了 C++ 的人都不知道 RAII;
值語義和對象語義,這個決定了你如何寫好一個 C++類
對象的生命周期,類的生命周期要清晰;
智能指針,現(xiàn)代 C++ 編程幾乎不太可能出現(xiàn) delete 語句,內(nèi)存泄漏的問題真的很少會出現(xiàn);
各種 STL 和 C++ 的一些坑,比如迭代器遍歷過程中如何刪除元素、std::list 的 size 接口的復(fù)雜度居然是 O(N)(C++11 已經(jīng)修正)等等;
善用 std::bind 和 std::function;
基于對象編程和面向?qū)ο缶幊痰膮^(qū)別;
移動語義很重要;
Lambda 的捕獲表達式;
搞清楚 C++ 的三五法則;
std::string 的實現(xiàn)方式,是否是線程安全的;
std::map 和 std::set 的底層數(shù)據(jù)結(jié)構(gòu)等。
到了這個階段后我就開始找工作了,上面的全部過程花費了研究生兩年的時間,后來找到了某 BAT 實習(xí)的工作后,我就一邊實習(xí),一邊讀《Effective Modern C++》,這本書我重點推薦給大家,在我的博客上也有全部的總結(jié),這本書講了很多 C++11 種的一些實現(xiàn)細節(jié)、坑以及建議。最后推薦一些 Linux 內(nèi)核相關(guān)的書籍和學(xué)習(xí)方法。
《深入理解 Linux 內(nèi)核架構(gòu)》
《Linux 環(huán)境編程 從應(yīng)用到內(nèi)核》
lwn
重點找自己感興趣的模塊來看,比如我就對文件系統(tǒng)。
通過內(nèi)核模塊來探索,不能只看代碼不練習(xí)。
網(wǎng)絡(luò)上有很多從頭開始編寫一個內(nèi)存文件系統(tǒng)的文章,在我的博客上也有一個系列講解 Linux 內(nèi)核模塊編程入門的文章,通過編寫 Linux 內(nèi)核模塊可以做很多有趣的事情,比如系統(tǒng)調(diào)用攔截、網(wǎng)絡(luò)攔截、做安全審計等等,通過編寫內(nèi)核模塊可以提高對 Linux 內(nèi)核學(xué)習(xí)的興趣。
BAT 求職之路
研究生階段我主要面試了阿里巴巴、騰訊、網(wǎng)易都是 C++ 研發(fā)工程師,只有網(wǎng)易拿到的是實習(xí) Offer,其他都是拿到了實習(xí)和正式的 Offer,就 C++ 這個崗位來說,阿里巴巴的要求明顯高于騰訊和網(wǎng)易,網(wǎng)易的 C++ 面試相對容易一些,問的很基礎(chǔ),感覺就是走個過場,都沒問什么太難的問題,可能因為是招實習(xí)吧。
騰訊的 C++ 面試偏基礎(chǔ),從 OS、網(wǎng)絡(luò)、編譯原理、算法等,問題都不太難,問的比較廣,阿里巴巴更側(cè)重知識面、底層原理、解決問題的能力等。
我阿里巴巴一共面了五面,問了很多 C++、算法、Linux 內(nèi)核等知識,在整個求職過程中,我做了以下幾件事:
刷 leetcode 的題目;
從??途W(wǎng)和 Google 上搜集面試題,分門別類地進行整理,每天都回顧一下;
拓寬自己的知識面,學(xué)習(xí)一些新的知識,比如當時流行的 Docker,更側(cè)重學(xué)習(xí)其原理;
加深自己對一些底層的 OS 知識的理解,比如 epoll 的原理、Docker 的 cgroup 機制和 namespace 機制的實現(xiàn)、文件系統(tǒng) VFS 的實現(xiàn)...
40個問題測試你在數(shù)據(jù)科學(xué)方面的python水平(1) 互聯(lián)網(wǎng)視頻課程
毫無疑問python在數(shù)據(jù)科學(xué)愛好者中越來越受歡迎了,重要的一點就是它為通用編程語言帶來了一個完整的體系。使用python你不僅可以轉(zhuǎn)換操作數(shù)據(jù),而且還可以在單一體系中創(chuàng)建強大的管道命令和機器學(xué)習(xí)流程。 在Analytics Vidhya,我們都非常喜歡使用python,大多數(shù)人拿它作為機器學(xué)習(xí)的首選工具。另外,如果你想學(xué)習(xí)深度學(xué)習(xí),很明顯,python在這個領(lǐng)域有著比其它編程語言更大的優(yōu)勢,它已經(jīng)形成了一個成熟的生態(tài)體系。 如果你正在為數(shù)據(jù)科學(xué)而學(xué)習(xí)python,那么這個測試可以用來幫助評估你在這方面的python水平。該測試是作為DataFest2017的一部分進行的,總共近1300人參加了這些測試,其中超過300人參加了此次測試。
下面是參加這個測試的人的得分情況:
你可以在這個網(wǎng)址獲得最終的得分情況:https://datahack.analyticsvidhya/contest/avdatafest-powertool-python-for-data-science/lb
下面列出一些統(tǒng)計結(jié)果:
平均分:14.16
中位數(shù):15
眾數(shù):0
Questions & Answers
問題1描述;
想必你肯定看過“How I met your mother”這個娛樂節(jié)目,當他們在玩這個游戲時,一旦有人說“but,um",那么每個人都必須喝一杯飲料?,F(xiàn)在我想改變一下這個游戲,用你的技術(shù)來玩這個游戲。游戲的目的就是你需要寫一個代碼來確定一個人在整個游戲中喝了多少杯飲料。
以下是一個樣本字段。
提示:已經(jīng)導(dǎo)入了python的正則表達式庫re
1)下面哪一個代碼能完成這個任務(wù)?
答案(C)你需要找到所有的大小寫字母“but",所以C是正確的
問題2描述給定以下字符串:
為了從上面的字符串中提取出Email地址的域名(例如“aaa","bbb",…),你寫了下面的代碼:
2) 上面代碼中的“___"處應(yīng)該填寫什么是數(shù)字呢? 提示:已經(jīng)導(dǎo)入了python的正則表達式庫re
A) 0 B) 1 C) 2 D) 3
參看正則表達式語法
問題3描述你的朋友有一個假設(shè) - “所有那些以字母”y“發(fā)音結(jié)尾的人(例如:Hollie)都是聰明的人?!闭堊⒁猓哼@個名字應(yīng)該以"y"的發(fā)音結(jié)束,而不能以字母“y"結(jié)尾"。現(xiàn)在,你需要根據(jù)這個假設(shè)從你們學(xué)校網(wǎng)站上抓取出這些數(shù)據(jù)。下面是已經(jīng)收集到的數(shù)據(jù)
你寫了下面的代碼來列出所有符合這個假設(shè)的人的名單:
3) 在正則表達式中,"pattern"處應(yīng)該怎么寫?
答案(B)你需要找出所有以"I"或"ie"結(jié)尾的字符串,所以B是正確的。
問題4描述給出下面兩個列表:
現(xiàn)在需要將兩個列表的元素合在一塊形成一個新的列表,如下
4) 你會選擇下面哪個選項呢?
5) 假設(shè)你已經(jīng)建立了一個機器學(xué)習(xí)模型,但是你現(xiàn)在不想用它,過一會再使用。下面哪個命令能滿足這個要求?
提示:庫pickle已被導(dǎo)入為pkl
問題6描述將下面的字符串轉(zhuǎn)換成日期值
6) 為了實現(xiàn)這個目的,“date_format"處的表達式應(yīng)該填寫出什么?
答案(D)
我已經(jīng)建立了一個簡單的神經(jīng)網(wǎng)絡(luò)用于圖像識別問題。現(xiàn)在,我想測試是否為隱藏層正確設(shè)置了權(quán)重和偏差。為了實現(xiàn)這個目的,我需要一個單位矩陣作為輸入。以下是我的單位矩陣:
7) 在python中如何生成這樣的單位矩陣?
提示:庫numpy已導(dǎo)入為np
答案(A)選項B應(yīng)該為np.identity(),選項C的語法是錯誤的。
8) 為了檢測兩個數(shù)組是否占據(jù)了同樣的空間,應(yīng)該怎么做? 例如,這里有兩個數(shù)組
當你改變第一個數(shù)組的值時,第二個數(shù)組也會隨著改變。如下所示將第一個數(shù)組的前五個數(shù)改為0,那么最終兩個數(shù)組的輸出結(jié)果如下:
A) 檢查兩個數(shù)組的內(nèi)存,如果相互匹配就是一樣的 B) 看“np.array_equal(e, f)”的輸出,如果結(jié)果是“True",那么他們是一樣的 C) 輸出"e.flags"和“f.flags"的值,如果其中一個是”False",則這兩個數(shù)組分配了同樣的空間 D) 以上都不對 答案(C)
問題9描述假設(shè)你要將訓(xùn)練數(shù)組(train_set)和測試數(shù)組(test_set)都加入到結(jié)果數(shù)組(resulting_set)中做數(shù)據(jù)處理,如下;
9) 你怎樣合并這兩個數(shù)組?
A和B都是水平放置,但是結(jié)果應(yīng)該是垂直放置。
問題10描述假設(shè)你正在調(diào)節(jié)Iris數(shù)據(jù)集的隨機數(shù)分布參數(shù)
10) 對于“random_state (Seed value)”,下面哪個是最好的值?
這里沒有最好的值,它取決于數(shù)據(jù)的具體情況
問題11描述當用numpy讀取csv文件時,你希望自動填充在“Date_Of_Joining"列丟失的日期值”01/01/2010"
11) 下面哪個命令能在讀取文件的同時補充丟失的值?
12) 在sklearn中如何導(dǎo)入一個決策樹分類器?
13) 您已將數(shù)據(jù)集以csv的格式上傳到Google的電子表格上并公開分享了。現(xiàn)在你想在python中訪問它,該怎么做? 提示:已導(dǎo)入StingIO庫
答案(A)
問題14 描述假設(shè)你有個3行2列的數(shù)據(jù)導(dǎo)入到pandas
現(xiàn)在你想在“features"列使用lambda函數(shù)
14) 下面的命令將會輸出什么?
問題15描述 我們有一個根據(jù)葡萄酒屬性來預(yù)測其質(zhì)量的多類別分類問題,現(xiàn)在數(shù)據(jù)“df"以dataframe的格式被導(dǎo)入了
表示質(zhì)量那列的值目前為1到10,現(xiàn)在要用二進制問題來代替,大于5的輸出為1,其它的輸出為0 15)下面哪個代碼能完成這個任務(wù)?
問題16描述 假設(shè)有一個DataFrame類型的數(shù)據(jù)
16)下面給出的兩種表達式有什么不同?
問題17描述
考慮一個函數(shù)“fun"
17) 現(xiàn)在你輸入了一個包含3個數(shù)的列表,下面的語句將會輸出哪個結(jié)果?
問題18 描述 Sigmoid函數(shù)經(jīng)常用來創(chuàng)建神經(jīng)網(wǎng)絡(luò)激活功能,他的定義如下:
18) 找到sigmoid函數(shù)的衍生函數(shù)是非常重要的,下面哪個選項能完成這個任務(wù)?
答案(C)問題19描述 將一個按月記錄的數(shù)據(jù)轉(zhuǎn)換為按日記錄,如下:
首先你必須將數(shù)據(jù)擴充到每個月(假設(shè)每月是30天) 19)下面哪個代碼能實現(xiàn)?
問題20-22
給出DataFrame格式的數(shù)據(jù)df
20 )現(xiàn)在要將df中的列“Count"改為”Click-Count"。有如下代碼,那么最終的語句將會輸出什么?
提示:庫Pandas已導(dǎo)入為pd
答案(B)
爬蟲學(xué)到什么程度可以去找工作 流量視頻課程
這篇文章會說說我自己的心得體驗,關(guān)于爬蟲、關(guān)于工作,僅供參考。
學(xué)到哪種程度
暫且把目標定位初級爬蟲工程師,簡單列一下吧:
(必要部分)
語言選擇:一般是了解Python、Java、Golang之一熟悉多線程編程、網(wǎng)絡(luò)編程、HTTP協(xié)議相關(guān)開發(fā)過完整爬蟲項目(最好有全站爬蟲經(jīng)驗,這個下面會說到)反爬相關(guān),cookie、ip池、驗證碼等等熟練使用分布式(非必要,建議)
了解消息隊列,如RabbitMQ、Kafka、Redis等具有數(shù)據(jù)挖掘、自然語言處理、信息檢索、機器學(xué)習(xí)經(jīng)驗熟悉APP數(shù)據(jù)采集、中間人代理大數(shù)據(jù)處理(Hive/MR/Spark/Storm)數(shù)據(jù)庫Mysql,redis,mongdb熟悉Git操作、linux環(huán)境開發(fā)讀懂js代碼,這個真的很重要如何提升
隨便看看知乎上的教程就可以入門了,就Python而言,會requests當然是不夠的,還需要了解scrapy和pyspider這兩個框架,scrapy_redis也是需要理解原理的。
分布式如何搭建、如何解決其中遇到內(nèi)存、速度問題。
什么叫全站爬取
最簡單的拿拉鉤來舉例,搜索關(guān)鍵詞,有30頁,不要以為把這30頁爬完就是全站爬取了,你應(yīng)該想方法把所有數(shù)據(jù)全部爬下來。
什么辦法,通過篩選縮小范圍,慢慢來就OK了。
同時,每個職位還會有推薦職位,再寫一個采集推薦的爬蟲。
這個過程需要注意的是如何去重,Mongo可以、redis也可以。
實際項目經(jīng)驗
這個面試中肯定會被人問道,如:
你爬過哪些網(wǎng)站日均最大采集量是多少你遇到哪些棘手問題,如何解決等等那么怎么找項目呢?比如我要爬微博數(shù)據(jù),去Github中搜索下,項目還算少嗎?
模擬登陸其實就是一步步的請求,保存cookie會話。
語言選擇
我自己建議是Python、Java、Golang最好都了解,Java爬蟲的也很多,但是網(wǎng)上教程幾乎都是Python的,悲哀。
最后說下Golang,Golang真的很牛逼,說個數(shù)字,Golang可以每分鐘下載網(wǎng)頁數(shù)量 2W ,Python可以嗎~~
關(guān)于反爬
常見的 UA、Refer等需要了解是什么東西,有些驗證的ID如何產(chǎn)生的,是否必要;關(guān)于IP池這塊我不了解,不多說,需要注意的是如何設(shè)計拉黑機制;模擬登陸也是必要的,fuck-login 可以研究下代碼,或者提PR。
如何判斷能力足夠
很簡單,給個任務(wù),爬取知乎上所有問題。
你會如何思考并設(shè)計這個項目?
40個問題測試你在數(shù)據(jù)科學(xué)方面的python水平(1) 互聯(lián)網(wǎng)視頻課程
毫無疑問python在數(shù)據(jù)科學(xué)愛好者中越來越受歡迎了,重要的一點就是它為通用編程語言帶來了一個完整的體系。使用python你不僅可以轉(zhuǎn)換操作數(shù)據(jù),而且還可以在單一體系中創(chuàng)建強大的管道命令和機器學(xué)習(xí)流程。 在Analytics Vidhya,我們都非常喜歡使用python,大多數(shù)人拿它作為機器學(xué)習(xí)的首選工具。另外,如果你想學(xué)習(xí)深度學(xué)習(xí),很明顯,python在這個領(lǐng)域有著比其它編程語言更大的優(yōu)勢,它已經(jīng)形成了一個成熟的生態(tài)體系。 如果你正在為數(shù)據(jù)科學(xué)而學(xué)習(xí)python,那么這個測試可以用來幫助評估你在這方面的python水平。該測試是作為DataFest2017的一部分進行的,總共近1300人參加了這些測試,其中超過300人參加了此次測試。
下面是參加這個測試的人的得分情況:
你可以在這個網(wǎng)址獲得最終的得分情況:https://datahack.analyticsvidhya/contest/avdatafest-powertool-python-for-data-science/lb
下面列出一些統(tǒng)計結(jié)果:
平均分:14.16
中位數(shù):15
眾數(shù):0
Questions & Answers
問題1描述;
想必你肯定看過“How I met your mother”這個娛樂節(jié)目,當他們在玩這個游戲時,一旦有人說“but,um",那么每個人都必須喝一杯飲料?,F(xiàn)在我想改變一下這個游戲,用你的技術(shù)來玩這個游戲。游戲的目的就是你需要寫一個代碼來確定一個人在整個游戲中喝了多少杯飲料。
以下是一個樣本字段。
提示:已經(jīng)導(dǎo)入了python的正則表達式庫re
1)下面哪一個代碼能完成這個任務(wù)?
答案(C)你需要找到所有的大小寫字母“but",所以C是正確的
問題2描述給定以下字符串:
為了從上面的字符串中提取出Email地址的域名(例如“aaa","bbb",…),你寫了下面的代碼:
2) 上面代碼中的“___"處應(yīng)該填寫什么是數(shù)字呢? 提示:已經(jīng)導(dǎo)入了python的正則表達式庫re
A) 0 B) 1 C) 2 D) 3
參看正則表達式語法
問題3描述你的朋友有一個假設(shè) - “所有那些以字母”y“發(fā)音結(jié)尾的人(例如:Hollie)都是聰明的人?!闭堊⒁猓哼@個名字應(yīng)該以"y"的發(fā)音結(jié)束,而不能以字母“y"結(jié)尾"?,F(xiàn)在,你需要根據(jù)這個假設(shè)從你們學(xué)校網(wǎng)站上抓取出這些數(shù)據(jù)。下面是已經(jīng)收集到的數(shù)據(jù)
你寫了下面的代碼來列出所有符合這個假設(shè)的人的名單:
3) 在正則表達式中,"pattern"處應(yīng)該怎么寫?
答案(B)你需要找出所有以"I"或"ie"結(jié)尾的字符串,所以B是正確的。
問題4描述給出下面兩個列表:
現(xiàn)在需要將兩個列表的元素合在一塊形成一個新的列表,如下
4) 你會選擇下面哪個選項呢?
5) 假設(shè)你已經(jīng)建立了一個機器學(xué)習(xí)模型,但是你現(xiàn)在不想用它,過一會再使用。下面哪個命令能滿足這個要求?
提示:庫pickle已被導(dǎo)入為pkl
問題6描述將下面的字符串轉(zhuǎn)換成日期值
6) 為了實現(xiàn)這個目的,“date_format"處的表達式應(yīng)該填寫出什么?
答案(D)
我已經(jīng)建立了一個簡單的神經(jīng)網(wǎng)絡(luò)用于圖像識別問題?,F(xiàn)在,我想測試是否為隱藏層正確設(shè)置了權(quán)重和偏差。為了實現(xiàn)這個目的,我需要一個單位矩陣作為輸入。以下是我的單位矩陣:
7) 在python中如何生成這樣的單位矩陣?
提示:庫numpy已導(dǎo)入為np
答案(A)選項B應(yīng)該為np.identity(),選項C的語法是錯誤的。
8) 為了檢測兩個數(shù)組是否占據(jù)了同樣的空間,應(yīng)該怎么做? 例如,這里有兩個數(shù)組
當你改變第一個數(shù)組的值時,第二個數(shù)組也會隨著改變。如下所示將第一個數(shù)組的前五個數(shù)改為0,那么最終兩個數(shù)組的輸出結(jié)果如下:
A) 檢查兩個數(shù)組的內(nèi)存,如果相互匹配就是一樣的 B) 看“np.array_equal(e, f)”的輸出,如果結(jié)果是“True",那么他們是一樣的 C) 輸出"e.flags"和“f.flags"的值,如果其中一個是”False",則這兩個數(shù)組分配了同樣的空間 D) 以上都不對 答案(C)
問題9描述假設(shè)你要將訓(xùn)練數(shù)組(train_set)和測試數(shù)組(test_set)都加入到結(jié)果數(shù)組(resulting_set)中做數(shù)據(jù)處理,如下;
9) 你怎樣合并這兩個數(shù)組?
A和B都是水平放置,但是結(jié)果應(yīng)該是垂直放置。
問題10描述假設(shè)你正在調(diào)節(jié)Iris數(shù)據(jù)集的隨機數(shù)分布參數(shù)
10) 對于“random_state (Seed value)”,下面哪個是最好的值?
這里沒有最好的值,它取決于數(shù)據(jù)的具體情況
問題11描述當用numpy讀取csv文件時,你希望自動填充在“Date_Of_Joining"列丟失的日期值”01/01/2010"
11) 下面哪個命令能在讀取文件的同時補充丟失的值?
12) 在sklearn中如何導(dǎo)入一個決策樹分類器?
13) 您已將數(shù)據(jù)集以csv的格式上傳到Google的電子表格上并公開分享了?,F(xiàn)在你想在python中訪問它,該怎么做? 提示:已導(dǎo)入StingIO庫
答案(A)
問題14 描述假設(shè)你有個3行2列的數(shù)據(jù)導(dǎo)入到pandas
現(xiàn)在你想在“features"列使用lambda函數(shù)
14) 下面的命令將會輸出什么?
問題15描述 我們有一個根據(jù)葡萄酒屬性來預(yù)測其質(zhì)量的多類別分類問題,現(xiàn)在數(shù)據(jù)“df"以dataframe的格式被導(dǎo)入了
表示質(zhì)量那列的值目前為1到10,現(xiàn)在要用二進制問題來代替,大于5的輸出為1,其它的輸出為0 15)下面哪個代碼能完成這個任務(wù)?
問題16描述 假設(shè)有一個DataFrame類型的數(shù)據(jù)
16)下面給出的兩種表達式有什么不同?
問題17描述
考慮一個函數(shù)“fun"
17) 現(xiàn)在你輸入了一個包含3個數(shù)的列表,下面的語句將會輸出哪個結(jié)果?
問題18 描述 Sigmoid函數(shù)經(jīng)常用來創(chuàng)建神經(jīng)網(wǎng)絡(luò)激活功能,他的定義如下:
18) 找到sigmoid函數(shù)的衍生函數(shù)是非常重要的,下面哪個選項能完成這個任務(wù)?
答案(C)問題19描述 將一個按月記錄的數(shù)據(jù)轉(zhuǎn)換為按日記錄,如下:
首先你必須將數(shù)據(jù)擴充到每個月(假設(shè)每月是30天) 19)下面哪個代碼能實現(xiàn)?
問題20-22
給出DataFrame格式的數(shù)據(jù)df
20 )現(xiàn)在要將df中的列“Count"改為”Click-Count"。有如下代碼,那么最終的語句將會輸出什么?
提示:庫Pandas已導(dǎo)入為pd
答案(B)
爬蟲學(xué)到什么程度可以去找工作 流量視頻課程
這篇文章會說說我自己的心得體驗,關(guān)于爬蟲、關(guān)于工作,僅供參考。
學(xué)到哪種程度
暫且把目標定位初級爬蟲工程師,簡單列一下吧:
(必要部分)
語言選擇:一般是了解Python、Java、Golang之一熟悉多線程編程、網(wǎng)絡(luò)編程、HTTP協(xié)議相關(guān)開發(fā)過完整爬蟲項目(最好有全站爬蟲經(jīng)驗,這個下面會說到)反爬相關(guān),cookie、ip池、驗證碼等等熟練使用分布式(非必要,建議)
了解消息隊列,如RabbitMQ、Kafka、Redis等具有數(shù)據(jù)挖掘、自然語言處理、信息檢索、機器學(xué)習(xí)經(jīng)驗熟悉APP數(shù)據(jù)采集、中間人代理大數(shù)據(jù)處理(Hive/MR/Spark/Storm)數(shù)據(jù)庫Mysql,redis,mongdb熟悉Git操作、linux環(huán)境開發(fā)讀懂js代碼,這個真的很重要如何提升
隨便看看知乎上的教程就可以入門了,就Python而言,會requests當然是不夠的,還需要了解scrapy和pyspider這兩個框架,scrapy_redis也是需要理解原理的。
分布式如何搭建、如何解決其中遇到內(nèi)存、速度問題。
什么叫全站爬取
最簡單的拿拉鉤來舉例,搜索關(guān)鍵詞,有30頁,不要以為把這30頁爬完就是全站爬取了,你應(yīng)該想方法把所有數(shù)據(jù)全部爬下來。
什么辦法,通過篩選縮小范圍,慢慢來就OK了。
同時,每個職位還會有推薦職位,再寫一個采集推薦的爬蟲。
這個過程需要注意的是如何去重,Mongo可以、redis也可以。
實際項目經(jīng)驗
這個面試中肯定會被人問道,如:
你爬過哪些網(wǎng)站日均最大采集量是多少你遇到哪些棘手問題,如何解決等等那么怎么找項目呢?比如我要爬微博數(shù)據(jù),去Github中搜索下,項目還算少嗎?
模擬登陸其實就是一步步的請求,保存cookie會話。
語言選擇
我自己建議是Python、Java、Golang最好都了解,Java爬蟲的也很多,但是網(wǎng)上教程幾乎都是Python的,悲哀。
最后說下Golang,Golang真的很牛逼,說個數(shù)字,Golang可以每分鐘下載網(wǎng)頁數(shù)量 2W ,Python可以嗎~~
關(guān)于反爬
常見的 UA、Refer等需要了解是什么東西,有些驗證的ID如何產(chǎn)生的,是否必要;關(guān)于IP池這塊我不了解,不多說,需要注意的是如何設(shè)計拉黑機制;模擬登陸也是必要的,fuck-login 可以研究下代碼,或者提PR。
如何判斷能力足夠
很簡單,給個任務(wù),爬取知乎上所有問題。
你會如何思考并設(shè)計這個項目?