辣條走起,每月的刷題99元獎勵靠你們了java
創新工廠/塗鴉移動,李開復創辦的程序員
我沒有走提早批,走的秋招,筆試是對方給我發一份郵件,裏面有一份word文檔,而後裏面有兩道編程題,須要這份word文檔的後臺回覆 創新工廠面試
題目一算法
題目一解答編程
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;
}
複製代碼
題目二數組
題目二解答緩存
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;
}
複製代碼
電話面試,時長半個小時,全程沒問任何項目,一直在問基礎知識點。安全
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.接着問我,如何判斷兩個鏈表是否相交?
答:先分別求鏈表長度,哪一個長久用哪一個先進行遍歷長度差的長度,而後在一塊兒遍歷,若是相等,那麼相交。
有一些問題忘了,大致上問的問題都很基礎。
電話面試,時長半小時,感受創新工廠很卡時間,時間一到,立馬結束面試。面試官讓我準備好紙和筆,而後問了我兩道動態規劃的題目。
因爲這個時間過久遠了,這道題目具體是啥,實在想不起來了,只記得當時我強行套狀態方程,把思路說了一下,而後面試官最後給我講了一下這道題的思路,最後面試就結束了。
印象中沒有hr面,二面結束而後過了一天通知我面試經過了,而後發了offer,當時看到創新工廠開的offer,仍是很吃驚的,感受相對於其餘互聯網公司真的有點少,具體薪資你們能夠去offershow搜一下。
做者喬戈裏親歷2019秋招,哈工大計算機本碩,百度java工程師,歡迎你們關注個人微信公衆號:程序員喬戈裏,公衆號有3T編程資源,以及我和我朋友(百度C++工程師)在秋招期間整理的近200M的面試必考的java與C++面經,並有天天一道leetcode打卡羣與技術交流羣,歡迎關注。