面试题整理(答案从网上找到后整理的)
1、 java中如何把String型轉化成double型的
String s = "123.345";
double num = Double.parseDouble(s);
當string里的數字比較大時:
例如:
字符串“1467000000”通過Double.parseDouble以后轉化為double類型,然后我用它除以100000000。結果得到的值變成14.669999999999998。再轉化成字符串與“14.67”比較,結果是不相等。
精 度的問題!用基本類型的double類型進行運算可能會丟失精度。而且特別大的數又沒法處理。所以如果用BigDecimal這個類問題就解決了。這個類 在java.Math包下。它可以處理任意精度的數據。對于樓主出現的問題,我從新寫了段代碼,供樓主參考。但是主要是還得查看API!代碼如下:
import?java.math.*;
public?class?oopp
{
?public?static?void?main(String[]?args)
?{
??String?a="1467000000";
??double?aa=Double.parseDouble(a);
??BigDecimal?beichushu=new?BigDecimal(aa);
??BigDecimal?chushu=new?BigDecimal(100000000);
??BigDecimal?result=beichushu.divide(chushu,new?MathContext(4));//MathConText(4)表示結果精確4位!
??boolean?isTrue=String.valueOf(result).equals("14.67");
??System.out.println("1467000000除以100000000="+result);
??System.out.println(result+"與14.67比較的結果是"+isTrue);
?}
}
2、 Java double轉String??
把 一個double類型的值轉成string,網上有很多的方法,包括用String.valueOf(Double d),或者 String str = "" + d, 或者用DecimalFormat df = new DecimalFormat("#.00"), 以及用NumberFormat類等。但是,當double的值特別大的時候,這些方法都是沒有用的,因為double類型被轉化成科學計數法了,對于小 數點后面的值就沒有保存。后來發現用BigDecimal bd = new BigDecimal(d),然后調用bd.setScale(arg0, arg1)這個方法特別有效。
3、 JNDI是java訪問名字和目錄服務的接口?
4、 寫出sql查詢數據庫中的第5-10條記錄
sql server 方案1:
select?top?6?*?
from?Table?
where?table_Id?not?in?(select?top?4?tableId?from?Table)
===============================
通用公式:查詢sql server數據庫中的第m到n條記錄
select top (n-m+1) * ?from t where id in (select top (m-1) id from t order by id) order
by id desc
================================
查詢Sql Server數據庫中后10條記錄
SELECT TOP 10 FROM 表名 ORDER BY 排序列 DESC
?
mysql 方案:
select * from t order by id limit 5,6
==============================
select * from t order by id limit m,(n-m+1)
mysql 中limit的用法:
select * from table limit m,n
其中m是指記錄開始的index,從0開始,表示第一條記錄
n是指從第m+1條開始,取n條。
===============================
查詢Mysql數據庫中后10條記錄
select * from t order by id? desc limit 10
?
oracle 方案:
select * from (select? rownum r,* where r<=10) where r > 4
===========================================
select * from (select rownum r,* from t where r<=n)? where r>m-1
===========================================
查詢Oracle數據庫中后10條記錄
select * from t where rownum <=10 order by id desc
其中rownum為oracle的關鍵字
5、 寫出學生信息的xml文件
寫一個XML文件,文件里的內容有姓名,年齡,注冊時間(要Date格式的),大概寫三四個成員就可以了
<?xml version="1.0" encoding="utf-8" ?>
<root>
? <studetns>
??? <student>
????? <name>saa</name>
????? <age>14</age>
????? <CreateDate>2010-11-11</CreateDate>
??? </student>
??? <student>
????? <name>sa</name>
????? <age>14</age>
????? <CreateDate>2010-11-11</CreateDate>
??? </student>
??? <student>
????? <name>saaa</name>
????? <age>14</age>
????? <CreateDate>2010-11-11</CreateDate>
??? </student>
? </studetns>
</root>
6、 查詢班級中的男生人數,女生人數
學生表(所在班級,性別)
現要得出一張表,(班級,男數,女數)
select?所在班級,男生人數=sum(case?when?性別=
'男'?then?1?else?0?end),
????女生人數=sum(case?when?性別='女'?then?1?else?0?end)?
from?學生表
group?by?所在班級
7、 tcp和udp的區別
TCP(Transmission Control Protocol,傳輸控制協議)是基于連接的協議,也就是說,在正式收發數據前,必須和對方建立可靠的連接。一個TCP連接必須要經過三次“對話”才能建立起來。
UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!
? UDP適用于一次只傳送少量數據、對可靠性要求不高的應用環境。
tcp協議和udp協議的差別
TCP UDP
是否連接 面向連接 面向非連接
傳輸可靠性 可靠 不可靠
應用場合 傳輸大量數據 少量數據
速度 慢 快
TCP---傳輸控制協議,提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數據。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。
UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,但是并不能保證它 們能到達目的地。由于UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。
8、 linux下進程間通信(IPC)的幾種主要手段簡介:
9、 程序 進程 線程的區別
進程和線程都是由操作系統所體會的程序運行的基本單元,系統利用該基本單元實現系統對應用的并發性。進程和線程的區別在于:?
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.?
線程的劃分尺度小于進程,使得多線程程序的并發性高。?
另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。?
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。?
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。?
10、??? JDBC 連接Mysql
?Class.forName(“com.mysql.jdbc.Driver”)
?Connection connectMySQL ?= ?DriverManager.geiConnection(“jdbc:mysql://localhost:3306/myuser","root" ,"root" );
Statement statamentMySQL =connectMySQL.createStatement();
?statement.excuteUpdate(?"INSERT INTO staff(name, age, sex,address, depart, worklen,wage)"?+ " VALUES ('Tom1', 321, 'M', 'china','Personnel','3','3000' ) ") ;?
或
ResultSet resultSel = statement.executeQuery(?"select * from staff"?);
11、??? 數據庫三范式是什么
第一范式(1NF):字段具有原子性,不可再分。
第二范式就是非主屬性非部分依賴于主關鍵字
第三范式(3NF)要求一個
數據庫表中不包含已在其它表中已包含的非主關鍵字信息。
所以第三范式具有如下特征:
1,每一列只有一個值
2,每一行都能區分。
3,每一個表都不包含其他表已經包含的非主關鍵字信息。
12、??? ??SAX與DOM解析XML的區別
解析xml有四種方法:DOM,SAX,DOM4j,JDOM.
???我們主要學了兩種:DOM和SAX.
???? DOM適于解析比較簡單的XML而SAX則適于解析較復雜的XML文件。各有各的好。
SAX是基于事件流的解析,DOM是基于XML文檔樹結構的解析
???? DOM和SAX的不同:
???? 1. DOM是基于內存的,不管文件有多大,都會將所有的內容預先裝載到內存中。從而消耗很大的內存空間。而SAX是基于事件的。當某個事件被觸發時,才獲取相應的XML的部分數據,從而不管XML文件有多大,都只占用了少量的內存空間。
???? 2. DOM可以讀取XML也可以向XML文件中插入數據,而SAX卻只能對XML進行讀取,而不能在文件中插入數據。這也是SAX的一個缺點。
???? 3.SAX的另一個缺點:DOM我們可以指定要訪問的元素進行隨機訪問,而SAX則不行。SAX是從文檔開始執行遍歷的。并且只能遍歷一次。也就是說我們不能隨機的訪問XML文件,只能從頭到尾的將XML文件遍歷一次(當然也可以中間截斷遍歷)。
Serialization(序列化)是一種將對象以一連串的字節描述的過程;反序列化deserialization是一種將這些字節重建成一個對象的過程。Java序列化API提供一種處理對象序列化的標準機制。
13、??? 多線程
?Java線程的創建和啟動:
可以有兩種方式創建新的線程:
第一種:
1.定義線程類實現Runnable接口
2.Thread myThread = new Thread(target);?? //target為Runnable接口類型
3.Runnable中只有一個方法:public void run();用以定義線程運行體
4.使用Runnable接口可以為多個線程提供共享的數據
5.在實現Runnable接口的類的run()方法定義中可以使用Thread的靜態方法public static Thread currentThread();獲取當前線程的引用
第二種:
1.可以定義一個Thread的子類并重寫其run方法如:
class MyThread extends Thread {???
public void run() {...}
}???
2.然后生成該類的對象:
MyThread myThread = new MyThread();
?
14、??? Java是Unicode編碼,unicode碼是2個字節
15、??? 非常有用的Java程序片段
http://developer.51cto.com/art/201306/398347_1.htm
16、??? 在Hashtable上下文中同步是什么意思?
同步意味著在一個時間點只能有一個線程可以修改哈希表,任何線程在執行hashtable的更新操作前需要獲取對象鎖,其他線程等待鎖的釋放。
17、??? HashMap不是同步的,而Hashtable是同步的。
18、??? Hibernate中load()和get()的區別:
load加載方法:
Java代碼
Users user = (Users)session.load(Users.class, userId);????
Users user = (Users)session.load(Users.class, userId);
這句代碼不會去執行數據庫查詢,只有用到user時才會去執行數據庫查詢。
get加載方法:
Java代碼
Users user = (Users)session.get(Users.class, userId);??
Users user = (Users)session.get(Users.class, userId);
則立即去執行數據庫查詢。 所以Users user = (Users)session.load(Users.class, userId);不會執行任何sql。
兩加載方法區別:
區別1:如果數據庫中,沒有userId的對象。如果通過get方法加載,則返回的是一個null;如果通過load加載,則返回一個代理對象,如 果后面代碼如果調用user對象的某個屬性(比如user.getPassword())會拋出異 常:org.hibernate.ObjectNotFoundException;
區別2:load支持延遲加載,get不支持延遲加載。
19、??? Struts 2框架組成
本身大致可以分為3個部分:核心控制器FilterDispatcher、業務控制器Action和用戶實現的企業業務邏輯組件。
核心控制器 FilterDispatcher是Struts 2框架的基礎,包含了框架內部的控制流程和處理機制。
業務控制器Action和業務邏輯組件是需要用戶來自己實現的。
用戶在開發Action和業務邏輯組 件的同時,還需要編寫相關的配置文件,供核心控制器FilterDispatcher來使用。
?Struts 2的工作流程相對于Struts 1要簡單,與WebWork框架基本相同,所以說Struts 2是WebWork的升級版本。
20、??? Struts2基本簡要流程如下:
1、? 客戶端瀏覽器發出HTTP請求。
2、根據web.xml配置,該請求被 FilterDispatcher接收。
3、根據struts.xml配置,找到需要調用的Action類和方法, 并通過IoC方式,將值注入給Aciton。
4、Action調用業務邏輯組件處理業務邏輯,這一步包含表單驗證。
5、Action執行完畢,根據 struts.xml中的配置找到對應的返回結果result,并跳轉到相應頁面。6、返回HTTP響應到客戶端瀏覽器。
21、Ajax的優點?
??? Ajax的給我們帶來的好處大家基本上都深有體會,在這里我只簡單的講幾點:?
1、最大的一點是頁面無刷新,在頁面內與服務器通信,給用戶的體驗非常好。?
2、使用異步方式與服務器通信,不需要打斷用戶的操作,具有更加迅速的響應能力。?
3、可以把以前一些服務器負擔的工作轉嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務器和帶寬的負擔,節約空間和寬帶租用成本。并且減輕服務器的負擔,ajax的原則是“按需取數據”,可以最大程度的減少冗余請求,和響應對服務器造成的負擔。
4、基于標準化的并被廣泛支持的技術,不需要下載插件或者小程序。
?
?
?
轉載于:https://www.cnblogs.com/sophine/archive/2013/05/17/3083921.html
總結
以上是生活随笔為你收集整理的面试题整理(答案从网上找到后整理的)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面象对象设计原则之六:迪米特原则(Lea
- 下一篇: 特征选择relief算法介绍