python爬蟲(chóng) 面試常見(jiàn)問(wèn)題

frida

frida 注入是基于 ptrace實(shí)現(xiàn)的。frida 調(diào)用ptrace向目標(biāo)進(jìn)程注入了一個(gè)frida-agent-xx.so文件。后續(xù)騷操作是這個(gè)so文件跟frida-server通訊實(shí)現(xiàn)的窄刘。
frida 動(dòng)態(tài)插樁工具 插入一些代碼到原生的app的內(nèi)存空間,原生平臺(tái)可以是 mac linux win android ios 而且 frida是開(kāi)源的

Xposed 框架

安卓所有的APP進(jìn)程是用 Zygote(孵化器)進(jìn)程啟動(dòng)的钩述。
Xposed替換了 Zygote 進(jìn)程對(duì)應(yīng)的可執(zhí)行文件/system/bin/app_process,每啟動(dòng)一個(gè)新的進(jìn)程项戴,都會(huì)先啟動(dòng)xposed替換過(guò)的文件,都會(huì)加載xposed相關(guān)代碼肤无。這樣就注入了每一個(gè)app進(jìn)程先蒋。

兩種方法分別使用了Android、python+JS作為開(kāi)發(fā)語(yǔ)言進(jìn)行hook宛渐。

python中requests里 .text和.content方法的區(qū)別
.text是現(xiàn)成的字符串竞漾,
.content還要編碼,
但是.text不是所有時(shí)候顯示都正常窥翩,
這是就需要用.content進(jìn)行手動(dòng)編碼业岁。
異步與非阻塞的區(qū)別
異步:調(diào)用在發(fā)出之后,這個(gè)調(diào)用就直接返回寇蚊,不管有無(wú)結(jié)果
非阻塞:關(guān)注的是程序在等待調(diào)用結(jié)果(消息笔时,返回值)時(shí)的狀態(tài),指在不能立刻得到結(jié)果之前仗岸,該調(diào)用不會(huì)阻塞當(dāng)前線程
scrapy詳細(xì)工作流程
1.首先Spiders(爬蟲(chóng))將需要發(fā)送請(qǐng)求的url(requests)經(jīng)ScrapyEngine(引擎)交給Scheduler(調(diào)度器)允耿。

2.Scheduler(排序,入隊(duì))處理后扒怖,經(jīng)ScrapyEngine右犹,DownloaderMiddlewares(可選,主要有User_Agent, Proxy代理)交給Downloader姚垃。

3.Downloader向互聯(lián)網(wǎng)發(fā)送請(qǐng)求念链,并接收下載響應(yīng)(response)。將響應(yīng)(response)經(jīng)ScrapyEngine,SpiderMiddlewares(可選)交給Spiders掂墓∏矗     

4.Spiders處理response,提取數(shù)據(jù)并將數(shù)據(jù)經(jīng)ScrapyEngine交給ItemPipeline保存(可以是本地君编,可以是數(shù)據(jù)庫(kù))跨嘉。

5.提取url重新經(jīng)ScrapyEngine交給Scheduler進(jìn)行下一個(gè)循環(huán)。直到無(wú)Url請(qǐng)求程序停止結(jié)束吃嘿。

Scrapy去重原理

