A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 就业高冷派 黑马粉丝团   /  2016-12-5 14:35  /  3426 人查看  /  2 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 就业高冷派 于 2016-12-5 15:58 编辑

     Android面试成功率低是有原因的
    很多面试者都可能会碰到一个问题:面试机会挺多的,但是就是没有拿到offer是怎么回事呢?其实很多人面试了一段时间基本上所有知识点都已经掌握差不多了,但是在公司那边得到的答复总是:回去等通知。这个是什么原因呢?最近我去跑了一下市场,了解到的情况就是由于Android方面的开发人员逐年增长,公司的选择增多,所以公司对于这方面的需求越来越高,以至于Android方面的面试题越来越趋于底层化,也就是说面试的问题问得更深入,要求能把底层的实现思想能弄明白。废话不多说,直接看看这两家面试问的相关问题吧!
参加面者:就业部-飞哥

公司情况介绍:
【公司名称】中软国际
【公司地址】锦业一路软件大厦A座
【公司详情】中软国际有限公司(以下简称:中软国际)是中国领先的大型综合性软件与信息服务企业,成立于2000年。

面试经过:
        次面没有经过人事面,直接就三炸,在程中我把问过目和当我怎么回答大致记录了下来,希望可以大家提供一定的帮助,那我直接上吧!!

华为面试题:
1.你们是怎么实现网络请求的?是否可以自己搭建一个网络请求框架,大体的实现流程是什么?
答:平时基本都是使用第三方框架,因为首先公司考虑效率问题所以没那么多时间去给我们手动打造一个网络请求框架,但是我去稍微看了一下volley相关的底层实现,大致是通过维护一个消息队列,用语管理网络请求的相关任务只不过还需要考虑各种并发之类的问题业务比较繁琐,这个消息队列另外的一个作用就是当这个请求如果还没执行而且不想继续请求了,那么可以调用一个方法把这个操作从队列中移除,这个就可以取消对应的操作。大致实现流程就是这样的。
2.你们公司网络安全是怎么实现的?
主要使用了https双向认证技术以及sqlcipher的方式对数据库进行加密操作。然后介绍https等相关东西,比如说双向认证,客户端和服务器端都有自已一套公钥和密码,然后进行公钥互换发送消息的时候通过使用公钥进行加码然后收到之后使用私钥进行解密这样即使中途信息被抓包等手段拦截下来里面的数据信息无法查看从而保证安全性。而sqlcipher可以对数据库进行加密,与普通的database不同之处在于如果导出通过sqlite等软件是无法直接打开浏览里面的数据信息的,只能通过代码里面输入正确的密码才能进行增删改查的操作。
3.当网络请求的时候如果信息量很大的时候如何实现多信息处理,如何缓存到内存中。(lrucache,当时也没说啥,主要是跟线程池相关的一些操作吧)
首先介绍了一下四种线程池,每一种线程池都有什么特点,比如说有的线程池是不对线程进行回收的,一直存在在池子内。的线程池会在线程不够用的时候会把任务放等待队列中进行等待,直到空闲的线程进行处理等等另外说到缓存,介绍一下lrucache这个类,的底层数据结构是LinkHashMap会把经常使用的对象放在链表的前部,不常用的对象放在链表后面内存不够的时候会对链表后部分对象进行回收;接着再介绍一下强弱引用相关的内容。
4.AsyncTask缺点是什么?
这方面问题我们可以去这个链接看看:http://blog.csdn.net/goodlixueyong/article/details/45895997里面详细介绍了它的缺点就是本身缓存方面处理很糟糕。
5.handler使用过程中有没有出现过messagequene阻塞的情况(应该是问的ANR方面的东西)
这个问题面试官问的时候没有描述的很清楚,所以当时我是我理解的说出来,这方面就说一下anr相关的东西,比如说你在ui主线程做了耗时操作,在activity中等待时间超过了5s的话会报异常service20s等等。
6.给我说说如何自定义view的,平时柱状图或者饼图你们都是怎么做的?
平时基本上公司为了能快速完成项目,我们都没那时间完全自定义,所以我们都是通过找到第三方的一些控件进行一定的修改之后符合我们的需求之后就会直接使用,当然我们在修改别人的控件的时候需要知道自定义控件的流程,那么这时候我开始介绍onmeasureonlayoutondraw三个方法都是干嘛用的,介绍下什么时候会调用哪个方法之类的。顺便在这个话题结束前我话题转到的view事件分发机制,这时候我们就可以介绍view的事件分发的三种模型。
7.地图用过吧?你都用过什么功能?火星坐标的算法你们当时是怎么实现的?如果让你自己定义算法怎么定义。
主要用到定位相关的功能,大致要把一些关键的类名说出来,比如说定位用的是LocationClient这个api在manifest需要注册一个服务,然后百度地图在设定的时间在后台不间断的获取定位信息,然后通过接口回调等方式不断的把位置信息返回给我们。火星坐标相关的在百度地图已经通过LocationClentOption进行设定bd0911这样就不会出现偏移很大的情况,至于底层是怎么实现的还要去看看它的源码当时没看所以这方面我就说百度地图已经给我们做好直接用就行
8.如果你的项目太大,你可以通过哪些方式对项目进行瘦身?
图片方面因为图片会占用很大的空间,如果可以的话尽量放服务器端,不要都直接放倒项目的资源目录中。
   一些数据库可以删掉的话就删掉直接使用服务器提供(比如电话归属地的数据库可以放服务端,需要用的时候通过接口去查询就了)。
   代码进行分析,内存泄漏相关的隐患进行处理,对代码进行优化抽取,重复使用的代码块进行抽取封装。
