2018阿里巴巴秋招java笔试题做题记录
一、單項選擇題
1、以下函數的時間復雜度是 ( )
void func(int x,int y, int z){
if(x<=0)
printf(“%d, %d\n”, y, z);
else
{
func(x-1,y+1,z);
func(x-1,y,z+1);
}
}
求遞歸函數的時間復雜度,借助棧來存儲。
A.O(x*y*z)
B.O(x^2*y^2)
C.O(2^x)
D.O(2^x*2^y*2^z)
E.O(x!)
F.O((x*y*z)!)
參考答案:C
2、在一臺64位的計算機上,以下哪段C語言代碼與代碼(x[2]+4)[3]等價(x的類型是int **) ( )
A.(((x+16))+28)
B.(((x+2))+7)
C.**(x+28)
D.*(((*x)+2)+7)
E.*(((*x)+16)+28)
F.**(x+9)
參考答案:B
3、關于ios和Android應用以下描述錯誤的是()
A.ios和Android應用界面都可以通過IDE可視化界面拖拽完成布局,也可以在運行時通過代碼布局
B.Objective C的ARC和Java的GC,都是一種運行時內存管理機制
C.ios和Android應用都可以發布或接收通知來進行跨進程通信
D.Ios和Android應用都在調用某些系統功能如相機時,需預先擁有相應權限
E.ios和Andriod應用都擁有各自獨立、安全隔離的文件空間
F.ios和Andriod應用都可以注冊自定義URL Scheme
參考答案:C
4、堆棧中有元素abcdef,每次出棧可以選擇一個或者兩個元素棧,當有兩個元素出棧時可以選擇其中一個重新入棧,則所有元素為空,那么可能的出棧方式有( )種?
A.23
B.22
C.21
D.20
E.19
F.18
參考答案:C
5、下列關于linux中kernel space和user space描述錯誤的是()
A.user space不能直接對文件進行寫操作
B.程序代碼能手動指定在哪個space中運行
C.user space不能直接創建進程
D.user space和kernel space的運行空間是相互隔離的
E.Kernel space可以執行任意系統命令
F.user space中運行出錯不會影響kernel space
參考答案:B
6、請閱讀下面代碼,計算運行結果:
public class C{ static class A{ } static class B extends A{ } public static void main(String[] args){ ArrayList<A> list = new ArrayList<A>(); list.add(new B()); method1(list); } private static void method1(List<?[侯萍1] supper A> list) { for(int i=0;i<list.size();i++){ A a = list.get(0); } } }以上程序的運行結果可能出現的是:( )
A.list.add(new B())編譯報錯
B.method1編譯報錯
C.A a=list.get(0)編譯報錯
D.程序正常運行
E.list.add(new B())與method1(list)都編譯報錯
F.list.add(new B())與A a=list.get(0);編譯報錯
參考答案:C
7、請閱讀下面代碼,計算運行結果;
public class ThreadTest{ private static AtomicInteger atomicInteger=new AtomicInteger(); public static void main(String[] args){ A a =new A(); try{ atomicInteger.wait(); } catch (InterruptedException e){ e.printStackTrace(); } a.start(); } static class A extends Thread{ <a class="js-nc-card" data-card-uid="992988" href="/profile/992988" target="_blank">@Override public void run(){ atomicInteger.notify(); atomicInteger.lazySet(1); System.out.println(atomicInteger.get()); } } }</a>以上程序的運行結果是:()
A.編譯報錯,有未捕捉的異常
B.程序正常運行后,一直hold
C.程序正常運行,控制臺打印出1
D.程序正常運行,控制臺打印出0
E.程序編譯通過,但運行時報錯
F.以上都不對
參考答案:A
8、在一臺6G內存Linux操作系統的機器上,coredump打開且大小不做限制,執行下面的程序分別會發生什么?
(1)
(2)
#include<stdio.h> #include<stdlib.h> int32_t main(){ unit64_t size=10*1024*1024*1024L; char* a=new char(size); *(a+1)='a'; return 0; }(3)
#include<stdio.h> #include<stdlib.h> int32_t main(){ unit64_t size=7*1024*1024*1024L; char* a=new char(size); *(a+size-1)='a'; return 0; }A.coredump,coredump,coredump
B.正常,coredump,正常
C.正常,正常,coredump
D.coredump,正常,coredump
E.coredump,正常,正常
F.正常,coredump,coredump
參考答案:A
9、下列程序的輸出是()
#include<iostream> using namespace std; class A{ public: A(int n):m_n(n){} int cal(){ int result = 0,i = 0,j = 0; for(int k = m_n;k>0;k--){ if(j>0) j = k*10+j; else j = k; while (j>=10) { int t = j % 100; j = j / 100; result = ((i++ % 2==0) ? result+t:result-t); } } if(j>0) result = ((i++ % 2==0) ? result+j:result-j); return result; } private: int m_n; }; int main(){ A a = A(101); cout<<a.cal()<<endl; return 0; }A.-80
B.-79
C.0
D.90
E.79
F.80
參考答案:A
10、用0,1,2,3,4,5組成一個4位數,要求每一位都不一樣,請問能組成多少個四位數( )
A.240
B.280
C.300
D.360
E.400
F.450
簡單排列組合公式應用
C(5,1)*C(5,1)*C(4,1)*C(3,1)=300
參考答案:C
11、小明有200個淘公仔,小梅有20個電腦包,每次小明給小梅6個淘公仔,小梅就給小明1個電腦包,經過多少次交互后,小明手中的淘公仔的個數是小梅手中電腦包數量的11倍?( )
A.4
B.5
C.6
D.7
E.8
F.9
參考答案:A
200-6n=11(20-n)
解析:n=4
12、以下描述正確的是()
A.線性規劃問題是一個NP-Hard問題
B.因為單純形法可以保證在限步數內收斂,所以是復雜度為多項式級別的算法,用于解決線性規劃問題
C.內點法只用于解決線性規劃問題
D.線性規劃區別于非線性規劃的地方在于,其達到最優點的時候不需要滿足K-K-T優化條件
E.一個可解的線性規劃問題的主問題和對偶問題分別達到最優化的時候,最優值一定相等
F.以上都不對
參考答案:B
13、設有一個二維數組A[m][n],假設A[0][1]存放位置在1601(10),A[3][3]存放位置在1648(10),每個元素占一個空間,問A[2]2存放在什么位置?腳注(10)表示用10進制表示。( )
A.1616
B.1617
C.1618
D.1631
E.1632
F.1633
參考答案:E
解析:
3n+2=1848-1601,解得n=15。
每行15個,所以A[2][2]在32的位置,也就是1632(10)
每一行15個元素,每個元素占據一個空間,因此A[2][2]=1601+15+15+1=1632
14、天氣預報說明天降水概率是84%,假設降水和時間無關,請問明天中午12點之前就降水 A.30%
B.40%
C.50%
D.60%
E.70%
F.80%
12點前不下雨:x
12點后不下雨:y
x*y=1-0.84;降水和時間無關,x=y;x=y=0.4;1-x=0.6
正確答案:D
15、
public class ListParamTest { public static void resetList(List dataList) { dataList.subList(2,4).set(0,40); dataList = new ArrayList(dataList); dataList.add(50); } public static void setOne(List dataList) { dataList.set(3,100); } public static void main(String[] args){ List dataList = new ArrayList(Arrays.asList(10,20,30,null)); resetList(dataList); setOne(dataList); int sum = 0; for(Integer v:dataList){ sum +=v; } System.out.println(sum); }程序執行后,輸出的結果是:
A.160
B.拋出UnsupportedOperationException異常
C.拋出NullPointerException異常
D.220
E.210
F.170
參考答案:F
16、一個等差數列第x ,y ,z三項的值分別是y ,z ,x ,試求第x+y項和第z+y項的差值( )
A.-3
B.-2
C.-1
D.0
E.1
F.2
(z-y)/(y-x)=(x-z)/(z-y)=(x-y)/(z-x)
x=y=z
正確答案:D
17.機器學習中,下面哪個方法不是為了防止過擬合的?
A.Batchnorm
B.Dropout
C.Weight decay
D.Dropconnect
E.Early stopping
F.Data augmentation
正確答案:A
18.在關聯規則挖掘算法中,有已知如下事務類,支持度support=0.4,則下列選項不正確的是()
A.{Bread,Milk}是頻繁項集
B. {Bread,Milk,Beer}是{Bread,Milk}的超集
C. {Bread,Milk}是頻繁閉項集
D. {Bread,Milk}是最大頻繁項集
E. {Bread,Diaper}是頻繁項集
參考答案:D
19.評分卡算法(Score Card)是在金融領域廣泛應用的一種評分算法,通過多個維度的評分匯總得到對于一個實體的總體評估,一下說法錯誤的是()
A.評分卡的底層分類算法最常用的是邏輯回歸算法,因此評分卡是一種相對白盒的算法
B.評分卡算法其中一個重要的數據處理步驟是數據分箱,根據特征取值將數據離散化為若干區間,這種操作能對某些數據異常值進行處理
C.評分卡算法中如果變量之間存在多重共線性,說明可能存在兩個變量高度相關,需要進行降維或剔除變量
D.評分卡中對用戶分類使用的邏輯回歸算法是廣義線性回歸模型的一種
E.評分卡模型效果的驗證可以通過ROC曲線來看
F.評分卡中的邏輯回歸算法可以用于二分類算法,而不能用于多分類問題
參考答案:A
二、編程題:
1、天貓國際每天都會賣出很多跨境商品,用戶每次下單可能購買多個商品,購買總數小于10件,由于海關規定,每一個進入海關的箱子里面的商品總額不能超過2000元(否則不能清關)所以當用戶下單總金額超過2000,必須使用多個箱子分開包裝運輸;現在為了節約運輸成本,希望在滿足海關的要求下,能夠使用盡可能少的箱子。
注:
每個商品都有自己的單價,有特定的長寬高,所有商品都是長方體
商品可以橫放、豎放、側放,但不用考慮斜放,但是長寬高各項總和必須都要小于等于箱子的長寬高
假定目前天貓國際使用同一種規格的箱子
boxLong,boxWidth,boxHigh
(箱子長,箱子寬,箱子高)
某用戶下單買了如下商品
n(商品件數)
item1Price,item1Long,item1With,item1High
item2Price,item2Long,item2With,item2High
item3Price,item3Long,item3With,item3High
item4Price,item4Long,item4With,item4High
…
(商品價格,商品長,商品寬,商品高)
(所有輸入類型均為int型正整數)
請你算出需要使用最小的箱子數量,可以將這些商品順利得清關送到消費者手中,如果無解,輸出-1
代碼模板:
import java.lang.reflect.Array; import java.util.Scanner; public class Main { /**請完成下面這個process函數,實現題目要求的功能**/ /**當然,你也可以不按照這個模板來作答,完全按照自己的想法來^-^ **/ private static int process() { } public static void main(String args[]){ Scanner scanner = new Scanner(System.in); boxTemplate.price = CUSTOMS_LIMIT_MONEY_PER_BOX; while (scanner.hasNext()){ boxTemplate.length = scanner.nextInt(); boxTemplate.width = scanner.nextInt(); boxTemplate.height = scanner.nextInt(); int itemNum = scanner.nextInt(); items = new Model[itemNum]; for(int i=0; i<itemNum; i++){ Model item = new Model(); item.price = scanner.nextInt(); item.length = scanner.nextInt(); item.width = scanner.nextInt(); item.height = scanner.nextInt(); items[i] = item; } long startTime = System.currentTimeMillis(); boxMinNum = Integer.MAX_VALUE; System.out.println (process()); } } }2、在快遞公司干線運輸的車輛使用中,存在著單邊車和雙邊車的兩種使用場景,例如北京中心-杭州中心,兩個分撥中心到彼此的單量對等,則可以開雙邊車(即同一輛車可以往返對開),而當兩個中心的對發單量不對等時,則會采用單邊車,并且雙邊車的成本是低于單邊車的,即將兩輛對開的單邊車合并為一輛往返的雙邊車是能夠節省運力成本的
單邊車優化原則:
將單邊車優化的規則進行可抽象為以下三種(A,B,C均表示分撥中心):
規則-1: A-B單邊車,B-A單邊車 優化方案:將A-B和B-A的兩輛單邊車合并為雙邊;
規則-2: A-B單邊車,B-C單邊車,C-A單邊車 優化方案:將A-B、B-C、C-A的三輛單邊車優化為一輛環形往返車;
規則-3: A-B單邊車,C-A單邊車,B、C同省 優化方案:當B、C同省,將A-B、C-A兩輛單邊優化為一輛環形往返
問題如下:
以某快遞公司的實際單邊車數據為例(線路ID編碼;出分撥中心;出分撥中心所在省;到達分撥中心;到達分撥中心所在省;車型;),進行優化,優化的規則參照以上,并且優先級依次降低,合并的時候需要考慮車型(分為17.5m和9.6m兩種):1、相同車型才能進行合并;2、兩輛同方向的9.6m可以與一輛17.5m的對開車型合并優化 說明:優化輸出結果按照規則分類,例如rule1:2016120001+2016120002表示將單邊車線路ID編碼為2016120001和2016120002按照規則1合并優化
代碼模板:
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<UnilateralLine> lineList = new ArrayList<UnilateralLine>(); while (scanner.hasNextLine()) { String[] options = scanner.nextLine().split(";"); if (options.length < 5) { break; } lineList.add(new UnilateralLine(options[0], options[1], options[2], options[3], options[4], options[5])); } scanner.close(); // wirte your code here List<String> result = calculateUnilateral(lineList); for (String str : result) { System.out.println(str); } } public static List<String> calculateUnilateral(List<UnilateralLine> lineList) { List<String> result = new ArrayList<String>(); return result; } public static class UnilateralLine { private String id; private String sCen;//出發分撥 private String sPro;//出發省 private String eCen;//到達分撥 private String ePro;//到達省 //9.6m/17.5m private String tType;//車型 public UnilateralLine(String id, String sCen, String sPro, String eCen, String ePro,String tType) { this.id = id;this.sCen = sCen;this.sPro = sPro;this.eCen = eCen;this.ePro = ePro;this.tType = tType;} public String getId() {return id;} public void setId(String id) {this.id = id;} public String getSCen() {return sCen;} public void setSCen(String ePro) {this.ePro = ePro;} public String getSPro() {return sPro;} public void setSPro(String sPro) {this.sPro = sPro;} public String getECen() {return eCen;} public void setECen(String eCen) {this.eCen = eCen;} public String getEPro() {return ePro;} public void setEPro(String ePro) {this.ePro = ePro;} public String getTType() {return tType;} public void setTType(String tType) {this.tType = tType;} } }總結
以上是生活随笔為你收集整理的2018阿里巴巴秋招java笔试题做题记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 胶片效果滤镜渲染工具:DxO FilmP
- 下一篇: pacman 查询_archlinux