6.2 筆試真題 & 詳解
第一部分 7道填空題:
1、IM的全稱( ),最大的三個IM( )
2、請寫出三個互聯網的網址
3、今年上市的5家互聯網企業( )
4、5、6、7全是行測題,邏輯推理型,不難。
第二部分 產品設計題
1、人人網想推出一個校園招聘系統,請設計一個企業用戶的注冊表單界面,并寫出設計思路及理由。
2、畫了一個人人網登陸的界面圖,要找問題,并給出修正圖。
第三部分 問答題
1、請比較撥號式電話與按鍵式電話的差異,請從多角度詳細闡述。
2、假如你是人人音樂的產品經理,請給出3個你認為最重要的數據,并說明理由。
3、博客和微博有哪些不同點,請從多角度詳細闡述。
4、假如有一個項目預定要在1個月內完成,結果一周之后,有一個技術人員病了,要住院3周,這時作為項目負責人的你會怎么辦?
附加題
人人網要做一個在線電影購票系統,請盡你所能詳細描述你的設計思路。
最后交卷的時候才知道要帶簡歷過去,還好好心的監考人員說等我10分鐘,讓我去打印了一份。
真題2:一、 Java筆試題•單項選擇題
1. Java是從(C)語言改進重新設計
A.Ada B.C++ C. Pascal D. BASIC
2. 下列語句哪一個正確(B)
A. Java程序經編譯后會產生machinecode
B. Java程序經編譯后會產生bytecode
C. Java程序經編譯后會產生DLL
D.以上都不正確
3. 下列說法正確的有(C)
A. class中的constructor不可省略
B. constructor必須與class同名,但方法不能與class同名
C. constructor在一個對象被new時執行
D. 一個class只能定義一個constructor
4. 提取Java存取數據庫能力的包是(A)
A.java.sqlB. java.awt C. java.lang D. java.swing
5. 下列運算符合法的是(A)
A. && B.<> C. if D. :=
6. 執行如下程序代碼
a=0;c=0;
do{
--c;
a=a-1;
}while(a>0);
后,C的值是(C)
A. 0 B. 1C.-1 D. 死循環
7. 下列哪一種敘述是正確的(D)
A. abstract修飾符可修飾字段、方法和類
B. 抽象方法的body部分必須用一對大括號{}包住
C. 聲明抽象方法,大括號可有可無
D. 聲明抽象方法不可寫出大括號
8. 下列語句正確的是(A)
A. 形式參數可被視為local variable
B. 形式參數可被字段修飾符修飾
C. 形式參數為方法被調用時,真正被傳遞的參數
D. 形式參數不可以是對象
9. 下列哪種說法是正確的(D)
A. 實例方法可直接調用超類的實例方法
B. 實例方法可直接調用超類的類方法
C. 實例方法可直接調用其他類的實例方法
D. 實例方法可直接調用本類的類方法
二、 Java筆試題•多項選擇題
1. Java程序的種類有(BCD)
A.類(Class) B.Applet C. Application D. Servlet
2. 下列說法正確的有(BCD)
A. 環境變量可在編譯source code時指定
B. 在編譯程序時,所能指定的環境變量不包括class path
C. javac一次可同時編譯數個java源文件
D. javac.exe能指定編譯結果要置于哪個目錄(directory)
3. 下列標識符不合法的有(ACD)
A.new B.$Usdollars C.1234 D. car.taxi
4. 下列說法錯誤的有(BCD)
A. 數組是一種對象
B. 數組屬于一種原生類
C. int number=[]={31,23,33,43,35,63}
D. 數組的大小可以任意改變
5. 不能用來修飾interface的有(ACD)
A.privateB. public C. protected D. static
6. 下列正確的有(ACD)
A. call by value不會改變實際參數的數值
B. call by reference能改變實際參數的參考地址
C. call by reference不能改變實際參數的參考地址
D. call byreference能改變實際參數的內容
7. 下列說法錯誤的有(ACD)
A. 在類方法中可用this來調用本類的類方法
B. 在類方法中調用本類的類方法時可直接調用
C. 在類方法中只能調用本類中的類方法
D. 在類方法中絕對不能調用實例方法
8. 下列說法錯誤的有(ABC)
A. Java面向對象語言容許單獨的過程和函數存在
B. Java面向對象語言容許單獨的方法存在
C. Java語言中的方法屬于類的成員(member)
D. Java語言中的方法必定隸屬于某一類(對象),調用方法與過程或函數相同
9. 下列說法錯誤的有(BCD)
A. 能被java.exe成功運行的java.class文件必須有main()方法
B. J2SDK就是Java API
C. Appletviewer.exe可利用jar選項運行.jar文件
D. 能被Appletviewer成功運行的java.class文件必須有main()方法
三、 JAVA相關基礎知識
1. 面向對象的特征有哪些方面
封裝,抽象, 繼承,多態
2. String是最基本的數據類型嗎?
基本數據類型包括byte、int、char、long、float、double、boolean和short。 java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用 StringBuffer類. String 和StringBuffer的區別: JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。這個String類 提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可以使用 StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據。
3. int和Integer有什么區別
Integer是int的封裝類,里面有很多進行處理的靜態方法, Integer是對象而int不是,內存的分配位置也不一樣
4. String和StringBuffer的區別
在java中有3個類來負責字符的操作。
1.Character 是進行單個字符操作的,
2.String 對一串字符進行操作。不可變類。
3.StringBuffer 也是對一串字符進行操作,但是可變類。
String:
是對象不是原始類型.
為不可變對象,一旦被創建,就不能修改它的值.
對于已經存在的String對象的修改都是重新創建一個新的對象,然后把新的值保存進去.
String 是final類,即不能被繼承.
StringBuffer:
是一個可變對象,當對他進行修改的時候不會像String那樣重新建立對象
它只能通過構造函數來建立,
StringBuffer sb = new StringBuffer();
note:不能通過付值符號對他進行付值.
sb = "welcome to here!";//error
對象被建立以后,在內存中就會分配內存空間,并初始保存一個null.向StringBuffer中付值的時候可以通過它的append方法.
sb.append("hello");
字符串連接操作中StringBuffer的效率要比String高:
總結: 如果在程序中需要對字符串進行頻繁的修改連接操作的話.使用StringBuffer性能會更高
5. 運行時異常與一般異常有何異同
Java提供了兩類主要的異常:runtime exception和checked exception。checked 異常也就是我們經常遇到的IO異常,以及SQL異常都是這種異常。對于這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch。所以,面對這種異常不管我們是否愿意,只能自己去寫一大堆catch塊去處理可能的異常。
但是另外一種異常:runtime exception,也稱運行時異常,我們可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,并且這種異常還是最常見的異常之一。
出現運行時異常后,系統會把異常一直往上層拋,一直遇到處理代碼。如果沒有處理塊,到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之后,如果是線程,這個線程也就退出了。如果是主程序拋出的異常,那么這整個程序也就退出了。運行時異常是Exception的子類,也有一般異常的特點,是可以被Catch塊處理的。只不過往往我們不對他處理罷了。也就是說,你如果不對運行時異常進行處理,那么出現運行時異常之后,要么是線程中止,要么是主程序終止。
如果不想終止,則必須撲捉所有的運行時異常,決不讓這個處理線程退出。隊列里面出現異常數據了,正常的處理應該是把異常數據舍棄,然后記錄日志。不應該由于異常數據而影響下面對正常數據的處理。在這個場景這樣處理可能是一個比較好的應用,但并不代表在所有的場景你都應該如此。如果在其它場景,遇到了一些錯誤,如果退出程序比較好,這時你就可以不太理會運行時異常,或者是通過對異常的處理顯式的控制程序退出。
異常表示程序運行過程中可能出現的非正常狀態,運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤。java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是并不要求必須聲明拋出未被捕獲的運行時異常。
6. 說出ArrayList, Vector, LinkedList的存儲性能和特性
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
7. &和&&的區別
&和&&都可以用作邏輯與的運算符,表示邏輯與(and),當運算符兩邊的表達式的結果都為true時,整個運算結果才為true,否則,只要有一方為false,則結果為false。
&&還具有短路的功能,即如果第一個表達式為false,則不再計算第二個表達式
&還可以用作位運算符,當&操作符兩邊的表達式不是boolean類型時,&表示按位與操作,我們通常使用0x0f來與一個整數進行&運算,來獲取該整數的最低4個bit位,
8. HashMap和Hashtable的區別
Hashtable和HashMap類有三個重要的不同之處。第一個不同主要是歷史原因。Hashtable是基于陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現。
也許最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是。這就意味著,雖然你可以不用采取任何特殊的行為就可以在一個多線程的應用程序中用一個Hashtable,但你必須同樣地為一個HashMap提供外同步。一個方便的方法就是利用Collections類的靜態的synchronizedMap()方法,它創建一個線程安全的Map對象,并把它作為一個封裝的對象來返回。這個對象的方法可以讓你同步訪問潛在的HashMap。這么做的結果就是當你不需要同步時,你不能切斷Hashtable中的同步(比如在一個單線程的應用程序中),而且同步增加了很多處理費用。
第三點不同是,只有HashMap可以讓你將空值作為一個表的條目的key或value。HashMap中只有一條記錄可以是一個空的key,但任意數量的條目可以是空的value。這就是說,如果在表中沒有發現搜索鍵,或者如果發現了搜索鍵,但它是一個空的值,那么get()將返回null。如果有必要,用containKey()方法來區別這兩種情況。
9. final, finally, finalize的區別
final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally—再異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。
finalize—方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
10. sleep()和wait()的區別
其實兩者都可以讓線程暫停一段時間,但是本質的區別是一個線程的運行狀態控制,一個是線程之間的通訊的問題
在java.lang.Thread類中,提供了sleep(),
而java.lang.Object類中提供了wait(), notify()和notifyAll()方法來操作線程
sleep()可以將一個線程睡眠,參數可以指定一個時間。
而wait()可以將一個線程掛起,直到超時或者該線程被喚醒。
wait有兩種形式wait()和wait(milliseconds).
sleep和wait的區別有:
1,這兩個方法來自不同的類分別是Thread和Object
2,最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可以使用同步控制塊或者方法。
3,wait,notify和notifyAll只能在同步控制方法或者同步控制塊里面使用,而sleep可以在
任何地方使用
synchronized(x){
x.notify()
//或者wait()
}
4,sleep必須捕獲異常,而wait,notify和notifyAll不需要捕獲異常
11. overload和override的區別,overloaded的方法是否可以改變返回值的類型
方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫Overriding是父類與子類之間多態性的一種表現,重載Overloading是一個類中多態性的一種表現。如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (Overriding)。子類的對象使用這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被“屏蔽”了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型。
12. 排序都有哪幾種方法?請列舉,用java實現一個快速排序
排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數排序)
用Java語言實現的各種排序,包括插入排序、冒泡排序、選擇排序、Shell排序、快速排序、歸并排序、堆排序、SortUtil等。
插入排序:包括直接插入排序,二分插入排序(又稱折半插入排序),鏈表插入排序,希爾排序(又稱縮小增量排序)。將n個元素的數列分為已有序和無序兩個部分,每次處理就是將無序數列的第一個元素與有序數列的元素從后往前逐個進行比較,找出插入位置,將該元素插入到有序數列的合適位置中。
冒泡排序 (BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在后面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數 放后。然后比較第2個數和第3個數,將小數放前,大數放后,如此繼續,直至比較最后兩個數,將小數放前,大數放后。至此第一趟結束,將最大的數放到了最 后。在第二趟:仍從第一對數開始比較(因為可能由于第2個數和第3個數的交換,使得第1個數不再小于第2個數),將小數放前,大數放后,一直比較到倒數第 二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。
由于在排序過程中總是小數往前放,大數往后放,相當于氣泡往上升,所以稱作冒泡排序。
選擇排序:每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最后,直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法。
快速排序(Quicksort)是對冒泡排序的一種改進。由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
13. 垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?
對于GC來說,當程序員創建對象時,GC就開始監控這個對象的地址、大小以及使用情況。通 常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當GC確定一些對象 為"不可達"時,GC就有責任回收這些內存空間。
可以。
程序員可以手動執行System.gc(),通知GC運行,但是Java語言規范并不保證GC一定會執行。
14. 是否可以從一個static方法內部發出對非static方法的調用?
不行,
可以這樣理解
static修飾的方法可以直接用類名調用
非static修飾的方法必須用類new出對象才能調用
當我們用類名直接調用時,可能這個類的對象并沒有new。
如果這時候static方法里調用非static的方法就會出現空指針異常,
當然這種錯誤編譯時就不會通過
15. 同步和異步有何異同,在什么情況下分別使用它們?舉例說明。
如果數據將在線程間共享。例如正在寫的數據以后可能被另一個線程讀到,或者正在讀的數據可能已經被另一個線程寫過了,那么這些數據就是共享數據,必須進行同步存取。
當應用程序在對象上調用了一個需要花費很長時間來執行的方法,并且不希望讓程序等待方法的返回時,就應該使用異步編程,在很多情況下采用異步途徑往往更有效率。
16. String str = new String(“abc”)在內存中是怎么分配的?
Java把內存劃分成兩種:一種是棧內存,一種是堆內存。
在函數中定義的一些基本類型的變量和對象的引用變量都在函數的棧內存中分配。
當在一段代碼塊定義一個變量時,Java就在棧中為這個變量分配內存空間,當超過變量的作用域后,Java會自動釋放掉為該變量所分配的內存空間,該內存空間可以立即被另作他用。
堆內存用來存放由new創建的對象和數組。
在堆中分配的內存,由Java虛擬機的自動垃圾回收器來管理。
在堆中產生了一個數組或對象后,還可以在棧中定義一個特殊的變量,讓棧中這個變量的取值等于數組或對象在堆內存中的首地址,棧中的這個變量就成了數組或對象的引用變量。
引用變量就相當于是為數組或對象起的一個名稱,以后就可以在程序中使用棧中的引用變量來訪問堆中的數組或對象。
17. String str1 = “abc”和String str1 = newString(“abc”);這兩個的區別是什么?
String str1 ="abc";
String str2 = "abc";
System.out.println(str1==str2); //true
可以看出str1和str2是指向同一個對象的。
String str1 =new String ("abc");
String str2 =new String ("abc");
System.out.println(str1==str2); // false
用new的方式是生成不同的對象。每一次生成一個。
因此用第二種方式創建多個”abc”字符串,在內存中其實只存在一個對象而已. 這種寫法有利與節省內存空間. 同時它可以在一定程度上提高程序的運行速度,因為JVM會自動根據棧中數據的實際情況來決定是否有必要創建新對象。而對于String str = new String("abc");的代碼,則一概在堆中創建新對象,而不管其字符串值是否相等,是否有必要創建新對象,從而加重了程序的負擔。
另一方面, 要注意: 我們在使用諸如Stringstr = "abc";的格式定義類時,總是想當然地認為,創建了String類的對象str。擔心陷阱!對象可能并沒有被創建!而可能只是指向一個先前已經創建的 對象。只有通過new()方法才能保證每次都創建一個新的對象。由于String類的immutable性質,當String變量需要經常變換其值時,應 該考慮使用StringBuffer類,以提高程序效率。
四、 Android相關基礎知識
1. Android dvm的進程和Linux的進程、應用程序的進程是否為同一個概念
DVM指dalivk的虛擬機。每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。
什么是android DVM:Dalvik是Google公司自己設計用于Android平臺的Java虛擬機,每一個Dalvik 應用作為一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。
Dalvik和Java運行環境的區別[
1:Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
2:Dalvik負責進程隔離和線程管理,每一個Android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執行。
3:不同于Java虛擬機運行java字節碼,Dalvik虛擬機運行的是其專有的文件格式Dex 4:dex文件格式可以減少整體文件尺寸,提高I/o操作的類查找速度。
5:odex是為了在運行過程中進一步提高性能,對dex文件的進一步優化。
6:所有的Android應用的線程都對應一個Linux線程,虛擬機因而可以更多的依賴操作系統的線程調度和管理機制
7:有一個特殊的虛擬機進程Zygote,他是虛擬機實例的孵化器。它在系統啟動的時候就會產生,它會完成虛擬機的初始化,庫的加載,預制類庫和初始化的操作。如果系統需要一個新的虛擬機實例,它會迅速復制自身,以最快的數據提供給系統。對于一些只讀的系統庫,所有虛擬機實例都和Zygote共享一塊內存區域。
2. Android中的動畫有哪幾類,它們的特點和區別是什么?
android支持兩種動畫模式,tween animation,frame animation
View Animation(Tween Animation):補間動畫,給出兩個關鍵幀,通過一些算法將給定屬性值在給定的時間內在兩個關鍵幀間漸變。
View animation只能應用于View對象,而且只支持一部分屬性,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化.
另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
3. Handler機制的原理
andriod提供了Handler 和Looper 來滿足線程間的通信。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換(MessageExchange)。
1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程里的MessageQueue(消息隊列)。
2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新消息到MessageQueue里;或者接收Looper從MessageQueue取出)所送來的消息。
3) Message Queue(消息隊列):用來存放線程放入的消息。
4)線程:UIthread 通常就是main thread,而Android啟動程序時會替它建立一個MessageQueue。
4. 說說mvc模式的原理,它在android中的運用
mvc是model,view,controller的縮寫,mvc包含三個部分:
模型(model)對象:是應用程序的主體部分,所有的業務邏輯都應該寫在該層。
視圖(view)對象:是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結果。
控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,響應用戶出發的相關事件,交給m層處理。
android鼓勵弱耦合和組件的重用,在android中mvc的具體體現如下:
1)視圖層(view):一般采用xml文件進行界面的描述,使用的時候可以非常方便的引入,當然,如果你對android了解的比較的多了話,就一定可以想到在android中也可以使用javascript+html等的方式作為view層,當然這里需要進行java和javascript之間的通信,幸運的是,android提供了它們之間非常方便的通信實現。
2)控制層(controller):android的控制層的重任 通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業務邏輯層處理,這 樣做的另外一個原因是android中的acitivity的響應時間是5s,如果耗時的操作放在這里,程序就很容易被回收掉。
3)模型層(model):對數據庫的操作、對網絡等的操作都應該在model里面處理,當然對業務計算等操作也是必須放在的該層的。
5. 橫豎屏切換時activity的生命周期
1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次
2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次
3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法
6. 請介紹下android大眾常使用的五種布局
常用五種布局方式,分別是:FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
一、 FrameLayout:所有東西依次都放在左上角,會重疊,這個布局比較簡單,也只能放一點比較簡單的東西。二、LinearLayout:線性布局, 每一個LinearLayout里面又可分為垂直布局(android:orientation="vertical")和水平布局 (android:orientation="horizontal" )。當垂直布局時,每一行就只有一個元素,多個元素依次垂直往下;水平布局時,只有一行,每一個元素依次向右排列。三、AbsoluteLayout:絕對布局用X,Y坐標來指定元素的位置,這種布局方式也比較簡單,但是在屏幕旋轉時,往往會出問題,而且多個元素的時候,計算比較麻煩。四、RelativeLayout:相對布局可以理解為某一個元素為參照物,來定位的布局方式。主要屬性有:相對于某一個元素android:layout_below、 android:layout_toLeftOf相對于父元素的地方 android:layout_alignParentLeft、android:layout_alignParentRigh;五、 TableLayout:表格布局,每一個TableLayout里面有表格行TableRow,TableRow里面可以具體定義每一個元素。每一個布 局都有自己適合的方式,這五個布局元素可以相互嵌套應用,做出美觀的界面。
五、英文翻譯
把一下段落翻譯成中文
a) An integral(完整的;整體的;完全的)approach to code documentation is to write the code so that it documentsitself. In other words, the code should be naturally readable in such a way asto make it easy to understand. This is accomplished by proper namingconventions and statement(聲明) formatting.
b)Collections(集合) are thedata structures that are most easily altered for performance-tuning purposes.Using the correct or most appropriate collection class can improve performancewith little change to code. For example, if a large ordered collection haselements frequently deleted or inserted throughout it, it usually can providebetter performance if based on a linked list rather than an array. On the otherhand, a static(unchanging) collection that needs to be accessed by indexperforms better with an underlying implementation that is an array.
真題3:剛剛答完人人網的筆試題,不讓把草稿紙帶出來,只能憑著記憶復盤了,第一部分還差一題,有人記得可以補充一下,題目基本上都是簡單說明,但是意思基本表達到了,第四部分感覺有點困難,天南大還是有很多高手啊,我是結結實實做了2個多小時,提前交的挺多的,呵呵,有些基礎題做的不太好,比如那個已知先序和中序求后序就沒有弄出來,時間有點不夠,再讀讀離散研究下。
原題如下:
第一部分(12*5)
1.一顆完全二叉樹共有768個節點,求葉節點個數____個。
2.一顆由鏈表實現的有n個節點,那么指針數____個,指向節點的指針數____個,空閑的指針個數____個。
3.哈希散列題,給了11個數字,使用0到12進行散列,填一張表
4.1000的階乘的尾部0的個數____個
5.liux下mkdir,如果父目錄不存在,使用附屬命令創建父目錄
6.”vmstat1“的命令,給出了一張表格,及6個選項判斷正誤(記不得了)
7.(樹)前序AEFBGCDHIKJ,中序:EFAGBCHKIJD,求后序
8.(數據庫題)Table1:(5 2 2)(5 3 1)(5 2 3)Table2:(5 2 2)(5 3 1)(5 4 4)使用SQL語句找出存在于Table1中而不存在于table2中數據。
9.倆人玩游戲,在腦門上貼數字(正整數>=1),只看見對方的,看不見自己的,而且兩人的數字相差1,要猜自己的數字
A:我不知道
B:我也不知道
A:我知道了
B:我也知道了
A頭上的字:____;B頭上的字:_____;
10:
11:以下四種排序那種效率最低____,時間復雜度是多少_____
A:快排 B:冒泡 C:歸并 D:選擇
12:小明的IP是:200.99.***.5,子網掩碼是255.255.148.0,問該子網有多少個IP_____個
第二部分(3*10)
1.二叉搜索樹中給定兩個節點:BSTNode1和BSTNode2,查找他們的最近公共父節點
2.環狀單鏈表,給定指向某個節點的指針,編寫算法求離其最遠的節點
3.三個以上設計模式,并用Java或C++實現
第三部分(4*15)
1.無交集數據放在10臺計算機上,如何高效的選出Top10
2.24點游戲,給定四個整數,可以使用加減乘除四種運算法則,但是每個數只能用一次,編寫游戲解法
3.三國殺,規則”殺“使對方體力減一半,”閃“可以免除殺一次,現有30張”殺“,15張”閃“,五個人玩游戲,每輪一人三張牌,問出現體力為0的概率
4.萬臺服務器(集群),構造一個監控系統去監視該服務器,監控服務器主動或者被動去監控服務器集群,要求每個一段間隔獲取服務器集群的數據,請設計方案,并提供相關數據:監控服務器數量,帶寬,時間間隔等。
人人網校園招聘杭州站C++筆試題目1.算法的幾個概念:時間復雜度,空間復雜度等等。
2.采用鏈地址法處理長度的時候,哈希表查找成功的平均長度與哪些因素有關?
哈希表的裝填因子有關。
裝填因子= 表中填入的記錄數/哈希表的長度。
3.二叉樹節點的計算:
二叉樹中度為1的節點有8個,度為0的節點有3個,問這顆二叉樹總共有多少節點?
對于任意一棵二叉樹BT,如果度為0的結點個數為n0,度為2的結點個數為n2,則n0=n2+1。
所以度為2的節點個數為3-1 = 2,那么總共的結點個數就是3+2+8 = 13。
順便復習一下完全二叉樹的計算。
完全二叉樹有一個特點,就是度為1的節點數要么為1,要么為0?梢宰约寒嫵鰣D來看看。
問題:如果設一棵完全二叉樹共有500個結點,則在該二叉樹中有多少個葉子結點?
設葉子節點數為n0,度為2的節點數為n0 - 1,又因為是完全二叉樹,所以n1 = 1或者0
n0 + n1 + n2 = 500,帶入 2n0 - 1 + n1 = 500,故n1 = 1,n0 = 250, n2 = 249。
5.最小生成樹的問題,節點個數計算問題。
6.在序列有序的情況下,快速排序的時間復雜度是多少?
O(n^2)。
7.網卡完成那一層的功能?
網卡工作在物理層和數據鏈路層的MAC子層。
https://leehlom.blog.163.com/blog/static/241206962008112775913541/。
8.模板函數的使用。
template
T add(T x, T y){
return x + y;
}
A.add(5,2)
B.add(5.2,2.2)
C.add(5.2,2)
D.add(5.2,2)
D是錯誤的,因為編譯器知道要特化哪一個了。
8.構造函數可以重載么?析構函數可以重載么?
構造不重載,怎么實現多樣化?
析構怎么重載,沒有參數。
10.C++靜態成員和非靜態成員有什么區別?
1)靜態變量是屬于類的,只能用classname::來調用.而非靜態是屬于對象的,必須通過對象
來調用.
2)如果在函數中聲明一個靜態變量的話,它存儲在非函數的活動區.就是它不隨函數調用的
結束而釋放內存空間,所以它也具有全局變量的特點.但是和全局變量相比不同在于它只能在本
文件中使用
11.空類的大。恳粋含有虛函數的類大?為什么?
分別是1和4。
因為,對于空類,C++編譯器會制定一個char來占據位置。
含有虛函數的類,里面會存放一個虛函數指針vptr,指向一個虛函數表。指針在32位平臺上的大小為4個字節。
12 OSI七層模型和TCP/IP 五層模型。
應用層
表示層
會話層 應用層
傳輸層 傳輸層
網絡層 互聯網絡層
數據鏈路層 互聯接口層
物理層 物理層
12.編程求解走樓梯問題:
一個人一次可以上1步,2步,3步,F在有n個階梯(1<= n <= 100W,問有方法可以上去?
)
f(1) = 1;
f(2) = 2;
f(3) = 4;
n > 3,f(n) = f(n - 1) + f(n - 2) + f(n -3)
13.人人網的朋友概念:A和B是朋友,B和C是朋友,那么A和C是二度朋友。
找出每一個人的10度朋友。要求O(n)的算法
14.推薦系統的設計