成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

夯實(shí)基礎(chǔ)系列一:Java 基礎(chǔ)總結(jié)

greatwhole / 2962人閱讀

摘要:可實(shí)現(xiàn)單例模式代碼塊初始化靜態(tài)變量,只被執(zhí)行一次內(nèi)部類不能與外部類重名,只能訪問(wèn)外部類靜態(tài)數(shù)據(jù)包括私有多分支選擇整型或字符類型變量或整數(shù)表達(dá)式開(kāi)始支持。

前言

大學(xué)期間接觸 Java 的時(shí)間也不短了,不論學(xué)習(xí)還是實(shí)習(xí),都讓我發(fā)覺(jué)基礎(chǔ)的重要性?;ヂ?lián)網(wǎng)發(fā)展太快了,各種框架各種技術(shù)更新迭代的速度非???,可能你剛好掌握了一門(mén)技術(shù)的應(yīng)用,它卻已經(jīng)走在淘汰的邊緣了。

而學(xué)習(xí)新技術(shù)總要付出一定的時(shí)間成本,那么怎么降低時(shí)間成本呢?那就是打好基礎(chǔ),技術(shù)再怎么革新,底層的東西也很少會(huì)變動(dòng),牢固的基礎(chǔ)會(huì)幫助你在各種新技術(shù)的學(xué)習(xí)中游刃有余,快速上手。

因?yàn)槲疫x擇的方向是后臺(tái)開(kāi)發(fā),所以談?wù)勎艺J(rèn)為的基礎(chǔ)有哪些。其他方向肯定也有自己的體系,從低層到高層,可以自己摸索。后臺(tái)的話,我覺(jué)得網(wǎng)絡(luò)知識(shí),各種協(xié)議,web 知識(shí),數(shù)據(jù)庫(kù)知識(shí),Linux 基本操作以及自己選擇的后臺(tái)語(yǔ)言知識(shí),這些是最基礎(chǔ)最需要牢固掌握的。

所以從今天起,會(huì)出一系列與后臺(tái)基礎(chǔ)相關(guān)的博文,一是對(duì)自己過(guò)去學(xué)習(xí)的一個(gè)總結(jié),二是分享出來(lái),希望可以幫助到需要的人。

概要

Java 基礎(chǔ)我做了 10 個(gè)方面的總結(jié),包括基本概念,面向?qū)ο?,關(guān)鍵字,基本類型與運(yùn)算,字符串與數(shù)組,異常處理,Java 平臺(tái)與內(nèi)存管理,分布式 Java 應(yīng)用,多線程,IO。以下對(duì)這些內(nèi)容做一些簡(jiǎn)單的總結(jié),同時(shí)我也有完整的思維導(dǎo)圖,博客上不方便展示,若有需要,聯(lián)系我。

細(xì)節(jié) 1. 基本概念
1.1 語(yǔ)言特點(diǎn)

純面向?qū)ο?/p>

平臺(tái)無(wú)關(guān)性

內(nèi)置類庫(kù)

支持web

安全性

防止代碼攻擊

健壯性

強(qiáng)類型機(jī)制

垃圾回收器

異常處理

安全檢查機(jī)制

去除C++中難以理解易混淆的特性

1.2 與C++比較

解釋編譯混合型語(yǔ)言,執(zhí)行速度慢,跨平臺(tái)

純面向?qū)ο?,只有類,不存在全局變量或全局函?shù)

無(wú)指針,無(wú)多繼承,可多實(shí)現(xiàn)

垃圾回收器自動(dòng)管理內(nèi)存

1.3 main函數(shù)知識(shí)

Java程序入口方法

可由final,synchronized修飾,不能用abstract

1.4 Java程序初始化順序

靜態(tài)優(yōu)于非靜態(tài)

父類優(yōu)于子類

按照成員變量的定義順序

總共10個(gè)

1.5 作用域與可見(jiàn)性

靜態(tài)變量屬于類

局部變量屬于花括號(hào)

成員變量看下一條

public、protected、default、private 可見(jiàn)性依次遞減

