常规面试题

网络协议问题

  • 什么是HTTP?

是超文本传输协议,是一种实现客户端和服务器之间通信的响应协议,它是用作客户端和服务器之间的请求

  • Http与Https的区别:
  1. HTTP 是不安全的,而 HTTPS 是安全的
  2. HTTP 标准端口是80 ,而 HTTPS 的标准端口是443
  3. 在OSI 网络模型中,HTTP工作于应用层,而HTTPS 的安全传输机制工作在传输层
  4. HTTP 无法加密,而HTTPS 对传输的数据进行加密,防止被劫持以及被嗅探
  5. HTTP 无需证书,而HTTPS 需要CA机构wosign的颁发的SSL证书
  • HTTPS工作原理:

一、首先HTTP请求服务端生成证书,证书的公钥(RSA加密)等进行校验;
二、客户端校验通过后, 生成随机数,随机数使用公钥进行加密(RSA加密);
三、消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
四、发送给服务端,此时只有服务端(RSA私钥)能解密。
五、解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。

  • 常见的HTTP相应状态码:

200:请求被正常处理
204:请求被受理但没有资源可以返回
301:永久性重定向
302:临时重定向
400:请求报文语法有误,服务器无法识别
401:请求需要认证(token)
403:请求的对应资源禁止被访问
404:服务器无法找到对应资源
500:服务器内部错误
503:服务器正忙或宕机

  • 什么是Http协议无状态协议?怎么解决Http协议无状态协议?
  1. 当客户端一次HTTP请求完成以后,客户端再发送一次HTTP请求,HTTP并不知道上一次的请求状态
  2. 解决:使用Cookie来储存状态,第一次访问的时候给客户端发送一个Cookie,当客户端再次来的时候,拿着Cookie(通行证),那么服务器就知道这个请求的上一次状态。
  • 常用的HTTP方法有哪些?

GET: 从服务器获得资源
POST:客户端向服务器安全提交资源
PUT: 修改服务器指定相关资源
HEAD: 只从服务器获取报文首部
DELETE:删除服务器相关资源
OPTIONS:用来描述目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略

  • GET和POST的区别【详细解说】:

GET 和 POST 只是 HTTP 协议中两种请求方式,而 HTTP 协议是基于 TCP/IP 的应用层协议,无论 GET 还是 POST,用的都是同一个传输层协议,所以在传输上,没有区别。

  1. GET在浏览器点后退按钮是无害的,而POST会再次提交请求
  2. GET是铭文传输参数,容易暴露数据,POST放在body里传输安全
  3. GET提交的数据有限1024字节,POST没有此限制
  4. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  5. GET产生一个TCP数据包;POST产生两个TCP数据包
    GET:浏览器会把http header和data一并发送出去
    POST:浏览器先发送header,服务器响应100 continue,浏览器再发送data(Firefox只发一次)
  • put 和 post 的区别:

PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

PHP专业问题

  • 什么是面向对象?主要特征是什么?

面向对象是程序的一种设计方式,主要特征:封装、继承、多态。

  • SESSION 与 COOKIE的区别是什么?
区别 COOKIE SESSION
存放位置 存在客户端 存在服务端
有效期 长期有效 依赖于cookie,关闭窗口该session就会失效
服务器压力 cookie保管在客户端,不占用服务器资源 session是保管在服务器端的,每个用户都会产生一个session,耗费内存
跨域支持 支持跨域名访问 不支持跨域名访问
  • MyISAM和 InnoDB 的区别?
区别 MyISAM InnoDB
存储结构 存储成三个文件 1.表的定义 2.存放数据 3.存放表索引 同一个数据文件中
存储空间 存储空间较小 需要很多的内存和存储
事务支持 不支持 支持
表锁差异 只支持表级锁 支持表锁、行锁
全文索引 支持 FULLTEXT类型的全文索引 不支持FULLTEXT类型的全文索引
  • redis和memcahe的区别?
区别 memcahe redis
数据类型 只有K-V类型少,但能缓存图片/视频 类型多,不能缓存图片/视频:支持String、Hash、List、Set等
存储结构 存储成三个文件 1.表的定义 2.存放数据 3.存放表索引 同一个数据文件中
存储空间 存储空间较小 需要很多的内存和存储
事务支持 不支持 支持
表锁差异 只支持表级锁 支持表锁、行锁
全文索引 支持 FULLTEXT类型的全文索引 不支持FULLTEXT类型的全文索引
  • isset() 和 empty() 区别?

isset用于检测变量是否设置,只有两种情况返回false,变量未设置和变量的类型为null。
empty用于检测变量是否为空,对于0、null、空字符串、空数组均返回false。

  • include和require的区别是什么?

include在引入不存文件时产生一个警告且脚本还会继续执行
require则会导致一个致命性错误且脚本停止执行
引入文件时,include有返回值,而require没有

  • echo、print_r、print、var_dump区别?

