二面還是電面

2022-03-24 05:22:35 字數 2366 閱讀 2455

前段去了趟麗江,好久不更新了。

說來也巧,到達麗江第一天,正好是周五,中午正在古城的kfc吃東西,結果接到乙個010開頭的**,通知我周一**二面,好吧。旅行的第一天額親。

木有辦法,周

六、週日、周一都屯在了屋裡,準備二面。由於第一面是問的專案,猜想二面是不是問點常規的,演算法資料結構神馬的。結果,二面問的還是專案。搞不清某度的套路了。連內推的師姐也大呼詭異。

入正題了:

第乙個,問做的那個教學dbms怎麼實現表的儲存的?由於設計比較簡單,所有的表,單個儲存為.tbl檔案。欄位設為定長。有基本的tableinfo.tbl, indexinfo.tbl, viewinfo.tbl,這三個表作為資料字典。在使用者建立表內,定長字段儲存資料。

接著,問如果有給表加所有,那加的索引怎麼存?表名-index.tbl。也看做乙個表。由於設計的侷限,不考慮複雜的情況,只支援給乙個表加乙個索引。在索引表裡面,兩列《索引列內容,原資料offset>。

又問,對於select * from student where sid='1001',這條語句處理的時候,系統怎麼去實現,sid已經建立了索引:先從索引表裡面找索引列,即sid='1001'的記錄,這裡要掃瞄整個索引表了。同時,就得到了對應記錄的原資料的offset。然後,從資料表裡面,直接通過偏移,讀取資料。

然後,又問了個網路的,tcp和udp的區別。這個好久不接觸了,依稀記得。tcp是***的,在傳資料之前,需要三次握手,保證傳輸的資料一定送達。udp是無保證的,只負責傳,能否收到不保證。所以tcp慢一些,udp快一些。根據不同的應用,對速度,對傳輸可靠性的不同需求,作出合適的選擇。

接下來,問了個檔案刪除的問題,用delete刪除檔案後,能否再恢復?檔案系統,維護了乙個目錄表,所有檔案系統的儲存資訊,首先是寫到目錄表裡面,然後在目錄表中儲存的指定位置,儲存實際的資料。刪除檔案的時候,出於效率的考慮,只是從目錄表中,將對應表項刪除,實際儲存位置的資料並未擦除,通過軟體可以恢復。

又問了個關於程序的問題,具體記不清了,大概是說,有沒有可能兩個程序會同時訪問同一塊物理記憶體的空間。開始,我說不行,作業系統課上,罡哥說過,每個程序,從自己的角度看來,都有慢慢的4g的記憶體可以用,程序間互相隔離的。後來說著覺得不對,有可能會訪問到同一物理記憶體。可惜,沒說出個合理的技術方面的解釋,只是舉了個暗黑2的例子:在遊戲執行中,可有跳出來,用外掛程式,修改**的屬性,顯然是外掛程式的程序,修改了遊戲程序的某一塊記憶體的資料。額,現在想來,這個回答的不好。。。

後來又問我對linux的檔案系統了解多少?一下子真的一點都想不起來了。。。悲劇個。。。

接著,哥們拐著玩,問了個儲存空間的碎片問題,問有哪些策略,以及怎麼處理這些碎片?這個依稀記得一些,有最早遇到優先的,只要找到能存下的就停止;有最適應優先的,盡可能找和檔案大小相匹配的;有最少浪費優先的,找乙個寫入檔案後,浪費最少的。又問怎麼樣減少這些碎片,我說定期空間緊縮,移動檔案。哥們說,伺服器不可能停下來讓你去做這些檔案移動的,而且大資料緊縮一次,耗費太大。又說使用什麼樣的策略,在新檔案寫入的時候,盡可能低在寫入之處,減少碎片的產生?我當時說,給定大小,放入若干不定大小的檔案,使浪費最少,這是個揹包問題額,用動態規劃吧。

哥們說,用一些簡單的辦法。我說,維護乙個鍊錶,按照碎片從小到大把這些碎片串起來。有新檔案寫入的時候,根據新檔案大小,從頭一次匹配,直到找到合適的,這樣應該是浪費最少的。哥們又問,說鍊錶一次遍歷,還是太慢。而且,一次寫入後,鍊錶要更新,怎麼辦,耗費大。我說,那就空間換時間,開乙個陣列,維護這些資訊。當時一些想到這樣乙個策略:陣列維護乙個公升序的碎片資訊a0-an,在一開始,生成乙個隨機數r1,作為索引,直線碎片資訊陣列,如果指向的碎片比新檔案小,就從r1到an中間隨機抽乙個再試,否則就從a0到r1再次隨機抽取。這是乙個帶隨機的2分查詢。然後,哥們問,說要這樣2分多少次呢?會不會次數太多,我說,可以指定乙個閾值,比如4次、10次,應該能夠找到乙個比較好的結果,不一定是最優的,兼顧效率的情況下,好很多就ok了。哥們說,陣列也有一些問題,陣列資訊,也是要更新的, 而且可能更麻煩。。。我說,那折中下吧,先維護乙個鍊錶,然後維護乙個小於鍊錶長度的陣列,作為鍊錶的影子,按照類似lru的策略,定期更新影子陣列。新檔案寫入的時候,再影子陣列上做隨機二分。

上面這個,問了好久。。。後來哥們說這個就這樣吧。

最後問了乙個應用程式的問題。有些應用程式,只允許執行乙個例項。開了乙個,再開乙個的時候,會警告說,程式正在執行,問這樣怎麼實現。我開始說,用配置檔案,程式啟動時,先讀取配置檔案,通過配置檔案指定項的置位、復位來實現開關功能。哥們說,如果應用程式奔潰的話,沒有及時設定配置檔案,這種方法就不行了。我說,那用加鎖的辦法吧。程式中設定乙個樁變數,啟動後邊加鎖,當程式關閉,或者程式奔潰的時候,會自動將鎖釋放。哥們問,這個加鎖,是程式自己的,還是作業系統提供的。我說,是作業系統的,自己沒辦法做。哥們說,確實作業系統能提供這樣的加鎖機制,也是這麼實現的。

面了乙個多小時,有些可能漏掉了,就這些了。哥們說,二面後過了就通知三面。。。

這都多久了,擔心啊。。。bless

炒粉還是煮麵

兒子 爸爸,今天早餐吃什麼?是炒粉還是煮麵?爸爸 你想吃哪種呢?兒子 我想吃煮面。爸爸 煮麵也有很多種,你想吃雞蛋煮麵,蝦煮面,肉片煮麵.兒子 我選蝦煮面。從開發角度來說,不管是炒還是煮,它是只是乙個動作或方法。因此可以定義成為兩個介面 using system using system.colle...

哈羅出行資料探勘實習生電面題 (一面二面)

一面 1 先自我介紹一下自己的背景和接觸的專案 2 如果乙個資料沒有明顯的相關性 還能放進去lstm嗎 3 說一下過擬合解決辦法 4 說一下你最熟悉的乙個模型 5 說一下神經網路中怎麼解決過擬合 6 整合方法中的bagging和boosting的區別 7 隨機梯度下降和其他優化方法的區別 8 口述邏...

途虎一面,二面,hr面

一面 自我介紹 實習介紹 專案介紹 redis相關問題 springcloud常用元件有什麼 mq除了冪等還應該注意什麼 q都可靠嗎 具體不記得了,主要圍繞在專案 二面 自我介紹 1 object裡面的方法 hashcode和equals關係 為什麼重寫 2 資料庫索引 主要問點在b 樹 什麼字段可...