1.Scrapy本身自帶有一個(gè)中間件;
2.scrapy源碼中可以找到一個(gè)dupefilters.py去重器;
3.需要將dont_filter設(shè)置為False開(kāi)啟去重祠乃,默認(rèn)是True,沒(méi)有開(kāi)啟去重兑燥;
4.對(duì)于每一個(gè)url的請(qǐng)求亮瓷,調(diào)度器都會(huì)根據(jù)請(qǐng)求得相關(guān)信息加密得到一個(gè)指紋信息,并且將指紋信息和set()集合中的指紋信息進(jìn)行 比對(duì)降瞳,如果set()集合中已經(jīng)存在這個(gè)數(shù)據(jù)嘱支,就不在將這個(gè)Request放入隊(duì)列中;
5.如果set()集合中沒(méi)有存在這個(gè)加密后的數(shù)據(jù),就將這個(gè)Request對(duì)象放入隊(duì)列中挣饥,等待被調(diào)度除师。
scrapy和scrapy-redis有什么區(qū)別?為什么選擇redis數(shù)據(jù)庫(kù)扔枫?
1) scrapy是一個(gè)Python爬蟲(chóng)框架汛聚,爬取效率極高,具有高度定制性短荐,但是不支持分布式倚舀。而scrapy-redis一套基于redis數(shù)據(jù)庫(kù)、運(yùn)行在scrapy框架之上的組件搓侄,可以讓scrapy支持分布式策略,
Slaver端共享Master端redis數(shù)據(jù)庫(kù)里的item隊(duì)列话速、請(qǐng)求隊(duì)列和請(qǐng)求指紋集合讶踪。
2) 為什么選擇redis數(shù)據(jù)庫(kù),因?yàn)閞edis支持主從同步泊交,而且數(shù)據(jù)都是緩存在內(nèi)存中的乳讥,所以基于redis的分布式爬蟲(chóng),對(duì)請(qǐng)求和數(shù)據(jù)的高頻讀取效率非常高廓俭。

python中使用的垃圾回收機(jī)制:

1. 引用計(jì)數(shù)

引用計(jì)數(shù)法有其明顯的優(yōu)點(diǎn)云石,如高效、實(shí)現(xiàn)邏輯簡(jiǎn)單研乒、具備實(shí)時(shí)性汹忠,一旦一個(gè)對(duì)象的引用計(jì)數(shù)歸零,內(nèi)存就直接釋放了。不用像其他機(jī)制等到特定時(shí)機(jī)宽菜。將垃圾回收隨機(jī)分配到運(yùn)行的階段谣膳,處理回收內(nèi)存的時(shí)間分?jǐn)偟搅似綍r(shí),正常程序的運(yùn)行比較平穩(wěn)铅乡。但是继谚,引用計(jì)數(shù)也存在著一些缺點(diǎn),
通常的缺點(diǎn)有:
邏輯簡(jiǎn)單阵幸,但實(shí)現(xiàn)有些麻煩花履。每個(gè)對(duì)象需要分配單獨(dú)的空間來(lái)統(tǒng)計(jì)引用計(jì)數(shù),這無(wú)形中加大的空間的負(fù)擔(dān)挚赊,并且需要對(duì)引用計(jì)數(shù)進(jìn)行維護(hù)诡壁,在維護(hù)的時(shí)候很容易會(huì)出錯(cuò)。
在一些場(chǎng)景下咬腕,可能會(huì)比較慢欢峰。正常來(lái)說(shuō)垃圾回收會(huì)比較平穩(wěn)運(yùn)行,但是當(dāng)需要釋放一個(gè)大的對(duì)象時(shí)涨共,比如字典纽帖,需要對(duì)引用的所有對(duì)象循環(huán)嵌套調(diào)用,從而可能會(huì)花費(fèi)比較長(zhǎng)的時(shí)間举反。
循環(huán)引用懊直。這將是引用計(jì)數(shù)的致命傷,引用計(jì)數(shù)對(duì)此是無(wú)解的火鼻,因此必須要使用其它的垃圾回收算法對(duì)其進(jìn)行補(bǔ)充室囊。
也就是說(shuō),Python 的垃圾回收機(jī)制魁索,很大一部分是為了處理可能產(chǎn)生的循環(huán)引用融撞,是對(duì)引用計(jì)數(shù)的補(bǔ)充。

2. 標(biāo)記清除 解決循環(huán)引用的問(wèn)題

Python采用了“標(biāo)記-清除”(Mark and Sweep)算法粗蔚,解決容器對(duì)象可能產(chǎn)生的循環(huán)引用問(wèn)題尝偎。(注意,只有容器對(duì)象才會(huì)產(chǎn)生循環(huán)引用的情況鹏控,比如列表致扯、字典、用戶自定義類的對(duì)象当辐、元組等抖僵。而像數(shù)字,字符串這類簡(jiǎn)單類型不會(huì)出現(xiàn)循環(huán)引用缘揪。作為一種優(yōu)化策略耍群,對(duì)于只包含簡(jiǎn)單類型的元組也不在標(biāo)記清除算法的考慮之列)

