面试面试

[Android] 面试题总结-猎趣-Android部分

2017-03-26  本文已影响95人  暗影飞客

前言

昨天(很久之前 = =),很意外的接到了猎趣的电话,直奔主题就开始面试了,我都不知道我投过这家公司,后来才知道,是朋友推荐的。面试官人很好,问的问题分了 Java,Android 两类,从简单到深入,一点一点来,事后,我觉得这是很难得的经历,打算记录下来,以备后用。

Android 问题

下面我一个一个整理资料,为自己做一个总结。

1, Activity 生命周期

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy();
还有一个 onRestart();这个基本没有什么问题,额外提一句 ** onNewIntent() ** 虽然不属于生命周期,但是有的公司面试,也会问到。
接下来是,Activity A,B,分别执行了哪些方法?顺序如下:

2,Activity 的 4 种启动模式

android:launchMode="standard | singleTop | singleTask | singleInstance"
先简单描述一下 Activity 任务栈:任务栈是一种后进先出的结构,每个 APP 默认只有一个栈,以APP的包名来命名。

3,异步消息处理机制

关于这个问题,我就不献丑了,我也是仔细阅读了 鸿洋 郭霖 大神的博客,才差不多懂了,双手奉上链接:

Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
Android异步消息处理机制完全解析,带你从源码的角度彻底理解

在此之前,我一直认为,Looper 就是一个 while(true) 的循环体,真是尴尬 = =!
在这里总结一下,防止自己又忘了:
Looper 内部有两个重要的方法:prepare() 和 loop();

另外,面试官还问我,子线程中能不能创建 Handler,一脸懵逼 = =

// 这是官方的标准写法
class LooperThread extends Thread {  
      public Handler mHandler;  
      public void run() {  
          Looper.prepare(); // 没有这句话,会报错。
  
          mHandler = new Handler() {  
              public void handleMessage(Message msg) {  
                  // process incoming messages here  
              }  
          };  
  
          Looper.loop();  
      }  
  }
4, Window,Activity,View

坦白说,这个是我从来没有研究过的问题,被问到时,第一反应是懵逼 = =,但是也不能直接说不知道,真尴尬,瞎扯了一会儿,然后面试官说,回答错了,我坦率地问了一句,“能否简单给我讲一下这个知识点吗?我真的很想知道!”,没想到面试官真的回答,我很惊讶,对这个公司的印象分,一下子上升了好大一截 ^ ^
时间过去了快2个礼拜,我只隐约记得,说:Window 是 容器;View 是视图,画布;而 Activity 可以看作是控制器,将 View 和 Window 关联在一起,这三者的关系有点像
MVC,你去读一读 setContentView() 的源码,就知道了。
不得不说,我阅读源码的能力,很是很弱的 = =,于是乎,我借鉴了以下文章:

理清Activity、View及Window之间关系
Activity、View、Window的理解

特别是后一篇,是我极偶然看到的(已经忘记是怎么搜到的了),大家有兴趣自己去看,我只简单总结一下:

  1. Window:一个 App 中有多个 Window,大小可自定义,作为盛放
    View 的容器;
  2. View:UI组件;
  3. Avtivity:关联 Window 和 View 的存在,用于控制 Window 下的 View-Tree;
  4. 不知道这个形容是否准确,但是容易理解和记忆吧 = =
    系统 <====> Window <====> Activity <====> View
    国家 <====> 房地产商 <====> 物业 <====> 居民
    ** 国家分配地皮给房地产商用以建造房屋,房地产商利用物业去管理居住在此的居民。 **
5,动画

关于这个,我只是会用而已,强烈建议,仔细阅读以下** 郭霖大神 **的文章,我陆陆续续看完了,也实践过,但是不经常用,就又忘记了 = =

Android属性动画完全解析(上),初识属性动画的基本用法
Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
Android属性动画完全解析(下),Interpolator和ViewPropertyAnimator的用法

简单回答,面试问题:
三种:逐帧动画(frame-by-frame animation),补间动画(tweened animation),和属性动画(property animation)。
区别:补间动画,只是重新绘制了而已,其属性并未改变;属性动画,则是直接改变了其属性。

6,实现 View 滑动的几种方式(随手指滑动)

随手指滑动,基本都是用到 onTouchEvent() 这个我就不多说了,我知道的有以下几种方式:

** 以下是我所不知道的,连听都没听说过,真是孤陋寡闻啊 = = **

哦,忘记了说了,scrollTo()scrollBy() 分别继承自什么?面试官好坏,还挖坑 = =,“ 分别 ”,明明都继承自 View 类,哼~
再提一句,scrollBy() 内部调用了 scrollTo()

后记

这一篇拖得比较久,快两个礼拜了,真是抱歉,拖延症犯了 = =
主要原因了,我从西安去北京了~,原因是什么,大家应该猜到了,嘻嘻,没错,我收到 Offer 了,整体来说,全凭运气吧,我总觉得是因为,在面试过程中,我问面试官了一句,** “ 能否简单给我讲一下这个知识点吗?我真的很想知道!” **,多么红果果的求知欲,哈哈~
说实话,真的是运气使然,要感谢我的好基友,涛子~ 嘿嘿
明天就要正式去猎趣上班啦~ 跪求不要一日游~

上一篇 下一篇

猜你喜欢

热点阅读