1. 程式人生 > >記一個小白的第一次社招面試

記一個小白的第一次社招面試

在51job上投了好幾家簡歷,最後只有一家打電話約我去面試(可能51job上的簡歷寫得太差了吧--|||),約的是下午三點,結果我兩點40就到了,剛好沒有人來面試,就直接給我面了。

先是做了個自我介紹,然後面試官就拿著簡歷開始問我。

  1. 談談你對於redis的理解(自己作死,簡歷上寫了熟悉redis,結果mysql和orcal都沒問,就問了redis,之前答得很草率,下面的答案是我自己回來好好看了redis之後,再寫出來的)

           redis是一個基於key-value的資料庫其value最大可達到:516M,是一個已知效能最快的key-value的資料庫,它有5種資料型別:String,List,Set,ZSet,Hash。其中String是可以包含任何資料的,List是一個連結串列結構的資料型別,Set是一個集合,ZSet是String型別的雙向連結串列,Hash適合儲存物件,它的新增和刪除的平均的時間複雜度都為O(1)。redis的缺點就是:它的容量是受實體記憶體的限制,不能去做海量資料的高效能的讀寫,redis只能侷限於小資料量的高效能操作和運算。redis的優點就是:1.因為資料是存在記憶體中的,所以速度很快。2.有豐富的資料型別。3.支援事務,其操作都是原子性的。4.有豐富的特性用於快取訊息和刪除過期資訊。

     2.你簡歷上寫了你熟悉sql的優化,可以說一說麼?

           我說得的是建立合適索引和優化查詢語句。

     3.那你可以說一下什麼是索引嗎?

我的回答是:在我看來索引是資料庫用來便於查詢的標記。

           百度的回答:索引是與表或檢視關聯的磁碟上結構,可以加快從表或檢視中檢索行的速度。索引包含由表或檢視中的一列或多列生成的鍵。這些鍵儲存在一個結構(B樹)中,使 SQL Server 可以快速有效地查詢與鍵值關聯的行。

      4.你說了索引的優點是便於查詢,那他有什麼缺點或不足呢?

           這個問題我沒有回答出來,最後面試官和我說:索引的不足就是效率低,佔用的資源多,每次的增刪改需要動態的維護導致時間變長

      5.談談你對於mybatis快取機制的理解。

   1.一級快取:是session級別的的,在使用同一個session進行查詢時,會將第一次的結果存到session中,然後之後的查詢同一個結果時,就會從session中去獲取到結果,而不會再去傳送sql語句

            2.二級快取:是sessionFactory級別的,在使用session查詢到資料並且提交時,之後查詢都會從sessionFactory中讀取快取中的資料

      6.說說你對於事務的理解

我當時的回答是:在我看來,事務是一個要求多條sql語句同時成功同時失敗。

            後來的瞭解:事務有四大特性:CAID(原子性、一致性、隔離性、永續性),原子性是指事務的操作是全部成功或者全部回滾,一致性:一個事務執行之前和執行之後要處於一致性狀態,隔離性:當多個使用者操作表時,一個事務的操作過程中不能被其他的事務干擾,併發事務隔離,永續性:事務一旦提交,對於資料庫中的資料的改變是永久性的

      7.如果兩臺伺服器,一臺修改了你的資料庫中的資料,一臺中有快取,那豈不是另外一臺無法去拿到最新的資料,你有沒有了解過這種情況

我當時腦袋裡面想到的是:設定定時器,定時更新快取。但是沒有說,就說沒有去了解。

      8.說一下tcp建立連線的三次握手

這個我之前寫了部落格,大致是按照自己寫得部落格來說的,面試官還順便問了為什麼不是兩次握手和四次握手。(部落格中都有.....)

      8.談談你對於spring的瞭解

spring中主要是ioc(控制反轉)和aop(面向切面程式設計),ioc就是生成新物件的權利交給了我容器,由容器生成,程式設計師只需要在容器中獲取到合適的物件,aop是面向切面程式設計,可以說是對於oop的一種補充,oop的程式設計更多的是縱向擴充套件(通過繼承),而如果oop橫向的擴充套件的話就顯得特別冗餘,所以就有了aop用來橫向擴充套件,來降低類之間的耦合,類與類之間沒有依賴,通過介面實現

     9.為什麼要用spring而不用單鏈模式

          沒有回答的上來,後面面試官和我說的是:因為spring中可以用實現介面。

     10.你對於資料結構瞭解的多麼(我回答的是:不多),那問你點簡單的吧。陣列和連結串列的區別

陣列在記憶體中的儲存是按順序儲存的,連結串列在記憶體中的儲存是不按順序來的,但是連結串列通過指標來將連結串列中的一個一個數據給連線起來。然後,陣列的查詢速度要比連結串列塊,但是連結串列的插入和刪除要比陣列快的多。

     11.你對於hashmap又瞭解麼,說一說你瞭解的hashmap

hashmap的底層是陣列和連結串列,他是以鍵值對的方式儲存的,它允許存空值,但是隻能儲存一個,當它新增資料是,先是查詢鍵的位置,看是否有這個鍵,沒有的話就插入這個鍵值對,有的話就修改那個鍵所對應的值。hashmap還有一個擴容機制,hashmap的預設長度是16,其中有一個擴容因子,預設為0.75,當hashmap的儲存的資料達到了它記憶體大小的75%時候就會觸發擴容,新建一個hashmap是原來hashmap的兩倍,在將舊的hashmap中的資料放入到新的hashmap中,其位置是 以前的位置+擴容的大小  。大概就是這樣了。

    12.詳細的說一下hashmap的查詢(感覺答得不好)

             先將hashmap中的鍵 hashcode一下,再通過equals去比對hashmap中的各個鍵的hashcode碼,如果沒有,就插入,如果有就修改連結串列中的資料

    13.在查詢的過程中,你是如何查詢的?for迴圈?那hashmap的時間複雜度就是O(n)了?

沒回答出來,其實很簡單就是因為陣列的時間複雜度是O(1)的

    14.你簡歷上寫了你對於機器學習中的演算法有一些瞭解,可以挑一個你用的最好的來說一下麼?

我說得是knn演算法和它的延伸k-d樹,感覺面試官也不是很懂。最後問了我一個專案,還是機器學習的一個專案,我就解釋了一下這個專案。

最後,就是很基本的流程了,問我有什麼想說的啊?理想薪資是多少啊?什麼時候可以來上班啊?.......這些問題。

經過這一次的面試,感覺還是不錯的,面試官人還好,一看就是搞技術的,中途的一些問題,還讓我去想一下,也不催你。總的來說還是認識到自己的很多的不足之處。