跟其名稱一樣义桂,該算法在進(jìn)行垃圾回收時(shí)分成了兩步,分別是:

A)標(biāo)記階段世吨,遍歷所有的對(duì)象澡刹,如果是可達(dá)的(reachable),也就是還有對(duì)象引用它耘婚,那么就標(biāo)記該對(duì)象為可達(dá)罢浇;
B)清除階段,再次遍歷對(duì)象沐祷,如果發(fā)現(xiàn)某個(gè)對(duì)象沒(méi)有標(biāo)記為可達(dá)嚷闭,則就將其回收。

3. 隔代回收

在循環(huán)引用對(duì)象的回收中赖临,整個(gè)應(yīng)用程序會(huì)被暫停胞锰,為了減少應(yīng)用程序暫停的時(shí)間,Python 通過(guò)“分代回收”(Generational Collection)以空間換時(shí)間的方法提高垃圾回收效率兢榨。

分代回收是基于這樣的一個(gè)統(tǒng)計(jì)事實(shí)嗅榕,對(duì)于程序,存在一定比例的內(nèi)存塊的生存周期比較短吵聪;而剩下的內(nèi)存塊凌那,生存周期會(huì)比較長(zhǎng),甚至?xí)某绦蜷_(kāi)始一直持續(xù)到程序結(jié)束吟逝。生存期較短對(duì)象的比例通常在 80%~90% 之間帽蝶,這種思想簡(jiǎn)單點(diǎn)說(shuō)就是:對(duì)象存在時(shí)間越長(zhǎng),越可能不是垃圾块攒,應(yīng)該越少去收集励稳。這樣在執(zhí)行標(biāo)記-清除算法時(shí)可以有效減小遍歷的對(duì)象數(shù),從而提高垃圾回收的速度囱井。

python gc給對(duì)象定義了三種世代(0,1,2),每一個(gè)新生對(duì)象在generation zero中驹尼,如果它在一輪gc掃描中活了下來(lái),那么它將被移至generation one,在那里他將較少的被掃描庞呕,如果它又活過(guò)了一輪gc,它又將被移至generation two新翎,在那里它被掃描的次數(shù)將會(huì)更少。

gc的掃描在什么時(shí)候會(huì)被觸發(fā)呢?答案是當(dāng)某一世代中被分配的對(duì)象與被釋放的對(duì)象之差達(dá)到某一閾值的時(shí)候千扶,就會(huì)觸發(fā)gc對(duì)某一世代的掃描料祠。值得注意的是當(dāng)某一世代的掃描被觸發(fā)的時(shí)候骆捧,比該世代年輕的世代也會(huì)被掃描澎羞。也就是說(shuō)如果世代2的gc掃描被觸發(fā)了,那么世代0,世代1也將被掃描敛苇,如果世代1的gc掃描被觸發(fā)妆绞,世代0也會(huì)被掃描顺呕。

