Android面试--纸上谈兵系列

作者-焕然一璐,支持原创,转载请注明出处,谢谢合作。
原文链接:http://www.jianshu.com/p/8500d42e3c91

技术面

一、自我介绍一下吧

我是来自广东工业大学信息工程学院的吴焕楠,焕然一新的焕,木字边加东南西北的楠,我来应聘的岗位是android开发工程师。大二开始自学android开发,看的是淘宝网买的一套黑马程序员的视频教程,后来又在菜鸟窝官网学习了一套叫做《菜鸟商城》的实战视频教程,后期主要是靠实习和看书,看博客来提升自己的技术水平。

二、在什么地方实习过?实习多久?平时主要做什么?离职了吗?为什么离职?

是这样的,我是在今年3月份开始在悦乎网络科技有限公司实习的,一直到九月份才离职,一共工作了6个月。这家公司是一家创业型公司,规模比较小,但是基本所有功能模块都是自己独立完成的,这样可以有更多锻炼自己的机会。但是毕竟是实习,薪水只能满足于生活费用,现在觉得自己的水平已经有一定提升,因此想得到贵公司的认可。

平时主要的任务就是负责开发《师兄帮帮》APP的各种功能模块的调研,开发以及日常的升级与维护。

三、能不能简单介绍一下你做过的APP?

《师兄帮帮》是一款垂直社交应用平台,这款产品主打是大学生,里面有20万份资料供用户阅读查看和下载。用户可以在这个平台上发布问题或者需要,也可以进行抢单,解决问题以后就有相应的报酬。

四、你在开发这个APP的时候你遇到过的技术难点有什么?你是怎么解决的?(重点问题)

1、 首先要说的问题就是APP内部查阅资料的问题。资料有word、excel、ppt、PDF、图片等格式。由于PDF和大图的查看网上有很多成熟的解决方案。但是谷歌官方并没有在android原生平台查看office文档的功能,相对来说IOS的浏览器内核Safari是支持直接打开office文档的。

解决:因此只能找第三方解决方案。当时考虑过使用Apache的POI,但是发现这个库主要是java方向的,对于android的兼容性做得不是很好。也考虑过使用韩国的一款office SDK,叫做北极星Office,但是后来考虑到这个SDK收费太贵所以没有使用。最后是决定采用使用Web Office服务,有服务动态生成office文档的url,用android的WebView来加载和浏览。

2、 第二个要说的就是沉浸式状态栏的实现。这个问题比较尴尬,因为我们的标题栏是白色的,因此如果直接设置状态栏的颜色为白色的话,那么原有的状态栏上面的文字是白色的话就看不见了。

解决:目前来说只有小米、魅族以及android6.0以上才提供了设置状态栏字体颜色的API。考虑到兼容性问题,只能参考市面上的一些app,把状态栏设置为半透明的黑色。使用了github上面的一个开源库system bar tint,并且在app主题中开启了透明状态栏。

3、 短信验证码的自动填写。

解决:使用Content
Observer去观察短信数据库的收件箱,当有新的短信进来的时候,就通过正则表达式去获取短信中的验证码,并且通过handler把结果传递到UI中。

4、 动态库文件(so文件)冲突:由于当时想引入Fresco图片缓存框架,但是后来发现由于Fresco框架对不同架构的平台的支持得非常好,提供了所有平台的so包,但是这样会导致app不能正确加载其他库(如短信验证SDK)的so库,从而引发crash。

解决:当时是看到Stack
Overflow上的一篇博客介绍,通过配置APP的gradle脚本文件,使得app只输出armabi架构的so包,成功解决问题。

5、 实现防止多终端登录同一个账号的时候,服务器需要知道用户是否正在登录app。

解决:通过后台开一个Service,每隔一段时间去访问服务端的一个心跳接口,从而告诉服务端app的某个账号正在使用。

6、 使用第三方SDK的时候,例如融云即使聊天、Ping++的时候,遇到问题一般都是通过提交工单的方式去寻求解决。

五、你说你看过好多书,能不能简单介绍一下你看过什么书?平时看什么博客?自己写过博客吗?

《android源码设计模式解析与实战》,这是一本介绍了设计原则、设计模式以及android源码的一本书。

《android群英传》,《android开发艺术探索》,《android开发从小工到专家》,这些都是android方面的技术进阶书籍,从各个方面介绍android开发中的一些常见的难点。

《android神兵利器》,主要介绍了git、android studio等工具的使用,还没看完。

平时看的博客主要来源于CSDN,微信公众号等,自己有在简书上面写技术博客以及笔记。

六、你会不会使用反射技术?你是怎么理解这个技术的?在什么地方用过?

我对反射技术的理解就是,反射就是把Java类中的各种成分通过java的反射API映射成相应的Java类,得到这些类以后就可以对其进行使用。比如方法,构造方法,成员变量,类型,包等。

直接用到反射技术的不多,一般都是间接用到比较多。比如:

1、android中的通过读取布局文件的信息,然后利用反射来构造各种控件的对象。

2、使用开源ORM数据库框架的时候,是通过反射的方式来进行java Bean和表的映射的。

3、Gson在解析JSON并且生成Bean对象的时候利用了反射技术。

七、什么是设计模式?你知道哪些设计模式?简单介绍一下吧

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。

单例模式,主要用在一些资源消耗比较多的类身上,比较典型的实现由DCL方式、枚举、静态内部类来实现。例子有

  1. SystemService
  2. 操作数据库的类,DataBaseOpenHelper
  3. 操作SharePreference的类
  4. 各种管理类,比如网络,图片加载器等等

