Java 和 Python 思維方式的不同之處
本文是對未聞Code·知識星球上的開發經驗以及問題解答的總結。
一、開發經驗
語言決定思維方式
我剛剛開始工作的時候,其實特別討厭Java。因為它太繁瑣,就像一個絮絮叨叨的老奶奶。但后來因為工作原因強行寫了一年的Java,反而不那么討厭它了。
我們常說語言決定思維方式,Java和Python其實是兩種不同的思維方式。用Python寫代碼的時候,我思考的方式是從下到上,從低到高,實現一個個小組件,再組合成整體功能。但是Java先定義接口再實現接口,這種思維方式讓我寫代碼的時候先整體再局部,從高到低,從上到下,把一個功能拆解成一個個小部分。
另外,一開始我寫Python,喜歡用字典來存放各種數據。但是我從Java里面學到了bean的思想,用類來儲存數據,這個方法讓我的Python代碼可讀性,可維護性大大提高了。
當我們用Python開發,有時候你要反復跟組員說不能亂用lambda函數,不能一個變量賦值不同類型的數據,不要什么數據都往字典堆一層套一層,過兩天他們可能還是要違反,但Java從語法層面就能防止這種事情發生。
二、問題解答
1南哥,可以詳細說一下,類存儲數據嗎?
可愛的豆子——使用Beans思想讓Python代碼更易維護 這是我2016年的一篇文章,記住Python變量類型的三種方式,2016年的時候,python還么有dataclass這個內置模塊。現在用dataclass會更方便。
2南哥 ,出一篇https證書科普文章吧。比如:證書是干啥的,存在哪里了,怎么驗證的…再比如:怎么fildder也有自己的證書呢?這些玩意百度著雖能搞 原理并不很清楚
一日一技:HTTPS 證書和中間人攻擊的原理
3提問:目前還有辦法爬知乎僅會員可完整閱讀帖子內容嗎?目前知乎會員可完整閱讀的帖子只能在 app 中可讀web 小程序都不行,airtest 現在不顯示回答的內容,fd 抓包在 app 內無網絡 (手機自帶的瀏覽器可以訪問網絡排除了fd設置問題)
爬蟲只能爬到人眼能看到的內容。如果服務器不返回全文,爬蟲自然爬不到。
41s1000并發的問題,之前用多線程等都達不到要求,找到了問題所在,之前一直用的是collection 中的deque作為隊列,今天換成了queue 并發一下子到了1000+..但queue底層是用了deque 為啥還會差別那么大?
誰告訴你queue的底層是deque?
deque底層是雙向鏈表。queue不是。
5提問:南哥,有辦法抓去到微信小程序接口getuserinfo返回的數據嗎?
有。你可以用mitmproxy監控手機的http請求。攔截這個接口的返回信息。我的爬蟲書上面講到了具體的方法,可以在微信讀書上面搜索我的名字就能找到我的書,綠皮那本。
6接問題5,可是這樣不繞過安卓微信的sslpining,能抓到數據嗎?有沒有辦法電腦微信抓取呢?這樣方便一點
用ios
7提問:南哥,requests的 r.raw和r.content有什么大區別,獲取的數據都屬于bytes類型呀?
官網原文:In the rare case that you’d like to get the raw socket response from the server, you can access r.raw. If you want to do this, make sure you set stream=True in your initial request.
.raw是socket返回的內容。完全沒有經過修改。而.content是經過修改和轉碼的。如果網站返回的是gzip或者deflate的內容,.content會自動解開
8請教一個問題:想監控一個git工程,當git工程新建分支,或者指定分支有提交時,自動觸發一個持續集成任務,這個需求,我應該用什么方法實現呢?
如果你用的是GitHub,可以通過GitHub action。如果你用的gitlab,它有一個東西叫做webhook,讓你填寫一個網址,每次提交會調用一次這個網址
9提問:號內文章多線程事件監控一日一技:Python多線程的事件監控文章示例代碼中eve是類外定義的全局變量,self.event可以算類內部實例方法的局部變量。兩個變量為何是同一個對象呢?
我用參數傳進去了,代碼第17行