阿里云一面

这周面了两个部门,基本都是根据简历问答,不具参考性,有一个behavior question 问了半小时(晕了)。。。
主要语言c++

遇到几个刁钻问题我没回答上来的:
1.  想让虚表指针越界, 怎么操作?或者发生在什么情况下?:没答上来
或者问的是 虚函数表中 让地址指向错误的位置(指向的位置不是对应的虚函数地址),该怎么操作?
2. rpc 丢包怎么办? 答:如果 这个rpc是基于tcp的,那会发生超时重传?
发生在应用层还是内核层? 答:内核吧
3. stl vector 扩容的时候,之前容器中的元素会不会析构? 强调是元素,不是容器

如果有朋友会的话讨论一下,我自己网上搜没得到准确答案。。谢谢
#面经##阿里云##C/C++#
全部评论
第2个,tcp的所有操作都是在内核完成的,第三个,vector扩容的思路是申请一个新的二倍大小空间,然后把原来的复制过去,然后析构掉原本的空间。所以旧的元素是先被复制一个新的然后析构,第一个我有个猜想就是基类指针用static_cast往下强转,然后派生类新增了一条虚函数,但基类没有,此时用强转之后的指针访问派生类新增的虚函数是不是会越界啊。
1 回复 分享
发布于 2022-02-28 10:18
behavior question 问什么呀
点赞 回复 分享
发布于 2022-02-19 23:27
问题2是不是问的应用层还是传输层,内核层是个啥。
点赞 回复 分享
发布于 2022-02-20 10:27
蹲一个问题1 3的答案,我也没见过这俩问题...
点赞 回复 分享
发布于 2022-02-21 10:17
3肯定会析构的吧
点赞 回复 分享
发布于 2022-02-21 22:34
第3个应该是不一定吧。 vector在内存中是连续的,在当前连续内存上,空间够的话,扩容时,不容易原有元素。如果当前连续内存不够的话,编译器会找块足够的连续空间,然后把原有元素移动到新空间,同时释放掉原有空间,这样释放时,应该会调到元素的析构。
点赞 回复 分享
发布于 2022-02-28 11:41
第一个,直接获取虚表指针地址,然后转函数指针再设置偏移越界,再调用该函数就能手动越界了吧?
点赞 回复 分享
发布于 2022-03-05 12:43
。第一题是让你在编译期做一个越界还是运行时做呀..运行时的话应该将变量前八个字节指向的内容乱改就行 第三题会析构,会把旧数组元素复制到新数组,然后析构旧数组元素,在源码里可以看到会调用destroy函数。不过要是问为啥是复制到新数组而不是移动到新数组我就不会了..
点赞 回复 分享
发布于 2022-04-18 19:54

相关推荐

头像 会员标识
02-19 13:42
门头沟学院 Java
运气爆棚福星高赵:清✌️不用很在意项目,八股算法是重点,八股算法说的过去绝对要您
点赞 评论 收藏
分享
03-07 17:32
已编辑
中南大学 C++
是只吗喽:淘天和米哈游之间只隔了15分钟,有点极限了xd
点赞 评论 收藏
分享
评论
5
17
分享

创作者周榜

更多
牛客网
牛客企业服务