1. 程式人生 > >劫就劫皇崗,嫖就嫖娘娘!

劫就劫皇崗,嫖就嫖娘娘!

阿里巴巴2017實習生筆試題(一)

這裡寫圖片描述

感覺怪怪的,為什麼沒有考java部分,語言類考的都是c或者c++。

完全不能夠幸福啊!

錯誤分類

語言:3
演算法:1
網路:2
邏輯:3

京東2016實習生招聘筆試真題-技術崗位選擇題A

這裡寫圖片描述

個人感覺:該題參考價值不大,都是一些零碎的知識,跟阿里的題對比缺乏系統性。

FIFO頁面淘汰演算法和LRU演算法不同的是,FIFO演算法遇到命中的不進行替換直接使用原來的。

Java工程師能力評估

這裡寫圖片描述

網易有道2017內推選擇題

這裡寫圖片描述

在一個文字中找for出現的次數:

grep for test.txt  | wc -l

更多的關於wc的命令請看:

wc命令

騰訊2016研發工程師筆試題(三)

這裡寫圖片描述

TCP正常建立連線與斷開狀態

這裡寫圖片描述

根據MAC地址查詢對應的IP地址是RARP協議完成的
把公網的IP地址轉換為私網的IP地址是NAT協議完成的
集中管理網路中的IP地址分配是DHCP協議完成的
ICMP協議用於控制資料報傳送中的差錯情況

在linux程式設計中,以下哪個TCP的套接字選項與nagle演算法的開啟和關閉有關?

當有一個TCP資料段不足MSS,比如要傳送700Byte資料,MSS為1460Byte的情況。nagle演算法會延遲這個資料段的傳送,等待,直到有足夠的資料填充成一個完整資料段。也許有人會問,這有什麼影響呢?沒有太大的影響,總體上來說,這種措施能節省不必要的資源消耗。但是要傳送的總體資料很小時,這種措施就是拖後腿了。比如,使用者請求一個網頁,大約十幾KB的資料,TCP先發送了八九個資料包,剩下幾百位元組一直不傳送,要等到另一個RTT才傳送,這時候前面傳送資料的ACK已經返回了。這樣的使用者體驗是很不好的。 所以,現在很多伺服器都選擇主動關閉nagle演算法,因為頻寬夠大,資源消耗不是問題,速度反而是個大問題。
從上述描述中,禁用 nagle,實質就是不在延遲 TCP_NODELAY

資料庫

定義:

主鍵 – 唯一標識一條記錄,不能有重複的,不允許為空

外來鍵 – 表的外來鍵是另一表的主鍵 , 外來鍵可以有重複的 , 可以是空值

索引 – 該欄位沒有重複值,但可以有一個空值

作用:

主鍵 – 用來保證資料完整性

外來鍵 – 用來和其他表建立聯絡用的

索引 – 是提高查詢排序的速度

個數:

主鍵 – 主鍵只能有一個

外來鍵 – 一個表可以有多個外來鍵

索引 – 一個表可以有多個唯一索引

應該多練一練程式設計題啊!感覺好渣!

2015小米暑期實習筆試題

1.世界上有10種人,一種懂二進位制,一種不懂。那麼你知道兩個int32整數m和n的二進位制表達,有多少個位(bit)不同麼?

第一題比較簡單,直接寫:

public class Solution {
    /**
     * 獲得兩個整形二進位制表達位數不同的數量
     *
     * @param m 整數m
     * @param n 整數n
     * @return 整型
     */
    public int countBitDiff(int m, int n) {
        int result = m^n;
        int count=0;
        while(result!=0){
            if(result%2!=0){
                count++;
            }
            result/=2;
        }
        return count;
    }
}

2.給定股票價格,求最多兩次買賣時,最大化該收益。

解法一,很簡潔,但我體會不到其中的思想:

