背景
在實(shí)際開(kāi)發(fā)中,數(shù)據(jù)的處理有五種:獲取、傳輸、存儲(chǔ)、分析、轉(zhuǎn)換。每種各對(duì)應(yīng)一些常用的技術(shù)。
序列化和反序列化
序列化是將對(duì)象的信息轉(zhuǎn)換為可傳輸或可存儲(chǔ)形式的過(guò)程。反序列化就是反過(guò)來(lái)讓這些可傳輸?shù)?、可存?chǔ)的信息變回對(duì)象。
傳輸?shù)男蛄谢税踩缘目紤],因?yàn)樯婕暗胶偷谌酵ㄐ?,所以還有重要的一點(diǎn)是可讀性和不變性。而存儲(chǔ)的鏈路短,可控,所以更講究效率。
傳輸最常用的序列化手段是JSON這樣人眼可讀的。而存儲(chǔ)會(huì)使用protostuff這種將key值映射成編碼來(lái)傳輸?shù)摹R驗(yàn)?,2,3比one、two、four更省空間更高效。但是傳輸中都用編碼,解析時(shí)就很難判斷它的意義。雙方還要進(jìn)行額外的約定。本來(lái)3代表four,中間加了一個(gè)three,3代表three的話,對(duì)方?jīng)]有及時(shí)被通知,那么解析傳輸過(guò)來(lái)的消息就是錯(cuò)的。
反射
Java反射是在運(yùn)行時(shí),對(duì)于任何一個(gè)類(lèi),都可以知道這個(gè)類(lèi)有哪些方法和屬性。對(duì)于任何一個(gè)對(duì)象,都能對(duì)它的方法和屬性進(jìn)行調(diào)用。
常用數(shù)據(jù)轉(zhuǎn)換工具,比如Spring的RequestParam、RequestBody、ResponseBody內(nèi)部就用了反射機(jī)制。還有Jackson等工具類(lèi)。甚至在業(yè)務(wù)代碼中直接使用反射也是很常見(jiàn)的。比如設(shè)計(jì)一個(gè)AI助手問(wèn)答機(jī)。想實(shí)現(xiàn):
小A:我要搜索美女"冰冰"AI助手:OK,搜索"冰冰"小A:想知道她的"年齡"AI助手:21歲
上面這個(gè)JAVA實(shí)現(xiàn)是這樣的:
Field field = 美女.class.getDeclaredField(年齡);field.setAccessible(true);return field.get(冰冰).toString();
動(dòng)態(tài)代理
代理模式是為了提供增強(qiáng)的或不同的操作,而插入來(lái)替代實(shí)際對(duì)象的對(duì)象。這些操作涉及到與實(shí)際對(duì)象的通信,所以稱(chēng)為代理。
Spring主要的兩大思想IoC和AOP。對(duì)于IoC,利用的是反射機(jī)制。而AOP使用了動(dòng)態(tài)代理,當(dāng)然底層也是反射。
JDK動(dòng)態(tài)代理只能給有接口的類(lèi)代理。本質(zhì)是通過(guò)反射獲取要執(zhí)行的方法,并在執(zhí)行前或者后加入一些代理處理操作。cglib本質(zhì)上用繼承的方法實(shí)現(xiàn)的,是通過(guò)動(dòng)態(tài)生成一個(gè)子類(lèi)去覆蓋所要代理的類(lèi)。用final修飾的不能被覆蓋的就不代理了。spring動(dòng)態(tài)代理是優(yōu)先使用JDK動(dòng)態(tài)代理,如果目標(biāo)沒(méi)有實(shí)現(xiàn)任何接口,則創(chuàng)建一個(gè)cglib代理。如果幾個(gè)類(lèi)實(shí)現(xiàn)了都實(shí)現(xiàn)了一個(gè)通用接口,比如Runnable,并且加了Component請(qǐng)spring來(lái)負(fù)責(zé)其生命周期。這時(shí)候會(huì)拋出一個(gè)Proxy代理異常。說(shuō)期望加載一個(gè)Bean,實(shí)際上實(shí)現(xiàn)卻不只一個(gè)。這時(shí)候可以在這個(gè)類(lèi)上加下面標(biāo)簽強(qiáng)制使用cglib代理來(lái)解決。
@EnableAspectJAutoProxy(proxyTargetClass = true)
總結(jié)
我工作十幾年來(lái),查找和排序算法一直被奉為經(jīng)典。而這兩項(xiàng)就是搜索技術(shù)的核心。大數(shù)據(jù)是建立在搜索技術(shù)基礎(chǔ)上的。AI又是建立在大數(shù)據(jù)基礎(chǔ)上的。可見(jiàn)查找和排序的核心地位??此聘呱畹募夹g(shù)也是從最底層開(kāi)始??嗑毣竟?。
|轉(zhuǎn)載請(qǐng)注明來(lái)源地址:蜘蛛池出租 http://www.wholesalehouseflipping.com/專(zhuān)注于SEO培訓(xùn),快速排名黑帽SEO https://www.heimao.wiki