1.6 構(gòu)造函數(shù)

與類名相同,無(wú)返回值

可重載,不能被繼承,即不能被覆蓋

參數(shù)個(gè)數(shù)任意

伴隨new 一起調(diào)用,為系統(tǒng)調(diào)用

完成對(duì)象的初始化工作

子類可通過(guò)super顯式調(diào)用父類。父類沒(méi)有提供無(wú)參,子類必須顯式調(diào)用

未定義,默認(rèn)無(wú)參,修飾符取決于類修飾符

1.7 標(biāo)識(shí)接口

無(wú)任何方法聲明

表示實(shí)現(xiàn)它的類屬于一個(gè)特定的類型

1.8 clone 方法

實(shí)現(xiàn)Cloneable接口

重寫(xiě)Object類中的clone()

clone()中調(diào)用super.clone()

把淺復(fù)制引用指向新的克隆體

1.9 反射

定義:允許程序在運(yùn)行時(shí)進(jìn)行自我檢查,也允許對(duì)其內(nèi)部成員進(jìn)行操作

功能

得到一個(gè)對(duì)象所屬的類

獲取一個(gè)類的所有成員和方法

運(yùn)行時(shí)創(chuàng)建對(duì)象

在運(yùn)行時(shí)調(diào)用對(duì)象的方法

獲取類的方式

class.forName("類路徑")

類名.class

實(shí)例.getClass()

1.10 創(chuàng)建對(duì)象的四種方式

new

反射機(jī)制

clone()

反序列化

1.11 package 作用

提供多層命名空間,解決命名沖突

對(duì)類按功能進(jìn)行分類,使項(xiàng)目組織更加清晰

2. 面向?qū)ο?/b>
2.1 與面向過(guò)程區(qū)別

層次邏輯關(guān)系不同。

面向?qū)ο笫峭ㄟ^(guò)類的層次結(jié)構(gòu)來(lái)體現(xiàn)類之間的繼承與發(fā)展

面向過(guò)程是通過(guò)模塊的層次結(jié)構(gòu)概括模塊與模塊間的關(guān)系與功能

數(shù)據(jù)處理方式不同與控制程序方式不同

面向?qū)ο笫菙?shù)據(jù)與操作封裝成一個(gè)整體,通過(guò)事件驅(qū)動(dòng)來(lái)激活和運(yùn)行程序

面向過(guò)程是數(shù)據(jù)多帶帶存儲(chǔ),控制程序方式上按照設(shè)計(jì)調(diào)用或返回程序

2.2 特性

抽象

繼承

多態(tài)

封裝

2.3 這種開(kāi)發(fā)方式優(yōu)點(diǎn)

開(kāi)發(fā)效率高。代碼重用

保證軟件的魯棒性。經(jīng)過(guò)長(zhǎng)期測(cè)試的已有代碼

保證軟件的高可維護(hù)性。設(shè)計(jì)模式成熟

2.4 繼承

單繼承

只能繼承父類的非私有成員變量和方法

同名成員變量,子類覆蓋,不會(huì)繼承

相同函數(shù)簽名,子類覆蓋,不會(huì)繼承

2.5 組合和繼承區(qū)別

組合:在新類中創(chuàng)建原有類的對(duì)象。has a

繼承是 is a

2.6 多態(tài)

方法重載

編譯時(shí)多態(tài)

方法覆蓋

運(yùn)行時(shí)多態(tài)

成員變量無(wú)多態(tài)概念

2.7 覆蓋和重載區(qū)別

子父類關(guān)系,垂直;同類方法間關(guān)系,水平

一對(duì)方法發(fā)生關(guān)系;多個(gè)方法發(fā)生關(guān)系

參數(shù)列表相同;參數(shù)列表不同

調(diào)用的方法根據(jù)對(duì)象的類型決定;根據(jù)調(diào)用時(shí)的實(shí)參表決定方法體

2.8 抽象類與接口異同

不能被實(shí)例化

接口的實(shí)現(xiàn)類實(shí)現(xiàn)了接口,抽象類的子類實(shí)現(xiàn)了方法,才能被實(shí)例化

