前言
面试经验十分有帮助
腾讯-基础开发
一面
面试时间稳定一小时,并且面试官问题明显是有安排的,因此不要在一项上回答太多占用时间,面试官对你问的问题越多,你回答的越好。才能稳,如果仅是回答的好但问的不够多也可能了解不全。
大概顺序:c c++ java 操作系统 网络 数据结构
c的inline、static、栈溢出一直问到了如何绕过防护..c++的虚表、java的string实现、为什么要不可改变、内存释放、封箱拆箱、线程进程、内核中对线程进程的处理、OSI网络知识(很不熟,直接没问)、数据结构、简单算法。inline hook。
回答不好的问题:
1
osi网络相关…这个欠缺太严重了直接好好去听课看课本吧!必须好好学这个!!!!
2
为什么安卓方法数限制
dalivk字节码中invoke,中的method reference index (16 bits)方法索引只有16位,即65536个。但是检测这个错误的过程在生成dex的过程中。
3
单向链表判断环
我给出的方法是使用hash表记录遍历过的对象地址,更好的实现是使用俩个指针一快一慢,有环快的一定遇到慢的,无环快的遇不到慢的。
4
操作系统内核对线程的处理
据面试官介绍是一样的处理分配,因此俩个进程的线程id一定不会重复。
二面
回答的觉得还可以的印象不深了…回答不好的重点记下补下:
ps整理完发现这不会的有点多,心里一凉
1
Rtti-当时这部分还没看
大概总结下:
2
java虚拟机内存管理–同样..没看过..尬的很
3
c++内存溢出、多次释放的检测。现想的解决方案,有大佬推荐的工具一定要研究下他的源码:valgrind
我只回答出了hook系统调用检测堆分配的内容、动态调试某块内容的回收释放时机。但是面试官问我一秒某一堆对象有上万次的计数怎么判断泄露或多释放的点
参考:https://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/index.html
我一直在思考怎么轻量级的解决这个问题,但是始终无法解决到底哪里引用了对象内存的问题。
看了valgrind的重量级实现倒是感慨其工程量…
实际上直接匹配申请和释放处即可。最终会剩下未释放的位置,引用错误与重复释放会直接报错。
4
Climbing Stairs
开始直接回答dfs-最暴力的方法
后来走路上突然想起这肯定有数学规律…
任意一步都为f(n)=f(n-1)+f(n-2)
因为第一步走1或2剩下的就是已有的结果了…
动态规划与上述斐波那契算法都行….前者占空间保留结果
5
c++ map使用迭代器删除
这个我当时没有理解他的考点在哪…
360-安卓安全产品
前言
面完直接被拒绝…..
经历
以下是被怼的内容
1
android基本开发….忘完了…我当时瞎答了一堆…不确定的就不要瞎说了…很容易造成坏印象
activity周期:onCreate、onStart、onResume、运行、半可见-onPause、不可见-onStop、被销毁-onDestroy
service的启动方式:
startService 启动的服务:主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService;
bindService 启动的服务:该方法启动的服务可以进行通信。停止服务使用unbindService;
2
android-ndk开发
必须释放的引用:
jclass
jobject
各类数组jxxxArray
jstring
无需释放:
jmethodid
3
smali寄存器个数
65536个寄存器,一个方法根据dex结构来看的话最大也是2字节65536个寄存器…smali相关问题还是应该在dex格式与字节码上找答案。
之前那个方法数限制是smali字节码上的问题
4
java接口中变量是public static final的
实现接口或继承抽象类的子类必须实现接口的所有方法或抽象类的所有抽象方法。抽象类作为一个基本不变的实现被继承,接口用于补充实现。
快手-移动安全
一面
狂怼vmp的真实实现,并鄙视了现有的vmp实现
要我分析市场的实现
如何针对性的保护核心算法…
字节跳动
一面
编程没写好
二面
项目中源码的细节。有些忘了
三面
编程没写好,编程习惯问题,格式与命名