01-撩課-Python面試寶典-第一篇
一. 儘可能詳細的描述出一個應用軟體, 比如QQ, 在計算機中執行時涉及的軟硬體, 以及說明我們程式設計的側重點?
- 電腦開機, 從硬碟中(外部儲存裝置)載入作業系統(系統軟體)到記憶體(內部儲存裝置), 並執行作業系統
- 下載QQ軟體(網路請求)到本地電腦磁碟中(外部儲存裝置), 安裝後, 雙擊執行(載入到記憶體, 並基於作業系統通過CPU執行程式內的指令)
- 通過QQ傳送語音或視訊: 使用麥克風採集音訊或者連同攝像頭採集視訊(輸入裝置), 傳送給對方(網路請求)
- 所以, 基於以上, 我們程式設計主要指的是根據需求, 使用某一種程式語言, 編寫出不同的功能程式碼(網路請求, 資料處理, GUI介面展示等等), 最後結合各種文件素材(程式圖示圖片, 音訊, 配置檔案等等) 組成一個完整的"應用軟體"; 打包好相關的執行環境, 供他人執行使用.
二. 嘗試解釋下, 我們作為開發人員, 在以後的公司實際開發中, 常打交道的部門, 以及打交道的經驗?
首先搞清楚, 一個專案開發的部門組成, 大致如下:
(1) 產品經理
負責制定需求, 產品原型圖的設計, 和程式設計師幹架等
就是, 咱們做的到底都是啥玩意, 哪些功能要做, 哪些不要做, 比如, 讓手機殼隨著使用者心情變色; 這都是極品產品經理;
還有一個可怕的就是, 像一些小公司, 啥都不懂的老闆也會跟著提需求; 和老闆合作的其他老闆, 也會提一些神奇的建議(誰讓別人是甲方呢); 此時, 有節操的產品經理還會反抗, 沒節操的, 哎, 都轉移給了開發人員… 去做吧, 老闆說的, 一句話, 我們開發人員就想著法弄吧
(2) 專案經理(有的兼任開發人員);
根據原型圖負責將需求轉換成實施步驟, 搭建好基本的專案結構, 並配置好原始碼環境; 分配給不同的小弟去做; 還會排程其他部門, 比如美工, 來提供相關素材; 而且, 專案經理會跟進專案開發進度, 就是看著你幹活, 每天做的啥玩意; 有的技術難點小弟搞不定, 就得自己上;
(3) 各角色開發人員
職責就是根據分配的需求, 進行程式碼實現, 簡稱"碼農", “碼畜”…
通常除下編寫程式碼外, 還需要背鍋
開發大致分為前端和後端, 不管你處於哪一端, 都需要和另外一端人溝通; 比如後端, 需要提供介面, 編寫好介面文件; 前端根據介面文件傳送請求, 獲取和上傳資料;
兩者之間, 相親相愛, 一起調Bug, 一起和提出惡意需求的產品幹架;
所以, 除下敲程式碼外, 鍛鍊好身體也很重要;
(4) 和隊友打交道
一般我們開發, 很少一個人獨立開發, 根據專案大小不同, 分配的人員也大概在3-5人最為常見; 與他們溝通是最常見的事;
而且一般專案任務劃分, 是模組化, 元件化, 或者前後端分離等等方式, 儘可能保證大家都能同步開發, 而互相不干擾; 不然倆人做同一個功能, 那就亂套了;
此時, 最需要注意的問題, 其實是在於程式碼合併的問題; 也就是原始碼管理工具(git/svn); 你可以這麼理解, 我們大家寫不同功能的程式碼, 最終肯定要合到一個地方組成一份完整的, 可執行的程式程式碼;
但因為一個專案程式碼, 不管怎麼劃分, 都肯定有一些公共部分程式碼, 那此時, 大家的對公共部分的程式碼修改就可能在提交時產生衝突;
此時, 要求我們以下幾點:
(1) 修改公共程式碼時, 說一聲;
(2) 每天開始編寫程式碼前, 儘可能先從伺服器下載最新程式碼;
(3) 別亂刪別人東西, 也別改別人程式碼, 讓別人自己改; 切記
(4) 沒事多寫點註釋, 不然大家沒法溝通, 特別是寫SDK的; 不然很容易被打, 雖然每個程式設計師自己都不想寫, 但都要求別人寫的;
(5) 儘可能寫完一部分程式碼就提交, 避免產生大量衝突; 而且要先提交, 一旦產生衝突留給隊友解決; 你回家吃飯;
(6) 多做測試, 提交正確程式碼
(7) 測試時, 單獨開一個分支(理解為單獨一份程式碼); 別直接在正式專案那份程式碼中做
(8) 對新人好點好伐? 大家都是這麼過來的
三. 作為碼農必須瞭解程式語言的概念, 請闡述
機器語言
- 全部都是由0和1的二進位制程式碼組成, 可以由計算機直接執行, 效率最高;
- 但因為人看不懂, 不好理解, 所以不適合程式設計使用;
例如
1+1 對應程式碼如下
0000000000000001 1101100100 0000000000000001
組合語言
- 使用了一些助記符來代替0和1, 相對來說更好理解一些;
例如
1+1 對應程式碼如下
mov ax,1
add ax,ax
- 最終還是要轉換為機器語言執行, 多了一層轉換, 所以效率低於機器語言;
- 通用性依然不強,理解較差,學習曲線大, 編寫大型程式繁雜;
- 但因為其效率高, 所以在某些特殊行業中,還是有不少使用;
高階語言
- 接近於人類自然語言的單詞和符號來表述低階語言(機器和彙編);
例如
1+1 對應程式碼就是 1+1
- 可閱讀性, 可移植性較高
- 缺點就是效率不如機器語言和組合語言高;
四. Python語言的簡介
- 定位
一門解釋型的高階程式語言
也可以說先編譯後解釋
因為沒法嚴格的劃定編譯和解釋的概念
- 作者
Guido van Rossum(吉多·範羅蘇姆), 人稱“龜叔”
荷蘭人
1991年初,Python釋出了第一個公開發行版
- 特點
簡單
語法簡單
豐富的庫支撐
優雅
可移植性
程式碼規範性
膠水語言
- 應用領域
Web全棧開發
圖形介面開發
大資料
人工智慧
爬蟲
系統網路運維
雲端計算系統管理
…
- Python版本
目前流行版本兩個
Python2.x
Python3.x