據(jù)處理的常用技術(shù))
背景在實(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ù)?。因?yàn)?23比one、two、four更省空間更高效。但是傳輸中都用編碼解析時(shí)就很難判斷它的意義。雙方還要進(jìn)行額外的約定。本來(lái)3代表four中間加了一個(gè)three3代表three的話對(duì)方?jīng)]有及時(shí)被通知那么解析傳輸過(guò)來(lái)的消息就是錯(cuò)的。反射Java反射是在運(yùn)行時(shí)對(duì)于任何一個(gè)類都可以知道這個(gè)類有哪些方法和屬性。對(duì)于任何一個(gè)對(duì)象都能對(duì)它的方法和屬性進(jìn)行調(diào)用。常用數(shù)據(jù)轉(zhuǎn)換工具比如Spring的RequestParam、RequestBody、ResponseBody內(nèi)部就用了反射機(jī)制。還有Jackson等工具類。甚至在業(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ì)象的通信所以稱為代理。Spring主要的兩大思想IoC和AOP。對(duì)于IoC利用的是反射機(jī)制。而AOP使用了動(dòng)態(tài)代理當(dāng)然底層也是反射。JDK動(dòng)態(tài)代理只能給有接口的類代理。本質(zhì)是通過(guò)反射獲取要執(zhí)行的方法并在執(zhí)行前或者后加入一些代理處理操作。cglib本質(zhì)上用繼承的方法實(shí)現(xiàn)的是通過(guò)動(dòng)態(tài)生成一個(gè)子類去覆蓋所要代理的類。用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è)類實(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è)類上加下面標(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)始。苦練基本功。有想進(jìn)「編程一生」用戶交流群的朋友嗎