Java澶у巶闈㈣瘯鐜板満锛氶潰璇曞畼涓庢按璐х▼搴忓憳璋㈤鏈虹殑鐖嗙瑧瀵规垬瀹炲綍
浣滆�咃細璋㈤鏈猴紙涓嶆槸鐪熷悕锛� | 闈㈣瘯瀹橈細鍐烽潰闃庣帇寮犲伐
浠婂ぉ锛屾垜鈥斺�旇阿椋炴満锛屾��鎻g潃996鐨勬ⅵ鎯冲拰35宀佽浼樺寲鐨勬亹鎯э紝韪忓叆浜嗘煇澶撮儴浜掕仈缃戝ぇ鍘傜殑闈㈣瘯澶у巺銆傜數姊噷闀滃瓙鏄犲嚭鎴戠暐鏄炬补鑵荤殑鑴革紝浣嗙溂绁炰腑閫忕潃涓�鑲♀�滄垜鑳借鈥濈殑鑷俊銆俓n 闈㈣瘯瀹樺紶宸ワ紝闈㈡棤琛ㄦ儏锛岀溂绁炲鍒�锛屼豢浣涗竴鐪煎氨鑳界湅绌挎垜绠�鍘嗕笂閭e彞鈥滅簿閫氶珮骞跺彂鍒嗗竷寮忕郴缁熲�濄�俓n
绗竴杞細Java 鍩虹銇瘯鎺n
闈㈣瘯瀹�锛氳阿鍚屽锛岃浠嬬粛涓�涓嬩綘瀵�HashMap鐨勭悊瑙o紵
璋㈤鏈�锛氬摝锛佽繖涓垜浼氾紒HashMap鏄熀浜庡搱甯岃〃瀹炵幇鐨勶紝key 涓嶅厑璁搁噸澶嶏紝鍙互鏈変竴涓� null 閿紝澶氫釜 null 鍊硷紝绾跨▼涓嶅畨鍏紝搴曞眰鏄暟缁� + 閾捐〃 + 绾㈤粦鏍戯紝JDK8 寮�濮嬬殑锛乗n闈㈣瘯瀹�锛堝井寰偣澶达級锛氫笉閿欍�傞偅濡傛灉涓や釜 key 鐨� hash 鍐茬獊浜嗘�庝箞鍔烇紵
璋㈤鏈�锛氶偅灏扁�︹�︽媺閾惧憲锛佸彉鎴愰摼琛紝绛夐摼琛ㄩ暱搴﹁秴杩� 8 灏辫浆绾㈤粦鏍戯紝闃叉鏌ユ壘鍙樻參锛乗n闈㈣瘯瀹�锛氬緢濂姐�傞偅ConcurrentHashMap鏄�庝箞淇濊瘉绾跨▼瀹夊叏鐨勶紵
璋㈤鏈�锛氬棷鈥︹�﹀畠銆佸畠鏄� synchronized 鐨勶紵涓嶅锛屾槸鈥︹�︾敤 ReentrantLock锛熷ソ鍍忔槸鍒嗘閿侊紒Segment锛乗n闈㈣瘯瀹�锛欽DK7 鏄� Segment锛孞DK8 鍛紵
璋㈤鏈�锛欽DK8鈥︹�︿篃鏄� Segment锛佸彧鏄紭鍖栦簡锛侊紙鎿︽睏锛塡n闈㈣瘯瀹�锛堢毐鐪夛級锛氣�︹�﹁鍚с�傞偅ArrayList鍜�LinkedList鐨勫尯鍒紵
璋㈤鏈�锛歚ArrayList鏌ヨ蹇紝澧炲垹鎱紱LinkedList` 澧炲垹蹇紝鏌ヨ鎱紒鍥犱负涓�涓暟缁勪竴涓摼琛紒
闈㈣瘯瀹�锛氳繕琛屻�俓n
绗簩杞細澶氱嚎绋嬨伄娣辨笂
闈㈣瘯瀹�锛氳璇�synchronized鍜�ReentrantLock鐨勫尯鍒紵
璋㈤鏈�锛歚synchronized鏄叧閿瓧锛岃嚜鍔ㄥ姞閿佽В閿侊紱ReentrantLock鏄被锛岃鎵嬪姩 lock 鍜� unlock锛岃繕鑳借缃叕骞抽攣锛乗n **闈㈣瘯瀹�**锛氬緢濂姐�傞偅volatile` 鍏抽敭瀛楃殑浣滅敤锛焅n璋㈤鏈�锛氶槻姝㈡寚浠ら噸鎺掞紒杩樻湁鈥︹�︿繚璇佸彲瑙佹�э紒姣斿涓�涓彉閲忚瀹冧慨楗帮紝涓�涓嚎绋嬫敼浜嗭紝鍒殑绾跨▼椹笂鑳界湅鍒帮紒
闈㈣瘯瀹�锛氶偅瀹冭兘淇濊瘉鍘熷瓙鎬у悧锛焅n璋㈤鏈�锛氳兘锛佸綋鐒惰兘锛侀兘鍙浜嗭紝閭d笉灏辨槸鍘熷瓙鐨勫槢锛乗n闈㈣瘯瀹�锛堝槾瑙掓娊鎼愶級锛氣�︹�︿笉鑳姐�傛渶鍚庯紝绾跨▼姹犵殑鏍稿績鍙傛暟鏈夊摢浜涳紵
璋㈤鏈�锛氭牳蹇冪嚎绋嬫暟銆佹渶澶х嚎绋嬫暟銆佺瓑寰呴槦鍒椼�佹嫆缁濈瓥鐣モ�︹�﹁繕鏈夆�︹�︾┖闂叉椂闂达紵
闈㈣瘯瀹�锛氬彨浠�涔堬紵
璋㈤鏈�锛歬eepAliveTime锛佸锛佽繕鏈� ThreadFactory锛乗n闈㈣瘯瀹�锛氬媺寮鸿繃鍏炽�俓n
绗笁杞細鍒嗗竷寮忋伄骞昏
闈㈣瘯瀹�锛歊edis 鎸佷箙鍖栨満鍒朵簡瑙e悧锛焅n璋㈤鏈�锛歊DB 鍜� AOF锛丷DB 鏄揩鐓э紝AOF 鏄棩蹇楋紝姣忔潯鍛戒护閮借涓嬫潵锛乗n闈㈣瘯瀹�锛氶偅 Redis 涓讳粠澶嶅埗鍘熺悊锛焅n璋㈤鏈�锛氫富鑺傜偣鍐欙紝浠庤妭鐐硅锛屼富鑺傜偣鎶婃暟鎹悓姝ョ粰浠庤妭鐐光�︹�﹂潬蹇冭烦锛焅n闈㈣瘯瀹�锛氬叿浣撴祦绋嬶紵
璋㈤鏈�锛氫富鑺傜偣鍚姩锛屼粠鑺傜偣杩炰笂鏉ワ紝涓昏妭鐐圭敓鎴� RDB 鍙戣繃鍘伙紝鐒跺悗缁х画鍙戝閲忊�︹�﹀儚鈥︹�﹀儚鐩存挱甯﹁揣涓�鏍凤紝瀹炴椂鎺ㄦ祦锛乗n闈㈣瘯瀹�锛堥潰鏃犺〃鎯咃級锛氣�︹�n闈㈣瘯瀹�锛歋pring Bean 鐨勪綔鐢ㄥ煙鏈夊摢浜涳紵
璋㈤鏈�锛歴ingleton銆乸rototype锛岃繕鏈� request銆乻ession鈥︹�pplication锛焅n闈㈣瘯瀹�锛歁yBatis 涓� #{} 鍜� ${} 鐨勫尯鍒紵
璋㈤鏈�锛�#{} 鏄缂栬瘧锛�${} 鏄洿鎺ユ嫾鎺ワ紒闃� SQL 娉ㄥ叆锛乗n闈㈣瘯瀹�锛氬緢濂姐�傛渶鍚庝竴涓棶棰橈細DDD 鏄粈涔堬紵
璋㈤鏈�锛氬憙鈥︹�ocker锛烡evOps锛熷垎甯冨紡锛烡ata鈥︹�ata Driven Development锛熸暟鎹┍鍔ㄥ紑鍙戯紒
闈㈣瘯瀹�锛堝悎涓婄瑪璁版湰锛屾繁鍚镐竴鍙f皵锛夛細
浠婂ぉ鐨勯潰璇曞氨鍒拌繖閲屻�備綘鐨勫熀纭�杩樼畻鎵庡疄锛屼笉杩囨湁浜涘湴鏂归渶瑕佸啀娣卞叆瀛︿範銆傛垜浠細缁煎悎璇勪及锛�浣犲厛鍥炲幓绛夐�氱煡鍚�銆俓n
闄勶細璇︾粏鎶�鏈В鏋怽n
1. ConcurrentHashMap JDK8 瀹炵幇
JDK8 涓�ConcurrentHashMap鏀惧純浜� Segment 鍒嗘閿侊紝閲囩敤CAS + synchronized瀹炵幇绾跨▼瀹夊叏銆俓n
- 浣跨敤
Node鏁扮粍浠f浛Segment鏁扮粍銆俓n- 瀵逛簬閾捐〃澶磋妭鐐癸紝浣跨敤synchronized鍔犻攣锛岄攣绮掑害鏇村皬銆俓n- 鎻掑叆鏃朵娇鐢� CAS 灏濊瘯锛屽け璐ュ垯 synchronized 鍔犻攣銆俓n- 杩欐牱鍦ㄤ綆骞跺彂涓嬪嚑涔庢棤閿侊紝楂樺苟鍙戜笅閿佷綇鍗曚釜妗讹紝鎬ц兘杩滆秴 JDK7銆俓n
2. volatile 鑳藉惁淇濊瘉鍘熷瓙鎬э紵
涓嶈兘锛�
volatile鍙繚璇�鍙鎬�鍜�绂佹鎸囦护閲嶆帓搴�銆俓n- 浣嗕笉淇濊瘉澶嶅悎鎿嶄綔鐨勫師瀛愭�э紝渚嬪i++鍖呭惈璇汇�佸姞銆佸啓涓夋锛屽嵆浣�i鏄� volatile锛屼篃鍙兘琚叾浠栫嚎绋嬫墦鏂�俓n- 瑕佷繚璇佸師瀛愭�э紝闇�浣跨敤synchronized銆乣ReentrantLock鎴�AtomicInteger` 绛夊師瀛愮被銆俓n
3. Redis 涓讳粠澶嶅埗娴佺▼
- 浠庤妭鐐瑰彂閫�
PSYNC鍛戒护缁欎富鑺傜偣璇锋眰鍚屾銆俓n2. 涓昏妭鐐规墽琛�鍏ㄩ噺澶嶅埗锛氱敓鎴� RDB 蹇収锛屽彂閫佺粰浠庤妭鐐广�俓n3. 浠庤妭鐐瑰姞杞� RDB锛屽畬鎴愬垵濮嬪寲銆俓n4. 涓昏妭鐐瑰皢 RDB 鏈熼棿鐨勫啓鍛戒护缂撳瓨鍒�澶嶅埗绉帇缂撳啿鍖猴紙repl_backlog_buffer锛�銆俓n5. 涓昏妭鐐瑰皢缂撳啿鍖哄懡浠ゅ彂閫佺粰浠庤妭鐐癸紝瀹屾垚澧為噺鍚屾銆俓n6. 鍚庣画涓昏妭鐐规瘡鎵ц涓�涓啓鍛戒护锛岄兘浼氬紓姝ュ彂閫佺粰浠庤妭鐐广�俓n
4. DDD 鏄粈涔堬紵
DDD = Domain-Driven Design锛岄鍩熼┍鍔ㄨ璁�銆俓n
- 涓�绉嶈蒋浠惰璁℃�濇兂锛屽己璋冧互涓氬姟棰嗗煙涓烘牳蹇冿紝閫氳繃缁熶竴璇█锛圲biquitous Language锛夎繛鎺ユ妧鏈汉鍛樹笌涓氬姟浜哄憳銆俓n- 鏍稿績姒傚康锛氬疄浣擄紙Entity锛夈�佸�煎璞★紙Value Object锛夈�佽仛鍚堬紙Aggregate锛夈�侀鍩熸湇鍔★紙Domain Service锛夈�佷粨鍌紙Repository锛夌瓑銆俓n- 鐩爣鏄瀯寤洪珮鍐呰仛銆佷綆鑰﹀悎銆佸彲缁存姢鐨勫鏉備笟鍔$郴缁燂紝閬垮厤鈥滆传琛�妯″瀷鈥濆拰鈥滀笂甯濈被鈥濄�俓n
鍚庤锛氭垜璧板嚭澶фゼ锛岄槼鍏夊埡鐪笺�傛垜鐭ラ亾锛屸�滅瓑閫氱煡鈥濆ぇ姒傜巼鏄�滄病閫氱煡鈥濄�備絾鑷冲皯锛屾垜鍙堝浼氫簡鍑犻亾棰樸�備笅娆★紝鎴戜竴瀹氶寰楁洿楂橈紒
鈥斺�� 璋㈤鏈猴紝浜庤鎷掑悗鐨勫湴閾佷笂