高薪Android开发工程师面试题必备!

5-6月各种补招和散招才是招聘高峰,也是拿offer的高峰,机会多多。

悲观者往往正确,但乐观者往往成功。不要制造焦虑吓自己。

多为面试准备准备,机会多多也要把握住!

以下都是一线互联网大厂最常见的几个问题,如果是面试Android高级工程师岗,那几乎是必问面试真题

面试题一、子线程中能不能直接new一个Handler,为什么主线程可以

因为在主线程中,Activity 内部包含一个 Looper 对象,它会自动管理 Looper,处理子线程中发送过来的消息。而对于子线程而言,没有任何对象帮助我们维护 Looper 对象,所以需要我们自己手动维护。所以要在子线程开启 Handler 要先创建 Looper,并开启 Looper 循环

面试题二、Handler导致的内存泄露原因及其解决方案

原因:在Activity内将Handler声明成非静态内部类或者匿名内部类,这样Handle默认持有外部类Activity的引用。如果Activity在销毁时,Handler还有未执行完或者正在执行的Message,而Handler又持有Activity的引用,导致GC无法回收Activity,导致内存泄漏
解决方案:1、静态内部类 + 弱引用
2、如果将Handler声明成可能导致内存泄漏的情况,在Activity销毁时,可清空Handler中未执行或正在执行的Callback以及Message:
3:非静态内部类 + 弱引用,在activity要回收时清除引用

面试题三、一个线程可以有几个Handler,几个Looper,几个MessageQueue对象

一个线程可以有多个Handler,只有一个Looper对象,只有一个MessageQueue对象。Looper.prepare()函数中知道,在Looper的prepare方法中创建了Looper对象,并放入到ThreadLocal中,并通过ThreadLocal来获取looper的对象, ThreadLocal的内部维护了一个ThreadLocalMap类,ThreadLocalMap是以当前thread做为key的,因此可以得知,一个线程最多只能有一个Looper对象, 在Looper的构造方法中创建了MessageQueue对象,并赋值给mQueue字段。因为Looper对象只有一个,那么Messagequeue对象肯定只有一个

面试题四、Message对象创建的方式有哪些区别

1.Message msg = new Message();每次需要Message对象的时候都创建一个新的对象,每次都要去堆内存开辟对象存储空间
2.Message msg = Message.obtain();obtainMessage能避免重复Message创建对象。它先判断消息池是不是为空,如果非空的话就从消息池表头的Message取走,再把表头指向 next。如果消息池为空的话说明还没有Message被放进去,那么就new出来一个Message对象。消息池使用 Message 链表结构实现,消息池默认最大值 50。消息在loop中被handler分发消费之后会执行回收的操作,将该消息内部数据清空并添加到消息链表的表头。
3.Message msg = handler.obtainMessage(); 其内部也是调用的obtain()方法

这些常问的面试题。如果你是面试者,你会如何回答,能回答多少呢?

由于文章篇幅有限,只能展示部分面试题,有需要完整文档的可以点击此处 即可免费领取!
在这里插入图片描述
部分面试题:

