← 返回目录

14.在 Queue 中 poll()和 remove()有什么区别?

第 15 / 144 卷日期:

14.Queuepoll()4 remove()I!Ť ʏ

  • N知 ϛm ĆʁҊČ Ȉȋ ωɡϛm <ȴѽ

N知kp/Ćʁ poll() ϛm nullҊj remove() ěďέ7 NoSuchElementException ̖Ġѽ

ŠŴƮΧ知

Queue<String> queue = new LinkedList<String>();

queue. offer("string"); // add System. out. println(queue. poll());

System. out. println(queue. remove());

System. out. println(queue. size());

15.LinkedHashMapI!óC?

LinkedHashMapHashMap3ɣҊĻȘ þȌ ΤÎɮʲҊ FIteratorʖɄLinkedHashMap $Ҋƙ! þȌ̭ ƙΤÎ Ҋ (5 Γǥ$àƓňҊʽĬ΃Öeʲʼnʲѽ

16.HashMap ńǍ Lº ʏʊ[Ŵ°Äʋ

¿ĀΓ XƔҊHashMap ňɻ+̑½+żƦ̐样JDK1.8 ¦ żƦ̐Ē2҉ X Ҋkk Ʈѽ

图 22-1
图 22-1

Node ňɻѽ %Node[JDK1.8] ĺĊѽ

static class Node<K,V> implements Map.Entry<K,V> { final int hash;//用用来定位数组索引位置

final K key;

V value;

Node<K,V> next;//链表的下一一个node

Node(int hash, K key, V value, Node<K,V> next) { … } public final K getKey(){ … }

public final V getValue() { … } public final String toString() { … }

public final int hashCode() { … } public final V setValue(V newValue) { … }

public final boolean equals(Object o) { … } }

NodeHashMapĂĒɣҊ X Map.EntryďēҊ Ű φɤ(;ǭ<)ѽ ñ r ƦÙ̌N Node<ȴѽ

(2) HashMap ŇFÉƤ½Șͧ ѽÉƤ½ ĹLJʧǷҊ(5͊F@¥9Ýó;̑9Ýó ĹLJ ÖùҊJavaHashMap͊F ̑9Ýóѽ̑9ÝóҊǰĥ'Ҋ ňɻ¦̑½ Āąѽ rňɻĆ

ʁ ̑½ĀΓҊ©ňɍyHashKҊ! ňɻȝҊ ňɍ¥ <čȝĆʁ ̑½ ѽΧkȐʲ̣ ~ ŠŴ知

map.put("美团","小小美");

ŢȪμƲF"Oɋ"keyhashCode()uó! ÅhashCode ǭ样ĨuóǟF rJava<ȴ҉Ҋ]K ø)Hashűó KlƘŃű样nüŃű;ÇʌŃűҊ ͒ξ҉ üĨ;ǭ< ȘͧüʊҊ$

lkey ü · üʊҊ½Ʈ:* Hash͖Ϳѽ©]HashűóšűĀpè2˜˿λҊHash͖Ϳ Δ˰ è-Ҋmap ȘÇƵ˰ ènѽ

kpÉƤ就ňɻ. ҊľŇȾɛ Hashűó ºȾ2˜ҊkpÉƤ就ňɻňɻ.-ҊľŇHash űó 7XȾ ͖ͿҊ 5 ĩ ģ A ;$ A i ˃一ҊÅ Ɏɍ ʆG˻ʦ É

Ƥ就ňɻ -ҊČ ĝɪ们 ǓšhashűóəæHash͖Ϳѽ>"ø)U"uƩ˷ĴmapŇ!

Hash͖Ϳ Δ˰g-ҊÉƤ就ňɻ样Node[] table҉ΙFģ gæû友ʏˬ Hashűó;自ķo Ĵѽ

