能力值:
( LV2,RANK:10 )
|
-
-
76 楼
厉害的人一般不想进TX,进TX的人不厉害,写程序是拿命换钱,何苦了,写程序达到TX的要求,估计你坐在家里不出门就可以赚N多的钱了。
|
能力值:
( LV2,RANK:10 )
|
-
-
77 楼
不要来那么多个人的一生行么 说的多造孽一样 说的比我之前在家挑粪泼菜还造孽 我起码还看见小菜儿郁郁葱葱的长起来 充满生机啊
猫猫 我告诉你 你老是一天感叹人生苦短还不如跟我做人工智能 这是你能永存的唯一办法
|
能力值:
( LV13,RANK:540 )
|
-
-
78 楼
 大哥,我也很想搞人工智能~~但咱没那本事,只能有机会向大哥请教了~~嘿嘿~~
人工智能太强大了,只能膜摆,真的~~就怕到时跟你学也学不会,就有负大哥你的了希望了,哈哈!我不想永存的,我只想好好的过好自己短暂的几十年,嘿嘿~~
|
能力值:
( LV4,RANK:50 )
|
-
-
79 楼
收藏了,按楼主的标准学去
|
能力值:
( LV4,RANK:50 )
|
-
-
80 楼
华山哥,人工智能做什么啊?我硕士方向就在搞人工智能,很搞不懂这块的应用在哪,望指点迷津。
|
能力值:
( LV2,RANK:10 )
|
-
-
81 楼
就是函数调用约定了。
stdcall调 用约定声明的语法为(以前文的那个函数为例):
int __stdcall function(int a,int b)
stdcall的调用约定意味着:1)参数从右向左压入堆栈,2)函数自身修改堆栈 3)函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸
以上述这个函数为例,参数b首先被压栈,然后是参数a,函数调用 function(1,2)调用处翻译成汇编语言将变成:
push 2 第二个参数入栈
push 1 第一个参数入栈
call function 调用参数,注意此时自动把cs:eip入栈
而对于函数自身,则可以翻译为:
push ebp 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复
mov ebp,esp 保存堆栈指针
mov eax,[ebp + 8H] 堆栈中ebp指向位置之前依次保存有ebp,cs:eip,a,b,ebp +8指向a
add eax,[ebp + 0CH] 堆栈中ebp + 12处保存了b
mov esp,ebp 恢复esp
pop ebp
ret 8
而在编译时,这个函数的名字被翻译成_function@8
注意不同编译器会插入自己的汇编代码以提供编译的通用 性,但是大体代码如此。其中在函数开始处保留esp到ebp中,在函数结束恢复是编译器常用的方法。
从函数调用看,2和1依次被push进堆 栈,而在函数中又通过相对于ebp(即刚进函数时的堆栈指针)的偏移量存取参数。函数结束后,ret 8表示清理8个字节的堆栈,函数自己恢复了堆栈。
cdecl调用约定
cdecl调用约定又称为C调用约定,是C语言缺省的调用约定,它的定义语法是:
int function (int a ,int b) //不加修饰就是C调用约定
int __cdecl function(int a,int b)//明确指出C调用约定
在写本文时,出乎我的意料,发现cdecl调用约定的参数压栈顺序是和stdcall是一样的,参数首先由有向左 压入堆栈。所不同的是,函数本身不清理堆栈,调用者负责清理堆栈。由于这种变化,C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。对 于前面的function函数,使用 cdecl后的汇编码变成:
调用处
push 1
push 2
call function
add esp,8 注意:这里调用者在恢复堆栈
被调用函数_function处
push ebp 保存ebp寄存器,该寄存器将用来保存堆栈的栈顶指针,可以在函数退出时恢复
mov ebp,esp 保存堆栈指针
mov eax,[ebp + 8H] 堆栈中ebp指向位置之前依次保存有ebp,cs:eip,a,b,ebp +8指向a
add eax,[ebp + 0CH] 堆栈中ebp + 12处保存了b
mov esp,ebp 恢复esp
pop ebp
ret 注意,这里没有修改堆栈
MSDN中说,该修饰自动在函数名前加前导的下划线,因此函数名在符号表中被记录为_function,但 是我在编译时似乎没有看到这种变化。
由于参数按照从右向左顺序压栈,因此最开始的参数在最接近栈顶的位置,因此当采用不定个数参数时,第一个 参数在栈中的位置肯定能知道,只要不定的参数个数能够根据第一个后者后续的明确的参数确定下来,就可以使用不定参数,例如对于CRT中的sprintf函 数,定义为:
int sprintf(char* buffer,const char* format,……)
由于所有的不定 参数都可以通过format确定,因此使用不定个数的参数是没有问题的。
fastcall
fastcall调用约定和 stdcall类似,它意味着:
函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序 压栈
被调用函数清理堆栈
函数名修改规则同stdcall
其声明语法为:int fastcall function(int a,int b)
thiscall
thiscall是唯一一个不能明确指明的函数修饰,因为 thiscall不是关键字。它是C++类成员函数缺省的调用约定。由于成员函数调用还有一个this指针,因此必须特殊处理,thiscall意味着:
参数从右向左入栈
如果参数个数确定,this指针通过ecx传递给被调用者;如果参数个数不确定,this指针在所有参数压栈后被压入堆 栈。
对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈。
|
能力值:
( LV2,RANK:10 )
|
-
-
82 楼
这个帖子全部看了一遍,感触很多啊,看来方向很重要,决定做好自己本行。
|
能力值:
( LV8,RANK:130 )
|
-
-
83 楼
一个月了。回过头来看这个帖子。觉得很娱乐。而且觉得风暴兄的幽默水平也不是盖的。赞一个。。
|
能力值:
( LV2,RANK:10 )
|
-
-
84 楼
说真的..看了感觉很佩服楼主...
|
能力值:
( LV2,RANK:10 )
|
-
-
85 楼
想不到被专业的腾讯公司评定为适合打游戏。嗷嗷
|
能力值:
( LV2,RANK:10 )
|
-
-
86 楼
 TX我就知道它很能赚大众的钱