反爬對(duì)抗
  1. 通過(guò)Headers反爬蟲(chóng)
    從用戶請(qǐng)求的Headers反爬蟲(chóng)是最常見(jiàn)的反爬蟲(chóng)策略。很多網(wǎng)站都會(huì)對(duì)Headers的User-Agent進(jìn)行檢測(cè)括饶,還有一部分網(wǎng)站會(huì)對(duì)Referer進(jìn)行檢測(cè)(一些資源網(wǎng)站的防盜鏈就是檢測(cè)Referer)株茶。如果遇到了這類反爬蟲(chóng)機(jī)制,可以直接在爬蟲(chóng)中添加Headers图焰,將瀏覽器的User-Agent復(fù)制到爬蟲(chóng)的Headers中启盛;或者將Referer值修改為目標(biāo)網(wǎng)站域名。對(duì)于檢測(cè)Headers的反爬蟲(chóng)技羔,在爬蟲(chóng)中修改或者添加Headers就能很好的繞過(guò)僵闯。

  2. 基于用戶行為反爬蟲(chóng)
    還有一部分網(wǎng)站是通過(guò)檢測(cè)用戶行為,例如同一IP短時(shí)間內(nèi)多次訪問(wèn)同一頁(yè)面藤滥,或者同一賬戶短時(shí)間內(nèi)多次進(jìn)行相同操作鳖粟。
    大多數(shù)網(wǎng)站都是前一種情況,對(duì)于這種情況拙绊,使用IP代理就可以解決向图。可以專門(mén)寫(xiě)一個(gè)爬蟲(chóng)标沪,爬取網(wǎng)上公開(kāi)的代理ip榄攀,檢測(cè)后全部保存起來(lái)。這樣的代理ip爬蟲(chóng)經(jīng)常會(huì)用到谨娜,最好自己準(zhǔn)備一個(gè)航攒。有了大量代理ip后可以每請(qǐng)求幾次更換一個(gè)ip,這在requests或者urllib2中很容易做到趴梢,這樣就能很容易的繞過(guò)第一種反爬蟲(chóng)漠畜。
    對(duì)于第二種情況,可以在每次請(qǐng)求后隨機(jī)間隔幾秒再進(jìn)行下一次請(qǐng)求坞靶。有些有邏輯漏洞的網(wǎng)站憔狞,可以通過(guò)請(qǐng)求幾次,退出登錄彰阴,重新登錄瘾敢,繼續(xù)請(qǐng)求來(lái)繞過(guò)同一賬號(hào)短時(shí)間內(nèi)不能多次進(jìn)行相同請(qǐng)求的限制。

  3. 動(dòng)態(tài)頁(yè)面的反爬蟲(chóng)
    上述的幾種情況大多都是出現(xiàn)在靜態(tài)頁(yè)面尿这,還有一部分網(wǎng)站簇抵,我們需要爬取的數(shù)據(jù)是通過(guò)ajax請(qǐng)求得到,或者通過(guò)JavaScript生成的射众。首先用Firebug或者HttpFox對(duì)網(wǎng)絡(luò)請(qǐng)求進(jìn)行分析碟摆。如果能夠找到ajax請(qǐng)求,也能分析出具體的參數(shù)和響應(yīng)的具體含義叨橱,我們就能采用上面的方法典蜕,直接利用requests或者urllib2模擬ajax請(qǐng)求断盛,對(duì)響應(yīng)的json進(jìn)行分析得到需要的數(shù)據(jù)。

  4. js加密
    需要破解網(wǎng)頁(yè)上的js加密過(guò)程愉舔,代碼實(shí)現(xiàn) 或者 直接執(zhí)行該段js代碼

  5. cookies 反爬
    一些網(wǎng)站會(huì)有cookie反爬钢猛,cookie有時(shí)效性⌒停可以通過(guò)多賬號(hào)模擬登陸命迈,拿到cookie,維護(hù)一個(gè)cookie池火的。

  6. app逆向
    需要反編譯apk文件躺翻,hook到加密位置, 找到加密代碼卫玖。

  7. app加殼
    需要進(jìn)行脫殼處理公你,然后在進(jìn)行APP逆向操作

  8. so文件加密
    so文件為動(dòng)態(tài)加載的文件,libnative-lib.so中假瞬,函數(shù)只有調(diào)用中才會(huì)加載陕靠,加密是找到函數(shù)偏移和長(zhǎng)度,進(jìn)行位運(yùn)算脱茉,所以解密也就按照一樣的方式還原即可剪芥。

TensorFlow 是由 Google Brain 團(tuán)隊(duì)為深度神經(jīng)網(wǎng)絡(luò)(DNN)開(kāi)發(fā)的功能強(qiáng)大的開(kāi)源軟件庫(kù)