1.Java中的==、equals和hashCode的区别
2.int和integer的区别
3.String、StringBuffer和StringBuilder的区别
4.什么是内部类?内部类的作用是什么?
5.进程与线程的区别
6.final、finally、finalize的区别
7.Serializable和Parcelable的区别
8.静态属性和静态方法是否可以被继承?是否可以被重写?
9.成员内部类、静态内部类、局部内部类、和匿名内部类的理解
10.Java的垃圾回收机制及其在何时会被触发
11.Java中的代理是什么?静态代理和动态代理的区别是什么?
12.Java中实现多态的机制是什么?
13.Java中反射的相关理解
14.Java中注解的相关理解
15.对Java中String类的理解
16.对Java中字符串常量池的理解
17.Java中为什么String类要设计成不可变的
18.Java中Hash码(哈希码)的理解
19.Object类的equal方法和hashcode方法的重写
20.Java常用集合List与Set,以及Map的区别
21.ArrayMap和HashMap的区别
22.HashMap和HashTable的区别
23.HashMap和HashSet的区别
24.ArrayList和LinkedList的区别
25.数组和链表的区别
26.Java中多线程实现的三种方式
27.Java中创建线程的三种方式
28.线程和进程的区别
29.Java中的线程的run( )方法和start()方法的区别
31.Java中wait和sleep方法的不同
32.对Java中wait/notify关键字的理解
33.什么是线程阻塞?线程该如何关闭?
34.如何保证线程的安全
35.实现线程同步的方式
36.Java中Synchronized关键字的用法,以及对象锁、方法锁、类锁的理解
37.Java中锁与同步的相关知识
38.Synchronized和volatile关键字的区别
39.Java的原子性、可见性、有序性的理解
40.ReentrantLock、Synchronized、Volatile关键字
41.Java中死锁的概念,其产生的四个必要条件
42.Java中堆和栈的理解
43.理解线程间通信
44.线程中的join()方法的理解,及如何让多个线程按顺序执行
45.工作者线程(workerThread)与主线程(UI线程)的理解
46.AsyncTask(异步任务)的工作原理
47.并发和并行的区别及理解
48.同步和异步的区别、阻塞和非阻塞的区别的理解
49.Java中任务调度的理解
50.Java中进程的详细概念
51.线程的详细概念
52.Android中的性能优化相关问题
53.内存泄漏的相关原因
54.通过Handler在线程间通信的原理
55.Android中动画的类型:
55.理解Activity、View、Window三者之间的关系
56.Android中Context详解:
57.Java中double和float类型的区别
58.Android常用的数据存储方式(4种)
59.ANR的了解及优化
60.Android垃圾回收机制和程序优化System.gc( )
61.Android平台的优势和不足

62.其他讲解:

  • Activity组件
  • Service组件
  • BoradcastReceiver组件
  • ContentProvider(内容提供者)组件
  • Fragment
  • ViewPager
  • Android的事件传递(分发)机制
  • Bitmap的使用及内存优化
  • 使用View绘制视图
  • Android内存泄漏及管理
  • Android设计模式之MVC
  • JVM运行原理详解
  • Android平台的虚拟机Dalvik
  • Java的内存分配
  • Android中的Binder机制
  • Android中的缓存机制
  • Android 中图片的三级缓存策略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/18666.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件上传漏洞详解

0x01 上传漏洞定义 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件…

MySQL索引

目录 一、索引的概述二、索引的作用2.1 索引是如何实现?2.2 使用索引的副作用 三、创建索引的原则依据四、MySQL的优化哪些字段/场景适合创建索引?五、索引的分类及创建5.1 普通索引直接创建索引修改表方式创建创建表的时候指定索引 5.2 唯一索引直接创建…

2023 年第三届长三角高校数学建模 A 题 快递包裹装箱优化问题

2022 年,中国一年的包裹已经超过 1000 亿件,占据了全球快递事务量的一 半以上。近几年,中国每年新增包裹数量相当于美国整个国家一年的包裹数量, 十年前中国还是物流成本最昂贵的国家,当前中国已经建立起全世界最强大、…

Linux基础学习---2、系统管理、帮助命令、文件目录类命令

