一、HTTP常见状态码
200:请求已完成
301:永久重定向
302:临时重定向
304:未修改
400:错误请求
401:未授权
403:已禁止
404:未找到
408:请求超时
500:服务器内部错误
502:网关错误
503:服务不可用
504:网关超时
505:HTTP版本不受支持
二、Restful的理解
restful就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息
Restful就是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制
URL定义:POST添加,创建、GET查询、DELETE删除、PUT修改,更新
三、如何防止表单重复提交
1、数据库添加唯一字段
在数据库建表的时候添加主键约束,账号,名称的信息添加唯一性约束,确保数据库只可以添加一条数据
注意:此方法最有效的防止了数据重复提交
2、用js为添加禁用
当用户提交表单之后,可以使用js将提交按钮隐藏(disable属性),防止用户多次点击按钮提交数据
注意:如果客户端禁止使用js,则此方法无效
四、写几个常用的PHP函数
array_column — 返回数组中指定的一列
array_pop — 将数组最后一个单元弹出(出栈)
array_push — 将一个或多个单元压入数组的末尾(入栈)
array_shift — 将数组开头的单元移出数组
array_unshift — 在数组开头插入一个或多个单元
array_chunk — 将一个数组分割成多个
array_merge — 合并一个或多个数组
array_diff — 计算数组的差集
array_intersect — 计算数组的交集
array_unique — 移除数组中重复的值
array_rand — 从数组中随机取出一个或多个单元
array_product — 计算数组中所有值的乘积
array_sum — 计算数组中所有值的和
array_count_values — 统计数组中所有的值出现的次数
array_slice — 从数组中取出一段
array_combine — 创建一个数组,用一个数组的值作为键名,另一个数组的值作为值
array_search — 在数组中搜索给定的值,如果成功则返回相应的键名
array_values — 返回数组中所有的值
array_keys — 返回数组中部分的或所有的键名
array_key_exists — 检查给定的键名或索引是否存在于数组中
array_flip 交换数组的键和值
is_array — 检测变量是否是数组
in_array — 检查数组中是否存在某个值
array_fill — 用给定的值填充数组
array_fill_keys — 使用指定的键和值填充数组
array_replace — 使用传递的数组替换第一个数组的元素
array_filter 用回调函数过滤数组中的单元
array_reverse 字符串反转
sort() - 以升序对数组排序
rsort() - 以降序对数组排序
五、写几个常用的字符串函数
strlen($str) — 返回字符串长度
mb_strlen($str) 可以返回中文字符长度;
strtolower($str) — 字母转小写
strtoupper($str) — 字母转大写
ucwords($str) — 将字符串中每个单词的首字母转换为大写
ucfirst($str) — 将字符串的首字母转大写
str_replace('a','b',$str) — 字符串替换 b替换$str 中的a 区分大小写 ;
str_ireplace('a','b',$str) — 字符串替换不区分大小写
trim($str)— 删除字符串左右的空白字符或其他预定义字符
ltrim($str) — 只删除字符串左侧的空白字符或其他预定义字符
rtrim($str) — 只删除字符串右侧的空白字符或其他预定义字符
strpos($str,'a’) — 查找字符串首次出现的位置,字符串a 在$str 第一次出现的位置 索引0开始 没有出现返回false 区分大小写
stripos($str,'a’) — 同上 但是不区分大小写
strrpos($str,'a’) — 查找字符串最后一次出现的位置,字符串a 在$str 最后一次出现的位置 索引0开始 没有出现返回false 区分大小写
strripos($str,'a’) — 同上 但是不区分大小写
substr($str,0,3) — 截取字符串 $str 的第一个字符 截取长度3 长度不填默认截取到最后 参数为负数则倒数 区分大小写
mb_substr — 截取字符串,不区分大小写
strstr($str,'a') — 查找字符串的首次出现,截取字符串 $str 中的第一个字符'a'后的字符串 如 sabc -> abc
stristr——查找字符串的首次出现,不区分大小写
strrchr($str,'a') — 截取字符串 $str 中最后一一个字符'a'后的字符串
strrev($str) — 字符串反转
substr_count — 计算一个字符串在另一个字符串中出现的次数
六、什么是面向对象
面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
1、面向对象三大特征
封装 继承 多态
2、面向对象优缺点
优点:易维护、易扩展、质量高、效率高
缺点:没有准确的定义、不适合所有的应用
3、面向对象编程好处
高内聚 低耦合
4、面向对象五大原则
单一职责原则、开放封闭原则、里氏替换原则、依赖倒置原则、接口分离原则
七、简述public、private、protected修饰符的访问权限
Public:类的公有成员,公开的,所有实例都可以访问
Private:类的私有成员,只有对应的类内部能够调用
Protected,类的保护成员,只有存在继承关系的可以访问,比如子类和父类
1、请写出php5的构造函数和析构函数
parent::__construct() parent::__destruct();
八、执行以下代码,输出结果是?
<?php
abstract class a{
function construct()
{
echo "a";
}
}
$a = new a();
?>
答案是报错,abstract修饰符可以用于类、方法、事件和索引指示器,表示其为抽象成员,抽象方法是没有方法体的方法.抽象成员、即抽象类、抽象方法、抽象事件
九、写一个无限级分类
实现这种无限级分类,我们只需要在字段中增加一个pid,用于记录父类的id,这时候我们就可以采用递归的方式得到最终的结果,这里面有两种处理方式,一种是得到一个二维数组,一种是得到一个多维数组
十、写一个函数,传入信息写入当天的日志文件(路径自定义),文件不存在则新建
file_get_contents:将整个文件读入一个字符串
file_put_contents:将一个字符串写入文件
十一、Innodb和Myisam有什么区别?
InnoDB支持事务,MyIsam不支持事务
InnoDB支持外键,MyIsam不支持外键
InnoDB是聚簇索引,MyIsam是非聚簇索引
InnoDB支持行锁,MyIsam支持表锁
InnoDB不保存表的具体行数,执行(select count(*) from table)查询的时候需要全表查询,MyIsam执行查询只需要读出变量即可,速度很快
十二、MYSQL优化
避免select *
避免在where子句中对字段进行函数操作或者表达式
避免在where子句中对索引字段进行计算操作
避免在where子句中使用 !=或<>操作符
避免在where子句中对字段进行null值判断
避免在where子句中使用or来连接条件
尽量少使用order by rand()
当只有一行数据时使用limit 1
为每一张表设置一个 ID 属性
使用 EXPLAIN 命令优化你的 SELECT 查询,对于复杂、效率低的 sql 语句,我们通常是使用 explain sql 来分析这条 sql 语句,这样方便我们分析,进行优化。
为搜索字段创建索引
选择正确的存储引擎,InnoDB 、MyISAM 、MEMORY 等
进行水平切割或者垂直分割
选择合适的字段类型,选择标准是 尽可能小、尽可能定长、尽可能使用整数。
拆分大的 DELETE 或 INSERT 语句
使用慢查询日志,设置需要优化的sql语句的执行时间,记录下超过该设置时间的语句,即为需要优化的语句
十三、写几个常用的Linux命令
Cd:切换目录
Cd /:切换到根目录
Cd. ./:切换到上一级
Ls:查看当前目录下所有的目录和文件
Ls-a:显示当前目录下所有目录和文件包括隐藏文件
Ls-l:查看当前目录下所有的目录和文件显示详细信息
Mkdir:创建目录
Rm:删除目录下的文件
Rm-rf:强制删除目录下的文件
Mv:重命名
Mv:剪切
Cp:复制
Find:搜索目录
Touch:创建文件
Vim:修改文件
Pwd:显示工作路径
Ctrl+C:中断目前程序
File:查看文件类型
Tar -zxvf:解压一个gzip格式的压缩包
Groupadd:创建一个新用户组
Groupdel:删除一个用户组
Chgrp:改变文件所属组
Chown:改变文件所有者
Chmod:改变文件权限
Netstat -ntlp | grep 端口名:查看端口号被占用
Ps aux | grep a:查看所有进程
Ps -ef:查看所有正在运行的进程
Kill -9:杀死进程
Ping ip:查看与某台机器的连接情况
Systemctl start nginx:启动nginx
Systemctl stop nginx:停止nginx
Systemctl restart nginx:重启nginx
Systemctl status nginx:查看nginx状态
Clear:清屏
Esc:进入底行命令模式 q:退出编辑 q!:强制退出 wq:保存并退出 wq!:强制保存并退出
Service iptables status:查看防火墙
Service iptables stop:关闭防火墙
Chkconfig iptables off:永久关闭防火墙
Service iptables restart:重启防火墙
Head:显示头部日志
head -n 10 test.log:查询日志文件中的头10行日志
Head -n -10 test.log:查询日志文件中除了最后10行的所有日志
Tail:显示尾部日志
tail -n 10 test.log:查询日志尾部最后10行日志
Tail -n +10 test.log:查询日志文件中除了最后10行的所有日志
十四、请说出TCP/IP四层模型与OSI七层模型
TCP/IP四层模型/协议
1、应用层:负责处理特定的应用程序
2、运输层:主要为两台主机上的应用提供端到端的通信
3、网络层(互联网层):处理分组在网络中的活动,比如分组的选路
4、链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡
ISO/OSI七层模型/协议
1、应用层:网络服务与最终用户的一个接口。协议有:HTTP、FTP、TFTP、SMTP、SNMP、DNS、TELNET、HTTPS、POP3、DHCP
2、表示层:数据的表示、安全、压缩
3、会话层:建立、管理、终止会话
4、传输层:定义传输数据的协议端口号,以及流控和差错效验
5、网络层:进行逻辑地址寻址、实现不同网络之间的路径选择
6、数据链路层:建立逻辑连接、进行硬件地址寻址、差错效验等功能
7、物理层:建立、维护、断开物理连接
|