更新時(shí)間:2019-04-10 10:34:32 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2258次
1、Java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說出他們分別是哪些類?
字節(jié)流,字符流。字節(jié)流繼承于InputStreamOutputStream,字符流繼承于ReaderWriter。
在java.io包中還有許多其他的流,低層流與調(diào)層流,高層流主要是為了提高性能和使用方便。
2、啟動(dòng)一個(gè)線程是用run()還是start()?
啟動(dòng)一個(gè)線程是調(diào)用start()方法,啟動(dòng)線程并調(diào)用run方法。
3、線程的基本概念、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系
線程是進(jìn)程內(nèi)的并發(fā),沒有自已內(nèi)存空間,共享進(jìn)程的,線程間的通信成本較低。
Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束。
4、多線程有幾種實(shí)現(xiàn)方法,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?用什么關(guān)鍵字修飾同步方法?
stop()和suspend()方法為何不推薦使用?
ExtendsThread
ImplementsRunnable
同步
Publicsynchronizedaa()
{
}
Publicvoidcc(objectaa)
{
synchronized(aa)
{
}
}
用synchoronized修飾同步方法。
答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類與實(shí)現(xiàn)Runnable接口
同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify反對(duì)使用stop(),是因?yàn)樗话踩K鼤?huì)解除由線程獲取的所有鎖定,而且如果對(duì)象處于一種不連貫狀態(tài),那么其他線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問題所在。suspend()方法容易發(fā)生死鎖。調(diào)用suspend()的時(shí)候,目標(biāo)線程會(huì)停下來,但卻仍然持有在這之前獲得的鎖定。此時(shí),其他任何線程都不能訪問鎖定的資源,除非被"掛起"的線程恢復(fù)運(yùn)行。對(duì)任何線程來說,如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何一個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend(),而應(yīng)在自己的Thread類中置入一個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait()命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用一個(gè)notify()重新啟動(dòng)線程。
5、集合框架有什么?
CollectionMap
ListsetHashMap
ArrayListlinkedListHashSetTreeSet
6、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程對(duì)j每次減少1。寫出程序
publicclassTestThread
{
privateintj;
publicsynchronizedvoidinc()
{
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
publicsynchronizedvoiddec()
{
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
publicstaticvoidmain(String[]args)
{
TestThreadt=newTestThread();
for(inti=0;i<2;i++)
{
Threadinc=newThread(newInc(t));
Threaddec=newThread(newDec(t));
inc.start();
dec.start();
}
}
}
classIncimplementsRunnable
{
privateTestThreadobj;
publicInc(TestThreadobj)
{
this.obj=obj;
}
publicvoidrun()
{
//for(inti=0;i<100;i++)
//{
this.obj.inc();
//}
}
}
classDecimplementsRunnable
{
privateTestThreadobj;
publicDec(TestThreadobj)
{
this.obj=obj;
}
publicvoidrun()
{
//for(inti=0;i<100;i++)
//{
this.obj.dec();
//}
}
}
7、同步和異步有和異同,在什么情況下分別使用他們?舉例說明。
同步:上一段代碼沒的完成,下一段必須等到上一段代碼完成后才可以執(zhí)行。如買票排隊(duì)
異步:上一段代碼沒的完成,下一段不必等到上一段代碼完成就可以執(zhí)行。如手機(jī)發(fā)送短信。
8、sleep()和wait()有什么區(qū)別?
Sleep是指休眠給定的時(shí)間,當(dāng)這個(gè)時(shí)間達(dá)到之后,線程會(huì)再次醒來。
Wait是等待狀態(tài),多長(zhǎng)時(shí)間不清楚,由另一個(gè)線程將其喚醒。
9、當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
如只其它方法是同步方法,不可以進(jìn)入。如果不是可以進(jìn)入。
10、輸入輸出流的理解:
在java使用流的機(jī)制進(jìn)行數(shù)據(jù)的傳送,從文件到內(nèi)存是輸入流,從內(nèi)存到文件是輸出流,輸入流可以通過read讀取,輸出流以write或print寫入,對(duì)于流可以是分為高層流和低層流,低層以一個(gè)字節(jié)或字符為單位進(jìn)行處理,高層流以一批數(shù)據(jù)為單位進(jìn)行處理。
FileInputStream(System.in)至InputSteamReader至BufferReader
OutputSteam(System.out)至printStream
FileReader至BufferedReader
FileWriter至PrintWriter或bufferWriter
分類:
字節(jié)(二進(jìn)制)
FileInputStream(低層輸入流)
FileOutputStream(低層輸出流)
PrintStream(高層流)System.out.println()
字符(一個(gè)char)
FileReader
FileWriter
11、請(qǐng)寫一個(gè)程序的讀寫,要求用兩種方式一種是低層流另一種是高層流。
importjava.io.FileWriter;
importjava.io.InputStream;
importjava.io.BufferedWriter;
importjava.io.InputStreamReader;
importjava.io.BufferedReader;
importjava.io.FileReader;
publicclassUntitled1{
publicstaticvoidwriteFileChar()throwsException{
FileWriterf=newFileWriter("c:\\aa.txt");
InputStreamis=System.in;
intc=is.read();
while(((char)c)!='x'){
f.write(c);
c=is.read();
}
f.close();
is.close();
}
publicstaticvoidwriteFileString()throwsException{
FileWriterf=newFileWriter("c:\\aa.txt");
BufferedWriterbwr=newBufferedWriter(f);
BufferedReaderbf=newBufferedReader(newInputStreamReader(System.in));
Stringc=bf.readLine();
while(!c.equals("stop")){
bwr.write(c+"\r\n");
c=bf.readLine();
}
bwr.close();
f.close();
bf.close();
}
publicstaticvoidreadFileChar()throwsException{
FileReaderf=newFileReader("c:\\aa.txt");
intc=f.read();
while(c!=-1){
System.out.print((char)c);
c=f.read();
}
f.close();
}
publicstaticvoidreadFileString()throwsException{
BufferedReaderbf=newBufferedReader(newFileReader("c:\\aa.txt"));
Stringc=bf.readLine();
while(c!=null)
{
System.out.println(c);
c=bf.readLine();
}
bf.close();
}
publicstaticvoidmain(String[]args)throwsException{
readFileString();
}
}
12、如何列出某個(gè)目錄下的所有文件
Importjava.io.File;
Filef=newFile("C:\\");
File[]f1=f.listFiles();
for(inti=0;i<f1.length;i++)
{
if(f1[i].isDirectory())
{
System.out.println("dirctoryis"+f1[i].getName());
}
else
{
System.out.println("fileis"+f1[i].getName());
}
}
}
1.如何列出某個(gè)目錄下的所有子目錄
publicstaticvoidmain(String[]args)throwsException
{
getFile(newFile("C:\\entityBean"),"\t");
}
publicstaticvoidgetFile(Filef,Stringsem)throwsException
{
System.out.println(sem+f.getName());
Filefl[]=f.listFiles();
if(fl.length>=1)
{
for(inti=0;i<fl.length;i++)
{
if(fl[i].isDirectory())
{
getFile(fl[i],sem+"\t");
}
}
}
}
2.判斷一個(gè)文件或目錄是否存在
Filef=newFile("C:\\entityBean");
if(f.exists())
{
System.out.println("exist");
}
else
{
System.out.println("notexist");
}
Socket
13、用socket通訊寫出客戶端和服務(wù)器端的通訊,要求客戶發(fā)送數(shù)據(jù)后能夠回顯相同的數(shù)據(jù)?
publicclassServerSocket_1
{
publicstaticvoidmain(String[]args)
throwsException
{
ServerSocketss=newServerSocket(4001);
Sockets=ss.accept();
BufferedReaderbr=newBufferedReader(newInputStreamReader(s.
getInputStream()));
PrintStreamps=newPrintStream(s.getOutputStream());
Stringtemp=br.readLine();
while(true)
{
System.out.println("客戶端:"+temp);
ps.println(temp);
if(temp.equals("stop"))
{
break;
}
temp=br.readLine();
}
br.close();
ps.close();
ss.close();
}
}
publicclassClientSocket
{
publicstaticvoidmain(String[]args)throwsException
{
Sockets=newSocket("localhost",4001);
PrintStreamps=newPrintStream(s.getOutputStream());
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
BufferedReaderbr_server=newBufferedReader(newInputStreamReader(s.
getInputStream()));
Stringtemp=br.readLine();
while(true)
{
ps.println(temp);
temp=br_server.readLine();
System.out.println("服務(wù)器的信息:"+temp);
if(temp.equals("stop"))
{
break;
}
temp=br.readLine();
}
s.close();
br.close();
br_server.close();
}
}
14、介紹Java中的CollectionFrameWork(包括如何寫自己的數(shù)據(jù)結(jié)構(gòu))?
答:CollectionFrameWork如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素
(Elements)
Map提供key到value的映射
15、請(qǐng)說出你所知道的線程同步的方法
HashTable中的put,get,remove
Vector的相關(guān)方法。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743