国产激情久久久久影院小草_国产91高跟丝袜_99精品视频99_三级真人片在线观看

面試:有時候還需要多些自信

時間:2024-09-15 00:16:42 綜合指導(dǎo) 我要投稿
  • 相關(guān)推薦

面試:有時候還需要多些自信

今天遇到了個面試,其中有的問題我當時還真不能確定,遂發(fā)出來,大家分享。

面試:有時候還需要多些自信


先大致講一下流程,一面還挺順利,游刃有余;二面就有些緊張了,是個額頭頭發(fā)不多但是顯得很精干的男士(下文簡稱為a)。


只摘錄其中的部分我很“為難”的地方:


a:string是值類型是引用類型?


me:(我心想string是class,肯定是)引用類型


a:那我有個方法,參數(shù)為string,我在里面改變他的值,原來的會變嗎?


me:(這個我當時很猶豫,雖說string平時用,但是還真考慮過這個。我要是說會不會變吧,豈不是自打嘴巴?string是引用類型,怎么還值專遞呢?)


當時我就記得園子里有句話:string是引用類型,但是用起來像值類型。我就說的是不變。


下面上一段代碼分析一下:





static  void  foo(string    s)
{
s  =  "bbb" 
}
string  s  =  "aaa" 
foo(s) 
console.writeline(s) 
這個確實是不會變的,調(diào)用完之后還是“aaa”,這是為什么呢?




1  string  s  =  "aaa" 
  2  00000051  8b  05  88  20  c0  02  mov                  eax,dword  ptr  ds:[02c02088h]  
  3  00000057  89  45  b8                  mov                  dword  ptr  [ebp-48h],eax  
  4          92:                          foo(s) 
  5  0000005a  8b  4d  b8                  mov                  ecx,dword  ptr  [ebp-48h]  
  6  0000005d  e8  a6  af  d4  ff      call                ffd4b008  
  7  00000062  90                              nop                            
  8          93:                          console.writeline(s) 
  9  00000063  8b  4d  b8                  mov                  ecx,dword  ptr  [ebp-48h]  
10  00000066  e8  95  24  3f  67      call                673f2500  
11  
12  
13  
14  
15  
16    static  void  foo(string    s)
17          82:                  {
18  00000000  55                              push                ebp    
19  00000001  8b  ec                        mov                  ebp,esp  
20  00000003  57                              push                edi    
21  00000004  56                              push                esi    
22  00000005  53                              push                ebx    
23  00000006  83  ec  30                  sub                  esp,30h  
24  00000009  33  c0                        xor                  eax,eax  
25  0000000b  89  45  f0                  mov                  dword  ptr  [ebp-10h],eax  
26  0000000e  33  c0                        xor                  eax,eax  
27  00000010  89  45  e4                  mov                  dword  ptr  [ebp-1ch],eax  
28  00000013  89  4d  c4                  mov                  dword  ptr  [ebp-3ch],ecx  
29  00000016  83  3d  e0  8c  7b  00  00  cmp                  dword  ptr  ds:[007b8ce0h],0  
30  0000001d  74  05                        je                    00000024  
31  0000001f  e8  1d  91  57  68      call                68579141  
32  00000024  90                              nop                            
33          83:                          s  =  "bbb" 
34  00000025  8b  05  90  20  c0  02  mov                  eax,dword  ptr  ds:[02c02090h]  
35  0000002b  89  45  c4                  mov                  dword  ptr  [ebp-3ch],eax  
36          84:                  }
37  0000002e  90                              nop                            
38  0000002f  8d  65  f4                  lea                  esp,[ebp-0ch]  
39  00000032  5b                              pop                  ebx    
40  00000033  5e                              pop                  esi    
41  00000034  5f                              pop                  edi    
42  00000035  5d                              pop                  ebp    
43  00000036  c3                              ret                            

可以看到第2行將字符串的地址寫入到 eax,然后寫到堆棧的【ebp-48h】處;


調(diào)用foo方法前,放到ecx中。


在方法foo中,可以看到又經(jīng)ecx放到了【ebp-3ch】處;


在執(zhí)行s=“bbb”的時候,同樣將新字符串的地址放到了【ebp-3ch】處,但是原來的字符串并為更改,只是更改了臨時變量s的引用。


所以在調(diào)用完方法foo之后,原來的字符串還是“aaa”,沒有改變。


所以這個時候我回答不變是對的,但是我不知道為什么string的傳遞是類似于值傳遞的,有點運氣了。


接下來,他又問


a:那如果我有個類,里面有string成員,我同樣改變他的值,外面的會變嗎?這個時候我回答的是可以改變。


是不是這樣呢?同樣,上代碼:





1  class  c1
  2          {
  3                  public  string  s1="aaa" 
  4          }
  5  
  6    static  void  foo(c1      c1)
  7                  {
  8                          c1.s1    =  "bbb" 
  9                  }
