概述
文章目录
- ##什么事面向对象?主要特征是什么?
- ##SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?
- ##语句include和require的区别是什么?require和require_once()的效率那个高?
- ##Mysql中主键和唯一索引的区别?
- ##HTTP和HTTPS有什么区别?
- ##HTTP状态中302、403、500代码的具体含义?1xx,2xx,3xx,4xx,5xx 即1至5开头的状态分别指什么?
- ##MyISAM与InnoDB的基本区别?索引结构如何实现?
- ##数据库中的事务是什么?
- ##PHP session扩展默认将session数据储存在哪里?
- ##1:什么是抽象类?2:什么是接口?
- ##2:mysql统计每个人分数总和 大于150的数据
- ##3:oop的三大特性
- ##4:PHP7 新特性有哪些
- ##10:composer自动加载原理
- ##11:如何防止sql注入
- #php一维数组去重
- #php二维数组去重
- #PHP递归创建多级目录
- #------------------------------
- #------------------------------
- #------------------------------
- #------------------------------
- //随机输入一个数字能查询到对应的数据区间,如array('1','50','100','150','200','250','300');
- PHP中_autoload()加载机制?
- ##请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功
- ###获取本周的周一日期【星期一】和周未日期【星期日】
- ###PHP写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
- #thinkphp如何防止sql注入,请编写代码举例
- #Mysql 的索引有哪些
- #php中有几种加密方式?请列举
- #求$a的值
- #求$b的值
- #写出一个函数实现 删除指定目录包括其下的所有子目录以及文件
- #写一个函数,算出两个文件的相对路径,如://计算出 c.php相对于e.php的相对路径应该是../../c/d/e/f/g/h/
- #综合知识部分:
- ###1. 谈谈你对Cookie 与 Session 的理解,它们的适用场景是什么,如有可能可阐述下在多种应用下Session如何共享的思路
- 请选择以下代码运行的结果:
- 请选出以下代码运行的结果:
- 写出一下程序的输出结果:
- 写出一下程序的输出结果:
- 用PHP写出显示客户端的IP和服务端的IP
- 以下表达式的结果是:
- 请说明 PHP 中传值与传引用的区别,什么时候传值什么时候传引用?
- MySQL数据库中的字段类型varchar和char的区别?
- 对缓存技术的了解
- 表单中get和post提交方式的区别?
- 优化mysql数据的方法
- 什么是ORM? 什么是n+1? 怎么处理?
- 地址栏输入URL地址到页面出现的详细过程?
- 请求Request,和Response响应
- Msql:
- Mysql索引和优势劣势:
- 那些情况需要建索引?
- 那些情况不需要建索引?
- Redis:
- redis的落地:
- redis的基本数据类型:
- php做题:
- 写一个函数,从一个标准url里取出文件的扩展名,需要取出php或.php
- php基础:
- php的性能瓶颈:
- PHP的运行模式:
- PHP PSR 标准规范:
- php框架:
- tp5和tp6的区别:
- tp6的生命周期?
- thinkphp如何防止sql注入?
- laravel框架
- 一、Laravel有哪些特点:
- 二、架构模式
- 三、涉及到的设计模式
- 四、服务方面
- 五、框架的其他知识点
- 六、生命周期
##什么事面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。
主要特征:封装、继承、多态。
##SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?
//1
HTTP协议是无状态的,数据交换完毕,客户端和服务端的连接就会关闭,使用session和cookie就可以解决,不同是session保存在服务端,cookie保存在客户端。session依赖cookie传递,禁用cookie,不影响session使用,在session的存储文件生成sessionid,通过url传递到session的页面,读取sessionid可以获取session数据。
//2
客户端访问php页面,执行session_start,生成session_id,一般我们是把session_id存储到cookie上,session内容保存在服务端,客户端访问访问不同的页面都会把session_id传到服务端,通过session_id来获取session内容。
产生的背景和原理:
HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。于是需要引入一种机制,COOKIE于是就顺应而生。
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。
区别:(位置,大小,安全)
1、Cookie以文本文件格式存储在浏览器中,而session存储在服务端。
2、cookie的存储限制了数据量,只允许4KB,而session是无限制的。
3、cookie和session都可以设置过期时间
4、cookie包含在每一个客户端请求报文中,因此容易被人捕获。
//另一个回答
session存储在服务器端,cookie保存在客户端,session比较安全,
cookie用某些手段修改,不安全。
Session依赖cookie进行传递。禁用cookie后,session还可以使用,在存储session的文件中,生成sessionID,通过get传参的方式将sessionID传到要实现session共享的页面,读取sessionID,从而从session中获取数据
##语句include和require的区别是什么?require和require_once()的效率那个高?
在代码中有10句include,php就要解析10次,而require只需1次。include引入文件前需要判断文件存不存在,如果不存在会提示报错,不影响程序运行。require不需要包含文件,不同的是如果不存在文件,提示报错,程序终止。
require比requir_once效率高。*_once是opcode缓存下调用。*_once需要额外的去查看系统有没有调用过这个文件。
##Mysql中主键和唯一索引的区别?
主键是约束,唯一索引是一种索引;
主键不可以null,唯一索引可以null;
一张表中只有一个主键,但可以有多个索引;
主键可以做外键,唯一索引不可以;
##HTTP和HTTPS有什么区别?
HTTP端口是80;HTTPS是443;
HTTPS是要到ca申请证书;
HTTP协议是无状态的,HTTPS是有ssl加密协议http协议构成的,进行的是加密传输,身份认证的协议;
##HTTP状态中302、403、500代码的具体含义?1xx,2xx,3xx,4xx,5xx 即1至5开头的状态分别指什么?
302:临时转移成功,请求的内容已转移到新位置
403:禁止访问
500:服务器内部错误
1XX类状态码信息表示:临时的响应。
2XX类状态码信息表示:服务器已成功接收,理解和接受请求
3XX类状态码信息表示:重定向。
4XX类状态码信息表示:请求错误。
5XX类状态码信息表示:服务器遇到错误
##MyISAM与InnoDB的基本区别?索引结构如何实现?
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
索引结构实现: create index indexname on table_name (column_name)
##数据库中的事务是什么?
事务是可以将逻辑相关的一组操作绑定在一起;
事务的特性:原子性:要么全做,要么全部做;一致性;持续性/永久性:事务一旦提交对数据库的数据的改变是永久性的;隔离性:一个事务的执行不会被其他事务干扰;
##PHP session扩展默认将session数据储存在哪里?
答案: Session Server
##1:什么是抽象类?2:什么是接口?
- 定义为抽象的类不能被实例化,任何一个类,如果它里面有个方法被声明为抽象的,那么这个类就必须被声明为抽象的。
- 继承一个抽象类的时候,非抽象子类必须定义父类中的所有抽象方法
- 接口中定义的所有方法都必须是公有,这是接口的特性,protected和private会报错
- 非抽象类中必须实现接口中定义的所有方法,否则会报一个致命错误。
##2:mysql统计每个人分数总和 大于150的数据
select sum(mark) as num from te group by name having MIN(num)>=150;
##3:oop的三大特性
- 封装 多态 继承
##4:PHP7 新特性有哪些
-
类型声明。
-
函数返回值类型声明
-
新增null合并运算符 ??
a = i s s e t ( a = isset( a=isset(_GET[‘a’]) ? $_GET[‘a’] : 0; //三元运算符
$a = $_GET[‘a’] ?? 0; null合并运算符
-
新增组合比较符 <=>
结果只有 1 0 -1
$c = $a <=> $b;
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。 -
支持通过define()定义常量数组
-
新增支持匿名类
-
支持 Unicode codepoint 转译语法。
-
更好的闭包支持。
-
为 unserialize() 提供过滤。
-
新增加 IntlChar 类。
-
支持 use 语句从同一 namespace 导入类、函数和常量。
-
新增整除函数 intdiv()。
-
session_start() 支持接收数组参数。
##10:composer自动加载原理
###在配置文件composer.json加入你需要的包,执行composer require ,composer会找到符合PR4规范的第三方库的源,将其加载到vendor目录下,初始化顶级域名的映射并写入到指定的文件里,写好一个autoload函数,并且注册到spl_autoload_register()里。
##11:如何防止sql注入
- 避免使用字符串拼接sql语句,mysql关键字替换,预处理
- 使用 mysql_real_escape_string(stirng) :转义SQL语句中使用的字符串的特殊字符,并考虑到连接的字符集
- php.ini中magic_quotes_gpc = On:对sql的查询进行转义,如果是Off则使用addslashes()函数
#php一维数组去重
//使用array_unique(array);
$arr = [12,1,12,1,456,789];
var_dump(array_unique($arr));
//使用array_flip(array);
$arr = [12,1,12,1,456,789];
$a
= array_flip($arr);
$b
= array_flip($a);
var_dump($b);
//键值互换使用
$result_01 = array_flip($input);
$result= array_key($result_01);
var_dump($result);
#php二维数组去重
$arr = array(
array("name" => "a"),
array("name" => "b"),
array("name" => "c"),
array("name" => "b"),
array("name" => "c"),
array("name"=> "d"),
["name"=>"c"],
["name"=>"d"]
);
$key = "name";
$result = array_unique_new($arr,$key);
function array_unique_new($arr,$key){
$temp_arr = array();
foreach($arr as $k => $v){
if(in_array($v[$key],$temp_arr)){
unset($arr[$k]);
}else{
$temp_arr[$k] = $v[$key];
}
}
return $arr;
}
#PHP递归创建多级目录
function Directory($dir = '/'){
return is_dir($dir) or Directory(dirname($dir)) and mkdir($dir,0777);
}
Directory("upload");
#------------------------------
$a=[0,1,2,3]; $b=[1,2,3,4,5];
a
+
=
a+=
a+=b; var_dump($a)等于多少?
[0,1,2,3,5]
#------------------------------
t e s t = " a a a " ; test="aaa"; test="aaa";abc = & t e s t ; u n s e t ( test;unset( test;unset(test);echo $abc; //aaa
#------------------------------
a = [ 1 , 2 , 3 ] ; f o r e a c h ( a=[1,2,3];foreach( a=[1,2,3];foreach(a as & v ) ; f o r e a c h ( v){};foreach( v);foreach(a as v ) ; v a r d u m p ( v){};var_dump( v);vardump(a); //[1,2,2]
#------------------------------
//随机输入一个数字能查询到对应的数据区间,如array(‘1’,‘50’,‘100’,‘150’,‘200’,‘250’,‘300’);
function rands(
a
r
r
,
arr,
arr,mumber){
sort(
a
r
r
)
;
f
o
r
e
a
c
h
(
arr); foreach (
arr);foreach(arr as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: … if(!empty(arr[KaTeX parse error: Expected '}', got 'EOF' at end of input: …+1])){ if(mumber >=
a
r
r
[
arr[
arr[key] && $mumber <=
a
r
r
[
arr[
arr[key+1]){
return [
a
r
r
[
arr[
arr[key],
a
r
r
[
arr[
arr[key+1]];
}
}
}
}
var_dump(rands([‘1’,‘50’,‘100’,‘150’,‘200’,‘250’,‘300’],251));
PHP中_autoload()加载机制?
php运行一个类时,当前脚本没有这个类后者没有手动引入这个类文件时,php会自动调用_autoload($class_name)函数,该函数有一个参数,这个参数就是类的名称;
##请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功
function writeData($filepath, $data){
$fp = fopen($filepath,'a');
do{
usleep(100);
}while (!flock($fp,LOCK_EX));
$res = fwrite($fp, $data."n");
flock($fp, LOCK_UN);
fclose($fp);
return $res;
}
writeData("index_txt.txt","sda");
###获取本周的周一日期【星期一】和周未日期【星期日】
本周星期一日期: echo date(“Y-m-d”,strtotime(“previous monday”));
本周末(星期天): echo date(“Y-m-d”,strtotime(“Sunday”));
###PHP写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
function xf_dir($path){
$files = [];
if($h = opendir($path)){
//打开文件
while( ($file = readdir($h)) !== false ){
//循环读取
if($file != '.' && $file != '..'){
//除 .
..
if(is_dir($path.'/'.$file)){
//如果是文件按文件名保存
$files[$file] = xf_dir($path.'/'.$file); //递归保存
}else{
$files[] = $path.'/'.$file;
}
}
}
}
closedir($h);
//关闭文件
return $files;
}
#thinkphp如何防止sql注入,请编写代码举例
查询条件尽量使用数组
$model->where("id=%d",array($id))->select();
$model->query("select * from user where id=%d",$id);
#Mysql 的索引有哪些
:主键索引,唯一索引,普通索引,全文索引,组合索引
?
#php中有几种加密方式?请列举
不可逆的加密函数:
md5(string str)
crypt(string str,string [salt]);
可逆转的加密函数:
base64_encode(string data) – base64_decode(string encode_data);
urlencode(string str) – urldecode(string str);
#求$a的值
$a = "hello";
$b = &$a;
unset($b);
$b = "world";
echo $a;
//hello
#求$b的值
$a = 1;
$x = &$a;
$b = $a++;
echo $b;
//1
赋值完$b之后$a才++
#写出一个函数实现 删除指定目录包括其下的所有子目录以及文件
function clear_dir($path){
if(is_dir($path)){
//是否有文件
$p = scandir($path); //查找该文件下的所有文件
foreach($p as $val){
if($val != '.' && $val != '..'){ //除. ..
if(is_dir($path.'/'.$val)){
//判断是不是文件
clear_dir($path.'/'.$val); //递归删除这个文件的下的所有目录
rmdir($path.'/'.$val); //删除当前文件
}else{
unlink($path.'/'.$val); //删除当前文件
}
}
}
}
}
#写一个函数,算出两个文件的相对路径,如://计算出 c.php相对于e.php的相对路径应该是…/…/c/d/e/f/g/h/
$a = '/a/b/c/d/e/f/g/h/e.php';
$b = '/a/b/1/2/c.php';
function getRelativePath($a, $b){
$relativePath = "";
$pathA = explode("/", dirname($a));
$pathB = explode("/", dirname($b));
$n = 0;
$len = count($pathB) > count($pathA) ? count($pathA) : count($pathB);
do{
if( $n >= $len || $pathA[$n] != $pathB[$n]){
break;
}
}while(++$n);
$relativePath .= str_repeat("../", count($pathB) -$n);
$relativePath .= implode("/", array_splice($pathA, $n));
return $relativePath;
}
-
谈谈js实现继承的几种方式,并写出demo
-
谈谈你熟悉的js框架,并实现下面DOM元素的获取
要求找到drag=“true” 并且 index=“1” 或 无index属性的div
提示: 如果不能一次写出,请完成下来步骤
-
找到drag=“true” 并且 index=“1”
-
找到drag=“true” 并且 无index属性的
-
将二者联立起来得到
-
实现一个遮罩层效果,要求要显示的元素在页面上居中显示
-
闭包知识考察
function step(a){
return function(x){
return x+a++;
}
}
var a = step(10);
var b = step(20);
alert(a(10));
alert(b(20));
var a=“123abc”;
alert(typeof(a++));
alert(a);
#MySQL 知识部分
###某内容管理系统中,表message有如下字段 创建上表,写出MySQL语句
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
create table message(
id int AUTO_INCREMENT PRIMARY KEY,
title char(20) NOT NULL,
content varchar(255) NOT NULL,
category_id int NOT NULL,
hits int
)engine=innoDB default charset=utf8;
###同样上述内容管理系统:表comment记录用户回复内容,字段如下
comment_id 回复id
id 文章id,关联message表中的id
comment_content 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面
文章id 文章标题 点击量 回复数量
用一个SQL语句完成上述查询,如果文章没有回复则回复数量显示为0
:select m.id,m.title,m.hits,(select count(*) from comment c where m.category_id=c.id) as num from message m order by num desc;
###上述内容管理系统,表category保存分类信息,字段如下???
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用户输入文章时,通过选择下拉菜单选定文章分类
写出如何实现这个下拉菜单[可使用PHP,JAVASCRIPT,HTML]
#综合知识部分:
###1. 谈谈你对Cookie 与 Session 的理解,它们的适用场景是什么,如有可能可阐述下在多种应用下Session如何共享的思路
cookie适用场景:判断用户是否登录过网站,实现自动登陆,记住密码,保存上次登陆的时间等信息
session适用场景:防止用户非法登录,保存每个用户的专用信息,
session共享的思路:
1,让客户端访问同一个sessionid
2,让所有域名对应的服务器访问的session的数据的位置必须一致
- 谈谈你对单点登录的理解,比如原理与实现,以及实现过程中有哪些问题需要注意
- 谈谈你对MVC的理解,MVC的缺点是什么,如果让你实现一个MVC框架,你想怎样实现?
- 谈谈你平常工作中使用过的权限管理部分,你是如何理解与实现的?
请选择以下代码运行的结果:
<?php if ('1e3' == '1000') echo 'LOL'; ?> //B
A 无任何输出结果 B
LOL C 不执行且报错
//1e3 是 科学计数法 实数的指数形式 为1乘以10的三次方
请选出以下代码运行的结果:
<?php $a = "aabbzz"; $a++; echo $a; ?>
//C
A b B aabbzz C aabcaa
/***
字符串字母相加其实就是在末尾字母加一 如:$a = "a"; $a++;答应结果就是 b,$a=''aa';结果就是ab 故$a = "aabb";打印结果就是 aabc ,如$a = "aabbz";结果就是 aabca,因为Z是末尾字母故加一变为a,向前一位进一,b就变为c,故结果为C;
**/
写出一下程序的输出结果:
<?php
$data = ['a','b','c'];
foreach($data as $k => $v){
$v = &$data[$k];
}
var_dump($data); //['b','c','c']
>
A $data = ['a','b','c']; B $data = ['b','b','c']; C $data = ['b','c','c'];
/***
这里有个考点要记得 就是&是引用;修改引用变量的值,那么空间的值也会改变,
第一次循环 得到
$v = &$data[0]=>'a',
//此时$v 和 $data[0] 是同一存储空间
第二次循环
$v = &$data[1]=>'b',
//将b的值给$v($data[0])
//并$v引用的$data[1]同一存储空间,
可见第一次引用的$data[0]的值已经被改变,所以此时的$data[0]=b,此时$v引用的$data[1],
进入第三次循环 此时$v又变为
$v = &$data[2]=>'c',
//将c的值给$v($data[1])
//并$v引用的$data[2]同一存储空间,
所以此时的$data[1]=c,
这样循环结束
$data[0]=>'b', $data[1]=>'c', $data[2]=>'c',
**/
写出一下程序的输出结果:
<?php
$a = 0.1;
$b = 0.7;
if($a+$b == 0.8){
//0.79999999
echo true;
}else{
echo false;
//PHP不能进行浮点数计算,CPU在计算浮点数时,先转换成二进制,导致值不正确。
};
A 空; B true;
C false; D、1; E、0; F:报错 // A
/***
这里的考点有两个:
1,echo false和true的值;
2、浮点类型不能用于精确计算;首先浮点类型的数据不能用于计算,他会将浮点类型转为二进制,所以有一定的损耗,故它无限接近于0.8,也就是0.79999999...,所以echo 应该是个false;echo false;结果是空;echo true;结果是1;
***/
// $a = 9223372036854775807;
// $b = 9223372036854775808;
// var_dump($a === ($b - 1));
>
用PHP写出显示客户端的IP和服务端的IP
echo $_SERVER['REMOTE_ADDR']; //客户端IP
echo gethostbyname("www.baidu.com");
//服务端IP
以下表达式的结果是:
$a= 0;$b= 0;
if($a = 3>0 || $b = 3>0){
//a = true
$a++;
$b++;
}
echo $a.','.$b;
/****
A报错; B:1,1;
(要是真的只有两个选项该多好肯定大家都选B)
解析:此题考查的是运算符的优先级问题,首先在此题中比较运算符>逻辑运算符>赋值,
所以1,先看 3>0为true,
2,因为是||运算所以后面的$b=3>0 形成短路作用,这时的$a=true,$b=0;
故$a++;为1;$b++;为1这里解释下布尔类型运算不影响布尔类型结果;但是$b=0;$b++;就改变为1, echo true;结果为1,
***/
请说明 PHP 中传值与传引用的区别,什么时候传值什么时候传引用?
按值传递:在函数内,对值的任何改变在函数外不受影响
按引用传递:在函数内,对值的任何改变在函数外会手影响
按值传递时,必须复制值。按引用传递测不需要复制值
MySQL数据库中的字段类型varchar和char的区别?
char和varchar最大不同时,char时固定长度,varchar时可变长度,存储数据时varchar会比char多步骤
对缓存技术的了解
1:将数据缓存在文件中,在一定的时间内访问数据时直接调用缓存数据,不需要重新访问数据库。
2:使用memcache可以做缓存
表单中get和post提交方式的区别?
get是显式的传输,数据可以从url看到,有长度限制,传输数据量小,安全性低;
post是隐式的,传输的数据量较大,安全性较高;
优化mysql数据的方法
1,数据类型优化,
2,索引优化·
3,SQL语句优化 : 查询数据多使用limit , 返回列是不用 * , 优化语句:count() ,关联查询,子查询
4,存储引擎的优化:尽量使用InnoDB存储引擎,因为她支持事务,外键,使用独立表空间、使用行级锁
5,数据表结构设计优化:分库分表,水平拆分,垂直拆分
6,数据架构的优化:主从复制,读写分离,双主热备,负载均衡–通过mycat数据库中间件实现
什么是ORM? 什么是n+1? 怎么处理?
orm:对象关系映射。是一种程序技术,用于面向对象编程与不同类型的数据库之间的转换。
n+1:执行一次查询N条主数据,又执行n次查询从数据,带来不必要的查询开销。
处理:可以通过orm自带的with去解决。
地址栏输入URL地址到页面出现的详细过程?
1,DNS解析,将输入的url解析为IP地址。
2,建立tcp连接,根据ip地址与服务器进行连接通信。
3,发送请求,请求相关资源。
4,服务器收到请求并返回报文,并带上指定的资源。
5,浏览器解析资源渲染页面。
6,tcp关闭连接。
请求Request,和Response响应
requset:用来获取请求信息。 response:用来设置响应消息
Msql:
Mysql索引和优势劣势:
索引:普通索引;唯一索引;主键索引;组合索引;
优势:提高数据的检索速度,减低排污的成本;
劣势:占用存储空间,降低更新数据的速度;
那些情况需要建索引?
经常用到查询条件的字段,经常需要排序,分组,统计的字段;
与其他表关联的字段
那些情况不需要建索引?
经常增删改的表不要建立索引;
频繁更新的字段;
表的记录太少;
Redis:
redis的落地:
redis的落地是持久化;
有两种策略:
1:RDB:定时快照方式;
2:AOF:基于语句追加文件的方式;
redis的基本数据类型:
字符串类型:string
队列:list
散列:hash
集合:set
有序集合:zset
php做题:
写一个函数,从一个标准url里取出文件的扩展名,需要取出php或.php
getstr($str){
$arr = parse_url($str);
$dir = basename($arr['path']);
$ext = explode('.',$dir);
return $ext[1];
}
php基础:
php的性能瓶颈:
1.弱类型
2.网络
3.cpu
PHP的运行模式:
简要的过程如下:
1. PHP是随着Apache的启动而运行的;
2. PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);
3. PHP总共有三个模块:内核、Zend引擎、以及扩展层;
4. PHP内核用来处理请求、文件流、错误处理等相关操作;
5. Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;
6. 扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;
7. 当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;
8. 最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。
PHP PSR 标准规范:
https://learnku.com/docs/psr
php框架:
tp5和tp6的区别:
tp6只能通过composer安装;
类的加载方式:tp5采用的自己一套实现记载方式,tp6采用的是composer类的加载方式
tp6有严格模式,tp5没有;
tp6支持更多的psr规范
组件的独立
中间件改进:tp6使用管道模式来时间中间件,比tp5的更加简洁
引入filesystem组件
tp6的生命周期?
1, 入口文件。
2,加载应用。
3,注册服务。
4,生成事件。
5,加载中间件。
6,解析路由。
7,执行控制器方法。
8,响应输出。
thinkphp如何防止sql注入?
1.查询条件尽量使用数组方式。
2.使用预处理机制。
3.开启字段类型验证。
laravel框架
一、Laravel有哪些特点:
1 强大的rest router:用简单的回调函数就可以调用,快速绑定controller和router
2 artisan:命令行工具,很多手动的工作都自动化
3 可继承的模板,简化view的开发和管理
4 blade模板:渲染速度更快
5 ORM操作数据库
6 migration:管理数据库和版本控制
7 测试功能也很强大
8 composer也是亮点
9 laravel框架引入了门面,依赖注入,Ioc模式,以及各种各样的设计模式等
二、架构模式
laravel框架是使用了服务组件化的开发模式,由多个服务提供者构成了组件,再由多个组件提供不同的服务,然后是多个服务构成了项目
服务提供者是应用配置的核心,是通过 register方法中绑定服务到服务容器的。
三、涉及到的设计模式
laravel框架使用了大量设计模式,使模块之间耦合度很低,服务容器可以方便的扩展框架功能以及编写测试。
1.ORM - 对象关系映射模式
2 依赖注入与IOC容器 - 策略模式
3 监听与触发
-
观察者模式
4 门面模式 - 静态代理
还有其他的,比如注册服务的时候用到单例模式等。
四、服务方面
能快速开发出功能,自带各种方便的服务,比如数据验证、队列、缓存、数据迁移、测试、artisan 命令行等等,还有强大的 ORM,artisan强大的命令行工具,实现自动化。
Laravel安全功能有效地利用了盐散列和加密码机制,Bcrypt哈希算法”来创建加密密码。
五、框架的其他知识点
服务容器:是一个用于管理类依赖和执行依赖注入的强大工具。其实质是通过构造函数或者某些情况下通过「setter」方法将类依赖注入到类中。
门面:为应用服务容器中的绑定类提供了一个「静态」接口 ,优点:在维护时能够提供更加易于测试、更加灵活、简明优雅的语法。
契约:用来规划服务提供者的格式、方法、参数等,给服务提供者规范了一定约束。
反射:主要用来动态地获取系统中类、实例对象、方法等语言构件的信息,通过发射API函数可以实现对这些语言构件信息的动态获取和动态操作等。
后期静态绑定:用于在继承范围内引用静态调用的类,即在类的继承过程中,使用的类不再是当前类,而是调用的类。
六、生命周期
入口文件-
请求web服务器导入这个文件-
载入 Composer 生成的自动加载启动核心文件-
内核启动(服务提供者启动框架的各种组件)-
交给路由分发到到(控制器,中间件等)-
逻辑处理-
返回结果
最后
以上就是和谐保温杯为你收集整理的记录php-面试Msql:Redis:php做题:php基础:php框架:的全部内容,希望文章能够帮你解决记录php-面试Msql:Redis:php做题:php基础:php框架:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复