李開復創新工廠超級詳細面經(附答案)

辣條走起,每月的刷題99元獎勵靠你們了java

前言

創新工廠/塗鴉移動,李開復創辦的程序員

筆試

我沒有走提早批,走的秋招,筆試是對方給我發一份郵件,裏面有一份word文檔,而後裏面有兩道編程題,須要這份word文檔的後臺回覆 創新工廠面試

題目一算法

  • 1.你能在多大程度上將一疊卡片懸置在桌子上?若是你有一張卡,你最多能創造半張卡片長度的懸置(假設卡片必須垂直於桌子)。使用兩張卡片,你可讓頂部的卡片在底部卡片的基礎上懸置半張卡片的長度,且底部卡片在桌子上懸置1/3卡片的長度,這疊卡片的最大懸置長度一共爲1/2 + 1/3 = 5/6卡片長度。通常來講,你可讓n張卡片的懸空長度達到1/2 + 1/3 + 1/4 + … + 1/(n + 1)卡片的長度,即頂部卡片在第二張卡片的基礎上懸置1/2,第二張卡片在第三張卡片的基礎上懸置1/3,第三張卡片在第四章卡片的基礎上懸置1/4,以此類推,底部卡片會在桌子上懸置1/(n + 1)。正以下圖所示。
  • 請實現函數
    int number_of_cards(float length)
    測試用例:
    1.00 => 3
    3.71 => 61
    0.04 => 1
    5.19 => 273

題目一解答編程

int number_of_cards(float length)
{
    if(length <= 0)
        return 0;
    float i = (float)1.0;
    float sum = (float)(1.0 / (i+1));
    while(sum < length)
    {
        i++;//就是上面標註字體的實現,每次都加1/(i+1),題目已經給出公式
        sum = sum + (float)(1.0/(i+1));
    }
    return (int)i;
}
複製代碼


題目二數組

  • 愛德華有1個包含N個整數的數組A,他定義1個數組的美麗值爲數組中全部不一樣整數的和。如今愛德華想知道數組A的全部連續子序列的美麗值之和。
  • 請實現函數:
    int beauty_of_array(int[] array)
    測試用例
    1 => 1
    1, 2 => 6
    1, 1, 2 => 11

題目二解答緩存

int beauty_of_array(int[] array)
{
    int sum = 0;
    int length = array.length;
    for(int i=1;i<=length;i++)//i表明子序列的長度從1開始最長是數組的長度
    {
        for(int j=0;j<array.length;j++)
        {//j表明從數組的第幾個數開始找i長度個數,窮舉
            Set<Integer> set = new HashSet<>();
            int temp = j+i-1;//temp用來記錄從j下標開始,到i長度後的下標爲止,好比i取2,也就是子序列長度是2,那麼temp就是j+2-1
            if(temp >= array.length)
                break;//若是下標超過數組長度,break掉
            for(int k=j;k<=temp;k++)
                set.add(array[k]);//因爲是不重複的,加入集合
            Iterator<Integer> iterator = set.iterator();
            while (iterator.hasNext())//遍歷集合求和
                sum += (int)iterator.next();
        }
    }
    return sum;
}
複製代碼

一面

