Home > Backend Development > PHP Tutorial > PHP classic interview questions set

PHP classic interview questions set

不言
Release: 2023-03-24 15:14:01
Original
29478 people have browsed it

The content of this article is about the PHP classic interview question set. The PHP classic interview question set has a certain reference value. Now I share it with you. Friends in need can refer to it.

Related recommendations: " 2019 PHP interview questions summary (collection)

Based on my own interview situation in the past few days, I listed some of the PHP interview questions I faced, basically based on my own Please point out any inaccuracies and discuss and analyze with everyone. I also hope it can help those who are interviewing:

1. The similarities and differences between Get and Post in form submission Click

get request is generally used to obtain data from the server, and post is generally used to submit data to the server.

The parameters transmitted by get are in the url, and there is a limit on the size of the parameters passed. There is no size limit for post.

Get is unsafe, post is more secure than get

Get requests are accepted on the server side using Request.queryString, post requests are accepted on the server side using Requset.form

2.What is the base tag of HTML used for?

Must be written in the head. The base tag specifies the default address or default target for all links on the page

3.echo(), What is the difference between print() and print_r()?

echo is a PHP statement, print and print_r are functions, statements have no return value, and functions can have return values ​​(even if they are useless)
Print() can only Print out the value of simple type variables (such as int, string)
print_r() can print out the value of complex type variables (such as array, object)
echo Output one or more strings

4. Write a regular expression for email
/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
Copy after login
5. Convert the array ['a', 'b', 'c'] into the string 'abc'
 echo  implode(‘’,[‘a’, ‘b’, ‘c’]); 

 echo   join([‘a’, ‘b’, ‘c’],'');
Copy after login
6 .Get the position where A first appears in the string 'aAbB'
  $str=‘aAbB’;
  echo strpos($str,"A");
