专栏首页Android先生写给小白的android基础面试笔试题(一)

写给小白的android基础面试笔试题(一)

序言:由于公司的某些方面原因,LZ最近都处于找工作的状态,年关了,最关键的LZ还只是个没毕业的孩子,所以工作越来越不好找了,到哪里投简历都是动不动就好几年经验,这让我们这些没经验的渣渣还怎么活啊!好了,也不吐槽那么多了,这几天到处去投简历,到处去面试,培训机构,外包公司这些都经历了个遍,总结了一下面试的时候的面试笔试题(如有错误,请及时纠正)

注:每个问题的最后都会有正确答案(粗体的就是正确答案)

1、说说你对Android四大组件的认识?

答:说实话,这种类型的题目我的内心是崩溃的,这个面太广了,不好下嘴说,我当时就是把四大组件一一介绍过去,我觉得这样能笼统的概括,而且后来我发现面试官并不是想问你四大组件是什么,请接着往下看。

四大组件:Activity、Service、Broadcast Receiver、Content Provider

2、Broadcast Receiver在什么情况下能用得到?

答:看到吧!还没等我讲完四大组件,他就开始问广播的用法,以及在什么情况下能用到,我当时回答了两点,一是系统有一些广播有时候需要用到;二是可以替换handler用来作为线程间的通信桥梁。

广播是一种机制,而且是双向的(工作线程可以往主线程发广播,主线程也可以往工作线程发广播),使用的场景有如下几点(只列举几点):

(1)、同一app内部的同一组件内的消息通信(单个或多个线程之间)

(2)、同一app内部的不同组件之间的消息通信(单个进程)

(3)、同一app具有多个进程的不同组件之间的消息通信

(4)、不同app之间的组件之间消息通信

(5)、Android系统在特定情况下与App之间的消息通信

3、请简述一下Activity的生命周期以及在什么情况下会执行相应的生命周期?

答:这个问题由于之前做过实验,分析过Activity以及Fragment的生命周期,所以记得挺牢的。

Activity生命周期:onCreate——>onStart——>onResume——>onRestart——>onPause——onStop——>onDestory

执行生命周期:在Activity创建的时候,会执行onCreate—>onStart—>onResume;

在你进入Activity之后按返回键,会执行onPause—>onStop—>onDestory;

在你进入Activity之后按Home键,会执行onPause—>onStop;

这个时候当你又回到Activity,会执行onRestart—>onStart—>onResume;

当你从A1界面跳转到A2界面时,生命周期的变化如下:

onCreate(A1)—>onStart(A1)—>onResume(A1)—>onPause(A1)—>onCreate(A2)—>onStart(A2)—>onResume(A2)—>onStop(A1);

此时如果在A2界面按下返回键,生命周期会的变化如下:

onPause(A2)—>onRestart(A1)—>onStart(A1)—>onResume(A1)—>onStop(A2)—onDestory(A2);

注:如果A2界面是一个透明主题的话,那么A1不会调用onStop方法

4、请简述一下你对fragment的理解?

答:之前我说了,遇到这类问题的时候你就从fragment是什么以及fragment在什么场景下用的到来入手,一般来说基本答这两点就可以了

fragment被称为碎片,可以作为界面来使用,在一个Activity中可以嵌入多个Fragment,而且Fragment不能单独存在,必须依附于Activity才行,但是Fragment又有自己的生命周期,也能直接处理用户的一些事件,Fragment的生命周期也受依附的Activity的生命周期影响;一般来说Fragment在平板开发中用的比较多,还有就是Tab切换

5、请简述一下Fragment的生命周期?

答:这道题没有问,个人觉得还是有必要了解一下的,技多不压身,哈哈哈!

fragment的生命周期:onAttach——>onCreate——>onCreateView——>onViewCreated——>onActivityCreated——>onStart——>onResume——>onPause——>onStop——>onDestroyView——>onDestroy;

fragment的生命周期大致就这么多,但是还有一个比较常见的就是onHiddenChanged,这个是在切换fragment的时候会执行,至于什么场景下会执行什么,我还是建议你自己动手实验一把

6、说说你知道的Android5.0和Android6.0的新功能?

答:这道题我感觉是问你对Android新东西的学习情况,所以我们程序员自学能力一定要强,要向前看,科技在进步(卧槽这尼玛进步的也忒快了点吧!),这题目我肯定没有回答全,5.0我知道的就只是MD风格的界面,通知栏的改变,最近打开的应用程序(这两个是想起来给我爸买的手机是5.0的,我玩过),一般你回答到这我觉得就差不多了,然后你可以再讲讲你怎么使用的就可以了;至于6.0嘛!我只知道权限是要动态配置的,其他我也不晓得了,下面的答案会着重5.0的MD风格和6.0的权限来讲。

