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 广东

相关推荐

腾讯微信前端面试面经:技术与沟通的双重考验一、面试初体验这次腾讯微信前端的面试,整体节奏张弛有度。开场长达20 - 30分钟的项目交流,让我感受到面试官对实际项目经验的重视,后续的技术问答和算法考察也极具针对性,尽管最终未能通过,但整个过程收获满满。二、项目细节深度探讨1. 大模型相关技术交流面试一开始,面试官便聚焦于我在实习中涉及的大模型调用相关项目,围绕前后端交互、数据结构化处理、流式传输等技术点展开提问。当谈及流式传输时,我提到工作中接触过的Server-Sent Events(SSE)和Backend For Frontend(BFF)架构,解释了SSE如何实现服务端到客户端的单向实时通信,以及BFF层如何针对前端需求定制数据接口,减少冗余请求。在聊到JSON流式解析时,面试官追问“为什么选择自己手写解析?”,我坦言最初是出于学习目的,参考了开源项目的实现逻辑,希望深入理解数据逐块处理的原理,但这个回答可能未能展现出足够的实际应用价值。2. 智能自驾数据可视化项目我介绍了负责的智能自驾数据可视化项目,主要通过React Hook获取数据,再利用表格组件进行展示。由于项目逻辑相对基础,缺乏性能优化层面的实践,面对面试官对性能优化的潜在期待,我未能给出亮眼的回答,意识到这是自己项目经验中的一大短板。三、算法与技术实操考察1. 算法题:有序链表合并第一道算法题是合并多个有序链表,这是经典的归并问题。我采用分治思想,先两两合并链表,逐步减少链表数量,最终得到合并后的有序链表。通过代码实现和思路讲解,基本完成了题目的要求。2. 技术题:防抖与节流第二道题考察**防抖(Debounce)和节流(Throttle)**函数的实现。在实现节流函数时,我使用记录上一次执行时间的方式,控制函数在指定时间间隔内只能执行一次。但当面试官追问“如何优化防抖函数,避免重复创建定时器”时,我没能及时想到通过保存定时器ID(timeoutId),在新触发时清除旧定时器的方案。面试官略带遗憾的一句“这不应该呀”,让我意识到这个关键知识点的疏漏可能影响了整体评价。四、轻松闲聊与最终结果算法环节结束后,氛围变得轻松起来。得知面试官也是成都人,我们自然地聊起家乡美食、生活日常,还调侃了一下恋爱话题,整个交流十分融洽。面试官最后表示最迟次日给答复,虽然最终收到未通过的消息,但我明白或许是有更契合岗位需求的候选人,这次经历也让我清晰认识到自身技术短板与改进方向。
查看8道真题和解析
点赞 评论 收藏
分享
06-02 12:37
已编辑
吉林大学 C++
过去的一年一直在为找游戏客户端开发实习做准备,但直到现在也就只接到过一个小公司的offer。思考了一下打算转前端了,目前大三下转战也还有机会。我其实内心也还在纠结,感觉这样做属于是,遇到瓶颈困难就半途而废,东一榔头西一棒,最后一事无成,但又担心万一自己的分析是对的,转战是合理利用自己优势,死磕游戏开发是执迷不悟。下面我会讲述原因,希望有懂行的前辈或是同学锐评一下我的观点,如果能给出建议,真的不胜感激,我现在真的有些迷茫。放弃游戏客户端开发最大的原因:我感觉,我了解到的游戏客户端开发的学习路线不够规范化,缺少学习框架的机会,学起来总感觉只会纸上谈兵,脱离实际生产(面试考察)需要。我觉得学习一项计算机技能大概分三个层次:第一层基础:学习算法,线性代数,OS,计网,数据库这些计算机学科基础,熟练掌握对应领域常用编程语言,常用api;第二层框架:有了第一层可能可以开发一个看起来能运行的一个小项目,但毫无章法,这时候就要学习框架,用行业内更规范化的结构组织你的项目(我正是缺了这一部分,所以这会儿也说不出具体的),第三层专精:向底层更深度的理解,就比如说你可能会用unity的shader,会用c++的openglAPI,但为了达到第三层你最好要会计算机图形学,最好能自己手搓软渲染器,游戏引擎。根据个人面试经历、招聘要求我总结,游戏客户端开发有以下面试考点:1、c++面向对象,操作系统,问你八股要答得上来2、算法,说实话我个人感觉挺难的尤其是雷火精英实习笔试,面试时也经常会有那种看起来简单,但是加上时间复杂度限制就变成hard难度的题。3、计算机图形学、渲染管线、lua热更新网络编程、游戏引擎实操、这一部分正式我迷茫的地方所以可以看见我只是列出了关键词。前两点不是问题都算是第一层基础,无非就是多刷题多背,学习路线知识体系也很明了,你也大概知道面试官会问些什么。如果是因为前两点失利我是不会萌生换赛道的想法的,重点就在第三点。考点3混合了第二三两层,框架与进阶,游戏开发确实很卷,面试经常会遇到问第三层的知识,但其问第三层也无所谓了,我觉得第三层知识的考查就只是为了筛人,而且也不是所有公司都一定要求会第三层,所以卷也不是我想转战最主要的原因。最主要的问题是游戏开发在应试时缺乏一个公认的框架,我不知道要学什么,面试时面试官问的问题也是涉及广泛,有的时候我也分不清一些知识到底属于第三层还是第二层,我可以去学计算机图形学,了解管线渲染过程,学习lua热更新网络编程,学习OpenGL、学习unity等等,但这些都各自独立我不知道怎么把他们组织起来,不知道我要做一个什么东西,说出一些什么理论,在面试官看来是有意义的。所以又卷又学习框架不清晰,我的技术实力也不高,本身就是把计算机学习当作是学一门高级一点手艺,混口饭吃,当初选择游戏开发,是觉得反正以后都是软件开发,游戏开发,开发出来的产品是自己感兴趣的,可能会更有动力一些,而且游戏开发好像以后的技术壁垒会更高一些(现在看来也确实如此),就选择了游戏开发,我当时以为的难是知识难,现在才发现难点是你不知道要学什么。而我所了解到的前端就没有这个问题,虽然我还没开始具体的学习,但就根据我搜索到的面经,B站上学习路线指导视频,你可以看到面试官还有这些指导视频所关注的点是一致的,而且框架层的知识体系是明了的。当然前端开发也有他的问题比如竞争人数更多(但岗位至少比游戏开发多),技术壁垒低,目前职业发展有被淘汰的风险,很多人都在考虑转后端或是全栈。大概就是这样吧,游戏开发我真不知道我要做什么,不只这里我会四处去请教,再思考两三天,是要做个决断了。
牛客414065333号:好像游戏客户端知识又多又难,我感觉使劲刷算法和基础八股就行了,那些高级的像什么引擎底层应该也不指望应届生会吧
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
27
63
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务