Java日常練習題,每天進步一點點(31)

承蒙各位厚愛,我們一起每天進步一點點!(鼠標選中空白處查看答案)

1、現有如下代碼段:

x = 2;
while(x<n/2){
	x = 2*x;
}  

假設n>=0,則其時間復雜度應為( )

正確答案: A

O(log2(n))

O(nlog2(n))

O(n)

O(n^2)

題解:
循環終止條件是 x > n/2
在這裡插入圖片描述

2、對於非運行時異常,程序中一般可不做處理,由java虛擬機自動進行處理。

正確答案: B

正確

錯誤

題解:
運行異常,可以通過java虛擬機來自行處理。非運行異常,我們應該捕獲或者拋出。

3、多重繼承的概念在Java中實現是通過如下哪些?()

I. 擴展兩個或多個類

II. 擴展一個類並實現一個或多個接口。

III. 實現兩個或更多接口。

正確答案: B

隻有I &II

隻有II & III

隻有III

都是

題解:
Java隻支持單繼承,實現多重繼承三種方式:
(1)直接實現多個接口
(2)擴展(extends)一個類然後實現一個或多個接口
(3)通過內部類去繼承其他類

4、關於 Socket 通信編程,以下描述正確的是:( )

正確答案: C

客戶端通過new ServerSocket()創建TCP連接對象

客戶端通過TCP連接對象調用accept()方法創建通信的Socket對象

客戶端通過new Socket()方法創建通信的Socket對象

服務器端通過new ServerSocket()創建通信的Socket對象

題解:
客戶端通過new Socket()方法創建通信的Socket對象
服務器端通過new ServerSocket()創建TCP連接對象

5、以下哪個命令用於查看tar(backup.tar)文件的內容而不提取它?()

正確答案: B

tar -xvf backup.tar

tar -tvf backup.tar

tar -svf backup.tar

none of these

題解:
-s 還原文件的順序和備份文件內的存放順序相同。
-t 列出備份文件的內容。
-v 顯示指令執行過程。
-f 指定壓縮文件
-x 從備份文件中還原文件。
所以不能有x和s

把常用的tar解壓命令總結下,當作備忘:

tar
-c: 建立壓縮檔案
-x:解壓
-t:查看內容
-r:向壓縮歸檔文件末尾追加文件
-u:更新原壓縮包中的文件
這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但隻能用其中一個。下面的參數是根據需要在壓縮或解壓檔案時可選的。
-z:有gzip屬性的
-j:有bz2屬性的
-Z:有compress屬性的
-v:顯示所有過程
-O:將文件解開到標準輸出
下面的參數-f是必須的
-f: 使用檔案名字,切記,這個參數是最後一個參數,後面隻能接檔案名。
# tar -cf all.tar *.jpg 
這條命令是將所有.jpg的文件打成一個名為all.tar的包。-c是表示產生新的包,-f指定包的文件名。
# tar -rf all.tar *.gif 
這條命令是將所有.gif的文件增加到all.tar的包裡面去。-r是表示增加文件的意思。
# tar -uf all.tar logo.gif 
這條命令是更新原來tar包all.tar中logo.gif文件,-u是表示更新文件的意思。
# tar -tf all.tar 
這條命令是列出all.tar包中所有文件,-t是列出文件的意思
# tar -xf all.tar 
這條命令是解出all.tar包中所有文件,-x是解開的意思

壓縮
tar –cvf jpg.tar *.jpg  將目錄裡所有jpg文件打包成tar.jpg
tar –czf jpg.tar.gz *.jpg   將目錄裡所有jpg文件打包成jpg.tar後,並且將其用gzip壓縮,生成一個gzip壓縮過的包,命名為jpg.tar.gz
tar –cjf jpg.tar.bz2 *.jpg 將目錄裡所有jpg文件打包成jpg.tar後,並且將其用bzip2壓縮,生成一個bzip2壓縮過的包,命名為jpg.tar.bz2
tar –cZf jpg.tar.Z *.jpg   將目錄裡所有jpg文件打包成jpg.tar後,並且將其用compress壓縮,生成一個umcompress壓縮過的包,命名為jpg.tar.Z
rar a jpg.rar *.jpg rar格式的壓縮,需要先下載rar for linux
zip jpg.zip *.jpg   zip格式的壓縮,需要先下載zip for linux 
解壓
tar –xvf file.tar  解壓 tar包
tar -xzvf file.tar.gz 解壓tar.gz
tar -xjvf file.tar.bz2   解壓 tar.bz2
tar –xZvf file.tar.Z   解壓tar.Z
unrar e file.rar 解壓rar
unzip file.zip 解壓zip
總結
*.tar 用 tar –xvf 解壓
*.gz 用 gzip -d或者gunzip 解壓
*.tar.gz和*.tgz 用 tar –xzf 解壓
*.bz2 用 bzip2 -d或者用bunzip2 解壓
*.tar.bz2用tar –xjf 解壓
*.Z 用 uncompress 解壓
*.tar.Z 用tar –xZf 解壓
*.rar 用 unrar e解壓
*.zip 用 unzip 解壓


