读书人

腾讯口试扯到原子操作上了面试官问

发布时间: 2013-04-02 12:35:26 作者: rapoo

腾讯面试,扯到原子操作上了,面试官问:interlock操作时,加不加volatile有什么区别
腾讯面试,扯到原子操作上了,面试官问:interlock操作时,加不加volatile有什么区别

我说不知道,这算是误导我的问法么?
当然我没告诉他我知道volatile会强制从内存刷新到cache,也不没告诉他IOS C++和MS针对volatile的处理不同。MS貌似开了指定的链接选项以后volatile会有required和release语义,也就是原子操作了。
因为感觉气氛不太对了,他不是想知道我了解什么好像在尝试问倒我,,,

泥马,我自己基础不扎实我承认,但是我回答不知道以后面试官没有其他问题了,这个算是误导我回答不出打发我走人么,,,


对了,之前有聊到interlock会锁总线,我记忆里边是锁定整个内存。但是又是问我会锁定多少内存,,,

后来直接开始问windbg怎么查内存错误,大概说了下要先找到被破坏的堆,然后找到具体被写坏的那块内存地址。然后找到使用了该地址的相关代码。
连着追问,,,最后一直盯着问怎么找到使用了该地址的相关代码,这时候我反应过来是要问倒我打发我走人了估计,应为我记忆里边能直接windbg很有把握定位这些错误的都是一方牛人了,,,(本人也就3年经验,大部分时间是非桌面开发,最近一年完全是做后台面的腾讯qq管家)

想问下各位,这块一般是怎么处理的。这个东西用语言描述可能有点麻烦,,,我一般是这样找:
1.搜索调用栈,看有没有这个地址直接作为参数
2.根据业务逻辑,和内存大小查找怀疑的对象是不是持有
3.在内存中搜索指定地址


顺便也打听下,腾讯的人3年经验左右都有这么牛逼?


此帖被抱怨,只是想了解下情况。
我自知基础很差,需要很多学习,只是想了解下是不是差到一定境界了,这么给人鄙视,,,

求拍砖,求大量鄙视,,,
知耻而后勇啊,,,
唉,,,


by the way: 今年深圳C++行情真的很差,,,

哥们你的基础还可以啊。。。
[解决办法]
大部分时间是非桌面开发,最近一年完全是做后台面的腾讯qq管家)?
你就是qq的?找人内推下吧
今年行情不好 岗位少
[解决办法]
听说管家今年社招开的工资,有点低。面试也只有2轮技术面。

其他部门面试都尼玛4-5轮技术面
[解决办法]
1. 实参有没有加volatile都好


//LONG __cdecl InterlockedIncrement(
// _Inout_ LONG volatile *Addend
//);
LONG a;
InterlockedIncrement(&a); //OK
LONG volatile b;
InterlockedIncrement(&b);//OK

2,是否锁总线就不一定,需要CPU支持。
[解决办法]
我怎么觉得InterlockedIncrement跟
__asm{ lock inc dword ptr[b]; } 

差不多呢

[解决办法]
反正互联网公司又不缺人, 肯定是挑的比较厉害, 而且水货多导致面试官已经形成惯性了, 一般人都看不到眼里.



[解决办法]
半年经验,只听过volatile,还是操作系统课上老师讲的,interlock操作都没见过,厉害厉害,我得重新审视一下自己了。。。
[解决办法]
我也面了这个职位。三轮下来面试官还挺友好的啊。可能我这人比较后知后觉,而且水平差,好多不会就换话题了哈
[解决办法]
目测撸主很NB~
[解决办法]
楼主面试的时候肯定是一副很吊的样子吧,但又算不上大牛,人家不爽,当然不想要你了,这根腾讯没关系,大公司嘛什么鸟没有。


[解决办法]
第二个问题 第一步 配上调试符号 gflags 开 ust 第二步 找到分配堆栈 下数据断点
[解决办法]


[解决办法]
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

[解决办法]
引用:
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!


膜拜赵老师。久闻大名。
----刚出道半年后辈敬上
[解决办法]
tx这种大公司,大部分都是一些能力平平,混日子的程序员,本身懂点又不是很多,自身很有优越感,很正常的。要不怎么叫腾讯养老院呢,谁有能力的人会窝在哪里去养老?
[解决办法]
嗯。说的不错的。
[解决办法]
volatile意思是告诉编译器这个值可能被其他东西更改,于是编译器很多优化会被关掉。

一般人知道这就行了吧。。。


debug难道不是visual studio里看看call stack吗?
[解决办法]
只用过gdb和valgrind的路过
内存错误?发生错误的时候会被中断,这时看看函数调用堆栈不就行了吗?再不行就用printf大法,把东西打出来看看。
[解决办法]
估计,是在问你ba命令,这就是一句话的事,你不说,他是紧张,呵呵呵
[解决办法]
引用:
by the way: 今年深圳C++行情真的很差,,,


不仅是C++,其他的都差,不是一般的差。。。
[解决办法]
好吧,我可以把自己埋起来了

[解决办法]
引用:

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!


赵老师教育的好!!顶起,唉,互联网大公司待遇神马的都很好,就是很挑,要求高!!
[解决办法]

[解决办法]

[解决办法]
今年怎么it行业都不景气啊。
[解决办法]
我现在学的是c++基础和STL,怎么看不懂这两个词。。蛋疼,,,
[解决办法]
我也不懂,volatile没用过,interlock没听说过,核心编程里的?
[解决办法]
小弟初来,也不懂,楼主比我强,祝你好运!
[解决办法]
引用:
真心没听过interlock

Synchronization Functions
The following functions are used in synchronization.



