一些面试总结

来源:互联网 发布:gtp吉他谱软件ios 编辑:程序博客网 时间:2024/05/21 12:48

八月底辞了职,九月就进入了轰轰烈烈的找工作大军中,今年iOS行业不景气也懒得分析了,不景气是相对于我这种刚入门的,跟那些三五年的大神真的没法比,不过我相信,大神也都是从小弟过来的,只要肯努力,每个人都有成为大神的潜质。闲话不多说了,总结一下这几天的面试经验:

1,base64转码的原理
以下内容转自 http://blog.chacuo.net/719.html 程默的博客

    它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。但是,我们经常所说的Base64另外2个字符是:“+/”。这64个字符,所对应表如下。

编号字符 编号字符 编号字符 编号字符0A16Q32g48w1B17R33h49x2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u62+15P31f47v63/

    转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6个bit,按照其值选择
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。

    如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

    编码后的数据比原始数据略长,为原来的4/3。无论什么样的字符都会全部被编码,因此不像Quoted-printable 编码,还保留部分可打印字符。所以,它的可读性不如Quoted-printable编码!

文本ManASCII编码7797110二进制位010011010110000101101110索引1922546Base64编码TWFu

     M的Ascii码是77,前六位对应值为19,对应base64字符是T,如此类推。其它字符编码就可以自动转换得到!我们看看另外不是刚好是3个字节的情况!

文本(1 Byte)A  二进制位01000001                二进制位(补0)010000010000            Base64编码QQ==文本(2 Byte)BC 二进制位0100001001000011  xxxxxx二进制位(补0)010000100100001100xxxxxxBase64编码QkM =

Base64转换代码实现

     既然知道了方法,那么我们如果要自己写个简单转换,好像也是很容易的!下面,我写下我做转换php代码!

<?php

/**

*base64编码方法、本方法只是做base64转换过程代码举例说明,通过该例子可以任意改造不同语言版

*@author 程默

*@copyright http://blog.chacuo.net

*@param $src 原字符串

*@return string base64字符串*

*/

function c_base64_encode($src)

{

static $base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

////将原始的3个字节转换为4个字节

$slen=strlen($src);

$smod = ($slen%3);

$snum = floor($slen/3);

$desc = array();

for($i=0;$i<$snum;$i++)

{

////读取3个字节

$_arr = array_map('ord',str_split(substr($src,$i*3,3)));

///计算每一个base64值

$_dec0= $_arr[0]>>2;

$_dec1= (($_arr[0]&3)<<4)|($_arr[1]>>4);

$_dec2= (($_arr[1]&0xF)<<2)|($_arr[2]>>6); 

$_dec3= $_arr[2]&63;

$desc = array_merge($desc,array($base[$_dec0],$base[$_dec1],$base[$_dec2],$base[$_dec3]));

}

if($smod==0) return implode('',$desc);

///计算非3倍数字节

$_arr = array_map('ord',str_split(substr($src,$snum*3,3)));

$_dec0= $_arr[0]>>2;

///只有一个字节

if(!isset($_arr[1]))

{

$_dec1= (($_arr[0]&3)<<4);

$_dec2=$_dec3="=";

}

else

{

///2个字节

$_dec1= (($_arr[0]&3)<<4)|($_arr[1]>>4);

$_dec2= $base[($_arr[1]&7)<<2];

$_dec3="=";

}

$desc = array_merge($desc,array($base[$_dec0],$base[$_dec1],$_dec2,$_dec3));

return implode('',$desc);

}

 

    好了,通过这个例子,我想base64编码转换原理、算法有些了解了吧!它转换过程很简单,只需要做个映射表,然后将原先做一些移位运算就可以完成!我们通过该例子,是不是可以做个自己的base32这类的编码呢!欢迎朋友们交流!


2,2K屏手机拍出的照片内存是多大?

首先了解下什么是2K屏,2k屏幕是指能够达到2560*1440的分辨率的屏幕,细腻度和饱和度都比1080p屏幕高出很多,显示效果更加清晰。

其次就是手机的像素,1600万像素一般不超过8M,2000万像素一般也就8到10M的样子,再低点的像素就是3到4M吧,内存的大小也是受手机像素影响的。3,苹果手机的分辨率是多少?

苹果型号主屏屏幕大小系统摄像iPhone1代3.5英寸320×480像素iOS3.0200万像素iPhone2代
(iPhone 3G)3.5英寸320×480像素iOS3.0200万像素iPhone 3GS3.5英寸480x320像素iOS3.0300万像素iPhone43.5英寸960x640像素iOS5.0500万像素iPhone4S3.5英寸960x640像素iOS7.0700万像素iPhone 54英寸1136x640像素iOS6.0800万像素iphone5s4英寸1136x640像素iOS7.0800万像素iphone5c4英寸1136x640像素iOS7.0800万像素iphone64.7英寸1334x750像素iOS8.0800万像素iphone6s4.7英寸1334x750像素iOS91200万像素iphone6 plus5.5英寸1920x1080像素iOS8.0800万像素iphone6s plus5.5英寸 1920x1080像素iOS 91200万像素

4,图片压缩时真的是按照参数对应的比例压缩的吗?

NSData *fData = UIImageJPEGRepresentation(self.photo, 1.0);
图片是7MB这样。假如压缩级别是0.5,如:
NSData *fData = UIImageJPEGRepresentation(self.photo, 0.5);

图片压缩之后,大小是 1MB左右。。现在问题来了。

一张图片,压缩级别是0.5的话,大小不会变成原来的0.5倍。我算了一下,大概是0.14.所以压缩级别和这个大小好像不能形成一定的关联。



0 0
原创粉丝点击