The thinking is simple and is inspired by the best solution from Single Number II (I read through the discussion after I use DP).
Assume we only have 0 money at first;
4 Variables to maintain some interested ‘ceilings’ so far:
The maximum of if we’ve just buy 1st stock, if we’ve just sold 1nd stock, if we’ve just buy 2nd stock, if we’ve just sold 2nd stock.
Very simple code too and work well. I have to say the logic is simple than those in Single Number II.

public class Solution {
    public int maxProfit(int[] prices) {
        int hold1 = Integer.MIN_VALUE, hold2 = Integer.MIN_VALUE;
        int release1 = 0, release2 = 0;
        for(int i:prices){                              // Assume we only have 0 money at first
            release2 = Math.max(release2, hold2+i);     // The maximum if we've just sold 2nd stock so far.
            hold2    = Math.max(hold2,    release1-i);  // The maximum if we've just buy  2nd stock so far.
            release1 = Math.max(release1, hold1+i);     // The maximum if we've just sold 1nd stock so far.
            hold1    = Math.max(hold1,    -i);          // The maximum if we've just buy  1st stock so far. 
        }
        return release2; ///Since release1 is initiated as 0, so release2 will always higher than release1.
    }
}

DP求解需要把問題定義清楚,dp陣列表示什麼?

這裡dp[k][i]陣列表示到index=i為止(不包含i),在最多k次交易中,收到的最大話的收益!

有了清晰的問題定義,那麼來看轉移方程:

在index = i時,我們有兩種選擇:
1.不做交易,此時dp[k][i] = dp[k][i-1]
2.做交易,此時dp[k][i] = dp[k-1][j]+price[i]-price[j],j屬於[0,i-1]

所以,綜合來看:

dp[k][i] = max{dp[k][i-1],dp[k-1][j]+price[i]-price[j]}

阿里巴巴2015實習生筆試題

這裡寫圖片描述

關於迴圈佇列,參考迴圈佇列

對於迴圈佇列的難點是,難點就是判斷隊空、隊滿,以及計算佇列長度。

其實 big endian 是指低地址存放最高有效位元組( MSB ),而 little endian 則是低地址存放最低有效位元組( LSB )。 所有網路協議也都是採用 big endian 的方式來傳輸資料的。所以有時我們也會把 big endian 方式稱之為網路位元組序。當兩臺採用不同位元組序的主機通訊時,在傳送資料之前都必須經過位元組序的轉換成為網路位元組序後再進 行傳輸。

0x1234其實是0x00001234,不要當成了0x12340000了。0x1234中12是高位,34是低位。採用MSB比較符合人類習慣。

在N個亂序數字中查詢第k大的數字,時間複雜度可以減小至:

答案解析:
解法1:我們可以對這個亂序陣列按照從大到小先行排序,然後取出前k大,總的時間複雜度為O(n*logn + k)。

解法2:利用選擇排序或互動排序,K次選擇後即可得到第k大的數。總的時間複雜度為O(n*k)

解法3:利用快速排序的思想,從陣列S中隨機找出一個元素X,把陣列分為兩部分Sa和Sb。Sa中的元素大於等於X,Sb中元素小於X。這時有兩種情況:

  1. Sa中元素的個數小於k,則Sb中的第k-|Sa|個元素即為第k大數;

  2. Sa中元素的個數大於等於k,則返回Sa中的第k大數。時間複雜度近似為O(n)

解法4:二分[Smin,Smax]查詢結果X,統計X在陣列中出現,且整個陣列中比X大的數目為k-1的數即為第k大數。時間複雜度平均情況為O(n*logn)

解法5:用O(4*n)的方法對原陣列建最大堆,然後pop出k次即可。時間複雜度為O(4*n + k*logn)

解法6:維護一個k大小的最小堆,對於陣列中的每一個元素判斷與堆頂的大小,若堆頂較大,則不管,否則,彈出堆頂,將當前值插入到堆中。時間複雜度O(n * logk)

解法7:利用hash儲存陣列中元素Si出現的次數,利用計數排序的思想,線性從大到小掃描過程中,前面有k-1個數則為第k大數,平均情況下時間複雜度O(n)