1.MYSQL中主键与唯一索引的区别

主键是一种约束,唯一索引是一种索引,两者在本质上是不同的
主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键
唯一性索引列允许空值,而主键列不允许为空值
主键列在创建时,已经默认为空值 + 唯一索引了
主键可以被其他表引用为外键,而唯一索引不能
一个表最多只能创建一个主键,但可以创建多个唯一索引
主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等
在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度

https://blog.csdn.net/baoqiangwang/article/details/4832814
2.获取当前客户端的IP地址,并判断是否在(1.1.1.1,255.255.255.254)

function getip()
{
    $unknown = 'unknown';
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    /*
    处理多层代理的情况
    或者使用正则方式:$ip = preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
    */
    if (false !== strpos($ip, ','))
        $ip = reset(explode(',', $ip));
    return $ip;
}

$client_ip = getip();
$client_ip = sprintf('%u', ip2long($client_ip));   //64位系统无压力

/**
 * plan A
 */
$range_min = sprintf('%u', ip2long('1.1.1.1'));
$range_max = sprintf('%u', ip2long('255.255.255.255'));

/**
 * plan B
 */
$range_min = bindec(decbin(ip2long('1.1.1.1')));
$range_max = bindec(decbin(ip2long('255.255.255.255')));


if ($client_ip >= $range_min and $client_ip <= $range_max) {
    echo 'true';
} else {
    echo 'false';
}

3.什么是CSRF攻击?XSS攻击?如何防范?
CSRF:https://baike.baidu.com/item/CSRF/2735433
防范方式: CSRF TOKEN, 即提交表单时同时提交一段由服务端渲染表单时生成的token,通过校验token来防范csrf攻击

XSS:https://baike.baidu.com/item/xss/917356
简单来说,XSS就是正常页面执行了用户或黑客提交的前端代码,比如你用了eval('这里执行了用户提交的代码'),
或者你的页面正常解析了用户提交的html代码,如用户提交的个人信息是:,
而你不加过滤转义就入库,然后页面正常解析html代码,最终用户访问这个页面就会跳转到恶意网站 ,这就是XSS
防范方式: 过滤&&转义用户输入(如htmlentities、htmlspecialchars),永久不要信任客户端

4.http与https的主要区别
个基于OSI模型理解:
http工作在应用层
https是建立在SSL信道上的http,而SSL属于OSI模型中的传输层,所以我觉得HTTPS是属于传输层的协议
但有同学提出了不同看法,相关讨论见:https://github.com/hookover/php-engineer-interview-questions/issues/7

所以如果是基于TCP/IP模型的话:HTTP和SSL都是工作在应用层,那么HTTP和HTTPS同属应用层协议

http是明文传输
https是加密传输

面试官会问到ssl数字证书,对称加密和非对称加密的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

https://baike.baidu.com/item/https

5.http状态码及其含意
基本记住200、201、301、302、400、403、404、500、502、503就差不太多了

6.优化MYSQL的方法
个人理解:
需要从整个项目环境来谈优化,具体可以分为3个方面:
硬件层面:

采用高配sass硬盘、上磁盘阵列

架构层面:

分库、分区、分表、主从(主主)、多服务器集群、vip+keepalive等   (可能会问到具体实现,所以在回答前要把这些实现细节搞得差不多懂)

应用层面(下面只要你提到,面试官都可能会问细节,比如有哪些存储引擎,各有什么区别和应用场景,innodb的主键索引和非主键索引有何区别,数据结构,叶子节点存放什么?)

存储引擎的选择
字段的选择
    越短越快
    定长类型快于变长类型
    整型的处理速度快于字符串类型
索引
   MYSQL支持的索引类型 (讲到这肯定会问你具体定义)
   索引的使用条件
   索引的实现结构
       聚簇索引(聚集索引),非聚集索引,B+Tree
       HASH索引
慢查询日志
    可帮助找到问题语句
通过explain来优化sql语句