Android5.0:又称为Lollipop(棒棒糖),我觉得其最大的改变在于界面风格和交互体验,用的最多的可以说是Material Design设计风格,Recyclerview,CardView等。

Material Design中常用的控件:

(1)、AppBarLayout、ToolBar

(2)、DrawerLayout、NavigationView

(3)、RecyclerView、CardView、AutoScrollViewPager

(4)、CoordinatorLayout、CollapsingToolbarLayout、TabLayout

(5)、TextInputLayout

(6)、FloatingActionButton、Snackbar

对于上面这些控件,我是将他们常在一起搭配使用的放在一起,如果你想更好的了解Material Design,请移步12个Material Design风格控件的使用:http://blog.csdn.net/hebin320320/article/details/51461611,一般面试官会着重问RecyclerView,为什么?因为RecyclerView现在正在逐步代替ListView和GridView,它的功能很强大,性能更好(Item的复用不需要自己去维护),如果有兴趣了解更多ListView与RecyclerView的区别的同学,请移步RecyclerView和ListView 使用对比分析:http://www.jianshu.com/p/f592f3715ae2

Android6.0:又称为Marshmallow(棉花糖),我觉得其最大的改变在于用户对权限的管理,我们都知道,6.0以下的Android系统在安装app的时候会默认勾选一些权限,一旦用户安装了,app可以在用户毫不知晓的情况下访问权限内的所有东西,这样感觉起来挺不好的。6.0以后,app将不会在安装的时候授予权限,取而代之的是,app会在运行时一个一个询问用户授予权限。

7、Android的APK瘦身方法你了解多少?

答:这道题,说实话我知道的就是把图片进行压缩和把没用的文件剔除,但是我对与APK包的结构还不是特别了解,所以具体还需要优化什么我也答不上来了。

在这里给大家推荐一个网站,关于图片在线压缩的TinyPNG,然后使用android studio自带工具Lint剔除无用资源(res资源文件),如果你闲的话那就再手动剔除一遍(LZ当年也是这么干的);然后你可以去实验一下,解压一个APK包,然后看看他的内部结构:

(1)、classes.dex:这是java源码编译后生成的java字节码文件

(2)、resources.arsc:这是编译后的二进制资源文件

(3)、AndroidManifest.xml:这个Manifest文件里面都是编译之后的,都是二进制,看不到什么信息

(4)、proguard.cfg:这是代码混淆配置文件

(5)、META-INF:该目录下存放的是签名信息,用来保证apk包的完整性和系统的安全

(6)、res:该目录下存放的是资源文件,但是也是编译之后的,二进制的。

你试过就会知道,真正容量大的就是classes.dex、资源文件,当然了有时候也会有lib目录,lib目录下放的是一些jar包和so包,容量也是挺大的,所以这里我们重点对这三类进行瘦身:

(1)、classes.dex:使用Proguard ,这可以让你在编译的时候对代码进行混淆和优化,删掉不必要的jar包和无用的代码。

(2)、res:使用Lint代码分析器,由于Proguard 只会对Java代码起作用,所以使用我们还得结合Lint工具,来帮你找到无用的资源文件。

(3)、lib:一个硬件设备对应一个架构(mips、arm或者x86),只保留与设备架构相关的库文件夹(主流的架构都是arm的,mips属于小众,默认也是支持arm的so的,但x86的不支持),这样可以大大降低lib文件夹的大小。

8、Android的反编译你有了解吗?(了解),说说你是怎么反编译的,res文件夹是怎么反编译出来的?

答:这道题我想说我之前看过郭神写的一篇博客《反编译与混淆技术完全解析》,而且当时我的项目中需要实现一个类似像简书编辑器那种,然后我傻傻的去编译简书的apk,结果当然是一脸的懵逼啦!这么简单就让你给爬出来的话,那简书也不用混了,不过也算是对反编译有了一定的认识。

首先我们得知道APK长什么样,在上面那个问题中已经介绍过了,就不再多说,我们都知道,编译之后的APK都是一些二进制什么的,没有什么人类能看得懂的东西,所以我们需要借助工具来帮我们看了:

(1)、dex2jar:这个工具用于将dex文件转换成jar文件。

下载地址:http://sourceforge.net/projects/dex2jar/files/

(2)、jd-gui:这个工具用于将jar文件转换成java代码。

下载地址:http://jd.benow.ca/

(3)、apktool 这个工具用于最大幅度地还原APK文件中的9-patch图片、布局、字符串等等一系列的资源。

下载地址:http://ibotpeaches.github.io/Apktool/install/

具体的反编译内容还是可以去看看郭神写的那篇,比较细致。

9、Android的多渠道打包你了解吗(抱歉,我知道,但是我没做过)?

