最近参加了一次鹅厂音乐Android工程师面试,这里凭记忆记录了一些一面的面试题,希望能帮到正在面试的你!

1、Java调用函数传入实际参数时,是值传递还是引用传递?

2、单例模式的DCL方式,为什么需要第二次判空?

单例模式的DCL是一种比较好的单例实现方式,面试中被问及的频率非常高,考察的方式也多种多样。根据本题的提问,这里简单整理了一下:

1 public classTest {2 private volatile staticTest instance;3

4 privateTest() {5

6 }7

8 public staticTest getInstance() {9 if (instance == null) {10 synchronized (Test.class) {11 if (instance == null) {12 instance = newTest();13 }14 }15 }16 returninstance;17 }18 }

这里有5个要点需要注意:

(1)第一个注意点:使用私有的构造函数,确保正常情况下该类不能被外部初始化(非正常情况比如通过反射初始化,一般使用反射之后单例模式也就失去效果了)。

(2)第二个注意点:getInstance方法中第一个判空条件,逻辑上是可以去除的,去除之后并不影响单例的正确性,但是去除之后效率低。因为去掉之后,不管instance是否已经初始化,都会进行synchronized操作,而synchronized是一个重操作消耗性能。加上之后,如果已经初始化直接返回结果,不会进行synchronized操作。

(3)第三个注意点:加上synchronized是为了防止多个线程同时调用getInstance方法时,各初始化instance一遍的并发问题。

(4)第四个注意点:getInstance方法中的第二个判空条件是不可以去除,如果去除了,并且刚好有两个线程a和b都通过了第一个判空条件。此时假设a先获得锁,进入synchronized的代码块,初始化instance,a释放锁。接着b获得锁,进入synchronized的代码块,也直接初始化instance,instance被初始化多遍不符合单例模式的要求~。加上第二个判空条件之后,b获得锁进入synchronized的代码块,此时instance不为空,不执行初始化操作。

(5)第五个注意点:instance的声明有一个voliate关键字,如果不用该关键字,有可能会出现异常。因为instance = new Test();并不是一个原子操作,会被编译成三条指令,如下所示。

1)给Test的实例分配内存

2)初始化Test的构造器

3)将instance对象指向分配的内存空间(注意,此时instance就不为空)

然后咧,java会指令重排序,JVM根据处理器的特性,充分利用多级缓存,多核等进行适当的指令重排序,使程序在保证业务运行的同时,充分利用CPU的执行特点,最大的发挥机器的性能!简单来说就是jvm执行上面三条指令的时候,不一定是1-2-3这样执行,有可能是1-3-2这样执行。如果jvm是按照1-3-2来执行的话,当1-3执行完2还没执行的时候,如果另外一个线程调用getInstance(),因为3执行了此时instance不为空,直接返回instance。问题是2还没执行,此时instance相当于什么都没有,肯定是有问题的。然后咧,voliate有一个特性就是禁止指令重排序,上面的三条指令是按照1-2-3执行的,这样就没有问题了。

3、volatila有什么作用?AtomiticInteger有什么作用,底层实现原理是什么?与synchronized关键字有什么区别?cas有什么弊端?

4、Android Log中的tag,用类名.class.getSimpleName()来获取,会有什么弊端?

5、反射有什么作用?有什么弊端?

6、广播底层实现机制?为什么会比AIDL方式慢?与EventBus相比有什么区别?

7、Handler如何保证每个线程只有一个looper?ThreadLocal有什么作用?

8、100个0~100之间的整数,实现排序

9、RxJava介绍

10、Glide介绍

11、measuredWidth和width的区别

12、SparseArray介绍,为什么能提高性能

13、MVP与MVVM的区别,MVVM的实现方式

14、分享时,Android N开始对url做了什么限制?

15、HashSet介绍

16、软引用和弱引用的区别,什么时候会GC?System.gc()的时候系统会立即回收系统垃圾吗?

17、Exception和Error有什么区别?Error能被捕捉吗?OOM Error能被捕捉吗?

18、Sharepreference commit()和apply()的区别。Sharepreference进程安全吗?线程安全吗?

19、500x500的png图片所占的内存大小。同一张图片在xxdpi-drawable和drawable中谁占用的内存更大,大多少?

20、RecyclerView与ListView的区别。

大体上这记得么多,面试官会根据回答的内容进一步深入提问,读者可以在该知识点上进一步拓展。

