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




















