一篇客户端凉经
第一次写面经,总结下这个月的面试,可能会对牛友们有点帮助吧。然后是许愿!听说牛客许愿很灵啊!
面试问题我从周记里面整理了下:
蘑菇街的面试邀请提前了三天发,到了面试前一天,哭的很惨,哭到岔气,感觉自己快到了三月中旬了都,发现自己什么都不会,担心自己要是不能跟一号一起去实习,感觉自己特别没用,不知道怎么办。本来隔天要面蘑菇街,发现自己OkHttp都想不起来怎么回事,就开始看,可是太难受了,一点都没有看进去。
蘑菇街一面(3月12日 牛客视频 50min)
-
Java基本数据类型
-
介绍下面向对象的理解
-
开发过程中有用到过线程吗
-
说下线程池和普通线程的区别
-
简单说下Activity的声明周期
-
了解过哪个声明周期内不适合做耗时操作吗
-
用过哪些数据存储方式
-
假如说多个线程同时往一个线程写入,如何保证文件不会被写乱掉(说保证线程安全)
-
了解过数据存储中SP存储的两个提交方法的不同
-
开发过程中遇到过内存泄露问题吗(说了handler的情况、静态和单例模式的情况、以及一些Bitmap资源的使用)
-
用过什么内存泄露的检测工具。
-
用过什么设计模式相关的内容(单例、AQS模板方法、RecyclerView的设置布局管理器的桥接模式等)
-
对打包过程的了解(我提了下签名,然后说我不记得了)
-
问常用的排序算法(选泡插、快归堆)然后问时间复杂度
-
HTTP和HTTPs区别
-
get和post区别(作用、幂等性)
-
两个项目有什么挑战的地方
-
问项目里写了OkHttp,问了下项目中是在哪里去做网络请求的
-
两个栈实现一个队列
-
最后提问机会就是问了下客户端技术部和内容技术部有什么区别,还有系统版本适配方面的问题,以及面试官的建议,面试官说我基础掌握的还可以,但是想项目的话还需要再梳理一下内容,表示不知道是不是可能网络的问题,项目方面没有太get到我讲的一些东西。
蘑菇街二面(3月16日 牛客视频 40min)
开头说了下项目,感觉我可能沟通的不是很好,面试官没有get到点就有点着急。然后就围绕一个轮询怎么设置时间间隔的问题,怎么对数据进行重用的问题问了挺久,感觉我回答的并不是很好,后面面试官停止问项目,开始问其他的内容,之前提到了事件分发,就问了事件分发(我还没说完,就开始问下一个问题了)。
写一个下拉刷新控件(为了不让场面尴尬,我只能尽量多说),面试官问怎么布局,继承哪个ViewGroup等等。
开始问其他的问题,用过HashMap、Hashtable等等(鉴于前面答得不好,面试官也有些着急,遇到一个不用想可以直接回答的问题就赶紧说,面试官来一句“是有提前准备的吧”,我?我到底是属于准备了还是没准备呢?)
问我DVM和JVM的区别。
(可能有些题目不太记得了,但是后面问的都是很直接的问题,然而,面试官好像并不期待我的回答内容。)
最后写了一个常规题目,排序数组找两个值的和是目标值。
写完以后面试官说情况呢也了解的差不多了,问我有没有什么要问的,我就问了下进去蘑菇街需要主要学习点什么内容,面试官说没有什么特别需要学习的,说其实很多内容我们应该是会的,然后大概给我说了下蘑菇街的培养方式,说我可以看看蘑菇街的APP,揣摩下怎么去实现等等。
蘑菇街HR面(3月17日 牛客视频 30min)
开头问了下项目,问了我为什么学习安卓开发等等,然后问了下学校的经历等等。后面开始问其他的,问我投递了其他企业没有(我因为感觉自己不太会撒谎,就实话实说了),接着问我腾讯和蘑菇街的面试官差别(感觉遇到这个问题,说的也有点紧张),然后问我爱好(我说了看书、看视频、逛B站???)
蘑菇街一面是两点钟开始,面了大概四十分钟左右,结束以后看了下手机,腾讯PCG看点在我面试的时候发了短信,问我有没有空这两天面试,前几天本来简历变成了初试,后来又灰了,今天发现被捞了,有点高兴,但是大部分还是紧张,心里想着能不能往后推推,可是往后推怕没有机会了,就只能回了个短信“您好!我可以面试的!”,然后就约了今天晚上七点电话面试。
腾讯一面(3月12日 电话面试 70min)
-
开头叫我做了自我介绍。
-
然后面试官说先问些比较基础的问题吧,然后就问了
数据结构里面的栈和队列有什么区别(说了特点,和实现)
数组和链表的区别(内存结构)
读写这块链表和数组的区别
了解的排序算法有哪些(选泡插快归堆)
又问了时间复杂度
又问了这些排序算法当中效率比较高的是哪些
问我了解快速排序吗
回答完了后,emmm停顿了一会,面试官说ok~~然后开始问操作系统
-
进程和线程的区别(我说的有点简单,面试官不太满意,追问我还有吗)
操作系统当中的死锁怎么发生的,什么是死锁?
怎么解决死锁
内存里的堆和栈有什么区别?
-
Java里的对象可以放在栈上吗
Java里面的字符串常量存放在哪里?
然后问方法区静态常量池会存在内存溢出的风险吗
然后问什么是内存溢出?
刚才提到的程序技术器是线程私有还是共享的?还有哪些是线程私有的,线程共享的?
Java当中的内存回收怎么做的?
主流的JVM垃圾收集都是什么算法?
关于Java垃圾回收还了解哪些?
然后问我什么是新生代,什么是老年代?
为什么要分新生代老年代?
Java当中什么是内存泄露?
内存泄露产生的原因?
然后问内部类一定会持有外部类的引用吗?
常见的解决内存泄露的方法?
-
Java当中的线程安全怎么理解?
怎么保证线程安全?
Java里面的线程有哪几种状态?
-
计算机网络的TCP和UDP有什么区别?
什么是拥塞控制和流量控制?
拥塞控制有哪些算法?
然后问流量控制。
-
然后问我安卓这块对哪些知识比较熟悉(我说最近在学习Framework这块的内容)
让我讲下视图绘制的流程
-
然后问我强项(我说并发这块)
然后问我线程池是什么原理?
并发数怎么设置比较合理?
如果无限制一直向线程池提交任务会怎样?
-
问我有了解过一些开源组件吗?(我说用过一些开源框架,比如OkHttp、EventBus、Glide这些)
然后问我看过源码没有,有没有印象深刻的地方等等。
-
问我安卓系统的源码看过哪块?
-
项目当中遇到的难的问题?
-
问安卓当中的性能优化,滑动列表非常卡会怎么优化?
-
突然想起,前面中间好像问了下硬件加速(我本来说了解,后来发现自己好像不了解,又改口了)
前面一个多星期断断续续面试,感觉自己也没有怎么学习的样子,就感觉脑袋空空,其实对于即将的面试感觉情绪非常低迷。
腾讯二面(3月20日 视频面试 50min)
鉴于状态显示我并不是和理解,虽然没有灰过,但是我不确定是不是PCG二面。
腾讯捞面(3月24日 视频面试 50min)
今天开头记得问了下面试官那个事业群,原来我已经到ieg了,前面PCG面了两次已经挂了,我也不太懂,流程没有灰,面试官说前面流程已放弃,就被ieg捞了。
开头的话问了下项目难点,说了下自定义View。
问了布局优化,RelativeLayout和LinearLayout的效率差别以及为什么?
然后问了下滑动冲突的解决思路?
然后面试官问了下如果一个比较小的View包含一个比较大的View,并且触摸事件在View之外,怎么让事件传递到子View当中。
内存泄露以及怎么解决,内存泄露一定导致内存溢出吗,内存溢出和内存溢出的具体场景
软引用和弱引用的区别。
面向对象思想
xml 和 json使用的共同缺点
静态常量和静态变量分别是怎么加载的?
线程池的原理,线程池的状态,线程池的使用有什么不好的地方?这部分面试官是想跟协程比较来着
然后问我考研或者实习?
此时我只能说,心情复杂,本来前面灰了,本来我已经做好了等等看正式批会不会捞我了的准备,想着这段时间不面试也好,再抓紧时间总结下知识和项目。居然这么快又被捞了,万一我又挂了,岂不是又浪费一个事业群。
到了第二天面试之前,我还跟一号说,自己想放弃这次面试了,说出这句话当然是被狠狠地批评了。
晚上八点前,开始等面试官上线,坐在电脑前,回顾我失败的面试生涯。
腾讯PCG一面 (3月25日 视频面试 50min)
自我介绍以后,
今天开始的话是问了下项目,我开始是介绍了下项目的应用场景,
(面试官叫我不要紧张,然后为了缓解我的紧张,就先问了下我实验室的情况),
问了下项目当中硬件部分怎么和服务端交互的。
然后主要问了下内存泄露是什么,内存泄露怎么产生的,怎么解决内存泄露等等。
(鉴于之前每次开头,项目都讲的不好,这次稍微换了下重点。)
然后问布局优化做了些什么工作,提了下扁平化布局、布局复用、动态加载view、防止重复绘制的一些内容,
接着开始问我滑动冲突怎么解决的,说完以后我又补充了下滑动冲突解决以后的另外的一个问题和解决思路等等。
然后面试官根据我回答的中的一些点问我,如果要自己实现一个onTouchEvent方法,怎么对手势进行判断,比如长按。我就从事件序列的分析开始说,后面说到通过发送延时消息,在延时消息触发之前的一些判断以及延时消息触发以后的操作等等。(期间面试官有进行引导)
然后问我自定义view的话需要重写哪些方法,就说了下视图绘制的过程,测量布局绘制分别完成的任务。
问了哪些因素会决定测量大小(面试官说有三个因素,但是有一个经常忽略),我说了下父View和子View等等,(面试官说,我觉得你可能是知道的,我说了一些思路后,他表示他想说的第三个因素其实是程序员的意愿)
然后面试官表示这部分问到这,说要问点很基础的,然后问我学了什么数据结构(数组、链表、树、图),就问了下链表和数组相关的,问了下ArrayList和LinkedList相关,单链表时间复杂度1的情况删除某个节点等等。
面试官好像对我的两个项目还蛮有兴趣的,问台灯有没有上线投入使用等等,也问了下另一个AndroidThings的部分在物联网方面是个什么情况(表示是做成了个类似手机的移动设备,还是有点让人失望),问我是不是大三等等。
然后没有然后了,面试官问我有什么问题要问的?
我就问了下为什么今天面试的时间这么短(技术相关问题<40min),面试官笑问,你是有什么擅长的没有表现吗。
问了下建议,面试官说开头紧张,其他还可以(可能面试官说话比较照顾人吧)
问了下阅读源码的经验方法,面试官大概是个实在人,说这个问题有点大不好回答,跟我说IDE要设置好点就OK。
上午十点多接了一个电话,标记广东广州的广告推销,接了以后我没说话,电话那端也没说话,二十秒以后对方挂掉了,心想真是一个不称职的广告推销电话。后面这个电话刚挂掉,又来了一个电话,广东广州座机,想想还是接了,接了以后过了几秒,喂,发现是腾讯的电话。(我真傻,真的)
腾讯PCG二面 (3月26日 电话面试 30min)
开头问了下项目,分别说了两个项目的架构和应用场景。
然后具体说了下两个项目的内容,面试官还想问我服务端怎么完成的,数据库用了什么。
项目难点等等。
问了为什么写这个项目等等。
为了为什么学习安卓开发(说了下自己最开始的认识,和后面的想法,关于Java生态和安卓系统的一些简单想法)
我有什么别人没有的特点(说了下上进心,耐力,在实验室的状态等等)
其他编程语言开发方面(说了下C、C++、JS这些)
又问了下数据库方面,安卓用什么数据库等等。
问如果找实习希望什么方向(说短期安卓开发,因为现在是学这个的,然后也希望腾讯的产出中可以有自己参与的一份等等)
感觉这个月几乎就是在面试,大概是我自己太菜了,我一边很紧张,一边感觉根本没办法专心学习。自己心态也挺不好的,这段时间都没有胃口,每天几乎都没吃什么东西,情绪一直低迷,感觉看不到一点希望。而自从状态变成HR面以后,我开始吃嘛嘛香,感觉自己真是挺搞笑的。真的希望早点结束面试,开始学习新的东西,脑袋空空真的很没安全感。腾讯的流程目前也没走完,感觉还是很担心的。
许个愿吧,HR早点翻我牌子!早点结束流程,期待一个offer!