面试题整理

tech2023-02-07  84

一、isset()和empty()的区别 isset()检测变量是否设置 返回值: 若变量不存在返回false 若变量存在值为null,返回false 若变量存在,且不为null则返回ture 同时检查多个变量,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE ·empty()检测一个变量是否为空 返回值: 若变量不存在则返回true 若变量存在且其值为""、0、“0”、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE 若变量存在且值不为""、0、“0”、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 FALSE 只可传一个变量,如果为空为假则返回真。 二、说出你知道的几种排序方式,并且一个你熟悉的排序算法,进行顺序排列 1:冒泡排序、2:选择排序、3:插入排序、4:快速排序 1:冒泡排序 思路:在要排序的一组数中,对当前还未拍好的数列从前往后对相邻的两个数字依次进行比较和调整,让加大的数往下沉,较小的往上冒。即每当相邻的数比较后发现他们的排序与排序要求相反时,就将他们互换 a r r = a r r a y ( 1 , 43 , 54 , 62 , 21 , 66 , 32 , 78 , 36 , 76 , 39 ) ; f u n c t i o n b u b b l e S o r t ( arr=array(1,43,54,62,21,66,32,78,36,76,39); function bubbleSort( arr=array(1,43,54,62,21,66,32,78,36,76,39);functionbubbleSort(arr) { l e n = c o u n t ( len=count( len=count(arr); //该层循环控制 需要冒泡的轮数 for( i = 1 ; i=1; i=1;i< l e n ; len; len;i++) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for( k = 0 ; k=0; k=0;k< l e n − len- leni;KaTeX parse error: Expected '}', got 'EOF' at end of input: … { if(arr[ k ] > k]> k]>arr[$k+1]) { t m p = tmp= tmp=arr[$k+1]; a r r [ arr[ arr[k+1]= a r r [ arr[ arr[k]; a r r [ arr[ arr[k]=$tmp; } } } return KaTeX parse error: Expected 'EOF', got '}' at position 6: arr; }̲ 2:选择排序 思路分析:在要…arr) { //双重循环完成,外层控制轮数,内层控制比较次数 l e n = c o u n t ( len=count( len=count(arr); for($i=0; i < i< i<len-1; $i++) { //先假设最小的值的位置 $p = i ; f o r ( i; for( i;for(j=$i+1; j < j< j<len; KaTeX parse error: Expected '}', got 'EOF' at end of input: … //arr[ p ] 是 当 前 已 知 的 最 小 值 i f ( p] 是当前已知的最小值 if( p]if(arr[$p] > a r r [ arr[ arr[j]) { //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。 $p = KaTeX parse error: Expected 'EOF', got '}' at position 16: j; }̲ } …p中。如果发现最小值的位置与当前假设的位置 i 不 同 , 则 位 置 互 换 即 可 。 i f ( i不同,则位置互换即可。 if( iif(p != $i) { $tmp = a r r [ arr[ arr[p]; a r r [ arr[ arr[p] = a r r [ arr[ arr[i]; a r r [ arr[ arr[i] = $tmp; } } //返回最终结果 return KaTeX parse error: Expected 'EOF', got '}' at position 6: arr; }̲ 3:插入排序 思路分析:在要…arr) { l e n = c o u n t ( len=count( len=count(arr); for($i=1, i < i< i<len; $i++) { $tmp = a r r [ arr[ arr[i]; //内层循环控制,比较并插入 for( j = j= j=i-1; j > = 0 ; j>=0; j>=0;j–) { if($tmp < a r r [ arr[ arr[j]) { //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换 a r r [ arr[ arr[j+1] = a r r [ arr[ arr[j]; a r r [ arr[ arr[j] = $tmp; } else { //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } return KaTeX parse error: Expected 'EOF', got '}' at position 6: arr; }̲ 4:快速排序 思路分析:选择…arr) { //先判断是否需要继续进行 l e n g t h = c o u n t ( length = count( length=count(arr); if($length <= 1) { return $arr; } //选择第一个元素作为基准 $base_num = $arr[0]; //遍历除了标尺外的所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array(); //小于基准的 r i g h t a r r a y = a r r a y ( ) ; / / 大 于 基 准 的 f o r ( right_array = array(); //大于基准的 for( rightarray=array();//for(i=1; i < i< i<length; KaTeX parse error: Expected '}', got 'EOF' at end of input: …) { if(base_num > a r r [ arr[ arr[i]) { //放入左边数组 $left_array[] = a r r [ arr[ arr[i]; } else { //放入右边 $right_array[] = a r r [ arr[ arr[i]; } } //再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数 l e f t a r r a y = q u i c k s o r t ( left_array = quick_sort( leftarray=quicksort(left_array); r i g h t a r r a y = q u i c k s o r t ( right_array = quick_sort( rightarray=quicksort(right_array); //合并 return array_merge( l e f t a r r a y , a r r a y ( left_array, array( leftarray,array(base_num), $right_array); } 三、session与cookie的区别是什么,产生的原因与作用分别是什么 产生的原因与作用: HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。于是需要引入一种机制,cookie于是就顺应而生。 Session是另一种记录客户状态的机制,不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端以某种形式记录在服务器上,这就是session。 区别: 1:cookie是存放在浏览器端,不同的浏览器存储的cookie数量和数据的大小都不一致。大多数情况下单个域名限制最多保存20个cookie,每个cookie保存的数据不能超过4k。 2:session存储在服务器端。默认是以文件的形式存储,也可以存储在数据库和redis、memcache等缓存内存中。 3:session是占用的服务器内存,所以内存越大,能存的值就越大,原则上讲是无上限,一般用于存储对安全要求较高的重要数据; 4:设置cookie时间可以使cookie过期。但是使用session_destory(),我们将会销毁会话。 所以我们在经常使用一个站点的时候对于一些不是很重的信息比如用户登录的状态之类,可以选择使用cookie。在对于一些安全要求较高的信息如用户的登录信息可以使用session来存储 四:说明http中常见的状态码,并说明他们的含义 分类描述: 1信息。服务器收到请求,请继续执行请求 2成功。请求被成功接收并处理。 3重定向。需要进一步操作来完成请求。 4客户端错误。无法完成请求,或请求包含语法错误 5**服务器错误。服务器在处理请求的过程中发生错误 200 服务器已成功处理了请求 206 服务器成功处理了部分请求 301 已永久移动到新位置,即永久重定向 302 暂时跳转到其他页面,即暂时重定向 400 错误请求。服务器无法解析该请求 401 未授权请求,没有进行身份验证或验证未通过 403 禁止访问服务器,拒绝此请求 404 未找到服务器,找不到请求的网页 500 服务器内部错误服务器遇到错误,无法完成请求 502 错误网关服务器作为网关或代理,从上游服务器收到无效响应 五:请问什么是mvc结构,在开发过程中,这种结构的好处是什么,并且这三层都是必不可缺吗?结合实际例子,说明哪层可以没有。

六:现在开发经常会出现前后端分离的开发模式,从你的角度,怎么去理解,如何实现前后端分离。 七:foreach($arr as k e y = > key=> key=>value)和foreach(KaTeX parse error: Expected 'EOF', got '&' at position 13: arr as key=>&̲value)的区别 如果我要改变数组某一个值 直接遍历的话原数组是不会变的 下面提供两种方法 1.我们可以遍历的时候组合数据然后 array_push()把数据赋给另一个新的数组这样才可以 如: $data=array(1,2,3,4); n e w d a t a = a r r a y ( ) ; f o r e a c h ( newdata=array(); foreach( newdata=array();foreach(data as k = > k=> k=>v){ if($v==2) v = 666 ; / / 我 们 想 把 值 等 于 2 的 改 为 666 这 样 的 话 在 内 部 改 变 了 v=666;//我们想把值等于2的改为666 这样的话在内部改变了 v=666;//2666v但是 d a t a 还 是 没 改 变 a r r a y p u s h ( data还是没改变 array_push( dataarraypush(newdata,$v);//这样可以得到我们想要的数组 }

2.我们可以在遍历的值前面加个&符号这样就可以改变原数组了 不需要用array_push()了 d a t a = a r r a y ( 1 , 2 , 3 , 4 ) ; f o r e a c h ( data=array(1,2,3,4); foreach( data=array(1,2,3,4);foreach(data as &KaTeX parse error: Expected '}', got 'EOF' at end of input: v){ if(v==2) v = 666 ; / / 因 为 v=666;//因为 v=666;//v前面加了’&'所以原数组就直接改变了 }

八:请说明include和require的区别是什么,为避免多次包含同一文件,可用什么语句代替他们 区别: 在失败的时候: include产生一个warning,而require产生直接产生错误中断 require在运行前载入 include在运行时载入 代替: require_once include_once 九:什么是csrf,如何进行防范 CSRF,跨站请求伪造,攻击方伪装用户身份发送请求从而窃取信息或者破坏系统。 讲述基本原理:用户访问A网站登陆并生成了cookie,再访问B网站,如果A网站存在CSRF漏洞,此时B网站给A网站的请求(此时相当于是用户访问),A网站会认为是用户发的请求,从而B网站就成功伪装了你的身份,因此叫跨站脚本攻击。

CSRF防范: A、合理规范api请求方式,GET,POST B、对POST请求加token令牌验证,生成一个随机码并存入session,表单中带上这个随机码,提交的时候服务端进行验证随机码是否相同。 十:sql的子查询可以出现在from和where中,如果当前的查询需求两个地方都可以写,请问写在哪里效率最高,为什么? 十一:mysql中,group_concat的作用是什么,需要如何使用 十二:说说你知道的常用缓存技术,缓存是如何进行性能提升的,可以结合实际的例子。 十三:用你的语言解释一下类和实例分别是什么和他们之间的关系,静态类和普通类的区别是什么?通常什么场景下静态类会更合适。 十四:php允许类的多继承吗?类的继承关键字是什么?抽象类是什么?他有什么作用 十五:php中接口(interface)是什么?继承接口的关键字是什么,它和抽象类的区别是什么 十六:php中,生成器(yield)是什么,简单说说他的作用和优点

最新回复(0)