maltadirk 发表于 2023-3-9 08:41

2023年Android面试经历 3月总结(持续更新)

都说是金三银四 ,但是今年的情况,让我感觉有点疯狂。

抱怨的话就不多说了,就大致说一下上个礼拜面试的题目点和疯狂点吧。
2月27日 - 3月3日

1.某某WeWork场地的小公司

一面(技术面):


感觉还是很好的,就和面试官(开发人员)说了下项目经历,也没问八股文(虽然我背了点,背了但是不多),吹了会水,7-8年间的工作经历,并说明了,希望能找个稳定的公司,听那哥们的意思是现在有点乱,但是未来会更好。(注意关键点: 乱)然后差不多一个小时后,进行了二面,
二面(CTO面):


看那个老哥应该是个技术leader,先是介绍项目经历,balabala。。。。 然后发现我简历上写了了解算法和数据结构,就问我链表如何判断有环(这种easy题我肯定秒答),然后看这种不行,就拿了个水笔,让我写快排????,我承认我没准备,然后说了下快排原理在那硬写,把递归逻辑整理出来了,在实现swap的部分有点卡壳(就记得双指针了,主要是没料到手写),然后那哥们说要不我们来写个需求吧???, 好吧 !是一个答题的需求,设计了一个数据结构,让我手敲, 说实话我是有点不想敲了,硬着敲了一会,中间面试官一直在和我了开发规范和项目管理。我也说了些AOP啊,项目发布流程,这类的经验,然后在敲了小一半的时候,我看到快6点了,就干脆说我把思路说一下,接匆匆结束了这个面试。从3点多到快6点,2个多小时的面试,当时感觉还不错吧(后面HR还是说不合适 =。= )
涉及题目:

1.如何判断链表是否有环 (答: 快慢指针,看是否会相交)

2.写一下快排(答:快排原理时找到一个位置,并将小于它的放在左边,大于它的放在右边,然后递归此逻辑 O(n) = logn)(在处理交换的时候双指针没用好=。=)

3.机试 定义了个题目的数据结构,写一个答题并评分的功能,从头开始敲 (需求挺简单,但是敲的时候很多代码细节,感觉比较耗时就没弄完)

4.机试过程中还在不停问我对项目开发的理解 :

如何处理项目上碰到的重大bug ? 热更新? (答: 热更新像是tinker这些,只是为了解决一些代码层面上的bug,而这些bug在测试阶段就应该被发现,而往往严重的bug是设计或是版本兼容的bug,这时候更应该依赖于服务或是前端来进行快速反应)

如何看待框架的作用,如何统一代码规范:(答:google一直在努力结构,规范化代码,从MVC MVP MVVM MVI 都是在统一代码结构,而大部分开发中除非有上级管理者的强约束,如review之类的管理,很难做到规范化,很多时候程序员开发的习惯是参差不齐的)

。。。。类似闲聊 就不多说了

5.我问他问题 项目是否稳定?会不会突然项目被fire了?(答:一般不会,除非我把他写没了 , 我:???我们做开发的可没这个本事,市场这种东西是需要决策层眼光的,我们只负责实现需求)

2.某某创业小公司


上来先做题 !!! 笔试也经历过不少 做呗
做题:Android题目

ListView和RecycleView区别 (答:功能角度分析,ListView是纵向布局,RecycleView支持横向,RecycleView支持多种LayoutManager, 缓存角度,RecycleView的四层缓存(包括自定义缓存))

把ImageView的scaleType列一下?(答:这个可没背过 就记得fitXY和CenterInside)

View的事件传递流程 (答:责任链模式, 从View和ViewGroup去说明了用法,捕捉来自硬件,属于I/O事件,通过fd + Socket绑定到Android服务)

单例之双重校验锁 。。。。

思维扩展题: 选择题就不说了,我就记得后面几个脑筋急转弯

1.杯子倒水问题 easy (都知道来回倒)

2.四个数求24 (5 5 5 1 3 3 8 8) 后面公布我的答案

3.统计深圳有多少家公司 (以前看过这类问题,忘了就没回答)

4.给你个后悔药会怎么选(答: 真男人从不后悔)


然后进入boss面,其实也就是吹水,问问之前的项目经历,然后我之前也有过几个人合伙做项目的经历,自我感觉吹水吹的还行
前面的答案 5 * 5 - 1 ^ 5 = 25 (3 | 3) * (8 | 8) = 24 (3 & 3) * (8 & 8) = 24

3月6日


不得不说今天过于折磨 我的 是我菜了
3.某某软件产业基地公司IM方向

直接技术面:(来了 我最怕的八股文来了)

先是问通信协议:(我菜了,我说我只知道Socket, (TCP? UDP? json? 还是 protobuf? )我没懂他是问那个层面的 )


然后百度了下 https://baike.baidu.com/item/IM%E5%8D%8F%E8%AE%AE/15547961?fr=aladdin 嗯 地址放这了

然后问基础(其实我觉得这都不能算基础了)
1.JVM的理解 GC回收 ?(内存管理我记得就是新生代和老年代,新生代因为回收频繁被分成了8:1:1, 1:1之间用的是复制清除算法,而老年代因为都是长时间无法得到释放的对象,所以用的是标记整理算法)(PS:这哥们觉得我说得不对,然后狠狠的说了一堆 我也不是很懂)

然后聊GC, 我说Android把JVM传统的回收策略改成了ART的CC策略,通过并发的Copying来保证回收时不会导致系统卡顿,同时还有CMS的回收策略也可以使用

(可能时我们不再同一个频道上吧,可能是我真的菜)

2.Activity启动流程 (面试官有点不耐烦的问我这个,我以为问我生命周期,然后他说和AMS的交互)

(答: 通信先通过仪表台找到对应的代理,再通过binder找到对应的Activity =。= 我的,我应该直接背的)

3.Zygote fork 流程 (为什么用Zygote 创建进程)(答: 同时会创建JVM,JNI这些,提高效率)

4.内存优化 & 启动优化 (这时候感觉已经没了 干脆就随便说了)

(答:内存问题先定位时内存抖动还是内存泄漏,抖动的情况可以通过几种方式排查 1. 通过Profile dump 抖动波峰和波谷,对比其中的对象,看是哪个对象被频繁的创建和回收,2.关注回调方法,是不是在回调方法中频繁创建了对象, 3.循环方法是不是出现了死循环, 4.图像对象是不是没有释放

内存泄漏就可以通过LeakCanary去dump Activity泄漏问题,或是通过StrictMode来做性能调优)

5.kotlin 内联 suspend

内联确实忘了(查了下)哦 原来是编译期对通用的代码进行替换,但是不能处理递归,也会牺牲一部分空间

suspend: 是协程挂起的关键字,然后就是说协程的用法,和自己对协程的理解

6.设计模式以及应用场景 策略模式和代理模式区别

这个就比较自由了 建造者 单例 责任链 代理 工厂 然后就是问 策略模式和代理模式区别 个人觉得代理是为了扩展 策略是为了限制结构 增加规范

我问他们问题: 说是公司比较混乱,改造屎山的任务,面试官也是才来两个星期的,很折磨 =。 =
页: [1]
查看完整版本: 2023年Android面试经历 3月总结(持续更新)