本书未发布

面试题 本文未发布 发布文章

未匹配的标注

一些面试题

- 当字符串为 null 时,isset(false)和 empty(true)的区别
==和===的区别
===是恒等计算符 同时检查表达式的值与类型
==是比较运算符号 不会检查条件式的表达式的类型

PHP 魔术方法有哪些,作用是什么

  • __construct()构造函数是目前为止最经常使用的函数。在创建对象时,可以在构造函数中做
    一些初始化工作。可以为构造函数定义任意多个参数,只要在实例化时传入对应个数的参数
    即可。构造函数中出现的任何异常都会阻止对象的创建。

  • __desctruct()
    析构函数通常在对象被销毁时调用,析构函数不接收任何参数。经常在析构函数
    中执行一些清理工作,比如关闭数据库连接等。

  • __get()
    在我们尝试访问一个不存在的属性时会被调用。它接收一个参数,该参数表
    示访问属性的名字,并且将该属性的值返回。

  • __set()
    魔术方法在我们尝试修改一个不可访问的属性时会被调用,它接收两个参数,一个表
    示属性的名字,一个表示属性的值。

  • __isset()魔术方法在对一个不可访问的属性调用 isset()方法时会被调用,它接收一个参数,
    表示属性的名字。它应该返回一个布尔值,用来表示该属性是否存在。

  • __unset()魔术方法在调用 unset()函数销毁一个不能访问的属性时会被调用,它接收一个参数,
    表述属性的名字。

  • __toString()在我们将对象当作字符串一样使用时会被调用,它不接收任何参数。该方法允许
    我们定义对象的表现形式。

  • clone()魔术方法clone()可以解决上面的问题。当对一个对象使用 clone 关键字时,该魔
    术方法会被调用。

  • sleep()魔术方法sleep()在对一个对象序列化时(调用 serialize())会被调用。它不
    接收任何参数,而且应该返回一个包含所有应该被序列化的属性的数组。在该魔
    术方法中,也可以执行一些其他操作。
    有一点要注意的是,不要再该函数中进行任何的析构操作,因为这可能会影响正
    在运行的对象。

  • 魔术方法__wakeup()在对存储的对象反序列化时会被调用。它不接收任何参数,也没有任何
    返回值。可以用它来处理在序列化时丢失的数据库连接或资源。

  • 魔术方法__call()在调用不存在或不可访问的方法时会被调用。它接收两个参数,一个是调用
    的方法的名字,一个是包含函数参数的数组。我们可以使用这种方法调用子对象中得同名函
    数。

用过哪些数组函数

array_values($arr); //获得数组的值
array_keys($arr); //获得数组的键名
array_flip($arr); //数组中的值与键名互换(如果有重复前面的会被后面的覆盖)
array_search('PHP',$arr); //检索给定的值,加 true 则是严格类型检查
array_reverse($arr); //将数组中的元素翻转(前后顺序)
in_array("apple", $arr); //在数组中检索 apple
array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中
array_count_values($arr); // 统计数组中所有值出现的次数
array_unique($arr); //去除数组中重复的元素

http状态码