9.如何对数据量比较大的数据进行同步请求?(线程池相关的东西)线程池有多少种,没中线程池都有什么特点呢?
通过线程池使用,四种,分别都是什么特点介绍了一下,可以在网页中详细看看:http://cuisuqiang.iteye.com/blog/2019372
10.在使用即时通信的时候如果创建太多socket的话会不会让服务器越来越卡?
当时说我集成的是环信,这些问题我相信环信已经完善得很好了所以我在这方面暂时还没去过多的了解。


公司情况介绍:
【公司名称】远古信息科技有限公司
【公司地址】陕西省西安市高新区科技二路72号西安软件园唐乐阁D102
【公司详情】西安远古信息科技股份有限公司(简称“远古信息”)是中国领先的旅游休闲产业信息化综合解决方案的提供商,国家级高新技术企业,中国旅游休闲行业信息化标杆企业。

面试经过:
        次面首先是人事面,基本人事的面试大同小异,所以咱们人事这块就不详细介绍了,咱们主要领略一下公司技术这块到底问些什么东西。当时笔试没有,直接就是技术部等总监直接面的我,所以回来之后我就把每一个题都写出来,然后给出我当时的回答方向,仅供参考如有错误,欢迎指出,那么我们就直接上题吧!
1. 自定义view你们怎么做的?
答::平时基本上公司为了能快速完成项目,我们都没那时间完全自定义,所以我们都是通过找到第三方的一些控件进行一定的修改之后符合我们的需求之后就会直接使用,当然我们在修改别人的控件的时候需要知道自定义控件的流程,那么这时候我开始介绍onmeasureonlayoutondraw三个方法都是干嘛用的,介绍下什么时候会调用哪个方法之类的。顺便在这个话题结束前我话题转到的view事件分发机制,这时候我们就可以介绍view的事件分发的三种模型。
2. 在聊天模块中怎么实现既能输入文字也能输入表情,还能添加图片
答:其实网上也有类似的第三方自定义控件,大体的实现思路我觉得应该是这样的:表情显示其实是通过通配符等匹配显示的,我们在发送的时候其实发送的是一对通配符只要我们本地有相关的表情库,可以通过通配符方式进行匹配显示至于一些细节方面等问题还是需要去看源代码分析才可以。
3. 百度地图中定位怎么实现的?
答:定位用的是LocationClient这个api在manifest需要注册一个服务,然后百度地图在设定的时间在后台不间断的获取定位信息,然后通过接口回调等方式不断的把位置信息返回给我们。
4. 意图和隐意图的区别
:显式意图一般在应用的内部使用,因为在应用内部已经知道了组件的名称直接激活就行了。 隐式意图是在应用与应用之间使用,当一个应用要激活另一个应用中的Activity时看不到源代码,只能使用隐式意图,根据Activity配置的意图过滤器建一个意图,让意图中的各项参数的值都跟过滤器匹配,这样就可以激活其他应用中的Activity。所以,隐式意图是在应用与应用之间使用的。

