PHP最新面试题2019
1、字符串"0"在PHP和js中转换为布尔值是false还是true
php:false; php 弱语言 '0'和0一样;
js:true;字符串除了空字符串('')其他都是true(包括' '这种中间有空格的);
2、echo, print, print_r, var_dump 区别
echo 语言结构,并不是真正的函数,可以一次输出多个值,多个值之间用逗号分隔。
print 是函数,只能输出一个值。
print_r 能打印数组,对象。
var_dump 能打印数组,对象,并且带数据类型。
3、程序 $a = "www"; settype($a, 'array'); (string)$a; floatval($a); echo gettype($a); 运行后输出结果:
array 原因:settype会改变原值的数据类型,string,floatval属于强制转换,不改变原值的数据类型。
4、用PHP实现冒泡排序算法。
// 控制轮次数
for ($i = 1; $i < count($arr); $i++) {
//控制次数,并判断大小交换位置
for ($j = 0; $j < count($arr) - $i; $j++) {
//如果当前值大于后面的值
if ($arr[$j] > $arr[$j + 1]) {
// 交换
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
5、一 群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的 进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
// $n猴子个数 $m第几个位置
function fn($n, $m)
{
//将猴子数量放到数组内
for ($i = 1; $i < $n + 1; $i++) {
$arr[] = $i;
}
$i = 0;
//当数组内只剩下一个值跳出数组
while (count($arr) > 1) {
//遍历数组,判断当前猴子是否为出局序号,如果是则出局,否则放到数组最后
if (($i + 1) % $m == 0) {
//当循环次数满足m值 去除掉当前值
unset($arr[$i]);
} else {
//不满足循环次数 放到数组对尾
array_push($arr, $arr[$i]);
//删除掉当前循环内容
unset($arr[$i]);
}
$i++;
}
return $arr;
}
// 调用
var_dump(fn(15,7));
6、分表,分区,分库,难点是什么?怎么均匀存储数据?
分表:即把一个很大的表的数据分到几个表中。
分表又分为垂直拆分和水平拆分。
垂直拆分:把字段拆分;可以把不常用的字段放一张表,把大字段放一张表,把常用的字段放一张表。
水平拆分:把表数据拆分;可以通过id取模的方式拆分数据,比如要拆分成100张表,user0,user1,user2......,id%100得到的余数即存储到哪张表。
分表难点:按什么策略来分表;分表后该怎么查询数据(什么情况下该访问哪张表)。
分区:所有的数据还在一个表中,但物理存储数据根据一定的规则存放在不同的文件中,文件也可以放到不同的磁盘上。分区的类型:range分区,list分区,hash分区和key分区。
常见分区方式:
1、根据时间间隔分区,比如以年为单位,分区存储数据。
2、根据自增的主键id,hash(id div 10000000) 表示100万数据建立一个分区。
分库:把数据分几个库存储。分为垂直分库和水平分库。
垂直分库:根据表来分数据库,同一类型的表一个数据库;比如博客一个数据库,论坛一个数据库。
水平分库:根据某些规则,将同一个表的数据分布在不同的库上;比如根据用户id把用户的博客文章分布在5个数据库上。
7、PHP中单引号和双引号的区别。
在一般情况下,单引号和双引号是可以互通的,但双引号内部变量会解析,而单引号内部变量不解析。
8、require()和include()的区别。
都是引入别的页面;
require()出现错误,会终止程序;而include()则会继续执行,并会显示一个错误警告;
在实际项目中,一般使用require_one()更好。
9、PHP中超全局变量,魔术变量,魔术方法:
超全局变量(9个):
参考:https://www.php.net/manual/zh/language.variables.superglobals.php
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
魔术变量(8个):
__LINE__ 文件中的当前行号。
__FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__DIR__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__FUNCTION__ 返回该函数被定义时的名字(区分大小写)
__CLASS__ 返回该类被定义时的名字(区分大小写)。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。
__METHOD__ 返回该方法被定义时的名字(区分大小写)。
__NAMESPACE__ 当前命名空间的名称(区分大小写)。
魔术方法:
参考:https://www.php.net/manual/zh/language.oop5.magic.php
10、栈和队列
栈:是允许在同一端进行插入和删除的特殊线性表。
栈也称为先进后出表。
注:线性表是最基本,最简单,也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系。
队列:是一种特殊的线性表。特殊之处在于只允许在前端进行删除操作,在表的后端进行插入操作。
队列也称为先进先出表。
11、对称加密和非对称加密
对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。
常见的对称加密算法:DES,AES,3DES等等。
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
常见的非对称加密算法:RSA,ECC(移动设备用),DSA(数字签名用)
12、时间复杂度和空间复杂度
算法复杂度分为时间复杂度和空间复杂度。
其作用:时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。
13、抽象类和接口的区别
参考:https://blog.csdn.net/sunlylorn/article/details/6124319
14、PHP创建多级目录
function makedir($path)
{
if (is_dir($path)){
echo "目录已存在";
}else {
$res = mkdir($path, 0777, true);
if ($res) {
echo "创建成功";
} else {
echo "创建失败";
}
}
}
15、PHP写一段代码,确保多个进程同时写入一个文件成功
function writeData($filepath, $data)
{
$fp = fopen($filepath, 'a'); //以追加的方式打开文件,返回的是指针
do {
usleep(100); //暂停执行程序,参数是以微秒为单位的
} while (!flock($fp, LOCK_EX)); //LOCK_EX 取得独占锁定(写入的程序)进行排它型锁定 获取锁 有锁就写入,没锁就得
$res = fwrite($fp, $data . "\n"); // 以追加的方式写入数据到打开的文件
flock($fp, LOCK_UN); //LOCK_UN 释放锁定(无论共享或独占)。
fclose($fp); //关闭打开的文件指针
return $res;
}
16、PHP的is_writeable()函数存在Bug,无法准确判断一个目录/文件是否可写,请写一个函数来判断目录/文件是否绝对可写。
下面是CodeIgniter 中的is_really_writable函数解决方案,详见函数注释
其中bug存在两个方面,
1、在windowns中,当文件只有只读属性时,is_writeable()函数才返回false,当返回true时,该文件不一定是可写的。
如果是目录,在目录中新建文件并通过打开文件来判断;
如果是文件,可以通过打开文件(fopen),来测试文件是否可写。
2、在Unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。
读取配置文件是否safe_mode是否开启。
/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can't write to
* the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access private
* @return void
*/
if ( ! function_exists('is_really_writable')) {
function is_really_writable($file)
{
// If we're on a Unix server with safe_mode off we call is_writable
if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) {
return is_writable($file);
} // For windows servers and safe_mode "on" installations we'll actually
// write a file then read it. Bah...
if (is_dir($file)) {
$file = rtrim($file, '/') . '/' . md5(mt_rand(1, 100) . mt_rand(1, 100)); if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
return FALSE;
} fclose($fp);
@chmod($file, DIR_WRITE_MODE);
@unlink($file);
return TRUE;
} elseif (!is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
return FALSE;
} fclose($fp);
return TRUE;
}
}
17、php中去除一个字符串中非字母部分
preg_replace('/[^a-z]/i', '', $str);
18、将一个字符串去除字符串中非字母部分,并将字符串中’_‘号后面首字母和字符串首字母大写,如a2b_ab23c得到AbAbc。
function getStr($str)
{
// [^a-z]用来匹配任何不在a和z之间的字符,i表示不区分大小写。
$str = preg_replace('/[^a-z_]/i', '', $str);
$arr = explode('_', $str);
foreach($arr as $key=>$value){
// ucfirst()首字母大写
$arr[$key] = ucfirst($value);
}
$str = implode('', $arr);
echo $str;
}
getStr('a2b_ab23c');
19、使用js实现进入一个页面10s后弹出提示框,提示框内容为‘hello world’。
setTimeout("alert('hello world')", 10000)
20、写一个sql语句查询表A中user_name字段重复出现两次以上的所有数据。
SELECT user_name, COUNT(user_name) AS num
FROM A GROUP BY user_name HAVING num >=2;
注意:
- having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
- where肯定在group by 之前。
- where后的条件表达式里不允许使用聚合函数,而having可以。
21、redis内存满了之后怎么处理的
参考博客:https://blog.csdn.net/qq_28018283/article/details/80764518
如果达到设置的上限,Redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将Redis当缓存来使用配置淘汰机制,当Redis达到内存上限时会冲刷掉旧的内容。有5中内存淘汰机制,具体看参考博客。
22、PHP互换两个变量值的方法(不用第三变量)
function exchange()
{
/**
* 双方变量为字符串或者数字时,可用此交换方法
* 使用异或运算
*/
$a = "This is A"; // a变量原始值
$b = "This is B"; // b变量原始值
echo '交换之前 $a 的值:' . $a . ', $b 的值:' . $b, '<br>'; // 输出原始值
/**
* 原始二进制:
* $a:010101000110100001101001011100110010000001101001011100110010000001000001
* $b:010101000110100001101001011100110010000001101001011100110010000001000010
*
* 下面主要使用按位异或交换,具体请参照下列给出的二进制过程,
*/
$a = $a ^ $b; // 此刻$a:000000000000000000000000000000000000000000000000000000000000000000000011
$b = $b ^ $a; // 此刻$b:010101000110100001101001011100110010000001101001011100110010000001000001
$a = $a ^ $b; // 此刻$a:010101000110100001101001011100110010000001101001011100110010000001000010
echo '交换之后 $a 的值:' . $a . ', $b 的值:' . $b, '<br>'; // 输出结果值
}
PHP最新面试题2019的更多相关文章
- 今日头条3面,被泄露的Java最新面试题
一.面试第 1 轮 1. linux 网络模型 2. b+树 3. 阻塞队列 4. redis 和 MongoDB 的区别.几个概念对比,还有底层实现. 5. 算法题: merge k sorted ...
- 2013Java最新面试题
更新时间:2015-04-07 来源:网络 投诉删除 [看准网(Kanzhun.com)]Java面试题频道小编搜集的范文“2013Java最新面试题”,供大家阅读参考 ...
- 2020年Python最新面试题(一):Python基础
转: 2020年Python最新面试题(一):Python基础 目录 1. 什么是 Python?使用 Python 有什么好处? 2. Python中常用的关键字有哪些? 3. Python 2.x ...
- mysql面试题及答案,mysql最新面试题,mysql面试题大全汇总
mysql最新面试题及答案汇总 Mysql 的存储引擎,myisam和innodb的区别.mysql最新面试题 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁, ...
- web前端面试题 -- 2019最新,最全
最近在找工作,面试了好多家公司,结果都不怎么理想.要么公司环境氛围不行,要么工资达不到理想的薪资.大部分公司对程序员的面试流程几乎都一样,来了先填一份登记表,写一套面试题,然后技术面,人事面.至于有的 ...
- 2019年PHP最新面试题(含答案)
1. 数据库设计经验,为什么进行分表?分库?一般多少数据量开始分表?分库?分库分表的目的?什么是数据库垂直拆分?水平拆分?分区等等 一:为什么要分表 当一张表的数据达到几百万时,你查询一次所花的时间会 ...
- 2019年JVM最新面试题,必须收藏它
1.JVN内存结构 方法区和对是所有线程共享的内存区域:而java栈.本地方法栈和程序员计数器是运行是线程私有的内存区域. Java堆(Heap),是Java虚拟机所管理的内存中最大的一块.Java堆 ...
- Android2017最新面试题(3-5年经验个人面试经历)
2017最新Android面试题 大家好,在跟大家讲述自己的面试经历,以及遇到的面试题前,先说说几句题外话. 接触Android已经3年,在工作中遇到疑难问题总是在网上(csdn大牛博客,stacko ...
- 最新Webstrom, Idea 2019.1.3 的激活
1.注册码激活 打开网址(IntelliJ IDEA 注册码),我们能看到下面的界面,直接点击获取激活码,将生成的激活码粘贴到WebStorm激活对话框中的Lisence Code输入框,点击OK即可 ...
随机推荐
- 【RN - 基础】之TextInput使用简介
TextInput组件允许用户在应用中通过键盘输入文本信息,其使用方法和Text.Image一样简单,实例代码如下: <TextInput placeholder={'请输入用户名'} styl ...
- c语言l博客作业09
问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在 ...
- vue基本开发环境搭建
先安装node运行环境下载网址 https://nodejs.org/en/或者http://nodejs.cn/ 检查node是否安装成功命令行窗口直接输入 $ node -v 如果输出版本号,说明 ...
- postgresql,postgis,geoserver 发布地图服务,并用.net mvc openlayers3进行显示
1.所需工具 postgres版本 9.6.1 对应的postgis geoserver 2.8.2 openlayers3 2.将postgres postgis ,geosever安装好,再用如下 ...
- Xcode 10 Error: Multiple commands produce
目录 Xcode 9.4.1运行react-native 可以,但是在Xcode 10运行报错,报错信息如下: 解决方法 1. 选择 File > Project Settings (或者 Fi ...
- 压缩感知重构算法之CoSaMP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- [TimLinux] asciinema Linux终端录制工具嵌入私有web中
yum install asciinema https://github.com/asciinema/asciinema-player # 下载asciinema-player.css, asciin ...
- python 金融应用(三)数据可视化
matplotlib 库( http://www.matp1otlìb.org )的基本可视化功能. 主要是2-D绘图.金融绘图和3-D绘图 一.2-D绘图 1.1一维数据集 #导入所需要的包impo ...
- seaborn 数据可视化(一)连续型变量可视化
一.综述 Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,图像也更加美观,本文基于seaborn官方API还有自己的一些理解. 1.1.样式控制: ...
- 用Python写一个游戏脚本,你会吗?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:ivat4u 学习python有一段时间了,由于python语言的强大 ...