膠南網(wǎng)站制作宣傳頁(yè)面怎么制作
泛型
- 什么是泛型?有什么用?
泛型是jdk5引入的新特性,通過(guò)泛型可以提高代碼的可讀性和穩(wěn)定性;當(dāng)我們使用泛型時(shí),傳入的對(duì)象類型必須是指定的泛型類型,否則就會(huì)報(bào)錯(cuò)
- 泛型的使用方式有哪些?
一是泛型類
二是泛型接口
三是泛型方法
泛型類,一般在實(shí)例化的時(shí)候需要指定泛型的類型
public class Person<T>{private String name ;public Person<T>{}
}
實(shí)例化
Person<ming> person = new Person<ming>
泛型接口,
public interface Generator<T> {public T method();
}
// 實(shí)現(xiàn)接口,指定泛型類型
class GeneratorImpl<T> implements Generator<String>{@Overridepublic String method() {return "hello";}
}// 實(shí)現(xiàn)接口,不指定泛型類型
class GeneratorImpl<T> implements Generator<T>{@Overridepublic T method() {return "hello";}
}
泛型方法
public static < E > void printArray( E[] inputArray ){for ( E element : inputArray ){System.out.printf( "%s ", element );}System.out.println();}
在泛型方法中,泛型只是一個(gè)占位符,使用了泛型的方法是一個(gè)靜態(tài)方法,表示我們使用這個(gè)方法可以是任意類型的數(shù)組
作為一個(gè)靜態(tài)的方法,由于靜態(tài)方法是先于類加載的,所有對(duì)于泛型方法,是不能使用泛型類指定的類型的,只能使用自己聲明的泛型
- 項(xiàng)目中哪里用到泛型?
一是自定義的通用接口返回類,使用泛型可以做到返回結(jié)果的統(tǒng)一化
二是定義Excel處理類,用于動(dòng)態(tài)的導(dǎo)出數(shù)據(jù)類型
三是構(gòu)建集合處理類(比如Collections 中的 sort, binarySearch 方法)
反射
- 什么是反射?優(yōu)缺點(diǎn)
反射在很多框架都有體現(xiàn),主要的作用就是在運(yùn)行時(shí),可以分析類或者執(zhí)行類的方法,并且可以直接通過(guò)獲取到一個(gè)類的所有方法和屬性,給我們提供了便利。
缺點(diǎn)就是會(huì)有安全的問(wèn)題出現(xiàn),比如反射會(huì)無(wú)視泛型類型的安全檢查,因?yàn)榉盒皖愋偷陌踩珯z查是在編譯時(shí)期執(zhí)行的。
根據(jù)反射的概念,反射是在運(yùn)行時(shí)分析類和執(zhí)行類的方法的 - 反射的應(yīng)用場(chǎng)景?
Java的注解
Spring 的注解
基于反射的分析類,獲取到類,屬性,方法,方法上的參數(shù) 上的注解,獲取到注解之后,可以進(jìn)行進(jìn)一步的處理。
SPI
- 什么是SPI?
SPI就是服務(wù)提供者接口,是專門提供給開發(fā)者的接口,一般提供一些擴(kuò)展框架功能 - SPI和API的區(qū)別?
API 應(yīng)用程序編程接口,一個(gè)API 表示的是,接口的功能有服務(wù)的提供者來(lái)實(shí)現(xiàn),包括一些接口的規(guī)則,詳細(xì)的功能,提供一個(gè)接口給外界的人使用,調(diào)用方不需要知道內(nèi)部的核心,只需要知道怎么使用調(diào)用接口即可
SPI 服務(wù)提供者接口,接口的規(guī)則有調(diào)用方來(lái)確認(rèn),提供給不同的服務(wù)開發(fā)者進(jìn)行開發(fā),開發(fā)出來(lái)的結(jié)果都是符合接口調(diào)用方的要求。
序列化和反序列化
- 序列化和反序列化分別是什么?
序列化在Java中是對(duì) 對(duì)象 進(jìn)行序列化。
當(dāng)我們要進(jìn)行網(wǎng)絡(luò)傳輸?shù)臅r(shí)候,我們就需要將數(shù)據(jù)結(jié)果或者對(duì)象進(jìn)行序列化,或者是要將文件存儲(chǔ)到數(shù)據(jù)庫(kù)的之前,存儲(chǔ)到緩存之前都需要進(jìn)行序列化。
反序列化就是當(dāng)我們要從數(shù)據(jù)庫(kù),緩存,redis等取出數(shù)據(jù)的時(shí)候,都需要進(jìn)行反序列化。 - 序列化對(duì)應(yīng)TCP/IP4層模型的哪一層?
TCP/IP4層模型從上到下分別是 應(yīng)用層,傳輸層,網(wǎng)絡(luò)層,網(wǎng)絡(luò)接口層。
OSI 七層模型從上到下分別是 應(yīng)用層,表示層,會(huì)話層,傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層,物理層。
OSI模型中的表現(xiàn)層是將應(yīng)用層的數(shù)據(jù)進(jìn)行解碼,數(shù)據(jù)處理的,也就是將對(duì)象,數(shù)據(jù)接口轉(zhuǎn)化為二進(jìn)制流,所以,序列化對(duì)應(yīng)的是OSI模型的表現(xiàn)層,對(duì)應(yīng)TCP/IP則是應(yīng)用層。
TCP/IP 4層模型 的應(yīng)用層 包含了 OSI模型的應(yīng)用層,表示層和會(huì)話層 - 如果有些字段不想序列化怎么辦?
給不想序列化的字段(變量)添加transient關(guān)鍵字。
transient關(guān)鍵字不能用在類和方法上。
static 修飾的變量無(wú)論有沒(méi)有添加關(guān)鍵字transient都是不支持序列化的。 - 常見的序列化協(xié)議
Hessian、Kryo、Protobuf、ProtoStuff - 為什么不使用JDK自帶的序列化?
因?yàn)椴恢С挚缯Z(yǔ)言調(diào)用
性能差
存在安全問(wèn)題
Java IO流
- 什么是IO流
IO流就是輸入輸出流,在Java中分為輸入流和輸出流
根據(jù)數(shù)據(jù)的處理方式又分為 字符流 和 字節(jié)流
語(yǔ)法糖
代指的是編程語(yǔ)言為了方便程序員開發(fā)程序而設(shè)計(jì)的一種特殊語(yǔ)法,這種語(yǔ)法對(duì)編程語(yǔ)言的功能并沒(méi)有影響。實(shí)現(xiàn)相同的功能,基于語(yǔ)法糖寫出來(lái)的代碼往往更簡(jiǎn)單簡(jiǎn)潔且更易閱讀。
Java虛擬機(jī)不能夠識(shí)別Java的語(yǔ)法糖,必須相同Java的編譯器進(jìn)行解糖之后才能被Java虛擬機(jī)識(shí)別。
- 常見的語(yǔ)法糖有哪些?
泛型,自動(dòng)裝箱,自動(dòng)拆箱,變長(zhǎng)參數(shù),枚舉,內(nèi)部類,增強(qiáng)for循環(huán)等等。
根據(jù)javaguide總結(jié)
https://javaguide.cn/home.html