安卓高级面试题

x1 说说RecyclerView和ListView的异同点,RecyclerView优越在什么地方?
·ListView、GridView也是对ITEM的复用,但因为布局方式不同,从而形成了不同的控件;
·而RecyclerView的出现,实现了对相同的复用数据以多种不同布局方式来呈现(布局管理器);
·即RecyclerView只专注于数据复用本身,而将以何种布局展示,完全交由布局管理器来做;
·自带线性布局、宫格、流式布局管理器,不但完美替代ListView\GridView\流式布局,还支持横向、纵向、逆序等;



x2 如果没有协调者布局,你如何实现【类似协调者布局+CollapsingToolbarLayout的效果】?
·从静态布局、事件派发、视图刷新(属性动画)角度回答;



x3 如何实现一个类似SnackBar的效果?

·静态布局、事件派发、视图刷新(属性动画)



x4 你熟练掌握的导航方式都有哪些?
·两种不同方式的侧滑菜单(SlidingMenu、DrawerLayout、NavigationView);
·ViewPager + Fragment + 标签切换;
·标签切换可以是RadioGroup/RadioButton,可以是TabLayout,可以是HorizontalScrollView嵌套线性布局,等等;
·ActionBar/Toolbar搭配选项菜单(OptionsMenu);
·其它;



x7 说说你都用过哪些第三方框架?为什么要使用第三方框架?
·框架的优势包括:强大、便捷、健壮;
·强大即框架有丰富的拓展功能;
·便捷即调用简单;
·健壮指考虑周全、例如线程管理、缓存管理、异常处理等等;



x8 网络通信框架的好处是什么?
·便捷:调用起来比HttpUrlConnectiony要容易;
·强大:get、post、上传、下载、通知回调等等;
·健壮:线程管理、缓存管理、异常处理等;



xA 图片加载框架究竟选用哪一款,你是如何取舍的?
·综合考虑效果和易用性;
·例如要求使用动画效果,优选Glide或Fresco;
·侧重效率,则Glide优于Picasso,侧重效果,则Picsso略优;
·侧重易用性,可能就不会选择Fresco;
·等等;



xB 使用图片加载框架的好处有哪些?
·便捷:往往一两行代码就实现了图片的加载;
·强大:丰富的配置如占位图、风格化显示、加工裁剪、动画效果等;
·健壮:线程管理、缓存管理、异常处理等;



xC 事件总线的好处是什么?
·进程内的无障碍轻松通信:跨线程、跨组件;
·事件类型可以是任意Object;
·支持延时处理;



xD 像黄油刀这类注解式框架,在混淆时要注意什么?
·保留注解类;
·保留注解类作用对象的名称,否则运行时找不到;



xE ORM数据库框架的好处是什么?
·直接将实体类映射为数据表;
·直接以对象的方式操作增删改查,无需写SQL语句;



xF 你有没有接触过蓝牙开发?其连接和通信的原理是什么?跟Socket有何异同?
·配置权限;
·搜索设备:【找到设备】和【搜索结束】都是以系统广播的形式接收和处理的;
·准备连接:找到设备时,广播Intent会携带有设备的信息,包括其地址和名称等,记录下来;
·连接设备:又称配对,通过远程设备的地址(类似IP),和约定的UUID(类似端口)进行连接;
·连接设备使用的API类为BluetoothSocket/BluetoothServerSocket;
·互传信息:一旦与远程BluetoothSocket连接建立后,就能够从中获取输入输出流,实现通信;
------------------------------
·相同点:基于IP和端口(仅仅只是类比),基于长连接,从连接中获取流实现数据传递;
·不同点:设备不同,协议不同(Socket基于TCP/IP),也没有父子类关系,编码思路相似而已;



xH 你都集成过哪些第三方的服务?
·极光推送、ShareSDK分享、支付宝、百度地图、Bmob后端云;



xI 对称加密和非对称加密的原理分别是什么?
·对称加密:加密和解密的秘钥相同;
·非对称加密:加密和解密的秘钥不同,公钥加密,私钥解密;
·非对称的原理是:两个大素数的乘积很难被因式分解;



xJ 你在集成百度地图的时候遇到过哪些坑?
·在配置AppKey时,要明白AppKey是由包名和签名共同决定的;
·因此该AppKey当且仅当【工程的包名和签名文件】都与申请时所使用的一致时,才是有效的;



xK 混淆的目的是什么?
·使你的代码难以被反编译;



xL 为什么要给APK签名?
·签名和包名功能决定应用的唯一身份;
·在应用升级时,只有签名和包名都相同时,高版本才能覆盖低版本,否则会报签名冲突;
·签名文件相当于开发者的身份证(因为有唯一的消息摘要/指纹),因此要妥善保管;



xM 你有在github上发布过代码吗?该代码有何亮点?
·开放式问题,预则立,请有所准备;



xN WebView中Java和JS如何实现互调?
·Java调JS:通过webView.loadUrl("javascript:methodName()")的方式,前提是承载这一JS方法的页面已经加载好;
·JS调Java:通过window.javaObject.showToast()方式调用;
·javaObject为Java代码中声明的实例;
·该实例有公共的showToast()方法可供调用;
·showToast()方法有@JavaScriptInterface注解;



xO NDK开发中JAVA和C是如何实现互调的?其原理是什么?
·Java调C:声明native方法,在C代码文件中对native方法做具体实现;
·C代码中方法的名称须遵从Java_包名_类名_方法名的规范;
·C回调Java:通过JNIEnv指针变量,以反射的方式获取到要调用的Java类名和方法名,动态该类的实例并调用方法;
·如果要回调的Java类正好是C方法的主调类,则无须创建Java类实例,直接以jinnstance参数作为回调实例即可;



xP 一个带有so库的APK容易反编译并调用so中的方法吗?
·理论上是可以的,因为Java代码中的JNI类和方法声明是不能混淆的;
·那么我们可以通过new这个JNI类的对象来调用其中的方法;



xQ Retrofit的好处是什么?
·将所有网络通信接口统一管理在一起,分层清晰;
·以注解的方式区分GET,POST,上传和下载;
·以注解的方式实现地址和参数的注入,代码的可读性和可维护性都得以提升;
·配合ConverterFactory可以将返回结果轻松转化为实体类;
·配合RxJavaCallAdapterFactory可以直接返回Observalbe对象,引爆响应式编程;



xR 你有用过RxJava吗?响应式编程有何好处?
·链式编程,代码简洁易读;
·顺序逻辑:在一条响应链中,执行顺序是完全从上到下的,比之无边无际的回调(callback hell),要更好读好理解;
·丰富的操作符:可以将原始事件进行近乎任意的转化;
·便捷的异常处理:有订阅者的onError方法统一处理所有异常,代码得到极大简化;
·便捷的线程调度:使用线程调度器可以方便地在线程间来回切换,避免了无尽的handler传递,代码得到极大简化;
·调用链的注销:可以在任意时间终止一整条正在执行中的响应链;



xS 说说你对MVP设计模式的理解;它与MVC模式有何异同?
·数据Model,视图View,调度器Presenter;
·传统的MVC模式中,Activity职责重合,即同时扮演V和C的角色,代码很混乱、耦合、难以管理;
·MVP模式是将M和V彻底分层,Activity专注扮演View的角色,而将调度整合的工作交由Presenter;
·Presenter在执行调度整合之前,须预先获取M和V的实例;
·Presenter的创建和初始化工作仍由Activity来做;
------------------------------
·如果实际界面存在于Fragment中,则Fragment充当View;

·此时Activity负责装配Fragment和初始化Presenter;


你可能感兴趣的:(技术面试)