php程序员面试必知基础知识

毕业后一直待到现在的公司,一个地方待久了,容易进入舒适区,看不到自己的不足,斗志也会被消磨。所以,最近闲来无事,趁着晚上的工夫出去面试了几家公司。还别说,事实表明,我对php的一些基础知识理解不深入,掌握不牢靠,也可以说是在开发过程中没有意识到去掌握这些知识。
在这里,我就把自己整理的认为一些比较重要的问题分享到这里,希望对各位同学有帮助。如果有新货的话,我会不定时更新的吆~~~

php

1.服务器信息获取

uri:$_SERVER['REQUEST_URI']
ip:$_SERVER['REMOTE_ADDR']

2.fast-cgi,cgi,php-fpm

cgi:通用网关接口,httpserver在接收到请求后,会把请求分发给php解释器,请求处理结束后,php解释器将数据返回给httpserver,由server将结果返回给用户。其中cgi规定了传递的数据和格式。普通的cgi在请求过来时,会重新fork一个新进程,先根据php.ini文件加载环境,处理完成后结束运行。
fast-cgi:起一个主进程,预先解析配置文件,加载执行环境环境,然后fork多个进程。请求过来后分发给worker进程,可根据情况起不同数量的worker等待。
php-fpm:实现了fast-cgi协议的程序,可以对fast-cgi进程进行管理

3.php数组实现,哈希表

通过hash表实现,hash值冲突解决方案是链表

4.php的规范
psr-0 自动加载
psr-1 基础编码标准
psr-2 代码风格
psr-3 日志接口
psr-4 psr-0自动加载补充

5.smarty模板引擎为例,如何渲染模板

把模板文件中的自定义标签替换为php代码,编译成编译文件
第二次请求时,如果原文件没有修改(通过判断更改时间的变化),直接访问编译文件。
可以启用缓存,启用缓存后,判断缓存是否过期,如果过期,重新编译。

filectime 文件inode修改日期
filemtime 文件上次修改日期
fileatime 上次访问日期

6.restful
GET 获取数据
POST 修改数据
PUT 上传数据
DELETE 删除数据
OPTIONS特定资源支持的请求方法
HEAD GET类似,不用返回响应体
TRACE 测试

二 mysql

1.mysql的sql语句优化

优化嵌套查询
优化使用索引:
or语句的每个条件都加索引
使用use index或force index,指定使用某个索引

子查询和join的区别
子查询需要把内层查询的结果作为外层查询的条件,它会先把内层查询的结果保存到临时表,查询结束后销毁临时表。比join查询多了临时表的创建和删除操作。

2.mysql索引
聚簇索引:数据和索引在同一个文件,innodb
非聚簇索引:数据和索引在不同的文件,myisam,多了一次对数据读取的i/o,效率较低。

主键使用b-tree索引

b-tree和hash区别
索引文件较大,一般不加载到内存中,而是存储到磁盘上。而磁盘的i/o会显著影响速度,所以,查询尽量减少磁盘的i/o操作。
b-tree:对于排序,区间查询友好。
hash的问题:1)只能应用到= != in操作中 2)对于排序操作无法优化 3)在多个值产生同一个hash值时,因为要多次i/o操作,查询效率会变低。

三 前端

1.html
2.css
3.javascript选择器

四 nginx服务器

1.css js font等资源文件的加载

2.负载均衡实现

proxy pass http://serverhost/
轮询
upstream serverhost {
    server 1111;
    server 2222;
}

按权重
upstream serverhost{
    server 1111 weight 30;
    server 2222 weight 70;
}

ip hash:可解决session问题
upstream serverhost{
    ip_hash;
    server 1111;
    server 2222;
}

fair:第3mod
upstream serverhost{
    server 1111;
    server 2222;
    fair;
}

url_hash:第3mod
upstream serverhost{
    server 1111;
    server 2222;
    hash $request_uri;
    hash_method crc32; 
}

你可能感兴趣的:(PHP)