一些面试总结
来源:互联网 发布: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编码!
M的Ascii码是77,前六位对应值为19,对应base64字符是T,如此类推。其它字符编码就可以自动转换得到!我们看看另外不是刚好是3个字节的情况!
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.所以压缩级别和这个大小好像不能形成一定的关联。
- java面试一些总结
- 面试的一些总结
- 一些面试总结
- 一些面试问题总结
- 网易面试总结(机器学习一些面试)
- C++面试的一些总结
- 面试相关的一些总结
- 面试中一些问题总结
- 一些基础的面试总结
- 关于面试的一些总结
- java 面试的一些总结
- 一些面试题目的总结
- 关于面试的一些总结
- Java面试的一些总结
- 面试时的一些关键技巧总结
- 对面试常见问题的一些总结
- 总结的一些Soft Skills面试问题
- iOS开发-一些面试算法总结
- JRebel for IntelliJ version6.50 插件破解 亲测有效
- Android Fragment 真正的完全解析(上)
- 收集可用的关于英语单词api
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
- Kafka简单介绍
- 一些面试总结
- css动画-animation各个属性详解
- LintCode:颜色分类
- C++ Primer Plus (Six Edition) Chapter 4, Review
- Codeforces 534 C. Polycarpus' Dice【思维】
- apache:浅谈win7系统下安装apache2.2出错的解决方案
- Sturts2中action向jsp页面传值
- Android Fragment 真正的完全解析(下)
- 持续集成之项目代码托管