linux下最常用的打包程序就是tar瞭,使用tar程序打出來的包我們常稱為tar包,tar包文件的命令通常都是以.tar結尾的。生成tar包後,就可以用其它的程序來進行壓縮。
1.命令格式:
tar[必要參數][選擇參數][文件] 
2.命令功能:
用來壓縮和解壓文件。tar本身不具有壓縮功能。他是調用壓縮功能實現的 
3.命令參數:
必要參數有如下:
-A 新增壓縮文件到已存在的壓縮
-B 設置區塊大小
-c 建立新的壓縮文件
-d 記錄文件的差別
-r 添加文件到已經壓縮的文件
-u 添加改變瞭和現有的文件到已經存在的壓縮文件
-x 從壓縮的文件中提取文件
-t 顯示壓縮文件的內容
-z 支持gzip解壓文件
-j 支持bzip2解壓文件
-Z 支持compress解壓文件
-v 顯示操作過程
-l 文件系統邊界設置
-k 保留原有文件不覆蓋
-m 保留文件不被覆蓋
-W 確認壓縮文件的正確性
可選參數如下:
-b 設置區塊數目
-C 切換到指定目錄
-f 指定壓縮文件
--help 顯示幫助信息
--version 顯示版本信息
4.常見解壓/壓縮命令
tar 
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(註:tar是打包,不是壓縮!)

.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName
.tar.gz 和 .tgz
解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName
.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
.bz
解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知
.tar.bz
解壓:tar jxvf FileName.tar.bz
壓縮:未知
.Z
解壓:uncompress FileName.Z
壓縮:compress FileName
.tar.Z
解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName
.zip
解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
.rar
解壓:rar x FileName.rar
壓縮:rar a FileName.rar DirName 
 
5.使用實例
實例1:將文件全部打包成tar包
命令:
tar -cvf log.tar log2012.log
tar -zcvf log.tar.gz log2012.log
tar -jcvf log.tar.bz2 log2012.log

6、下列哪個選項是Java調試器?如果編譯器返回程序代碼的錯誤,可以用它對程序進行調試。

正確答案: C

java.exe

javadoc.exe

jdb.exe

javaprof.exe

題解:
javac.exe是編譯.java文件
java.exe是執行編譯好的.class文件
javadoc.exe是生成Java說明文檔
jdb.exe是Java調試器
javaprof.exe是剖析工具

7、檢查程序,是否存在問題,如果存在指出問題所在,如果不存在,說明輸出結果。

package algorithms.com.guan.javajicu;  
public class Inc {  
    public static void main(String[] args) {  
       Inc inc = new Inc();  
       int i = 0;  
       inc.fermin(i);  
       i= i ++;  
       System.out.println(i); 
    }  
    void fermin(int i){  
       i++;  
    }  
}  

正確答案: A

0

1

2

3

題解:
i++ 先賦值在計算結果;
++i 先計算結果再賦值。
int i = 0;
i = i ++; // 左邊這個i其實是障眼法,就是一個中間變量,可以和下行的i合並;
System.out.println(i); 這裡等價於:
int i = 0;
System.out.println(i++); 這下再看,先賦值(先將i傳給println函數打印出來,在計算表達式結果)
所以打印出來的是0,實際上整個表達式的結果已經是1瞭,隻是沒有打印出整個表達式的結果。
所以我們知道如下結論:
1、無論怎麼變,i++和++i的整個表達式的結果都是1.
2、有時我們打印的是表達式的結果(System.out.println(++i)),
有時我們打印的隻是一個中間變量(System.out.println(i++))。
Ps:
int i = 0;
i++;
System.out.println(i); //值為1 打印的是表達式的結果

int i = 0;
++i;
System.out.println(i); //值為1 打印的是表達式的結果

int i = 0;
i = i++;
System.out.println(i); //值為0 打印的是中間變量(JVM中間緩存變量機制)

