日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

阿里一面:如何將重復(fù)性比較高的 String 類型的地址信息從 20GB 降到幾百兆?

來源: 責(zé)編: 時(shí)間:2024-04-15 18:17:16 264觀看
導(dǎo)讀這次應(yīng)該是互聯(lián)網(wǎng)及軟件行業(yè)的第三次寒潮,大家在寒潮中一定要繼續(xù)保持學(xué)習(xí),寒潮挺過去以后還是會(huì)迎來新的發(fā)展機(jī)遇。有粉絲去阿里面試,跟碼哥分享了其中一題面試問題「如何將重復(fù)性比較高的 String 類型的地址信息從 20G

這次應(yīng)該是互聯(lián)網(wǎng)及軟件行業(yè)的第三次寒潮,大家在寒潮中一定要繼續(xù)保持學(xué)習(xí),寒潮挺過去以后還是會(huì)迎來新的發(fā)展機(jī)遇。
4aF28資訊網(wǎng)——每日最新資訊28at.com

有粉絲去阿里面試,跟碼哥分享了其中一題面試問題「如何將重復(fù)性比較高的 String 類型的地址信息從 20GB 降到幾百兆?」。4aF28資訊網(wǎng)——每日最新資訊28at.com

今天,碼哥從多個(gè)角度帶你完全攻克這個(gè)知識(shí)點(diǎn),讓面試官眼前一亮。4aF28資訊網(wǎng)——每日最新資訊28at.com

切入正文......4aF28資訊網(wǎng)——每日最新資訊28at.com

莫慌,今天給大家見識(shí)一下不一樣的 String,從根上拿捏直達(dá) G 點(diǎn)。4aF28資訊網(wǎng)——每日最新資訊28at.com

并且碼哥分享一個(gè)例子:通過性能調(diào)優(yōu)我們能實(shí)現(xiàn)百兆內(nèi)存輕松存儲(chǔ)幾十 G 數(shù)據(jù)。4aF28資訊網(wǎng)——每日最新資訊28at.com

String對(duì)象是我們每天都「摸」的對(duì)象類型,但是她的性能問題我們卻總是忽略。4aF28資訊網(wǎng)——每日最新資訊28at.com

愛她,不能只會(huì)簡(jiǎn)單一起玩耍,要深入了解String 的內(nèi)心深處,做一個(gè)「心有猛虎,細(xì)嗅薔薇」的暖男。4aF28資訊網(wǎng)——每日最新資訊28at.com

通過以下幾點(diǎn)分析,我們一步步揭開她的衣裳,直達(dá)內(nèi)心深處,提升一個(gè) Level,讓 String 直接起飛。4aF28資訊網(wǎng)——每日最新資訊28at.com

String 身體解密

想要深入了解,就先從基本組成開始……4aF28資訊網(wǎng)——每日最新資訊28at.com

「String 締造者」對(duì) String 對(duì)象做了大量?jī)?yōu)化來節(jié)省內(nèi)存,從而提升 String 的性能:4aF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4aF28資訊網(wǎng)——每日最新資訊28at.com

Java 6 及之前

數(shù)據(jù)存儲(chǔ)在 char[]數(shù)組中,String通過 offset 和 count兩個(gè)屬性定位 char[] 數(shù)據(jù)獲取字符串。4aF28資訊網(wǎng)——每日最新資訊28at.com

這樣可以高效快速的定位并共享數(shù)組對(duì)象,并且節(jié)省內(nèi)存,但是有可能導(dǎo)致內(nèi)存泄漏。4aF28資訊網(wǎng)——每日最新資訊28at.com

共享 char 數(shù)組為啥可能會(huì)導(dǎo)致內(nèi)存泄漏呢?4aF28資訊網(wǎng)——每日最新資訊28at.com

