我是靠谱客的博主 和谐保温杯,这篇文章主要介绍记录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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//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()的效率那个高?

复制代码
1
2
3
在代码中有10句include,php就要解析10次,而require只需1次。include引入文件前需要判断文件存不存在,如果不存在会提示报错,不影响程序运行。require不需要包含文件,不同的是如果不存在文件,提示报错,程序终止。 require比requir_once效率高。*_once是opcode缓存下调用。*_once需要额外的去查看系统有没有调用过这个文件。

##Mysql中主键和唯一索引的区别?

复制代码
1
2
3
4
5
主键是约束,唯一索引是一种索引; 主键不可以null,唯一索引可以null; 一张表中只有一个主键,但可以有多个索引; 主键可以做外键,唯一索引不可以;

##HTTP和HTTPS有什么区别?

复制代码
1
2
3
4
HTTP端口是80;HTTPS是443; HTTPS是要到ca申请证书; HTTP协议是无状态的,HTTPS是有ssl加密协议http协议构成的,进行的是加密传输,身份认证的协议;

##HTTP状态中302、403、500代码的具体含义?1xx,2xx,3xx,4xx,5xx 即1至5开头的状态分别指什么?

​ 302:临时转移成功,请求的内容已转移到新位置
​ 403:禁止访问
​ 500:服务器内部错误

复制代码
1
2
3
4
5
6
1XX类状态码信息表示:临时的响应。 2XX类状态码信息表示:服务器已成功接收,理解和接受请求 3XX类状态码信息表示:重定向。 4XX类状态码信息表示:请求错误。 5XX类状态码信息表示:服务器遇到错误

##MyISAM与InnoDB的基本区别?索引结构如何实现?

​ MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
​ MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
​ 索引结构实现: create index indexname on table_name (column_name)

##数据库中的事务是什么?

复制代码
1
2
3
事务是可以将逻辑相关的一组操作绑定在一起; 事务的特性:原子性:要么全做,要么全部做;一致性;持续性/永久性:事务一旦提交对数据库的数据的改变是永久性的;隔离性:一个事务的执行不会被其他事务干扰;

##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一维数组去重

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//使用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二维数组去重

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$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递归创建多级目录

复制代码
1
2
3
4
5
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()加载机制?

复制代码
1
2
php运行一个类时,当前脚本没有这个类后者没有手动引入这个类文件时,php会自动调用_autoload($class_name)函数,该函数有一个参数,这个参数就是类的名称;

##请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
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写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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的值

复制代码
1
2
3
4
5
6
7
$a = "hello"; $b = &$a; unset($b); $b = "world"; echo $a; //hello

#求$b的值

复制代码
1
2
3
4
5
6
7
$a = 1; $x = &$a; $b = $a++; echo $b; //1 赋值完$b之后$a才++

#写出一个函数实现 删除指定目录包括其下的所有子目录以及文件

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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/

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$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 点击量

复制代码
1
2
3
4
5
6
7
8
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 回复内容
现通过查询数据库需要得到以下格式的文章标题列表,并按照回复数量排序,回复最高的排在最前面

复制代码
1
2
3
4
文章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保存分类信息,字段如下???

复制代码
1
2
3
4
5
category_id int(4) not null auto_increment; categroy_name varchar(40) not null; 用户输入文章时,通过选择下拉菜单选定文章分类 写出如何实现这个下拉菜单[可使用PHP,JAVASCRIPT,HTML]

#综合知识部分:

###1. 谈谈你对Cookie 与 Session 的理解,它们的适用场景是什么,如有可能可阐述下在多种应用下Session如何共享的思路

​ cookie适用场景:判断用户是否登录过网站,实现自动登陆,记住密码,保存上次登陆的时间等信息
​ session适用场景:防止用户非法登录,保存每个用户的专用信息,

复制代码
1
2
3
4
session共享的思路: 1,让客户端访问同一个sessionid 2,让所有域名对应的服务器访问的session的数据的位置必须一致
  1. 谈谈你对单点登录的理解,比如原理与实现,以及实现过程中有哪些问题需要注意
  2. 谈谈你对MVC的理解,MVC的缺点是什么,如果让你实现一个MVC框架,你想怎样实现?
  3. 谈谈你平常工作中使用过的权限管理部分,你是如何理解与实现的?

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

复制代码
1
2
3
4
5
<?php if ('1e3' == '1000') echo 'LOL'; ?> //B A 无任何输出结果     B LOL       C 不执行且报错 //1e3 是 科学计数法 实数的指数形式 为1乘以10的三次方

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

复制代码
1
2
3
4
5
6
7
<?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; **/

写出一下程序的输出结果:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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', **/

写出一下程序的输出结果:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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

复制代码
1
2
3
4
echo $_SERVER['REMOTE_ADDR']; //客户端IP echo gethostbyname("www.baidu.com"); //服务端IP

以下表达式的结果是:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$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? 怎么处理?

复制代码
1
2
3
4
orm:对象关系映射。是一种程序技术,用于面向对象编程与不同类型的数据库之间的转换。 n+1:执行一次查询N条主数据,又执行n次查询从数据,带来不必要的查询开销。 处理:可以通过orm自带的with去解决。

地址栏输入URL地址到页面出现的详细过程?

复制代码
1
2
3
4
5
6
7
1,DNS解析,将输入的url解析为IP地址。 2,建立tcp连接,根据ip地址与服务器进行连接通信。 3,发送请求,请求相关资源。 4,服务器收到请求并返回报文,并带上指定的资源。 5,浏览器解析资源渲染页面。 6,tcp关闭连接。

