2021年最新PHP 面试、笔试题汇总(三)

2021年最新PHP 面试、笔试题汇总(三)

大家好,又见面了,我是全栈君。

2021年最新PHP 面试、笔试题汇总(三)

四十九、找出数组中出现一次的元素。10 10 11 11 12 13 12 13 16 只出现一次的数字。要求时间复杂度尽可能低

// 方法一function onlyOne($arr) {  $res = 0;  for ($i = 0; $i < count($arr); $i++) {    $res ^= $arr[$i];  }     return $res;}// 方法二function onlyOne2($arr) {  $m = array_count_values($arr);  foreach ($m as $k => $v) {    if ($v == 1) {    return $k;    }  }  return 0;}

五十、LRU算法
如果一个 数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小(https://www.twblogs.net/a/5b7f0b662b717767c6ad6c42/zh-cn)

五十一、PHP如何设置错误级别

1.通过修改 php.ini文件。

error_reporting = E_ALL  //全部错误显示
 error_reporting = 0  //全部错误显示
 
//显示除了notice类型错误之外的全部错误
 error_reporting = E_ALL & ~E_NOTICE 
ps:
  display_errors = On //是否显示错误

2.通过error_reporting()函数设置

echo error_reporting(); //输出当前位掩码
  error_reporting(E_ALL); //显示所有错误
  error_reporting(-1); //显示所有错误
  error_reporting(0); //不显示所有错误,解析错误(syntax error)除外
  error_reporting(E_ALL & ~E_NOTICE); //显示除了notice类型错误之外的全部错误

3.通过运行时设置 ini_set()

ini_set('error_reporting',0); //不显示所有错误
ini_set('display_errors',0); //关闭错误显示
ini_set('error_reporting',1); //打开错误显示

PS:
php错误常量 和 位掩码 的对应关系
2021年最新PHP 面试、笔试题汇总(三)
PHP配置文件中于错误相关的配置项
2021年最新PHP 面试、笔试题汇总(三)

五十二、手动抛出错误 trigger_error()
例如:
2021年最新PHP 面试、笔试题汇总(三)
输出:(如果抛出致命错误 E_USER_ERROR ,则程序停止)
2021年最新PHP 面试、笔试题汇总(三)

五十三、自定义错误处理机制 

set_error_handler() ,取消自定义 restore_error_handler()
官方文档:https://www.php.net/manual/zh/function.set-error-handler.php
视频资料:自定义错误处理器

杂项:

获取客户端IP
没有使用代理

$_SERVER[‘REMOTE_ADDR’] 或者 getenv(‘REMOTE_ADDR’)

使用透明代理

$_SERVER[‘HTTP_X_FORWARDED_FOR’];

获取服务端IP

$_SERVER[‘SERVER_ADDR’] 或者 gethostbyname(‘www.baidu.com’);

将IP地址转换成int

ip2long($ip);

好处:存储时可以直接存有符号int型,只需要4字节(节约空间)
存char类型需要15个字节
int转换成ip

long2ip($int);

获取当前时间戳

time()

打印前一天的时间

date('Y-m-d H:i:s',strtotime('-1 day'))

GB2312格式的字符串装换成UTF-8格式

iconv('GB2312','UTF-8','悄悄是别离的笙箫');

字符串转数组

explode(',',$str)

创建一个每周三01:00~04:00每3分钟执行执行一次的crontab指令

*/3 1-4 * * 3 /bin/bash /home/sijiaomao/ok.sh

php两数组相加
两个数组相加,若数组中存在相同键值的元素,则只保留第一个数组的元素

设置时区

date_default_timezone_set("Asia/Shanghai");

在url中用get传值的时候,若中文出现乱码,应该用哪个函数对中文进行编码?
urlencode() 解码用urldecode()

PHP常用扩展
curl、iconv、json、mbstring、mysqli、PDO、hash、openssl、sockets、redis

2021年最新PHP 面试、笔试题汇总(三)

php八种数据类型
数据类型分为三种:
标量数据类型:boolean、string、integer、double
复合数据类型:array、object
特殊数据类型:resource、null

php进程模型,php怎么支持多个并发
守护进程模型:https://www.jianshu.com/p/542935a3bfa8

nginx的进程模型,怎么支持多个并发
https://www.zhihu.com/question/22062795

php-fpm各配置含义,fpm的daemonize模式
http://www.4wei.cn/archives/1002061

查看PHP进程当前使用的内存
memory_get_usage()

查看系统分配的内存
memory_get_peak_usage()

unset()可以释放内存,当处理完数据后 unset 掉,只能释放当前使用的内存,系统分配的内存并不会变小
内存被分划为, “已使用” 和 “空闲”, unset 只会把 “已使用” 变为 “空闲”, 下次内存请求时会先去”空闲”里取,程序结束, GC 才会释放全部内存

参数绑定可以避免 SQL 注入攻击

 例如:$users = DB::select('select * from users where username = ? and passwd = ?', [$username,$passwd]);

除了使用 ? 占位符来代表参数绑定外,还可以使用命名绑定来执行查询:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

thinkphp5.0链接数据库
使用db助手函数默认每次都会重新连接数据库,而使用Db::name或者Db::table方法的话都是单例的
db函数如果需要采用相同的链接,可以传入第三个参数,例如:

db(‘user’,[],false)->where(‘id’,1)->find();
 db(‘user’,[],false)->where(‘status’,1)->select();

上面的方式会使用同一个数据库连接,第二个参数为数据库的连接参数,留空表示采用数据库配置文件的配置。

PHP预定义变量(详见:https://www.php.net/manual/zh/reserved.variables.php)

 超全局变量 — 超全局变量是在全部作用域中始终可用的内置变量
  $GLOBALS — 引用全局作用域中可用的全部变量
  $_SERVER — 服务器和执行环境信息
  $_GET — HTTP GET 变量
  $_POST — HTTP POST 变量
  $_FILES — HTTP 文件上传变量
  $_REQUEST — HTTP Request 变量
  $_SESSION — Session 变量
  $_ENV — 环境变量
  $_COOKIE — HTTP Cookies
  $php_errormsg — 前一个错误信息
  $HTTP_RAW_POST_DATA — 原生POST数据
  $http_response_header — HTTP 响应头
  $argc — 传递给脚本的参数数目
  $argv — 传递给脚本的参数数组

count()和sizeof()的区别
两个函数都是用于获取数组的长度,sizeof()用法和count()完全一致
2021年最新PHP 面试、笔试题汇总(三)
没有区别,count()是sizeof()的别名

mysql中INT和BIGINT的区别?
如果使用INT自增类型,那么当一张表的记录数超过2147483647(约21亿)时,会达到上限而出错。使用BIGINT自增类型则可以最多约922亿亿条记录。

mysql聚合函数返回值?
如果聚合查询的WHERE条件没有匹配到任何行,COUNT()会返回0,而SUM()、AVG()、MAX()和MIN()会返回NULL

SELECT AVG(score) average FROM students WHERE gender = ‘X’;

总共十条记录,每页3条记录,如何通过聚合查询获得总页数?

SELECT CEILING(COUNT(*) / 3) FROM students; //CEILING()向上取整

使用一条SELECT查询查出每个班级的平均分(四舍五入取整) ceiling(),四舍五入取整

SELECT class_id,ceiling(AVG(score)) from students GROUP BY class_id;

请使用一条SELECT查询查出每个班级男生和女生的平均分:

select class_id,gender,AVG(score) as avgr from students GROUP BY class_id,gender ORDER BY avgr;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111611.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux磁盘管理(命令行)

    Linux磁盘管理(命令行)Linuxfdisk是一个创建和维护分区表的程序,它兼容DOS类型的分区表、BSD或者SUN类型的磁盘列表。

    2022年5月28日
    40
  • DLL 延迟加载与资源释放

    DLL延迟加载与资源释放延迟加载DLL的延迟加载技术,使用延迟加载方式编译连接可执行文件。这样可执行文件可以先加载执行,而依赖的dll文件会在正式调用的时候被加载进来。好处是可以把必须使用的D

    2021年12月13日
    42
  • mysql中Timestamp,time,datetime 区别

    mysql中Timestamp,time,datetime 区别原文地址:https://www.cnblogs.com/mxh1099/p/5461311.html一、TIMESTAMP[(M)]时间戳。范围是’1970-01-0100:00:00’到20

    2022年8月6日
    5
  • 高通骁龙430系列-MSM8937 ( Cortex-A53架构)「建议收藏」

    高通骁龙430系列-MSM8937 ( Cortex-A53架构)「建议收藏」核心板特性产品尺寸小,便于客户集成,减少产品体积;支持4GLTE超高速上网,单板兼容移动/联通/电信2G/3G/4G;丰富的接口配置,满足大多数客户需求;高通骁龙8937(高通骁龙430系列)产品首款核心板产品;产品单面布板,可有效降低产品厚度;产品质量稳定可靠;提高开发效率。客户系统架构无需从零开始;降低开发难度。客户重点放在应用方案开发上,不必关注无线网络方案;增强可维护性。通过核心板的更迭…

    2022年4月19日
    738
  • Linux中搭建Nginx环境[通俗易懂]

    Linux中搭建Nginx环境[通俗易懂]CentOs7环境中一、安装pcre依赖 1.下载 本地上传或者联网下载pcre压缩文件依赖 2. 解压pcre压缩包 命令:tar -zxvf pcre-8.37.tar.gz 3. 在解压目录下执行 ./configure 在当前目录运行configure文件 …

    2022年6月13日
    30
  • hashmap线程不安全问题_arraylist线程不安全体现在哪里

    hashmap线程不安全问题_arraylist线程不安全体现在哪里一、头插法导致死循环在jdk1.7以前,HashMap在进行扩容时采用的是头插法,可能当时别人觉得这样比较高效,但是也带来了线程安全问题。刚开始时HashMap是这样的:正常扩容后是这样的:但如果是在多线程下,两个线程的指向3:此时线程1比线程2先执行,那么线程1就会指向7,将线程7.next指向了3,:但是对于线程2来说,3.next=7;所以就形成了死循环,也就是3和7构成了环。二、数据覆盖在jdk1.8以后,改了1.7以前的小毛病,但是新的问题又来了,我们来看下源码:

    2022年8月31日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号