String(int offset, int count, char value[]) {    this.value = value;    this.offset = offset;    this.count = count;}public String substring(int beginIndex, int endIndex) {    //check boundary    return  new String(offset + beginIndex, endIndex - beginIndex, value);}

調(diào)用 substring() 的時(shí)候雖然創(chuàng)建了新的字符串,但字符串的值 value 仍然指向的是內(nèi)存中的同一個(gè)數(shù)組,如下圖所示:4aF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4aF28資訊網(wǎng)——每日最新資訊28at.com

如果我們僅僅是用 substring 獲取一小段字符,而原始 string字符串非常大的情況下,substring 的對(duì)象如果一直被引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

此時(shí) String 字符串也無法回收,從而導(dǎo)致內(nèi)存泄露。4aF28資訊網(wǎng)——每日最新資訊28at.com

如果有大量這種通過 substring 獲取超大字符串中一小段字符串的操作,會(huì)因?yàn)閮?nèi)存泄露而導(dǎo)致內(nèi)存溢出。4aF28資訊網(wǎng)——每日最新資訊28at.com

JDK7、8

去掉了 offset 和 count兩個(gè)變量,減少了 String 對(duì)象占用的內(nèi)存。4aF28資訊網(wǎng)——每日最新資訊28at.com

substring 源碼:4aF28資訊網(wǎng)——每日最新資訊28at.com

public String(char value[], int offset, int count) {    this.value = Arrays.copyOfRange(value, offset, offset + count);}public String substring(int beginIndex, int endIndex) {    int subLen = endIndex - beginIndex;    return new String(value, beginIndex, subLen);}

substring() 通過 new String() 返回了一個(gè)新的字符串對(duì)象,在創(chuàng)建新的對(duì)象時(shí)通過 Arrays.copyOfRange() 深度拷貝了一個(gè)新的字符數(shù)組。4aF28資訊網(wǎng)——每日最新資訊28at.com

如下圖所示:4aF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4aF28資訊網(wǎng)——每日最新資訊28at.com

String.substring 方法不再共享 char[]數(shù)組的數(shù)據(jù),解決了可能內(nèi)存泄漏的問題。4aF28資訊網(wǎng)——每日最新資訊28at.com

Java 9

將 char[]字段改為 byte[],新增 coder屬性。4aF28資訊網(wǎng)——每日最新資訊28at.com

碼哥,為什么這么改呢?4aF28資訊網(wǎng)——每日最新資訊28at.com

一個(gè) char 字符占 2 個(gè)字節(jié),16 位。存儲(chǔ)單字節(jié)編碼內(nèi)的字符(占一個(gè)字節(jié)的字符)就顯得非常浪費(fèi)。4aF28資訊網(wǎng)——每日最新資訊28at.com

為了節(jié)約內(nèi)存空間,于是使用了 1 個(gè)字節(jié)占 8 位的 byte 數(shù)組來存放字符串。4aF28資訊網(wǎng)——每日最新資訊28at.com

勤儉節(jié)約的女神,誰不愛……4aF28資訊網(wǎng)——每日最新資訊28at.com

新屬性 coder 的作用是:在計(jì)算字符串長(zhǎng)度或者使用 indexOf()方法時(shí),我們需要根據(jù)編碼類型來計(jì)算字符串長(zhǎng)度。4aF28資訊網(wǎng)——每日最新資訊28at.com

coder 的值分別表示不同編碼類型:4aF28資訊網(wǎng)——每日最新資訊28at.com

  • 0:表示使用 Latin-1 (單字節(jié)編碼);
  • 1:使用UTF-16。

String 的不可變性

了解了String 的基本組成之后,發(fā)現(xiàn) String 還有一個(gè)比外在更性感的特性,她被 final關(guān)鍵字修飾,char 數(shù)組也是。4aF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4aF28資訊網(wǎng)——每日最新資訊28at.com

我們知道類被 final 修飾代表該類不可繼承,而 char[]被 final+private 修飾,代表了 String 對(duì)象不可被更改。4aF28資訊網(wǎng)——每日最新資訊28at.com

String 對(duì)象一旦創(chuàng)建成功,就不能再對(duì)它進(jìn)行改變。4aF28資訊網(wǎng)——每日最新資訊28at.com

Chaya:“String class 對(duì)象使用 final 修飾有什么好處?”4aF28資訊網(wǎng)——每日最新資訊28at.com