CancelWaitableTimer
CreateEvent
CreateMutex
CreateSemaphore
CreateWaitableTimer
DeleteCriticalSection
EnterCriticalSection
GetOverlappedResult
InitializeCriticalSection
InitializeCriticalSectionAndSpinCount
InterlockedCompareExchange
InterlockedDecrement
InterlockedExchange
InterlockedExchangeAdd
InterlockedIncrement
LeaveCriticalSection
MsgWaitForMultipleObjects
MsgWaitForMultipleObjectsEx


OpenEvent
OpenMutex
OpenSemaphore
OpenWaitableTimer
PulseEvent
QueueUserAPC
ReleaseMutex
ReleaseSemaphore
ResetEvent
SetCriticalSectionSpinCount
SetEvent
SetWaitableTimer
SignalObjectAndWait
TimerAPCProc
TryEnterCriticalSection
WaitForMultipleObjects
WaitForMultipleObjectsEx
WaitForSingleObject
WaitForSingleObjectEx




[解决办法]
难道是原子操作的意思?

[解决办法]

引用:
引用:tx这种大公司,大部分都是一些能力平平,混日子的程序员,本身懂点又不是很多,自身很有优越感,很正常的。要不怎么叫腾讯养老院呢,谁有能力的人会窝在哪里去养老?靠,技术能力强的人不是死了都想进IT名企吗?


说不好 每人能力不太一样 不过个人感觉想做的和深入怎么也要5年经验吧 虽然工作5年的菜鸟也很多.
[解决办法]
引用:
vczh.Iskandar<vczh@163.com> 21:19:16
当然我没告诉他我知道volatile会强制从内存刷新到cache,也不没告诉他IOS C++和MS针对volatile的处理不同。MS貌似开了指定的链接选项以后volatile会有required和release语义,也就是原子操作了。

这句话是错的
volatile从来不会枪支从内存刷新到cache
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:19:27

vczh.Iskandar<vczh@163.com> 21:19:31
也没有required和release的语义
这些都是C#才有的
C++没有
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:19:42
MS有个编译选项
会让他有require
这个还是在本群学习到的
vczh.Iskandar<vczh@163.com> 21:20:09
选项一般没办法让你随便改
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:20:11
http://msdn.microsoft.com/en-us/library/vstudio/12a04hfd.aspx
vczh.Iskandar<vczh@163.com> 21:20:16
而且这样做是很危险的
黄小非(331745659) 21:20:16
学习学习
vczh.Iskandar<vczh@163.com> 21:20:19
一旦换了个选项
然后别人用出问题来了
根本无从下手
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:21:10
,,,
黄小非(331745659) 21:21:15
最后确定那个面试官还是要故意为难你哇?
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:21:20
我这次去腾讯 给打击了反正
感觉上是
膜拜pongba!(1322085842) 21:21:31
悲剧呀
vczh.Iskandar<vczh@163.com> 21:21:37
话说
进行interlocked操作的时候
膜拜pongba!(1322085842) 21:21:42
也考数据结构那些吗?
黄小非(331745659) 21:21:50
企鹅这么NB
vczh.Iskandar<vczh@163.com> 21:21:53
加不加volatile我认为唯一的作用可能是
值在寄存器里面没给刷回来有可能就会有racing condition
膜拜pongba!(1322085842) 21:22:10
不过能到面试也是有一定实力的
黄小非(331745659) 21:22:17
UP
vczh.Iskandar<vczh@163.com> 21:22:55
interlock会锁整个内存吗
应该只有总线把,因为最多也就同步一下大家的cache
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:23:08
记忆中是
vczh.Iskandar<vczh@163.com> 21:23:44
话说我查找内存错误的方法是这样的
黄小非(331745659) 21:23:45
@VCZH.粉丝数组[0] 你面的是腾通的什么职位?
vczh.Iskandar<vczh@163.com> 21:23:58
首先我会有详细的unittest来保证一般情况下不会出现问题
于是如果出现了
我就可以用二分查找法
每次干掉diff里面的一部分
跑test
logn时间复杂度锁定目标(逃
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:24:30
这就是我想吐槽的
vczh.Iskandar<vczh@163.com> 21:24:33
有一次hook api的时候同事把他妈的api声明错了
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:24:34
qq管家
vczh.Iskandar<vczh@163.com> 21:24:38
然后stack整个都乱掉了
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:24:38
普通开发
vczh.Iskandar<vczh@163.com> 21:24:43


他妈的只能这么找
黄小非(331745659) 21:25:29
qq管家需要问到这种问题么》
VCZH.粉丝数组[0]<errorcpp@qq.com> 21:29:37
我感觉他是不想理我
入群求贞操(8030903) 21:30:05
为啥
vczh.Iskandar<vczh@163.com> 21:30:38
你看你这种就是没底气
我的一个同学去疼讯
去网易面试
跟面试官聊这聊着
“我他妈腾讯已经拿到offer了,我不怕你们不给我”
御虚舟北(314969051) 21:31:02

vczh.Iskandar<vczh@163.com> 21:31:15
后来他当然被拒了,然后去了CMU(不是@Yong
入群求贞操(8030903) 21:31:30
cmu
vczh.jeffchen(110086478) 21:31:32
那是有实力啊
御虚舟北(314969051) 21:31:36
哟, 哟西
入群求贞操(8030903) 21:31:37
是啥
未命名(755183957) 21:31:39
那是有实力啊
黄小非(331745659) 21:31:41
“后来他当然被拒了......”
御虚舟北(314969051) 21:31:53
因为他秒了面试官
未命名(755183957) 21:31:57
十动然拒
黄小非(331745659) 21:32:05
是,面试官被鄙视了



居然看到了我的名字.....激动一下

读书人网 >C++

热点推荐