接口只能定義方法,不能實(shí)現(xiàn);抽象類可以有定義和實(shí)現(xiàn)

接口需要被實(shí)現(xiàn);抽象類需要被繼承

接口強(qiáng)調(diào)特定功能的實(shí)現(xiàn);抽象類強(qiáng)調(diào)所屬關(guān)系

接口成員變量默認(rèn)為 public static final,成員方法 public abstract

抽象類變量默認(rèn)default,方法不能用 private、static、synchronized、native 修飾

2.9 內(nèi)部類

靜態(tài)內(nèi)部類

static 修飾

只能訪問(wèn)外部類中的static數(shù)據(jù)

成員內(nèi)部類

與實(shí)例綁定

不可定義靜態(tài)屬性和方法

外部實(shí)例化后,該內(nèi)部類才能被實(shí)例化

局部?jī)?nèi)部類

代碼塊內(nèi)

不能被public、protected、private以及static修飾

只能訪問(wèn)final 局部變量

匿名內(nèi)部類

無(wú)類名

無(wú)構(gòu)造函數(shù),必須繼承或?qū)崿F(xiàn)其他類

原則

無(wú)構(gòu)造函數(shù)

無(wú)靜態(tài)成員,方法和類

不能是public、protected、private、static

只能創(chuàng)建匿名內(nèi)部類的一個(gè)實(shí)例

new 后面有繼承或?qū)崿F(xiàn)

特殊的局部?jī)?nèi)部類

2.10 如何獲取父類類名

利用反射:obj.getClass().getSuperClass().getName()

不使用super.getClass()原因:該方法在 Object中為final與native,子類不能覆蓋,返回此Object運(yùn)行時(shí)類

2.11 this

指向當(dāng)前實(shí)例對(duì)象

區(qū)分成員變量與方法形參

2.12 super

訪問(wèn)父類成員變量或方法

子類同名會(huì)覆蓋,訪問(wèn)父類只能通過(guò)super

子類構(gòu)造函數(shù)需顯示調(diào)用父類構(gòu)造函數(shù)時(shí),super()必須為構(gòu)造函數(shù)的第一條語(yǔ)句

3. 關(guān)鍵字
3.1 變量命名

英文字母

數(shù)字

_和$

不能包含空白字符

首字符不能為數(shù)字

保留字不能做標(biāo)識(shí)符

區(qū)分大小寫(xiě)

3.2 assert

軟件調(diào)試

運(yùn)行時(shí)開(kāi)啟 -ea

3.3 static

特定類的統(tǒng)一存儲(chǔ)空間,類綁定

成員變量:屬于類,內(nèi)存中只有一個(gè)復(fù)制

成員方法:調(diào)靜態(tài)數(shù)據(jù)??蓪?shí)現(xiàn)單例模式

代碼塊:初始化靜態(tài)變量,只被執(zhí)行一次

內(nèi)部類:不能與外部類重名,只能訪問(wèn)外部類靜態(tài)數(shù)據(jù)(包括私有)

3.4 switch

多分支選擇

整型或字符類型變量或整數(shù)表達(dá)式

Java 7 開(kāi)始支持 String。原理是String的hashCode()返回的int類型值匹配

3.5 volatile

保證線程間的可見(jiàn)性

從內(nèi)存中取數(shù)據(jù),而不是緩存

不保證原子性

3.6 instanceof

二元運(yùn)算符

判斷一個(gè)引用類型的變量所指向的對(duì)象是否是一個(gè)類的實(shí)例

即左邊對(duì)象是否是右邊類的實(shí)例

3.7 strictfp

精確浮點(diǎn)

確保浮點(diǎn)運(yùn)算的準(zhǔn)確性

若不指定,結(jié)果依賴于虛擬機(jī)平臺(tái)

指定后依賴于統(tǒng)一標(biāo)準(zhǔn),保證各平臺(tái)的一致性

3.8 null

不是合法的Object實(shí)例

無(wú)內(nèi)存