安全性4aF28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)你在調(diào)用其他方法時(shí),比如調(diào)用一些系統(tǒng)級(jí)操作指令之前,可能會(huì)有一系列校驗(yàn)。4aF28資訊網(wǎng)——每日最新資訊28at.com

如果是可變類的話,可能在你校驗(yàn)過后,它的內(nèi)部的值又被改變了,這樣有可能會(huì)引起嚴(yán)重的系統(tǒng)崩潰問題。4aF28資訊網(wǎng)——每日最新資訊28at.com

高性能緩存4aF28資訊網(wǎng)——每日最新資訊28at.com

String不可變之后就能保證 hash值得唯一性,使得類似 HashMap容器才能實(shí)現(xiàn)相應(yīng)的 key-value 緩存功能。4aF28資訊網(wǎng)——每日最新資訊28at.com

實(shí)現(xiàn)字符串常量池4aF28資訊網(wǎng)——每日最新資訊28at.com

由于不可變,才得以實(shí)現(xiàn)字符串常量池。4aF28資訊網(wǎng)——每日最新資訊28at.com

字符串常量池指的是在創(chuàng)建字符串的時(shí)候,先去「常量池」查找是否創(chuàng)建過該「字符串」;4aF28資訊網(wǎng)——每日最新資訊28at.com

如果有,則不會(huì)開辟新空間創(chuàng)建字符串,而是直接把常量池中該字符串的引用返回給此對(duì)象。4aF28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建字符串的兩種方式:4aF28資訊網(wǎng)——每日最新資訊28at.com

  • String str1 = “碼哥字節(jié)”;
  • String str2 = new String(“碼哥字節(jié)”);

當(dāng)代碼中使用第一種方式創(chuàng)建字符串對(duì)象時(shí),JVM 首先會(huì)檢查該對(duì)象是否在字符串常量池中,如果在,就返回該對(duì)象引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

否則新的字符串將在常量池中被創(chuàng)建,并返回該引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

這樣可以減少同一個(gè)值的字符串對(duì)象的重復(fù)創(chuàng)建,節(jié)約內(nèi)存。4aF28資訊網(wǎng)——每日最新資訊28at.com

第二種方式創(chuàng)建,在編譯類文件時(shí),"碼哥字節(jié)" 字符串將會(huì)放入到常量結(jié)構(gòu)中,在類加載時(shí),“碼哥字節(jié)" 將會(huì)在常量池中創(chuàng)建;4aF28資訊網(wǎng)——每日最新資訊28at.com

在調(diào)用 new 時(shí),JVM 命令將會(huì)調(diào)用 String 的構(gòu)造函數(shù),在堆內(nèi)存中創(chuàng)建一個(gè) String 對(duì)象,同時(shí)該對(duì)象指向「常量池」中的“碼哥字節(jié)”字符串,str 指向剛剛在堆上創(chuàng)建的 String 對(duì)象;4aF28資訊網(wǎng)——每日最新資訊28at.com

如下圖:4aF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4aF28資訊網(wǎng)——每日最新資訊28at.com

什么是對(duì)象和對(duì)象引用呀?4aF28資訊網(wǎng)——每日最新資訊28at.com

str 屬于方法棧的字面量,它指向堆中的 String 對(duì)象,并不是對(duì)象本。4aF28資訊網(wǎng)——每日最新資訊28at.com

對(duì)象在內(nèi)存中是一塊內(nèi)存地址,str 則是指向這個(gè)內(nèi)存地址的引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

也就是說 str 并不是對(duì)象,而只是一個(gè)對(duì)象引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

碼哥,字符串的不可變到底指的是什么呀?4aF28資訊網(wǎng)——每日最新資訊28at.com

String str = "Java";str = "Java,yyds"

第一次賦值 「Java」,第二次賦值「Java,yyds」,str 值確實(shí)改變了,為什么我還說 String 對(duì)象不可變呢?4aF28資訊網(wǎng)——每日最新資訊28at.com

這是因?yàn)?str 只是 String 對(duì)象的引用,并不是對(duì)象本身。4aF28資訊網(wǎng)——每日最新資訊28at.com

