返回

2021年京東研發(開發)崗位面試題

第1題:


?在京東商城的商品展示頁面下方,總會有一些關于本商品的客戶評論信息。模仿該評論模塊,有如下三個表:price(商品表),userinfo(用戶表),threads(評論主題表)

1.請畫出以上三張表對應實體的ER圖(實體字段標明主鍵外鍵即可,用箭頭表示)
2.在product表中加入一條新紀錄(1004,'京東空調',3000).請寫出對應的SQL語句。
3.更新product表中pid為1001的商品的價格為3666。請寫出對應的SQL語句。
4.在product表中查詢pname中帶有"京"的商品。請寫出對應的SQL語句。
5.查詢product表中price在1000.0與3000.0之間的所有商品并按照價格降序排序。

答案:



2.INSERT INTO product(Pid,Pname,Price)VALUES(1004,'京東空調',3000)
3.UPDATE product SET Price=3666 WHEREpid=1001
4.SELECT * FROM product WHERE pname LIKE '%京%'
5.SELECT* FROM product WHERE price<3000.0 AND price>1000.0 ORDER BY price DESC


第2題:


?有7克,2克砝碼各一個,天平一只,如何只用這些物品3次將140的鹽分為50、90克各一份?



1、將140克鹽放天平兩邊平分兩份各70克;

2、將一份70克鹽平分兩份各35克;

3、將7克和2克砝碼各方天平一側,取一份35克鹽向天平兩端加知道左右平衡,此時與7克砝碼一側為15克鹽,與2克砝碼一側為20克鹽;

4、此時20克鹽加70克鹽為90克,剩余合并為50克。


第3題:


?京東商城的商品搜索功能是整個網站架構中非常重要的一個模塊。當用戶在搜索欄中寫入他們想要搜索的關鍵字時,往往會有一些熱門的關鍵詞出現在提示框中。對于這一功能的實現,你認為需要注意什么。



1.用戶輸入一些關鍵字查詢時,將用戶的相關信息(ip,cookie,keyword,usernameetc.),暫時存儲。(臨時對象,臨時文件等等)。
2.定時從暫時緩存處,一次行讀取,寫入到數據庫中。
3.記錄下來關鍵字后,需要定時從數據庫中提取出來。
4.數據庫存儲建議采用Oracle,因為這個數據量會增加很快,且很大。最好采用分表處理。
5.定時生成相關關鍵字頁面,可以與定時關鍵字寫入數據庫放在一起。


第4題:


?現有一圓環形路,路上有n個加油站,第i個加油站儲存有Ni升容量的油,每兩個加油站之間有一定的距離(km),一汽車初始無油,該車每公里消耗w升油,請問該車從哪個加油站出發可以繞該環形路行駛一圈。給出所有的算法及時間的復雜度。



?對這個問題,我提供三種解題思路:首先不妨設第i個加油站與之后加油站距離為g[i]/w,這樣相當于每公里消耗1升油,這里的假設和量綱縮放并不影響實際結果,只是簡化計算。


方法一:從左往右遍歷,記住油量和最少的位置,從其下一個位置出發。

int selectGasStation_1(const vector &a, const vector &g, const int n) {

??? int res = 0, min = N[0] - g[0], sum = min;

??? for (int i = 1; i < n; ++i)

??? {

??? ? ? sum += N[i] - g[i];

??? ? ? if (sum < min) {

??? ? ? ? ? min = sum;

??? ? ? ? ? res = i;

??? ? ? }

??? }

??? return sum >= 0 ? (res + 1) % n : -1;

}

方法二:開辟一個長度為N的數組v,記錄N[i]-g[i]。從后往前遍歷數組v。如果v[i]小于零,將其與v[i-1]合并,因為此時i不可能作為起點。如果v[i]不小于零,記入sum,并記錄該位置pos(有可能作為起點)。最后,如果v[0]大于等于零,說明整個路段已經沒有負的v[i]。返回0即可。如果v[0]+sum>=0,有滿足條件的加油站,返回pos。否則,返回-1。

int selectGasStation_2(const vector &a, const vector &g, const int n) {

??? int v[n];

??? for (int i = 0; i < n; ++i)

??? ? ? v[i] = N[i] - g[i];

??? int sum = 0, pos = -1;

??? for (int i = n-1; i > 0; --i)

??? {

??? ? ? if (v[i] >= 0) {

??? ? ? ? ? sum += v[i];

??? ? ? ? ? pos = i;

??? ? ? } else {

??? ? ? ? ? v[i-1] += v[i];

??? ? ? }

??? }

??? if (v[0] >= 0) return 0;

??? else if (v[0] + sum >= 0) return pos;

??? else return -1;

}

方法三:開辟一個長度為2*n-1的數組v,記錄N[i]-g[i](環轉化為線性)。使用兩個指針start和end。如果[start, ? ?end]區間和小于0,令start = end + 1并繼續。直至找到長度為N的區間[start, ? ?end],并且區間和大于等于0。找到返回start。


int selectGasStation_3(const vector &a, const vector &g, const int n) {

??? int v[2 * n];

??? for (int i = 0; i < n; ++i)

??? {

??? ? ? v[i] = N[i] - g[i];

??? ? ? v[i+n] = N[i] - g[i];

??? }

??? int sum = 0;

??? for (int start = 0, end = 0; start <= n && end < 2 * n; end++)

??? {

??? ? ? if (sum + v[end] < 0) {

??? ? ? ? ? start = end + 1;

??? ? ? ? ? sum = 0;

??? ? ? } else {

??? ? ? ? ? if (end - start == n - 1)?

??? ? ? ? ? ? ? return start;

??? ? ? ? ? sum += v[end];

??? ? ? }

??? }

??? return -1;

}

? ?


以上三種解法的時間復雜度均為O(n),應該滿足最苛刻的效率要求了。



第5題:


???????? Asp.Net種頁面之間傳值有幾種方式?


第6題:


???????? Asp.Net中的Session經常丟失,怎么解決?


相關知識

免费 无码 国产在线观看观-亚洲精品乱码久久久久-久久精品无码一区二区国产-国产欧美一区二区精品久久久