2020年底腾讯Android研发岗面试复盘总结

很多打算年初跳槽的,因为疫情的原因放缓了节奏,在家办公,不像平时那么方便去找工作跑面试了。

不过凡事都有两面性,给了大家更多的时间去准备,修炼内功,提升技术。投入更多的时间去针对性的复习,能大大增加面试通过的几率,获得心仪的offer。

今年底群里有位小伙伴去腾讯旗下的一家子公司面试,拿到的offer是30k还不错。但是各方面福利会差一些所以没去。说是先去稍微低一点的公司试炼一下。然后针对自己的不足方面进行补充,争取上半年可以跳进腾讯。

这里分享一下他的面试总结,以及面试题和分析。


腾讯面试中的重点及经常问到技术点:

数据结构算法,调优,View,SDK,动画音视频等以及你使用过的框架且第一轮的基础很重要,通过后录取可能性就相对高了!


面试题如下(答案太长不方便展开,仅仅展示部分)

  • Activity的生命周期

  • Activity A点击跳转到Activity B后经历的生命周期是如何的?(主要就是A的onStop在哪儿运行)

  • BroadcastReceiver的注册方式* Handler工作原理(包括子线程Looper、主线程Looper不需要声明),最好看看源码

  • 耗时操作为啥不能放在主线程?

  • UI操作在什么线程?为什么?

  • 自定义VIew的属性获取问题(TypeArray)

  • 自定义View的过程

  • Java多线程多进程方面的知识,sychronize静态方法和类方法的区别(多线程这一块我就直接过了,直接说不太会所以没有细问)

  • 集合用过哪些?线程安全的有哪几个

  • 两个业务场景考察,都是即时聊天有关的场景,第一个是聊天框中当前发送消息与向服务器请求获取的历史消息列的冲突问题,你发送消息的时候你的消息还没有到服务器而此时你向服务器请求获取历史消息,你的历史消息显示问题(面试官提示我说消息都有自己的id)。第二个是从服务器传来成千上万组数据,怎么接收?(分批次,如何分批次?我是说通过广播机制,有序传播,低于一定容量就截断广播,超出则继续广播。)

  • 算法题比较简单,就是一串字母判断是否为合法字符串,规则有三:
    (1). 字母可以全部是大写
    (2). 字母可以全部是小写
    (3). 可以首字母是大写,其余字母全小写
    除此之外全不合法,返回值为布尔型,合法返回True,不合法返回False,要求常数级别空间复杂度

  • 如何优化自定义View

1)在要在onDraw或是onLayout()中去创建对象,因为onDraw()方法可能会被频繁调用,可以在view的构造函数中进行创建对象;
2)降低view的刷新频率,尽可能减少不必要的调用invalidate()方法。或是调用带四种参数不同类型的invalidate(),而不是调用无参的方法。无参变量需要刷新整个view,而带参数的方法只需刷新指定部分的view。在onDraw()方法中减少冗余代码。
3)使用硬件加速,GPU硬件加速可以带来性能增加。
4)状态保存与恢复,如果因内存不足,Activity置于后台被杀重启时,View应尽可能保存自己属性,可以重写onSaveInstanceState和onRestoreInstanceState方法,状态保存。

  • 低版本SDK如何实现高版本api?

使用@TargetApi注解·
当代码中有比AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告,解决方法是在方法上加上@SuppressLint(“NewApi”)或者@TargetApi()。但它们仅是屏蔽了android lint错误,在方法中还要判断版本做不同的操作。
@SuppressLint(“NewApi”)屏蔽一切新api中才能使用的方法报的android lint错误
@TargetApi() 只屏蔽某一新api中才能使用的方法报的android lint错误,如@TargetApi(11)如果在方法中用了只有API14才开始有的方法,还是会报错。

  • TCP/UDP的区别以及各自应用场景
  • TCP建立连接三次握手,断开连接四次挥手的详尽过程
  • Java基础知识,接口与抽象类区别,其内部方法和变量是有什么限制?
  • == 、hashcode、equals的区别,Integer(Object)的比较和int的比较区别
  • Java多线程方式
  • 多线程的几种状态
  • Thread.start()以后线程处于什么状态
  • 集合用过哪些?
  • LinkedList和ArrayList有了解过么?
  • HashMap的容量是固定值么?达到什么样程度后进行扩容?
  • HashMap的put和get是如何实现的?
  • 算法题是给定一个数组,数组内每三数之和唯一,求三数之和最接近target的三个数。
  • 然后根据自我介绍的项目进行少许提问,根据项目中知识会问一些问题
  • TCP、UDP区别和应用场景
  • 四大组件说一下你的认知,会根据你的一些认知与使用情况进行提问
  • Activity的四种启动方式
  • AIDL 你说一说你的使用和了解程度
  • 你说到其中的单例模式,写一下看看
  • fragment用过吗,他和Activity什么时候使用哪个?Fragment生命周期
  • 计算机原理内容,进程与线程的区别
  • 进程间的通信方式* JVM知识,GC(这一块基本没看过,所以他就没问了)
  • 算法题是给出两个字符串,找出两字符串的最长公共子字符串,不要长度,要给出字符串。

面试经验总结

1.一定要谨慎对待写在简历上的东西,一定要对简历上的东西非常熟悉。因为一般情况下,面试官都是会根据你 的简历来问的;

2.能有一个上得了台面的项目也非常重要,这很可能是面试官会大量发问的地方,所以在面试 之前好好回顾一下自己所做的项目;

3.和面试官聊基础知识,比如设计模式的使用、多线程的使用等等,可以结合具体的项目场景或者是自己在平时是 如何使用的;

4.建议提前了解一下自己想要面试的公司的价值观,判断一下自己究竟是否适合这个公司。

5.另外,我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!


总结

开发是面向对象。我们找工作应该更多是面向面试。哪怕进大厂真的只是去拧螺丝,但你要进去得先学会面试的时候造飞机不是么?

作者目前在深圳,13年java转Android开发,在小厂待过,也去过华为,OPPO等。在大厂待过也面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

最后,在这里我也分享一份干货,大佬收录整理的Android学习PDF+架构视频+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习。

也可以分享给身边好友一起学习并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率。

直接点击获取

最后,祝大家都能进入自己心仪的大公司。

猜你喜欢

转载自blog.csdn.net/ajsliu1233/article/details/110835899