在弱网传输的情况下,是怎么做到节约流量的(面试小问题,Android篇)
2014-06-05 20:42
260 查看
马上毕业了,在毕业之际,我辞掉了以前的实习工作,主要是工作内容不太感兴趣。最近在找工作,主要是找Java和Android方面的工作。自以为学得不错,但是面试屡屡受挫。先提一下问到的一些问题吧。
第一个:在弱网传输的情况下,是怎么做到节约流量的?
由于Android接触的确实不多,这个问题自然没有很愉快的答上来。
我这样回答的:将一些数据进行压缩,例如传一个字符串,先将字符串转换成字符数组的形式,然后对这个字符数组进行压缩。然后就是对很多传输对象(一般都是JSON,XML这种方式太笨重了),提取公共的部分,然后只将不同的部分传输过去(我在想,怎么知道是相同的呢...)
自认为回答的不太好,面试官也没有多说。
面完试,在网上搜资料,加上自己的理解,整理了下。
首先来说一下Android与服务器的数据交互方式吧。
1、 Socket(TCP/UDP)
2、 NIO,还有衍生的NIO框架例如Netty
3、 WebService(特指Soap协议下用XML传输数据)
4、 JSON(特质http协议下用基于Rest风格的传输方式)
这里呢,说到数据压缩,我觉得应该是指将JSON进行先压缩再传输吧。
解决数据过大的问题,最直观的方法就是压缩数据。服务器将需要传递的数据先进行压缩,再发送给Android客户端,Android客户端接收到压缩的数据,对其解压,得到压缩前的数据。
下面这个图应该能说明具体情况。
引用http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html
那么无非就是一些压缩算法的问题了。那怎么选择压缩算法咧?这里有一个压缩算法。
引用 /article/5524608.html
第一个:在弱网传输的情况下,是怎么做到节约流量的?
由于Android接触的确实不多,这个问题自然没有很愉快的答上来。
我这样回答的:将一些数据进行压缩,例如传一个字符串,先将字符串转换成字符数组的形式,然后对这个字符数组进行压缩。然后就是对很多传输对象(一般都是JSON,XML这种方式太笨重了),提取公共的部分,然后只将不同的部分传输过去(我在想,怎么知道是相同的呢...)
自认为回答的不太好,面试官也没有多说。
面完试,在网上搜资料,加上自己的理解,整理了下。
首先来说一下Android与服务器的数据交互方式吧。
1、 Socket(TCP/UDP)
2、 NIO,还有衍生的NIO框架例如Netty
3、 WebService(特指Soap协议下用XML传输数据)
4、 JSON(特质http协议下用基于Rest风格的传输方式)
这里呢,说到数据压缩,我觉得应该是指将JSON进行先压缩再传输吧。
解决数据过大的问题,最直观的方法就是压缩数据。服务器将需要传递的数据先进行压缩,再发送给Android客户端,Android客户端接收到压缩的数据,对其解压,得到压缩前的数据。
下面这个图应该能说明具体情况。
引用http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html
那么无非就是一些压缩算法的问题了。那怎么选择压缩算法咧?这里有一个压缩算法。
引用 /article/5524608.html
packagecom.chenjun.utils.compress; importjava.io.ByteArrayInputStream; importjava.io.ByteArrayOutputStream; importjava.io.InputStream; importjava.io.OutputStream; importjava.util.zip.GZIPInputStream; importjava.util.zip.GZIPOutputStream; publicclass Compress { private static final int BUFFER_LENGTH =400; //压缩字节最小长度,小于这个长度的字节数组不适合压缩,压缩完会更大 public static final int BYTE_MIN_LENGTH =50; //字节数组是否压缩标志位 public static final byteFLAG_GBK_STRING_UNCOMPRESSED_BYTEARRAY = 0; public static final byteFLAG_GBK_STRING_COMPRESSED_BYTEARRAY = 1; public static final byteFLAG_UTF8_STRING_COMPRESSED_BYTEARRAY = 2; public static final byteFLAG_NO_UPDATE_INFO = 3; /** * 数据压缩 * * @param is * @param os * @throws Exception */ public static void compress(InputStream is,OutputStream os) throws Exception { GZIPOutputStream gos = newGZIPOutputStream(os); int count; byte data[] = newbyte[BUFFER_LENGTH]; while ((count = is.read(data, 0,BUFFER_LENGTH)) != -1) { gos.write(data, 0, count); } gos.finish(); gos.flush(); gos.close(); } /** * 数据解压缩 * * @param is * @param os * @throws Exception */ public static void decompress(InputStreamis, OutputStream os) throws Exception { GZIPInputStream gis = newGZIPInputStream(is); int count; byte data[] = newbyte[BUFFER_LENGTH]; while ((count = gis.read(data, 0,BUFFER_LENGTH)) != -1) { os.write(data, 0, count); } gis.close(); } /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] byteCompress(byte[]data) throws Exception { ByteArrayInputStream bais = newByteArrayInputStream(data); ByteArrayOutputStream baos = newByteArrayOutputStream(); // 压缩 compress(bais, baos); byte[] output =baos.toByteArray(); baos.flush(); baos.close(); bais.close(); return output; } /** * 数据解压缩 * * @param data * @return * @throws Exception */ public static byte[] byteDecompress(byte[]data) throws Exception { ByteArrayInputStream bais = newByteArrayInputStream(data); ByteArrayOutputStream baos = newByteArrayOutputStream(); // 解压缩 decompress(bais, baos); data = baos.toByteArray(); baos.flush(); baos.close(); bais.close(); return data; } }笔者目前在找工作。邮箱myhirra@126.com。本广告长期有效.....玩笑话。
相关文章推荐
- 今天早上失败的面试经历。如果是你,这些问题你会怎么回答?-.-...
- 怎么对付面试中最难的那些问题
- 面试常问问题:银行网上支付项目中怎么控制多线程高并发访问?
- IOS:知乎上的一个怎么面试iOS工程师的问题
- TCP 传输层面试中常问的问题汇总(你所不知道的传输层)
- 今天早上失败的面试经历。如果是你,这些问题你会怎么回答?-.-...
- 面试问题3:给一个单链表,怎么判断是否有环
- 学习和面试,这两件事儿 怎么去学习呀 百度、阿里面试(电面居多)都问些什么问题? 底层再底层思考,打破砂锅问到底,这是我的学习方法
- 怎么回答谷歌招聘面试时的疯狂问题?
- 【遇到的问题】imageview怎么设置宽高相同,在不知道固定值的情况下
- 今天学会了怎么在Linux下察看网络流量和硬盘使用情况
- 面试中的问到薪资问题怎么回答?
- 与服务器同步数据时,如何做到只更新被修改数据?如何节约流量,
- 面试中,怎么回答或者问关于职业目标的问题
- 东软实训推荐面试问题7:你先于你同伴完成任务你应该怎么办?
- 软件开发者面试百问-----你怎么保证代码执行速度快,而又不出问题?
- 面试时遇到不会回答的问题怎么办??
- 怎么解决TCP网络传输“粘包”问题
- 一个不知道怎么回答的面试问题
- 我们在平时或面试遇到这些问题时,我们应该怎么回答?