2018阿里巴巴秋招java笔试题做题记录
一、單項(xiàng)選擇題
1、以下函數(shù)的時(shí)間復(fù)雜度是 ( )
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);
}
}
求遞歸函數(shù)的時(shí)間復(fù)雜度,借助棧來(lái)存儲(chǔ)。
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、在一臺(tái)64位的計(jì)算機(jī)上,以下哪段C語(yǔ)言代碼與代碼(x[2]+4)[3]等價(jià)(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、關(guān)于ios和Android應(yīng)用以下描述錯(cuò)誤的是()
A.ios和Android應(yīng)用界面都可以通過(guò)IDE可視化界面拖拽完成布局,也可以在運(yùn)行時(shí)通過(guò)代碼布局
B.Objective C的ARC和Java的GC,都是一種運(yùn)行時(shí)內(nèi)存管理機(jī)制
C.ios和Android應(yīng)用都可以發(fā)布或接收通知來(lái)進(jìn)行跨進(jìn)程通信
D.Ios和Android應(yīng)用都在調(diào)用某些系統(tǒng)功能如相機(jī)時(shí),需預(yù)先擁有相應(yīng)權(quán)限
E.ios和Andriod應(yīng)用都擁有各自獨(dú)立、安全隔離的文件空間
F.ios和Andriod應(yīng)用都可以注冊(cè)自定義URL Scheme
參考答案:C
4、堆棧中有元素abcdef,每次出棧可以選擇一個(gè)或者兩個(gè)元素棧,當(dāng)有兩個(gè)元素出棧時(shí)可以選擇其中一個(gè)重新入棧,則所有元素為空,那么可能的出棧方式有( )種?
A.23
B.22
C.21
D.20
E.19
F.18
參考答案:C
5、下列關(guān)于linux中kernel space和user space描述錯(cuò)誤的是()
A.user space不能直接對(duì)文件進(jìn)行寫(xiě)操作
B.程序代碼能手動(dòng)指定在哪個(gè)space中運(yùn)行
C.user space不能直接創(chuàng)建進(jìn)程
D.user space和kernel space的運(yùn)行空間是相互隔離的
E.Kernel space可以執(zhí)行任意系統(tǒng)命令
F.user space中運(yùn)行出錯(cuò)不會(huì)影響kernel space
參考答案:B
6、請(qǐng)閱讀下面代碼,計(jì)算運(yùn)行結(jié)果:
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); } } }以上程序的運(yùn)行結(jié)果可能出現(xiàn)的是:( )
A.list.add(new B())編譯報(bào)錯(cuò)
B.method1編譯報(bào)錯(cuò)
C.A a=list.get(0)編譯報(bào)錯(cuò)
D.程序正常運(yùn)行
E.list.add(new B())與method1(list)都編譯報(bào)錯(cuò)
F.list.add(new B())與A a=list.get(0);編譯報(bào)錯(cuò)
參考答案:C
7、請(qǐng)閱讀下面代碼,計(jì)算運(yùn)行結(jié)果;
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>以上程序的運(yùn)行結(jié)果是:()
A.編譯報(bào)錯(cuò),有未捕捉的異常
B.程序正常運(yùn)行后,一直hold
C.程序正常運(yùn)行,控制臺(tái)打印出1
D.程序正常運(yùn)行,控制臺(tái)打印出0
E.程序編譯通過(guò),但運(yùn)行時(shí)報(bào)錯(cuò)
F.以上都不對(duì)
參考答案:A
8、在一臺(tái)6G內(nèi)存Linux操作系統(tǒng)的機(jī)器上,coredump打開(kāi)且大小不做限制,執(zhí)行下面的程序分別會(huì)發(fā)生什么?
(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組成一個(gè)4位數(shù),要求每一位都不一樣,請(qǐng)問(wèn)能組成多少個(gè)四位數(shù)( )
A.240
B.280
C.300
D.360
E.400
F.450
簡(jiǎn)單排列組合公式應(yīng)用
C(5,1)*C(5,1)*C(4,1)*C(3,1)=300
參考答案:C
11、小明有200個(gè)淘公仔,小梅有20個(gè)電腦包,每次小明給小梅6個(gè)淘公仔,小梅就給小明1個(gè)電腦包,經(jīng)過(guò)多少次交互后,小明手中的淘公仔的個(gè)數(shù)是小梅手中電腦包數(shù)量的11倍?( )
A.4
B.5
C.6
D.7
E.8
F.9
參考答案:A
200-6n=11(20-n)
解析:n=4
12、以下描述正確的是()
A.線性規(guī)劃問(wèn)題是一個(gè)NP-Hard問(wèn)題
B.因?yàn)閱渭冃畏梢员WC在限步數(shù)內(nèi)收斂,所以是復(fù)雜度為多項(xiàng)式級(jí)別的算法,用于解決線性規(guī)劃問(wèn)題
C.內(nèi)點(diǎn)法只用于解決線性規(guī)劃問(wèn)題
D.線性規(guī)劃區(qū)別于非線性規(guī)劃的地方在于,其達(dá)到最優(yōu)點(diǎn)的時(shí)候不需要滿足K-K-T優(yōu)化條件
E.一個(gè)可解的線性規(guī)劃問(wèn)題的主問(wèn)題和對(duì)偶問(wèn)題分別達(dá)到最優(yōu)化的時(shí)候,最優(yōu)值一定相等
F.以上都不對(duì)
參考答案:B
13、設(shè)有一個(gè)二維數(shù)組A[m][n],假設(shè)A[0][1]存放位置在1601(10),A[3][3]存放位置在1648(10),每個(gè)元素占一個(gè)空間,問(wèn)A[2]2存放在什么位置?腳注(10)表示用10進(jìn)制表示。( )
A.1616
B.1617
C.1618
D.1631
E.1632
F.1633
參考答案:E
解析:
3n+2=1848-1601,解得n=15。
每行15個(gè),所以A[2][2]在32的位置,也就是1632(10)
每一行15個(gè)元素,每個(gè)元素占據(jù)一個(gè)空間,因此A[2][2]=1601+15+15+1=1632
14、天氣預(yù)報(bào)說(shuō)明天降水概率是84%,假設(shè)降水和時(shí)間無(wú)關(guān),請(qǐng)問(wèn)明天中午12點(diǎn)之前就降水 A.30%
B.40%
C.50%
D.60%
E.70%
F.80%
12點(diǎn)前不下雨:x
12點(diǎn)后不下雨:y
x*y=1-0.84;降水和時(shí)間無(wú)關(guān),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); }程序執(zhí)行后,輸出的結(jié)果是:
A.160
B.拋出UnsupportedOperationException異常
C.拋出NullPointerException異常
D.220
E.210
F.170
參考答案:F
16、一個(gè)等差數(shù)列第x ,y ,z三項(xiàng)的值分別是y ,z ,x ,試求第x+y項(xiàng)和第z+y項(xiàng)的差值( )
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.機(jī)器學(xué)習(xí)中,下面哪個(gè)方法不是為了防止過(guò)擬合的?
A.Batchnorm
B.Dropout
C.Weight decay
D.Dropconnect
E.Early stopping
F.Data augmentation
正確答案:A
18.在關(guān)聯(lián)規(guī)則挖掘算法中,有已知如下事務(wù)類,支持度support=0.4,則下列選項(xiàng)不正確的是()
A.{Bread,Milk}是頻繁項(xiàng)集
B. {Bread,Milk,Beer}是{Bread,Milk}的超集
C. {Bread,Milk}是頻繁閉項(xiàng)集
D. {Bread,Milk}是最大頻繁項(xiàng)集
E. {Bread,Diaper}是頻繁項(xiàng)集
參考答案:D
19.評(píng)分卡算法(Score Card)是在金融領(lǐng)域廣泛應(yīng)用的一種評(píng)分算法,通過(guò)多個(gè)維度的評(píng)分匯總得到對(duì)于一個(gè)實(shí)體的總體評(píng)估,一下說(shuō)法錯(cuò)誤的是()
A.評(píng)分卡的底層分類算法最常用的是邏輯回歸算法,因此評(píng)分卡是一種相對(duì)白盒的算法
B.評(píng)分卡算法其中一個(gè)重要的數(shù)據(jù)處理步驟是數(shù)據(jù)分箱,根據(jù)特征取值將數(shù)據(jù)離散化為若干區(qū)間,這種操作能對(duì)某些數(shù)據(jù)異常值進(jìn)行處理
C.評(píng)分卡算法中如果變量之間存在多重共線性,說(shuō)明可能存在兩個(gè)變量高度相關(guān),需要進(jìn)行降維或剔除變量
D.評(píng)分卡中對(duì)用戶分類使用的邏輯回歸算法是廣義線性回歸模型的一種
E.評(píng)分卡模型效果的驗(yàn)證可以通過(guò)ROC曲線來(lái)看
F.評(píng)分卡中的邏輯回歸算法可以用于二分類算法,而不能用于多分類問(wèn)題
參考答案:A
二、編程題:
1、天貓國(guó)際每天都會(huì)賣出很多跨境商品,用戶每次下單可能購(gòu)買多個(gè)商品,購(gòu)買總數(shù)小于10件,由于海關(guān)規(guī)定,每一個(gè)進(jìn)入海關(guān)的箱子里面的商品總額不能超過(guò)2000元(否則不能清關(guān))所以當(dāng)用戶下單總金額超過(guò)2000,必須使用多個(gè)箱子分開(kāi)包裝運(yùn)輸;現(xiàn)在為了節(jié)約運(yùn)輸成本,希望在滿足海關(guān)的要求下,能夠使用盡可能少的箱子。
注:
每個(gè)商品都有自己的單價(jià),有特定的長(zhǎng)寬高,所有商品都是長(zhǎng)方體
商品可以橫放、豎放、側(cè)放,但不用考慮斜放,但是長(zhǎng)寬高各項(xiàng)總和必須都要小于等于箱子的長(zhǎng)寬高
假定目前天貓國(guó)際使用同一種規(guī)格的箱子
boxLong,boxWidth,boxHigh
(箱子長(zhǎng),箱子寬,箱子高)
某用戶下單買了如下商品
n(商品件數(shù))
item1Price,item1Long,item1With,item1High
item2Price,item2Long,item2With,item2High
item3Price,item3Long,item3With,item3High
item4Price,item4Long,item4With,item4High
…
(商品價(jià)格,商品長(zhǎng),商品寬,商品高)
(所有輸入類型均為int型正整數(shù))
請(qǐng)你算出需要使用最小的箱子數(shù)量,可以將這些商品順利得清關(guān)送到消費(fèi)者手中,如果無(wú)解,輸出-1
代碼模板:
import java.lang.reflect.Array; import java.util.Scanner; public class Main { /**請(qǐng)完成下面這個(gè)process函數(shù),實(shí)現(xiàn)題目要求的功能**/ /**當(dāng)然,你也可以不按照這個(gè)模板來(lái)作答,完全按照自己的想法來(lái)^-^ **/ 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、在快遞公司干線運(yùn)輸?shù)能囕v使用中,存在著單邊車和雙邊車的兩種使用場(chǎng)景,例如北京中心-杭州中心,兩個(gè)分撥中心到彼此的單量對(duì)等,則可以開(kāi)雙邊車(即同一輛車可以往返對(duì)開(kāi)),而當(dāng)兩個(gè)中心的對(duì)發(fā)單量不對(duì)等時(shí),則會(huì)采用單邊車,并且雙邊車的成本是低于單邊車的,即將兩輛對(duì)開(kāi)的單邊車合并為一輛往返的雙邊車是能夠節(jié)省運(yùn)力成本的
單邊車優(yōu)化原則:
將單邊車優(yōu)化的規(guī)則進(jìn)行可抽象為以下三種(A,B,C均表示分撥中心):
規(guī)則-1: A-B單邊車,B-A單邊車 優(yōu)化方案:將A-B和B-A的兩輛單邊車合并為雙邊;
規(guī)則-2: A-B單邊車,B-C單邊車,C-A單邊車 優(yōu)化方案:將A-B、B-C、C-A的三輛單邊車優(yōu)化為一輛環(huán)形往返車;
規(guī)則-3: A-B單邊車,C-A單邊車,B、C同省 優(yōu)化方案:當(dāng)B、C同省,將A-B、C-A兩輛單邊優(yōu)化為一輛環(huán)形往返
問(wèn)題如下:
以某快遞公司的實(shí)際單邊車數(shù)據(jù)為例(線路ID編碼;出分撥中心;出分撥中心所在省;到達(dá)分撥中心;到達(dá)分撥中心所在省;車型;),進(jìn)行優(yōu)化,優(yōu)化的規(guī)則參照以上,并且優(yōu)先級(jí)依次降低,合并的時(shí)候需要考慮車型(分為17.5m和9.6m兩種):1、相同車型才能進(jìn)行合并;2、兩輛同方向的9.6m可以與一輛17.5m的對(duì)開(kāi)車型合并優(yōu)化 說(shuō)明:優(yōu)化輸出結(jié)果按照規(guī)則分類,例如rule1:2016120001+2016120002表示將單邊車線路ID編碼為2016120001和2016120002按照規(guī)則1合并優(yōu)化
代碼模板:
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;//出發(fā)分撥 private String sPro;//出發(fā)省 private String eCen;//到達(dá)分撥 private String ePro;//到達(dá)省 //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;} } }總結(jié)
以上是生活随笔為你收集整理的2018阿里巴巴秋招java笔试题做题记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 胶片效果滤镜渲染工具:DxO FilmP
- 下一篇: 彻底理解“EBIT、EBITDA与净利润