電話面試,時長半個小時,全程沒問任何項目,一直在問基礎知識點。安全

  • 1.自我介紹一下。
    答:答:自我介紹是面試中惟一的本身主動介紹本身的環節,必定要好好把握好,你數據結構學的號能夠手撕一個紅黑樹你就說我數據結構掌握地很好,反正就是要把本身的優點凸顯出來,好比我是保研的以及對於java的知識較熟悉,我介紹完本身的本科經歷之後,我就說我是保送到本校繼續讀研究生,而後最末尾會加上本身熟悉java,而後面試官就會問java的一些東西;(自我介紹完,我覺得要照例問我項目,但面試官沒有問,直接開始問我基礎知識點了
  • 2.java的幾種數據類型?
    答:Byte,short,int,long,float,double,boolean,char
  • 3.每一個字節的計算機佔用的位數?
    • boolean/1
    • byte/8
    • char/16
    • short/16
    • int/32
    • float/32
    • long/64
    • double/64
  • 4.java的這些字節長度在不一樣平臺會發生變化嗎?
    答:不會,同樣的
  • int 和 Integer有啥區別?
    答:一、Integer是int的包裝類,int則是java的一種基本數據類型
    二、Integer變量必須實例化後才能使用,而int變量不須要
    三、Integer實際是對象的引用,當new一個Integer時,其實是生成一個指針指向此對象;而int則是直接存儲數據值
    四、Integer的默認值是null,int的默認值是0
  • 5.而後接着問我,Integer i = 88; Intrger j = 88;比較(i==j)結果是什麼?
    答:true
  • 6.那Integer i = 200;Integer j = 200;他兩呢?
    答:false;
  • 七、爲啥?緣由知道嗎?說一下。
    答:java在編譯Integer i = 100 ;時,會翻譯成爲Integer i = Integer.valueOf(100);,而java API中對Integer類型的valueOf的定義以下代碼(我大體描述了一下):IntegerCache.low的值是-128,IntegerCache.high是127,ava對於-128到127之間的數,會進行緩存,因此出現上述的結果。
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
複製代碼
  • 8.而後接着問我,char能夠存儲漢字嗎?
    答:我說能夠。順便說了緣由:char型變量是用來存儲Unicode編碼的字符的,unicode編碼字符集中包含了漢字,因此,char型變量中固然能夠存儲漢字。若是某個特殊的漢字沒有被包含在unicode編碼字符集中,那麼,這個char型變量中就不能存儲這個特殊漢字。服務器

  • 9.而後問我了我計算機網絡的知識,https是什麼?
    答:https是在http的基礎上加了ssl,實現了傳輸過程的加密。微信

  • 10.ssl的加密原理是什麼?
    答:我說了ssl是基於RSA原理的加密保證安全,而後說了RSA的握手協議。1.RSA握手協議
    第一步,Client給出協議版本號、一個客戶端生成的隨機數(Client random),以及客戶端支持的加密方法。
    第二步,Server確認雙方使用的加密方法,並給出數字證書、以及一個服務器生成的隨機數(Server random)。
    第三步,Client確認數字證書有效,而後生成一個新的隨機數(Premaster secret),並使用數字證書中的公鑰,加密這個隨機數,發給Server。
    第四步,Server使用本身的私鑰,獲取Client發來的隨機數(即Premaster secret)。
    第五步,Client和Server根據約定的加密方法,使用前面的三個隨機數,生成」對話密鑰」(session key),用來加密接下來的整個對話過程。

  • 11.RSA原理說一下?
    答:這裏你們若是不懂RSA就在ssl加密原理那裏說RSA的握手協議了,直接把那5步說一下也行。這個RSA因爲我本科信息安全的,常常接觸,因此基本能夠把下面的步驟說一遍。
    RSA算法的步驟主要有如下幾個步驟:
    一、選擇 p、q兩個超級大的質數 ,都是1024位,
    二、令n = p * q。取 φ(n) =(p-1) * (q-1)。 計算與n互質的整數的個數。
    三、取 e ∈ 1 < e < φ(n) ,( n , e )做爲公鑰對,正式環境中取65537。能夠打開任意一個被認證過的https證書,均可以看到。
    四、令 ed mod φ(n) = 1,計算d,( n , d ) 做爲私鑰對。 計算d能夠利用擴展歐幾裏的算法進行計算
    五、銷燬 p、q。密文 = 明文 ^ e mod n , 明文 = 密文 ^ d mod n。利用蒙哥馬利方法進行計算,也叫反覆平方法,很是簡單、
    其中(n,e)是公鑰 (n,d)是私鑰

  • 12.TCP和UDP的區別講一下
    答:主要答瞭如下幾點。若是本身熟悉擁塞控制,能夠把其中的每一塊都詳細說一下。

  • 13.TCP三次握手說一下。
    答:就是下面這個圖片了,要是現場面試,下面這個圖片,我能夠手畫出來,這個必須理解地背下來。

  • 14.爲何要用三次握手,不是兩次呢?
    答:這裏我說了以前的一個鏈接請求,因爲網絡阻塞已經被髮送端放棄了,而後過了一段時間被接收方收到了,接收方直接就創建了鏈接,白白浪費了資源。詳細版能夠把下圖背下來。

  • 15.而後問了我七大排序中,的最好最壞時間複雜度?
    答:就是下圖了,這個得背了,常常問。我沒說基數排序,這個不太瞭解。

  • 16.接着問我,哪些是穩定,哪些是不穩定?
    答:說了歸併,冒泡,插入穩定,其它不穩定。

  • 17.接着問了我兩道算法題,如何判斷鏈表中有環?
    答:我說使用快慢指針,快的每次走兩步,慢的每次一步,看看是否相遇。

  • 18.接着問我,如何判斷兩個鏈表是否相交?
    答:先分別求鏈表長度,哪一個長久用哪一個先進行遍歷長度差的長度,而後在一塊兒遍歷,若是相等,那麼相交。

有一些問題忘了,大致上問的問題都很基礎。

二面

電話面試,時長半小時,感受創新工廠很卡時間,時間一到,立馬結束面試。面試官讓我準備好紙和筆,而後問了我兩道動態規劃的題目。

  • 自我介紹
    答:仍是上面那些。
  • 問我瞭解動態規劃嗎?
    答:我大致說了動態規劃就是把問題拆分紅一個個小問題,而後求狀態方程。
  • 而後考了我一道劍指offer的題,連續子數組的最大和。
    答:我說思路就是用一個tempmax表明前面的連續數字的最大和,若是這個最大和是正的,那麼加上數組的當前數字,那麼這個連續的和是變大的,這個就是有可能的潛在的最大和。
  • 而後他感受我沒用動態規劃方程,他說你這個沒有用動態規劃作,而後又給我出來一道動態規劃的題目。

因爲這個時間過久遠了,這道題目具體是啥,實在想不起來了,只記得當時我強行套狀態方程,把思路說了一下,而後面試官最後給我講了一下這道題的思路,最後面試就結束了。

hr面

印象中沒有hr面,二面結束而後過了一天通知我面試經過了,而後發了offer,當時看到創新工廠開的offer,仍是很吃驚的,感受相對於其餘互聯網公司真的有點少,具體薪資你們能夠去offershow搜一下。

結束語

做者喬戈裏親歷2019秋招,哈工大計算機本碩,百度java工程師,歡迎你們關注個人微信公衆號:程序員喬戈裏,公衆號有3T編程資源,以及我和我朋友(百度C++工程師)在秋招期間整理的近200M的面試必考的java與C++面經,並有天天一道leetcode打卡羣與技術交流羣,歡迎關注。

相關文章
相關標籤/搜索