真正的對(duì)象依然還在內(nèi)存中,沒有被改變。4aF28資訊網(wǎng)——每日最新資訊28at.com

優(yōu)化實(shí)戰(zhàn)

了解了 String 的對(duì)象實(shí)現(xiàn)原理和特性,是時(shí)候要深入女神內(nèi)心,結(jié)合實(shí)際場(chǎng)景,如何更上一層樓優(yōu)化 String 對(duì)象的使用。4aF28資訊網(wǎng)——每日最新資訊28at.com

大量字符串拼接對(duì)象如何優(yōu)化

既然 String 對(duì)象是不可變,所以我們?cè)陬l繁拼接字符串的時(shí)候是否意味著創(chuàng)建多個(gè)對(duì)象呢?4aF28資訊網(wǎng)——每日最新資訊28at.com

String str = "癩蛤蟆撩青蛙" + "長(zhǎng)的丑" + "玩的花";

上面你的代碼,你是不是以為先生成「癩蛤蟆撩青蛙」對(duì)象,再生成「癩蛤蟆撩青蛙長(zhǎng)的丑」對(duì)象,最后生成「癩蛤蟆撩青蛙長(zhǎng)得丑玩的花」對(duì)象。4aF28資訊網(wǎng)——每日最新資訊28at.com

實(shí)際運(yùn)行中,只有一個(gè)對(duì)象生成。4aF28資訊網(wǎng)——每日最新資訊28at.com

Chaya:這是為什么呢?4aF28資訊網(wǎng)——每日最新資訊28at.com

雖然代碼寫的丑陋,但是編譯器自動(dòng)優(yōu)化了代碼。再看下面例子:4aF28資訊網(wǎng)——每日最新資訊28at.com

String str = "小青蛙";for(int i=0; i<1000; i++) {     str += i;}

上面的代碼編譯后,你可以看到編譯器同樣對(duì)這段代碼進(jìn)行了優(yōu)化。4aF28資訊網(wǎng)——每日最新資訊28at.com

Java 在進(jìn)行字符串的拼接時(shí),JVM 編譯器會(huì)把上述代碼優(yōu)化,偏向使用 StringBuilder,這樣可以提高程序的效率。優(yōu)化后的代碼如下。4aF28資訊網(wǎng)——每日最新資訊28at.com

String str = "小青蛙";for(int i=0; i<1000; i++) {            str = (new StringBuilder(String.valueOf(str))).append(i).toString();}

即使如此,還是循環(huán)內(nèi)重復(fù)創(chuàng)建 StringBuilder對(duì)象。4aF28資訊網(wǎng)——每日最新資訊28at.com

敲黑板4aF28資訊網(wǎng)——每日最新資訊28at.com

所以做字符串拼接的時(shí)候,我建議你還是要顯示地使用 String Builder 來提升系統(tǒng)性能。4aF28資訊網(wǎng)——每日最新資訊28at.com

如果在多線程編程中,String 對(duì)象的拼接涉及到線程安全,你可以使用 StringBuffer。4aF28資訊網(wǎng)——每日最新資訊28at.com

重復(fù)性高的 String 信息優(yōu)化

重點(diǎn)在于使用運(yùn)用 intern 節(jié)省內(nèi)存。直接看intern() 方法的定義與源碼:4aF28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片4aF28資訊網(wǎng)——每日最新資訊28at.com

intern() 是一個(gè)本地方法,它的定義中說的是,當(dāng)調(diào)用 intern 方法時(shí),如果字符串常量池中已經(jīng)包含此字符串,則直接返回此字符串的引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

否則將此字符串添加到常量池中,并返回字符串的引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

如果不包含此字符串,先將字符串添加到常量池中,再返回此對(duì)象的引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

Chaya:什么情況下適合使用 intern() 方法?4aF28資訊網(wǎng)——每日最新資訊28at.com

