考察點:Java特性php
PHP暫時還不支持像Java那樣JIT運行時編譯熱點代碼,可是PHP具備opcache機制,可以把腳本對應的opcode緩存在內存,PHP7中還支持配置opcache.file_cache導出opcode到文件.第三方的Facebook HHVM也支持JIT.另外PHP官方基於LLVM圍繞opcache機制構建的Zend JIT分支也正在開發測試中.在php-src/Zend/bench.php測試顯示,PHP JIT分支速度是PHP 5.4的10倍.
PHP的庫函數用C實現,而Java核心運行時類庫(jdk/jre/lib/rt.jar,大於60MB)用Java編寫(jdk/src.zip), 因此Java應用運行的時候,用戶編寫的代碼以及引用的類庫和框架都要在JVM上解釋執行. Java的HotSpot機制,直到有方法被執行10000次纔會觸發JIT編譯, 在此以前運行在解釋模式下,以免出現JIT編譯花費的時間比方法解釋執行消耗的時間還要多的狀況. java
PHP內置模板引擎,自身就是模板語言.而Java Web須要使用JSP容器如Tomcat或第三方模板引擎. web
PHP也能夠運行在多線程模式下,好比Apache的event MPM和Facebook的HHVM都是多線程架構.不論是多進程仍是多線程的PHP Web運行模式,都不須要PHP開發者關心和控制,也就是說PHP開發者不須要寫代碼參與進程和線程的管理,這些都由PHP-FPM/HHVM/Apache實現.PHP-FPM進程管理和併發實現並不須要PHP開發者關心,而Java多線程編程須要Java開發者編碼參與.PHP一個worker進程崩潰,master進程會自動新建一個新的worker進程,並不會致使PHP服務崩潰.而Java多線程編程稍有不慎(好比沒有捕獲異常)就會致使JVM崩潰退出.對於PHP-FPM和Apache MOD_PHP來講,服務進程常駐內存,但一次請求釋放一次資源,這種內存釋放很是完全. PHP基於引用計數的GC甚至都還沒發揮做用程序就已經結束了。 正則表達式
考察點:正則表達式 編程
Java中的String類提供了支持正則表達式操做的方法,包括:matches()、replaceAll()、replaceFirst()、split()。此外,Java中能夠用Pattern類表示正則表達式對象,它提供了豐富的API進行各類正則表達式操做,如: 瀏覽器
1
2
3
4
5
6
7
8
9
10
11
12
|
import
java.util.regex.Matcher;
import
java.util.regex.Pattern;
class
RegExpTest {
public
static
void
main(String[] args) {
String str =
"成都市(成華區)(武侯區)(高新區)"
;
Pattern p = Pattern.compile(
".*?(?=\\()"
);
Matcher m = p.matcher(str);
if
(m.find()) {
System.out.println(m.group());
}
}
}
|
考察點:正則表達式 緩存
在編寫處理字符串的程序時,常常會有查找符合某些複雜規則的字符串的須要。正則表達式就是用於描述這些規則的工具。換句話說,正則表達式就是記錄文本規則的代碼。計算機處理的信息更多的時候不是數值而是字符串,正則表達式就是在進行字符串匹配和處理的時候最爲強大的工具,絕大多數語言都提供了對正則表達式的支持。 網絡
考察:Java&JavaScript 數據結構
JavaScript 與Java是兩個公司開發的不一樣的兩個產品。Java 是原Sun Microsystems公司推出的面向對象的程序設計語言,特別適合於互聯網應用程序開發;而JavaScript是Netscape公司的產品,爲了擴展Netscape瀏覽器的功能而開發的一種能夠嵌入Web頁面中運行的基於對象和事件驅動的解釋性語言。JavaScript的前身是LiveScript;而Java的前身是Oak語言。
下面對兩種語言間的異同做以下比較:
- 基於對象和麪向對象:Java是一種真正的面向對象的語言,即便是開發簡單的程序,必須設計對象;JavaScript是種腳本語言,它能夠用來製做與網絡無關的,與用戶交互做用的複雜軟件。它是一種基於對象(Object-Based)和事件驅動(Event-Driven)的編程語言,於是它自己提供了很是豐富的內部對象供設計人員使用。
- 解釋和編譯:Java的源代碼在執行以前,必須通過編譯。JavaScript是一種解釋性編程語言,其源代碼不需通過編譯,由瀏覽器解釋執行。(目前的瀏覽器幾乎都使用了JIT(即時編譯)技術來提高JavaScript的運行效率)
- 強類型變量和類型弱變量:Java採用強類型變量檢查,即全部變量在編譯以前必須做聲明;JavaScript中變量是弱類型的,甚至在使用變量前能夠不做聲明,JavaScript的解釋器在運行時檢查推斷其數據類型。
- 代碼格式不同。 多線程
考察點:循環
在最外層循環前加一個標記如A,而後用break A;能夠跳出多重循環。(Java中支持帶標籤的break和continue語句,做用有點相似於C和C++中的goto語句,可是就像要避免使用goto同樣,應該避免使用帶標籤的break和continue,由於它不會讓你的程序變得更優雅,不少時候甚至有相反的做用,因此這種語法其實不知道更好),根本不能進行字符串的equals比較,不然會產生NullPointerException異常。
考察點:運算符
&運算符有兩種用法:(1)按位與;(2)邏輯與。&&運算符是短路與運算。邏輯與跟短路與的差異是很是巨大的,雖然兩者都要求運算符左右兩端的布爾值都是true整個表達式的值纔是true。&&之因此稱爲短路運算是由於,若是&&左邊的表達式的值是false,右邊的表達式會被直接短路掉,不會進行運算。不少時候咱們可能都須要用&&而不是&,例如在驗證用戶登陸時斷定用戶名不是null並且不是空字符串,應當寫爲:username != null &&!username.equals(""),兩者的順序不能交換,更不能用&運算符,由於第一個條件若是不成立,根本不能進行字符串的equals比較,不然會產生NullPointerException異常。
考察點:數據類型
Java是一個近乎純潔的面向對象編程語言,可是爲了編程的方便仍是引入了基本數據類型,可是爲了可以將這些基本數據類型當成對象操做,Java爲每個基本數據類型都引入了對應的包裝類型(wrapper class),int的包裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得兩者能夠相互轉換。
Java 爲每一個原始類型提供了包裝類型:
- 原始類型: boolean,char,byte,short,int,long,float,double
- 包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
考察點:數據類型
Public String translate (String str) {
String tempStr = 「」;
try {
tempStr = new String(str.getBytes(「ISO-8859-1″), 「GBK」);
tempStr = tempStr.trim();
}
catch (Exception e) {
System.err.println(e.getMessage());
}
return tempStr;
}
考察點:數據類型
JAVA 平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當你知道字符數據要改變的時候你就可使用StringBuffer。典型地,你可使用StringBuffers來動態構造字符數據。
考察點:數據類型
Java 提供兩種不一樣的類型:引用類型和原始類型(或內置類型)。Int是java的原始數據類型,Integer是java爲int提供的封裝類。
Java爲每一個原始類型提供了封裝類。
原始類型封裝類
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
引用類型和原始類型的行爲徹底不一樣,而且它們具備不一樣的語義。引用類型和原始類型具備不一樣的特徵和用法,它們包括:大小和速
度問題,這種類型以哪一種類型的數據結構存儲,當引用類型和原始類型用做某個類的實例數據時所指定的缺省值。對象引用實例變量
的缺省值爲null,而原始類型實例變量的缺省值與它們的類型有關。
考察點:數據類型
基本數據類型包括byte、int、char、long、float、double、boolean和short。
java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。爲了提升效率節省空間,咱們應該用StringBuffer類。