Builder模式,主要是用作一些复杂类的构建,并且一般支持连点操作。例子:

  1. AlertDialog的构建
  2. ImageLoader等图片加载框架类的构建

Adapter模式:这种模式主要是解决接口不兼容的问题。例子:

我们常用的ListView、RecycleView等,就使用了adapter模式设计,这样做分离了ListView显示视图,Adapter提供数据以及操作的功能,负责单一职责原则。

观察者模式:这种模式是主要有被观察者、观察者组成,当被观察者的观察行为发上变化的时候,观察者可以马上做出相应处理。例子:

  1. Content Observer

  2. RXJava

  3. ListView、RecycleView在设置Adapter的时候也注册了数据观察者,当用户调用notifyDateSetChange等方法的时候,这些观察者就会通知这些控件去重新刷新视图。

工厂模式:主要是定义了一个对象创建的接口,具体产生什么类由用户去实现。例子:

  1. Activity中的onCreate方法,就是构造视图View的工厂方法
  2. Collection中的iterator方法
  3. Bitmap的创建也可以通过工厂方法

装饰者模式:动态地给一个对象添加一些额外的功能。例子:应用:IO流,ContextWrapper等。

八、Activity和Fragment之间你是怎么传值的?

  1. 通过findFragmentByTag或者getActivity获得对方的引用(强转)之后,再相互调用对方的public方法,但是这样做一是引入了“强转”的丑陋代码,另外两个类之间各自持有对方的强引用,耦合较大,容易造成内存泄漏。
  2. 通过Bundle的方法进行传值,并且在创建Fragment的时候通过setArguments方法把Bundle设置进去。
  3. 利用eventbus进行通信,这种方法实时性高,而且Activity与Fragment之间可以完全解耦。

九、简述一下android的消息传递机制吧。

Android中的消息机制主要是指Handler的运行机制。Handler是进行线程切换的关键,在主线程和子线程之间切换只是一种比较特殊的使用情景而已。其中消息传递机制需要了解的东西有Message、Handler、Looper、Looper里面的MessageQueue对象。我们可以把整个消息机制看作是一条流水线。其中:

  1. MessageQueue是传送带,负责Message队列的传送与管理
  2. Looper是流水线的发动机,不断地把消息从消息队列里面取出来,交给Handler来处理
  3. Message是每一件产品
  4. Handler就是工人。但是这么比喻不太恰当,因为发送以及最终处理Message的都是Handler

app在启动的时候,也就是执行ActivityThread的main方法的时候,会为主线程创建Looper,并且启动整个app的消息循环,同时保证app不会立马退出。

十、简述一下android的事件传递机制吧。遇到过(滑动)事件冲突吗?你是怎么解决的?

事件总是从上往下进行分发,即先到达Activity,再到达ViewGroup,再到达子View,如果没有任何成员消耗事件的话,事件会顺着路径往回传递。

  1. dispatchTouchEvent是事件的分发方法,如果事件能够到达该视图的话,就首先一定会调用,一般我们不会去修改这个方法。
  2. onInterceptTouchEvent是事件分发的核心方法,表示ViewGroup是否拦截事件,如果返回true表示拦截,在这之后ViewGroup的onTouchEvent会被调用,事件就不会往下传递。
  3. onTouchEvent是最低级的,在事件分发中最后被调用。
  4. 子View可以通过requestDisallowInterceptTouchEvent方法去请求父元素不要拦截。

遇到过事件冲突:就是ViewPager其中一个Pager上面的Banner,当Banner还没滑到最后一页的时候,应该请求ViewPager不要拦截自己的滑动事件;当Banner滑动到最后一页的时候,要请求ViewPager去拦截自己的滑动事件,从而使得ViewPager能够跟Banner配合工作。

十一、简要说说View的工作机制。有自定义过View吗?简要说说。

View的工作机制主要包括测量(Measure)和绘制(Draw),而对于ViewGroup来说还包括布局(Layout)。

测量主要是根据用户指定的测量大小以及模式通过setMeasuredDimension方法去设置View的大小。精确模式下需要返回用户指定的大小。最大值模式以及不明确指定的模式下,需要提供默认大小,在最大值模式下需要返回两者的最小值。

绘制主要是通过一些画图API比如画布画笔,在View区域上面动态画一些东西。

布局主要是自定义ViewGroup的时候实现的,主要是控制各个子View在ViewGroup的位置以及他们之间的关系。

//有待更新

十二、有没有(参与)写过(开源)框架?看过什么框架?底层怎么实现

//有待更新

十三、有没有关注一些新技术?

//有待更新

如果觉得我的文字对你有所帮助的话,欢迎关注我的公众号:

公众号:Android开发进阶

我的群欢迎大家进来探讨各种技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,078评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,361评论 2 44
  • “我厌恶的都是我赖以生存的, 我深爱的却是我遥不可及的。”
    张萌萌Sophie阅读 270评论 1 1
  • 今夜的我再次无眠,可我却爱上了夜,夜让我看到自己,在自己的想象中漫步,不似白日自己的,仿佛看不到梦,有时候自己又在...
    惠晓二阅读 152评论 0 0
  • 小升初的过程中,竞赛成绩能起到相当大的作用,谈到竞赛就离不开奥数。 那么在小学奥数题的过程中,您有下面这样的想法吗...
    沪江中小幼阅读 299评论 0 0