TensorFlow 則還有更多的特點(diǎn),如下:
支持所有流行語(yǔ)言琴许,如 Python税肪、C++、Java榜田、R和Go益兄。
可以在多種平臺(tái)上工作,甚至是移動(dòng)平臺(tái)和分布式平臺(tái)箭券。
它受到所有云服務(wù)(AWS净捅、Google和Azure)的支持。
Keras——高級(jí)神經(jīng)網(wǎng)絡(luò) API辩块,已經(jīng)與 TensorFlow 整合蛔六。
與 Torch/Theano 比較,TensorFlow 擁有更好的計(jì)算圖表可視化废亭。
允許模型部署到工業(yè)生產(chǎn)中国章,并且容易使用。
有非常好的社區(qū)支持豆村。
TensorFlow 不僅僅是一個(gè)軟件庫(kù)液兽,它是一套包括 TensorFlow,TensorBoard 和   TensorServing 的軟件你画。
分布式鎖要滿足哪些要求呢抵碟? 保證大家訪問(wèn)這個(gè)資源數(shù)據(jù)是一致性
排他性:在同一時(shí)間只會(huì)有一個(gè)客戶端能獲取到鎖,其它客戶端無(wú)法同時(shí)獲取

避免死鎖:這把鎖在一段有限的時(shí)間之后坏匪,一定會(huì)被釋放(正常釋放或異常釋放)

高可用:獲取或釋放鎖的機(jī)制必須高可用且性能佳
基于 數(shù)據(jù)庫(kù)實(shí)現(xiàn) redis 基于Redis實(shí)現(xiàn)的鎖機(jī)制拟逮,主要是依賴redis自身的原子操作
樂(lè)觀鎖
 (1)鎖服務(wù)要有遞增的版本號(hào)version
 (2)每次更新數(shù)據(jù)的時(shí)候都必須先判斷版本號(hào)對(duì)不對(duì),然后再寫(xiě)入新的版本號(hào)
 (需要注意的是适滓,在InnoDB中只有字段加了索引的敦迄,才會(huì)是行級(jí)鎖,否者是表級(jí)鎖凭迹,所以這個(gè)id字段要加索引)
mysql 悲觀鎖 當(dāng)這條記錄加上排它鎖之后罚屋,其它線程是無(wú)法操作這條記錄的。

基于 ZooKeeper實(shí)現(xiàn) 是一個(gè)分布式的嗅绸、開(kāi)源的程序協(xié)調(diào)服務(wù)脾猛,是 hadoop 項(xiàng)目下的一 個(gè)子項(xiàng)目 他提供的主要功能包括:配置管理、名字服務(wù)鱼鸠、分布式鎖猛拴、集群管理。 就是使用它的臨時(shí)有序節(jié)點(diǎn)來(lái)實(shí)現(xiàn)的分布式鎖蚀狰。
當(dāng)某客戶端要進(jìn)行邏輯的加鎖時(shí)愉昆,就在zookeeper上的某個(gè)指定節(jié)點(diǎn)的目錄下,去生成一個(gè)唯一的臨時(shí)有序節(jié)點(diǎn)麻蹋, 然后判斷自己是否是這些有序節(jié)點(diǎn)中序號(hào)最小的一個(gè)跛溉,如果是,則算是獲取了鎖扮授。如果不是芳室,則說(shuō)明沒(méi)有獲取到鎖哟绊,那么就需要在序列中找到比自己小的那個(gè)節(jié)點(diǎn)俯艰,并對(duì)其調(diào)用exist()方法,對(duì)其注冊(cè)事件監(jiān)聽(tīng)碴卧,當(dāng)監(jiān)聽(tīng)到這個(gè)節(jié)點(diǎn)被刪除了深夯,那就再去判斷一次自己當(dāng)初創(chuàng)建的節(jié)點(diǎn)是否變成了序列中最小的抖格。如果是,則獲取鎖咕晋,如果不是雹拄,則重復(fù)上述步驟。

app 雙向認(rèn)證