表明該引用目前沒(méi)有指向任何對(duì)象

4. 基本類型與運(yùn)算
4.1 基本數(shù)據(jù)類型

int長(zhǎng)度

byte(8 bit)

short(16 bit)

int(32 bit)

long(64 bit)

float長(zhǎng)度

單精度(32 bit float)

雙精度(64 bit double)

boolean 類型變量的取值

true

false

char數(shù)據(jù)類型:Unicode字符(16 bit)

void:java.lang.Void 無(wú)法直接對(duì)其進(jìn)行操作

4.2 不可變類

實(shí)例創(chuàng)建后,值不可變

所有的基本類型的包裝類+String

優(yōu)點(diǎn)

使用簡(jiǎn)單

線程安全

節(jié)省內(nèi)存

缺點(diǎn):會(huì)因?yàn)橹档牟煌a(chǎn)生新的對(duì)象,導(dǎo)致無(wú)法預(yù)料的問(wèn)題

4.3 類型轉(zhuǎn)換

隱式類型轉(zhuǎn)換

低精度到高精度

byte->short->char->int->long->float->double

顯式類型轉(zhuǎn)換

反之

可能會(huì)損失精度

類型自動(dòng)轉(zhuǎn)換

低到高

char類型會(huì)轉(zhuǎn)換為其對(duì)應(yīng)的ASCII碼

byte、char、short參與運(yùn)算自動(dòng)轉(zhuǎn)為int,但"+=",不轉(zhuǎn)

基本數(shù)據(jù)類型與boolean不能相互轉(zhuǎn)換

多種類型混合運(yùn)算,自動(dòng)轉(zhuǎn)成容量最大類型

運(yùn)算符優(yōu)先級(jí)

點(diǎn)    ()    []
+(正)    -(負(fù))        ++    --    ~    !
*    /    %

    +(加)    -(減)
    <<    >>    >>>
    <    <=    >    >=    instanceof
    ==    !=
    &
    |
    ^
    &&
    ||
    ?:
    =    +=    -=    *=    /=    %=    &=       |=    ^=    ~=    <<=    >>=    >>>=
5. 字符串與數(shù)組
5.1 字符串創(chuàng)建與存儲(chǔ)機(jī)制

常量池

new String("abc")創(chuàng)建1個(gè)或2個(gè)對(duì)象

5.2 ==、equals和hashCode區(qū)別

== 比較引用,內(nèi)存

未覆蓋,同==;比較內(nèi)容

hashCode鑒定對(duì)象是否相等,返回整數(shù)

5.3 String,StringBuffer,StringBuilder

String:不可變,執(zhí)行效率最低

StringBuffer:可修改,線程安全,效率較高

StringBuilder:可修改,線程不安全,效率最高

5.4 其他

數(shù)組初始化方式

length屬性和length()方法

6. 異常處理
6.1 finally塊執(zhí)行時(shí)機(jī)

若try中有return,在return前

若try-finally或catch-finally中都有return,finally會(huì)覆蓋

6.2 finally代碼塊不是一定會(huì)被執(zhí)行

程序進(jìn)入try之前出現(xiàn)異常

try中調(diào)用System.exit(0)

6.3 Error

嚴(yán)重錯(cuò)誤,不可恢復(fù)

6.4 Exception

可恢復(fù),編譯器可捕捉

檢查性異常

IO

SQL

運(yùn)行時(shí)異常

JVM處理

NullPointException

ClassCastException

ArrayIndexOutOfBoundsException

出現(xiàn)異常后,一直往上層拋,直到遇到處理代碼或最上層

多態(tài)。若先捕獲基類,再捕獲子類。子類處理代碼將永遠(yuǎn)不會(huì)得到執(zhí)行

7. Java平臺(tái)與內(nèi)存管理
7.1 Java平臺(tái)與其他語(yǔ)言平臺(tái)的區(qū)別

純軟件,包括JVM與JAVA API

JVM虛擬,不跨平臺(tái)

7.2 JAVA代碼的執(zhí)行

代碼編譯為class:sun jdk 中javac

裝載class:ClassLoader