³ĹHash;自ķÄȐi Ҋ %!ƙ ĹHashMapƜǃѽ¿HashMap ȷųΓǥљňʺŴ (fҊΓǥљň <ƜǃÓ~ɸğŏҊʺŴk知

int threshold;// 所能容纳的key-value对极限 final float loadFactor;// 负载因子子

int modCount;

int size;

Āą˝Õ§3 ɼ°Ʃ(fҊthreshold ĝLoad factor;length(ňɻ î)<č心ƞ 4 Ć ʁňƎҊå) ňƎ  resize(自ķ)Ҋ自ķK HashMapķõ i ķõ l΅ѽȷų ˝Õ§

30.75 <ģ ;$ Ƶ˰ Ĕ一ęȤҊǽʨ 8 ȰƇҊɡƂ $ ;ģ ºȾĶВ G˻ ҊkpĂȘģ . jg<$ Ƶ˰ Ī.nҊ(5ˆȁ˝Õ§3Load factor ǭ又·njҊkpĂȘ

ģ ȅĘj<$ Ƶ˰ Ī nҊ(5 ¦˝Õ§3loadFactor ǭҊ ǭ(5 1ѽ

sizeƜǃÅ .³ĹҊ HashMap ʆȘ ;ǭ<ňõѽř ;table îlength然ķΕ 4 ;ǭ<ňõthreshold ǦѽjmodCountƜǃ| FþȌHashMapĂĒĀΓ:*Æŏ e

ňҊ| F 事Š ?DŽĢʱѽĕƲ NҊĂĒĀΓ:*ÆŏƗ ĀΓ:*ÆŏҊΧkput ;ǭ <Ҋ´ ȑkey<č valueǭyϊ̺ Ŏ ĀΓÆŏѽ

HashMap ҊÉƤ就ňɻtable îlength -ſˏ 2neu( ąň)Ҋ cƂĠ˄ Ǔ šҊĠ˄ Ǔš 就 -Ǔš ʁňѽ·<'ʁňɊʂʧǷ Δ˰ - ąňҊȜËȱ (5Ɠ

Ǫhttp://blog.csdn.net/liuqiyao_01/article/details/14475159ҊHashtableɸğŏ就 - 11Ҋ 就 -Ǔš ʁň čF样Hashtable自ķK Ļȱ+ ʁň҉ѽHashMap͊F cƂĠ˄ǓšҊ|

Çʌ;自ķ$`NjŏҊ $ əæʧǷҊHashMap üÉƤ就̓ʙüʊ$Ҋ ¦Î nü ƓªŃű )Ȑѽ

PȘ ÖùҊľŇ˝Õ§3;HashűóǓš ą³Ҋ ǂ 7XǼ̑) G˻Ҋ ι7 XǼ̑) Ҋɢ ˵ÂİʡHashMap ¸ ѽ Ҋ JDK1.8Į Ҋ<ňɍĀΓ` Ó Ƙ Nj

ŏҊʙÎ żƦ̐ѽj©̑½ î^ 样ȷųå)8҉$Ҋ̑½ ćǢ żƦ̐ҊƋFżƦ̐?DŽ ω Ƈƹ ĶNōnHashMap ¸ ҊÅ F żƦ̐ ΤÎ然ωɡ然ƹĜ űóѽ

Ż X-uó

HashMap ĂĒŻ X. Ҋ | ¿Ɏɍkey¬ÇÉƤ就ňɻ̓ʙüʊ然putuó ˠỴ̄~然自ķ)ȐQȜн¸ NŕÎɂ@ƔĹѽ

1.ʦ ÉƤ就ňɻ̓ʙüʊ

ƕ ¦然ωɡ然ƹĜ;ǭ<Ҋ ü ÉƤ就ňɻ üʊ .À; Ƙѽ ')HashMap ňɍĀΓ ňɻ;̑½ ĀąҊ 5 %©]Ƥā HashMapP ĆʁüʊǨõ2ǣ˿λ®ҊǨ

õŇ!rüʊ ĆʁňõEҊ>"© %FhashűóĪ! üʊ $«ҊǛ (5fT <čüʊ Ćʁ % Ҋ FʖɄ̑½Ҋ Njŏ ƹΐ Ƶ˰ѽHashMap üňɻ̓ʙü

ʊҊěďLJ hashuó Ť˜¸ ѽƙ ʺŴ X(uó +uó±):

方方法一一:

static final int hash(Object key) {//jdk1.8 & jdk1.7 int h;

// h = key.hashCode() 为第一一步取hashCode值 // h ^ (h >>> 16)为第二二步高高位参与运算

return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);

} 方方法二二:

static int indexFor(int h, int length) {//jdk1.7的源码,jdk1.8没有这个方方法,但是实现原理理一一样的

return h & (length-1);//第三步取模运算

ç · ѽ %Ɗƙ hashǭ<ňɻ îÇʌŃűҊ d ҊĆʁ 2ǣ·<' º Ⱦ˿λ ѽ´ ҊʌŃű ƒϰ+ ºȾ Ҋ HashMap d` 知ƲFuó±šűĨ<ȴ

čĨĻȘ tableňɻ ś ̓ʙIJѽ

uóƂĠ̶͋Ҋıø)h & (table.length -1)! Ĩ<ȴ ĻȘüҊjHashMapƱʣňɻ îç
2 neuҊ HashMap DŽî Njŏѽ©lengthç 2neu$Ҋh& (length-1)Ńű Ō <
lengthÇʌҊ h%lengthҊ´ &º%Ȝ[n Ƶ˰ѽ

JDK1.8 X ҊNjŏ nüŃű űóҊø)hashCode() n16ü̖Şȁ16ü X 知(h = k.hashCode()) ^ (h >>> 16)Ҋ| ¿DŽî然ŻƵ然ŰõǪ͡ Ҋ "`(5 ňɻtablelengthº

Ⱦ- $«Ҋ ĻȱǪ͡ nȁBit Ɠª Hash šű Ҋ $ ^ @ˍѽ

ʜΧ' Ҋntable îѽ

图 25-1
图 25-1

2.HashMapputuó

HashMapputuọ́~)Ȑ(5ø)ñ³ĹҊ Lɕʇ(5,<ºʺŴ[ô̠9̇ˤ\ơѽ

图 26-1
图 26-1

ҁ.Ϙɚ;ǭ<ňɻtable[i] ʵ ģŞ nullҊʵɢ̣~resize()Ó~自ķ又

做.Ɏɍ;ǭkeyšűhashǭ! ΤÎ ňɻ̓ʙiҊkptable[i]==nullҊěď ǽŪNσ¦Ҋćđ҆Ҋk ptable[i] ģҊćđ动又

动.Ϙɚtable[i] ƊĆʁ ʵ;key dҊkp· ěďϊ̺valueҊʵɢćđ҄Ҋ P · Ɨ hashCode5Ƕequals又҄

.Ϙɚtable[i] ʵ treeNodeҊľtable[i] ʵ żƦ̐Ҋkp żƦ̐Ҋɢěď ̐ ΤÎ;ǭ<Ҋ ʵɢćđ活又

活.ʖɄtable[i]ҊϘɚ̑½ î ʵ 8Ҋ 8 w ̑½ćǢ żƦ̐Ҋ żƦ̐ ̣~ΤÎ̂ Ҋ ʵɢÓ~̑½ ΤÎ̂ 又ʖɄ)Ȑ ˌ:Xkey {Ș ěďϊ̺valueľ(又҆

.ΤÎAŻKҊϘɚ ʆȘ ;ǭ<ňõsize ʵå 4 ķõthresholdҊkpå)ҊÓ~自ķѽ

JDK1.8HashMapputuóʺŴk:

public V put(K key, V value) { 2// 对key的hashCode()做hash

3return putVal(hash(key), key, value, false, true);

4 }

6 final V putVal(int hash, K key, V value, boolean onlyIfAbsent, 7boolean evict) {

12// 步骤②:计算index,并对null做处理理 13if ((p = tab[i = (n - 1) & hash]) == null)

14tab[i]=newNode(hash,key,value,null);
15else{
16Node<K,V>e;Kk;
17//步骤③:节点key存在,直接覆盖value
18if(p.hash==hash&&
19((k=p.key)==key||(key!=null&&key.equals(k))))
20e=p;
21//步骤④:判断该链为红黑黑树
22elseif(pinstanceofTreeNode)
23e=((TreeNode<K,V>)p).putTreeVal(this,tab,hash,key,

value);

24// 步骤⑤:该链为链表 25else {

26for (int binCount = 0; ; ++binCount) { 27if ((e = p.next) == null) {

28p.next = newNode(hash, key,value,null);

//链表长长度大大于8转换为红黑黑树进行行行处理理

29if(binCount>=TREEIFY_THRESHOLD-1)//-1for1st
30treeifyBin(tab,hash);
31break;
32}

// key已经存在直接覆盖value 33if (e.hash == hash &&

34((k = e.key) == key || (key != null && key.equals(k))))break;

36p = e;

37} 38}

39 40if (e != null) { // existing mapping for key

41V oldValue = e.value;

42if (!onlyIfAbsent || oldValue == null)

43e.value = value;

44afterNodeAccess(e);

45return oldValue;

46} 47}

48++modCount;

49// 步骤⑥:超过最大大容量量就扩容 50if (++size > threshold)

51resize();

52afterNodeInsertion(evict);

53return null;

54 }

