面试

  • 问项目的具体内容,遇到的挑战,具体解决办法。
    为什么使用独立文件服务器?
    1,从服务器本身来说,单台的话会加大机器IO负载,多台( 负载均衡 )的话涉及到文件同步的问题
    2,浏览器对一个域名下的并发是有数量限制的,独立域名的文件服务器会加快响应
    3,防止域名污染,请求图片的时候是不用带上cookie

  • memcache与redis的区别,redis的优势之处。怎样解决memcache命中率低的问题,问了在实际项目中memcache命中率。
    redis丰富的数据结构,支持持久化,支持同步。提供命中率一般都是把数据细粒度化,分级组合缓存。
    memcache命中率查看:telnet连接上去 执行status命令 get_hits/cmd_get * 100%
    https://yq.aliyun.com/articles/48955

  • svn与git 的区别,让说具体的工作流程,使用git 的好处,以及怎样处理冲突,基本的命令写了两个。
    最核心的区别Git是分布式的,而Svn不是分布的

  • 数据库的存储引擎,myisam与innodb的区别,说出除了这两种外的其他存储引擎。
    区别:索引,事务,结构
    tokuDB,memory等

  • int 与bigint的区别,实际使用的时候主键选择哪个?int(10)与int(11)的区别,varchar与char的区别
    长度不一样,看情况数据多久使用bigint。 int(10) / int(11) 后面这个括号里的数字是显示长度,不会影响到存储,有zerofill的时候才有区别。varchar是变长 char是定长。

  • 数据库设计,用户表与登录表分开的好处,
    冷热数据分开,提高速度因为活跃用户只是总用户的一小部分,

  • session与cookie的区别
    分布式怎样解决session共享问题存储在独立的共享空间中(mysql,redis,memcache)

  • get与post的区别
    GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有Cache-ControlHeader的约束),GET方法的报文主体没有任何语义。POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。为了针对其不可缓存性,有一系列的方法来进行优化,以后有机会再研究(FLAG已经立起)。

  • php autoload机制
    调用不存在的类的时候自动调用该函数,该函数内部实现通过类名(参数)查找类文件的方法
  • 三次握手与四次挥手的过程(主要是画图),各个参数的含义
    SYN SYN+ACK ACK
  • http与https的区别,https怎样保准安全(结合ssl)
    [http://www.jianshu.com/p/b894a7e1c779]
    [http://wetest.qq.com/lab/view/110.html]
    [http://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/]
  • 链表的结构体(线性和链式),插入一个元素的操作代码(纸上写)

  • 排序部分,时间复杂度,写出一个排序算法。

    冒泡排序

    ​ 思想:两两比较相邻记录的关键字,反序则交换,直到没有反序为止。

    ​ 分析:最好的情况比较n-1次,时间复杂度O(n);最坏的情况比较n(n-1)/2次,时间复杂度O(n2)

    选择排序

    ​ 思想:每趟在n-i+1次比较里,选择关键字最小的记录与第i个记录交换。

    ​ 分析:比较次数,最好最坏都是n(n-1)/2次;交换次数,最好0次,最坏n-1次,综合起来时间复杂度是O(n2)。性能比冒泡好一点。

    插入排序

    ​ 思想:将一个记录插入到已经排好序的有序表中,表记录数加1。

    ​ 分析:如果记录顺序是随机的,平均比较和移动的次数为n2/4,时间复杂度是O(n2)。性能比冒泡和选择要好一点。

  • 二分查找的思想,时间复杂度

    总共有n个元素,渐渐跟下去就是n,n/2,n/4,….n/2^k ,其中k就是循环的次数由于你n/2^k取整后>=1

    即令n/2^k=1可得k=log2n,(是以2为底,n的对数)所以时间复杂度可以表示O()=O(logn)

  • apache与ngiax的区别
    nginx性能高,这得益于Nginx使用了最新的epoll(Linux2.6内核)和kqueue(freebsd)网络I/O模型,而Apache则使用的是传统的select模型。目前Linux下能够承受高并发访问的Squid、Memcached都采用的是epoll网络I/O模型。
    apache基于进程,nginx基于线程

  • 有一个ip日志文件每行一个ip,统计某一个ip出现的次数
    cat file |grep ip |wc -l

  • mysql的索引是那种数据结构,为什么使用这种数据结构。
    B+树
    B树的各种操作能使B树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率
    http://blog.codinglabs.org/articles/theory-of-mysql-index.html

  • 设计一个数据表,用来存储url信息,此表会经常发生插入删除操作,应用场景是查找某个url是否存在,请写出表结构,并加说明。
    id url md5
    md5列加索引,url长度普遍偏长,域名重复度高,前缀索引在这种场景下不太好,使用MD5 char 固定长度索引

  • 比较单词a 和 b判断b单词的字母是否都在a中。

1
2
3
4
5
6
7
8
9
10
$a = 'abc';
$b = 'defc';

$arr = str_split($a . $b);

if (count($arr) != count(array_unique($arr))) {
echo 'repeat';
} else {
echo 'no repeat';
}
  • 写一个timer类,用来统计应用程序的运行时间,并写出调用方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class timer {
private $checkPoint = [];
public function __construct() {
$this->checkPoint[] = time();
}
public function check() {
$this->checkPoint[] = time();
}
public function show() {
foreach ($this->checkPoint as &$item) {
echo $item . PHP_EOL;
}
}
}
$time = new timer();
sleep(2);
$time->check();
sleep(4);
$time->check();
sleep(3);
$time->show();
  • 新浪微博一年产生的数据量是多少,应该怎么存储这些数据。
    历史数据归档, 使用压缩比高的引擎比如tokudb
  • 状态吗:204,304,404的含义,可以参考(http://tool.oschina.net/commons?type=5)
  • 介绍你了解的开源项目
  • 索引的最左原则,可以参考(http://blog.csdn.net/shangxiaoxue/article/details/7514187)
    针对联合索引的
  • 浏览器输入url到页面呈现,经过的过程, 和用到的协议

  • mc 与 redis的区别,内存管理方面。
    http://www.voidcn.com/article/p-nletigkh-yx.html
    都是提前申请一大块内存,mc是把这块内存切成大小不一的块(通过增长因子),会有内存浪费,但是存取快
    redis是把这块内存的大小存在内存开始处,通过指针操作
    微博中reids的应用场景,redis的内存分配机制,为什么使用redis不适用MC,mc与redis的并发哪个较高
    mc并发高,它是多线程的

  • array_map() 的使用场景,array_merge(),合并数组之后的键名变换情况
    array_map() 为数组每一个元素应用回调函数
    array_merge() 数字键不会覆盖 字符串键会覆盖
  • php几个编码函数区别(json_encode, http_build_query, urlencode等区别)
    json_encode 把数组转成json
    http_build_query 数组转查询字符串
    urlencode url编码 -_.之外的都转换为%加连个数字空格转+号
  • 正则表达式中 . * + / ? 的含义

    1
    2
    3
    4
    5
    ? 0 个或1个
    * 表示0到多个
    + 表示1到多个
    . 匹配除换行符外的所有单个的字符
    / 定界
  • 给定一个数字,2进制转换成16进制
    http://www.cnblogs.com/gaizai/p/4233780.html#_labelConvert33

  • 打印前一天的日期时间格式:2016.03.18 10:15:12,打印上个月的最后一天的日期

    1
    2
    3
    4
    5
    6
    7
    function getPrevMonthFirstDay($date) { 
    return date('Y-m-d', strtotime(date('Y-m-01', $date) . ' -1 month'));
    }

    function getPrevMonthLastDay($date) {
    return date('Y-m-d', strtotime(date('Y-m-01', $date) . ' -1 day'));
    }
  • PHP发送请求的方法,有什么不同点
    curl file_get_content
    curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP,也就是说,它能做到很多file_get_content做不到的事情。curl在php可以实现远程获取和采集内容;实现PHP网页版的FTP上传下载;实现模拟登陆;实现接口对接(API),数据传输;实现模拟Cookie;下载文件断点续传等等,功能十分强大。
    首先需要在php.ini中开启该功能,即去掉 ;extension= php_curl.dll 前面的分号

  • 写出10个mysql 的字段类型,说明使用场景

  • 一个数据表,70个字段,10G的数据量,每天50w的数据增量,说出有哪些优化的方法
    拆字段
    10天一分区 或者 分表

  • 写一个定时任务,每天2点到8点,每隔10分钟调用一次PHP脚本

    1
    */10 2-8 * * * /data/www/test.php
  • 使用正则表达式判断ip的合法性,要考虑全面

  • redis中数据存储方式,各种数据结构应用的场景,redis做消息队列与专业的消息队列有什么区别和优势
    redis队列是轻量级的队列,不支持消息持久化

  • 你对GO语言的理解,速度快吗?快在哪?

  • 抓取 a.html页面,把含有a便签中的href全部抓取,如果url含有guazi.com就把该条url标题上guazi,然后再抓取该链接对应的页面,这样不断的遵化你抓取,你怎样解决死循环问题和页面抓取效率问题

  • 一个日志文件,打印某一时刻的并发数(记录日志的条数)

  • 一个数组按照固定的值排序(按照id排序)

    1
    2
    3
    4
    $a = [
      ['abc'] => ['id' => 1, 'value' => 233],
      ['bcd'] => ['id' => 2, 'value' => 463]
    ]
  • 数据库索引建立的原则

  • 打印日志文件中,出现最多的前100个IP

  • php 和其他语言不同的地方,PHP中弱类型的实现

  • C语言中结构体和共用体的区别,每个占用做少内存(二者已给出)

  • 有没有自己写的一些作品,或者开源的东西

  • 秒杀怎么设计,注意点是什么

  • 有没有学习新的东西,比如新的技术,语言

  • 介绍一个最深刻的项目,说出技术点

  • coding:一个数组 0 - n-1,已经排好序,打印出满足 a[i]+a[j] = c 的所有i和j,说出时间复杂度

  • 以后有什么打算,学习的目标或者是自己的规划目标

  • 写一个类,一个单例类,输入两个数组,$arr1, $arr2,每个数组中存有整数(0-9),这个类提供两个方法,一个是排序$arr1,一个是把两个数组当成两个大数然后进行相减,返回结果(第一个数组如果是[5, 2, 3, 4] ,相当于数字:5234)

  • 数据库中两个笛卡尔积在join中的体现,说出left join的中间过程
  • 网站打开慢的原因和解决办法
  • 讲解项目的架构,redis在项目中的使用情况

  • 数据库事务原理,是否使用过

  • 数据库优化,索引建立原则

  • 数据库事务的含义

  • 框架使用,优缺点
  • 是否使用过前端框架,js,jquery是否学习过

  • 给两个数组得到交集,各自的差集

  • 给两张表,得到各自的交集和差集

  • 数据库索引的字段,哪些会用到索引,该怎样查看。
  • PHP短标签,怎样开启。结束标签有什么影响
    因为php只能运行在php标签里面的脚本,在脚本之外的所有字符,包括你看不见的空格或者回车,制表符号
    都是作为输出内容会response到客户端的。这样就有可能会产生意想不到的事情。比如说joyqi说的问题,
    不过这个还好问题不是很大,但是假如你在一个文件里面使用了header函数,这个文件同时又包含了另外一个文件
    并且被包含的文件的php标签外有空字符,这个时候会报header already send的错误。
  • div 怎样实现三栏式布局
  • php 各个框架的应用,php的安全相关
  • 数据库的优化,怎样保证大数据量的数据库访问正常
  • 数据库集群的特点和数据同步的机制
  • 什么是响应式设计
    自适应不同屏幕大小。应用 CSS3 的媒体查询(Media Queries),创建一个包含适应各种设备尺寸样式的
    CSS。一旦页面在特定的设备上加载,此时,会先检测设备的视口大小,然后加载特定于设备的样式。即为不同的媒体类型设
    定专有的样式表。
  • js闭包是什么?
    闭包就是能够读取其他函数内部变量的函数。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function f1(){
        var n=999;
        function f2(){
          alert(n);
        }
        return f2;
      }
      var result=f1();
      result(); // 999
      
      一个是前面提到的可以读取函数内部的变量
      另一个就是让这些变量的值始终保持在内存中。
  • mysql与mysqli的区别有哪些?
    mysql扩展是最早的一套面向过程的api,支持功能相对比较少
    mysqli 是mysql的增强版,支持面向对象,各种新特性
    pdo是数据驱动层,把数据层和应用层隔离开

  • php多态是什么?
    多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为。
    http://www.qttc.net/201208172.html

  • http状态码:200、202、301、404、500
    网上一查一堆
  • memcache与mongoDB、Redis各自的使用场景是什么?
    参考: https://segmentfault.com/q/1010000002588088/a-1020000002589415
    memcache多线程,数据结构简单,适合扛量,数据不可以持久化,不可以同步
    redis单线程,数据结构丰富,支持持久化,同步
    mongodb文档类型存储,适合存储集合类型的数据,如文章评论

  • 1条微薄要推送给100万个粉丝该怎么处理?
    写队列中,根据数量(100万)动态调整消费者

  • 假设给你5台机器,请大致的描述一下,如何使用你所熟悉的开源软件,搭建一个日PV 3万左右的中型网站
    前面2台nginx 中间一个cache 后面一主一从mysql
  • 说说你所了解的搜索引擎包含那些技术?
    爬虫(采集)、切词(分词)、索引(存储)、查询以及其他相关技术
    
  • 使用过Memcache缓存吗,如果使用过,能够简单的描述一下它的工作原理吗?
    Memcahce是把所有的数据保存在内存当中,采用hash表的方式,
    每条数据又key和value组成,每个key是独一无二的,当要访问某个值的时候先按照找到值,然后返回结果。
    Memcahce采用LRU算法来逐渐把过期数据清除掉。
    
  • 原型链了不了解?
    http://www.cnblogs.com/shuiyi/p/5305435.html
  • for与foreach哪个更快?
    foreach是通过GetEnumerator获得一个IEnumerator对象,通过IEnumerator对象执行MoveNext()方法和获取Current属性进行遍历的。
    由于Enumerator中,做了版本检查处理的工作,所以使用foreach是线程安全
    在一些全局的,多线程可以访问的数据结构对象,使用foreach。而对本地变量,则使用for,效率和安全兼顾!
    发现对于10W级以上的数组,foreach效率会更高,但对于1W级的数组,还是for效率高

  • 表设计三大范式
    1.第一范式(确保每列保持原子性)

    所有字段值都是不可分解的原子值
    

    2.第二范式(确保表中的每列都和主键相关)

    也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
    

    3.第三范式(确保每列都和主键列直接相关,而不是间接相关)

    每一列数据都和主键直接相关,而不能间接相关。
    
  • 数据库设计经验,为什么进行分表? 分库?一般多少数据量开始分表? 分库? 分库分表的目的? 什么是数据库垂直拆分? 水平拆分? 分区等等?可以举例说明
    随着数据量增大首先考虑的是分库,按业务把相关模块的表放到一个库中。
    数据再大的时候就需要考虑分表(横向,纵向)
    分区主要是用于时间顺序明显的场景,比如日志

  • web开发方面会遇到哪些缓存? 分别如何优化?
    文件缓存,内存缓存,对象缓存

  • 给你256M的内存,对10G的文件进行排序(文件每行1个数字),如何实现?对10G的文件进行查找如何实现?统计10G文件每个关键字出现的次数如何实现?

  • 考察大文件处理 就是文件一下load到内存肯定不行 方法也就是分段读,具体实现也就是下面2中方法,没发现其他方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    方法一:生成器
    function getRows($file) {
    $handle = fopen($file, 'rb');
    if ($handle === false) {
    throw new Exception();
    }
    //feof()函数检测是否到达文件末尾
    while (feof($handle) === false) {
    //fgetcsv()一次读取csv文件的一行
    yield fgetcsv($handle);
    }
    fclose($handle)
    }

    foreach (getRows('data.csv') as $row) {
    print_r($row);
    }
    方法二:文件指针

从你的经验方面谈一下如何构建高性能web站点? 需要哪些环节? 步骤? 每个步骤需要注意什么如何优化等?
同上,具体场景具体分析。

  • 为什么要对数据库进行主从分离?
    因为顺序读写比随机读写快
  • 如何处理多服务器共享session?

  • 存储session到memcache、redis中

  • 一个10G的表,你用php程序统计某个字段出现的次数,思路是?
  • 表指的是文件的话参考上面的生成器做法
  • 表指的是数据库里的表的话 加上索引 一条SQL没啥问题

  • 会告诉你一个nginx日志例子,用你认为最佳的编程语言统计一下http响应时间超过1秒的前10个url?

  • 给你两个路径a和b,写一个算法或思路计算a和b差距几层并显示a和b的交集?

  • 给你一个url,在nginx配置一下rewrite指定到某个具体路径?

  • 一个php文件的解释过程是? 一般加速php有哪些? 提高php整体性能会用到哪些技术?

  • session和cookie生存周期区别? 存储位置区别?
    session存储在服务器位置上,可以通过php.ini里面配置session相关配置
    cookie存储在客户端上的上(其实可以分两种:
    1,持久性cookie,设置了cookie的时间,以文件方式存在硬盘上,
    2,会话cookie,没有设置cookie时间,cookie的生命周期也就是关闭浏览器前就消失,一般不会保存在硬盘,而是保存在内存上)

  • require、include、require_once、include_once区别? 加载区别? 如果程序按需加载某个php文件你如何实现?
    包含的文件有错误
    include()会产生一个警告,
    require()则导致一个致命的错误(出现错误,脚本停止执行)
    对include()语句来说,在执行文件时每次都要进行读取和评估;
    include 产生一个 warning ,而 require 直接产生错误中断;
    require 在运行前载入;
    include 在运行时载入;
    require_once 和 include_once 可以避免重复包含同一文件。

  • chrome号称为多线程的,所以多线程和多进程的区别为?
    进程是资源分配最小单位
    线程是cpu调度最下单位
    同一进程下的线程共享内存数据

  • php在2011年底出现hash碰撞,hash碰撞原理为? 如何进行修复?
    http://blog.codinglabs.org/articles/hash-collisions-attack-on-php.html

  • php是用单链表解决hash冲突的
    原理: 哈希表碰撞攻击就是通过精心构造数据,使得所有数据全部碰撞,人为将哈希表变成一个退化的单链表,此时哈希表各种操作的时间均提升了一个数量级,因此会消耗大量CPU资源,导致系统无法快速响应请求,从而达到拒绝服务攻击(DoS)的目的。

  • POST攻击
    当然,一般情况下很难遇到攻击者可以直接修改PHP代码的情况,但是攻击者仍可以通过一些方法间接构造哈希表来进行攻击。例如PHP会将接收到的HTTP POST请求中的数据构造为POST,而这是一个Array,内部就是通过Zend HashTable表示,因此攻击者只要构造一个含有大量碰撞key的post请求,就可以达到攻击的目的。具体做法不再演示。
    POST攻击的防护
    针对POST方式的哈希碰撞攻击,目前PHP的防护措施是控制POST数据的数量。在>=PHP5.3.9的版本中增加了一个配置项max_input_vars,用于标识一次http请求最大接收的参数个数,默认为1000。因此PHP5.3.x的用户可以通过升级至5.3.9来避免哈希碰撞攻击。5.2.x的用户可以使用这个patch:http://www.laruence.com/2011/12/30/2440.html。
    另外的防护方法是在Web服务器层面进行处理,例如限制http请求body的大小和参数的数量等,这个是现在用的最多的临时处理方案。具体做法与不同Web服务器相关,不再详述。
    其它防护
    上面的防护方法只是限制POST数据的数量,而不能彻底解决这个问题。例如,如果某个POST字段是一个json数据类型,会被PHP json_decode,那么只要构造一个超大的json攻击数据照样可以达到攻击目的。理论上,只要PHP代码中某处构造Array的数据依赖于外部输入,则都可能造成这个问题,因此彻底的解决方案要从Zend底层HashTable的实现动手。一般来说有两种方式,一是限制每个桶链表的最长长度;二是使用其它数据结构如红黑树取代链表组织碰撞哈希(并不解决哈希碰撞,只是减轻攻击影响,将N个数据的操作时间从O(N^2)降至O(NlogN),代价是普通情况下接近O(1)的操作均变为O(logN))。

  • web不安全因素有哪些? 分别如何防范?
    https://zhuanlan.zhihu.com/p/28821512
    sql注入
    xss
    csrf

  • 假如两个单链表相交,写一个最优算法计算交点位置,说思路也可以?
    http://www.jianshu.com/p/9a953e4ad2cd
    相交:俩单列表都包含同一个节点(不是节点值相同),那么交点之后的值肯定也是一样的了
    单列表无环:

    如果两条单链表相交,则将链表B,连接到链表A后面,如图所示(上面的链表是A,下面的链表是B),会形成环路,且链表B的表头一定在环上。因此我们只需要从链表B开始遍历,如果可以回到链表B的头结点,则说明两条链表相交。
    时间复杂度:O(len(A)+len(B))
    单链表相交,意味着相交结点具有相同的内存地址,且相交结点后的所有结点是两个链表共有的。因此如果两个链表相交,则最后一个节点肯定是相同的,因此只需要判断两个链表的最优一个节点是否相同。
    时间复杂度: O(len(A)+len(B))
    
  • nginx负载均衡有哪些? 如果其中一台服务器挂掉,报警机制如何实现?

  • Nginx负载均衡有4种方案配置
    轮询 Round Robin,根据Nginx配置文件中的顺序,依次把客户端的Web请求分发到不同的后端服务器上
    最少连接 least_conn; Web请求会被转发到连接数最少的服务器上。
    IP地址哈希 ip_hash;
    基于权重 weight
    fair。这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块。
    url_hash。此方法按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。

  • 报警机制如何实现,实在不get不到考点,一般这种服务的原理就是俩机器之间有心跳检测,调度服务器收不到心跳就认为宕机就会被踢掉
    可以引入监控平台如zabbix,能更好的监控。

  • nginx设置缓存js、css、图片等信息,缓存的实现原理是?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    一:nginx作为源服务器
    location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
    expires 1M;
    access_log off;
    add_header Cache-Control "public";
    }
    请求直接打到源服务器,会通过配置产生如下的响应头
    HTTP/1.1 200 OK
    Server: nginx/1.4.6 (Ubuntu)
    Date: Fri, 05 Sep 2014 23:25:04 GMT
    Content-Type: text/css
    Last-Modified: Fri, 05 Sep 2014 22:46:39 GMT
    Expires: Sat, 05 Sep 2015 23:25:04 GMT
    Cache-Control: max-age=31536000 过期时间
    Cache-Control: public 谁都可以缓存

    二:nginx作为缓存服务器,在源服务器之前,类似于varnish,可以配置为单纯的转发,下面配置会解析源服务器响应并缓存
    proxy_cache_path /tmp/nginx levels=1:2 keys_zone=my_zone:10m inactive=60m;
    proxy_cache_key "$scheme$request_method$host$request_uri";

    server {
    # Note that it's listening on port 80
    listen 80 default_server;
    root /var/www/;
    index index.html index.htm;

    server_name example.com www.example.com;

    charset utf-8;

    location / {
    proxy_cache my_zone;
    add_header X-Proxy-Cache $upstream_cache_status;

    include proxy_params;
    proxy_pass http://172.17.0.18:9000;
    }
    }
  • 如何提高缓存命中率? 如何对缓存进行颗粒化?
    细粒度,分层

  • php的内存回收机制是?
    5.3是引用计数,之后对引用计数做了优化,算法没看懂网上也没找到将明白的文章
    1、并不是每次refcount减少时都进入回收周期,只有根缓冲区满额后在开始垃圾回收。
    2、可以解决循环引用问题。
    3、可以总将内存泄露保持在一个阈值以下。

  • memcache magent 分布式设计?

  • redis 分布式设计,如何设计?

  • mongo 集群架构是怎样的?

  • 闭包
    各种专业文献上的”闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函数内部变量的函数。
    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。
    所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
    闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

  • PHP的MySQL扩展
    设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口,
    并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数
    据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。

  • PHP的mysqli扩展
    mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。
    mysqli扩展在PHP 5及以后版本中包含。
    mysqli扩展有一系列的优势,相对于mysql扩展的提升主要有:
    面向对象接口
    prepared语句支持
    多语句执行支持
    事务支持
    增强的调试能力
    嵌入式服务支持

  • PHP数据对象(PDO)
    PHP数据对象,是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以
    使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,
    如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器

    实战

    百度
    1.TCP三次握手

    1
    2
    3
    4
    1.第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
    2.第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
    3.第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
    完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。

    2.设计模式
    3.DDOS攻击和防范
    4.php-fpm和fastcgi
    5.项目亮点以及优化
    腾讯
    1.二分查找
    2.项目框架
    3.高并发和高可用技术选型
    4.数组互换
    5.静态变量和局部静态变量
    6.数据库类型和索引结构

谢谢您请我喝咖啡!