Android 面试题3

Android 面试题3

ListView 的优化有多种多样的策略。在我们的项目中主要做了如下优化。
1、重用
ConvertView,
2、给 ConvertView 绑定 ViewHolder,3、分页加载数据,4、使用缓存。前两个是通用的解决方案,后两个是针对我们业务的个性化解决方案。我们的数据来自服务端,如果服务端有 1000 条数据的话,我们客户端不可能傻瓜式的一次性用 ListView 把这些数据全部加载进来,因此我们就用分页加载数据,每次加载 20 页,当用户请求更多的时候再获取更多数据,网络的访问就算网速再快也多多少少会有一定的延迟,因此我们的网络请求是异步处理的,同时从网络加载来的数据使用了 2 级缓存来处理,第一级是内存级别的缓存,第二级是本地文件的缓存。当 ListView 加载数据的时候首先从内存中找,如果找不到再去本地文件中找,只有都找不到的情况下才去请求网络。

对泛型的了解?

泛型是 jdk5.0 版本出来的新特性,他的引入主要有两个好处,一是提高了数据类型的安全性,可以将运行时异常提高到编译时期,比如 ArrayList 类就是一个支持泛型的类,这样我们给
ArrayList 声明成什么泛型,那么他只能添加什么类型的数据。第二,也是我个人认为意义远远大于第一个的就是他实现了我们代码的抽取,大大简化了代码的抽取,提高了开发效率。比如我们对数据的操作,如果我们有 Person、Department、Device 三个实体,每个实体都对应数据库中的一张表,每个实体都有增删改查方法,这些方法基本都是通用的,因此我们可以抽取出一个 BaseDao,里面提供 CRUD 方法,这样我们操作谁只需要将我之前提到的三个类作为泛型值传递进去就 OK 了。而数据的安全性,其实程序员本身通过主观意识是完全可以避免的,何况某些情况下,我们还真的想在 ArrayList 中既添加 String 类型的数据又添加 Integer 类型的数据。

图片是怎么处理的?
图片的处理主要用两种方式。我们的应用中有两处用到了图片,一个是 ListView 中展示的图片缩略图,这种情况的特点是数量大,但是单个图片内存小,只有几 kb,另外一种是大图片, 就是用户通过手机拍摄的图片,然后通过 http 的 post 提交的方式提交到服务器上。然后在客户端将这个大图片也展示出来。对于第一种情形,我们是通过三种技术手段来解决问题的,一是图片的缓存策略, 二是 ListView 的优化,其实在上面我已经讲过,三是 WeakRefrence(弱引用)的使用。对于第二种情形, 我们主要是首先通过 BitmapFactory.Options 参数获取图片的宽和高,然后再根据我们 ImageView 的宽高对图片进行一个很大比例压缩。

Android 的项目跟服务器交互都有哪些接口?
我们的接口有多种形式,第一种是 http 的形式,客户端跟服务器通过 http 协议传输数据,比如我们的新闻列表的请求都是给服务器发送的 get 请求,然后服务器把数据发给我们,我们上传给服务的图片是通过http 的post 请求方式完成的。第二种是socket 完成的,服务端开启ServerSocket, 客户端开启 socket,然后客户端跟服务端建立长连接,这样实现了客户端跟服务端数据的即时通信,通信的协议是我们公司按照 xmpp 开放协议的基础上修改的,其实 xmpp 协议就是一个 xml 格式的数据。第三种是集成了第三方接口,比如分享功能用的是 ShareSDK,消息推送用的是 JPush,内置广告用的是万普世纪

http 传输数据的时候安全是怎么保证的?
我们的数据有些是需要安全设置的有些不需要,我们的新闻类数据不需要特殊的添加安全设置,而用户注册,用户登录以及用户隐私数据保存是考虑安全性的。用户的密码等信息肯定不能进行明文传输的,我们将用户的密码在本地进行了 MD5 算法的加密,然后再传输。同时保存在本地的时候也是加密后的数据。还有需要安全性更高的数据需要通过我们自定义协议通过 Socket 传输。

知道 MD5 的原理吗?
MD5 算以 512 位分组来处理输入的信息,且每一分组又被划分为 16 个 32 位子分组, 经过了复杂处理后,输出由四个 32 位分组组成,将这四个 32 位分组级联后将生成一个 128 位散列值。这个过程是不可逆的,我们也把他叫做数据指纹,但是我们依然对用户的输入进行安全校验,如果是纯数字类型密码,是不允许注册的,因此就算你 MD5 加密了,黑客也可以通过彩虹碰撞的形式进行暴力破解

Java 如何调用 c、c++语言?
java 通过 JNI 调用 C/C++代码,在使用的时候首先通过 System.loadLibrary(“xxx”)将 xxx.so 文件加载到 jvm 中,同时在类中必须对 so 文件中的方法进行生命,格式:public native void test();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值