ĵÕ[ Ćʁ$Ҋ<ȴ ĩ 自 ňɻ îҊ5ƈ ĵÎ[ Ćʁѽ©]JavaP ňɻ Só a自ķ Ҋuó ŇF ňɻŠδ ķõ- ňɻҊ Ï %F -就ĵ Ҋkp ĵ[

Ҋ !Ǣ 就ѽ

%2ίresize ʺŴҊ个 JDK1.8ΜÎ żƦ̐ҊȾǫˡҊ ƈ ³Ĺ %͢]ŇFJDK1.7 Š ŴҊ³Ĺ ®Ҋ Ű Ǧ ҊȜËǦK 'ѽ

1voidresize(intnewCapacity){//传入入新的容量量
2 Entry[]oldTable=table;//引用用扩容前的Entry数组
3 intoldCapacity=oldTable.length;
4 if(oldCapacity==MAXIMUM_CAPACITY){//扩容前的数组大大小小如果已经达到最大大

(2^30)了了 5threshold = Integer.MAX_VALUE; //修改阈值为int的最大大值(2^31-1),这样以

后就不不会扩容了了 6return;

7} 8

9Entry[]newTable=newEntry[newCapacity];//初始化一一个新的Entry数组
10transfer(newTable);//!!将数据转移到新的Entry数

组里里里 11table = newTable;//HashMap的table属性引用用新的

Entry数组 12threshold = (int)(newCapacity * loadFactor);//修改阈值

13 }

P ŇF ķõ[ ňɻŠδ ķõ- ňɻҊtransfer()uóμìEntryňɻ Ćʁ 现ɨ EntryňɻPѽ

1 void transfer(Entry[] newTable) { 2Entry[] src = table;//src引用用了了旧的Entry数组

3int newCapacity = newTable.length;

4for (int j = 0; j < src.length; j++) { //遍历旧的Entry数组

5Entry<K,V>e=src[j];//取得旧Entry数组的每个元素
6if(e!=null){
7src[j]=null;//释放旧Entry数组的对象引用用(for循环后,旧的Entry数组

不不再引用用任何对象)

8do { 9Entry<K,V> next = e.next;

10int i = indexFor(e.hash, newCapacity); //!!重新计算每个元素在数组中的位置

11e.next=newTable[i];//标记[1]
12newTable[i]=e; //将元素放在数组上
13e=next; //访问下一一个Entry链上的元素
14}while(e!=null);
15}
16 }

17 }

( y¥ ňɻ üʊ ѽ

ʜΧ3' 自ķ)ȐѽǜǓ % hashűó ǰĥ Fkey mod½ -样 ň

ɻ î҉ѽÅ ÉƤ就ňɻtablesize=2Ҋ 5key = 3然7然5ҊputɮʲɆe 5然7然3ѽ mod
25K ʧǷ table[1] P ѽ PǜǓ˝Õ§3loadFactor=1Ҋľ©;ǭ< ʆ -sizetable
ʆ -$Ó~自ķѽďQ Ƙ日 ÉƤ就ňɻresizeA4Ҋ]K Node rehash )

