×

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

96
24K纯帅豆 Db3aaf4f effd 43dc 9137 d6bf7f70211e
2017.01.17 15:23* 字数 3591

序言:尽管LZ已经找到了工作,但是之前的面试经验还没有跟大家分享完,所以就打算再写一篇博客来跟大家分享,这次打算从简历、面试官会问问题的方向、投递简历的对象以及LZ遇到的最后几个面试的问题来跟大家介绍。(如有错误,请及时纠正)。

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

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

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

一、简历部分:(以下针对实习生和应届毕业生)

有些人可能会觉得,这简历有啥好说的。我想说大兄弟,这简历可是一门大学问啊!简历筛选那关过不了的话面试的机会都没有,而大部分HR看简历的速度可谓是光速,所以你能不能得到一个面试的机会大多取决于你的简历写的怎么样,当然了,除非特别牛逼的你能够做特别牛逼的事。
1、个人信息:姓名,年龄,现住地址(或者身份证上的),邮箱,联系方式这些就差不多了,当然了你也可以加一点对你自己有利的信息(XXX的儿子,哈哈哈!开个玩笑)

2、工作经历(实习经历):写实习经历的时候,如果你在多家公司实习过,那就从最新的往下写,如果刚开始找实习没有经验的话,那也可以写一点你在学校实验室的经历(这种不要写那么多),如果实在没有,那你就往下面一条看吧!实习经历可以写你在公司担任什么样的角色,做了一些什么事,有没有什么特别或者突出的事迹,你都可以写出来,但是不宜过多

3、项目经历(实验室的项目也行):这个也同上,有多个的话从最新的开始写,这个的话把你在公司、在实验室你做过的一些项目(如果没有公司和实验室,可以写一下你自己做的小东西,再没有的话,那你回去审视一下你自己),项目名称,项目内容,你在该项目担任的角色(也就是你所做的事),同样,如果有什么特别的,你也可以重点写,但是不宜过多

4、专业技能:也就是你所应聘岗位的专业技能,或者相关的也行,尽量不要写一些与你应聘岗位无关的东西,举个栗子,LZ前段时间失业的时候,同学给我推荐去他们公司做Java实习,我在我简历原来的基础上加了点Java的东西,然后简历就给发过去了,结果肯定是简历都没有过,虽然说是内推过去的,但是人家一看简历,全是Android开发的,这样自然是不会通过的

5、自我评价:首先一句话简单概括你的职场特点,这里就可以自己随便瞎逼逼了,怎么厉害怎么来,对于我们刚步入职场的人来说,我们得重点强调自己学习能力强(自学能力强),好学,因为对于大多数刚出来找工作的小白来说,工作经验肯定很少,我们能吹的肯定就是自身的学习能力了,不过说实话,干我们这一行的,自学能力要不强的话,肯定会被淘汰的

6、教育经历:教育经历的话可以简单分为三点:
(1)、大学的学校,学历,专业这些简单介绍一下
(2)、在大学生涯中的一些特别的经历,社团啊,比赛啊什么的
(3)、在大学生涯获得过的一些奖项(有的话就写上)

7、语言能力:你所熟悉的语言,最好是拿过证的,像CET4、CET6、日语,计算机等级证书(计算机专业的就没有必要了)

8、个人爱好:写一点自己平时的一些爱好就可以了,打游戏也是可以的。我记得我上次面试,面试官还问平时有喜欢玩的游戏吗,可惜LZ对游戏不感兴趣

9、个人博客(有的话可以写一写):这一项是加分的,如果你平时有写博客的习惯的话,你可以把博客地址贴出来,面试官看到了可能会问的,然后你就可以跟他逼逼你平时经常会看博客啊!写博客啊什么的

好了,简历写完之后,你得多看两遍,最好不要出现语句错误或者错别字等等,如果还不放心的话你还可以发给你的同学看看,让他们帮你找找还有没有错误,然后你就可以去投简历了,如果没有面试的经历的话,可以根据自身的能力海投简历,这样可以增加你的面试机会。简历部分就介绍到这里了,有什么更好的建议可以私戳我。

二、面试题部分:

1、DVM与JVM分别是什么,他们之间有什么区别?
答:这道题是我补充了,笔试的时候上面只问了DVM,我觉得大家也有必要了解一下JVM,所以我就加上了。这两个名词我知道是什么,但是它们的区别我只知道执行的文件是不一样的,他们之间的不同点是:

  • DVM(Dalvik Virtual Machine)是Android的虚拟机,我们都知道,Android也是用Java开发的,但是最终编译的时候不是生成.class文件,而是生成.dex文件,DVM负责执行的就是.dex文件,而JVM(Java Virtual Machine)是Java的虚拟机,它执行的就是.class文件。
  • DVM是基于寄存器的虚拟机,而JVM执行是基于虚拟栈的虚拟机。寄存器存取速度比栈快的多,DVM可以根据硬件实现最大的优化,比较适合移动设备。
  • .class文件存在很多的冗余信息,dex工具会去除冗余信息,并把所有的.class文件整合到.dex文件中。减少了I/O操作,提高了类的查找速度。

