欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面试整理(一)

程序员文章站 2022-07-26 14:04:22
1.面向对象OOP 面向对象就是把跟某一主题(类型称为类,实体叫做对象)的所有方法(即函数)和所有属性(即变量)组合起来,用这种逻辑来组织程序的一种程序开发方法。 封装: 可以简单理解为:类就是一个“语法上的封装”:将一些属性和方法封装起来,变成“我的”; 这是广义的封装;但通常所说的封装,比这个更 ......

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;
}


}