Ȑѽ

图 29-1
图 29-1
%ƔĹJDK1.8` ś®Njŏѽ{)ǝȍ(5:XҊ %ŇF 2eћ 自ɂ(Ɨ î自 ì
2΅)Ҋ 5ҊĆʁ üʊ " ìüʊҊ " ìüʊ ̜a2eћ üʊѽñ(5 Ê ŀw
ŶҊntable îҊñ样a҉½Ʈ自ķ key1;key2lckeyʦ ̓ʙüʊ ƮΧҊñ样b҉½
Ʈ自ķKkey1;key2lckeyʦ ̓ʙüʊ ƮΧҊÅ hash1key1<č ÉƤªnüŃűĀpѽ
图 29-2
图 29-2

Ćʁ Â šűhashiKҊ§ nÆ 2΅Ҋ>"n-1mask̻ɗ nü 1bit(żÙ)Ҋ§ĝ index

图 30-1
图 30-1

§ĝҊ % 自ɌHashMap $«Ҋ ĩ ÏJDK1.7 X>d šűhashҊEĩ ì hashǭ >bit1+ 0 Ҋ 0 w̓ʙ/ÆҊ 1 w̓ʙÆA“ì̓ʙ+oldCap”Ҋ(5

ñ 16自Ɍ 32resizeƮ ñ知

图 30-2
图 30-2

Ǔšʦ ƂĠ ̶͋Ҋ˪˧, Â šűhashǭ $ Ҋjɽ $ҊƆ 1bit0+ 1(5 ų Ůo Ҋ§ĝresize )ȐҊ˿λ i ʧǷ ŪN2˜ bucket ѽ ȡ

JDK1.8 NjŏNѽ Nř ǦҊJDK1.7rehash $«Ҋˮ̑½时̜ ̑½ $«Ҋkp ½ ňɻ̓ʙüʊ· Ҋɢ̑½Ćʁ ȖʊҊ´ ¿ ñ(5 7ҊJDK1.8 Ȗʊѽɕʇ \(

5̇ˤJDK1.8resizeʺŴҊƚ .ͱҊk:

1 final Node<K,V>[] resize() { 2Node<K,V>[] oldTab = table;

3intoldCap=(oldTab==null)?0:oldTab.length;
4intoldThr=threshold;
5intnewCap,newThr=0;
6if(oldCap>0){
7//超过最大大值就不不再扩充了了,就只好随你碰撞去吧
8if(oldCap>=MAXIMUM_CAPACITY){
9threshold=Integer.MAX_VALUE;
10returnoldTab;
11}
12//没超过最大大值,就扩充为原来的2倍
13elseif((newCap=oldCap<<1)<MAXIMUM_CAPACITY&&
14oldCap>=DEFAULT_INITIAL_CAPACITY)

19else {// zero initial threshold signifies using defaults

20newCap=DEFAULT_INITIAL_CAPACITY;
21newThr=(int)(DEFAULT_LOAD_FACTOR*DEFAULT_INITIAL_CAPACITY);
22}
23//计算新的resize上限
24if(newThr==0){

25 26float ft = (float)newCap * loadFactor;

27newThr = (newCap < MAXIMUM_CAPACITY && ft < (float)MAXIMUM_CAPACITY ?

28(int)ft:Integer.MAX_VALUE);
29 }
30 threshold=newThr;
31 @SuppressWarnings({"rawtypes","unchecked"})
32Node<K,V>[]newTab=(Node<K,V>[])newNode[newCap];
33 table=newTab;
34 if(oldTab!=null){
35//把每个bucket都移动到新的buckets中
36for(intj=0;j<oldCap;++j){
37Node<K,V>e;
38if((e=oldTab[j])!=null){
39oldTab[j]=null;
40if(e.next==null)
41newTab[e.hash&(newCap-1)]=e;
42elseif(einstanceofTreeNode)
43((TreeNode<K,V>)e).split(this,newTab,j,oldCap);
44else{//链表优化重hash的代码块
45Node<K,V>loHead=null,loTail=null;
46Node<K,V>hiHead=null,hiTail=null;
47Node<K,V>next;
48do{
49next=e.next;
50//原索引
51if((e.hash&oldCap)==0){
52if(loTail==null)
53loHead=e;
54else
55loTail.next=e;
56loTail=e;
57}
58//原索引+oldCap
59else{
60if(hiTail==null)
61hiHead=e;
62else
63hiTail.next=e;
全站分卷索引 · 144 卷
  1. 1Java基础题
  2. 22.Java语言主要特性
  3. 35.如果main方法被声明为private会怎样?
  4. 48.Object有哪些公用方法
  5. 59.为什么Java里没有全局变量?
  6. 614.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
  7. 717.Locale类是什么?
  8. 820.深拷贝和浅拷贝的区别是什么?
  9. 921.Java 中操作字符串都有哪些类?它们之间有什么区别?
  10. 1025. 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
  11. 1127.Java 中Comparator 与Comparable 有什么不同?
  12. 12java集合
  13. 134.Collections.sort排序内部原理
  14. 149.说一下 HashSet 的实现原理?
  15. 1514.在 Queue 中 poll()和 remove()有什么区别?
  16. 1617.HashMap并发安全的问题
  17. 1718.JDK1.8与JDK1.7的性能对比
  18. 1818.HashMap操作注意事项以及优化?
  19. 19异常&反射
  20. 203.throw和throws的区别?
  21. 219.java反射机制的作用
  22. 22IO&NIO
  23. 231.什么是IO流?
  24. 244.读取数据量大的文件时,速度会很慢,如何选择流?
  25. 258.I/O多路复用模型(IO multiplexing)
  26. 2610.异步 I/O(asynchronous IO)
  27. 2712.NIO和IO适用场景
  28. 2815.Java NIO中最常用的通道实现?
  29. 2919.Selector是什么?
  30. 30多线程
  31. 316.线程RUNNABLE状态
  32. 3212.如何知道代码段被哪个线程调用?
  33. 3314.sleep()方法
  34. 3419.线程的优先级
  35. 3522.线程种类
  36. 3625.Java虚拟机退出时Daemon线程中的finally块一定会执行?
  37. 3728.什么是synchronized?
  38. 3836.锁的升降级规则
  39. 3941.轻量锁的解锁
  40. 4049.volatile关键字
  41. 4155.ThreadLocal
  42. 4258.Lock接口
  43. 4363.公平锁和非公平锁的区别
  44. 4467.Condition使用
  45. 4572.ConcurrentHashMap
  46. 4679.工作窃取算法的有缺点
  47. 4786.CyclicBarrier
  48. 4891.线程池工作流程
  49. 4993.向线程池提交任务
  50. 5096.Executor
  51. 5199.SingleThreadExecutor
  52. 52JVM
  53. 534.画一下jvm内存结构图?
  54. 548.Java堆
  55. 5517.如何实现一个堆内存溢出?
  56. 5622.Edem : from : to默认比例是?
  57. 5728.复制算法?
  58. 5829.标记-整理算法?
  59. 5930.分代收集算法?
  60. 6032.Stop The World?
  61. 6137.Parallel Old收集器?
  62. 6243.虚拟机进程状况工具?
  63. 6345.配置信息工具?
  64. 64Linux
  65. 658.迷路,我的当前位置在哪?
  66. 6612.删除文件?强制删除?递归删除?
  67. 6714.复制文件
  68. 6818.查看整个文件?按照有文本显示行号?无文本显示行号?
  69. 6921.查找匹配数据?反向搜?
  70. 7024.Linux广泛使用的归档数据方法?
  71. 7127.什么是环境变量?
  72. 7230.查看组信息?如何创建组?删除组?
  73. 7331.修改权限?
  74. 7436.查看设备还有多少磁盘空间?
  75. 7538.实时监测进程
  76. 7642.验证网络可链接命令是什么?什么原理?
  77. 7743.查看某端口是否被占用?
  78. 7845.如何查看当前主机名?如何修改?如何重启后生效?
  79. 7949.打印文件第一行到第三行?
  80. 80Mysql
  81. 813.MySql的存储引擎有哪些?
  82. 827.选择合适的数据类型
  83. 8313.MySql有哪些索引?
  84. 8415. 非聚簇索引一定会回表查询吗?
  85. 8521.什么是事务?
  86. 8626.死锁?
  87. 8731.like走索引吗?
  88. 8837.如何随机获取一条记录?
  89. 8942.sql语句的执行流程?
  90. 9045.MySql最多创建多少列索引?
  91. 9148.varchar(10)和int(10)代表什么含义
  92. 92Spring
  93. 934.Spring的优点?缺点?
  94. 948.IOC注入哪几种方式?
  95. 9512.Spring中的bean有几种scope?
  96. 9621.AOP动态代理策略?
  97. 9727.SpringMVC的优点?
  98. 9832.注入Java集合的标签?
  99. 9943.清空缓存是哪个注解?
  100. 10050.Spring事务传播行为有哪些?
  101. 1014.Mybatis优点?
  102. 10212.Mybatis动态sql?
  103. 10318.当实体属性名和表中字段不一致,怎么办?
  104. 10424.二级缓存如何配置?
  105. 105Nginx
  106. 1063.nginx 常用命令?
  107. 1078.如何精准匹配路径?
  108. 10814.负载均衡配置?
  109. 109Redis
  110. 1105.Redis和Memcache区别?
  111. 11111.Redis配置需要自己写?如何配置?
  112. 11217.字符串最大不能超过多少?
  113. 11325.AOF持久化?
  114. 11431.AOF优点?
  115. 11538.Redis过期键删除策略?
  116. 11641.Redis内存溢出控制?
  117. 11748.什么是缓存穿透?处理问题?
  118. 1182.为什么要使用Dubbo?
  119. 1196.说一下Dubbo服务注册流程?
  120. 1208.Dubbo架构的特点?
  121. 12112.配置优先级规则?
  122. 12213.如何用代码方式绕过注册中心点对点直连?
  123. 12315.如何禁用某个服务的启动检查?
  124. 12420.Dubbo有几种配置方式?
  125. 12525.一个服务有多重实现时,如何处理?
  126. 12632.自动剔除服务什么原理?
  127. 127SpringBoot
  128. 1287.SpringBoot启动方式?
  129. 12912.SpringBoot热部署方式?
  130. 13018.获得Bean装配报告信息访问哪个端点?
  131. 13125.不同的环境的配置文件?
  132. 13230.SpringBoot读取配置相关注解有?
  133. 1335.kafka的5个核心Api?
  134. 13415.kafka磁盘选用上?
  135. 13523.kafka压缩消息可能发生的地方?
  136. 1363.SpringCloud有哪些特征?
  137. 1377.Eureka是什么?
  138. 13812.什么是自我保护机制?
  139. 13919.断路器Hystrix的有哪些功能?
  140. 14028.Zuul的核心是?
  141. 14135.更多知识?
  142. 142二、基本信息(姓名/性别/毕业院校/电话/邮箱/居住地/期望地)
  143. 143四、工作期望&个人评价
  144. 144五、 是否有博客,个人技术栈点等