Twitter 工程師曾分享過一個(gè) String.intern() 的使用示例,Twitter 每次發(fā)布消息狀態(tài)的時(shí)候,都會(huì)產(chǎn)生一個(gè)地址信息,以當(dāng)時(shí) Twitter 用戶的規(guī)模預(yù)估,服務(wù)器需要 20G 的內(nèi)存來存儲(chǔ)地址信息。4aF28資訊網(wǎng)——每日最新資訊28at.com

public class Location {    private String city;    private String region;    private String countryCode;    private double longitude;    private double latitude;}

考慮到其中有很多用戶在地址信息上是有重合的,比如,國(guó)家、省份、城市等,這時(shí)就可以將這部分信息單獨(dú)列出一個(gè)類,以減少重復(fù),代碼如下:4aF28資訊網(wǎng)——每日最新資訊28at.com

public class SharedLocation {  private String city;  private String region;  private String countryCode;}public class Location {  private SharedLocation sharedLocation;  double longitude;  double latitude;}

通過優(yōu)化,數(shù)據(jù)存儲(chǔ)大小減到了 20G 左右。4aF28資訊網(wǎng)——每日最新資訊28at.com

但對(duì)于內(nèi)存存儲(chǔ)這個(gè)數(shù)據(jù)來說,依然很大,怎么辦呢?4aF28資訊網(wǎng)——每日最新資訊28at.com

Twitter 工程師使用 String.intern() 使重復(fù)性非常高的地址信息存儲(chǔ)大小從 20G 降到幾百兆,從而優(yōu)化了 String 對(duì)象的存儲(chǔ)。4aF28資訊網(wǎng)——每日最新資訊28at.com

核心代碼如下:4aF28資訊網(wǎng)——每日最新資訊28at.com

SharedLocation sharedLocation = new SharedLocation();sharedLocation.setCity(messageInfo.getCity().intern());sharedLocation.setCountryCode(messageInfo.getRegion().intern());sharedLocation.setRegion(messageInfo.getCountryCode().intern());

弄個(gè)簡(jiǎn)單例子方便理解:4aF28資訊網(wǎng)——每日最新資訊28at.com

String a =new String("abc").intern();String b = new String("abc").intern();System.out.print(a==b);

輸出結(jié)果:true。4aF28資訊網(wǎng)——每日最新資訊28at.com

在加載類的時(shí)候會(huì)在常量池中創(chuàng)建一個(gè)字符串對(duì)象,內(nèi)容是「abc」。4aF28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建局部 a 變量時(shí),調(diào)用 new Sting() 會(huì)在堆內(nèi)存中創(chuàng)建一個(gè) String 對(duì)象,String 對(duì)象中的 char 數(shù)組將會(huì)引用常量池中字符串。4aF28資訊網(wǎng)——每日最新資訊28at.com

在調(diào)用 intern 方法之后,會(huì)去常量池中查找是否有等于該字符串對(duì)象的引用,有就返回引用。4aF28資訊網(wǎng)——每日最新資訊28at.com

創(chuàng)建 b 變量時(shí),調(diào)用 new Sting() 會(huì)在堆內(nèi)存中創(chuàng)建一個(gè) String 對(duì)象,String 對(duì)象中的 char 數(shù)組將會(huì)引用常量池中字符串。4aF28資訊網(wǎng)——每日最新資訊28at.com

在調(diào)用 intern 方法之后,會(huì)去常量池中查找是否有等于該字符串對(duì)象的引用,有就返回引用給局部變量。4aF28資訊網(wǎng)——每日最新資訊28at.com

而剛在堆內(nèi)存中的兩個(gè)對(duì)象,由于沒有引用指向它,將會(huì)被垃圾回收。4aF28資訊網(wǎng)——每日最新資訊28at.com

所以 a 和 b 引用的是同一個(gè)對(duì)象。4aF28資訊網(wǎng)——每日最新資訊28at.com

字符串分割優(yōu)化

split() 方法使用了正則表達(dá)式實(shí)現(xiàn)了其強(qiáng)大的分割功能,而正則表達(dá)式的性能是非常不穩(wěn)定的。4aF28資訊網(wǎng)——每日最新資訊28at.com

使用不恰當(dāng)會(huì)引起回溯問題,很可能導(dǎo)致 CPU 居高不下。4aF28資訊網(wǎng)——每日最新資訊28at.com

