毕业后一直待到现在的公司,一个地方待久了,容易进入舒适区,看不到自己的不足,斗志也会被消磨。所以,最近闲来无事,趁着晚上的工夫出去面试了几家公司。还别说,事实表明,我对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:第3方mod
upstream serverhost{
server 1111;
server 2222;
fair;
}
url_hash:第3方mod
upstream serverhost{
server 1111;
server 2222;
hash $request_uri;
hash_method crc32;
}