android工程师 腾讯,腾讯音乐Android工程师一面面试题记录,拿走不谢!相关推荐

  1. android 酷狗demo_酷狗音乐(Android)v8.1.5去广告清爽版

    本帖最后由 三生三世 于 2016-7-11 10:56 编辑 酷狗音乐安卓版更新至v8.1.5版.酷狗音乐(Android)是迄今为止最强大,最多人使用的音乐软件!有强大的音乐搜索,高速下载,海量曲 ...

  2. android酷狗界面,酷狗音乐Android 2.2版系统优化版界面曝光

    酷狗音乐Android 2.2版系统优化版界面曝光 2011-03-23 13:30:13  来源:cnbeta 扫码可以: 1.在手机上浏览 2.分享给微信好友或朋友圈 摘要: 酷狗音乐也针对And ...

  3. android 酷狗demo_酷狗音乐Android客户端详细使用评测

    曾经现在酷狗音乐一直是PC机上必装的音乐播放软件,手机音乐播放器哪个好用呢,酷狗音乐Android客户端也经过几个版本更新,版酷狗音乐的功能,界面都趋于完美.下面来看看酷狗音乐Android客户端详细 ...

  4. 阿里、腾讯、百度产品经理40+道面试题记录:我是怎样同时拿到BAT Offer的?

    2015年已经来到石榴如火的5月,没错,小半年就快过去了.很多同学正在毕业找工作,也有些同学在准备着2015的暑期实习.而进入4A.BAT.500强是很大部分营销和传媒人的选择.在求职或求实习的过程中 ...

  5. Android开发本地及网络Mp3音乐播放器(十)最近播放界面与数据保存更新

    实现功能: 实现MyLoveMusicActivity(音乐收藏界面) 实现MyRecordMusicActivity(最近播放界面) 实现MyMusicListFragment(本地音乐界面)Ite ...

  6. android腾讯一面,腾讯音乐Android工程师一面面试题记录

    最近参加了一次鹅厂音乐Android工程师面试,这里凭记忆记录了一些一面的面试题,希望能帮到正在面试的你! 1.Java调用函数传入实际参数时,是值传递还是引用传递? 2.单例模式的DCL方式,为什么 ...

  7. Android架构师吐槽腾讯王者荣耀的程序员,排位匹配算法怎么搞的,每次都输

    腾讯王者荣耀的开发来来来出来聊聊,真是日了狗了,多次离上王者还差两三颗星的时候队友就开始水的一塌糊涂,对面就牛逼的不行. 又连跪回去了,被对面把屎都打出来了,实在忍不住来吐槽,你们这个排位匹配算法到底 ...

  8. android新年祝福代码,讯飞输入法发布Android新春版 Biu一下敲出美好祝愿!

    原标题:讯飞输入法发布Android新春版 Biu一下敲出美好祝愿! 挥别难忘的2018,讯飞输入法与小伙伴们携手迎接"猪"事顺利的新一年.Boys and 朋友们.Ladies ...

  9. pc使用qq for android,腾讯QQ for Pad Android版

    QQ HD(平板专用手机QQ,Pad也能视频通话.语音对讲!)QQHD是腾讯专为Android Pad设计开发的一款即时通信软件,让您在平板电脑上获得功能丰富的畅聊体验.支持多人视频.视频美颜.文件多 ...

最新文章

  1. node:express:error---填坑之路
  2. 系统进入低功耗的配置
  3. 从Java执行可执行的命令行
  4. 支付宝工程师如何搞定关系数据库的“大脑”——查询优化器
  5. oom 如何避免 高并发_如何设计这样一个高并发系统?
  6. 贪心——雪糕的最大数量(Leetcode 1833)
  7. 中国内镜下血管采集市场趋势报告、技术动态创新及市场预测
  8. C++课设:GUI电话簿程序
  9. 资源集成视角解读项目管理-合同类型
  10. 案例分享 | 蜂窝,是“蜂窝”,虹科HK-DAT数字衰减器助力蜂窝设备测试
  11. SoftMaker Office 2021中文版软件介绍-Office办公套件媲美Microsoft Office
  12. TDMA解调接收机IP core
  13. 大数据与云计算学习:Python网络数据采集
  14. 梦幻手游最新服务器,梦幻西游手游最新服务器合服公告 5月11日合服一览
  15. oracle去掉0x00,Oracle O001 / O00n 进程 100% CPU资源耗用
  16. 51单片机——红外遥控 C语言入门编程
  17. [洛谷P2698] [USACO12MAR]花盆Flowerpot
  18. 【web前端】pc网页适配移动网页和css布局之间的矛与盾
  19. android布局中垂直居中,在Android中垂直居中视图
  20. 如何选购阿里云服务器并快速入门(Windows版本)?

热门文章

  1. python篮球-基于Python/Java的人工智能篮球训练系统的制作方法
  2. python结果输出到文件-python print输出到文件
  3. python装饰器实例-python装饰器使用实例详解
  4. python3.8.5安装-centos7 编译安装python3.8.5
  5. 我自学python的路-Python学习路线图的总结
  6. python用中文怎么说-震惊!!!python可以用中文写代码
  7. python爬虫教程视频-13天搞定Python分布爬虫
  8. Linux中vi的常用命令和快捷键使用
  9. Dockerfile命令
  10. LeetCode Longest Substring with At Least K Repeating Characters(递归)