|
能力值:
( LV2,RANK:10 )
|
-
-
87 楼
 腾讯如此面试的啦
|
能力值:
( LV2,RANK:10 )
|
-
-
88 楼
今天也去面试了,殷先生就是老虎???第一个面试我的就是他?我怎么感觉好严肃啊,太紧张了
|
能力值:
( LV3,RANK:20 )
|
-
-
89 楼
复试后也没问待遇,然后就没消息了,是不是没戏了?
|
能力值:
( LV17,RANK:1820 )
|
-
-
90 楼
一般是跟HR面试时才谈待遇的,也是最后一关面试
|
能力值:
( LV2,RANK:10 )
|
-
-
91 楼
 重哥啊重哥,在深圳的时候没回帖,再回味一下..
|
能力值:
( LV2,RANK:10 )
|
-
-
92 楼
楼主的经验还是很有意思的
不过,像TX这类公司发展成这样,最后跟一般的大型企业没什么区别,技术起家,销售发家
企业发展初,都是很注重人才的,后期就是营销手段最重要。
技术好的人也不要期望在某某处就要受到礼遇,在它们看来,挣钱才是第一的,什么核心技术都是可以花钱解决的
说到这里就要说了,企业用人,是看什么岗位需要,或是领导个人喜好,而不是根据你的技术特点,你要跟着企业走这个概念要树立,不然你们到大公司还会遇到这种情况,我以前面试的时候也不理解,时间长的就能看开了
中国的企业大致都是这样
此后略省一万字...
|
能力值:
( LV2,RANK:10 )
|
-
-
93 楼
高手如云呀,努力!!!
|
能力值:
( LV3,RANK:30 )
|
-
-
94 楼
默默的顶一下。
|
能力值:
( LV2,RANK:10 )
|
-
-
95 楼
哥啊,你都有5年的工作经验了,能不能带我啊,我跟你学。
|
能力值:
( LV2,RANK:10 )
|
-
-
96 楼
谢谢分享!!!!!!
|
能力值:
( LV3,RANK:30 )
|
-
-
97 楼
说的我对腾讯一点好感都没有了,哎!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
98 楼
泉哥最后跟腾讯HR谈的待遇是多少米啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
99 楼
是的,那个老罗是罗聪(不错不计算机专业出身),罗云杉写了本win32asm,他是好像浙大的具体可能我要看一下他的书了
|
能力值:
( LV2,RANK:10 )
|
-
-
100 楼
膜拜楼主,牛人一个!
向楼主学习,想大牛学习!
|
|
|