答:说真的,对Android的APK包接触的还算是少的,因为平时都去研究代码怎么写去了,app上线的工作我就做过两回,还是一年多之前的事,之后只听说过这么个东西,但是还没有实践过。首先得要了解一下啊多渠道打包是什么意思,就算我们没有去实践过,但是你也总得知道点什么,不然到时候面试笔试问到了又是一脸懵逼。

多渠道打包:就是指分不同的市场打包,如安卓市场、百度市场、谷歌市场等等,Android的这个市场有点多,就不一一列举了,多渠道打包是为了针对不同市场做出不同的一些统计,数据分析,收集用户信息。

百度一下多渠道打包,发现用的最多的应该是AndroidStudio用的多的友盟多渠道打包和Eclipse用的多的兰贝壳儿插件多渠道打包,具体的步骤可以参考以下两个:

(1)、友盟多渠道打包:http://bbs.umeng.com/thread-9119-1-1.html

(2)、兰贝壳儿插件多渠道打包:http://www.ithao123.cn/content-9615325.html

10、那Android的apk加固你有了解吗(抱歉,我知道,但是我没做过)?

答:这道题我也是回答了一点我自己的见解,其实都是屁话,由于现在Android反编译方法越来越成熟,我们需要加固我们的app,以防止他们随意反编译,就像LZ上述讲到的去编译简书的app。

APK加固,说白了就是给APK加密,然后再套上一层壳就可以了,现在比较流行的第三方加固平台有,爱加密、梆梆加固、360加固:

(1)、爱加密:http://www.ijiami.cn/

(2)、梆梆加固:https://www.bangcle.com/

(3)、360加固:http://jiagu.360.cn/

他们的原理都是差不多的,主要的步骤就是:我们拿到需要加密的Apk和自己的壳程序Apk,然后用加密算法对源Apk进行加密在将壳Apk进行合并得到新的Dex文件,最后替换壳程序中的dex文件即可,得到新的Apk,那么这个新的Apk我们也叫作脱壳程序Apk。他已经不是一个完整意义上的Apk程序了,他的主要工作是:负责解密源Apk.然后加载Apk,让其正常运行起来。具体的操作方法可以参考

Android中的Apk的加固(加壳)原理解析和实现:http://blog.csdn.net/jiangwei0910410003/article/details/48415225

在此感谢上面引用到的博客的博主!!!!

好了,希望LZ的面试经历能对你也有所帮助,接下来我会持续更新我的面试和笔试经历,LZ要接着去找工作了,同时也希望此时正在找工作的人不要放弃,如果你也喜欢编程,喜欢Android,那就坚持下去。

本文分享自微信公众号 - Android先生(cyg_24kshign),作者:24K纯帅豆

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-02-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除

    这次主要是把 RecyclerView 比较常用的基本的点,在这里集中整理一下。从这篇文章主要梳理以下几点:

    用户2802329
  • 手把手教你在Android Studio 3.0上分析内存泄漏

    戳我下载 Android Studio 3.0:https://developer.android.google.cn/studio/index.html

    用户2802329
  • Android自定义View——从零开始实现雪花飘落效果

    前言:转眼已是十一月下旬了,天气慢慢转冷,不知道北方是不是已经开始下雪了呢?本期教程我们就顺应季节主题,一起来实现 雪花飘落的效果吧。本篇效果思路参考自国外大神...

    用户2802329
  • MySQL慢日志优化的一个案例分析

    首先问题的现象是慢日志报警比较多,这是一套内部运维业务的数据库,涉及两个独立的数据库,我们暂且称为devopsdb(运维管理系统数据库),taskopsdb(任...

    jeanron100
  • Docker容器日志管理最佳实践

    Docker 引擎日志一般是交给了 Upstart(Ubuntu 14.04) 或者 systemd (CentOS 7, Ubuntu 16.04)。前者一般...

    Criss@陈磊
  • BizTalk database lookup funcatoid DbConnectionString 设定问题有解了

    前些日子有位提出了关于database lookup funcatoid设定数据连接字符串的问题。 默认情况 ? 第一个参数条件的值 value 第二个参...

    阿新
  • linux查询日志命令总结

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    chenchenchen
  • 一次高IO下的GC分析之旅

    【监控系统】Total time for which application threads were stopped: 67.7651070 seconds,...

    用户1205080
  • 代码审计|PHP代码执行函数进阶版实力上线了!

    本篇涉及函数:call_user_func()、call_user_func_array(),array_filter,usort,uasort() 0x0...

    漏斗社区
  • Twitter发布新的大数据实时分析系统Heron

    昨日,Twitter发布了新开发的数据实时分析平台Heron,以下为官方文档摘译: 我们每天在Twitter上处理着数十亿的事件。正如你猜测的那样,实时分析这些...

    CSDN技术头条

扫码关注云+社区

领取腾讯云代金券