執(zhí)行class

解釋執(zhí)行

編譯執(zhí)行

client compiler

server compiler

7.3 java源碼編譯機(jī)制

詞法分析器組件:Token流

語(yǔ)法分析器組件:語(yǔ)法樹(shù)

語(yǔ)義分析器組件:注解語(yǔ)法樹(shù)

將語(yǔ)法樹(shù)中的名字、表達(dá)式等元素與變量、方法、類型等聯(lián)系到一起

檢查變量使用前是否已聲明

推導(dǎo)泛型方法的類型參數(shù)

檢查類型匹配性

進(jìn)行常量折疊

檢查所有語(yǔ)句都可到達(dá)

檢查變量的確定性賦值

解除語(yǔ)法糖

將泛型JAVA轉(zhuǎn)成普通Java

檢查所有checked exception都被捕獲或拋出

將含語(yǔ)法糖的語(yǔ)法樹(shù)轉(zhuǎn)成簡(jiǎn)單語(yǔ)法樹(shù)eg:foreach,自動(dòng)折疊

代碼生成器組件:字節(jié)碼

7.4 類加載機(jī)制

裝載:全限定名+類加載器加載類

鏈接

校驗(yàn)

格式不符,拋VerifyError

加載引用的類失敗:拋NoClassDefFoundError

準(zhǔn)備:靜態(tài)變量默認(rèn)初始化

解析:屬性、方法驗(yàn)證(可選)

初始化(不是類加載必須觸發(fā)的)

靜態(tài)初始化代碼

構(gòu)造器代碼

靜態(tài)屬性初始化

觸發(fā)時(shí)機(jī)

調(diào)用了new

反射調(diào)用了類中的方法

子類調(diào)用了初始化

JVM啟動(dòng)過(guò)程中指定的初始化類

Bootstrap Class Loader:$JAVA_HOME/jre/lib/rt.jar

