面试整理(一)
1.面向对象OOP
面向对象就是把跟某一主题(类型称为类,实体叫做对象)的所有方法(即函数)和所有属性(即变量)组合起来,用这种逻辑来组织程序的一种程序开发方法。
封装:
可以简单理解为:类就是一个“语法上的封装”:将一些属性和方法封装起来,变成“我的”;
这是广义的封装;但通常所说的封装,比这个更“严格”:
将一个类中的属性或方法“尽可能地”少对外开放其使用权限;
继承:
就是语法上的常见情形;
继承是设计类的时候的代码重用的最重要的机制;
多态:
就是多种表现形态;
1,不同的对象,使用相同的方法,可能会得到不同的结果;
2,同一个对象,使用相同的方法,也可能会得得到不同的结果;
2.事务
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中所有操作都成功,则认为事务成功,然后提交,即使只有一个操作失败,事务也不成功。然后回滚
事务的特点:
原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;
一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;
隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。
持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。
3.MVC
Model(模型):处理应用程序数据逻辑的部分
View(视图):处理数据显示的部分
Controller(控制器):处理业务逻辑,调用Model获取数据,将数据传递给View
4.魔术方法
__call():当调用不存在的方法时会自动调用的方法
__autoload():在实例化一个尚未被定义的类是会自动调用次方法来加载类文件
__set():当给未定义的变量赋值时会自动调用的方法
__get():当获取未定义变量的值时会自动调用的方法
__construct():构造方法,实例化类时自动调用的方法
__destroy():销毁对象时自动调用的方法
__unset():当对一个未定义变量调用 unset()时自动调用的方法
__isset():当对一个未定义变量调用 isset()方法时自动调用的方法
__clone():克隆一个对象
__tostring():当输出一个对象时自动调用的方法
5.全局变量
$_SESSION 用来获取session存储的值
$_COOKIE 用来获取cookie存储的值
$_SERVER 用来获取服务器和执行环境信息
$_GET 用来获取get方式提交的值
$_POST 用来获取post方式提交的值
$_REQUEST 用来获取get和post方式提交的值
6.HTTP状态码
一. 消息系列
二. 成功系列
三. 重定向系列
四. 请求错误系列
五. 服务器信息端错误系列
302:临时转移成功,请求的内容已转移到新位置
403:禁止访问
500:服务器内部错误
401 代表未授权。
200 是请求成功
404 是文件未找到
502 是服务器内部错误。
7.SESSION COOKIE
联系:
都是会话机制的实现方案,解决的是同一类问题!
SESSION基于COOKIE,SESSION的标识SESSION-ID存于浏览器端的COOKIE中!
区别:
实现原理不同!
COOKIE:数据存储于浏览器端,每次请求携带原始数据过来
SESSION:数据存储于服务器端,浏览器每次请求携SESSION标识即可
存储的数据类型不同,COOKIE存储字符串类型,SESSION除了资源类型都可以存储。
8.sql中left join ,right join ,inner join的含义和区别是什么?
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
INNER JOIN跟JOIN是一样的,一般INNER关键字可以省略。INNER JOIN将只会返回相匹配的元素项,即不会返回结果为NULL的数据项。
9.IP
客户端 $_SERVER('REMOTE_ADDR')
服务端 $_SERVER('SERVER_ADDR')
10.算法
(1)冒泡排序
$n = count($arr);
for($i = 1; $i < $n; $i++ ){ //冒泡排序
for($k = 0; $k < $n-$i; $k++){
if($arr[$k] > $arr[$k+1]){
$t = $arr[$k];
$arr[$k] = $arr[$k+1];
$arr[$k+1] = $t;
}
}
}
(2)选择排序
$n = count($arr);
for($i = 0;$i < $n-1; $i++){ //选择排序
$max = $arr[0];
$pos = 0;
for($k = $i+1;$k < $n; $k++){
if($arr[$k] > $max){
$max = $arr[$k];
$pos = $k;
}
}
$t = $arr[$pos];
$arr[$pos] = $arr[$n-$i-1];
$arr[$n-$i-1] = $t;
}
(3)二分法查找
function binSearch2($arr,$low,$height,$k){
if($low<=$height){
$mid=floor(($low+$height)/2);//获取中间数
if($arr[$mid]==$k){
return $mid;
}elseif($arr[$mid]<$k){
return binSearch2($arr,$mid+1,$height,$k);
}elseif($arr[$mid]>$k){
return binSearch2($arr,$low,$mid-1,$k);
}
}
return -1;
}
(4)顺序查找
function seqSearch($arr,$k){
foreach($arr as $key=>$val){
if($val==$k){
return $key;
}
}
return -1;
}
11.PDO连接数据库
$DSN = "mysql:host=服务器地址/名称;port=端口号;dbname=数据库名";
$Opt = array(PDO::MYSQL_ATTR_INIT_COMMAND=>’set names 连接编码’);
$pdo = new pdo($DSN, "用户名", "密码", $Opt);
$result = $pdo->query(“返回结果集的sql语句”); //对比最原始的函数: mysql_query(“select ..... “)
$result = $pdo->exec(“增删改的sql语句”);
12.设计模式
单例类
class single{
//创建静态私有的变量保存该类对象
static private $instance;
//参数
private $config;
//防止直接创建对象
private function __construct(){
}
//防止克隆对象
private function __clone(){
}
static public function getInstance($config){
//判断$instance是否是Uni的对象
//没有则创建
if (!self::$instance instanceof self) {
self::$instance = new self();
}
return self::$instance;
}
public function getName(){
echo $this->config;
}
}
工厂类
class Gongchang{
static function GetObject($className){
$obj = new $className();
return $obj;
}
}