每日一道项目构建面试题,看完直接怼项目经理

81 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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()

就举例这么多了面试题也不是几个就能全部覆盖的,毕竟面试官不是吃素的,他会换着花样问你

喜欢本文的话,不妨顺手给我点个小赞、评论区留言或者转发支持一下呗~