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

在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建立連接的三次握手

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

          https://blog.csdn.net/Freak_ysy/article/details/81543873

      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樹,感覺面試官也不是很懂。最後問了我一個項目,還是機器學習的一個項目,我就解釋了一下這個項目。

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章