1. echo (int)((0.1+0.7)*10);//7
看似有穷的小数, 在计算机的二进制表示里却是无穷的
添加链接描述
echo serialize(0.1+0.7); //d:0.79999999999999993;
精度丢失。
强制转换为 integer会舍弃小数部分~
类似的题例如:
关于整数溢出:
如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。
32 位系统下的整数溢出
$large_number = 2147483647;
var_dump($large_number); // int(2147483647)
$large_number = 2147483648;
var_dump($large_number); // float(2147483648)
64 位系统下的整数溢出
$large_number = 9223372036854775807;
var_dump($large_number); // int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number); // float(9.2233720368548E+18)
关于比较两个浮点数是否相等
$a = 1.23456789;
$b = 1.23456788;
$epsilon = 0.0000001;
if(abs($a-$b) < $epsilon) {
echo "true";
}
2. javascript跨域如何实现//jsonp 和 cors
什么是跨域?
- 跨域是指从一个域名的网页去请求另一个域名的资源。
- 严格一点的定义是:只要 协议,域名,端口有任何一个的不同,就被当作是跨域。
- 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.
(1)跨域资源共享(CORS)
CORS(Cross-Origin Resource Sharing)跨域资源共享,定义了必须在访问跨域资源时,浏览器与服务器应该如何沟通。CORS背后的基本思想就是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功还是失败。服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。只需要在后台中加上响应头来允许域请求!在被请求的Response header中加入以下设置,就可以实现跨域访问了!
//指定允许其他域名访问
'Access-Control-Allow-Origin:*'//或指定域
//响应类型
'Access-Control-Allow-Methods:GET,POST'
//响应头设置
'Access-Control-Allow-Headers:x-requested-with,content-type'
(2)通过jsonp跨域
JSONP是JSON with Padding(填充式json)的简写,是应用JSON的一种新方法,只不过是被包含在函数调用中的JSON,
CORS和JSONP对比
1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS)。
参考:js中的跨域问题、
3. 以下如何访问 d 的值?
<?php
$a = array(
'a',
3 => 'b',
1 => 'c',
'd'
);
?>
$a[0]
$a[1]
$a[2]
$a[3]
$a[4]
$a[4]
解析:如果未指定,PHP 将自动使用之前用过的最大 integer 键名加上 1 作为新的键名。
类型强制与覆盖
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
以上例程会输出:
array(1) {
[1]=>
string(1) “d”
}
解析 :上例中所有的键名都被强制转换为 1,则每一个新单元都会覆盖前一个的值,最后剩下的只有一个 “d”。
补充 :
数组的key 可以是 integer 或者 string,如果不是这两种类型,则会强制转换。value 可以是任意类型。
此外 key 会有如下的强制转换:
- 包含有合法整型值的字符串会被转换为整型。例如键名 “8” 实际会被储存为 8。但是 “08” 则不会强制转换,因为其不是一个合法的十进制数值。
- 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
- 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
- Null 会被转换为空字符串,即键名 null 实际会被储存为 “”。
- 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
4. max_input_time 指令的默认值是多少?
60秒
注:此变量在php.ini中,可以以秒为单位对通过 POST、GET 以及 PUT 方式接收数据时间进行限制,默认 60 秒。
补充:注:php.ini 中的 upload_tmp_dir 的这个参数为上传文件的临时目录
5. 2次foreach 输出什么
$arr = [1,2,3];
foreach($arr as &$v) {
//nothing todo.
}
foreach($arr as $v) {
//nothing todo.
}
var_export($arr);
解析: 第一次foreach 完后,$v和$arr[2]指向同一块内存,根据引用传值的特点可知,修改$v的值,$arr[2]的值也会被修改,所以第二次foreach,每次遍历后,
遍历到第一个元素时:$arr[2]=$v=$arr[0],$arr=[1,2,1];
遍历到第二个元素时:$arr[2]=$v=$arr[1],$arr=[1,2,2];
遍历到第三个元素时:$arr[2]=$v=$arr[2],$arr=[1,2,2];
所以两次foreach后,$arr=array ( 0 => 1, 1 => 2, 2 => 2, )
header实现301永久定向
header('HTTP/1.1 301 Moved Permanently');
header('Location: https://blog.maplemark.cn');
echo 8.2%-3.2
2
1.取模运算符的操作数在运算之前都会转换成整数(除去小数部分)。
2.取模运算符 % 的结果和被除数的符号(正负号)相同。即 $a % $b 的结果和 $a 的符号相同。
什么是面向对象?主要特征是什么?
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。
封装:就是把一些重要的属性封装在类内,然后通过一个开放的接口来操作。
继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
多态:多态就是只抽象的声明父类,具体的工作由子类对象来完成。
HTTP 状态中302、403、 500代码含义?
代码 | 含义 |
---|---|
301 | 永久重定向 |
302 | 临时重定向 |
403 | 禁止访问 |
404 | 网页不存在 |
401 | 未授权 |
502 | 响应超时 |
500 | 服务器内部错误 |
如何过滤数据库重复数据?
如果需要读取不重复的数据可以在SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。
mysql> SELECT DISTINCT no
-> FROM student;
Linux 下建立压缩包,解压缩包的命令
打包:
tar -cvf etc.tar /etc <==仅打包,不压缩!
-c :打包选项
-v :显示打包进度
-f :使用档案文件
注:有的系统中指定参数时不需要在前面加上-,直接使用tar xvf
解包:
tar -xvf demo.tar
线性表和顺序表的区别?
- 线性表包括顺序表和链表。
- 顺序表中的元素地址是连续的,链表中元素地址不是连续的,是通过指针连起来的。
什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?
- 索引用来快速地寻找那些具有特定值的记录。
- 主键索引和唯一索引的区别:主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。
- 索引的缺点:
1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。
3、当对表中 的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
解释:左连接,右连接,内连接。
1、內连接仅选出两张表中互相匹配的记录.因此,这会导致有时我们需要的记录没有包含进来。
2、左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的行并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少。
3、左连接是只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来.
4、右连接是只要右边表中有记录,数据就能检索出来 ;
用 PHP 写出显示客户端 IP 与服务器 IP 的代码
获取客户端 IP:getenv(“REMOTE_ADDR”);
获取服务器端 IP:$_SERVER[“SERVER_ADDR”];
数据库索引有几类,分别是什么?什么时候该用索引?
普通索引、主键索引、唯一索引
并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引。
写几个魔术方法并说明作用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用 unset()时自动调用的方法
__isset()当对一个未定义变量调用 isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE 的意思是什么?
它们都是 PHP 预定义变量
$_REQUEST 用来获取 post 或 get 方式提交的值
$_POST 用来获取 post 方式提交的值
$_GET 用来获取 get 方式提交的值
$_COOKIE 用来获取 cookie 存储的值
$_SESSION 用来获取 session 存储的值
$_FILE 用来获取上传文件表单的值