關(guān)于雙向證書(shū)認(rèn)證:客戶端有自己的密匙掌呜,并持有服務(wù)端的證書(shū)滓玖,服務(wù)端給客戶端發(fā)送數(shù)據(jù)時(shí),需要將服務(wù)端的證書(shū)發(fā)給客戶端驗(yàn)證质蕉,驗(yàn)證通過(guò)才運(yùn)行發(fā)送數(shù)據(jù)势篡,
同樣翩肌,客戶端請(qǐng)求服務(wù)器數(shù)據(jù)時(shí),也需要將自己的證書(shū)發(fā)給服務(wù)端驗(yàn)證禁悠,通過(guò)才允許執(zhí)行請(qǐng)求念祭。

創(chuàng)建一個(gè)證書(shū)的步驟:

(1)生成系統(tǒng)私鑰
(2)生成待簽名證書(shū)
(3)生成x509證書(shū), 用CA私鑰進(jìn)行簽名

InnoDB MyISAM

事務(wù)處理或是外鍵 全文索引

大尺寸的數(shù)據(jù)集趨向于選擇InnoDB方式,支持事務(wù)處理和故障恢復(fù)碍侦。數(shù)據(jù)庫(kù)的大小決定了故障恢復(fù)的時(shí)間長(zhǎng)短粱坤,InnoDB可以利用事務(wù)日志進(jìn)行數(shù)據(jù)恢復(fù),這會(huì)比較快瓷产。
而MyISAM可能會(huì)需要幾個(gè)小時(shí)甚至幾天來(lái)干這些事站玄,InnoDB只需要幾分鐘。

總結(jié):InnoDB的行鎖是針對(duì)索引加的鎖濒旦,不是針對(duì)記錄加的鎖株旷。并且該索引不能失效,否則都會(huì)從行鎖升級(jí)為表鎖尔邓。

多進(jìn)程灾常、多線程、協(xié)程

多進(jìn)程:密集CPU任務(wù)铃拇,需要充分使用多核CPU資源(服務(wù)器钞瀑,大量的并行計(jì)算)的時(shí)候,用多進(jìn)程慷荔。 multiprocessing
缺陷:多個(gè)進(jìn)程之間通信成本高雕什,切換開(kāi)銷大。


多線程:密集I/O任務(wù)(網(wǎng)絡(luò)I/O显晶,磁盤(pán)I/O贷岸,數(shù)據(jù)庫(kù)I/O)使用多線程合適。
threading.Thread磷雇、multiprocessing.dummy
缺陷:同一個(gè)時(shí)間切片只能運(yùn)行一個(gè)線程偿警,不能做到高并行,但是可以做到高并發(fā)唯笙。

Python的多線程:

GIL 全局解釋器鎖:線程的執(zhí)行權(quán)限螟蒸,在Python的進(jìn)程里只有一個(gè)GIL。

一個(gè)線程需要執(zhí)行任務(wù)崩掘,必須獲取GIL七嫌。

好處:直接杜絕了多個(gè)線程訪問(wèn)內(nèi)存空間的安全問(wèn)題。
壞處:Python的多線程不是真正多線程苞慢,不能充分利用多核CPU的資源诵原。

但是,在I/O阻塞的時(shí)候,解釋器會(huì)釋放GIL绍赛。

協(xié)程:又稱微線程蔓纠,在單線程上執(zhí)行多個(gè)任務(wù),用函數(shù)切換吗蚌,開(kāi)銷極小腿倚。不通過(guò)操作系統(tǒng)調(diào)度,沒(méi)有進(jìn)程褪测、線程的切換開(kāi)銷。genvent潦刃,monkey.patchall

多線程請(qǐng)求返回是無(wú)序的侮措,那個(gè)線程有數(shù)據(jù)返回就處理那個(gè)線程,而協(xié)程返回的數(shù)據(jù)是有序的乖杠。

缺陷:?jiǎn)尉€程執(zhí)行分扎,處理密集CPU和本地磁盤(pán)IO的時(shí)候,性能較低胧洒。處理網(wǎng)絡(luò)I/O性能還是比較高.

sort 與 sorted 區(qū)別:

sort 是應(yīng)用在 list 上的方法畏吓,sorted 可以對(duì)所有可迭代的對(duì)象進(jìn)行排序操作。

