美文网首页Android开发Android开发经验谈Android技术知识
Android基础都没学好就去面试,这不是挖坑给自己跳吗?字节跳

Android基础都没学好就去面试,这不是挖坑给自己跳吗?字节跳

作者: jett老师 | 来源:发表于2020-08-27 16:41 被阅读0次

    前言

    我是1月8号下午两点进行的面试,是一面。之前学校内推给了搜狐的offer,但迟迟没有消息,所以就自己用某招聘软件投简历广撒网。其实一开始我并没有投字节跳动,可能是最近他们太缺人了吧,就给我发了消息让我把简历投过去,之后就安排我面试了。之后第二天上午通知我一面过了,让我准备二面。一面过程感觉很糟糕,很多基础问题都没答上来,因为觉得可能是大公司,不会在意太多的基础,结果被虐了。但是还是过了,目前搜集了很多面经,总结了一些常见问题,希望下一次面试表现会好一点。

    面试官的问题

    1. 请描述一下Activity 生命周期。

    答: 共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。

    onCreate(): 创建Activity时调用,设置在该方法中,还以Bundle的形式提供对以前存储的任何状态的访问。onStart(): Activity变为在屏幕上对用户可见时调用
    onResume(): Activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用。
    onPause(): Activity被暂停或收回cpu和其他资源时调用,该方法用户保护活动状态的,也是保护现场。
    onStop(): Activity被停止并转为不可见阶段及后续的生命周期事件时调用。
    onRestart(): Activity被重新启动时调用。该活动仍然在栈中,而不是启动新的Activity。

    1、完整生命周期: 即从一个Activity从出现到消失,对应的周期方法是从onCreate()到onDestroy()。

    2、可见生命周期: 当Activity处于可以用户看见的状态,但不一定能与用户交互时,将多次执行从onStart()到onStop()。

    3、前景生命周期: 当Activity处于Activity栈最顶端,能够与其他用户进行交互时,将多次执行从onResume()到onPause()。

    2. 两个Activity之间跳转时必然会执行的是哪几个方法。

    答: 两个Activity之间跳转必然会执行的是下面几个方法。

    onCreate()//在Activity生命周期开始时调用。
    onRestoreInstanceState()//用来恢复UI状态。
    onRestart()//当Activity重新启动时调用。
    onStart()//当Activity对用户即将可见时调用。
    onResume()//当Activity与用户交互时,绘制界面。
    onSaveInstanceState()//即将移出栈顶保留UI状态时调用。
    onPause()//暂停当前活动Activity,提交持久数据的改变,停止动画或其他占用GPU资源的东西,由于下一个Activity在这个方法返回之前不会resume,所以这个方法的代码执行要快。
    onStop()//Activity不再可见时调用。
    onDestroy()//Activity销毁栈时被调用的最后一个方法。

    3. 横竖屏切换时候Activity的生命周期。

    答:1、不设置Activity的android: configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
    2、设置Activity的android: configChanges=“orientation”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
    3、设置Activity的android: configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfiguration方法

    4. 如何将一个Activity设置成窗口的样式。

    答:第一种方法,在styles.xml文件中,可以新建如下的类似Dialog的style。
    <style name=“Theme.FloatActivity” parent=“android:style/Theme.Dialog”> </style>。
    第二种方法,在AndroidManifest.xml中在需要显示为窗口的Activity中添加如下属性: android: theme=“@style/Theme.FloatActivity”即可。也可以直接添加对应需要展示为Dialog style的Activity的android: theme属性为android: theme=“@ android: style/Theme.Dialog”。

    5. 两个Activity之间怎么传递数据?

    答: 可以在Intent对象中利用Extra来传递存储数据。
    在Intent的对象请求中,使用putExtra(“键值对的名字”,”键值对的值”);在另外一个Activity中将Intent中的请求数据取出来:
    Intent intent = getIntent();
    String value = intent.getStringExtra(“testIntent”);

    6. 怎么让在启动一个Activity是就启动一个service?

    答: 首先定义好一个service,然后在Activity的onCreate里面进行连接并bindservice或者直接startService。

    7. Activity怎么和service绑定,怎么在activity中启动自己对应的service?

    答:①activity能进行绑定得益于Serviece的接口。为了支持Service的绑定,实现onBind方法。
    ②Service和Activity的连接可以用ServiceConnection来实现。需要实现一个新的ServiceConnection,重现onServiceConnected和OnServiceDisconnected方法,一旦连接建立,就能得到Service实例的引用。
    ③执行绑定,调用bindService方法,传入一个选择了要绑定的Service的Intent(显示或隐式)和一个你实现了的ServiceConnection的实例

    8.什么是Service以及描述下它的生命周期。Service有哪些启动方法,有什么区别,怎样停用Service?

    答: Android Service是运行在后台的代码,不能与用户交互,可以运行在自己的进程,也可以运行在其他应用程序进程的上下文里。需要通过某一个Activity或者Context对象来调用。Service有两个启动方法,分别是Context.startService()和Context.bindService()。如果在Service执行耗时的操作需要启动一个新线程来执行。

    Android Service只继承了onCreate(), onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用onCreate(), onStart()这两个方法,当停止Service时,则执行onDestroy()方法时。如果Service已经启动了,当我们再次启动Service时,不会再执行onCreate()方法,而是直接执行onStart()方法。

    9. 什么时候使用Service?

    答: 比如播放多媒体的时候,用户启动了其他Activity,这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你的地理信息位置的改变等等。

    10. 请描述一下Intent 和 Intent Filter。

    答: Intent在Android中被翻译为”意图”,他是三种应用程序基本组件-Activity,Service和broadcast receiver之间相互激活的手段。在调用Intent名称时使用ComponentName也就是类的全名时为显示调用。这种方式一般用于应用程序的内部调用,因为你不一定会知道别人写的类的全名。而Intent Filter是指意图过滤,不出现在代码中,而是出现在android Manifest文件中,以的形式。(有一个例外是broadcast receiver的intent

    filter是使用Context.registerReceiver()来动态设定的,其中intent filter也是在代码中创建的)

    一个intent有action,data,category等字段。一个隐式intent为了能够被某个intent filter接收,必须通过3个测试,一个intent为了被某个组件接收,则必须通过它所有的intent filter中的一个。

    其他基础面试题,可以查看我的【GitHub】都是近年大厂面试真题!

    如何打好基础

    Android的入门还是很容易的,但是后续的难度会比前期难很多,所以前期学习过程中一定要打牢基础。

    以下是学习路线:

    1、Java基础

    虽然现阶段Google已经将Kotlin定为官方推荐语言,但是大多数国内项目都是用Java开发。即使以后的大趋势是向Kotlin转换,也需要一些时间,所以完全不用担心Java会过时,你可以在Android学的差不多的时候再去学Kotlin,学习成本也会很低。

    1. 如果非科班出身建议看视频或者找人指导学习,科班出身可以直接看Java相关书籍,基础好的可以一边了解Android一边学习Java。

    2. 对于Java需要掌握到什么程度:- Java基本数据类型、基本语法、关键字、表达式和分支循环- 面向对象,封装、多态和继承- 接口的使用方法和场景- Java常用的各类型集合的优缺点及使用场景- JavaI/O- Java的多线程- Java的反射机制和泛型- 一些常用的设计模式(如:单例、工厂等)

    掌握了以上Java知识基本可以应对很多开发场景。

    2、Android(软硬件部分)

    1. 开发平台:电脑用Windows的或者Mac都可以,处理器最好i5及以上,8G内存及以上,配上固态硬盘。(推荐Mac)

    2. 开发工具:Eclipse已经很少见到,大多数开发人员都选择AndroidStudio(IntelliJ IDEA也可以,跟AS类似),调试可以用AS自带的模拟器或者第三方模拟器,有条件的请用真机。

    3. 开发环境:配好Java环境,正常安装AndroidStudio即可。

    3、Android(基础编程部分)

    1. 了解项目工程各个目录的作用

    2. 学习各类基本布局的使用方法

    3. 了解基本控件的使用(如:TextView、ImageView等)

    4. Activity和Fragment的生命周期,数据交互方法

    5. 列表类控件(如:RecylerView、ListView等)和Adapter的使用方法

    6. Activity的启动模式,四大基本组件的作用及使用场景

    4、Android(进阶编程部分)

    1. 数据库的简单存储(增删改查)

    2. Android自带的SharePreferences存储

    3. 文件存储的方法

    4. Android的消息机制和异步任务

    5. 三种动画的使用

    6. 了解Http协议相关的知识

    7. 触摸事件的分发机制

    8. 自定义View

    掌握以上的知识基本可以算是入门了,能自己写一写简单的东西,但是想要直接做项目还有一定的距离。

    总结

    所以基础是根本!但是想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以这里分享一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。(以下是一小部分,获取更多其他精讲进阶架构视频资料可以点击点击链接加入【Android高级架构师交流
    ①Android开发核心知识点笔记

    ②对标“阿里 P7” 40W+年薪企业资深架构师成长学习路线图

    ③面试精品集锦汇总

    ④全套体系化高级架构视频

    Android精讲视频领取学习后更加是如虎添翼!进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

    【Android进阶学习视频】、【全套Android面试秘籍】点击领取:评论回复【666】即可获取!

    相关文章

      网友评论

        本文标题:Android基础都没学好就去面试,这不是挖坑给自己跳吗?字节跳

        本文链接:https://www.haomeiwen.com/subject/ogwcsktx.html