Java 正則表達(dá)式使用的引擎實(shí)現(xiàn)是 NFA(Non deterministic Finite Automaton,確定型有窮自動(dòng)機(jī))自動(dòng)機(jī),這種正則表達(dá)式引擎在進(jìn)行字符匹配時(shí)會(huì)發(fā)生回溯(backtracking),而一旦發(fā)生回溯,那其消耗的時(shí)間就會(huì)變得很長(zhǎng),有可能是幾分鐘,也有可能是幾個(gè)小時(shí),時(shí)間長(zhǎng)短取決于回溯的次數(shù)和復(fù)雜度。4aF28資訊網(wǎng)——每日最新資訊28at.com

所以我們應(yīng)該慎重使用 split() 方法,我們可以用String.indexOf()方法代替 split() 方法完成字符串的分割。4aF28資訊網(wǎng)——每日最新資訊28at.com

最后,出一個(gè)問題給大家,歡迎在評(píng)論區(qū)留言。4aF28資訊網(wǎng)——每日最新資訊28at.com

通過三種不同的方式創(chuàng)建了三個(gè)對(duì)象,再依次兩兩匹配,每組被匹配的兩個(gè)對(duì)象是否相等?代碼如下:4aF28資訊網(wǎng)——每日最新資訊28at.com

String str1 = "abc";String str2 = new String("abc");String str3 = str2.intern();assertSame(str1 == str2);assertSame(str2 == str3);assertSame(str1 == str3)

博主簡(jiǎn)介

碼哥,9 年互聯(lián)網(wǎng)公司后端工作經(jīng)驗(yàn),InfoQ 簽約作者、51CTO Top 紅人,阿里云開發(fā)者社區(qū)專家博主,目前擔(dān)任后端架構(gòu)師主責(zé),擅長(zhǎng) Redis、Spring、Kafka、MySQL技術(shù)和云原生微服務(wù)。4aF28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-83641-0.html阿里一面:如何將重復(fù)性比較高的 String 類型的地址信息從 20GB 降到幾百兆?

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 首屏?xí)r間,你說你優(yōu)化了,那你倒是計(jì)算出來給我看啊!

下一篇: 深入理解Transformer技術(shù)原理

