本文由微信開(kāi)發(fā)團(tuán)隊(duì)工程是由“oneliang”原創(chuàng)發(fā)表于WeMobileDev公眾號(hào),內(nèi)容稍有改動(dòng)。
1、引言
Kotlin 是一個(gè)用于現(xiàn)代多平臺(tái)應(yīng)用的靜態(tài)編程語(yǔ)言,由 JetBrains 開(kāi)發(fā)(也就是開(kāi)發(fā)了號(hào)稱Java界最智能的集成開(kāi)發(fā)工具IntelliJ IDEA的公司)。Kotlin可以編譯成Java字節(jié)碼(就像Groovy和Scala一樣),也可以編譯成JavaScript,方便在沒(méi)有JVM的設(shè)備上運(yùn)行。Kotlin已于2017年的Google I/O開(kāi)發(fā)者大會(huì)上正式被宣布為Android官方支持開(kāi)發(fā)語(yǔ)言(見(jiàn)《[資訊] Kotlin成為Android官方開(kāi)發(fā)語(yǔ)言!》)。
有人說(shuō)Kolin對(duì)于Android的作用,是不是Swift對(duì)于iOS的作用一樣(主要用于降低Objective-C開(kāi)發(fā)門(mén)檻等)。實(shí)際上,Kotlin對(duì)于Android的意義和重要性要遠(yuǎn)大于Swift對(duì)于iOS,因?yàn)椴还苁荗bjective-C還是Swift,它們至少都是蘋(píng)果自已的東西,而悲劇的是Java并不屬于Google。鑒于Google和Oracle(Java的創(chuàng)造者SUN公司早就被Oracle收購(gòu)了)的官司(見(jiàn)《[資訊] Java侵權(quán)案逆轉(zhuǎn):Google需賠88億!》),如何解決掉Java這個(gè)如鯁在喉的歷史遺留,是Android決策者早就在考慮的問(wèn)題,只是恰好選中了Kotlin而已。
Google官方已在各種場(chǎng)合直接或間接地表明了對(duì)于Kotlin和Java的態(tài)度——那就是Kotlin是 “Over” Java的(即可以理解為Kotlin在ANdroid中的定位是高于Java的)。所以,不管Android開(kāi)發(fā)者有沒(méi)有做好準(zhǔn)備,或者還在糾結(jié)要不要學(xué)習(xí)Kotlin時(shí),都不影響Kotlin在Android中的定位和越來(lái)越明確的地位。但無(wú)論如何,對(duì)于Android開(kāi)發(fā)者來(lái)說(shuō),多學(xué)一門(mén)技術(shù)確實(shí)很痛苦,但提前做好準(zhǔn)備是更明智之選,至少到了Kotlin真的取代Java的那一天,而不至于后懂準(zhǔn)備地太晚。
作為移動(dòng)端即時(shí)通訊IM應(yīng)用的王者——微信,為了始終保持技術(shù)的領(lǐng)先性,無(wú)論日后Kotlin在微信客戶中的重要性幾何,技術(shù)團(tuán)隊(duì)做好技術(shù)儲(chǔ)備和預(yù)研實(shí)踐是肯定有必要的,于是便有了本文的整理和分享,希望業(yè)界共同學(xué)習(xí)、互相交流。
(本文同步發(fā)布于:http://www.52im.net/thread-2066-1-1.html)
2、概述
微信訂閱號(hào)助手的Android App項(xiàng)目首次嘗試使用Kotlin進(jìn)行大規(guī)模的業(yè)務(wù)開(kāi)發(fā)(483個(gè)Kt文件,3.8W行不包含空行的Kt代碼),一開(kāi)始接觸Kotlin的時(shí)候難免會(huì)有點(diǎn)不適應(yīng),但經(jīng)過(guò)幾天的強(qiáng)制使用后,慢慢有些感覺(jué),項(xiàng)目落地后回顧了一下,發(fā)現(xiàn)Kotlin確實(shí)是有它獨(dú)特的風(fēng)味。
什么是微信訂閱號(hào)助手?
微信公眾平臺(tái)“訂閱號(hào)助手”APP已正式上架App Store,通過(guò)這款訂閱號(hào)助手APP,公眾號(hào)運(yùn)營(yíng)者可以快捷地編輯和發(fā)表內(nèi)容、方便地處理留言和回復(fù)粉絲消息。
訂閱號(hào)助手app能將你的iPhone變成一個(gè)隨身的公眾號(hào)“工作室”,無(wú)論身處何地,你都可以發(fā)表內(nèi)容、與讀者互動(dòng)。訂閱號(hào)助手app簡(jiǎn)潔的編輯工具讓每個(gè)人輕松變身為作者,留住即刻的靈感,盡享內(nèi)容創(chuàng)作的樂(lè)趣。訂閱號(hào)助手app讓每個(gè)有才華的個(gè)體都有機(jī)會(huì)被關(guān)注,都有自己的品牌。
3、“烹飪”準(zhǔn)備
食材:
1)Android,主要食材(指Framework、Api等);
2)Kotlin,食用安全、味鮮(擴(kuò)展函數(shù))、香(重載)、甜(富含糖份Lambda),第二主要食材,切好塊狀;
3)Java,少量,Kotlin這種食材需要它來(lái)做引子。
鍋:
AndroidStudio、Eclipse這兩個(gè)牌子的鍋質(zhì)量都不錯(cuò)。
調(diào)味料:
Kotlin Android Extension、Android KTX、AndroidX、Anko等。
如果沒(méi)有上述這些材料請(qǐng)移步到如下網(wǎng)址"購(gòu)買":
https://developers.google.com/android
https://kotlinlang.org/docs/reference
https://www.oracle.com/java
4、“烹飪”過(guò)程
1)開(kāi)火,放少量食用油;
2)先把Android倒進(jìn)去,伴兩下;
3)倒少量Java,主要是"字節(jié)碼"和"工具部分",再伴兩下;
4)把切好塊的Kotlin一塊塊慢慢平鋪在Android上面,把Android蓋??;
5)慢火煮3-5分鐘,觀察一下這個(gè)過(guò)程:
Kotlin把Android的味道慢慢釋放出來(lái),比Android + Java更香;
Kotlin與Java融為一體 (前提是少量Java,如果Java放得太多,香味會(huì)受影響,粘合不夠好,容易松散(NPE));
6)關(guān)火,燜一會(huì)。
5、開(kāi)鍋,上菜
色香味倶全,敬請(qǐng)盡情享受這番獨(dú)特的風(fēng)味。
5.1 特色風(fēng)味一:食用安全
食用安全,Nullable or NotNul從源頭抓起。
Kotlin代碼安全性更強(qiáng):
varoutput: String
output = null// Compilation error
val name: String? = null// Nullable type
println(name.length()) // Compilation error
食用安全從從源頭上抓起,只要跟定義不符就編譯不通過(guò),這是Kotlin小而精的一個(gè)優(yōu)點(diǎn),一下子能把整碟"菜"的安全系數(shù)提高,此Code來(lái)自官方文檔。
5.2 特色風(fēng)味二:鮮
擴(kuò)展函數(shù),味道鮮美,百吃不厭。
項(xiàng)目工具類的另一種寫(xiě)法:
fun String.toIntSafely(defaultValue: Int = 0): Int {
returntry{
this.toInt()
} catch(e: Exception) {
defaultValue
}
}
fun main(args: Array<String>) {
println("1".toIntSafely())
}
String 轉(zhuǎn) Int,這種需求幾乎很多項(xiàng)目都是需要,像上述Kotlin如果是在Java里面描述的話,估計(jì)會(huì)寫(xiě)成這樣:
public final class StringUtil{
private StringUtil() {}
public static int stringToInt(String string, int defaultValue) {
//省略
}
}
使用時(shí):
StringUtil.stringToInt("1", 0);
大家看到這里可能會(huì)覺(jué)得沒(méi)什么,大家都是工具類,用的時(shí)候有些小差別而已。
但正因?yàn)檫@些小差別,優(yōu)點(diǎn)就體現(xiàn)出來(lái)了,確實(shí)是鮮美:
1)不需要記住工具類的名字和方法的名字:假如你是一個(gè)剛接手項(xiàng)目的新人,正準(zhǔn)備做一個(gè)需求開(kāi)發(fā),突然需要這種String to Int的工具,但是不知道工具在哪,這就好比你去到一個(gè)陌生人的家里,想找個(gè)螺絲刀擰個(gè)松掉的螺絲一樣,這“螺絲刀”在哪?除了問(wèn)“主人”之外,要么就是“翻柜子”,這不就顯得效率低么?使用Kotlin的擴(kuò)展函數(shù)就能有效避免前面所說(shuō)的問(wèn)題,接手項(xiàng)目的新人只需要輕輕的“.”一下,滾兩下鼠標(biāo),"toIntSafely"的方法就會(huì)看到。這就為什么你看Kotlin的Java擴(kuò)展庫(kù)很多都是通過(guò)擴(kuò)展函數(shù)來(lái)封裝;
2)方法的類歸屬更好理解:以上述的"toIntSafely"為例,String.toIntSafely,使得開(kāi)發(fā)者更容易直觀感受到這個(gè)函數(shù)是用于String,不像StringUtil.stringToInt沒(méi)有歸屬可言,純粹就是一個(gè)工具函數(shù),不如Kotlin的寫(xiě)法容易理解;
3)對(duì)定義函數(shù)者的要求高了:正因體現(xiàn)了函數(shù)的類歸屬,也就使得開(kāi)發(fā)者在定義函數(shù)的時(shí)候需要考慮歸屬給哪個(gè)類還是頂層函數(shù)這些問(wèn)題,歸屬的范圍少了,會(huì)導(dǎo)致不好用,范圍廣了又怕暴露導(dǎo)致濫用或者誤用。
5.3 特色風(fēng)味三:香
重載(Overload),回味無(wú)窮。
雖然這個(gè)概念在面向?qū)ο箢I(lǐng)域用得很多,但Kotlin這個(gè)重載的味道真是令我們吃上癮。
重載在工具類的場(chǎng)景用得非常多,一個(gè)項(xiàng)目下來(lái)沒(méi)工具類也是不可能。
例如我們?cè)陧?xiàng)目中會(huì)封裝一些對(duì)話框(Dialog)工具類供開(kāi)發(fā)的同學(xué)一句調(diào)用:
1)開(kāi)發(fā)的同學(xué)需要在界面顯示一個(gè)Dialog,只想改變Dialog的內(nèi)容,那么Java里面就有showDialog(String message)的寫(xiě)法;
2)開(kāi)發(fā)的同學(xué)需要在界面顯示一個(gè)Dialog,即想改變Dialog的標(biāo)題,又想改變Dialog的內(nèi)容,那么Java里面就有showDialog(String title, String message)的寫(xiě)法;
3)開(kāi)發(fā)的同學(xué)想改變Dialog里面Icon的....
4)開(kāi)發(fā)的同學(xué)想......
這些場(chǎng)景估計(jì)做Android開(kāi)發(fā)的同學(xué)都會(huì)碰到,其實(shí)不限于Android,Java開(kāi)發(fā)的同學(xué)也經(jīng)常遇到。
我們看看Kotlin是怎樣把這些需求收攏:
fun showDialog(title: String = "標(biāo)題", message: String = "內(nèi)容") {
//TODO
}
這個(gè)寫(xiě)法一下子滿足 2的2次方(4) 種重載方法:
showDialog()
showDialog("新標(biāo)題")
showDialog(message = "新內(nèi)容")
showDialog("新標(biāo)題", "新內(nèi)容")
這種重載方式有效地減少我們項(xiàng)目中的重載方法數(shù)量,使得我們項(xiàng)目開(kāi)發(fā)更簡(jiǎn)潔和更有效率 ,自然就回味無(wú)窮。
5.4 特色風(fēng)味四:甜而不膩
帶了糖,甜而不膩。
Kotlin里面Function與Lambda既可相互理解,又有其味道(寫(xiě)法)上的一些差異。
味道 (結(jié)果) 一樣,但味道消去的過(guò)程 (用法) 有差別。
Function(函數(shù))常用寫(xiě)法:
fun f(x: Int): Any {
returnAny()
}
用法:
val y = f(1)
Function(函數(shù))的一種Lambda寫(xiě)法:
fun f() = { x: Int -> Any() } 等價(jià)于 fun f(): (Int) -> Any = { x: Int -> Any() }
用法:
val y = f()(1) 或 val y = f().invoke(1)
Lambda寫(xiě)法:
val f = { x: Int -> Any() } 等價(jià)于 val f: (Int) -> Any = { x: Int -> Any }
用法:
val y = f(1) 或 val y = f.invoke(1)
細(xì)節(jié)點(diǎn):Function時(shí),有"="跟沒(méi)有"="意義不一樣,有"="的時(shí)候可以理解右邊( { x: Int -> Any() } )是 左邊函數(shù)返回類型((Int) -> Any) 的實(shí)現(xiàn)。
函數(shù)不用置疑,項(xiàng)目里面必備。
Lambda:
Lambda,語(yǔ)法糖,這是怎樣的一種成份?
Lambda是長(zhǎng)這樣的:
val block: () -> Unit = {}
val sum: (Int, Int) -> Int = { p1, p2 -> p1 + p2 }
Lambda令我們的項(xiàng)目減少了很多接口類,尤其是回調(diào)接口,我們項(xiàng)目幾乎沒(méi)有。一般的業(yè)務(wù)場(chǎng)景里面回調(diào)接口都會(huì)用得不少,Lambda能有效減少這種Callback接口的定義,少寫(xiě)不少接口類,事半功倍。
另lambda里面不能寫(xiě)return,最后一行的值就是返回值。
從數(shù)學(xué)函數(shù)角度抽象理解:
函數(shù): y = f(x)
〉假設(shè)x與y都是Int類型
可以理解為 Kotlin 函數(shù):
fun f(x: Int): Int {
return1 // 這里的返回值就是對(duì)應(yīng)y
}
也可以理解為 Lambda:
val f = { x: Int -> 1 } 等價(jià)于 val f: (Int) -> Int = { x: Int -> 1 }
使用時(shí)f(1),但是如果像上述那種f(x)的kotlin函數(shù)與f(x)的lambda同時(shí)同名同方法簽名存在,使用上要f(1)與f.invoke(1)來(lái)區(qū)分是函數(shù)調(diào)用還是lambda調(diào)用。
〉假設(shè)x與y都是Lambda類型
x是Lambda類型 (Int) -> Int ,y是Lambda類型 (Int) -> Int,可以換算成:
fun f(x: (Int) -> Int): (Int) -> Int {
return{ it -> x(it) }
}
或這樣:
fun f(x: (Int) -> Int): (Int) -> Int = { it -> x(it) }
使用時(shí):
f { it -> it + 10 }(1) or f { it -> it + 10 }.invoke(1)
或 Lambda:
val f: ((Int) -> Int) -> ((Int) -> Int) = { x -> { it -> x(it) } } // val時(shí)要inline
使用時(shí):
f.invoke { it -> it + 10 }.invoke(1)
通過(guò)上述的 替換 能更好地理解和使用Lambda。
6、如何更好地了解Kotlin這種食材的味道
Kotlin用于Java領(lǐng)域,中間產(chǎn)物毫無(wú)疑問(wèn)還是字節(jié)碼,因此本質(zhì)還是Java的基礎(chǔ)知識(shí),反編譯Kotlin生成的字節(jié)碼是學(xué)習(xí)Kotlin一種較好的方式,可利用AndroidStudio的Tools來(lái)反編譯kt,能幫助快速理解Kotlin。
謝謝品嘗這份美味,希望Kotlin這款食材能帶給各位讀者不少Android上的特色的風(fēng)味。
附錄:QQ、微信團(tuán)隊(duì)原創(chuàng)技術(shù)文章
《微信朋友圈千億訪問(wèn)量背后的技術(shù)挑戰(zhàn)和實(shí)踐總結(jié)》
《騰訊技術(shù)分享:騰訊是如何大幅降低帶寬和網(wǎng)絡(luò)流量的(圖片壓縮篇)》
《騰訊技術(shù)分享:騰訊是如何大幅降低帶寬和網(wǎng)絡(luò)流量的(音視頻技術(shù)篇)》
《微信團(tuán)隊(duì)分享:微信移動(dòng)端的全文檢索多音字問(wèn)題解決方案》
《騰訊技術(shù)分享:Android版手機(jī)QQ的緩存監(jiān)控與優(yōu)化實(shí)踐》
《微信團(tuán)隊(duì)分享:iOS版微信的高性能通用key-value組件技術(shù)實(shí)踐》
《微信團(tuán)隊(duì)分享:iOS版微信是如何防止特殊字符導(dǎo)致的炸群、APP崩潰的?》
《騰訊技術(shù)分享:Android手Q的線程死鎖監(jiān)控系統(tǒng)技術(shù)實(shí)踐》
《微信團(tuán)隊(duì)原創(chuàng)分享:iOS版微信的內(nèi)存監(jiān)控系統(tǒng)技術(shù)實(shí)踐》
《讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術(shù)實(shí)踐分享》
《iOS后臺(tái)喚醒實(shí)戰(zhàn):微信收款到賬語(yǔ)音提醒技術(shù)總結(jié)》
《騰訊技術(shù)分享:社交網(wǎng)絡(luò)圖片的帶寬壓縮技術(shù)演進(jìn)之路》
《微信團(tuán)隊(duì)分享:視頻圖像的超分辨率技術(shù)原理和應(yīng)用場(chǎng)景》
《微信團(tuán)隊(duì)分享:微信每日億次實(shí)時(shí)音視頻聊天背后的技術(shù)解密》
《QQ音樂(lè)團(tuán)隊(duì)分享:Android中的圖片壓縮技術(shù)詳解(上篇)》
《QQ音樂(lè)團(tuán)隊(duì)分享:Android中的圖片壓縮技術(shù)詳解(下篇)》
《騰訊團(tuán)隊(duì)分享:手機(jī)QQ中的人臉識(shí)別酷炫動(dòng)畫(huà)效果實(shí)現(xiàn)詳解》
《騰訊團(tuán)隊(duì)分享 :一次手Q聊天界面中圖片顯示bug的追蹤過(guò)程分享》
《微信團(tuán)隊(duì)分享:微信Android版小視頻編碼填過(guò)的那些坑》
《微信手機(jī)端的本地?cái)?shù)據(jù)全文檢索優(yōu)化之路》
《企業(yè)微信客戶端中組織架構(gòu)數(shù)據(jù)的同步更新方案優(yōu)化實(shí)戰(zhàn)》
《微信團(tuán)隊(duì)披露:微信界面卡死超級(jí)bug“15。。。。”的來(lái)龍去脈》
《QQ 18年:解密8億月活的QQ后臺(tái)服務(wù)接口隔離技術(shù)》
《月活8.89億的超級(jí)IM微信是如何進(jìn)行Android端兼容測(cè)試的》
《以手機(jī)QQ為例探討移動(dòng)端IM中的“輕應(yīng)用”》
《一篇文章get微信開(kāi)源移動(dòng)端數(shù)據(jù)庫(kù)組件WCDB的一切!》
《微信客戶端團(tuán)隊(duì)負(fù)責(zé)人技術(shù)訪談:如何著手客戶端性能監(jiān)控和優(yōu)化》
《微信后臺(tái)基于時(shí)間序的海量數(shù)據(jù)冷熱分級(jí)架構(gòu)設(shè)計(jì)實(shí)踐》
《微信團(tuán)隊(duì)原創(chuàng)分享:Android版微信的臃腫之困與模塊化實(shí)踐之路》
《微信后臺(tái)團(tuán)隊(duì):微信后臺(tái)異步消息隊(duì)列的優(yōu)化升級(jí)實(shí)踐分享》
《微信團(tuán)隊(duì)原創(chuàng)分享:微信客戶端SQLite數(shù)據(jù)庫(kù)損壞修復(fù)實(shí)踐》
《騰訊原創(chuàng)分享(一):如何大幅提升移動(dòng)網(wǎng)絡(luò)下手機(jī)QQ的圖片傳輸速度和成功率》
《騰訊原創(chuàng)分享(二):如何大幅壓縮移動(dòng)網(wǎng)絡(luò)下APP的流量消耗(下篇)》
《騰訊原創(chuàng)分享(三):如何大幅壓縮移動(dòng)網(wǎng)絡(luò)下APP的流量消耗(上篇)》
《微信Mars:微信內(nèi)部正在使用的網(wǎng)絡(luò)層封裝庫(kù),即將開(kāi)源》
《如約而至:微信自用的移動(dòng)端IM網(wǎng)絡(luò)層跨平臺(tái)組件庫(kù)Mars已正式開(kāi)源》
《開(kāi)源libco庫(kù):?jiǎn)螜C(jī)千萬(wàn)連接、支撐微信8億用戶的后臺(tái)框架基石 [源碼下載]》
《微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解》
《微信團(tuán)隊(duì)原創(chuàng)分享:Android版微信后臺(tái)?;顚?shí)戰(zhàn)分享(進(jìn)程保活篇)》
《微信團(tuán)隊(duì)原創(chuàng)分享:Android版微信后臺(tái)?;顚?shí)戰(zhàn)分享(網(wǎng)絡(luò)保活篇)》
《Android版微信從300KB到30MB的技術(shù)演進(jìn)(PPT講稿) [附件下載]》
《微信團(tuán)隊(duì)原創(chuàng)分享:Android版微信從300KB到30MB的技術(shù)演進(jìn)》
《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)(演講全文)》
《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)(PPT講稿) [附件下載]》
《如何解讀《微信技術(shù)總監(jiān)談架構(gòu):微信之道——大道至簡(jiǎn)》》
《微信海量用戶背后的后臺(tái)系統(tǒng)存儲(chǔ)架構(gòu)(視頻+PPT) [附件下載]》
《微信異步化改造實(shí)踐:8億月活、單機(jī)千萬(wàn)連接背后的后臺(tái)解決方案》
《微信朋友圈海量技術(shù)之道PPT [附件下載]》
《微信對(duì)網(wǎng)絡(luò)影響的技術(shù)試驗(yàn)及分析(論文全文)》
《一份微信后臺(tái)技術(shù)架構(gòu)的總結(jié)性筆記》
《架構(gòu)之道:3個(gè)程序員成就微信朋友圈日均10億發(fā)布量[有視頻]》
《快速裂變:見(jiàn)證微信強(qiáng)大后臺(tái)架構(gòu)從0到1的演進(jìn)歷程(一)》
《快速裂變:見(jiàn)證微信強(qiáng)大后臺(tái)架構(gòu)從0到1的演進(jìn)歷程(二)》
《微信團(tuán)隊(duì)原創(chuàng)分享:Android內(nèi)存泄漏監(jiān)控和優(yōu)化技巧總結(jié)》
《全面總結(jié)iOS版微信升級(jí)iOS9遇到的各種“坑”》
《微信團(tuán)隊(duì)原創(chuàng)資源混淆工具:讓你的APK立減1M》
《微信團(tuán)隊(duì)原創(chuàng)Android資源混淆工具:AndResGuard [有源碼]》
《Android版微信安裝包“減肥”實(shí)戰(zhàn)記錄》
《iOS版微信安裝包“減肥”實(shí)戰(zhàn)記錄》
《移動(dòng)端IM實(shí)踐:iOS版微信界面卡頓監(jiān)測(cè)方案》
《微信“紅包照片”背后的技術(shù)難題》
《移動(dòng)端IM實(shí)踐:iOS版微信小視頻功能技術(shù)方案實(shí)錄》
《移動(dòng)端IM實(shí)踐:Android版微信如何大幅提升交互性能(一)》
《移動(dòng)端IM實(shí)踐:Android版微信如何大幅提升交互性能(二)》
《移動(dòng)端IM實(shí)踐:實(shí)現(xiàn)Android版微信的智能心跳機(jī)制》
《移動(dòng)端IM實(shí)踐:WhatsApp、Line、微信的心跳策略分析》
《移動(dòng)端IM實(shí)踐:谷歌消息推送服務(wù)(GCM)研究(來(lái)自微信)》
《移動(dòng)端IM實(shí)踐:iOS版微信的多設(shè)備字體適配方案探討》
《信鴿團(tuán)隊(duì)原創(chuàng):一起走過(guò) iOS10 上消息推送(APNS)的坑》
《騰訊信鴿技術(shù)分享:百億級(jí)實(shí)時(shí)消息推送的實(shí)戰(zhàn)經(jīng)驗(yàn)》
《IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(上篇)》
《IPv6技術(shù)詳解:基本概念、應(yīng)用現(xiàn)狀、技術(shù)實(shí)踐(下篇)》
《騰訊TEG團(tuán)隊(duì)原創(chuàng):基于MySQL的分布式數(shù)據(jù)庫(kù)TDSQL十年鍛造經(jīng)驗(yàn)分享》
《微信多媒體團(tuán)隊(duì)訪談:音視頻開(kāi)發(fā)的學(xué)習(xí)、微信的音視頻技術(shù)和挑戰(zhàn)等》
《了解iOS消息推送一文就夠:史上最全iOS Push技術(shù)詳解》
《騰訊技術(shù)分享:微信小程序音視頻技術(shù)背后的故事》
《騰訊資深架構(gòu)師干貨總結(jié):一文讀懂大型分布式系統(tǒng)設(shè)計(jì)的方方面面》
《微信多媒體團(tuán)隊(duì)梁俊斌訪談:聊一聊我所了解的音視頻技術(shù)》
《騰訊音視頻實(shí)驗(yàn)室:使用AI黑科技實(shí)現(xiàn)超低碼率的高清實(shí)時(shí)視頻聊天》
《騰訊技術(shù)分享:微信小程序音視頻與WebRTC互通的技術(shù)思路和實(shí)踐》
《手把手教你讀取Android版微信和手Q的聊天記錄(僅作技術(shù)研究學(xué)習(xí))》
《微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(算法原理篇)》
《微信技術(shù)分享:微信的海量IM聊天消息序列號(hào)生成實(shí)踐(容災(zāi)方案篇)》
《騰訊技術(shù)分享:GIF動(dòng)圖技術(shù)詳解及手機(jī)QQ動(dòng)態(tài)表情壓縮技術(shù)實(shí)踐》
《微信團(tuán)隊(duì)分享:Kotlin漸被認(rèn)可,Android版微信的技術(shù)嘗鮮之旅》
>> 更多同類文章 ……
(本文同步發(fā)布于:http://www.52im.net/thread-2066-1-1.html)