2 开头 (请求成功)表示成功处理了请求的状态代码。
200 (成功) 服务器已成功处理了请求。 通常,这表示服务器ᨀ供了请求的网页。
201 (已创建) 请求成功并且服务器创建了新的资源。
202 (已接受) 服务器已接受请求,但尚未处理。
203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
206 (部分内容) 服务器成功处理了部分 GET 请求。
3 开头 (请求被重定向)表示要完成请求,需要进一步操作。 通常,这些状态代码用来重
定向。
300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user
agent) 选择一项操作,或ᨀ供操作列表供请求者选择。
301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GETHEAD 请求的响应)时,会自动将请求者转到新位置。
302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原
有位置来进行以后的请求。
303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,
服务器返回此代码。
304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会
返回网页内容。
305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还
表示请求者应使用代理。
307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用
原有位置来进行以后的请求。
4 开头 (请求错误)这些状态代码表示请求可能出错,妨碍了服务器的处理。
400 (错误请求) 服务器不理解请求的语法。
401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
403 (禁止) 服务器拒绝请求。
404 (未找到) 服务器找不到请求的网页。
405 (方法禁用) 禁用请求中指定的方法。
406 (不接受) 无法使用请求的内容特性响应请求的网页。
407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使
用代理。
408 (请求超时) 服务器等候请求时发生超时。
409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的
信息。
410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
412 (未满足前ᨀ条件) 服务器未满足请求者在请求中设置的其中一个前ᨀ条件。
413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理
能力。
414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
416 (请求范围不符合要求) 如果页面无法ᨀ供请求的范围,则服务器会返回此状态
代码。
417 (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
5 开头(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错
误可能是服务器本身的错误,而不是请求出错。
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时
可能会返回此代码。
502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂
时状态。
504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
505HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

数据库引擎区别(MyIsam 和 InnoDB)

1. InnoDB 不支持 FULLTEXT 类型的索引。  
2. InnoDB 中不保存表的具体行数,也就是说,执行 select count(*) from table 时,InnoDB 要扫一遍整个
表来计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count(*)语句包含
where 条件时,两种表的操作是一样的。       
3. 对于 AUTO_INCREMENT 类型的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中,可
以和其他字段一起建立联合索引。  
4. DELETE FROM table 时,InnoDB 不会重新建立表,而是一行一行的删除。  
5. LOAD TABLE FROM MASTER 操作对 InnoDB 是不起作用的,解决方法是首先把 InnoDB 表改成 MyISAM  
表,导入数据后再改成 InnoDB 表,但是对于使用的额外的 InnoDB 特性(例如外键)的表不适用。

范式与索引

第一范式:1NF 是对属性的原子性约束,要求属性具有原子性,不可再分解;
第二范式:2NF 是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
第三范式:3NF 是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字
段没有冗余.
普通索引:最基本的索引,没有任何限制
唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。
主键索引:它 是一种特殊的唯一索引,不允许有空值。
全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。
组合索引:为了更多的ᨀ高 mysql 效率可建立组合索引,遵循”最左前缀“原则。
MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域
的值,然后以 data 域的值为地址,读取相应数据记录。在 MyISAM 中,主索引和辅助索引(Secondary key)
在结构上没有任何区别,只是主索引要求 key 是唯一的,而辅助索引的 key 可以重复。
InnoDB 的数据文件本身就是索引文件。InnoDB 的辅助索引 data 域存储相应记录主键的值而不是地址。
聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助
索引获得主键,然后用主键到主索引中检索获得记录。

sql注入与解决

所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单ᨀ交或输入域名或页面请求的查询字符串,最终达到
欺骗服务器执行恶意的 SQL 命令。具体来说,它是利用现有应用程序,将(恶意)的 SQL 命令注入到后台
数据库引擎执行的能力,它可以通过在 Web 表单中输入(恶意)SQL 语句得到一个存在安全漏洞的网站上
的数据库,而不是按照设计者意图去执行 SQL 语句。比如先前的很多影视网站泄露 VIP 会员密码大多就是
通过 WEB 表单递交查询字符暴出的,这类表单特别容易受到 SQL 注入式攻击.
防护
归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装 sql,可以使用参数化的 sql 或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者 hash 掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的ᨀ示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql 注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用 sql 注入检测工具 jsky,网站
平台就有亿思网站安全平台检测工具。MDCSOFT SCAN 等。采用 MDCSOFT-IPS 可以有效的防御 SQL 注入,XSS
攻击等。

git 常用操作

创建分支 $ git branch 分支名
推送到远程 $ git push origin 分支名
git 如何回退版本
git reset -hard

时间操作

date('Y-m-d H:i:s',strtotime('-1 day',time()));  //昨天

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
Luson
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~