Extension Class Loader:$JAVA_HOME/jre/lib/ext/*.jar

System Class Loader:$CLASSPATH

User Defined Class Loader

7.5 類執(zhí)行機(jī)制

解釋執(zhí)行

JVM字節(jié)碼為中間代碼,由JVM在運(yùn)行期對(duì)其解釋并執(zhí)行

invokestatic

invokevirtual

invokeinterface

invokespecial

基于棧

代碼緊湊,體積小

線程創(chuàng)建后,產(chǎn)生PC和Stack

指令解釋執(zhí)行

棧頂緩存:棧頂值緩存在寄存器上

部分棧幀共享

編譯執(zhí)行

client compiler

輕量級(jí),占內(nèi)存少

方法內(nèi)聯(lián)

去虛擬化

冗余消除

server compiler

重量級(jí),占內(nèi)存多

逃逸分析是C2進(jìn)行很多優(yōu)化的基礎(chǔ)

標(biāo)量替換:用標(biāo)量替換聚合量

棧上分配

若對(duì)象未逃逸,C2會(huì)選擇在棧上直接創(chuàng)建Point對(duì)象實(shí)例,而不是在堆上

棧上分配更快速,對(duì)象易回收

同步消除:如果發(fā)現(xiàn)同步的對(duì)象未逃逸,那也沒(méi)有同步的必要。C2會(huì)去掉同步代碼塊

7.6 內(nèi)存空間

方法區(qū):類信息,線程共享

對(duì)象實(shí)例+數(shù)組

分代管理

新生代

舊生代

本地方法棧:支持native方法,Sun JDK的實(shí)現(xiàn)中本地方法棧和JVM方法棧是同一個(gè)

PC寄存器:線程私有

JVM方法棧:線程私有

7.7 內(nèi)存分配

Java對(duì)象,堆上分配,分配需加鎖,開(kāi)銷大

當(dāng)堆上空間不足-->GC-->仍不足-->拋OutOfMemory

Sun JDK 為新創(chuàng)建的線程在Eden上分配TLAB

多個(gè)小對(duì)象比大對(duì)象分配更高效

基于逃逸分析直接從棧上分配

7.8 內(nèi)存回收

收集器

引用計(jì)數(shù)收集器

計(jì)數(shù)器增減有消耗

不適合循環(huán)引用

跟蹤收集器

集中式管理

全局記錄數(shù)據(jù)的引用狀態(tài)

從根集合掃描對(duì)象,可能會(huì)造成應(yīng)用程序暫停

三種實(shí)現(xiàn)算法

復(fù)制

適用于回收空間中存活對(duì)象較少

缺點(diǎn):需要增加一塊空的內(nèi)存空間及進(jìn)行對(duì)象的移動(dòng)

標(biāo)記-清除:會(huì)產(chǎn)生內(nèi)存碎片

標(biāo)記-壓縮:不產(chǎn)生內(nèi)存碎片

Sun JDK中可用GC

新生代

串行GC(Serial GC):復(fù)制算法

Minor GC

強(qiáng)軟弱虛

并行回收GC(Parrallel Scavenge):掃描復(fù)制多線程

并行 GC(ParNew):配合舊生代 CMS

舊生代和持久代可用GC

串行:標(biāo)記壓縮+清除

并行:標(biāo)記壓縮

并發(fā):CMS

標(biāo)記:暫停

并發(fā)標(biāo)記:恢復(fù),輪詢著色對(duì)象,以標(biāo)記它們

重新標(biāo)記:暫停

并發(fā)收集:恢復(fù)

CMS內(nèi)存回收易產(chǎn)生碎片,但是它提供了整理碎片的功能

浮動(dòng)垃圾:CMS回收時(shí)產(chǎn)生應(yīng)該回收但要等到下次CMS才能被回收掉的對(duì)象

Full GC

對(duì)新生代舊生代及持久代都進(jìn)行的GC

觸發(fā)的四種情況

舊生代空間不足

持久代空間滿

CMS GC出現(xiàn)promotion failed和concurrent mode failure

統(tǒng)計(jì)得到的Minor GC晉升到舊生代的平均大小大于舊生代的剩余空間

7.9 內(nèi)存泄露

一個(gè)不再被程序使用的對(duì)象或變量還在內(nèi)存中占有存儲(chǔ)空間

符合垃圾回收標(biāo)準(zhǔn)

對(duì)象賦空值null

給對(duì)象賦予新值,重新分配了內(nèi)存空間

泄露的兩種情況

堆中申請(qǐng)的空間沒(méi)有被釋放

對(duì)象不再被使用,但仍然存活在內(nèi)存中

泄露原因

靜態(tài)集合類

各種連接

監(jiān)聽(tīng)器

變量不合理的作用域

單例模式

8. 分布式Java應(yīng)用
8.1 基于消息方式實(shí)現(xiàn)系統(tǒng)間的通信

TCP/IP+BIO

socket.setSoTimeOut()設(shè)置等待響應(yīng)的超時(shí)時(shí)間

一連接一線程

缺點(diǎn):無(wú)論連接是否真實(shí),都要?jiǎng)?chuàng)建線程

BIO下服務(wù)器端所能支撐的連接數(shù)目有限

TCP/IP+NIO

Channel

SocketChannel:建立連接,監(jiān)聽(tīng)事件,操作讀寫(xiě)

ServerSocketChannel:監(jiān)聽(tīng)端口,監(jiān)聽(tīng)連接事件

Selector:獲取是否要處理的事件

Buffer:存放處理的數(shù)據(jù)

NIO Reactor模式,通過(guò)注冊(cè)感興趣的事件及掃描是否有感興趣的事件發(fā)生,從而做出相應(yīng)的動(dòng)作

多個(gè)請(qǐng)求,連接復(fù)用

只有在有真實(shí)的請(qǐng)求時(shí),才會(huì)創(chuàng)建線程

一請(qǐng)求一線程

UDP/IP+BIO

DatagramSocket:負(fù)責(zé)監(jiān)聽(tīng)端口,讀寫(xiě)數(shù)據(jù)

DatagramPacket:作為數(shù)據(jù)流對(duì)象進(jìn)行傳輸

UDP/IP+NIO

DatagramChannel:監(jiān)聽(tīng)端口,進(jìn)行讀寫(xiě)

ByteBuffer:數(shù)據(jù)流傳輸

NIO好處:只在有流要讀取或可寫(xiě)入流時(shí)才做出相應(yīng)的IO操作,而不像BIO方式阻塞當(dāng)前線程

8.2 基于遠(yuǎn)程調(diào)用方式實(shí)現(xiàn)系統(tǒng)間的通信

遠(yuǎn)程調(diào)用方式

系統(tǒng)間通信和系統(tǒng)內(nèi)一樣

讓使用者感覺(jué)調(diào)用遠(yuǎn)程同調(diào)用本地一樣

基于Java自身技術(shù)

RMI:客戶端代理,stub,封裝對(duì)象,序列化為流,TCP/IP BIO,Skeleton,反序列化,獲取對(duì)象實(shí)例,調(diào)用

WebService

服務(wù)端的服務(wù)生成WSDL文件

將應(yīng)用+WSDL文件放入HTTP服務(wù)器

借用Java輔助工具根據(jù)WSDL文件生成客戶端stub代碼

stub將產(chǎn)生的對(duì)象請(qǐng)求信息封裝為標(biāo)準(zhǔn)化的SOAP格式數(shù)據(jù),并發(fā)請(qǐng)求到服務(wù)器端

服端在接收到SOAP格式數(shù)據(jù)時(shí)進(jìn)行轉(zhuǎn)化,反射調(diào)用相應(yīng)的Java類

SOAP優(yōu)點(diǎn)支持跨語(yǔ)言,缺點(diǎn)對(duì)復(fù)雜對(duì)象結(jié)構(gòu)難支持

8.3 基于開(kāi)源框架

Spring RMI

9. 多線程
9.1 線程資源同步機(jī)制

JVM保證以下操作順序

同一線程操作

對(duì)于main Memory 上的同一個(gè)變量的操作

對(duì)于加了鎖的main Memory上的對(duì)象操作

為避免資源操作的臟數(shù)據(jù)問(wèn)題,JVM提供了

synchronized

volatile

lock/unlock

目的是控制資源競(jìng)爭(zhēng)

9.2 線程交互機(jī)制

基于Object的wait/notify/notifyAll

為避免假喚醒,需要double check

調(diào)用對(duì)象的wait-->wait sets--->釋放鎖--->其他線程notify---->wait sets---->執(zhí)行此對(duì)象線程--->刪除sets中此線程

基于JDK 5 并發(fā)包,支持線程交互

Semphore的acquire,release

Condition的await,signal

CountDownLatch的await和countDown

9.3 線程狀態(tài)

New

Runnable

Running

Wait

TimedWait

Blocked

Terminated

9.4 sleep()與wait()方法的區(qū)別

sleep

暫停一段時(shí)間執(zhí)行

Thread的靜態(tài)方法

不釋放鎖

需要捕獲異常

wait

使線程暫停執(zhí)行

Object方法,用于線程間通信

釋放鎖

9.5 守護(hù)線程

后臺(tái)提供服務(wù)

用戶線程全部終止,只剩下守護(hù)線程時(shí),JVM就會(huì)退出

調(diào)用start()之前,調(diào)用線程對(duì)象的setDaemon(true)

9.6 join

調(diào)用該方法的線程在執(zhí)行完run()后,再執(zhí)行join方法后面的代碼

線程合并,實(shí)現(xiàn)同步功能

10. IO
10.1 流本質(zhì)

數(shù)據(jù)傳輸

10.2 流分類

字節(jié)流:不使用緩存

字符流

碼表映射

使用緩存

10.3 裝飾者模式

運(yùn)行時(shí)動(dòng)態(tài)給對(duì)象增加額外的職責(zé)

是你還有你,一切拜托你

FilterInputStream

10.4 Java Socket

ServerSocket server = new ServerSocket(2000);

Socker socket = server.accept();

客戶端:Socket socket = new Socket("localhost",2000);

10.5 NIO

Channel--Selector--Buffer

反應(yīng)器模式

10.6 序列化

對(duì)象持久化方式

解決在對(duì)對(duì)象流進(jìn)行讀寫(xiě)操作時(shí)引發(fā)的問(wèn)題

對(duì)象寫(xiě)進(jìn)流里進(jìn)行網(wǎng)絡(luò)傳輸,保存到文件,數(shù)據(jù)庫(kù)

10.7 如何實(shí)現(xiàn)序列化

實(shí)現(xiàn)Serializable接口

使用FileOutputStream來(lái)構(gòu)造ObjectOutputStream對(duì)象

使用該對(duì)象的writeObject(obj)方法將對(duì)象寫(xiě)出

要恢復(fù)時(shí),使用對(duì)應(yīng)的輸入流

10.8 序列化特點(diǎn)

一個(gè)類能被序列化,它的子類也能被序列化

static代表類成員,transient代表臨時(shí)數(shù)據(jù)。均不能被序列化

序列化影響性能,需要才使用

需要通過(guò)網(wǎng)絡(luò)來(lái)發(fā)送對(duì)象,或?qū)ο蟮臓顟B(tài)需要被持久化到數(shù)據(jù)庫(kù)或文件中

序列化能實(shí)現(xiàn)深復(fù)制,即可以復(fù)制引用的對(duì)象

10.9 反序列化

將流轉(zhuǎn)化為對(duì)象

UID最好自己定義。優(yōu)點(diǎn)

提高程序運(yùn)行效率。省去計(jì)算過(guò)程

提高程序不同平臺(tái)兼容性。不同計(jì)算方式,反序列化失敗

增強(qiáng)程序各個(gè)版本的可兼容性。加入新屬性,默認(rèn)UID變化

10.10 外部序列化

實(shí)現(xiàn)Externalizable接口控制

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77195.html

相關(guān)文章

  • 夯實(shí)基礎(chǔ)系列二:網(wǎng)絡(luò)知識(shí)總結(jié)

    摘要:今天總結(jié)下與網(wǎng)絡(luò)相關(guān)的知識(shí),不是那么詳細(xì),但是包含了我認(rèn)為重要的所有點(diǎn)。概要網(wǎng)絡(luò)知識(shí)我做了個(gè)方面的總結(jié),包括協(xié)議,協(xié)議,協(xié)議,協(xié)議,協(xié)議,,攻擊,其他協(xié)議??缬蛎缃癖黄毡橛迷诰W(wǎng)絡(luò)中,例如等。擁塞窗口的大小又取決于網(wǎng)絡(luò)的擁塞狀況。 前言 無(wú)論是 C/S 開(kāi)發(fā)還是 B/S 開(kāi)發(fā),無(wú)論是前端開(kāi)發(fā)還是后臺(tái)開(kāi)發(fā),網(wǎng)絡(luò)總是無(wú)法避免的,數(shù)據(jù)如何傳輸,如何保證正確性和可靠性,如何提高傳輸效率,如何解...

    wfc_666 評(píng)論0 收藏0
  • 夯實(shí)基礎(chǔ)-作用域與閉包

    摘要:作用域分類作用域共有兩種主要的工作模型。換句話說(shuō),作用域鏈?zhǔn)腔谡{(diào)用棧的,而不是代碼中的作用域嵌套。詞法作用域詞法作用域中,又可分為全局作用域,函數(shù)作用域和塊級(jí)作用域。 一篇鞏固基礎(chǔ)的文章,也可能是一系列的文章,梳理知識(shí)的遺漏點(diǎn),同時(shí)也探究很多理所當(dāng)然的事情背后的原理。 為什么探究基礎(chǔ)?因?yàn)槟悴蝗ッ嬖嚹憔筒恢阑A(chǔ)有多重要,或者是說(shuō)當(dāng)你的工作經(jīng)歷沒(méi)有亮點(diǎn)的時(shí)候,基礎(chǔ)就是檢驗(yàn)?zāi)愫脡牡囊豁?xiàng)...

    daydream 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<