wxg客户端面经

上岸了,回馈社会
更新中

一面(约1h)
拷打项目
你的登录怎么做的(WebView回调检测登录成功,html提取用户信息)
经过实习你有没有学到别的方法(F12抓包,走一遍登录流程看发了什么请求,返回了什么数据,里面可能有token)
之前贴吧中有人发一个链接,用户点击后会自动发一个逆天评论,怎么解决这个问题(请求中带token)
token怎么来(登录时服务端返回,保存用户信息,过期时间等信息,可以用token+refresh的双token模式)

拷打实习
介绍一下实习
为什么用到Native Hook(监听登录)
Native Hook方式?(PLT hook, inline hook)
inline hook原理?(改指令,跳转到代理函数)
PLT Hook的原理?(修改GOT表)
改什么?(目标函数的绝对地址)
PLT Hook使用条件(目标函数为外部引用)
怎么保证一定能Hook到?也就是你要在实际执行前hook。(Hook dlopen,加载目标so的时候自动hook)
Hook时机?(attachBaseContext)
讲讲Java层Hook?(反射修改ClassLoader,优先加载自己的dex)

场景题
native层怎么监控数组越界(写一个数组工具类)
那已有的代码呢(hook malloc)
hook了怎么改(不知道,提示了mprotect后说把分配内存后面的区域设为不可访问,这样越界会有异常,能被捕获)
设置多大的范围?(不知道)

八股
安卓中内存泄漏了解吗(Service,ThreadLocal,长生命周期持有短生命周期引用)

算法题
解决memcpy覆盖的问题

二面(约1h30min)
拷打实习
讲讲替换ClassLoader实习hook的细节
PLT Hook的原理
有哪些先决条件(外部引用)
为什么同一个so里的Hook不到(调用不走PLT和GOT表)
还有哪些Hook方式(Inline Hook)
什么原理(插跳转指令)
还有什么方法(不知道)
外部引用地址是怎么填到GOT表中的(加载so的时候会记录已加载函数的地址)
so函数地址是怎么来的(支支吾吾)
ELF加载过程(dlopen把so加载进内存解析,具体啥结构不记得了)
改符号导出表可以吗(哦哦可以,dlsym应该就是通过这个获取函数地址的)
编译打包优化展开讲讲
AB实验了解吗(没有了解)
AB实验原理是什么(对照实验)
对照实验原理是什么(控制变量观察结果)
观察到B比A点击率高0.1%,可以认为B比A好吗(不能,有偶然性)
那要百分之多少才没有偶然性(不知道)

拷打项目
有啥难点吗(没啥难点)
为什么用的人这么多(口口相传)

八股
请求到服务器到返回结果,经历了哪些事情
DNS解析是谁做的(操作系统)

场景
用过微信网页传输助手吗,怎么做一个消息收发的功能(可以用WebSocket)
服务端你会怎么设计(保存最近几十条消息,带id)
客户端呢(长轮询,服务端收到消息后如果对方在轮询中就返回消息,客户端上线主动同步消息,告诉服务器本地最新消息id,然后服务器推送后续消息)
你是怎么想到的,了解过吗(没了解过,yy出来的)

闲聊
为什么没转正
准备读研吗,为什么不读

算法题
第k大
数位和再数位和

三面(约1h 45min)
看你简历很优秀,奖项排满了,学习成绩怎么样(一般)
为什么不转正
在腾讯实习才系统学安卓?(是的)
你做了笔记?看看(内部维基上)
学了安卓有什么收获?(学到很多,也更了解kotlin了)
你提到了kotlin,那说说kotlin协程和线程的区别(语言级线程,有3个调度器决定协程)
用Main调度器会创建线程吗(不会)
对比普通线程处理上下文,协程是怎么处理的?(也有上下文,但比线程少点)
你有没有研究过kotlin协程的底层原理(io操作或suspend函数时通过挂起让出cpu)
会挂起线程吗(不会)
怎么挂起的(也是保存上下文吧)

讲讲怎么实习优化编译打包速度的
你觉得实习做的最有挑战的事是什么(native hook)
展开讲讲
你用PLT Hook的时候也顺便把inline hook也了解了吗(是的,安卓的Hook方式都了解了)
有写文章吗(有)(投屏展示)
有遇到困难吗(cpp编译成elf时函数名字改写)
再讲讲替换ClassLoader的Hook方式?

知道Apk包含哪些内容吗(classes.dex,lib,res,assets,resource.arsc索引)
有没有用打印log去看过arsc索引文件有哪些东西(有,用mt看过,包含各种id和路径,以及color和string)
从你的角度为什么要用这种方式去组织资源(便于访问,图片方便快速定位,color和string这种用的多的每次都从文件里读就慢了)
他不会一次性读出来吧,你知道他怎么读的吗(不知道)

场景题
微信14亿用户信息,不用数据库,设计一个用纯文件去保存的方案(目录+数据)
如果要修改信息呢(可以用链表存kv对)
你得分页吧,基于这种分页结构,你还会怎么去完善它(同一个用户的信息尽量在同一页)
这样每页都会有碎片,你不能每次都开一个新页吧,太浪费了,怎么找空页(用一个链表按顺序记录有碎片的页)
这是一个好的设计。那并发读写效率差怎么解决(分表)
怎么分(每一百万个用户一个文件)

你对flutter的掌握程度怎么样(偏使用)
有遇到卡顿的情况吗(有,ListView滑动卡)
有没有去优化(没有)
你项目中图片上传怎么处理的(压缩)
只考虑size吗(是)
微信图片考虑的就多了
继续挖了点细节。

闲聊
讲讲竞赛经历
玩什么游戏
除了竞赛,还有什么能证明你的能力(逆向破解暴力薅某个软件的羊毛)