5. 提到图片的加载,OOM的主要原因,三级缓存
答:首先先说系统给每个手机应用分配等内存是固定的,加载图片超过这个值的时候就会出现OOM的情况,另外就是如果内存泄漏到一定量了也会出现OOM情况然后说说什么是三级缓存,图片等缓存怎么做的,怎么通过时间戳的方式让缓存具有时效性,保证我们的图片与服务器端数据可以一致。
6. 给我说一下对事件处理和分发的认识
答:介绍一下事件分发的三种模型,还有里面的三个方法都是什么时候调用的dispatchtouchevent、intercepttoutchevent、toutchevent三个方法。
7. 项目中聊天模块你是怎么实现的,给我说说它的实现原理。
:集成了环信的SDK实现聊天模块,原理的话就介绍一下它是基于XMPP协议等然后聊了一下UDPTCP协议以及分别怎么搭建的客户端和服务器端(基础的那一点点代码稍微描述一下,以及accept方法和receive方法具有阻塞的特点)。最后再说一下在socket中什么三次握手。三次握手就是我这边喊一声“我要发送数据啦”然后服务器收到后回复一声“我到然后第三次这边喊一声”我知道啦第三声的作用就是告诉服务器我也可以正常收到啦,第二声是服务器告诉我它可以正常收到啦,所以三次握手一次都不能少,这样就能完全保证对方是可以正常收到数据的。
8. 在你们项目如何实现安全性的?有哪些途径提高安全系数?
主要使用了https双向认证技术以及sqlcipher的方式对数据库进行加密操作。然后介绍https等相关东西,比如说双向认证,客户端和服务器端都有自已一套公钥和密码,然后进行公私钥互换发送消息的时候通过使用公钥进行加码然后收到之后使用私钥进行解密这样即使中途信息被抓包等手段拦截下来里面的数据信息无法查看从而保证安全性。而sqlcipher可以对数据库进行加密,与普通的database不同之处在于如果导出通过sqlite等软件是无法直接打开浏览里面的数据信息的,只能通过代码里面输入正确的密码才能进行增删改查的操作。
9. 多线程操作的时候你们是怎么保证线程的安全的。
答:加上同步锁的方式,然后举例说明一下不加的话会出现的问题,最好能说说死锁相关的就可以了。

    问完技术之后老总那边开始跟我谈,主要是想验证一下我的经历是否是真实的,说他刚从深圳回来(我简历上的公司是的广州的公司),了聊相关广州那边的事情以及以前开发团队相关的一些细节,还有对自己人生职业规划之类的(特别是以前公司所在团队的人数、如何分工等等这些细节,咱们得提前准备好相关的东西)。
面试结果:
    该公司过后一天给我打来电话,我这边薪资这块能不能调整一下,然后说了一大堆公司发展前景很广泛,不要太计较眼前利益之类的话,最后的结论就是给不了这么高的工资,大概只有六千左右,然后就没有然后了。
    通过上述的两个例子体现出来,咱们当前行业不能仅仅局限于自己的代码逻辑,要求需要去读懂第三方框架的大体实现思路以及流程,需要关注当前比较流行的设计思想,最后再结合上自身扎实的基础功底这样一份满意的高薪工作将不再遥远!!!

通过上述的两个例子体现出来,咱们当前行业不能仅仅局限于自己的代码逻辑,要求需要去读懂第三方框架的大体实现思路以及流程,最重要的还是要把看了的能流畅的表述出来;另外,还需要关注当前比较流行的设计思想,最后再结合上自身扎实的基础功底这样一份满意的高薪工作将不再遥远!!!


2 个回复

倒序浏览
很不错,不过对就业有种怕怕的感觉
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回答的那么牛逼才给6000?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马