持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
前言
Android 工程师的竞争环境越来越激烈,但 Andorid 开发仍然是一个刚需的工种,行业对人才的需求从未终止,但与此同时也对我们提出了更高的要求;如果你仍然只是在日常开发过程中复制粘贴,或者仍以完成一个项目需求为唯一目的,只是掌握了如何去调用某个 API 或者数据结构来实现某个功能,已经不能算是合格的工程师了
对于 Android 开发者来说,要成为优秀的 Android 开发工程师,不只能够让你在工作中更加游刃有余,同样会让你在职业发展中面临更多优质的机遇,那么在大厂面试中与项目相关的面试题有哪些呢?下面就给大家分享一下
Android 项目构建面试题分享
git 常用命令有什么?
-
git init:仓库的初始化
-
git status:查看当前仓库的状态
-
git diff:查看仓库与上次修改的内容
-
git add:将文件放进暂存区
-
git commit:提交代码
-
git clone:克隆代码
-
git bransh:查看当前分支
-
git checkout:切换当前分支
git 工作流你怎么理解?
-
fork/clone(主流)fork: 将别人的仓库代码fork到自己的仓库上
-
**clone:**克隆下自己仓库的代码
-
**updatecommit:**修改代码并提交到自己的仓库
-
**push:**提交到自己的仓库pull
-
**request:**请求添加到别人的仓库
proguard 是什么?
- ProGuard 工具是用于压缩、优化和混淆我们的代码,其主作用是移除或混淆代码中无用类、字段、方法和属性
proguard 技术功能有什么?
-
压缩
-
优化
-
混淆
-
预检测
一句话概况 proguard 工作原理
- 将无用的字段或方法存入到EntryPoint中,将非EntryPoint的字段和方法进行替换
为什么要混淆?
- 由于Java是一门跨平台的解释性语言,其源代码被编译成class字节码来适应其他平台,而class文件包含了Java源代码信息,很容易被反编译
annotationProcessor 与 compileOnly 的区别
-
**annotationProcessor:**编译时生成代码,编译完就不需要了
-
**compileOnly:**有重复的库时,可以剃除重复库,只保留一个库
annotationProcessor 与 compileOnly 都是只编译并不打入 apk 中
AsyncTask 面试题分享
AsyncTask 是什么?
- 它本质上就是一个封装了线程池和 Handler 的异步框架
AsyncTask 引起的内存泄漏
-
**原因:**非静态内部类持有外部类的匿名引用,导致 Activity 无法释放
-
**解决:**AsyncTask 内部持有外部 Activity 的弱引用AsyncTask改为静态内部类 AsyncTask.cancel()
AsyncTask 生命周期
- 在 Activity 销毁之前,取消 AsyncTask 的运行,以此来保证程序的稳定
AsyncTask 结果丢失
- 由于屏幕旋转、Activity在内存紧张时被回收等情况下,Activity会被重新创建,此时,旧的AsyncTask持有旧的Activity引用,这个时候会导致AsyncTask的onPostExecute()对UI更新无效
AsyncTask并行or串行
-
AsyncTask在Android 2.3之前默认采用并行执行任务,AsyncTask在Android 2.3之后默认采用串行执行任务
-
如果需要在Android 2.3之后采用并行执行任务,可以调用AsyncTask的executeOnExecutor()
就举例这么多了,面试题也不是几个就能全部覆盖的,毕竟面试官不是吃素的,他会换着花样问你
喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~