2018年年底Android悲催的面试之路
本人近况
年底裁人了,一年半没准备面试了,之前换也是内推的,在这个寒冬的冬天还经历此遭,偏偏还赶上裁员
心态早已爆炸,大的环境不好,各位且干且珍惜....
记录下最近的面试经历,整理下让自己不断进步!
题外话
我不知道一个人人性究竟可以坏到什么程度,但是我最近亲身经历的确实是这样,我一个安心想做技术的人跟你TMD HR部门的八竿子打不着,又何苦为难我呢? 之前有个公司的薪酬绩效主管,邵X,只因为我在大会上顶撞了她一个问题,一味着揪着我的把柄不放,甚至特么的为了少给我一个季度的绩效不允许提前转正,真的是坏透了,可能这就是职场,这就是江湖充满尔虞我诈,真的人真是身不由己的,本想与世无争安心踏实做技术,但是某些人却看不得你的安宁。。。还是那句话,出来混的迟早要还的,望好自为之
右划
这公司是在拉勾上投的,CEO号称曾于字节跳动,任视频负责人,创建了头条视频APP。公司待遇15薪非常不错,坐落于望京Soho对面的望京融科写字楼
- 面试过程觉得自己挺失败的没有充分准备算法再加上由于一年半没有再面试过了,有点手生,好多应该答上来的问题都没有答好,面试官确实是大牛,没会的问题也稍微讲解了下,不过深度确实蛮深的
- 印象比较深的几个问题:Lru算法,Binder机制,EventBus实现原理和为什么不能跨进程,Handler如何在handleMessage方法拦截之前发出的message,手写二分法查找(没准备直接跪了),后来让我手写冒泡,我觉得前面已经没戏了(大致说了下双重循环然后赋值也没手写),跨进程几种方式,AIDL,handler机制,ThreadLocal实现原理(回答的很模糊,附上正确答案:每个Thread的对象都有一个ThreadLocalMap,当创建一个ThreadLocal的时候,就会将该ThreadLocal对象添加到该Map中,其中键就是ThreadLocal,值可以是任意类型。
在该类中,最重要的方法就是两个:set()和get()方法。当调用ThreadLocal的get()方法的时候,会先找到当前线程的ThreadLocalMap,然后再找到对应的值。set()方法也是一样。)系统是如何监听ANR的(他说是androidframework层有一个单独的进程),后来问到如何定位和排查我不小心说了blockCanary,他有追问了一下源码和原理我回答的也不是很好(应用发生卡顿,一定是在dispatchMessage中执行了耗时操作。我们通过给主线程的Looper设置一个Printer,打点统计dispatchMessage方法执行的时间,如果超出阀值,表示发生卡顿,则dump出各种信息,提供开发者分析性能瓶颈。)
最后知道今天一定挂了,不过还是很有收获的知道自己哪里不足...
PS:明天去五道口面试斗鱼,希望能好好把握
斗鱼
拉勾投的斗鱼,据说最近在疯狂裁人?只经历了两轮面试,一共面了两个多小时,没到HR,估计歇菜了
- 斗鱼有份笔试题,还是蛮简单的随便写写就ok,一面问的蛮详细的,问的大致是看简历写的东西问的,中规中矩,记忆比较深刻的是问了handlerThread原理,MVP模式(因为斗鱼目前的架构都是mvp),弹幕的实现原理和重叠问题(这个没怎么做过,回答的不是太好,而且之前也是直接用的B站开源的那个库),Kotlin协程(这个没用过,kt的掌握程度还只是入门阶段),Retrofit+Okhttp+Rxjava在华为的好多手机会OOM是由线程数溢出引起如何解决?堆内存,栈内存理解,栈如何转换成堆?内存泄漏是发生在堆内存还是栈内存?为什么? BlockCanary原理?(第二次被问了!!!看来真要看看源码了)如何实现打印指定阻塞线程的方法名?LinkedHashMap与HashMap区别。。。
String a=“A” 与 String a = new String(“A”); 区别,分别存储在哪个区域(这题有误导嫌疑,第一个应该是常量区,堆栈都不是,第二个是栈)MutiDex 第一次ANR以及解决方式(答案参考:https://www.jianshu.com/p/5a2e33a61ba2)
我觉得大部分的问题回答的还是不错的,一面问了下薪资然后开始二面 - 二面印象最深的是根据面向对象设计一个电梯系统,问题的关键点在于所有的属性都跟电梯有关,跟人无关,楼层数是固定的常量...我当时设计跑偏了,总联想到人然后去设计。。
结束以后没有HR面,估计歇菜了...再接再厉吧...