標(biāo)簽:
  • 熱門焦點(diǎn)
  • K60 Pro官方停產(chǎn) 第三方瞬間漲價(jià)

    雖然沒有官方宣布,但Redmi的一些高管也已經(jīng)透露了,Redmi K60 Pro已經(jīng)停產(chǎn)且不會(huì)補(bǔ)貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機(jī)在停產(chǎn)之后
  • 小米降噪藍(lán)牙耳機(jī)Necklace分享:聽一首歌 讀懂一個(gè)故事

    在今天下午的小米Civi 2新品發(fā)布會(huì)上,小米還帶來了一款新的降噪藍(lán)牙耳機(jī)Necklace,我們也在發(fā)布結(jié)束的第一時(shí)間給大家?guī)磉@款耳機(jī)的簡(jiǎn)單分享。現(xiàn)在大家能見到最多的藍(lán)牙耳機(jī)
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動(dòng),畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個(gè)移動(dòng)端新品,不會(huì)像安卓廠商,一
  • 虛擬鍵盤 API 的妙用

    你是否在遇到過這樣的問題:移動(dòng)設(shè)備上有一個(gè)固定元素,當(dāng)激活虛擬鍵盤時(shí),該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認(rèn)行為,在本文中,我們將探討這個(gè)問題、為什么會(huì)發(fā)生
  • 為什么你不應(yīng)該使用Div作為可點(diǎn)擊元素

    按鈕是為任何網(wǎng)絡(luò)應(yīng)用程序提供交互性的最常見方式。但我們經(jīng)常傾向于使用其他HTML元素,如 div span 等作為 clickable 元素。但通過這樣做,我們錯(cuò)過了許多內(nèi)置瀏覽器的功能。
  • 2納米決戰(zhàn)2025

    集微網(wǎng)報(bào)道 從三強(qiáng)爭(zhēng)霸到四雄逐鹿,2nm的廝殺聲已然隱約傳來。無論是老牌勁旅臺(tái)積電、三星,還是誓言重回先進(jìn)制程領(lǐng)先地位的英特爾,甚至初成立不久的新
  • 7月4日見!iQOO 11S官宣:“雞血版”驍龍8 Gen2+200W快充加持

    上半年已接近尾聲,截至目前各大品牌旗下的頂級(jí)旗艦都已悉數(shù)亮相,而下半年即將推出的頂級(jí)旗艦已經(jīng)成為了數(shù)碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 榮耀Magicbook V 14 2021曙光藍(lán)版本正式開售,擁有觸摸屏

    榮耀 Magicbook V 14 2021 曙光藍(lán)版本正式開售,搭載 i7-11390H 處理器與 MX450 顯卡,配備 16GB 內(nèi)存與 512GB SSD,重 1.48kg,厚 14.5mm,具有 1.5mm 鍵盤鍵程、
  • 電博會(huì)與軟博會(huì)實(shí)現(xiàn)"線下+云端"的雙線融合

    在本次“電博會(huì)”與“軟博會(huì)”雙展會(huì)利好條件的加持下,既可以發(fā)揮展會(huì)拉動(dòng)人流、信息流、資金流實(shí)現(xiàn)快速交互流動(dòng)的作用,繼而推動(dòng)區(qū)域經(jīng)濟(jì)良性發(fā)展;又可以聚
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
黄色日韩在线| 国产精品久久一卡二卡| 久久国产加勒比精品无码| 久久激情五月激情| 农村妇女精品| 欧美视频在线观看免费| 国产欧美午夜| 国产午夜精品美女毛片视频| 黄色综合网站| 99re66热这里只有精品3直播 | 亚洲一区视频在线| 欧美综合激情网| 美女视频黄 久久| 国产精品国产福利国产秒拍| 国内精品视频666| 亚洲最新在线视频| 久久久99免费视频| 欧美性猛片xxxx免费看久爱| 伊人天天综合| 亚洲免费网址| 欧美 日韩 国产 一区| 国产精品日韩| 亚洲欧洲精品一区二区三区不卡 | 小嫩嫩精品导航| 母乳一区在线观看| 国产精品乱码久久久久久| 伊人久久亚洲美女图片| 在线亚洲一区观看| 久久裸体艺术| 国产精品美腿一区在线看| 在线日韩中文字幕| 亚洲香蕉成视频在线观看| 蜜臀99久久精品久久久久久软件 | 日韩亚洲国产精品| 久久久久久有精品国产| 国产精品极品美女粉嫩高清在线| 在线欧美三区| 久久精品国产第一区二区三区最新章节| 欧美喷潮久久久xxxxx| 在线日韩精品视频| 久久久av水蜜桃| 国产精品视频第一区| 亚洲看片网站| 欧美不卡福利| 激情综合中文娱乐网| 亚洲欧美激情精品一区二区| 欧美日产国产成人免费图片| 亚洲第一福利视频| 久久久夜精品| 国产日韩欧美在线播放| 亚洲一二三四久久| 欧美日韩国产影院| 日韩视频免费观看高清在线视频 | 国产主播一区二区| 亚洲女同同性videoxma| 欧美日韩国产高清视频| 亚洲黄色小视频| 老司机午夜免费精品视频| 国产亚洲在线观看| 性色av一区二区三区在线观看| 欧美午夜免费| 亚洲午夜极品| 国产精品www| 9国产精品视频| 欧美精品综合| 亚洲精品视频免费观看| 欧美sm视频| 亚洲高清123| 免费成人在线视频网站| 在线成人www免费观看视频| 久久九九免费视频| 依依成人综合视频| 久久美女艺术照精彩视频福利播放| 国产视频精品xxxx| 久久精品视频在线免费观看| 国产伦精品一区二区三区照片91| 亚洲一区二区久久| 国产精品播放| 亚洲宅男天堂在线观看无病毒| 欧美特黄一级大片| 亚洲免费视频网站| 国产欧美一区视频| 欧美在线观看视频| 国内精品久久久久伊人av| 久久九九全国免费精品观看| 狠狠网亚洲精品| 久久久久国产精品一区三寸| 国内久久精品| 老司机成人在线视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美日韩国产小视频在线观看| 亚洲精品综合在线| 欧美日韩亚洲成人| 亚洲一区二区三区在线播放| 国产精品丝袜xxxxxxx| 午夜亚洲视频| 国产真实乱子伦精品视频| 久久久亚洲国产天美传媒修理工| 黄色亚洲精品| 欧美激情视频给我| 在线视频欧美一区| 国产精品在线看| 久久久久国产一区二区三区| 亚洲国产婷婷香蕉久久久久久| 欧美激情一区| 亚洲一区二区三区色| 国产精品亚洲第一区在线暖暖韩国| 欧美一区二区视频在线| 激情综合网激情| 欧美二区乱c少妇| 一区二区三区欧美| 国产欧美一区二区三区久久| 久久亚洲欧洲| 一本色道久久综合| 国产精品永久入口久久久| 久久久久久高潮国产精品视| 亚洲欧洲日产国产网站| 欧美亚州一区二区三区| 久久久精品国产免大香伊| 亚洲国产精品久久久久婷婷老年| 欧美日韩国产综合一区二区| 午夜精品视频一区| 亚洲福利视频免费观看| 国产精品va在线播放| 久久精品国产亚洲aⅴ| 亚洲精品国精品久久99热| 国产精品毛片一区二区三区| 久久这里只有| 一区二区三区精品视频在线观看| 国产亚洲va综合人人澡精品| 欧美成人一区二区三区片免费| 一区二区三区视频在线看| 国产一区二区三区久久| 欧美激情一二三区| 欧美一区久久| 亚洲精品在线视频| 国产一区91| 欧美三区在线视频| 久久伊人精品天天| 亚洲午夜极品| 亚洲人成网站影音先锋播放| 国产日产欧美精品| 欧美日韩ab| 老司机午夜精品视频| 亚洲影音先锋| 亚洲国产综合在线| 国产日韩一区二区三区| 欧美另类69精品久久久久9999| 久久国产精品一区二区三区| 一本色道久久综合亚洲91| 久久精品中文字幕免费mv| 一本色道久久综合精品竹菊 | 久久gogo国模裸体人体| 一本综合精品| 1000部精品久久久久久久久| 国产精品视频男人的天堂| 女生裸体视频一区二区三区| 欧美一级片在线播放| 9色porny自拍视频一区二区| 在线不卡a资源高清| 国产日韩精品一区二区| 欧美色道久久88综合亚洲精品| 嫩草国产精品入口| 久久久久亚洲综合| 欧美亚洲系列| 亚洲网站视频福利| 日韩午夜黄色| 亚洲高清久久久| 国内一区二区三区| 国产午夜精品全部视频在线播放 | 欧美一区二区三区在线看| 一区二区三区蜜桃网| 亚洲国产精品嫩草影院| 含羞草久久爱69一区| 国产精品一区免费观看| 欧美日韩三级电影在线| 欧美大片va欧美在线播放| 久久午夜电影网| 久久精品成人欧美大片古装| 亚洲欧洲99久久| 亚洲永久视频| 亚洲一区二区三区免费观看| 亚洲最新在线| 日韩午夜三级在线| 亚洲精品欧美一区二区三区| 亚洲黄色一区| 亚洲国产美女| 亚洲黄网站黄| 亚洲欧洲在线一区| 91久久精品美女高潮| 亚洲国产精品日韩| 亚洲国产精品一区| 亚洲黄网站在线观看| 亚洲国产日韩欧美综合久久| 亚洲第一狼人社区| 亚洲电影激情视频网站| 亚洲国产91色在线| 亚洲国产精品成人一区二区| 亚洲二区免费| 亚洲日本中文字幕| 亚洲精品一区二区三区在线观看| 亚洲欧洲一区二区天堂久久 | 在线观看日韩| 亚洲黄色成人久久久|