list 的 sort 方法返回的是對(duì)已經(jīng)存在的列表進(jìn)行操作卫漫,無(wú)返回值菲饼,而內(nèi)建函數(shù) sorted 方法返回的是一個(gè)新的 list,而不是在原來(lái)的基礎(chǔ)上進(jìn)行的操作列赎。

filter宏悦、map

def func(i):
    return i % 2 == 1

newlist = filter(func, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])   # filter 過(guò)濾
newlist1 = filter(lambda i: i % 2 == 1, a)
print(list(newlist))
print(list(newlist1))

r = map(lambda x: x ** 2, [1, 2, 3, 4, 5])     #  會(huì)根據(jù)提供的函數(shù)對(duì)指定序列做映射。
print(list(r))

mysql 事務(wù)

mysql  事務(wù)是由一組SQL語(yǔ)句組成的邏輯處理單元包吝,事務(wù)具有ACID屬性饼煞。
事務(wù) :是數(shù)據(jù)庫(kù)操作的最小工作單元,是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作诗越;這些操作作為一個(gè)整體一起向系統(tǒng)提交砖瞧,要么都執(zhí)行、要么都不執(zhí)行嚷狞;事務(wù)是一組不可再分割的操作集合
原子性(Atomicity):事務(wù)是一個(gè)原子操作單元块促。在當(dāng)時(shí)原子是不可分割的最小元素,其對(duì)數(shù)據(jù)的修改床未,要么全部成功褂乍,要么全部都不成功。

一致性(Consistent):事務(wù)開(kāi)始到結(jié)束的時(shí)間段內(nèi)即硼,數(shù)據(jù)都必須保持一致?tīng)顟B(tài)逃片。

隔離性(Isolation):數(shù)據(jù)庫(kù)系統(tǒng)提供一定的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的”獨(dú)立”環(huán)境執(zhí)行。

持久性(Durable):事務(wù)完成后褥实,它對(duì)于數(shù)據(jù)的修改是永久性的呀狼,即使出現(xiàn)系統(tǒng)故障也能夠保持。sx

觸發(fā)器

  觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程损离,主要是通過(guò)事件來(lái)觸發(fā)而被執(zhí)行的哥艇,他可以強(qiáng)化約束,來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性和一致性僻澎,可以跟蹤數(shù)據(jù)內(nèi)的操作從而不允許未經(jīng)許可的                 更新和變化貌踏,可以聯(lián)級(jí)運(yùn)算。只有表支持觸發(fā)器窟勃,視圖不支持觸發(fā)器

1祖乳、給手機(jī)安裝軟件
離線
將init_machine.sh,及android_package.zip上傳至/data/local/tmp目錄下
給手機(jī)安裝termux,此為命令行工具秉氧,打開(kāi)軟件
輸入su,切換至管理員賬戶
輸入cd data/local/tmp,因?yàn)樵剖謾C(jī)不能打/符眷昆,所以用tab鍵來(lái)湊齊。
輸入sh init_machine.sh,即可安裝好軟件和服務(wù)
usb線連
在電腦上輸入python -m uiautomator2 init即可
2汁咏、打開(kāi)ATX
打開(kāi)ATX 點(diǎn)擊"啟動(dòng)uiautomator"

3亚斋、打開(kāi)QpythonL
一定要先打開(kāi)這個(gè)軟件,不然你python腳本會(huì)上傳不成功攘滩,

打開(kāi)軟件后的順序?yàn)椋?    文件
    scripts

4帅刊、上傳腳本
將auto_test.py和wx_helper.py上傳至/storage/emulated/0/qpython/scripts文件夾下

5、運(yùn)行腳本
打開(kāi)QpythonL點(diǎn)擊auto_test.py文件漂问,點(diǎn)擊下方的三角符號(hào)

Web服務(wù)器網(wǎng)關(guān)接口(Python Web Server Gateway Interface厚掷,縮寫(xiě)為WSGI)是為Python語(yǔ)言定義的Web服務(wù)器和Web應(yīng)用程序或框架之間的一種簡(jiǎn)單而通用的接口。自從WSGI被開(kāi)發(fā)出來(lái)以后级解,許多其它語(yǔ)言中也出現(xiàn)了類似接口冒黑。