int i = 0;
i = ++i;
System.out.println(i); //值為1 打印的是表達式的結果

8、在 myjsp.jsp 中,關於下面的代碼說法錯誤的是: ( )

<%@ page language=“java” import=“java.util.*” errorPage=“error.jsp” isErrorPage=“false” %>

正確答案: A

該頁面可以使用 exception 對象

該頁面發生異常會轉向 error.jsp

存在 errorPage 屬性時,isErrorPage 是默認為 false

error.jsp 頁面一定要有isErrorPage 屬性且值為 true

題解:
A項:頁面有isErrorPage屬性且值為false,不可以使用 exception 對象
當isErrorPage =”false”時,用errorPage=“error.jsp”(isErrorPage默認是false)
當isErrorPage =”true”時,頁面會直接使用exception

9、根據下面的代碼,

String s = null;

會拋出NullPointerException異常的有()。

正確答案: A C

if( (s!=null) & (s.length()>0) )
if( (s!=null) && (s.length()>0) )
if( (s==null) | (s.length()==0) )
if( (s==null) || (s.length()==0) )

題解:
邏輯運算符:&&和|| 是按照“短路”方式求值的。如果第一個操作數已經能夠確定表達式的值,第二個操作數就不必計算瞭。
位移運算符:&和| 運算符應用於佈爾值,得到的結果也是佈爾值,不按“短路”方式計算。即在得到計算結果之前,一定要計算兩個操作數的值。
String s=null;沒有給s開辟任何空間,當執行length()方法時候,
因為沒有具體指向的內存空間,所以報出NullPointerException沒有指向的錯誤。
A項: &是與,位運算,兩個都得執行,執行到s.length()自然就報錯瞭。
B項: S!=null 結果為false 整體就為false ,&& 後面就不會執行。下面的同理。

10、關於Java中的ClassLoader下面的哪些描述是錯誤的:( )

正確答案: B D F

A:默認情況下,Java應用啟動過程涉及三個ClassLoader: Boostrap, Extension, System

B:一般的情況不同ClassLoader裝載的類是不相同的,但接口類例外,對於同一接口所有類裝載器裝載所獲得的類是相同的

C:類裝載器需要保證類裝載過程的線程安全

D:ClassLoader的loadClass在裝載一個類時,如果該類不存在它將返回null

E:ClassLoader的父子結構中,默認裝載采用瞭父優先

F:所有ClassLoader裝載的類都來自CLASSPATH環境指定的路徑

題解:
A、java中類的加載有5個過程,加載、驗證、準備、解析、初始化;這便是類加載的5個過程,而類加載器的任務是根據一個類的全限定名來讀取此類的二進制字節流到JVM中,然後轉換為一個與目標類對應的java.lang.Class對象實例,在虛擬機提供瞭3種類加載器,引導(Bootstrap)類加載器、擴展(Extension)類加載器、系統(System)類加載器(也稱應用類加載器)。A正確
B、一個類,由不同的類加載器實例加載的話,會在方法區產生兩個不同的類,彼此不可見,並且在堆中生成不同Class實例。所以B前面部分是正確的,後面接口的部分真的沒有嘗試過,等一個大佬的講解吧;
C、類加載器是肯定要保證線程安全的;C正確
D、裝載一個不存在的類的時候,因為采用的雙親加載模式,所以強制加載會直接報錯,D錯誤
java.lang.SecurityException: Prohibited package name: java.lang
E、雙親委派模式是在Java 1.2後引入的,其工作原理的是,如果一個類加載器收到瞭類加載請求,它並不會自己先去加載,而是把這個請求委托給父類的加載器去執行,如果父類加載器還存在其父類加載器,則進一步向上委托,依次遞歸,請求最終將到達頂層的啟動類加載器,如果父類加載器可以完成類加載任務,就成功返回,倘若父類加載器無法完成此加載任務,子加載器才會嘗試自己去加載,這就是雙親委派模式,即每個兒子都很懶,每次有活就丟給父親去幹,直到父親說這件事我也幹不瞭時,兒子自己想辦法去完成,所以默認是父裝載,E正確
F、自定義類加載器實現 繼承ClassLoader後重寫瞭findClass方法加載指定路徑上的class,F錯誤

答案匯總:

1、正確答案: A

2、正確答案: B

3、正確答案: B

4、正確答案: C

5、正確答案: B

6、正確答案: C

7、正確答案: A

8、正確答案: A

9、正確答案: A C

10、正確答案: B D F

總結

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: