首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
爱吃鱼的回宇同桌求求offer
门头沟学院 测试工程师
发布于广东
关注
已关注
取消关注
@HZer2000:
软牛科技逆向开发工程师一面
本来投递的是软牛科技的Cpp开发岗,然后HR表示Cpp已经招满,只剩逆向方向,然后我就转了逆向方向,之前也没有逆向相关的经验,只是懂点RISC-V汇编、反汇编过一些ELF可执行文件,但抱着试试看的想法,还是参加了笔试,笔试主要都是C/C++的基本知识点考察,只有一道跟逆向相关的直接空过了,后面交了笔试之后有一段时间没咨询HR,结果一直没有反馈,后面想起了这茬,问了一下HR才说笔试通过了,可以安排面试。自我介绍。对逆向岗位的了解有多少?看没看过《汇编语言》(王爽)?(回答看了一点,后面因为没有需求就没看了,主要看RISC-V指令集。)汇编语言中,函数是如何传参的?(这里他想问的可能是x86,但是我不太了解,于是我就答了RISC-V函数调用的时候参数是放到a0-a7寄存器里,超过的参数会放在栈上传递。)之前有没有调试过汇编?(答了在用gdb调试项目里的内核代码的时候,有时候会用gdb看看汇编指令,顺便也讲了RISC-V函数调用的过程,先压栈ra寄存器,然后压栈fp、sp寄存器,然后申请栈上变量,返回时恢复ra、sp、fp。)知道函数调用中的传参顺序吗?(答了第一个参数放到a0,以此类推直到a7,更多的参数放在栈上。)可能我没描述清楚,假设我有一个函数f(int a, int b, int c, int d),这四个参数在汇编的时候它们传到函数内部的顺序是什么样的,先传哪一个?(这个问题没听明白,不太清楚想问的是什么,于是就答了C++标准对于参数的求值顺序应该是没有指定的,由实现来决定参数的求值顺序,至于传入顺序,感觉就是从左到右传递,也即从第一个参数开始传递。)你对C++的函数调用约定了解过么?(答了没了解过。这个之前没有了解过,当时没答上来,后面搜了一下才知道原来就是之前看好多函数声明前面带着的符号__cdecl之类的一类符号就叫C++函数调用约定,涨了一波知识。)你说你是通过自学的方式学习C++的,你看过C++的哪本书?(答了《C++程序设计语言》(1-3部分)。)说说C和C++有哪些区别?(答了C++引入了一些抽象机制,比如类的继承多态,模板,移动语义,lambda表达式,仿函数等。)说说在笔试题里如何区别重载函数的关键字你为什么要选择virtual?(答了因为如果父类有virtual函数,派生类可以通过重载这个虚函数,来实现多态机制,也即在通过父类引用或指针来调用这个虚函数的时候,会根据实际引用或指向的实参不同而分别调用不同的实现,这样感觉能实现函数重载。后面复盘的时候才发现好像把函数重载和子类重写父类函数两个概念给搞混了,脑子抽了。)假设父类里面有个函数f参数是int,派生类中有个同名函数参数是const int,那子类中这个函数会覆盖掉父类中的函数么?(答了不会,因为它们的参数类型不同。当时真是没反应过来,后来才回过神来,对于一个实际的int参数,编译器根本没办法区分是调用const int还是int,所以子类的实现应该可以覆盖掉父类的实现的。)有了解过C++重载是怎么实现的么?(答了C++编译器会把参数的类型也编码到函数的名字里,这样即使函数名字相同,但它们的参数列表不同,编译器也会认为它们是不同的两个函数。)假设在全局定义了一个函数f参数是int,另一个函数f参数是const int,那么这两个函数实现重载了么?(答了可以实现重载,因为它们的参数类型不同。面试官继续问这个问题,应该就是确认一下之前那里我确实答错了,实际上应该是不算重载的,因为没法区分。)讲讲构造函数和析构函数的调用顺序?(答了构造函数先调用每个成员的构造函数然后执行自己的构造函数,最后构造函数返回,成功构造,析构的话先调用自己的析构函数,然后调用成员的析构函数,所有析构结束之后返回,成功析构。这里忘说了继承情况下构造时应该首先执行父类的构造函数,析构时最后还需执行父类的析构函数。)假设一个类里有多个成员,那么这多个成员的构造函数调用顺序是怎么样的?(答了按照成员在类声明中的声明顺序来调用的。)假设一个类没有数据成员,那么这个类在内存中占大小多大?(答了如果有虚函数的话会占一个指针大小的空间,如果没有的话所占空间是0Byte。后面查了一下发现所占空间不是0B,是1B,是因为C++标准规定完整对象的大小不能是0,为了区分不同的对象,所以最小只能是1,但是在继承中,空类可以不占空间。)你刚才说如果有虚函数,那所占空间是个指针大小,那么具体是多大呢?(答了地址空间是32位的话就是4B,64位的话就是8B。)假设我有一个结构体第一个成员是int,第二个成员是long,这个结构体在32位机器和64位机器上所占空间是一样大的吗?(答了标准规定long大小是大于等于int,在64位机上long和int应该是一样大的,都是4B,在32位机上long应该是比int大的,但是考虑到内存对齐的话,可能两个结构体是一样大的。这个地方后来查了一下也答错了,64位机上long比int大,long是8B,int是4B,32位机上long和int一样大都是4B。)如果想要这两结构体在32位和64位机上大小一致,可以使用什么策略?(答了可以用内存对齐来实现。)之前是否使用过VisualStudio这个开发工具?(答了,之前使用过,现在使用CLion。)对内存的话有什么了解呢?(这个问的有点宽泛,就问了具体想问什么,面试官也没继续纠结,转而开启下一个问题。)看你玩过操作系统,那你对PE文件有了解么?(答了没有了解,但是猜到可能是Windows上的可执行文件的格式,于是就简单讲了讲Linux系统的ELF可执行文件格式,也不太懂,就大概模糊的讲了一下。)讲讲堆和栈的区别?(堆上分配的对象需要手动释放,栈上分配的对象会自动释放,堆上一般分配大的对象通过指针访问,栈上一般不分配大的对象,栈是从高地址向低地址增长。)了解什么是栈溢出和堆溢出吗?(答了操作系统会通过在栈的上下设置不能访问的页面作为哨兵来检测栈溢出,当访问的地址到了这两个哨兵页面就会产生缺页中断,操作系统就会发现产生栈溢出,从而执行对应的处理策略,而堆溢出的话有可能是在堆上分配的对象过多或者对象过大,或者是产生了内存泄漏,从而使得堆空间被用尽,导致发生堆溢出。)平时会使用什么方法来避免这些情况?(这个的话因为平时也没怎么遇到过,所以就岔开话题,答了xv6是如何检测栈溢出和堆溢出的,栈溢出是通过哨兵页面,堆溢出的话之前没处理过。)假如在Windows上编写多线程程序,开多少个线程是比较好的?(这个直接给我问住了,一下不知道咋答了,后来就答了一个Amdahl定律和CPU核心数限制同时并行执行的线程数,还提了一嘴因特尔的超线程。)之前有了解过死锁吗?(答了死锁产生的四个条件,然后避免死锁可以破坏其中任意一个条件,举了GPU调度线程执行时提前分配好了线程需要的所有资源,从而破坏占有且等待条件从而可以避免死锁,还有使用银行家算法在进程申请资源时检测在分配资源后系统是否会进入危险状态,如果会进入危险状态则不分配资源,从而避免死锁。)看你之前学习过一些汇编语言,你对汇编语言怎么看待?反问环节。一面面试官说是感觉答得还可以,所以去叫部门主管来继续面一次,应该也算是二面了。对逆向方向是否有兴趣?可以去看一下《加密与解密》前八章,如果感兴趣后面可以再聊。看到你参加了ACM这个竞赛你主要负责哪些方面的算法?(动态规划和图论相关的算法都学习过,还学过一些基础的计算几何。)之前读过或者手写过汇编级别的程序么?(答了在做项目的时候,在上下文切换的时候需要手写汇编代码,然后用户进程陷入内核的话需要读汇编代码。)讲一讲线程上下文切换的时候做了什么?(答了操作系统在内核中进行内核线程的切换的时候,首先保存当前内核线程的callee保存的寄存器,然后保存返回地址ra以及栈顶指针sp,之后将之前暂停的另一个线程的保存的寄存器加载到CPU中,从而实现线程的上下文切换,而用户进程陷入内核的时候,不能只保存callee保存的寄存器,还需要保存所有可用的寄存器,以及指向页表的寄存器,指向用户栈的寄存器,pc寄存器等寄存器,才能完成陷入内核的操作,在从内核退出前再次恢复之前保存的寄存器,从而实现了,用户进程陷入内核和恢复执行。)讲一讲进程陷入内核态的时候用到了哪些汇编指令?(答了ld,sd,jalr,ecall。)看你这个项目是个操作系统内核,你平时怎么调试这个内核?(答了使用gdb server调试。)你平时都会使用什么调试方法?(答了会打断点,然后查看backtrace,然后使用printf语句。)假如你的程序中有内存越界问题或者内存泄漏,有没有什么方法来排查?(这两个问题都不太会,之前没了解过,所以就大概乱答了一下。)汇编语言如何实现条件分支?(答了RISC-V提供了beq之类的分支语句,通过判断两个寄存器的值是否相等来决定是否跳转到指定地址执行,从而实现分支以及循环。)循环一般有三种写法,你觉得哪种效率最高?(答了我觉得while(expr){}这种写法效率最高。)函数调用中,栈是如何变化的?(答了先把ra、fp、sp寄存器入栈,然后再保存一些在函数中用到的callee保存寄存器,然后改变栈指针分配栈上的变量,返回前再将之前保存的寄存器恢复即可。)反问环节。总结:挺多问题没太答好,而且可能项目技能和岗位相关性不太高,这家公司开发主要是在Windows上做逆向开发,Linux上的一些知识就不太有用,所以后面挂了也是可以理解的。
点赞 15
评论 8
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
07-31 09:32
上海交通大学 嵌入式软件开发
不吹不黑,评价现在的硬件职业现状
一、单片机工程师单片机工程师负责设计、开发与维护基于单片机的电子系统,需具备扎实的电子技术基础及编程技能。他们负责设计、开发和维护基于单片机的电子系统,确保系统的稳定性、可靠性和性能。单片机工程师需要具备扎实的电子技术基础,熟悉各种单片机型号及其应用,同时还需要掌握相关的编程和调试技能。薪资待遇方面, 单片机工程师的薪资水平因地区和公司而异。一般来说,大型科技公司或知名高校提供的薪资水平相对较高。此外,随着经验的积累和技能的提升,单片机工程师的薪资也有望逐步增长。发展前景方面, 单片机工程师在嵌入式开发领域具有广阔的发展空间。随着物联网、智能制造等新兴领域的快速发展,单片机工程师的需求量也在不...
点赞
评论
收藏
分享
07-29 01:29
华南理工大学 演员/配音/模特
mentor:你是猪吗?
实习最崩溃瞬间——亲手写的代码和日志被无情删除,还被骂是猪。本人实习写过一份代码,里面有两份日志(存放在mentor指定的路径下面),记录了每一条被处理过的数据。然后我昨天做另一个方案的时候,需要用到我之前保存到的日志,我就写《将之前的日志信息作为这次的输入》,因为我记得很清楚,只要之前有处理数据,那就一定有日志,而且有两份。mentor看了我的方案以后,以下是我和mentor的对话:mentor:“你是猪吗?你太爱想当然了,什么都假设最理想的情况,你哪来的日志。”我:“上一份代码是我写的,我确认有保存了日志”mentor:“为什么确认”?我:“因为代码是我写的,我还check过日志”ment...
食堂在逃干饭王:
那你往mt身上拱啊
如何快速融入团队?
点赞
评论
收藏
分享
06-26 17:24
已编辑
宁波大学 golang
某为od岗位
hr为了KPI演都不演了
迷失西雅图:
别给,纯kpi,别问我为什么知道
点赞
评论
收藏
分享
06-12 16:28
门头沟学院 后端
不是,这是真实的吗
Gaynes:
查看图片
点赞
评论
收藏
分享
07-30 11:55
门头沟学院 Java
腾讯秋招挂了两次
腾讯秋招挂了两次了,还能在复活吗?有没有wxg的佬捞捞我呀,我想和腾讯签订卖身契呜呜呜呜,我要做鹅孝子!
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
百度提前批,三面被推迟一周,喜提秋招第一凉
4405
2
...
虾皮秋招一面
3625
3
...
干活最少的实习生因为长得漂亮转正了
2891
4
...
7.30滴滴提前批一面凉经
2803
5
...
QQ提前批一面凉经
2649
6
...
百度提前批 三面
2587
7
...
他拿大厂SSP Offer打牌是什么概念啊?25届双非之光
2397
8
...
7.30百度提前批一面
2193
9
...
上班一周,工资还没拿,先欠公司两千
1770
10
...
百度7.30二面
1606
创作者周榜
更多
正在热议
更多
#
简历上的经历如何包装
#
25838次浏览
749人参与
#
秋招被确诊为……
#
162192次浏览
725人参与
#
中兴秋招
#
204388次浏览
2284人参与
#
工作中哪个瞬间让你想离职
#
61533次浏览
554人参与
#
你最近一次加班是什么时候?
#
70917次浏览
350人参与
#
和同事相处最忌讳的是__
#
22258次浏览
230人参与
#
26届的你,投了哪些公司?
#
39406次浏览
443人参与
#
你遇到最难的面试题目是_
#
15830次浏览
195人参与
#
我对___祛魅了
#
44795次浏览
417人参与
#
如果校招重来我最想改变的是
#
271603次浏览
2849人参与
#
地平线求职进展汇总
#
52551次浏览
369人参与
#
你跟室友的关系怎么样?
#
6383次浏览
97人参与
#
如果可以选,你最想从事什么工作
#
565574次浏览
4699人参与
#
你最讨厌面试问你什么?
#
26570次浏览
295人参与
#
你最希望上岸的公司是?
#
134369次浏览
699人参与
#
什么样的背景能拿SSP?
#
33472次浏览
207人参与
#
如何快速融入团队?
#
15437次浏览
190人参与
#
柠檬微趣工作体验
#
6585次浏览
40人参与
#
秋招前后对offer的期望对比
#
302908次浏览
2229人参与
#
字节跳动工作体验
#
462357次浏览
4649人参与
#
打工人的精神状态
#
70903次浏览
1145人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务