10  
11    c1  c1  =  new  c1() 
12                          foo(c1) 
13                          console.writeline(c1.s1  ) 





1    foo(c1) 
  2  0000006c  8b  4d  b8                  mov                  ecx,dword  ptr  [ebp-48h]  
  3  0000006f  e8  94  af  7f  ff      call                ff7fb008  
  4  00000074  90                              nop                            
  5          93:                          console.writeline(c1.s1  ) 
  6  00000075  8b  45  b8                  mov                  eax,dword  ptr  [ebp-48h]  
  7  00000078  8b  48  04                  mov                  ecx,dword  ptr  [eax+4]  
  8  0000007b  e8  80  24  52  67      call                67522500  
  9  
10  
11  
12    static  void  foo(c1      c1)
13          82:                  {
14  00000000  55                              push                ebp    
15  00000001  8b  ec                        mov                  ebp,esp  
16  00000003  57                              push                edi    
17  00000004  56                              push                esi    
18  00000005  53                              push                ebx    
19  00000006  83  ec  30                  sub                  esp,30h  
20  00000009  33  c0                        xor                  eax,eax  
21  0000000b  89  45  f0                  mov                  dword  ptr  [ebp-10h],eax  
22  0000000e  33  c0                        xor                  eax,eax  
23  00000010  89  45  e4                  mov                  dword  ptr  [ebp-1ch],eax  
24  00000013  89  4d  c4                  mov                  dword  ptr  [ebp-3ch],ecx  
25  00000016  83  3d  e0  8c  13  00  00  cmp                  dword  ptr  ds:[00138ce0h],0  
26  0000001d  74  05                        je                    00000024  
27  0000001f  e8  ad  90  6a  68      call                686a90d1  
28  00000024  90                              nop                            
29          83:                          c1.s1    =  "bbb" 
30  00000025  8b  05  90  20  d7  02  mov                  eax,dword  ptr  ds:[02d72090h]  
31  0000002b  8b  4d  c4                  mov                  ecx,dword  ptr  [ebp-3ch]  
32  0000002e  8d  51  04                  lea                  edx,[ecx+4]  
33  00000031  e8  9a  16  45  68      call                684516d0  
34          84:                  }
35  00000036  90                              nop                            
36  00000037  8d  65  f4                  lea                  esp,[ebp-0ch]  
37  0000003a  5b                              pop                  ebx    
38  0000003b  5e                              pop                  esi    
39  0000003c  5f                              pop                  edi    
40  0000003d  5d                              pop                  ebp    
41  0000003e  c3                              ret                            

在執(zhí)行30行的時候eax是01dbc268,其內(nèi)存的內(nèi)容拷貝出來是:





54  0b  a0  67  04  00  00  00  03  00  00  00  62  00  62  00  62  00  00  00  00  
00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00

可以看出這是一個string的實例,前面的67a00b54是mt的地址,后面的00000004是字符串的實際長度,00000003是字符串有效內(nèi)容的長度,


后面的3個0062是連著三個字符‘b’,看來確實是字符串“bbb”。再后面00的就不管了。


接著依次執(zhí)行31和32行,則ecx是01d9eec8,edx是01d9eecc;據(jù)猜測ecx應(yīng)該是c1的地址,把內(nèi)存考出來看一下:





d0  99  41  00  94  ee  d9  01  00  00  00  00  24  43  9d  67  0a  00  00  00  70  07  a0  67  
00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00

而此時edx就應(yīng)該是s1的地址,可以看出edx就比ecx相差4,所以01d9ee94就應(yīng)該是字符串“aaa”的地址,同樣考出來看看:





54  0b  a0  67  04  00  00  00  03  00  00  00  61  00  61  00  61  00  00  00  00  00  00

可以看出,“aaa”和“bbb”的頭幾個部分完全是一樣的,就是后面的一個是61,一個是62.


那么問題很簡單了,知道把c1里的字符串地址從01d9ee94換成01dbc268就算ok了。事實上33行就是做這個事情的。


看一下執(zhí)行完33行后的c1的內(nèi)容:





d0  99  41  00  68  c2  db  01  00  00  00  00  24  43  9d  67  0a  00  00  00  70  07  a0  67  
00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00

可以看出,確實是換了。


所以到這里,問題解決了。

【面試:有時候還需要多些自信】相關(guān)文章:

面試后還需要做的……10-21

面試,自信是關(guān)鍵09-22

面試結(jié)束后還需要注意哪些問題10-03

面試技巧:自信是關(guān)鍵10-09

面試別不自信07-04

自信,敲開面試之門06-04

面試:自信 細節(jié) 執(zhí)著10-12

面試技巧:自信、細節(jié)、執(zhí)著07-10

自信是面試制勝的關(guān)鍵10-14

進度顯示筆試階段還需要那個所謂的面試預(yù)選嗎08-08