echo:可以一次输出多个值,echo是语言结构,而并不是真正的函数
print:打印一个值,如果字符串成功显示则返回true,否则返回false。
print_r:能打印出复杂类型变量的值,按照一定格式显示键和元素
var_dump:判断一个变量的类型与长度,并输出变量的数值,如果变量有值,输出的是变量的值,并还可以返回数据类型

  • 了解常见的web攻击? 怎么防护?

sql注入原理:就是通过把SQL命令插入到Web表单递交
用PDO预处理占位符sql形式解决。
Xss攻击指的是攻击者往Web页面里插入恶意html标签或者javascript代码,
首先代码里对用户输入的地方和变量都需要仔细检查长度,字符做过滤

  • 什么是 CSRF 攻击 ?XSS 攻击?如何防范?
CSRF攻击原理.png

CSRF(跨站请求伪造)防护措施:

  1. 加Token验证,攻击只会带Cookie不会携带Token
  2. 网址来源验证,判断网站是哪个网址跳转过来

XSS(跨域脚本攻击):
类似于sql注入,只不过注入的是script脚本,最容易下手的就是评论区。

  • 都会哪些设计模式?
  1. 单例设计模式(单态设计模式)
  2. 外观设计模式: Laravel中的门面,使用一个静态方法去访问注册到容器里的类
  3. 观察者设计模式(Observer): 监听一个表的数据库操作来进行相应的操作,通过服务提供者绑定Model类实现
  4. 工厂设计模式: 提供获取某个对象实例的一个接口,同时使调用代码避免实例化基类的步骤
    eg: 支付interface类 -> 包含支付宝类、微信类、某支付类等
  5. 装饰器模式 laravel-china
  • 单例设计模式:(单态设计模式)原理 ?

在当前脚本中只产生一个该类对象,在相同脚本中一个类只能有一个实例化对象

  1. 阻止在类的外部实例化对象->将构造方法私有化->用 private
  2. 在类的内部创建一个方法 实例化对象->在类里声明静态方法实例化自己对象
  3. 把创建的对象存入一个位置作为依据去判断是否创建了对象->
    声明静态属性 存储对象,并且在静态方法中判断这个静态属性是否存在
  • 什么是锁?

数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。

  • 索引有哪些?分别作用?和它的优点缺点是什么?

主键索引、唯一索引(unique)、普通索引(index)、全文索引(full textl)
优点:索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索,并且通过创建唯一索引,可以保证表中每一行数据的唯一性。
缺点:索引需要占物理空间,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

一、事务的基本要素(ACID)

1、原子性(Atomicity):
    事务开始后所有操作,要么全部做完,要么全部不做,事务执行过程中出错,
    会回滚到事务开始前的状态。
2、一致性(Consistency):
    事务开始前和结束后,数据库的完整性约束没有被破坏 。
    比如A向B转账,不可能A扣了钱,B却没收到。
3、隔离性(Isolation):
    同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。
    比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
4、持久性(Durability):
    事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

二、事务的并发问题

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,
    对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,
    但是系统管理员B就在这个时候插入了一条具体分数的记录,
    当系统管理员A改结束后发现还有一条记录没有改过来,
    就好像发生了幻觉一样,这就叫幻读。
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,
幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,
解决幻读需要锁表

三、MySQL事务隔离级别

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted) √ 可以 √ 可以 √ 可以
不可重复读(read-committed) 不可以 √ 可以 √ 可以
可重复读(repeatable-read)默认 不可以 不可以 √ 可以
串行化(serializable) 不可以 不可以 不可以

做题算法

  • 冒泡排序
$arr = array(42, 2, 13, 34, 56, 23, 67, 365, 87665, 54, 68, 3);
$count = count($arr);

// 外层控制排序轮次
for ($i = 0; $i < $count - 1; $i++) {
    // 内层控制每轮比较次数 (N为数组长度:排序 N-1 轮,每 i 轮 要比较 N-i 次)
    for ($j = 0; $j < $count - 1 - $i; $j++) {
        if ($arr[$j] > $arr[$j + 1]) {
            // 先把前面的空‘腾出来’
            $temp = $arr[$j];        // 取出当前比对值
            $arr[$j] = $arr[$j + 1]; // 取出被比对值放入比对值位置
            $arr[$j + 1] = $temp;    // 放入比对值到被比对值位置
        }
    }
}
  • 快速排序
public function quick_sort($arr)
{
    // 判断是否需要运行,因下面已拿出一个中间值,这里<=1
    if (count($arr) <= 1) {
        return $arr;
    }

    $middle = $arr[0]; // 中间值

    $left = array();  // 接收小于中间值
    $right = array(); // 接收大于中间值

    // 循环比较
    for ($i = 1; $i < count($arr); $i++) {
        if ($middle < $arr[$i]) {
            // 大于中间值
            $right[] = $arr[$i];
        } else {
            // 小于中间值
            $left[] = $arr[$i];
        }
    }

    // 递归排序划分好的2边
    $left = $this->quick_sort($left);
    $right = $this->quick_sort($right);

    // 合并排序后的数据,别忘了合并中间值
    return array_merge($left, array($middle), $right);
}
  • 楼梯法则
  • 无限极分类 详解
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容