<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL 性能優(yōu)化的 9 種姿勢(shì),面試再也不怕了!

          共 10281字,需瀏覽 21分鐘

           ·

          2021-10-24 17:33

          上一篇:沒想到Sharding-Jdbc竟然這么牛逼!一鍵實(shí)現(xiàn)讀寫分離、分庫分表~

          1、選擇最合適的字段屬性

          Mysql是一種關(guān)系型數(shù)據(jù)庫,可以很好地支持大數(shù)據(jù)量的存儲(chǔ),但是一般來說,數(shù)據(jù)庫中的表越小,在它上面執(zhí)行的查詢也就越快。因此,在創(chuàng)建表的時(shí)候,為了獲得更好的性能,我們可以將表中字段的寬度舍得盡可能小。

          例如:在定義郵政編碼這個(gè)字段時(shí),如果將其設(shè)置為char(255),顯然給數(shù)據(jù)庫增加了不必要的空間,甚至使用varchar這種類型也是多余的,因?yàn)閏har(6)就可以很好地完成了任務(wù)。同樣的如果可以的話,我們應(yīng)該是用MEDIUMINT而不是BIGINT來定義整形字段。

          2、盡量把字段設(shè)置為NOT NULL

          在可能的情況下,盡量把字段設(shè)置為NOT NULL,這樣在將來執(zhí)行查詢的時(shí)候,數(shù)據(jù)庫不用去比較NULL值。

          對(duì)于某些文本字段來說,例如“省份”或者“性別”,我們可以將他們定義為ENUM(枚舉)類型。因?yàn)樵贛ySQL中,ENUM類型被當(dāng)做數(shù)值型數(shù)據(jù)來處理,而數(shù)值型數(shù)據(jù)被處理起來的速度要比文本類型要快得多。這樣我們又可以提高數(shù)據(jù)庫的性能。

          3、使用連接(JOIN)來代替子查詢(Sub-Queries)

          MySQL從4.1開始支持SQL的子查詢。這個(gè)技術(shù)可以使用select語句來創(chuàng)建一個(gè)單例的查詢結(jié)果,然后把這個(gè)結(jié)果作為過濾條件用在另一個(gè)查詢中。

          例如:我們要將客戶基本信息表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售信息表中將所有發(fā)出訂單的客戶id取出來,然后將結(jié)果傳遞給主查詢,如下圖所示:

          如果使用連接(JOIN)來完成這個(gè)工作,速度將會(huì)快很多,尤其是當(dāng)salesinfo表中對(duì)CustomerID建有索引的話,性能將會(huì)更好,查詢?nèi)缦拢?/span>

          連接(JOIN)之所以更有效率一些,是因?yàn)镸ySQL不需要在內(nèi)存中創(chuàng)建臨時(shí)表來完成這個(gè)邏輯上 需要兩個(gè)步驟的查詢工作。

          另外,如果你的應(yīng)用程序有很多JOIN查詢,你應(yīng)該確認(rèn)兩個(gè)表中JOIN的字段是被建立過索引的。這樣MySQL內(nèi)部 會(huì)啟動(dòng)為你優(yōu)化JOIN的SQL語句的機(jī)制。而且這些被用來JOIN的字段,應(yīng)該是相同的類型的。

          例如:如果你要把DECIMAL字段和一個(gè)INT字段JOIN在一起,MySQL就無法使用他們的索引。對(duì)于那些STRING類型,還需要有相同的字符集才行。(兩個(gè)表的字符集可能不相同)。

          inner join內(nèi)連接也叫做等值連接,left/right join是外鏈接。

          SELECT A.id,A.name,B.id,B.name FROM A LEFT JOIN B ON A.id=B.id;
          SELECT A.id,A.name,B.id,B.name FROM A RIGHT JOIN ON B A.id= B.id;
          SELECT A.id,A.name,B.id,B.name FROM A INNER JOIN ON A.id =B.id;

          經(jīng)過多方面的證實(shí)inner join性能比較快,因?yàn)閕nner join是等值連接,或許返回的行數(shù)比較少。但是我們要記得有些語句隱形的用到了等值連接,如:

          SELECT A.id,A.name,B.id,B.name FROM A,B WHERE A.id = B.id;

          sql中的連接查詢有inner join(內(nèi)連接)、left join(左連接)、right join(右連接)、full join(全連接)四種方式,它們之間其實(shí)并沒有太大區(qū)別,僅僅是查詢出來的結(jié)果有所不同。

          例如我們有兩張表:
          Orders表通過外鍵Id_P和Persons表進(jìn)行關(guān)聯(lián)。

          inner join(內(nèi)連接),在兩張表進(jìn)行連接查詢時(shí),只保留兩張表中完全匹配的結(jié)果集。

          我們使用inner join對(duì)兩張表進(jìn)行連接查詢,sql如下:

          SELECT p.LastName, p.FirstName, o.OrderNo
          FROM Persons p
          INNER JOIN Orders o
          ON p.Id_P=o.Id_P and 1=1  --用and連接多個(gè)條件
          ORDER BY p.LastName

          查詢結(jié)果集:

          此種連接方式Orders表中Id_P字段在Persons表中找不到匹配的,則不會(huì)列出來。

          注意:?jiǎn)渭兊?code style="margin: 3px;padding: 3px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;font-size: 14px;border-radius: 4px;font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(155, 110, 35);background-color: rgb(255, 245, 227);">select * from a,b是笛卡爾乘積。比如a表有5條數(shù)據(jù),b表有3條數(shù)據(jù),那么最后的結(jié)果有5*3=15條數(shù)據(jù)。

          但是如果對(duì)兩個(gè)表進(jìn)行關(guān)聯(lián):select * from a,b where a.id = b.id 意思就變了,此時(shí)就等價(jià)于:

          select * from a inner join b on a.id = b.id。 -- 即就是內(nèi)連接。
          但是這種寫法并不符合規(guī)范,可能只對(duì)某些數(shù)據(jù)庫管用,如sqlserver。推薦最好不要這樣寫。最好寫成inner join的寫法。

          內(nèi)連接查詢 (select * from a join b on a.id = b.id) 與 關(guān)聯(lián)查詢 (select * from a , b where a.id = b.id)的區(qū)別

          left join,在兩張表進(jìn)行連接查詢時(shí),會(huì)返回左表所有的行,即使在右表中沒有匹配的記錄。

          我們使用left join對(duì)兩張表進(jìn)行連接查詢,sql如下:

          SELECT p.LastName, p.FirstName, o.OrderNo
          FROM Persons p
          LEFT JOIN Orders o
          ON p.Id_P=o.Id_P
          ORDER BY p.LastName
          查詢結(jié)果如下:
          可以看到,左表(Persons表)中LastName為Bush的行的Id_P字段在右表(Orders表)中沒有匹配,但查詢結(jié)果仍然保留該行。

          right join,在兩張表進(jìn)行連接查詢時(shí),會(huì)返回右表所有的行,即使在左表中沒有匹配的記錄。

          我們使用right join對(duì)兩張表進(jìn)行連接查詢,sql如下:

          SELECT p.LastName, p.FirstName, o.OrderNo
          FROM Persons p
          RIGHT JOIN Orders o
          ON p.Id_P=o.Id_P
          ORDER BY p.LastName
          查詢結(jié)果如下:
          Orders表中最后一條記錄Id_P字段值為65,在左表中沒有記錄與之匹配,但依然保留。

          full join,在兩張表進(jìn)行連接查詢時(shí),返回左表和右表中所有沒有匹配的行。

          我們使用full join對(duì)兩張表進(jìn)行連接查詢,sql如下:

          SELECT p.LastName, p.FirstName, o.OrderNo
          FROM Persons p
          FULL JOIN Orders o
          ON p.Id_P=o.Id_P
          ORDER BY p.LastName
          查詢結(jié)果如下:

          查詢結(jié)果是left join和right join的并集。

          4、使用聯(lián)合(UNION)來代替手動(dòng)創(chuàng)建的臨時(shí)表

          MySQL從4.0版本開始支持union查詢,他可以把需要使用臨時(shí)表的兩條或更多的select查詢合在一個(gè)查詢中。在客戶端查詢會(huì)話結(jié)束的時(shí)候,臨時(shí)表會(huì)被自動(dòng)刪除,從而保證數(shù)據(jù)庫整齊、高效。使用union來創(chuàng)建查詢的時(shí)候,我們只需要用union作為關(guān)鍵字把多個(gè)select語句連接起來就可以了,要注意的是所有select語句中的字段數(shù)目要相同。

          下面一個(gè)例子就演示了一個(gè)使用union額查詢。

          當(dāng)我們可以確認(rèn)不可能出現(xiàn)重復(fù)結(jié)果集或者不在乎重復(fù)結(jié)果集的時(shí)候盡量使用union all而不是union,因?yàn)閡nion和union all的差異主要是前者需要將兩個(gè)或者多個(gè)結(jié)果集合并后再進(jìn)行唯一性過濾操作,這就會(huì)涉及到排序,增加大量的CPU運(yùn)算,增大資源消耗及延遲。

          5、事務(wù)

          盡管我們可以使用子查詢(Sub-Queries)、連接(JOIN)和聯(lián)合(UNION)來創(chuàng)建各種各樣的查詢,但不是所有的數(shù)據(jù)庫操作,都可以只用一條或少數(shù)幾條就可以完成的。更多的時(shí)候是需要用一系列的語句來完成某種工作。但是在這種情況下,當(dāng)這個(gè)語句塊中的某一條語句運(yùn)行出錯(cuò)的時(shí)候,整個(gè)語句塊的操作就會(huì)變得不確定起來。

          設(shè)想一下,要把某個(gè)數(shù)據(jù)同時(shí)插入兩個(gè)相關(guān)聯(lián)的表中,可能會(huì)出現(xiàn)這樣的情況:第一個(gè)表中成功更新后,數(shù)據(jù)庫突然出現(xiàn)意外狀況,造成第二個(gè)表中的操作沒有完成,這樣就會(huì)造成數(shù)據(jù)的不完整,甚至?xí)茐臄?shù)據(jù)庫中的數(shù)據(jù)。要避免這種情況,就應(yīng)該使用事務(wù),它的作用是要么語句塊中每條語句都操作成功,要么都失敗。

          換句話說,就是可以保持?jǐn)?shù)據(jù)庫中的數(shù)據(jù)的一致性和完整性。事務(wù)以BEGIN關(guān)鍵字開始,COMMIT關(guān)鍵字結(jié)束。在這之間的一條SQL語句操作失敗,那么Rollback命令就可以把數(shù)據(jù)庫恢復(fù)到begin開始之前的狀態(tài)。

          BEGIN; 
          INSERTINTOsalesinfoSETCustomerID=14;
          UPDATEinventorySETQuantity=11WHEREitem='book';
          COMMIT;
          事務(wù)的另一個(gè)作用是當(dāng)多個(gè)用戶同時(shí)使用相同的數(shù)據(jù)源時(shí),他可以使用鎖定數(shù)據(jù)庫的方式來為用戶提供一種安全的訪問機(jī)制,這樣可以保證用戶的操作不被其它的用戶所干擾。

          一般來說,事務(wù)必須滿足四個(gè)條件(ACID):原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨(dú)立性)、持久性(Durability).

          • 原子性:一個(gè)事物(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始的狀態(tài),就像這個(gè)事務(wù)從來沒有執(zhí)行過一樣。
          • 一致性在事務(wù)開始之前和事務(wù)結(jié)束之后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作。
          • 隔離性:數(shù)據(jù)庫允許多個(gè)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同的級(jí)別,包括讀未提交(Read uncommitted)、讀已提交(Read committed)、可重復(fù)讀(repeateable read)和串行化(Serializable).
          • 持久性:事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失。
          事務(wù)的并發(fā)問題:

          1、臟讀:事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù),然后B回滾操作,那么A讀取到的數(shù)據(jù)就是臟數(shù)據(jù)

          2、不可重復(fù)讀:事務(wù)A多次讀取同一事物,事務(wù)B在事務(wù)A多次讀取的過程中,對(duì)數(shù)據(jù)做了更新并提交,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)時(shí),結(jié)果不一致。

          3、幻讀:系統(tǒng)管理員A將數(shù)據(jù)庫中的所有學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCDE等級(jí),但是系統(tǒng)管理員B就在這個(gè)時(shí)候插入了一條具體分?jǐn)?shù)的記錄,當(dāng)系統(tǒng)管理員A改結(jié)束后發(fā)現(xiàn)還有一條記錄沒有改過來,就好像發(fā)生了幻覺一樣,這就叫幻讀。

          小結(jié):不可重復(fù)讀的和幻讀很容易混淆,不可重復(fù)讀側(cè)重于修改,幻讀側(cè)重于新增或刪除。解決不可重復(fù)讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表

          MySQL事務(wù)隔離級(jí)別:

          事務(wù)隔離級(jí)別臟讀不可重復(fù)讀幻讀
          讀未提交(read-uncommitted)
          不可重復(fù)讀(read-committed)
          可重復(fù)讀(repeatable-read)
          串行化(serializable)

          事務(wù)控制語句:

          • BEGIN或START TRANSACTION:顯式的開啟一個(gè)事物。
          • COMMIT:也可以使用COMMIT WORK,不過二者是等價(jià)的。COMMIT會(huì)提交事務(wù),并使已對(duì)數(shù)據(jù)庫進(jìn)行的所有修改成為永久性的。
          • Rollback:也可以使用Rollback work,不過二者是等價(jià)的?;貪L會(huì)結(jié)束用戶的事務(wù),并撤銷正在進(jìn)行的所有未提交的修改。
          • SAVEPOINT identifier:SAVEPOINT允許在事務(wù)中創(chuàng)建一個(gè)保存點(diǎn),一個(gè)事務(wù)中可以有很多個(gè)SAVEPOINT;
          • RELEASE SAVEPOINT identifier:刪除一個(gè)事物的保存點(diǎn),當(dāng)沒有指定的保存點(diǎn)時(shí),執(zhí)行該語句會(huì)拋出一個(gè)異常。
          • ROLLBACK TO inditifier:把事務(wù)回滾到標(biāo)記點(diǎn)。
          • SET TRANSACTION:用來設(shè)置事務(wù)的隔離級(jí)別。InnoDB存儲(chǔ)引擎提供事務(wù)的隔離級(jí)別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERLALIZABLE。
          6、使用外鍵

          鎖定表的方法可以維護(hù)數(shù)據(jù)的完整性,但是他卻不能保證數(shù)據(jù)的關(guān)聯(lián)性。這個(gè)時(shí)候我們可以使用外鍵。例如:外鍵可以保證每一條銷售記錄都指向某一個(gè)存在的客戶。

          在這里,外鍵可以把customerinfo表中的customerid映射到salesinfo表中customerid,任何一條沒有辦法合法customerid的記錄都不會(huì)被跟新或插入到salesinfo中.

          CREATE TABLE customerinfo(customerid int primary key) engine = innodb;
          CREATE  TABLE   salesinfo( salesid int not null,customerid  int not null, primary key(customerid,salesid),foreign key(customerid)  references  customerinfo(customerid) on delete cascade)engine = innodb;

          注意例子中的參數(shù)“on delete cascade”.該參數(shù)保證當(dāng)customerinfo表中的一條客戶記錄也會(huì)被自動(dòng)刪除。如果要在mysql中使用外鍵,一定要記住在創(chuàng)建表的時(shí)候?qū)⒈淼念愋投x為事務(wù)安全表InnoDB類型。該類型不是mysql表的默認(rèn)類型。定義的方法是在CREATE TABLE語句中加上engine=innoDB。

          7、鎖定表

          盡管事務(wù)是維護(hù)數(shù)據(jù)庫完整性的一個(gè)非常好的方法,但卻因?yàn)樗莫?dú)占性,有時(shí)會(huì)影響數(shù)據(jù)庫的性能,尤其是很大的應(yīng)用系統(tǒng)中。由于在事務(wù)執(zhí)行的過程中,數(shù)據(jù)庫將會(huì)被鎖定,因此其他的用戶請(qǐng)求只能暫時(shí)等待直到該事務(wù)結(jié)束。

          如果一個(gè)數(shù)據(jù)庫系統(tǒng)只有少數(shù)幾個(gè)用戶來使用,事務(wù)造成的影響不會(huì)成為太大的問題;但假設(shè)有成千上萬的用戶同時(shí)訪問一個(gè)數(shù)據(jù)庫系統(tǒng),例如訪問一個(gè)電子商務(wù)網(wǎng)站,就會(huì)產(chǎn)生比較嚴(yán)重的響應(yīng)延遲。

          其實(shí),有些情況下我們可以通過鎖定表的方式來獲得更好的性能。下面的例子就是鎖定表的方法來完成前面一個(gè)例子中事務(wù)的功能。

          這里,我們用一個(gè)select語句取出初始數(shù)據(jù),通過一些計(jì)算,用update語句將新值更新到表中。包含有WRITE關(guān)鍵字的LOCKTABLE語句可以保證在UNLOCKTABLES命令被執(zhí)行之前,不會(huì)有其他訪問來對(duì)inventory進(jìn)行插入、更新或者刪除的操作。

          8、使用索引

          索引是提高數(shù)據(jù)庫性能的常用方法,他可以令數(shù)據(jù)庫服務(wù)器比沒有索引快得多的速度檢索特定的行,尤其是在查詢語句當(dāng)中包含有MAX(),MIN()和ORDERBY這些命令的時(shí)候,性能提高更為明顯。

          那該對(duì)那些字段進(jìn)行索引呢?

          一般來說,索引應(yīng)該建立在那些將用于join,where判斷和orderby排序的字段上。盡量不要對(duì)數(shù)據(jù)庫中某個(gè)含有大量重復(fù)的值的字段建立索引,對(duì)于一個(gè)ENUM類型的字段來說,出現(xiàn)大量重復(fù)值是很有可能的情況。

          例如customerinfo中的“province”..字段,在這樣的字段上建立索引將不會(huì)有什么幫助;相反,還有可能降低數(shù)據(jù)庫的性能。我們?cè)趧?chuàng)建表的時(shí)候可以同時(shí)創(chuàng)建合適的索引,也可以使用ALTERTABLE或CREATEINDEX在以后創(chuàng)建索引。

          此外,MySQL從版本3.23.23開始支持全文索引和搜索。全文索引在MySQL中是一個(gè)FULLTEXT類型索引,但僅能用于MyISAM類型的表。對(duì)于一個(gè)大的數(shù)據(jù)庫,將數(shù)據(jù)裝載到一個(gè)沒有FULLTEXT索引的表中,然后再使用ALTERTABLE或CREATEINDEX創(chuàng)建索引,將是非??斓摹5绻麑?shù)據(jù)裝載到一個(gè)已經(jīng)有FULLTEXT索引的表中,執(zhí)行過程將會(huì)非常慢。

          9、優(yōu)化de的查詢語句
          1 不使用子查詢

          例:SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name=’hechunyang’);

          子查詢?cè)贛ySQL5.5版本里,內(nèi)部執(zhí)行計(jì)劃器是這樣執(zhí)行的:先查外表再匹配內(nèi)表,而不是先查內(nèi)表t2,當(dāng)外表的數(shù)據(jù)很大時(shí),查詢速度會(huì)非常慢。

          在MariaDB10/MySQL5.6版本里,采用join關(guān)聯(lián)方式對(duì)其進(jìn)行了優(yōu)化,這條SQL會(huì)自動(dòng)轉(zhuǎn)換為

          SELECT t1.* FROM t1 JOIN t2 ON t1.id = t2.id;
          但請(qǐng)注意的是:優(yōu)化只針對(duì)SELECT有效,對(duì)UPDATE/DELETE子查詢無效,固生產(chǎn)環(huán)境應(yīng)避免使用子查詢
          2 避免函數(shù)索引

          例:

          SELECT * FROM t WHERE YEAR(d) >= 2016;

          由于MySQL不像Oracle那樣支持函數(shù)索引,即使d字段有索引,也會(huì)直接全表掃描。

          應(yīng)改為—–>

          SELECT * FROM t WHERE d >= ‘2016-01-01’;
          3 用IN來替換OR

          低效查詢

          SELECT * FROM t WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30;

          —–> 高效查詢

          SELECT * FROM t WHERE LOC_IN IN (10,20,30);
          4 LIKE雙百分號(hào)無法使用到索引
          SELECT * FROM t WHERE name LIKE ‘%de%’;

          —–>

          SELECT * FROM t WHERE name LIKE ‘de%’;
          目前只有MySQL5.7支持全文索引(支持中文)
          5 讀取適當(dāng)?shù)挠涗汱IMIT M,N
          SELECT * FROM t WHERE 1;

          —–>

          SELECT * FROM t WHERE 1 LIMIT 10;
          6 避免數(shù)據(jù)類型不一致
          SELECT * FROM t WHERE id = ’19’;

          —–>

          SELECT * FROM t WHERE id = 19;
          7 分組統(tǒng)計(jì)可以禁止排序
          SELECT goods_id,count(*) FROM t GROUP BY goods_id;
          默認(rèn)情況下,MySQL對(duì)所有GROUP BY col1,col2…的字段進(jìn)行排序。如果查詢包括GROUP BY,想要避免排序結(jié)果的消耗,則可以指定ORDER BY NULL禁止排序。另外,MySQL 系列面試題和答案全部整理好了,微信搜索互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)發(fā)送:2T,可以在線閱讀。

          —–>

          SELECT goods_id,count(*) FROM t GROUP BY goods_id ORDER BY NULL;
          8 避免隨機(jī)取記錄
          SELECT * FROM t1 WHERE 1=1 ORDER BY RAND() LIMIT 4;

          MySQL不支持函數(shù)索引,會(huì)導(dǎo)致全表掃描 —–>

          SELECT * FROM t1 WHERE id >= CEIL(RAND()*1000) LIMIT 4;
          9 禁止不必要的ORDER BY排序
          SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;

          —–>

          SELECT count(1) FROM user u LEFT JOIN user_info i ON u.id = i.user_id;
          10 批量INSERT插入
          INSERT INTO t (id, name) VALUES(1,’Bea’);
          INSERT INTO t (id, name) VALUES(2,’Belle’);
          INSERT INTO t (id, name) VALUES(3,’Bernice’);

          —–>

          INSERT INTO t (id, name) VALUES(1,’Bea’), (2,’Belle’),(3,’Bernice’);

          原文鏈接:https://blog.csdn.net/weixin_42047611/article/details/81772149

          感謝您的閱讀,也歡迎您發(fā)表關(guān)于這篇文章的任何建議,關(guān)注我,技術(shù)不迷茫!小編到你上高速。

              · END ·
          最后,關(guān)注公眾號(hào)互聯(lián)網(wǎng)架構(gòu)師,在后臺(tái)回復(fù):2T,可以獲取我整理的 Java 系列面試題和答案,非常齊全


          正文結(jié)束


          推薦閱讀 ↓↓↓

          1.不認(rèn)命,從10年流水線工人,到谷歌上班的程序媛,一位湖南妹子的勵(lì)志故事

          2.如何才能成為優(yōu)秀的架構(gòu)師?

          3.從零開始搭建創(chuàng)業(yè)公司后臺(tái)技術(shù)棧

          4.程序員一般可以從什么平臺(tái)接私活?

          5.37歲程序員被裁,120天沒找到工作,無奈去小公司,結(jié)果懵了...

          6.IntelliJ IDEA 2019.3 首個(gè)最新訪問版本發(fā)布,新特性搶先看

          7.這封“領(lǐng)導(dǎo)痛批95后下屬”的郵件,句句扎心!

          8.15張圖看懂瞎忙和高效的區(qū)別!


          瀏覽 64
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品婷婷一区二区三区四区五区 | 99人妻人人爽人人添人人精品 | 亚洲操小逼 | 成人国产91论坛 | 狂野欧美性交 |