7.数据库中的事务是什么?
事务的特征:ACID
原子性Atomicity 一组DML语句要么全部成功要么全部失败
一致性Consistency 事务必须由一个状态到另一个状态
隔离性Isolation 多个事务之间能够根据事务的隔离级别表现不同
持久性Durability 提交后的事务,一旦提交,它对数据库中的数据修改是永久性的

Q:当没有事务的情况会出现什么问题?
A:当在控制台,操作mysql数据库时候,如果没有事务控制,误操作就会造成数据的永久损失。
事务的隔离级别:

隔离级别 脏读 不可重复读 幻读 加锁读?
读未提交(Read uncommitted) o o o 不加锁
读已提交(Read committed) x o o 不加锁
可重复读(Repeatable read) x x o(mysql不会出现 x) 不加锁
可串行读(Serializable) x x x 加锁 (全表锁)
脏读:当某个客户端查询出了另外一个事务还没有提交的修改数据,即为脏读。
不可重复读:[同一查询]在[同一事务]中多次进行,由其它提交事务所做的修改或删除,每次返回不同的的结果集,此时发生非重复读。
幻读:[同一查询]在[同一事务]中多次进行,由于其它提交事务(事务可能没提交)所做的插入操作,每次返回不同的结果集,此时发生幻读
8.Ajax 跨域请求时,会出现什么问题?如何解决
9.设计一个微信红包的功能(从代码、服务器架构、数据库、性能等详细实现细节)
微信红包系统设计分享,如何扛住100亿次请求:http://www.woshipm.com/pd/232838.html
知乎有一些算法:https://www.zhihu.com/question/22625187
QA:https://www.zybuluo.com/yulin718/note/93148

注意:比如让你写两个接口,一个抢红包接口,一个发红包接口,让你设计整套的存储系统、代码实现,你怎么来做?

10.网页/应用访问慢突然变慢,如何定位问题?
top、iostat查看cpu、内存及io占用情况
内核、程序参数设置不合理 查看有没有报内核错误,连接数用户打开文件数这些有没有达到上限等等
链路本身慢 是否跨运营商、用户上下行带宽不够、dns解析慢、服务器内网广播风暴什么的
程序设计不合理 是否程序本身算法设计太差,数据库语句太过复杂或者刚上线了什么功能引起的
其它关联的程序引起的 如果要访问数据库,检查一下是否数据库访问慢
是否被攻击了 查看服务器是否被DDos了等等
硬件故障 这个一般直接服务器就挂了,而不是访问慢

11.Linux 硬链接和软链接有什么区别?
硬链接不可以跨分区,软件链可以跨分区
硬链接指向一个 i 节点,而软链接则是创建一个新的 i 节点
删除硬链接、软链接文件,对原文件都没有什么影响,但是如果删除原文件,会导致软连接失效,硬链接无影响。
12.TCP 三次握手的流程
客户端发送一个 SYN 标志位置 1 的包,指明客户端要连接服务器端的接口,发送完毕后,客户端进入 SYN_SEND 状态

服务器发回确认包 (ACK) 应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择自己 ISN 序列号,放到 Seq 域里,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进入 SYN_RCVD 状态。
客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对方,并且在数据段放写ISN的+1
发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态,TCP 握手结束。
13.Redis、Memecached 这两者有什么区别?
Redis 支持更加丰富的数据存储类型,String、Hash、List、Set 和 Sorted Set。Memcached 仅支持简单的 key-value 结构。
Memcached key-value存储比 Redis 采用 hash 结构来做 key-value 存储的内存利用率更高。
Redis 提供了事务的功能,可以保证一系列命令的原子性
Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中
Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis 在存储小数据时比 Memcached 性能更高。
14.冒泡排序或者快速排序算法
15.git Push 代码时发生突破如何处理?
1、使用 git stash 将本地文件暂存

2、更新代码 git pull

3、还原暂存的内容 git stash pop

标签: none

添加新评论