1、系统管理 1.1 Linux中的进程和服务 计算机中,一个正在执行的程序或命令。被叫做“进程”(Process)。 启动之后一直存在、常驻内存的进程,一般称做“服务”(Service)。1.2 systemctl(CentOS…

关于如何对VS的C++项目进行完全重命名

很多人一个开始在VS编写C项目的时候,第一个项目名称都是系统默认名称或者HelloWorld这类的名字,一看就比较小白。 一段时间以后,项目已经进行了一段时间了,这时候想要对项目名称进行重命名。但是,偏偏VS的重命名功能做…

【笔试强训选择题】Day10.习题(错题)解析

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:笔试强训选择题 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!! 文章目录…

React项目总结:上一步的终点,下一步的起点

项目简介 本人利用 react18.2 json-server 做了一个后台管理系统。 包含: 用户管理权限管理站内信审核管理站内信发布管理 等内容。 其中涉及到react-router V6.0的使用以及一些权限控制等内容。 更多精彩内容,请微信搜索“前端爱好者“&#xff…

分享两款好用的软件

软件一:去水印神器——Inpaint Inpaint是一款功能强大的图像处理软件,它的主要功能是去除图片中的水印。除此之外,它还可以帮助用户修复照片中的缺陷,例如划痕、斑点、红眼等,删除照片中的不必要的元素,例…

名称空间(namespaces)与作用域

引入 在python解释器中运行一行代码import this就可以看到“传说”中的python之禅,它体现了使用python进行开发的规范,而最后一句 - Namespaces are one honking great idea -- lets do more of those!就是本文的主角。 名称空间(Namespaces) 名称空间…

Protobuf: 高效数据传输的秘密武器

当涉及到网络通信和数据存储时,数据序列化一直都是一个重要的话题;特别是现在很多公司都在推行微服务,数据序列化更是重中之重,通常会选择使用 JSON 作为数据交换格式,且 JSON 已经成为业界的主流。但是 Google 这么大…

聊聊并发编程的12种业务场景

前言 并发编程是一项非常重要的技术,无论在面试,还是工作中出现的频率非常高。 并发编程说白了就是多线程编程,但多线程一定比单线程效率更高? 答:不一定,要看具体业务场景。 毕竟如果使用了多线程&…

fbx sdk的使用介绍

我们平时需要围绕fbx写一些小工具,虽说使用ascii格式的fbx可以直接进行字符串解析,并且网上也有一些基于ascii解析的开源库,但在制作一些通用的工具时,使用fbx sdk进行编写肯定是最好的。 1.下载fbx sdk和cmake 要用cmake生成vi…

bash简单常见用法

bash新建自定义数组 myArray() for ((i 0 ; i < 5 ; i )) do myArray[$i]"AAAA{$i}DD" done echo ${myArray[]} #输出结果是AAAA{0}DD AAAA{1}DD AAAA{2}DD AAAA{3}DD AAAA{4}DD 提取文件名成功 projects"D:/Project/Program/IDEAWorkspace/myauto/automati…

Python程序员辞职后,如何踏出自由职业的第一步,聊聊我自己的看法

大家好&#xff0c;我是兴哥。有个广州的朋友说他辞职了&#xff0c;想要自由职业该怎么开始第一步呢&#xff1f;我问他你之前的收入月薪是多少&#xff0c;他说2万出头。我不得不说&#xff0c;对于写项目的自由职业程序员&#xff0c;2万是一个极高的门槛。但既然他已经辞职…

淘宝拍立淘多码识别方案总结

本文通过拆解原始问题、发散思路优化等方式&#xff0c;记录了扫一扫从单码到多码识别的技术框架改造及多码识别率优化方案。其中涉及解码SDK的能力、码处理技术链路、码转换算法、降低漏检率策略等设计与实现。 背景与挑战 多码即在同一个界面中同时存在多个条码或二维码&…

Node.js 与 WebAssembly

目录 1、简介 2、关键概念 3、生成WebAssembly模块 4、如何使用它 5、与操作系统交互 1、简介 首先&#xff0c;让我们了解为什么WebAssembly是一个很棒的工具&#xff0c;并学会自己使用它。 WebAssembly是一种类似汇编的高性能语言&#xff0c;可以从各种语言编译&…

从零开始的强化学习入门学习路线

强化学习是机器学习领域中的一个分支&#xff0c;它是指智能体通过与环境的交互来学习如何采取最佳行动以最大化奖励信号的过程。强化学习在许多领域都有广泛的应用&#xff0c;如游戏、自动驾驶和机器人控制等。如果你对强化学习感兴趣&#xff0c;下面是一个入门强化学习的学…

【分布式锁】Redisson分布式锁的使用(推荐使用)

文章目录 前言一、常见分布式锁方案对比二、分布式锁需满足四个条件三、什么是Redisson?官网和官方文档Redisson使用 四、Redisson 分布式重入锁用法Redisson 支持单点模式、主从模式、哨兵模式、集群模式自己先思考下,如果要手写一个分布式锁组件&#xff0c;怎么做&#xff…

数据备份系列:Rsync 备份实战记录(二)

一、Rsync Cron 场景使用 在对数据备份要求实时性不高的情况下&#xff0c;可优先考虑该场景&#xff0c;选择一个合适的时间&#xff0c;对数据进行定时远程增量同步。 在《数据备份系列&#xff1a;Rsync 备份详解&#xff08;一&#xff09;》中我们已经对服务搭建以及远程…

鸿蒙学习总结

控件 button 源码所在路径&#xff0c;小编也只是猜测&#xff0c;还没搞懂鸿蒙上层app到底层的玩法&#xff0c;网上也没相关资料&#xff0c;找源码真是费劲(不是简单的下载个源码的压缩包&#xff0c;而是找到里面的控件比如Button&#xff0c;或者UIAbility实现的源码&…