智力题
8个球有1个重量不一样要称几次能找出来(2次)
如果是n个呢(log3(n))

很多公司给你发offer,你会怎么考虑(优先微信)
我估计微信给你发offer问题不大。

面委(待更新)
全部评论
nb
2 回复 分享
发布于 2024-12-30 18:22 河南
tql佬
1 回复 分享
发布于 2024-12-30 15:12 美国
佬实习做的这些是什么语言方向的呢,看着已经偏离表面的Android业务了😢
1 回复 分享
发布于 2024-12-29 18:35 广东
感觉实习经历的hook比较底层,实习生一般不是接触不到嘛
1 回复 分享
发布于 2024-12-29 18:32 广东
佬,有面委会面经嘛
点赞 回复 分享
发布于 04-03 12:11 广东
这就是wxg吗,答不上来几个😂😅😅
点赞 回复 分享
发布于 2024-12-28 12:33 广东
佬是上岸字节还是微信了
点赞 回复 分享
发布于 2024-12-28 03:35 江苏
祝好
点赞 回复 分享
发布于 2024-12-27 20:23 广东

相关推荐

05-24 12:03
湖南大学 Java
1、项目什么时候会触发失败,人为介入;2、sql如何分页展示    在sql中,可以使用limit和offset子句或者row_number()窗口参数来实现分页展示数据; limit number_of_rows表示每页展示的行数,offset offset_value表示跳过前面的行数。例如,对于第一页,offset是0,以此类推;3、http包含了哪些内容    请求方式(get、post、delete、put)、状态码(1XX表示请求已被服务器接收,继续处理、2XX表示请求已成功被服务器接收、理解、并接受、3XX表示需要客户端采取进一步的操作才能完成请求、4XX表示客户端请求有语法错误或无法完成请求、5XX表示服务器在处理请求的过程中发生了错误)4、TCP的状态    三次握手、四次挥手5、如果在建立连接的时候,ack后,开始发送数据,但是ack数据包丢失,这个情况下服务器如何处理这个数据包    首先关于服务器状态的改变,在正常情况下,服务器收到客户端的ACK报文之后,连接就进入了ESTABLISHED(已建立)状态,但是ACK数据包丢失,服务器在发送SYN-ACK报文之后,会等待客户端ACK的确认,此时服务器的状态会一直保持在SYN-RCVD(同步已接受)状态。    服务器的重传机制,在一定时间内,没有收到客户端的ACK报文,服务器会重新发送SYN-ACK报文。    在等待ACK的过程中,服务器会为这个半连接分配一定资源。6、操作系统的进程调度方式,win使用哪些进程调度方式,linux是使用哪些进程调度方式操作系统的进程调度方式主要有以下几种:先来先服务调度算法(FCFS)原理 :按照进程进入就绪队列的先后顺序进行调度,先到达的进程先得到处理。特点 :简单易懂,但可能导致后到达的短进程等待过长。短进程优先调度算法(SJF)原理 :优先调度估计运行时间短的进程。特点 :能有效减少进程的平均等待时间,但难以准确预估进程的运行时间。时间片轮转调度算法(RR)原理 :将 CPU 时间划分为一个个时间片,按就绪队列顺序分配时间片给进程运行,若时间片用完而进程未完成,则进入队列等待下一轮调度。特点 :适合多用户分时系统,保证了每个进程都能获得一定的 CPU 时间,但时间片大小的选择较关键。优先级调度算法原理 :为每个进程设置优先级,优先级高的进程先调度,优先级相同则按先来先服务调度。特点 :灵活但易导致低优先级进程饥饿。多级反馈队列调度算法原理 :设置多个就绪队列,每个队列对应一个优先级和时间片大小,进程根据运行时间和抢占情况在不同队列间移动,优先级高的队列中的进程先调度,同一队列中的进程采用时间片轮转调度。特点 :兼顾多个方面,是较复杂的调度算法,能有效处理各种类型的进程。Windows 的进程调度方式:多优先级反馈调度算法 :Windows 将进程分为多个优先级,优先级高的进程优先调度。系统会根据进程的行为动态调整优先级,如交互式进程的优先级会提高,CPU 密集型进程的优先级会降低。实时进程调度 :对于实时进程,Windows 使用先来先服务和轮转算法,确保实时任务及时得到处理。Linux 的进程调度方式:完全公平调度器(CFS) :基于红黑树数据结构管理进程,通过计算进程的虚拟运行时间来确定调度顺序,优先调度虚拟运行时间少的进程,兼顾进程的公平性和吞吐量。实时进程调度 :包括先来先服务(SCHED_FIFO)和轮转(SCHED_RR)两种策略,确保实时进程及时得到 CPU 资源。过时的 O(1)调度算法 :早期 Linux 使用,基于就绪队列和过期队列,优先调度优先级高的进程。pv操作PV 操作是操作系统中进程同步与互斥的一种重要机制,主要用于处理进程之间的资源竞争和同步问题。PV 操作通过信号量(semaphore)来实现,它包含两种操作:P 操作和 V 操作。PV 操作的定义P 操作(wait 操作) :用于测试信号量的值。若信号量的值大于等于 1,则信号量减 1,进程继续执行;若信号量的值小于 0,则进程进入等待队列等待。P 操作的格式如下:V 操作(signal 操作) :用于将信号量的值加 1。若信号量的值大于等于 0,则直接加 1;若信号量的值小于 0,表示有进程在等待该信号量,此时唤醒一个等待的进程,并将信号量的值加 1。V 操作的格式如下:
查看7道真题和解析
点赞 评论 收藏
分享
评论
26
57
分享

创作者周榜

更多
牛客网
牛客企业服务