Copy after login
7. Write a paragraph to completely reverse the string with minimal cost, e.g. Convert "1234567890" into "0987654321". (Use the above you Write and mark simple comments in the most familiar language, do not use functions,
$s = '1234567890';
$o = '';
$i = 0;
while(isset($s[$i]) && $s[$i] != null) {
    $o = $s[$i++].$o;
}

echo $o;
Copy after login
8. Please use recursion to implement a factorial evaluation algorithm F(n): n=5;F(n)=5!=5 *4*3*2*1=120
function F($n){    
 if($n==0){         
 return 1;      
 }else{         
 return $n* F($n-1);      
 }
 }var_dump(F(5));
Copy after login
9. Convert the character length fang-zhi-gang into camel case format: FangZhiGang
//方法一
function Fun($str){   
 if(isset($str) && !empty($str)){       
  $newStr='';       
  if(strpos($str,'-')>0){          
   $strArray=explode('-',$str);          
    $len=count($strArray);           
    for ($i=0;$i<$len;$i++){               
    $newStr.=ucfirst($strArray[$i]);           
    } 
          }      
           return $newStr;    }
           }
//方法二function Fun($str){  
 $arr1=explode(&#39;_&#39;,$str);   
 $str = implode(&#39; &#39;,$arr1);   
 return ucwords($str);
 }
 var_dump(Fun("fang-zhi-gang")); //FangZhiGang
Copy after login
10. The built-in sorting methods for arrays are Which ones?
sort($array); //数组升序排序
rsort($array); //数组降序排序

asort($array);  //根据值,以升序对关联数组进行排序
ksort($array);  //根据建,以升序对关联数组进行排序

arsort($array);   //根据值,以降序对关联数组进行排序
krsort($array);  // 根据键,以降序对关联数组进行排序
Copy after login
11. Use PHP to write the code to display the client IP and server IP
$_SERVER["REMOTE_ADDR"]
$_SERVER["SERVER_ADDR"]
Copy after login
12. What is the difference between the include and require statements? To avoid including the same file multiple times, you can use ( ?) statement to replace them?
require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

include有返回值,而require没有(可能因为如此require的速度比include快)

包含文件不存在或者语法错误的时候require是致命的错误终止执行,include不是
Copy after login
13.The difference between session and cookie?
session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过时间来设置时间长短
Copy after login

14.PHP exchanges the values ​​​​of two variables without using the third variable

//方法一
$a.=$b;
$b=str_replace($b,"",$a);
$a=str_replace($b,"",$a);

//方法二
list($b,$a)=array($a,$b);
var_dump($a,$b);
Copy after login
15. Write a method to get the file extension
function get_extension($file){
   //方法一   
   return  substr(strrchr($file,&#39;.&#39;), 1);   
   //方法二   
   return  end(explode(&#39;.&#39;, $file));
   }echo  get_extension(&#39;fangzhigang.png&#39;); //png
Copy after login
16. Use PHP to print out the time of the previous day in the format of 2017-3-22 22:21:21
$a = date("Y-m-d H:i:s", strtotime("-1 days"));
Copy after login
17.What security should be considered for sql statements?
(1)防止sql注入,对特殊字符进行转义,过滤或者使用预编译sql语句绑定
(2)使用最小权限原则,特别是不要使用root账户,微不同的动作或者操作建立不同的账户
(3)当sql出错时,不要把数据库出错的信息暴露到客户端
Copy after login
18.Optimizing mysql database methods
(1)选取适当的字段,打字段设置为NOT NULL,在查询的时候数据库不用比较NULL;
(2)使用链接(join)代替子查询;
(3)使用联合(UNION)查询代替手动创建临时表;
(4)尽量减少使用(LIKE)关键字和通配符
(5)使用事务和外健
Copy after login
19.For a website with large traffic, what method will you use to solve the traffic problem?
(1)首先确认服务器硬件是否满足支持当前的流量;
(2)优化数据库的访问;
(3)禁止外部盗链;
(4)控制大文件下载;
(5)使用不同的主机分流;
(6)使用流量分析统计;
Copy after login
20.What is the difference between mysql_fetch_row() and mysql_fetch_array?
这两个函数,返回的都是一个数组,区别就是第一个函数返回的数组是只包含值,我们只能$row[0],$row[1],这样以数组下标来读取数据,

而MySQL_fetch_array()返回的数组既包含第一种,也包含键值对的形式,我们可以这样读取数据,(假如数据库的字段是 username,passwd):$row[&#39;username&#39;]$row[&#39;passwd&#39;]
Copy after login
21.MySQL的几个概念:主键,外键,索引,唯一索引
Copy after login
主键(primary key) 能够唯一标识表中某一行的属性或属性组。一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。

外键(foreign key) 是用于建立和加强两个表数据之间的链接的一列或多列。外键约束主要用来维护两个表之间数据的一致性。简言之,表的外键就是另一表的主键,外键将两表联系起来。一般情况下,要删除一张表中的主键必须首先要确保其它表中的没有相同外键(即该表中的主键没有一个外键和它相关联)。

索引(index) 是用来快速地寻找那些具有特定值的记录。主要是为了检索的方便,是为了加快访问速度, 按一定的规则创建的,一般起到排序作用。所谓唯一性索引,这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

总结:

主键一定是唯一性索引,唯一性索引并不一定就是主键。
一个表中可以有多个唯一性索引,但只能有一个主键。
主键列不允许空值,而唯一性索引列允许空值。
主键可以被其他字段作外键引用,而索引不能作为外键引用。
Copy after login
22.What are the mysql database engines?
 MyISAM、 ISAM、HEAP、InnoDB、BDB、CVS...
Copy after login
23. Talk about your understanding of the difference between MyISAM and InnoDB in the mysql engine?
 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

以下是一些细节和具体实现的差别:

MyISAM与InnoDB的区别是什么?
1、 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。
InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。
2、 存储空间
MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。
InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
3、 可移植性、备份及恢复
MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。
InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十G的时候就相对痛苦了。
4、 事务支持
MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。
InnoDB:提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
5、 AUTO_INCREMENT
MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。
InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。
6、 表锁差异
MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。
7、 全文索引
MyISAM:支持 FULLTEXT类型的全文索引
InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。
8、 表主键
MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。
9、 表的具体行数
MyISAM:保存有表的总行数,如果select count(*) from table;会直接取出出该值。
InnoDB:没有保存表的总行数,如果使用select count(*) from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。
10、 CURD操作
MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncate table这个命令。
11、 外键
MyISAM:不支持
InnoDB:支持
通过上述的分析,基本上可以考虑使用InnoDB来替代MyISAM引擎了,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。
Copy after login

24. The difference between redis and memache cache

总结一:

1.数据类型

Redis数据类型丰富,支持set list等类型
memcache支持简单数据类型,需要客户端自己处理复杂对象

2.持久性

redis支持数据落地持久化存储
memcache不支持数据持久存储

3.分布式存储

redis支持master-slave复制模式
memcache可以使用一致性hash做分布式

value大小不同

memcache是一个内存缓存,key的长度小于250字符,单个item存储要小于1M,不适合虚拟机使用

4.数据一致性不同

redis使用的是单线程模型,保证了数据按顺序提交。
memcache需要使用cas保证数据一致性。CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作

5.cpu利用

redis单线程模型只能使用一个cpu,可以开启多个redis进程

总结二:

1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
4.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
我个人认为最本质的不同是Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存

总结三:

redis和memecache的不同在于:

1、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2、数据支持类型:
redis在数据支持上要比memecache多的多。
3、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
redis目前官方只支持Linux 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上

memcache只能当做缓存,cache
redis的内容是可以落地的,就是说跟MongoDB有些类似,然后redis也可以作为缓存,并且可以设置master-slave
Copy after login

25. There are three columns A B C in the table, which are implemented using SQL statements : When column A is greater than column B, select column A; otherwise, select column B; when column B is greater than column C, select column B; otherwise, select column C.

drop table table1  create table table1(  
    a int,  
    b int,  
    c int  )  insert into table1 values(22,24,23)  
  select * from table1  
  select (case when a>b then a else b end),(case when b>c then b else c end)  from table1  
  select (case when a>b then a  
             when a>c then a  
             when b>c then b else c  
             end)  from table1
Copy after login

26. When installing a Linux system, use the netconfig program to configure the network. What content should be entered?

会让用户输入主机名、域名、域名服务器、IP地址、网关地址和子网掩码等必要信息
Copy after login

27. How to write an interface in PHP for others to call?

 public function  authenticationApi($data,$url){       
  $ch  = curl_init();       
   curl_setopt($ch, CURLOPT_URL, $url);        
   curl_setopt($ch, CURLOPT_POST, 1);        
   curl_setopt($ch, CURLOPT_HEADER, 0);        
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    
   //输出格式可以转为数组形式的json格式        
   $tmpInfo = curl_exec($ch);        
   curl_close($ch);        
   return $tmpInfo;    
   }
Copy after login

28. Use the PHP header() function to implement the page 404 error prompt function

Header("HTTP/1.1 404 Not Found");
Copy after login

29.heredoc structure and usage

echo <<<EOT
   <html>
   <head><title>主页</title></head>
   <body>主页内容</body>
   </html>
EOT;

注意:结束标识符所在的行不能包含任何其它字符除";"
Copy after login
30.nowdoc结构及用法
Copy after login
$str = <<<&#39;EOD&#39;
       Example of string
       spanning multiple lines
       using nowdoc syntax.
EOD;
Copy after login

31.javascript Program code to determine whether the pop-up window is blocked

var wroxWin = window.open("http://www.111cn.net", "_blank");if (wroxWin == null) {
    alert("糟糕!弹出窗口被屏蔽了");}
Copy after login

32. Functions used for PHP serialization and deserialization

serialize() 序列化

unserialize() 反序列化
Copy after login

33. Use the following table structure to write the SQL statement of the names of the ten people with the most posts (members(id,username,posts,pass,email)

select memebers.username from members group by posts desc limit 10
Copy after login

34,. To install PHP as an Apache module, first use the statement (?) in the file http.conf to dynamically load the PHP module, and then use the statement (?) to make Apache add all extensions to php files are processed as PHP scripts.

1.LoadModule php5_module "c:/php/php5apache2.dll")

2.AddType application/x-httpd-php .php
Copy after login

35. What are the transactions in the database?

   事务就是一系列的操作,这些操作完成一项任务。只要这些操作里有一个操作没有成功,事务就操作失败,发生回滚事件。即撤消前面的操作,这样可以保证数据的一致性。而且可以把操作暂时放在缓存里,等所有操作都成功有提交数据库,这样保证费时的操作都是有效操作。
Copy after login
36.apche 和 nginx 的优缺
Copy after login
   nginx轻量级,比apache占用更少的内存及资源,抗并发,nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能。apache 相对于nginx 的优点:rewrite比nginx 的rewrite 强大,少bug,稳定。(需要性能用nginx,求稳定就apache)。
Copy after login
37.求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
Copy after login
// 方法一:用DateTime类
$day1 = &#39;2003-09-16&#39;;
$day2 = &#39;2011-11-23&#39;;
$d1 = new dateTime($day1);
$d2 = new dateTime($day2);
echo $d1->diff($d2)->days;

// 方法二,用时间戳计算
echo (strtotime($day2) - strtotime($day1))/(24*3600);
Copy after login
38.下面的代码用来做什么?请解释。$date=&#39;08/26/2003&#39;;
print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);
Copy after login
     这是把一个日期从 MM/DD/YYYY 的格式转为 DD/MM/YYYY 格式。我的一个好朋友告诉我可以把这个正规表达式拆解为以下的语句,对于如此简单的表示是来说其实无须拆解,纯粹为了解说的方便:

// 对应一个或更多 0-9,后面紧随一个斜号$regExpression = "([0-9]+)/";
// 应一个或更多 0-9,后面紧随另一个斜号$regExpression .= "([0-9]+)/";
// 再次对应一个或更多 0-9$regExpression .= "([0-9]+)";至于 \\2/\\1/\\3 则是用来对应括号,第一个括号对的是月份
Copy after login

39.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(?)中;而链接到当前页面的URL记录在预定义变量(?)中。

(1) echo $_SERVER[&#39;PHP_SELF&#39;]; 
(2) echo $_SERVER["HTTP_REFERER"];
Copy after login

40.一个函数的参数不能是对变量的引用,除非在php.ini中把(?)设为on.

allow_call_time_pass_reference
Copy after login

今天就先写到这里吧!在后期的面试中遇到不同的面试题,我在编辑到此处,希望此文会给大家带来帮助,觉写的不错的,对你有帮助中的请动动你的手关注我和点赞分享,祝愿正在找工作的你,能找一份满意的工作。祝你新的旅途愉快!

相关推荐:

最全最详细的PHP面试题(带有答案)

The above is the detailed content of PHP classic interview questions set. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template