我是靠谱客的博主 和谐保温杯,最近开发中收集的这篇文章主要介绍记录php-面试Msql:Redis:php做题:php基础:php框架:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

      • ##什么事面向对象?主要特征是什么?
      • ##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;
}
  1. 谈谈js实现继承的几种方式,并写出demo

  2. 谈谈你熟悉的js框架,并实现下面DOM元素的获取

要求找到drag=“true” 并且 index=“1” 或 无index属性的div

提示: 如果不能一次写出,请完成下来步骤

  1. 找到drag=“true” 并且 index=“1”

  2. 找到drag=“true” 并且 无index属性的

  3. 将二者联立起来得到

  4. 实现一个遮罩层效果,要求要显示的元素在页面上居中显示

  5. 闭包知识考察

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的数据的位置必须一致
  1. 谈谈你对单点登录的理解,比如原理与实现,以及实现过程中有哪些问题需要注意
  2. 谈谈你对MVC的理解,MVC的缺点是什么,如果让你实现一个MVC框架,你想怎样实现?
  3. 谈谈你平常工作中使用过的权限管理部分,你是如何理解与实现的?

请选择以下代码运行的结果:

<?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;    D1;  E0;  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框架:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

相关文章

JavaWeb笔记-备份下Java中map的entrySet()方法返回的是什么内容啊?servlet 有参数的init方法和无参数的init方法一个常见错误List<Object>和List<String>
JavaWeb笔记-备份下Java中map的entrySet()方法返回的是什么内容啊?servlet 有参数的init方法和无参数的init方法一个常见错误List和List

评论列表共有 0 条评论