6000面試總結,兩周連續面試字節,餓了么,喜馬,b站,哈羅,得物,越卷越成長~

      網友投稿 815 2022-05-29

      聲明:該文為轉載,原文地址:6000字面試總結,兩周連續面試字節,餓了么,喜馬,b站,哈羅,得物,越卷越成長~

      十一月中旬離職后,休息了幾天,周末把簡歷寫好,周一開始投遞,到現在快兩個禮拜了,面試了上海的很多公司,比如字節跳動、阿里本地生活(餓了么)、喜馬拉雅、bilibili、游族、哈啰出行、得物等,比較幸運的是都走到了最后的流程,正好今天有空,做個總結。

      涉及質量保障的方法論基本都會詢問,其次是項目經驗和流程的問題,做了什么,產出了什么,遇到什么問題,怎么解決等等,這類問題基本上每家公司都會問到,所以大家需要提前準備一下,這些需要你根據實際的情況給出思考總結,最好能沉淀一些數據說明。作為測試人,很關心面試是否遇到算法代碼題之類,答案也是肯定的,下面的篇幅我也會分享下技術面試題。

      從一個被面試的心態來說,很多平時未必用得到,但需要通過這些去證明你比別人更強,所以沒有必要去討論面試題合不合理,抱怨沒有用,如果你不會繼續學習即可,這些也是我這段時間的真實的面試題,具體的我也不去對應公司,并不是為了讓你們去做面試前突擊,主要還是大家查漏補缺,看看自己的能力匹配度。

      第一部分,技術理論面試題。

      1,?什么是魔法函數?

      2,?什么是閉包?

      3,?深拷貝和淺拷貝的區別,并舉例說明。

      4,?如何在一個函數內部修改全局變量?

      5,?什么是單例模式?

      6, python中如何實現多線程?

      7, Flask和diango的區別有哪些?

      8, Pytest框架里面斷言有哪些類型?

      9, Is和==有什么區別?

      10,裝飾器有什么作用?

      第二部分,架構中間件性能面試題。

      1,?常用的中間件有哪些?如何測試它們?

      2,?集群和分布式有什么區別?

      3,?冪等實現原理是什么?

      4,?說說Redis有哪些特性,哪些地方容易出問題?

      5,?數據庫鎖有哪些類型,什么情況下需要這些鎖?

      6,?數據庫索引有哪些優點和缺點?

      第三部分,筆試部分,手擼代碼。

      1,?手寫一個裝飾器

      2,?寫一個函數,實現隨機一個數組,長度和元素不固定,輸出任意兩個元素相加結果為N的方法

      3,給定一個字符串,判斷其是否合法。說明:字符串內包含“(,),{,},[,]"對象,隨機位置,檢查同類型括號的對稱情況,如果存在左右對稱括號中間只有單獨一個括號的字符串,即為不合法。

      4,?一個數組內有隨機的10整數,隨機取三個元素,他們的和為0,寫個方法函數,返回所有的組合情況,要去除重復的組合內容

      5,?寫一個函數方法,實現輸入兩個日期,輸出兩個日期間隔的天數

      6,?隨機一個數組,求其中兩個元素乘積最大的組合。

      第四部分,系統設計

      1,請設計一個資產管理系統,簡述功能清單和邏輯,還有技術選型。

      上述的面試題大家可以先嘗試看看能否很好的回答出來,當然很多題目沒有唯一答案,主要考察思路這塊吧。

      下面是我對面試題的理解和解答,主要是freestyle的想法,僅供參考,也歡迎大家給出更深層次的思考,文案底部留言即可。

      第一部分,第一題什么是魔法函數?

      魔法函數,像“__init__”這樣的構造函數就是魔法函數,平時也經常用。魔法函數的作用是給類增加一些額外的功能,這道題目是一道理論題,大家可以自行百度。

      第一部分,第二題什么是閉包?

      閉包,通俗點講就是內部函數調用了外部函數的變量,這樣就形成了一個閉包。需要對函數作用域和函數生命周期有所了解,例如,我們不能直接調用內部函數,外部函數如果不創建,直接調用內部函數會拋錯。如何解決閉包的問題呢?如果是變量,那么通過global把變量設定為全局變量,如果是函數,我們可以return。

      第一部分,第三題深拷貝和淺拷貝的區別,并舉例說明。

      6000字面試總結,兩周連續面試字節,餓了么,喜馬,b站,哈羅,得物,越卷越成長~

      這題考到python里面數據存儲概念,我們聲明賦值變量a=123,然后輸出id(a)會打印一串數字,這串數字就是變量a在內存的存儲位置。這個時候,如果在來一個b=123,輸出id(b),打印出來的結果和id(a)是一樣的,如果a變了,b也跟著一起變,這個就是淺拷貝;反過來,深拷貝就是兩個對象內容數據相同,但是在內存的位置不一樣,Python里面的copy函數方法,就是深拷貝。

      第一部分,第四題如何在一個函數內部修改全局變量

      這一題在上面第二題,談閉包問題的解決辦法有提到,用global關鍵詞就可以實現。

      第一部分,第五題什么是單例模式?

      單例模式是設計模式的一種,Python中,通過__new__方法創建對象,再通過__init__方法創建內存空間,單例模式要求,類創建的對象,在內存中只有唯一的一個實例,且每次實例化生成的對象,內存空間地址都是相同的。舉個例子,系統給打印機發送打印多個文件指令,打印機最多只能同時打印一個文件,多個文件只能多次打印。

      第一部分,第六題python中如何實現多線程?

      線程分為內核級線程和用戶級線程,而python因為無法訪問內核內存空間,只能依賴生成器、greenlets和類似的庫實現用戶級線程,Python中多線程一般用threading模塊實現多線程。

      第一部分,第七題Flask和Diango的區別有哪些?

      Flask和Diango的區別,類似于java編輯器eclipse和myeclipse。Diango自身已經集成了很多的方法和類庫,所以很重,相對Flask靈活度和自由度不夠高;Flask是輕量級框架,更多的需要開發者按照自己的需要去擴展,兩者的生態都很豐富,但是性能方面,Flask較Diango要好一些。

      第一部分,第八題pytest框架里斷言有哪些類型?

      Pytest是unittest的升級,較unittest斷言語法要更簡潔一些,pytest的擴展庫pytest-assume支持多重斷言。一般用到的斷言有狀態碼斷言,響應時長斷言,返回內容解析對比斷言,數據庫查詢對比斷言。

      第一部分,第九題is和==有什么區別?

      Is,比較的是兩個對象是否指向同一個內存地址,也就是兩個對象是否為同一個實例對象;==比較的是兩個對象內容和數據類型是否一樣,默認調用對象的__eq__()方法

      第一部分,第十題裝飾器有什么作用?

      裝飾器是給某個函數(類)增加一些功能,但不影響函數(類)自身的函數或類。裝飾器有很多種,可以分為類裝飾器和函數裝飾器兩大類,能夠幫助我們簡化代碼和方便維護。

      第二部分,第一題常用的中間件有哪些?如何測試它們?

      中間件是一種獨立的系統軟件或服務程序,作用是為處于自己上層的應用軟件提供運行與開發的環境,幫助用戶靈活、高效地開發和集成復雜的應用軟件。常見的中間件有mq消息隊列,xxl-job任務調度中心,阿波羅配置中心,Redis等。對于中間件這塊,我沒有做一些專項測試工作,除了按照業務功能需求去設計一些邊界值,等價類之類的測試方法外,做過一些簡單的壓力和疲勞測試。需要注意一點,定時任務調度中心和關聯任務的服務所在服務器時間要保持一致。

      第二部分,第二題集群和分布式有什么區別?

      通常來講,集群內的服務,提供的功能都是一樣的;而分布式里面,每個服務提供的功能可能不一樣。集群強調集群內服務器位置集中,方便統一管理;分布式不要求位置,只要網絡連通即可。集群是一種物理形態,分布式是一種工作方式。(回答的時候,只說了第一點,沒有這么完整)

      第二部分,第三題冪等實現原理是什么?

      這一題切入點是問我,支付的時候,怎么保證不會重復支付一筆訂單。我回答通過冪等實現,然后面試官追問我,怎么樣實現冪等,它的原理是什么?很可惜,這后面的我就答不上來了,查了資料明白,防重復支付有幾種辦法,第一種,把下單和支付放在一個事務里面處理,要么全成功,要么全失敗;第二種,就是冪等,冪等實現辦法有好幾種,token機制,悲觀鎖,樂觀鎖,分布式鎖,狀態機冪等。關于token機制,采用 Token+Redis(Redis 是單線程的,處理需要排隊)的解決方案。處理的流程是,在數據提交前要向服務器申請帶有有效時間的 Token,然后 Token 放到 Redis 或 JVM 內存中,當數據正式提交到后臺要校驗 Token 并刪除 Token。其余的幾種有興趣的可以再查一下資料了解一下。

      第二部分,第四題說說Redis有哪些特性,哪些地方容易出現問題?

      Redis是基于內存的高性能鍵值對數據庫,并且支持主從模式(讀寫分離);Redis是單線程的,通過隊列技術進行串行訪問,消除傳統數據庫串行控制的開銷;支持豐富的數據類型,支持事務,操作都是原子性(對數據的更改要么全部執行,要不全部不執行),支持設置數據過期時間,有自己的回收策略。以上是redis的一些特性舉例。Redis在如下一些地方容易出現問題:首先,redis存儲在內存,斷電易失,大部分業務場景需要涉及到增量和全量更新,容易出現數據丟失的問題;redis是key-value管理數據,當key很多,有一些類似的key等情況時,容易出現更新混亂(代碼層面),再就是并發更新同一個key;緩存擊穿,請求redis不存在的數據,壓力轉移到關系型數據庫,導致關系型數據庫異常,應對緩存擊穿防止策略有互斥鎖、異步更新、攔截機制;緩存雪崩,因redis

      失效策略配置問題,同一時間緩存大面積失效,未更新數據同步到redis之前,請求壓力堆積到關系型數據庫,導致數據庫異常,防范策略有失效策略多檢查,隨機值或通過規則防止同一時間集體失效,使用互斥鎖(降低性能),雙緩存(雙主或主從)。結合實際的業務和系統設計也會有一些需要多關注的地方。

      第二部分,第五題數據庫鎖有哪些類型,什么情況下需要這些鎖?

      數據庫使用到鎖,是為了保證數據的一致性。拿mysql舉例,用到三種類型(級別)鎖定機制:表級鎖定,行級鎖定和頁級鎖定;細分還有共享鎖,排它鎖,意向鎖等。一般跟進實際業務場景影響數據范圍,來選擇使用哪種級別的鎖定機制,比如,只做單條數據的更新,就建議使用行級鎖。行級鎖下面共享鎖適用于:用來確認某行記錄是否存在,并確保沒有人對這個記錄進行UPDATE或者DELETE操作,如果當前事務也需要對該記錄進行更新操作,則很有可能造成死鎖。排他鎖適用于:鎖定行記錄后需要進行更新操作的應用。

      第二部分,第六題數據庫索引有哪些優點和缺點?

      先說優點:唯一索引可以保證每行數據的唯一性,其次可以提升數據查詢速度(單表,表關聯,分組排序)缺點:每次新增數據創建索引要耗費時間,降低了寫數據的性能;索引需要占用物理空間;創建修改刪除操作,索引也需要動態維護,拉低性能。

      第三部分,第一題手寫一個裝飾器。

      裝飾器種類有很多,并沒有制定裝飾器類型,就隨便寫一個吧,這里就不貼代碼了。

      第三部分,第二題寫一個函數,實現隨機一個數組,長度和元素不固定,輸出任意兩個元素相加結果為N的方法

      分析:N為固定值,可以從數組中循環取出一個數a,然后用N-a得到第二個匹配元素b,最后查找b是否在剩下的數組元素里面;用lambda表達式,應該也可以實現。

      第三部分,第三題給定一個字符串,判斷其是否合法。

      說明:字符串內包含“(,),{,},[,]"對象,隨機位置,檢查同類型括號的對稱情況,如果存在左右對稱括號中間只有單獨一個括號的字符串,即為不合法(Ps:需要左右括號匹配類型也一致才算合法)

      分析:首先過濾掉字符串其他元素,保留“(){}[]”元素對象,并且位置順序不變。然后通過從左往右的順序找到最后一個左括號(也可以從右往左,找最后一個右括號),然后繼續往右進行逐一匹配右括號,遇到一個不匹配的即為不合法。我回答的不是這個版本,我忽略了順序,這里運用到堆棧概念。

      第三部分,第四題一個數組內有隨機的10整數,隨機取三個元素,他們的和為0,寫個方法函數,返回所有的組合情況,要去除重復的組合內容

      分析:和第二題類似,增加了一個元素求和,需要輸出組合情況,并去重。我們可以用加法或者用減法進行倒推,三層循環,每層取出一個元素并去掉已取出的元素,然后拿符合條件的三個元素組成一個數組,排序,檢查一下是否已加入結果數組,未加入再append,然后把結果return。下面是用減法的示例:

      第三部分,第五題寫一個函數方法,輸入兩個日期(yyyymmdd),輸出兩個日期相差多少天。

      分析:這個比較簡單,使用python的datetime模塊即可。

      第三部分,第六題隨機一個數組,求其中兩個元素乘積最大的組合。

      分析,既然需要求最大乘積組合,找到數組里面最大的兩個元素相乘就可以了。

      第四部分,第一題請設計一個資產管理系統,簡述功能清單和邏輯,還有技術選型。

      這道題綜合考量個人軟件設計能力,我們拆成兩個步驟來。第一步,先進行需求分析,然后進行功能設計,給出功能清單;第二步,技術選型系統設計。

      ,前端后端數據庫服務器等。

      先看功能清單:

      1,?登錄,用戶權限管理

      2,?設備列表,設備詳情

      3,?資產設備登記/啟用/修改信息

      4,?資產設備借出/歸還

      5,?資產設備報修/報失

      6,?資產盤點記錄

      7,?用戶操作日志記錄

      按照功能清單進一步分析:登錄是接公司內部統一登錄還是自己做一套用戶管理模塊(需要按照實際情況調研),需要有完善的資產設備的狀態機流轉流程(草稿、未占用、占用中、已報修、已報失、等)

      接下來進行技術選型和系統設計:

      因為這個資產管理系統會有許多關聯查詢的情況,其次對于資產管理,數據完整性很重要,所以我們選取關系型數據庫mysql。對于資產管理系統并不會出現大并發的情況,而且數據量也不會特別大,mysql單表在百萬級性能都還ok。前端因為我對vue之類的框架不太熟練,然后資產管理系統除了在B端用,最好也可以適配C端瀏覽器,Bootstrap是個不錯的選擇。后端就用python的flask了,輕量級,生態也比較全面(其實我就會flask,diango我不會,哈哈),用戶管理登錄這塊,按照傳統來講應該是要接統一登錄,如果自己寫,身份鑒權就需要用到redis更合適一些。技術選型就這些,最后就是系統設計了。首先數據表設計,資產詳情表、用戶角色表、用戶信息表、資產盤點信息表、用戶操作記錄表。資產詳情表給資產類型,名稱等字段增加索引(5個以內),用戶操作記錄表按照月份取模分表(這個其實沒太大必要)。另外,數據庫表設計要注意命名規范,表必須要有主鍵。接著進行接口設計,按照功能清單逐一實現,需要注意接口可擴展性,后面可能會更新版本。

      至于最后服務部署,就uWSGI+Nginx+Flask在Linux下的部署吧,代碼管理和發布用git和Jenkins工具。系統設計肯定不是這么簡單就完事了的,這里只能講個大概,很多地方都需要進一步的擴展實現,大家可以自己再豐富或修改一下,哈哈。

      感慨一下,測試這塊越往后面,涉及的范圍越來越廣,要求深度也越來越高,因為本身這個行業的技術就在不停的升級,想要做好就需要不斷的學習和創新。不知道有沒有很多小伙伴會感覺到了一個發展提升的瓶頸:廣度夠了,深度不夠,需要選一個業務域或者是技術棧進行深耕;其次是自己適合做管理還是適合做技術的困惑,有些時候興趣重要,天賦也很重要,多請教前輩大佬指引一下,才不會困惑。

      每天八杯水,每天保持健康活力,熱愛工作,熱愛生活,歡迎加入測試社區 一起交流學習。

      Python Redis

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:selenium用法詳解【從入門到實戰】【Python爬蟲】【終極篇】
      下一篇:kafka原理深入研究 (轉 )
      相關文章
      亚洲成人免费网站| 亚洲资源在线观看| 亚洲国产精品综合久久久| 亚洲精品乱码久久久久久自慰| 亚洲精品无码你懂的网站| 国产精品亚洲色图| 国产亚洲漂亮白嫩美女在线| 337p日本欧洲亚洲大胆人人| 亚洲av无码偷拍在线观看| 亚洲精品色播一区二区| 亚洲国产欧美国产综合一区| 亚洲日韩精品A∨片无码加勒比| 亚洲中文无码av永久| 亚洲1区1区3区4区产品乱码芒果| 亚洲国产综合第一精品小说| 亚洲综合久久久久久中文字幕| 久久久亚洲欧洲日产国码二区| 久久久久亚洲AV成人片| 91亚洲国产成人精品下载| 亚洲无人区视频大全| 亚洲国产夜色在线观看| 2017亚洲男人天堂一| 亚洲精品无码mⅴ在线观看| 亚洲av永久无码| 亚洲精品无码日韩国产不卡?V| 国产亚洲AV手机在线观看| 亚洲日韩精品一区二区三区无码| 亚洲va无码手机在线电影| 亚洲视频在线视频| 亚洲国产精品张柏芝在线观看| 国产成人亚洲精品| 亚洲AV无码一区二区三区电影| 一本色道久久88亚洲综合| 久久久青草青青国产亚洲免观 | 中文字幕亚洲无线码a| 亚洲欧洲日产国码无码久久99| 亚洲av无码国产精品夜色午夜 | 深夜国产福利99亚洲视频| 亚洲黄黄黄网站在线观看| 亚洲啪啪综合AV一区| 亚洲人成电影在线天堂|