php:fal; php 弱语言‘0’和0一样;
js:true;字符串除了空字符串(”)其他都是true(包括’ ‘这种中间有空格的);
echo 语言结构,并不是真正的函数,可以一次输出多个值,多个值之间用逗号分隔。
print 是函数,只能输出一个值。
print_r 能打印数组,对象。
var_dump 能打印数组,对象,并且带数据类型。
array 原因:ttype会改变原值的数据类型,string,floatval属于强制转换,不改变原值的数据类型。
// 控制轮次平凡不平凡数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; } }}
// $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值 去除掉当前值 unt($arr[$i]); } el { //不满足循环次数 放到数组对尾 array_push($arr, $arr[$i]); //删除掉当前循环内容 unt($arr[$i]); } $i++; } return $arr;}// 调用var_dump(fn(15,7));
分表:即把一个很大的表的数据分到几个表中。
分表又分为垂直拆分和水平拆分。
垂直拆分:把字段拆分;可以把不常用的字段放一张表,把大字段放一张表,把常用的字段放一张表。
水平拆分:把表数据拆分;可以通过id取模的方式拆分数据,比如要拆分成100张表,ur0,ur1,ur2……,id%100得到的余数即存储到哪张表。
分表难点:按什么策略来分表;分表后该怎么查询数据(什么情况下该访问哪张表)。
分区:所有的数据还在一个表中,但物理存储数据根据一定的规则存放在不同的文件中,文件也可以放到不同的磁盘上。分区的类型:range分区,list分区,hash分区和key分区。
常见分区方式:
1、根据时间间隔分区,比如以年为单位,分区存储数据。
2、根据自增的主键id,hash(id div 10000000) 表示100万数据建立一个分区。
分库:把数据分几个库存储。分为垂直分库和水平分库。
垂直分库:根据表来分数据库,同一类型的表一个数据库;比如博客一个数据库,论坛一个数据库。
水平分库:根据某些规则,将同一个表的数据分布在不同的库上;比如根据用户id把用户的博客文章分布在5个数据库上。
在一般情况下,单引号和双引号是可以互通的,但双引号内部变量会解析,而单引号内部变量不解析。
都是引入别的页面;
require()出现错误,会终止程序;而include()则会继续执行,并会显示一个错误警告;
在实际项目中,一般使用require_one()更好。
超全局变量(9个):
参考:
$globals
$_rver
$_request
$_post
$_get
$_files
$_env
$_cookie
$_ssion
魔术变量(8个):
__line__ 文件中的当前行号。
__file__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。
__dir__ 文件所在的目录。如果用在被包括文件中,则返回被包括的文件所在的目录。
__function__ 返回该函数被定义时的名字(区分大小写)
__class__ 返回该类被定义时的名字(区分大小写)。
__trait__ trait 的名字(php 5.4.0 新加)。自 php 5.4.0 起,php 实现了代码复用的一个方法,称为 traits。
__method__ 返回该方法被定义时的名字(区分大小写)。
__namespace__ 当前命名空间的名称(区分大小写)。
魔术方法:
参考:
栈:是允许在同一端进行插入和删除的特殊线性表。
栈也称为先进后出表。
注:线性表是最基本,最简单,也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系。
队列:是一种特殊的线性表。特殊之处在于只允许在前端进行删除操作,在表的后端进行插入操作。
队列也称为先进先出表。
对称加密指的就是加密和解密使用同一个秘钥,所以叫做对称加密。对称加密只有一个秘钥,作为私钥。
常见的对称加密算法:des,aes,3des等等。
非对称加密指的是:加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。
常见的非对称加密算法:rsa,ecc(移动设备用),dsa(数字签名用)
算法复杂度分为时间复杂度和空间复杂度。
其作用:时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。
参考:
function makedir($path){ i秦时与臣游f (is_dir($path)){ echo "目录已存在"; }el { $res = mkdir($path, 0777, true); if ($res) { echo 活动工作总结范文"创建成功"; } el { echo "创建失败"; } }}
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 释放锁定(无论共享或独占)。 fclo($fp); //关闭打开的文件指针 return $res;}
下面是codeigniter 中的is_really_writable函数解决方案,详见函数注释
其中bug存在两个方面,
1、在windowns中,当文件只有只读属性时,is_writeable()函数才返回fal,当返回true时,该文件不一定是可写的。
如果是目录,在目录中新建文件并通过打开文件来判断;
如果是文件,可以通过打开文件(fopen),来测试文件是否可写。
2、在unix中,当php配置文件中开启safe_mode时(safe_mode=on),is_writeable()同样不可用。
读取配置文件是否safe_mode是否开启。
/** * tests for file writability * * is_writable() returns true on windows rvers when you really can't write to * the file, bad on the read-only attribute. is_writable() is also unreliable * on unix rvers 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 rver with safe_mode off we call is_writable if (directory_parator == '/' and @ini_get("safe_mode") == fal) { return is_writable($file); } // for windows rvers 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)) === fal) { return fal; } fclo($fp); @chmod($file, dir_write_mode); @unlink($file); return true; } elif (!is_file($file) or ($fp = @fopen($file, fopen_write_create)) === fal) { return fal; } fclo($fp); return true; }}
preg_replace('/[^a-z]/i', '', $str);
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');
ttimeout("alert('hello world')", 10000)
lect ur_name, count(ur_name) as num from a group by ur_name having num >=2;
注意:
having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。where肯定在group by 之前。where后的条件表达式里不允许使用聚合函数,而having可以。参考博客:
如果达到设置的上限,redis的写命令会返回错误信息(但是读命令还可以正常返回。)或者你可以将redis当缓存来使用配置淘汰机制,当redis达到内存上限时会冲刷掉旧的内容。有5中内存淘汰机制,具体看参考博客。
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:0101010001101000011010010111001100100000011010010111上大学的祝福语00110010000001000001 $a = $a ^ $b; // 此刻$a:010101000110100001101001011100110010000001101001011100110010000001000010 echo '交换之后 $a 的值:' . $a . ', $b 的值:' . $b, '<br>'; // 输出结果值}
本文发布于:2023-04-07 16:32:52,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1c80573d1e4b7a20942f0727a33de412.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHP最新面试题2019.doc
本文 PDF 下载地址:PHP最新面试题2019.pdf
留言与评论(共有 0 条评论) |