都说是金三银四 ,但是今年的情况,让我感觉有点疯狂。
抱怨的话就不多说了,就大致说一下上个礼拜面试的题目点和疯狂点吧。
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.设计模式以及应用场景 策略模式和代理模式区别
这个就比较自由了 建造者 单例 责任链 代理 工厂 然后就是问 策略模式和代理模式区别 个人觉得代理是为了扩展 策略是为了限制结构 增加规范
我问他们问题: 说是公司比较混乱,改造屎山的任务,面试官也是才来两个星期的,很折磨 =。 =
3月8日
3.某C轮公司(无了)
先来一波卷子(笔试6道算法题):
1.1模拟split功能,对字符串做切割
第一反应是KMP,因为涉及到子串
大致写了下indexOf()功能的逻辑
1.2拼接字符串
这个的考点是拼接,但是如果量级较大可能需要用到StringBuilder或是StringBuffer来减少堆中新对象的生成
2.指定范围判断某个数是否是质数
这个我想到两个方法 一个是暴力法去除,然后里面有很多细节,处理常量级别的效率
另一个是求出小于等于m的所有合数 只要m不在合数表里,就可以快速查找
3.判断数组中是否有重复的数
这个考虑要么用类似set的数据结构 要么用排序+遍历
4.n个小朋友围成一个圈,开始报数,到m的时候,m位置上的小朋友离开,问最后一个离开的是谁
这个第一个反应就是链表,再模拟报数流程
5.组合题,26个字母有多少种组合并输出
这个组合题主要是会有大量重复,手写感觉有点不现实 =。= 需要调试
技术面:
面试官先让我先说了下之前项目的经验,balabala掠过
聊了下刚刚的笔试题,我也都尽量说了下之前的思路
面试官问了下socket这块的,无非就是拆包解包,包头,包尾,校验位,加密位,正文传输协议类型(json/protobuffer),心跳,然后我补充了下粘包问题
还问了OKHttp的拦截器的功能,我就把常用的是否重复请求的拦截器,包头的组装,响应数据的处理,还有SSL相关的聊一下
还问下jni和aidl相关,聊的都不深,都是再使用相关的
根据之前项目经历也聊了一些
负责人面:
负责人主要是问我项目的细节
聊了下刚刚的笔试题,纠正了一些我的边界值和参数问题(说实话笔试我很多都是写的文字,用笔写真的有点难受)
问了下有没有管线编程经验OpenGL相关经验,shader也只是能看懂,就老实说了
还有就是介绍一下之前项目自我感觉复杂的地方
感觉互相聊的都不是很有营养
3月13日
迅雷线上面试(没抱什么希望,纯粹准备聊天)
1.对handler的理解:
2.如何创建Message:
3.如果在一个特别复杂的长句下,能否执行removeMessages(0)
4.view的绘制流程
5.view过程中是DFS还是BFS
6.说说项目中的一些亮点,或是自己深入过的技术
总体而言聊天还是挺愉快的,可惜我是无业状态,现在状态越来越差了