2、什么是ANR,在什么场景下会发生,谈谈你又是怎样解决的?
答:这道题考你的知识点还是挺多的,如果你遇到过那就还好,能知道它为什么会发生,如果没有遇到过,那可能会有点懵逼。相信大家都遇到过有时候玩手机的时候卡住了,这时候屏幕会弹出一个框,提示你继续等待还是直接关闭软件,这个就是ANR。
为什么会这个现象呢?在Android里,应用程序的响应性是由Activity Manager和WindowManager系统服务监视的 。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:
(1)、在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)
(2)、BroadcastReceiver在10秒内没有执行完毕
但是造成上面两点的原因有很多,比如在主线程中做了非常耗时的操作,比如说是下载,io异常等等。

  • 解决方法如下:
    (1)、首先,一个程序一般只有一个主线程,而我们不能在主线程中做太多的工作,一般你的网络操作,数据库操作或者一些其他的耗时操作你都应该放在线程中处理,然后使用handler来维持子线程和主线程之间的通信。
    (2)、然后,应用程序应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是在子线程里做这些任务(因为 BroadcastReceiver的生命周期短),如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个 Service。
    (3)、最后,避免在Intent Receiver里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。
    最后的最后,再说一句,使用异步的方式来完成你的耗时操作。

3、说说你对Activity几种启动模式的理解?并谈谈你在项目中用到过的一些启动模式
答:相信这道题对大家来说并不难,这是Android中的基础部分,但是用到过的相信咱们这种小白肯定是很少的,像LZ就是,除了默认的启动模式,其他在项目中还都没用到过。

Activity中有四种启动模式:
(1)、standard模式:这是Activity的默认启动模式,每次打开一个Activity时都会创建Activity实例,并放入任务栈中。这个没什么好说的。
(2)、singleTop模式:栈顶模式,如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。该种模式适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。适合从外界可能多次跳转到一个界面的情景。
(3)、singleTask模式:任务栈模式,如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。该种模式适合作为程序入口点。例如浏览器的主界面。不管从多少个应用启动浏览器,只会启动主界面一次,其余情况都会走onNewIntent,并且会清空主界面上面的其他页面。
(4)、singleInstance模式:实例模式,适合需要与程序分离开的页面。例如闹铃提醒,将闹铃提醒与闹铃设置分离。singleInstance不要用于中间页面,如果用于中间页面,跳转会有问题,比如:A -> B (singleInstance) -> C,完全退出后,在此启动,首先打开的是B
有些应用场景我都还不知道,装了一手好逼,详细请参见Android四种启动模式及其应用场景

4、说说你对onSaveInstanceState()方法的理解?
答:原问题是这样的,打开一个Activity的时候,输入了一些数据,这时候Activtiy异常终止了,我想在Activity再次打开的时候获取到之前的数据,该怎么做?好像问题大致是这样子的,不过我知道他肯定是在考我对onSaveInstanceState()这个方法的使用。
首先你得知道,在什么情况下会调用onSaveInstanceState()方法,正常情况下,Activity是不会调用onSaveInstanceState()方法的,只有当程序异常终止了,如横竖屏切换,按下Home键,按下锁屏键等才会调用该方法,总而言之,就是当系统未经你的允许(你的操作)就销毁了该Activity时,才会调用该方法。所以该方法适合保存一些临时性的数据,如果想要持久化保存数据,就要将操作放在onStop(), onDestroy()这些方法中去。

最后,说一下之前有人问LZ的像我们去应聘初级Android的岗位,面试官会问MVP,MVC设计模式吗?大多数是不会问的,如果你知道那更好,还有一些其他的知识,像自定义View的实现,View的事件分发机制,View的绘制过程等等大多都不会问的,这种问题最起码一两年以上的开发经验才会问你

在这里LZ还是建议像我们这种处于底端的小白们尽量多去学习Java的一些基础知识,真的特别重要。之前遇到过很多人都在问,我没学过多少Java可以直接学习Android吗?之前的我肯定会说,当然可以啊!慢慢做Android开发,Java慢慢就会了;但是我现在会说,如果你正打算着手Android开发,那么请一定要先把Java基础学好。

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

好了,这一次的面试经验以及简历的经验就跟大家分享到这里了,希望能对大家有所帮助,最近在GitHub上看到一个Android面试大全的干货,在这里分享给大家Android面试干货

公众号:Android技术经验分享
提笔Android
Web note ad 1