一. okhttp二次封装的实现原理:
1.将网络请求提取在一个方法里
2.对里面的可变参数,可以通过参数传递过去,也可以提供一个set方法传递过去
3.对于请求失败和成功,我们可以使用接口回调,让调用该方法的对象处理
在使用一些网络访问的时候,我们要回调它们的接口以获取所需要的数据,这就使得我们有时候要进行多次访问网络的时候很不方便,而且如果后期要更换网络访问框架的话,几乎所有调用过网络的地方都需要修改,所有将网络请求和所使用的网络请求框架进行解耦是很有必要的。okhttp二次封装解决了这一问题
okhttp的优缺点:
优点:
支持SPDY, 可以合并多个到同一个主机的请,使用连接池技术减少请求的延迟(如果SPDY是可用的话) ,
使用GZIP压缩减少传输的数据量,缓存响应避免重复的网络请求、拦截器等等。
缺点
第一缺点是消息回来需要切到主线程,主线程要自己去写,第二传入调用比较复杂。
<
简述okhttp网络请求的步骤 |
创建okhttpclient对象,创建发起请求使用的request对象,将request对象传递给okhttpclient对象的newcall方法生成一个call对象,执行call对象的execute方法连接服务器并获取到返回值response对象
二. android的四种引用方式
强引用 软引用 弱引用 虚引用
三 .java的四种启动方式
standard singletop singletask singleInstance
四 .Android 定位大致分为三大类?分别有什么优缺点?
GPS wifi 基站
GPS:需要GPS硬件支持,直接和卫星交互来获取当前经纬度。
优点:速度快、精度高、可在无网络情况下使用。
缺点:首次连接时间长、只能在户外已经开阔地使用,设备上方有遮挡物就不行了、比较耗电。
wifi:
优点:和基站定位一样,它的优势在于收环境影响较小,只要有Wifi的地方可以使用。
缺点:需要有wifi、精度不准
基站:
优点:受环境的影响情况较小,不管在室内还是人烟稀少的地方都能用,只要有基站。
缺点: 首先需要消耗流量、其实精度没有GPS那么准确,大概在十几米到几十米之间、
简述对JavaScript的理解
javascript是页面脚本语言,是让页面动起来的语言。
javascript 可以调用的页面的元素,可以修改其属性。
ajax技术让javascript更加流行。
图片的二次采样:
第一次采样我主要是想要获得图片的压缩比例
在第一次采样的基础上,我来进行二次采样。二次采样的时候,我把第一次采样后算出来的结果作为一个参数传递给第BitmapFactory,这样在加载图片的时候系统就不会将整张图片加载进来了,而是只会加载该图片的一张缩略图进来,这样不仅提高了加载速率,而且也极大的节省了内存,而且对于用户来说,他也不会有视觉上的差异。
简述使用第三方登录的过程
使用友盟的SDK,在友盟官网创建应用得到Appkey,然后下载SDK,将下载的SDK里相应的资源文件复制到相应的文件目录下然后在清单文件下添加添加权限和
配置我们的AppKey还有我们要登录平台的AppKey,之后再配置一下build.gradle文件,之后调用其中的代码,就能完成登录了
简述使用第三方分享的过程
使用友盟的SDK,在友盟官网创建应用得到Appkey,然后下载SDK,将下载的SDK里相应的资源文件复制到相应的文件目录下然后在清单文件下添加添加权限和
配置我们的AppKey还有我们要分享平台的AppKey,之后再配置一下build.gradle文件,之后调用其中的代码,就可以分享了
简述使用第三方统计的过程
获取Appkey 可以选择下载SDK还是导入依赖 当配置SDK或者导入依赖完成后 在程序入口增加场景类型设置接口 在清单文件配置Appkey 通过代码选择
自己是什么统计 完成导入后就可以在我们的网站上看到统计的详情了
简述RecyclerView实现多条目的思路。
创建多个布局的item布局,然后复写RecyclerView的Adapter中的getItemViewType()方法,从activity中传到adapter中的数据中必须要有一个type字段来判断这个item对象需要那种视图,然后返回一个标记,在onCreateViewHolder中在引用所对应的item布局.
简述RecyclerView实现点击事件的大致思路。
在RecyclerView适配器自定义接口,然后将接口暴露给外界,然后外界调用接口方法实现点击事件
简述RecyclerView的拦截器作用。
可以截取到网络加载到的信息,通过拦截器我们可以检测到网络的相关信息以及他们的速率。
动画占用大量内存,如何优化?
1.移动图片资源至大分辨率目录下,比如xxxhdpi.
2.压缩png图片大小(包体大小会减小,但与内存占用情况无关)
3.动画完成且不再循环展示的部分,相关bitmap释放
4.无用对象释放,非透明背景图片采用RGB_565颜色格式,并且将图片的inSampleSize设置为2
如何在XML文件中定义动画?
1.在res目录中新建anim文件夹
2.在anim目录中新建一个myanim.xml(注意文件名小写)
3.加入XML的动画代码
Android中有的几种动画?有什么区别
补间动画和帧动画,属性动画。
补间动画,是指通过指定View的初末状态和变化时间、方式,对View的内容完成一系列的图形变换来实现动画效果。主要包括四种效果:Alpha、Scale、Translate和Rotate。
帧动画就是Frame动画,即指定每一帧的内容和停留时间,然后播放动画。
属性动画和补间动画类似,不过是真的属性在变动,包括可视属性和其他属性。
补间动画仅仅是可视属性在显示层面的动画,属性的实质并未改动。
极光推送的推送流程
极光推送的推送流程:
首先,要先去极光官网创建注册一个账号
登录进入,找到应用管理,添加应用,创建应用。是否启用微软(WinPhone),看你是否需要。创建完毕,记住app的key值和应用包名。
下载Demo,查看集成指南
手动集成步骤
解压下载的Demo,打开文件,将libs下的文件都复制到你新建的项目中对应的libs下(该项目用于极光推送),res中的drawable-hdpi, layout, values也要复制到你的项目中。
然后就是清单文件AndroidManifest.xml了
再然后调用示例代码
运行程序,之后就可以去推送消息了
发送通知,写自己要推送的推送的内容,选择推送平台、(安装此app的)目标人,就可以尽情的发送推送消息了。
友盟推送的推送流程
友盟推送的推送流程
注册友盟账号
创建推送应用
下载Android SDK
导入SDK所需的jar包
配置AndroidManifest.xml,添加相应的权限
添加组件
添加AppKey和Umeng Message Secret
在应用的主Activity onCreate() 函数中开启推送服务
添加测试设备
发送测试消息
确保测试设备网络畅通后,消息推送成功
如何自定义推送消息和通知界面
如何自定义推送消息和通知界面
得到通知管理者,因为NotificationManager是一个系统Service,所以需要通过getService得到
创建Notification
为Notification设置各种属性
通过通知管理者NotificationManager发送通知
删除通知
JS的交互方法是:
1.webView.loadUrl(本地文件);
本地文件格式:"file:///android_asset/www/index.html",后面可以进行参数拼接
2.webView.loadUrl("javascript:onNativeToJs('from native')");
此处第二个方法的参数前面必须是小写的javacript: 后面的是h5中的script方法名,括号里面是参数
默写五条Angularjs指令:
np-app
np-controller
np-intent
ng-repeat
ng-bind
ng-href
RecyclerView和ListView的区别:
1.显示效果,ListView只能实现垂直的滚动列表视图,相反,RecyclerView可以通过设置来定制不同风格的视图,比如水平滚动列表或者不规则的瀑布流列表。2.列表项动画, 在ListView中没有提供任何方法或接口,方便开发者实现Item的增删动画。RecyclerView可以通过设置来为条目增加动画效果。
简述支付宝加密的原理以及运用
支付宝的支付数据的传递分两端,1端传数据,2端收数据, 1,2端必须都有着自己独一无二的一套公私钥,1的公私钥用A,私钥用a,2的公私钥用B,私钥用b,我们1端先拿到2端的B公钥,然后在把自己的公钥A传给2端,这要1端就有了A,B,a的钥匙,2端就有了A,B,b的钥匙,我们加密的原理就是1端要把要传递的数据,先进行SHA-1(杀one),第一层加密,再用B公钥第二层加密,再用a私钥进行第三层加密.然后把数据传给2端,我们解密的原理就是2端拿到数据,先用A公钥进行解密解掉第三层,再用自己的b私钥解掉第二层,最后在解掉第一层,从而解析出数据.
支付宝支付的原理
1.所有的支付逻辑处理,全在服务器完成,现在被淘汰了
原理就是电商App吧所有的信息提交给电商服务器,然后又电商服务器与支付宝服务器进行交互
2.所有的支付逻辑处理,是电商APP调用手机的支付宝客户端,然后由支付宝客户端和支付宝服务器进行交互处理。
原理就是电商APP向电商服务器发送请求,然后电商服务器生成订单信息
后,返回给电商APP,电商APP进行付款时,需要进行判断用户有没有支付宝客户端。
如果没有,则不能支付,提示用户下载支付宝。如果有则调用支付宝客户端进行支付。
然后支付宝服务器会把成功支付的数据反馈给电商APP和电商服务器。
3.所有的支付逻辑处理,在电商本身的APP里进行处理,但是要集成支付宝的
智能SDK,也就是JAR包,这种方式最常用
原理:电商App向服务器发送请求,电商服务器生成订单信息后,返回给电商APP,
电商APP支付时,调用集成支付宝的智能SDK就可以了,然后智能SDK完成支付,
支付宝服务器就会把成功支付的数据反馈给电商APP和电商服务器。
调用了支付服务之后,有同步和异步返回,他们有什么区别?
同步返回:
商户应用客户端通过当前调用支付的Activity的Handler对象,通过它的回调函数获取支付结果。(可参考alipay_demo实现)
异步通知:
商户需要提供一个http协议的接口,包含在参数里传递给快捷支付,即notify_url。支付宝服务器在支付完成后,会以POST方式调用notify_url,以xml数据格式传输支付结果。
列举两种种加密算法,并分别说出其特点?
对称加密算法:DES,AES 只有一个秘钥
非对称加密算法:RSA 有两个秘钥 一个公钥 一个私钥
特点:加密解密使用不同的秘钥,安全系数最高
什么是ANR,如何避免他
1.在Android中,如果应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。这个问题被称作ANR异常;
2.要避免ANR的异常,就要避免在主线程中做耗时操作,比如:网络,文件,数据库的操作都应该放到子线程处理!
oom的处理:
oom 的主要源头是加载大量的图片而导致内存不足,图片的加载优化,包括加载图片是使用的BitmapFactory.Options来压缩大量图片,
oom的另一个源头就是内存泄漏,,当某些不可能再被访问的变量引用没有被释放,导致对象无法被垃圾回收器回收。当无法被回收的对象累积到一定程度导致的内存被耗尽;解决这个问题就是注意变量的作用范围,减少类之间的交叉作用。
List集合使用泛型与不使用泛型有什么区别?
例如:List lists=new ArrayList();
和List<String> lists=new ArrayList<String>();
他们两者有什么样区别?
答: 从list中取出的值不一样,第一种的话取出来是object类型的,需要强制类型转换,而第二个不用,取出来之后直接就是string类型的
注意: List<String> lists=new ArrayList<String>(); 中ArrayList<String>中的String可以省略,含义相同
Java 语言中引入泛型是一个较大的功能增强。不仅语言、类型系统和编译器有了较大的变化,以支持泛型,而且类库也进行了大翻修,所以许多重要的类,比如集合框架,都已经成为泛型化的了。
这带来了很多好处:
1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。