1. 程式人生 > >騰訊一面總結

騰訊一面總結

騰訊 web開發 一面掛

投了騰訊web開發崗,本來以為是後端,結果今天面試的是前端。自己基礎也太差,所以直接掛了。在此記錄一下面試的問題,也正好可以分享給大家。
大概問的問題有:

Java

  1. java訪問控制修飾符哪有幾種?各自的特性?
    有四種。
    • private型別成員,只能在定義它的類的內部被訪問。
    • 預設型別成員(也叫做包訪問許可權),類的內部,包中的其他類 可以訪問。
    • protected型別成員,類的內部,包中的其他類,包外的子類 可以訪問。
    • public型別成員,任何類都可以訪問。
      從開放的上程度講:private < 預設 < protected < public
      下面摘自阿里java開發手冊:
      【推薦】類成員與方法訪問控制從嚴:

      1) 如果不允許外部直接通過new來建立物件,那麼構造方法必須是private。
      2) 工具類不允許有public或default構造方法。
      3) 類非static成員變數並且與子類共享,必須是protected。
      4) 類非static成員變數並且僅在本類使用,必須是private。
      5) 類static成員變數如果僅在本類使用,必須是private。
      6) 若是static成員變數,必須考慮是否為final。
      7) 類成員方法只供類內部呼叫,必須是private。
      8) 類成員方法只對繼承類公開,那麼限制為protected。
      說明:任何類、方法、引數、變數,嚴控訪問範圍。過於寬泛的訪問範圍,不利於模組解耦。 思考:如果是一個 private 的方法,想刪除就刪除,可是一個 public 的 service 方法,或者 一個 public 的成員變數,刪除一下,不得手心冒點汗嗎?變數像自己的小孩,儘量在自己的 視線內,變數作用域太大,如果無限制的到處跑,那麼你會擔心的。
  2. java可以多重繼承嗎?可以實現多個介面嗎?
    不可多重繼承,可以實現多個介面。

  3. java多型

    • 靜態多型 函式過載實現(overload)。
    • 動態多型 父類引用指向子類物件,並通過該引用呼叫子類成員。
  4. Java多執行緒實現方式

    • 繼承Thread
      編寫一個類,繼承Thread類;
      重寫Thread類中的run函式,將需要做的事情放在該函式內;
      例項化該類,並調動start方法啟動執行緒
    • 實現Runnable介面
      編寫一個類,實現Runnable介面;
      重寫Runnable介面中的run函式,將需要做的事情放在該函式內;
      例項化該類,並新建一個Thread類,將該該類傳入Thread中,用start函式啟動執行緒。
  5. String、StringBuffer、StringBuilder類的區別
    下面是Java文件中的介紹

    • String
      The String class represents character strings.Strings are constant; their values cannot be changed after they are created.
    • StringBuffer
      A thread-safe, mutable sequence of characters. A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, but the length and content of the sequence can be changed through certain method calls.
    • StringBuilder
      A mutable sequence of characters. This class provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most implementations.
      顯然可以知道:
      String是不可變字串(字串常量),它一旦建立之後值不會再改變。每次對String進行改變的時候其實都是生成了一個新的String,並將引用指向新的String。舊的String過後會作為垃圾被GC回收掉。
      StringBuffer是可變字串(字串變數),且是執行緒安全的。
      StringBuilder是可變字串(字串變數),但是執行緒不安全。適用於單執行緒的情況,它的效率要比StringBuffer高。
  6. 為什麼 說:java一次編譯,到處執行。
    因為不同的作業系統上面可以裝上不同的Java執行環境(JRE),不同的JRE中包含了不同的Java虛擬機器(JVM), .java檔案編譯為.class檔案之後,在不同的JVM上執行即可。

  7. 對Java虛擬機器有什麼瞭解?瞭解Java垃圾回收是如何進行的。
    這一部分我之前沒接觸過,完全不懂。等以後學完之後再來補充。
  8. Java中多執行緒有哪些狀態?就緒狀態和阻塞狀態有何不同?阻塞的原因有哪些?
    這一題也不會。查詢資料後知道分為:

作業系統

  1. 程序和執行緒區別
  2. 多程序之間的通訊方式

Linux

因為我一點都不會。。所以不記得面試官問了什麼

計算機網路

  1. 七層協議是哪七層?
    OSI的七層體系結構:物理層、資料鏈路層、網路層、運輸層、會話層、表示層、應用層。
    TCP/IP的四層體系結構:網路介面層、網際層IP、運輸層、應用層
    五層協議的體系結構:物理層、資料鏈路層、網路層、運輸層、應用層
  2. TCP和UDP的區別,TCP錯誤重傳機制是怎樣的?TCP報文段的首部格式是怎麼樣的?
    區別:
    (1)UDP是無連線的,即傳送資料前不需要建立連線;TCP是面向連線的,傳送資料前要先建立連線。
    (2)UDP盡最大努力交付,即不能保證可靠交付;TCP提供可靠交付,即通過TCP連線傳送的資料,無差錯、不丟失、不重複、並且按序到達。
    (3)UDP面向報文;TCP面向位元組流。
    (4)UDP支援一對一、一對多、多對一、多對多的互動通訊;TCP只能一對一通訊。
    (5)UDP沒有擁塞控制,因此網路出現的擁塞不會使源主機的傳送速率降低;TCP有擁塞控制。
    (6)UDP首部開銷比TCP小,UDP首部8個位元組,TCP首部20個位元組。

  3. TCP在哪一層?該層的作用是什麼?IP所在的層是哪一層,該層的作用是什麼?
    TCP在運輸層,運輸層的作用是為應用程式提供端到端的邏輯通訊。
    IP在網路層,網路層是為主機之間提供邏輯通訊(面向主機,承擔路由功能,即主機定址及有效的分組交換)。

  4. 伺服器端有很多 長連線,這些連線有隻有間歇性的通訊,那麼伺服器端如何維護這些Socket?(因為這個我不懂,所以具體是什麼題我也有點懵,大概就是這麼一個意思)
    牛客網上一個帖子總結計算機網路常考的題:http://m.nowcoder.com/discuss/1937

web

這一部分我也很多不會,自己太水,很多都沒聽過,所以很多問題都記不清了。
1. ajax實現原理
2. http頭
3. JavaScript
4. web安全,跨站指令碼、SQL注入的原理和解決方案(因為上了安全程式設計技術,這個懂一些)

  • 跨站指令碼(XSS)
    原理:三方
    攻擊方、受害方、網站
    (1)攻擊方向網站放置(傳送)了含有一些指令碼的內容,網站接收。
    (2)受害者訪問網站,因為某些原因運行了指令碼,使其受害(如隱私洩露)。
    解決方法:
    (1)可以過濾指令碼中的特殊字元,如將特殊字元轉化為文字,如’<’ 轉化為 ‘&lt’;

  • SQL注入
    原理:所謂SQL注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。(來自百度)
    解決方案:採用相對安全的引數傳遞方法
    如Java中的PreparedStatement,.net中的SQLParameter等,它們會自動規避一些SQL語言的關鍵符號。
    如Java中的PreparedStatement,它可以對SQL語句進行預編譯,它不允許插入的字串改變SQL語句原本的邏輯結構,而且會對 插入的字串 中的特殊字元進行轉義。

資料結構

  1. 常用的排序演算法,時間複雜度,講解其中幾種的思想。
  2. 貪心演算法的思想
  3. 動態規劃的思想
  4. 動態規劃 和 分治法 的區別
  5. 有20G大小的檔案,其中儲存的都是QQ號,現在只有10M的記憶體,要求出 出現次數最多的QQ號。如果是要求出 出現次數最多的前1000個QQ號,又該怎麼做呢?

現在先寫這麼多,等以後有時間,我再把其中的問題研究清楚,然後再來修改這篇文章吧。
希望自己每次面試後,都可以發現自己的不足,從而去彌補自己的不足,每次都有進步就好。