整理遇到过的PHP面试题目:
1、HTML中的块状元素和行内元素有哪些?
<div>、<ol>、<ul>、<dl>、<table>、<h1>…<h6>、<p>、<blockquote>、<dt>、<address>、<caption>
2、css中display属性的值有哪些:
none 此元素不会被显示。 block 此元素将显示为块级元素,此元素前后会带有换行符。 inline 默认。此元素会被显示为内联元素,元素前后没有换行符。 inline-block 行内块元素。(CSS2.1 新增的值) list-item 此元素会作为列表显示。 run-in 此元素会根据上下文作为块级元素或内联元素显示。 compact CSS 中有值 compact,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。 marker CSS 中有值 marker,不过由于缺乏广泛支持,已经从 CSS2.1 中删除。 table 此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。 inline-table 此元素会作为内联表格来显示(类似 <table>),表格前后没有换行符。 table-row-group 此元素会作为一个或多个行的分组来显示(类似 <tbody>)。 table-header-group 此元素会作为一个或多个行的分组来显示(类似 <thead>)。 table-footer-group 此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。 table-row 此元素会作为一个表格行显示(类似 <tr>)。 table-column-group 此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。 table-column 此元素会作为一个单元格列显示(类似 <col>) table-cell 此元素会作为一个表格单元格显示(类似 <td> 和 <th>) table-caption 此元素会作为一个表格标题显示(类似 <caption>) inherit 规定应该从父元素继承 display 属性的值。
3、empty()、is_null()、isset()、$a?:0、$a??0分别代表什么,其区别是什么?
empty 判断变量是否为空,如果变量是非空 或非零 的值,则 empty() 返回 FALSE。换句话说,"" 、0 、"0" 、NULL 、FALSE 、array() 、var $var; 以及没有任何属性的对象 都将被认为是空的,如果变量为空,则返回 TRUE。 is_null 判断变量是否为NULL isset 判断变量是否已存在,如果变量存在则返回 TRUE,否则返回 FALSE $a?:0 等同于 $a ? $a : 0 $a??0 相当于isset($a)?$a:0 或 is_null($a)?0:$a
4、打印出上个月最后一天的日期:
echo date("Y-m-t", strtotime('-1month'));
//https://www.cnblogs.com/yanximin/p/11053936.html (date格式化参数)
5、设计提供接口时应该注意哪些问题
1、单文件实现多接口的形式有很多种,例如:if..elseif.. 或 switch 或 动态方法 (也就是TP的这种访问函数体的形式) 。
2、对于数据的输出最好用json,json具有相当强大的跨平台性,市场上各大主流编程语言都支持json解析,json正在逐步取代xml,成为网络数据的通用格式。
3、接口安全,一定要增加接口验证。例如,客户端和服务端针对不同接口统一做好加密方式,服务端在对于每次接口需要都要进行验证。以保证防止接口被恶意刷新或黑客恶意调用,尤其是大型商业应用。
例如: ①、当用户登录APP时,使用https协议调用后台相关接口,服务器端根据用户名和密码时生成一个access_key,并将access_key保存在session中,将生成的access_key和session_id返回给APP端。
②、APP端将接收到的access_key和session_id保存起来
③、当APP端调用接口传输数据时,将所传数据和access_key使用加密算法生成签名signature,并将signature和session_id一起发送给服务器端。
④、服务器端接收到数据时,使用session_id从session中获取对应的access_key,将access_key和接收到的数据使用同一加密算法生成对应signature,如果生成的签名和接收到的signature相同时,则表明数据合法
4、对于线上的 API 必须保证所有接口正常且关闭所有的错误信息 => error_reporting(0),在输出JSON 时,不能有任何其它输出,否则,客户端将解析数据失败,app直接闪退!
6、数据库优化有哪些方法:
https://www.cnblogs.com/jongty/p/11688933.html
7、给定两个排好序的数组A,B,大小分别为n,m。给出一个高效算法查找数组B包含A中的哪些元素
function binarySearch($num, $arr, $len){ $left = 0; $right = $len-1; while ($left <= $right){ $mid = ($left+$right)/2; if ($arr[$mid]==$num){ return true; }elseif ($num>$arr[$mid]){ $left = $mid+1; }else{ $right = $mid-1; } } } function inter($A, $B, $n, $m){ $inter = array(); foreach ($A as $a){ if(binarySearch($a,$B,$m)){ array_push($inter, $a); } } return $inter; }