1. 解析XML的幾種方式的原理與特點(diǎn):DOM、SAX饺蔑、PULL
- DOM(Document Object Model)
DOM是基于樹(shù)形結(jié)構(gòu)的的節(jié)點(diǎn)或信息片段的集合孔祸,允許開(kāi)發(fā)人員使用DOM API遍歷XML樹(shù)筑公、檢索所需數(shù)據(jù)封救。
分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造樹(shù)形結(jié)構(gòu),然后才可以檢索和更新節(jié)點(diǎn)信息惩坑。
由于DOM在內(nèi)存中以樹(shù)形結(jié)構(gòu)存放,因此檢索和更新效率會(huì)更高蔓钟。但是對(duì)于特別大的文檔,解析和加載整個(gè)文檔將會(huì)很耗資源兰绣。
- SAX(Simple API for XML)
SAX解析器是一種基于事件的解析器党觅,它的核心是事件處理模式镐牺,主要是圍繞著事件源以及事件處理器來(lái)工作的募胃。當(dāng)事件源產(chǎn)生事件后,調(diào)用事件處理器相應(yīng)的處理方法,一個(gè)事件就可以得到處理论巍。
在事件源調(diào)用事件處理器中特定方法的時(shí)候,還要傳遞給事件處理器相應(yīng)事件的狀態(tài)信息,這樣事件處理器才能夠根據(jù)提供的事件信息來(lái)決定自己的行為密似。
SAX解析器的優(yōu)點(diǎn)是解析速度快,占用內(nèi)存少。非常適合在Android移動(dòng)設(shè)備中使用邑滨。
- PULL
PULL解析器的運(yùn)行方式和SAX類似面哥,都是基于事件的模式归榕。不同的是,在PULL解析過(guò)程中盅蝗,我們需要自己獲取產(chǎn)生的事件然后做相應(yīng)的操作,而不像SAX那樣由處理器觸發(fā)一種事件的方法贼穆,執(zhí)行我們的代碼。
PULL解析器小巧輕便,解析速度快闪彼,簡(jiǎn)單易用畏腕,非常適合在Android移動(dòng)設(shè)備中使用铭污,Android系統(tǒng)內(nèi)部在解析各種XML時(shí)也是用PULL解析器嘹狞。
2. Java 與 C++ 對(duì)比
Java其實(shí)也是由C++發(fā)展而來(lái)知市,保留了C++的大部分內(nèi)容,其編程方式類似于C++,但是摒棄了C++的諸多不合理之處,從根本上解決了C++的固有缺陷。使得Java句法更清晰,規(guī)模更小,更易學(xué),同時(shí)更趨于健壯性,安全性和平臺(tái)無(wú)關(guān)性。
- 指針
指針是C++語(yǔ)言中最靈活也最容易出錯(cuò)的數(shù)據(jù)類型,易出現(xiàn)由于指針誤操作而導(dǎo)致的系統(tǒng)崩潰,同時(shí)指針操作內(nèi)存時(shí)也經(jīng)常出錯(cuò)。
Java沒(méi)有指針的概念,更有利于程序的安全敞峭。
- 內(nèi)存管理
C++語(yǔ)言中必須通過(guò)程序釋放內(nèi)存資源,增加了程序設(shè)計(jì)者的負(fù)擔(dān),再次釋放已釋放的內(nèi)存塊或釋放未分配的內(nèi)存塊會(huì)造成系統(tǒng)崩潰,忘記釋放不再使用的內(nèi)存塊也會(huì)逐漸耗盡系統(tǒng)資源进宝。
Java自動(dòng)進(jìn)行內(nèi)存回收操作徐块,當(dāng)一個(gè)對(duì)象不再被用到時(shí),無(wú)須使用內(nèi)存回收器,只需要給它加上標(biāo)簽以示刪除。無(wú)用內(nèi)存的回收器在后臺(tái)運(yùn)行,利用空閑時(shí)間工作壹蔓,保證了系統(tǒng)資源的完整性行疏,避免了內(nèi)存管理不周而引起的系統(tǒng)崩潰贞让。
- 數(shù)據(jù)類型一致性
在C++語(yǔ)言中,不同的平臺(tái)上,編譯器對(duì)簡(jiǎn)單數(shù)據(jù)類型分別分配不同的字節(jié)數(shù)雨膨,導(dǎo)致了代碼數(shù)據(jù)的不可移植性踩身。
在Java中附鸽,采用基于IEEE標(biāo)準(zhǔn)的數(shù)據(jù)類型赌蔑,無(wú)論任何硬件平臺(tái)上對(duì)數(shù)據(jù)類型的位數(shù)分配總是固定的。
- 內(nèi)存管理
在C++中,會(huì)出現(xiàn)數(shù)據(jù)類型的隱含轉(zhuǎn)換,涉及到自動(dòng)強(qiáng)制類型轉(zhuǎn)換椎例,使得不安全因素大大增加脖祈。
Java中系統(tǒng)要對(duì)對(duì)象的處理進(jìn)行嚴(yán)格的相容性檢查席纽,防止不安全的轉(zhuǎn)換。如果需要竟纳,必須由程序顯式進(jìn)行強(qiáng)制類型轉(zhuǎn)換缘挑。
- 多重繼承
C++支持多重繼承,允許許多父類派生一個(gè)子類卖哎,雖然功能強(qiáng)大,但使用復(fù)雜维贺,而且會(huì)引起許多麻煩溯泣,編譯程序?qū)崿F(xiàn)也很不易。Java不支持多重繼承收夸,但允許一個(gè)類實(shí)現(xiàn)多個(gè)接口,即實(shí)現(xiàn)了C++的多重繼承功能监透,又避免了C++的缺陷任岸。
- 函數(shù)
在C中再榄,代碼組織在函數(shù)中,函數(shù)可以訪問(wèn)程序的全局變量; C++增加了類享潜,提供了類方法困鸥,但由于C++仍然支持C,所以C++程序中仍然可以使用C的函數(shù)剑按,結(jié)果導(dǎo)致函數(shù)和方法混合使用疾就,使得程序比較混亂 。
Java沒(méi)有函數(shù)艺蝴。作為一種比C++更純的面向?qū)ο蟮恼Z(yǔ)言猬腰,強(qiáng)迫開(kāi)發(fā)人員把所有例行程序包括在類中,可以更好的組織編碼猜敢。
3. Java 1.7 與 Java 1.8 新特性
- Java 1.7 新特性
switch 語(yǔ)句中支持使用字符串了
支持 List tempList = new ArrayList<>()的聲明方式漆诽,其實(shí)是泛型實(shí)例化類型自動(dòng)推斷。
提供自定義關(guān)閉類的接口锣枝,實(shí)現(xiàn)AutoCloseable ,就可以在類銷毀的時(shí)候自動(dòng)關(guān)閉一些資源兰英。
char值可以進(jìn)行equals比較
boolean值支持反轉(zhuǎn)和位運(yùn)算
File System.* 增加了很多get環(huán)境信息的工具方法
try catch支持捕獲多個(gè)異常撇叁,豎線分割異常即可
try塊中使用的資源可以不用手動(dòng)在finally中關(guān)閉
安全的加減乘除操作
- Java 1.8 新特性
一、Java 8允許我們給接口添加一個(gè)非抽象的方法實(shí)現(xiàn)畦贸,只需要使用 default關(guān)鍵字即可陨闹,這個(gè)特征又叫做擴(kuò)展方法楞捂,示例如下:
interface Formula {
double calculate(int a);
default double sqrt(int a) {
return Math.sqrt(a);
}
二、Lambda 表達(dá)式
三趋厉、函數(shù)式接口
四寨闹、方法與構(gòu)造函數(shù)引用,代碼還可以通過(guò)靜態(tài)方法引用來(lái)表示:
五君账、Lambda 作用域繁堡,在lambda表達(dá)式中訪問(wèn)外層作用域和老版本的匿名對(duì)象中的方式很相似。你可以直接訪問(wèn)標(biāo)記了final的外層局部變量乡数,或者實(shí)例的字段以及靜態(tài)變量
六椭蹄、訪問(wèn)局部變量,我們可以直接在lambda表達(dá)式中訪問(wèn)外層的局部變量
七净赴、訪問(wèn)對(duì)象字段與靜態(tài)變量绳矩,和本地變量不同的是,lambda內(nèi)部對(duì)于實(shí)例的字段以及靜態(tài)變量是即可讀又可寫玖翅。該行為和匿名對(duì)象是一致的
八翼馆、接口Formula定義了一個(gè)默認(rèn)方法sqrt可以直接被formula的實(shí)例包括匿名對(duì)象訪問(wèn)到,但是在lambda表達(dá)式中這個(gè)是不行的
九金度、java.time下包含了一組全新的時(shí)間日期API应媚。新的日期API和開(kāi)源的Joda-Time庫(kù)差不多,但又不完全一樣
十审姓、Annotation 注解珍特,在Java 8中支持多重注解了
- 參考網(wǎng)址
4. 設(shè)計(jì)模式:?jiǎn)卫J健⒐S模式魔吐、適配器模式扎筒、責(zé)任鏈、觀察者等等
- 單例模式
單例模式的三種形式:懶漢式單例酬姆、餓漢式單例嗜桌、登記式單例
單例模式有以下特點(diǎn):
1、單例類只能有一個(gè)實(shí)例辞色。
2骨宠、單例類必須自己創(chuàng)建自己的唯一實(shí)例。
3相满、單例類必須給所有其他對(duì)象提供這一實(shí)例层亿。
- 工廠模式
工廠模式主要是為創(chuàng)建對(duì)象提供過(guò)渡接口,以便將創(chuàng)建對(duì)象的具體過(guò)程屏蔽隔離起來(lái)立美,達(dá)到提高靈活性的目的
- 適配器模式
適配器模式把一個(gè)類的接口變換成客戶端所期待的另一種接口匿又,從而使原本因接口不匹配而無(wú)法在一起工作的兩個(gè)類能夠在一起工作
- 責(zé)任鏈
使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系建蹄,
將這個(gè)對(duì)象連成一條鏈碌更,并沿著這條鏈傳遞該請(qǐng)求裕偿,直到有一個(gè)對(duì)象處理他為止
- 觀察者
在Java中通過(guò)Observable類和Observer接口實(shí)現(xiàn)了觀察者模式。一個(gè)Observer對(duì)象監(jiān)視著一個(gè)Observable對(duì)象的變化痛单,當(dāng)Observable對(duì)象發(fā)生變化時(shí)嘿棘,Observer得到通知,就可以進(jìn)行相應(yīng)的工作
5. JNI 的使用
JNI是Java Native Interface的縮寫旭绒,中文為JAVA本地調(diào)用鸟妙。使用JNI可以很方便的用我們的Java程序調(diào)用C/C++程序。很多時(shí)候快压,某些功能用Java無(wú)法實(shí)現(xiàn)圆仔,比如說(shuō)涉及到底層驅(qū)動(dòng)的一些功能,這時(shí)候我們就可以利用JNI來(lái)調(diào)用C或者C++程序來(lái)實(shí)現(xiàn)蔫劣,這就是JNI的強(qiáng)大之處坪郭。但是JNI也有它的缺點(diǎn),使用java與本地已編譯的代碼交互脉幢,通常會(huì)喪失平臺(tái)可移植性歪沃。