写在前面
我每年都会隔一段时间出去面试一次,面试的目的不是为了找到好的工作,而是想知道自己的技术能力是否符合市场需求,有没有与时代发展速度脱轨。 同样,面试你的也是同行,这样也能够碰撞出不同的思想。当然,如果遇到好的机会那也是不能错过不过了。试想?如果你一直待在一家公司,都不知道外面的情况如何的话,那是很可怕的,至少我这么认为。如果您同意这样的观点,不妨接着往下看,让我们一起研究面试过程中需要具备的知识。下面是我亲生经历的一次面试,这里写出来给大家分享,更多的是总结面试中遇到的问题以及以后学习过程中的方向。只有这样才能和时代发展速度接上轨迹。
这次面试的公司是互联网BAT大厂中的腾讯,这也大多数开发者们一直进入的大厂之一吧。技术面试一共是三面。下面是我的一个面试过程和总结。
一面:(50min)
- 自我介绍
- 项目的整个设计过程。
- MVVM,MVP,MVC的区别
- LiveData在项目里的实践是怎样的,遇到了什么问题;有没有想过怎么去解决LiveData膨胀的问题;
- Handler,messageQueue懂多少说多少,越详细越好
- 事件分发机制的原理是什么,核心的几个函数有哪些,它们之间的协作方式
- View绘制的三个流程;onMeasure中的measureSpec,wrapContent为什么会失效
- 内存泄漏是怎么避免的?LeakCanary原理是什么,没看过源码的话现在想一下该怎么实现
- 项目里的webView是如何优化加载速度的的
- RecyclerView和ScrollView为什么不能一起使用
二面:(60min)
- 线程池用过吗,工作组件有哪些,OkHttp用的是什么线程池,为什么要用
- synchronized锁升级的过程,为什么要设计这个锁升级
- HashMap的实现,如果要自己实现多线程安全的HashMap怎么操作
- 如果我想要自定义个任务有优先级的线程池,应该从哪些方面入手
- 为啥打开一个app以后默认会显示白屏吗,为啥不是黑屏呢?
- 进程间通信方式有哪些,Binder讲一下,和共享内存的区别是什么
- 动态代理和静态代理
- 数据结构和23种设计模式
- RecyclerView的性能优化怎么实践
- 堆排序实现
三面:(40min)
- 自我介绍 & 项目介绍
- 有了解过Retrofit是如何简化网络请求的吗?
- Retrofit会结合一些注解进行使用,对注解有什么了解吗?
- APT有听说吗?是做什么用的呢?自己有上手用过吗?
- AOP的概念有了解吗?
- Compose有了解过吗?
- Flutter有了解过吗?
要是换几年前我可能也跟大家一样,感觉这些面试题估计一个也答不好,但是今天回过头再来看其实感觉也就一般般吧。当我们读小学时感觉初中知识比较难,但当我们读到高中时再回过头来看就很简单了。因此我们不必在乎现在的自己能力是否足够强,只要今天比昨天有进步这就足够了。但道理我们都懂,可是能坚持下来的人却比较少了,人生贵在坚持!
随着年龄的增长意味着我们的时间也越来越少了,所以我们自己心里要明白想要什么?是想成为某个领域的专家,还是想多方面发展以后做领导型人才。一个时间段往往只能做好一件事情,有舍必会有得。当我们开着拖拉机在乡村道路时,不要看着别人开着跑车就羡慕,以为拖拉机也能上高速,但内心要有换喷气式飞机的勇气和决心。
但是不用凡是都抱着得到的心态去做,就好比自己勤奋学习就一定是为了进 BAT大厂,如果是这样那当我们进了 BAT 又该如何,学习这件事应该是终身的。只要我们能静下心来该来的自然会来,作人无甚高远事业,摆脱得俗情,便入名流;为学无甚增益工夫,减除得物累,便超圣境。
不要凡是都抱着利益的心态去做,一直以来我都是崇尚成就自己的同时去成就别人。只要自己不抱着利益的心态去做,那么便能拿得起放得下,当我想讲的时候便可以讲,不想讲的时候便可以不讲。过程中肯定会有各种疑问和怀疑,若坚持不了就放弃,但心中若有挂碍就铭记。
整理不易,白嫖太易!有需要的读者朋友们可以关注一下。以上都可分享~