PHP 十问

1、为了保证精度,Mysql中存钱数的字段用什么类型?PHP怎么处理浮点数精度

decimal数据类型来存储钱;

浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。

此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数

2、为什么用round函数进行四舍五入后,json_encode输出会出现小数点后面长串小数?

原因还是因为浮点数的精度有限,修改php.ini配置serialize_precision=-1或者转成字符串输出或者使用任意精度数学函数或者 gmp 函数

3、RSA加密和md5加密区别

md5加密不可逆,只能加密,不能解密,加密后生成固定长度32位的字符串

RSA是非对称加密算法,加密是可逆的,完整的一次http请求如下:

A对请求数据用B公钥加密,A私钥加签,B收到请求后,用A的公钥验签,再用B私钥解密获得报文,

B再对响应数据用A公钥加密,B私钥加签,A收到响应数据后,用B的公钥验签,再用A的私钥解密

4、redis如何实现数据的持久化?持久化策略有哪些?

reids是一个key-value存储系统,为了保证效率,缓存在内存中,但是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,以保证数据的持久化。

所以:redis是一个支持持久化的内存数据库,可以将内存中的数据同步到磁盘保证持久化。

Redis的持久化策略:2

                ---------rdb:快照形式是直接把内存中的数据保存到一个dump文件中,定时保存,保存策略

                 ---------aof:把所有的对redis的服务器进行修改的命令都存到一个文件里,命令的集合

posted @ 2019-01-17 15:49  IT~民工  阅读(196)  评论(0编辑  收藏  举报