请求Request,和Response响应

复制代码
1
2
requset:用来获取请求信息。 response:用来设置响应消息

Msql:

Mysql索引和优势劣势:

复制代码
1
2
3
4
索引:普通索引;唯一索引;主键索引;组合索引; 优势:提高数据的检索速度,减低排污的成本; 劣势:占用存储空间,降低更新数据的速度;

那些情况需要建索引?

复制代码
1
2
3
经常用到查询条件的字段,经常需要排序,分组,统计的字段; 与其他表关联的字段

那些情况不需要建索引?

复制代码
1
2
3
4
经常增删改的表不要建立索引; 频繁更新的字段; 表的记录太少;

Redis:

redis的落地:

复制代码
1
2
3
4
5
redis的落地是持久化; 有两种策略: 1:RDB:定时快照方式; 2:AOF:基于语句追加文件的方式;

redis的基本数据类型:

复制代码
1
2
3
4
5
6
字符串类型:string 队列:list 散列:hash 集合:set 有序集合:zset

php做题:

写一个函数,从一个标准url里取出文件的扩展名,需要取出php或.php

复制代码
1
2
3
4
5
6
7
getstr($str){ $arr = parse_url($str); $dir = basename($arr['path']); $ext = explode('.',$dir); return $ext[1]; }

php基础:

php的性能瓶颈:

复制代码
1
2
3
4
1.弱类型 2.网络 3.cpu

PHP的运行模式:

复制代码
1
2
3
4
5
6
7
8
9
10
简要的过程如下: 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 标准规范:

复制代码
1
2
https://learnku.com/docs/psr

php框架:

tp5和tp6的区别:

复制代码
1
2
3
4
5
6
7
8
tp6只能通过composer安装; 类的加载方式:tp5采用的自己一套实现记载方式,tp6采用的是composer类的加载方式 tp6有严格模式,tp5没有; tp6支持更多的psr规范 组件的独立 中间件改进:tp6使用管道模式来时间中间件,比tp5的更加简洁 引入filesystem组件

tp6的生命周期?

复制代码
1
2
3
4
5
6
7
8
9
1, 入口文件。 2,加载应用。 3,注册服务。 4,生成事件。 5,加载中间件。 6,解析路由。 7,执行控制器方法。 8,响应输出。

thinkphp如何防止sql注入?

复制代码
1
2
3
4
1.查询条件尽量使用数组方式。 2.使用预处理机制。 3.开启字段类型验证。

laravel框架

一、Laravel有哪些特点:

复制代码
1
2
3
4
5
6
7
8
9
10
1 强大的rest router:用简单的回调函数就可以调用,快速绑定controller和router 2 artisan:命令行工具,很多手动的工作都自动化 3 可继承的模板,简化view的开发和管理 4 blade模板:渲染速度更快 5 ORM操作数据库 6 migration:管理数据库和版本控制 7 测试功能也很强大 8 composer也是亮点 9 laravel框架引入了门面,依赖注入,Ioc模式,以及各种各样的设计模式等

二、架构模式

复制代码
1
2
3
laravel框架是使用了服务组件化的开发模式,由多个服务提供者构成了组件,再由多个组件提供不同的服务,然后是多个服务构成了项目 服务提供者是应用配置的核心,是通过 register方法中绑定服务到服务容器的。

三、涉及到的设计模式

复制代码
1
2
3
4
5
6
7
8
9
laravel框架使用了大量设计模式,使模块之间耦合度很低,服务容器可以方便的扩展框架功能以及编写测试。 1.ORM - 对象关系映射模式 2 依赖注入与IOC容器 - 策略模式 3 监听与触发 - 观察者模式 4 门面模式 - 静态代理 还有其他的,比如注册服务的时候用到单例模式等。

四、服务方面

复制代码
1
2
3
能快速开发出功能,自带各种方便的服务,比如数据验证、队列、缓存、数据迁移、测试、artisan 命令行等等,还有强大的 ORM,artisan强大的命令行工具,实现自动化。 Laravel安全功能有效地利用了盐散列和加密码机制,Bcrypt哈希算法”来创建加密密码。

五、框架的其他知识点

复制代码
1
2
3
4
5
6
服务容器:是一个用于管理类依赖和执行依赖注入的强大工具。其实质是通过构造函数或者某些情况下通过「setter」方法将类依赖注入到类中。 门面:为应用服务容器中的绑定类提供了一个「静态」接口 ,优点:在维护时能够提供更加易于测试、更加灵活、简明优雅的语法。 契约:用来规划服务提供者的格式、方法、参数等,给服务提供者规范了一定约束。 反射:主要用来动态地获取系统中类、实例对象、方法等语言构件的信息,通过发射API函数可以实现对这些语言构件信息的动态获取和动态操作等。 后期静态绑定:用于在继承范围内引用静态调用的类,即在类的继承过程中,使用的类不再是当前类,而是调用的类。

六、生命周期

复制代码
1
2
3
4
5
6
7
8
入口文件- 请求web服务器导入这个文件- 载入 Composer 生成的自动加载启动核心文件- 内核启动(服务提供者启动框架的各种组件)- 交给路由分发到到(控制器,中间件等)- 逻辑处理- 返回结果

最后

以上就是和谐保温杯最近收集整理的关于记录php-面试Msql:Redis:php做题:php基础:php框架:的全部内容,更多相关记录php-面试Msql内容请搜索靠谱客的其他文章。

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

相关文章

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

评论列表共有 0 条评论