sekiro

sekiro是一個(gè)基于長(zhǎng)鏈接和代碼注入的Android private API暴露框架。

框架分為兩部分:

server
暴露一個(gè)TCP端口和兩個(gè)HTTP端口
管理通過(guò)TCP連接的client和user發(fā)來(lái)的http 請(qǐng)求
client
通過(guò)TCP和server連接勤哗,響應(yīng)server發(fā)來(lái)的請(qǐng)求
工作流程是這樣的:

client通過(guò)TCP和server建立長(zhǎng)連接
user發(fā)送http請(qǐng)求給server
server根據(jù)用戶發(fā)來(lái)的http請(qǐng)求的參數(shù)抡爹,通過(guò)TCP將請(qǐng)求轉(zhuǎn)發(fā)給client
client收到請(qǐng)求并響應(yīng)server
server將從client收到的請(qǐng)求返回給user

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市芒划,隨后出現(xiàn)的幾起案子冬竟,更是在濱河造成了極大的恐慌,老刑警劉巖民逼,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泵殴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拼苍,警方通過(guò)查閱死者的電腦和手機(jī)笑诅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吆你,你說(shuō)我怎么就攤上這事弦叶。” “怎么了妇多?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵伤哺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我者祖,道長(zhǎng)立莉,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任七问,我火速辦了婚禮蜓耻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烂瘫。我一直安慰自己媒熊,他們只是感情好奇适,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布坟比。 她就那樣靜靜地躺著,像睡著了一般嚷往。 火紅的嫁衣襯著肌膚如雪葛账。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,727評(píng)論 1 305
  • 那天皮仁,我揣著相機(jī)與錄音籍琳,去河邊找鬼。 笑死贷祈,一個(gè)胖子當(dāng)著我的面吹牛趋急,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播势誊,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼呜达,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了粟耻?” 一聲冷哼從身側(cè)響起查近,我...
    開(kāi)封第一講書(shū)人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎挤忙,沒(méi)想到半個(gè)月后霜威,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡册烈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年戈泼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矮冬,死狀恐怖谈宛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胎署,我是刑警寧澤吆录,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站琼牧,受9級(jí)特大地震影響恢筝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巨坊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一撬槽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趾撵,春花似錦侄柔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至究珊,卻和暖如春薪者,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剿涮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工言津, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人取试。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓悬槽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親瞬浓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子初婆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司瑟蜈,掛了不少烟逊,但最終還是拿到小米、百度铺根、阿里宪躯、京東、新浪位迂、CVTE访雪、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,254評(píng)論 11 349
  • 1.數(shù)據(jù)庫(kù)索引實(shí)現(xiàn)原理數(shù)據(jù)庫(kù)的索引是在存儲(chǔ)引擎層實(shí)現(xiàn)的详瑞,不同的存儲(chǔ)引擎有不同的實(shí)現(xiàn)方法,索引一般指的是B-Tree...
    gskobe0811閱讀 2,886評(píng)論 1 10
  • 搬運(yùn)自懦甲海客網(wǎng)大神總結(jié) extern關(guān)鍵字 extern修飾變量是個(gè)聲明坝橡,此變量/函數(shù)是在別處定義的,要在此處引用 ...
    leon4ever閱讀 3,661評(píng)論 0 9
  • 一 網(wǎng)絡(luò) TCP三次握手第一次握手:起初兩端都處于CLOSED關(guān)閉狀態(tài)精置,Client將標(biāo)志位SYN置為1计寇,隨機(jī)產(chǎn)生...
    柴柴總閱讀 244評(píng)論 0 0
  • 久違的晴天,家長(zhǎng)會(huì)脂倦。 家長(zhǎng)大會(huì)開(kāi)好到教室時(shí)番宁,離放學(xué)已經(jīng)沒(méi)多少時(shí)間了。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)赖阻。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評(píng)論 16 22