资讯详情

PHP面试问题总结整理

  1. 主从复制的原理是什么?主从复制中断怎么办?主从复制延迟怎么办?主库崩溃怎么办?

原理:

原理:主从复制有三个过程,从库生成两个线程I/O线程,一个SQL线程;

i/o向主库请求线程 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;

生成一个主库 log dump 线程,用于从库 i/o线程传binlog;

SQL 会读取的线程relay log将文件中的日志分析成具体操作,实现主从操作一致,最终数据一致;

主从复制错误?

错误一:

错误原因:用户权限或密码从库连接主库是错误的

解决方案:首先检查主从复制的用户权限,如果没有问题,检查从库使用的密码是否正确。

错误二:

错误原因:这可能来自库master.info文件损坏。

解决方法:reset slave

错误三:

错误原因:可能是由于库的约束比主库多。

解决方法:

Mysql > stop slave;

Mysql > set global sql_slave_skip_counter =1 ;

Mysql > start slave;

错误四:

错误原因:slave错误中缺少表。

解决方法:在slave添加相应的表,然后添加相应的表start slave。

错误五:

错误原因:库上对应的表面缺少字段。

解决方案:根据主库的上表结构,将缺失的字段添加到库对应表中,然后start slave。

错误六:

错误原因:主库删除的表不存在于库中,导致库在删除不存在表时无法同步。

解决方案:使用slave-skip-errors跳过1146错误的参数(这个参数只读,需要在配置文件中修改,重启从库)

1、在my.cnf的[mysqld]下面添加slave_skip_errors=1146

2、重启从库 service mysq jhl restart

3、在从库上启动同步

4、去掉my.cnf中的slave_skip_errors=1146

5、重启从库

6.启动从库复制`1

Show slave status\G;检查错误的原因

1.show slave status\G,提示中继日志损坏,根据之前的做法,根据提示重新指定合适的日志文件和pos点。

2.从MySQL5.5.X版本开始,增加了relay_log_recovery参数,这个参数的作用是:当slave如果从库中停机relay-log如果损坏,部分中继日志未处理,所有未执行的日志将自动放弃relay-log,并且

重新从master默认关闭该参数。这个参数在做决从这个参数。修改my.cnf,添加这两项。(skip-slave-start ,mysql服务启动跳过自动启动主从复制,避免新问题),relay_log_recovery不支持动态修改。因此,修改配置文件,重启MySQL服务,启动主从复制线程

原因:当主库并发量较大时,产生DDL数量,超出线程承受的范围,产生延迟,可能是和slave的大型query句子产生锁等待;

解决方案:优化架构,尽量让主库DDL快速执行,因为从库只读取数据,不需要那么高的安全性,所以可以sync_binlog设置为0,或关闭binlog日志,或使用比主库更好的硬件设备slave

https://www.cnblogs.com/gomysql/p/3675429.html

MHA :原理

(1)从停机崩溃master保存二进制日志事件(binlog events);

(2)包含最新更新的识别slave;

(3)应用差异中继日志(relay log)到其他的slave;

(4)应用从master保存的二进制日志事件(binlog events);

(5)提升一个slave为新的master;

(6)使其他的slave连接新的master进行复制;

  1. Redis有哪些数据类型?

  1. Redis和memcache的区别是什么?

区别:

1:memcache和redis都是将数据存储到内存中,都是内存数据库,不过memcache还可以缓存其他东西,图片视频等。

2:存储类型不同,memcache只支持k-v结构,redis支持五种数据类似,字符串,链表,哈希,集合,有序集合。

3:虚拟内存,当redis物理内存使用完后,可以将一些很久没有使用过的value交换到磁盘、

4:分布式设定memcache集群,利用magenta做一主多从,redis可以做一主多从,也可以一主一从。

5:存储数据redis持久化,memcache关机后数据消失

6:数据恢复,memcache挂掉后,数据不可恢复,redis数据丢失后可以通过AOF日志恢复。

7:应用场景不同,redis除啦作为数据库使用之外,还能做消息队列,数据堆栈和数据缓存等,memcache适用于缓存sql语句,数据集,用户临时性数据,延迟查询数据 session等

  1. Redis在项目中怎么用的?

  1. Mysql数据库优化做过哪些工作

 1:建表时选择适合字段的数据类型,合适的长度

2:查询多的字段加索引 sql语句优化

3:分页优化

4:分区分表

5:主从复制,读写分离

  1. Myisam和innodb的区别是什么?

innodb写操作快、支持事务、数据行锁、 支持外键, InnoDB的主键范围更大,最大是MyISAM的2倍。

MyISAM不支持事务和外键,读操作快、 支持数据锁表、 GIS数据 、全文索引(因为它不支持中文分词,所以 MyISAM的全文索引其实没啥用)。

   

  1. 你了解哪些算法?

  1. 负载均衡怎么搭建的?nginx属于第几层负载均衡?nginx对于请求的分配有哪些策略模式?

  1. 网络七层协议有哪些?

  1. 请说出10个字符串函数和10个数组函数

你了解哪些设计模式?

  1. 请说一下get和post的区别

 get和post区别,唯一区别一个是用过url实现,另外一个是通过数据包;本质是http的原因,

关于GET/POST大小说法,这个是关于浏览器(发送http请求)和服务器(接收http请求)的关系,

(大多数浏览器url限制2K个字节,大多数服务器只处理64k之内的url)

  1. 请描述一下session和cookie的区别,session信息的存储方式,如何进行遍历?

1:session存储在服务器端,cookie存储在客户端

2:session默认存储在服务器的一个文件里(不是内存)

3:session的运行依赖session id ,而session id是存在cookie中的,也就是说如果浏览器禁用了cookie,同时session也会失效,(但是可以通过其他方式实现session ,比如在url中传递session id)

4:session 可以放在文件,数据库,或者是内存中,默认是存储在文件中,都可以

5:用户验证一般都会用session

  1. 请说一下你对mvc的理解

  1. 请描述一下php-fpm的工作原理

请求到nginx通过fastcgi协议,fastcgi会找php-fpm解析php文件,php-fpm有两个进程,master进程和worker进程,worker进程会解析php代码最后将结果返回给nginx

  1. varchar和char的区别

  1. 什么是数据库索引?mysql有哪些索引?主键索引和唯一索引有什么区别?

 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

  区别:http://blog.csdn.net/tanga842428/article/details/52790651

  1. Myisam和innodb的区别是什么?为什么innodb比myisam写入快?

innodb写操作快、支持事务、数据行锁、 支持外键 InnoDB的主键范围更大,最大是MyISAM的2倍。

MyISAM不支持事务和外键,读操作快、 支持数据锁表、 GIS数据 、

在高并发的情况下,因为innodb支持行锁可以多行操作,而myisam只支持表锁只能一个一个操作所以慢

  1. 请列举出你所了解的会引起索引失效的情况

 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

    注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

  2.对于多列索引,不是使用的第一部分,则不会使用索引(最左原则)

  3.like查询是以%开头      

  4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

  5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

  6对索引列运算,运算包括(+、-、*、/、!、<>、%、like'%_'(%放在前面)、in、exist等),导致索引失效。

  7.在JOIN、UNION操作中,主键和外键的数据类型不相同,MYSQL将无法使用索引

  8.is null 索引失效,is not null Betree索引生效。导致的原因:mysql没有在null写进索引           

  9.对索引应用内部函数,这种情况下应该建立基于函数的索引                 

 explain select * from demo_range t where round(t.title)=1

  1. 在mysql中值为空和值为null有什么区别?

  1. left join、right join、inner join的区别是什么?

  1. 请描述一下sql语句的执行顺序  

https://www.cnblogs.com/spring-hailong/p/6182227.html

 (11)limit

  1. 请描述一下你对mysql连接池的理解

  1. 事物的四大特性和事物的隔离级别

 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,

 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

不考虑事务的隔离性,会发生的几种问题:

 脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。

 不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了

幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。

    现在来看看MySQL数据库为我们提供的四种隔离级别:

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

PHP的所有应用程序都是通过WEB服务器(如IIS或Apache)和PHP引擎程序解释执行完成的,工作过程: (1)当用户在浏览器地址中输入要访问的PHP页面文件名,然后回车就会触发这个PHP请求,并将请求传送化支持PHP的WEB服务器。 (2)WEB服务器接受这个请求,并根据其后缀进行判断如果是一个PHP请求,WEB服务器从硬盘或内存中取出用户要访问的PHP应用程序,并将其发送给PHP引擎程序。 (3)PHP引擎程序将会对WEB服务器传送过来的文件从头到尾进行扫描并根据命令从后台读取,处理数据,并动态地生成相应的HTML页面。 (4)PHP引擎将生成HTML页面返回给WEB服务器。WEB服务器再将HTML页面返回给客户端浏览器。

简言之:apache是WEB服务器,它可以解析php语言。

  1. 请描述PHP-FPM的工作原理

PHP-FPM是一个PHP FastCGI进程管理器,是只用于PHP的

PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置

请求到nginx通过fastcgi协议,fastcgi会找php-fpm解析php文件,php-fpm有两个进程,master进程和worker进程,worker进程会解析php代码最后将结果返回给nginx

  1. 如何安装php扩展?

http://pecl.php.net

  1. nginx和Apache的区别是什么?

1:nginx是轻量级,比apache占用更少的内存以及资源

2:apache比nginx的rewrite强大,模块多,bug少,稳定性强,

3:apache对php支持比较简单,nginx需要配合其他后端用,apache组件比nginx多,现在nginx是web服务器的首选

4:最核心的区别是apache是同步多进程模型,一个连接对应一个进程,多个连接(千万级别)可以对应一个进程

5:nginx:配置文件写的很简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器 

6:Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache吧

7:动态请求要apache去做,nginx只适合静态和反向

  1. 请说出常用的10个Linux操作命令(ll ls cd除外)

top 查看内存

df-lh 查看磁盘     ps -a 查看所有进程

修改权限     chomd

修改所有者  chown    压缩  tar -zcvf

解压  tar -zxv     查看日志   tail -f

查找   find locate  复制    dd    删除   rm

杀死进程    kill    创建文件夹    mkdir

移动:mv  

  1. 如何查看一个进程是否在运行

  1. 如何查看服务器当前CPU使用情况

  1. 什么是fast_cgi,什么是cgi.什么是php-fpmcgi, php cgi,他们之间的区别

Cgi 看做是一个面向过程        php_cgi(php里的面向过程)  

fast_cgi 就是一个面向对象(mvc)        php_fpm (各种框架)

  1. session 于cookie的 原理及token 的作用?

Cookie概念

      

Session的概念

   Session 是存放在服务器端的类似于HashTable结构来存放用户数据;

   作用:实现网页之间数据传递,是一个存储在服务器端的对象集合。    原理:当用户请求一个Asp.net页面时,系统将自动创建一个Session;退出应用程序或关闭服务器时,该Session撤销。系统在创建Session时将为其分配一个长长的字符串标识,以实现对Session进行管理与跟踪。

  1. 数据库优化做了哪些 项目优化做了哪些?

   mysql优化,负载均衡,缓存,静态页

  1. 数组实现队列用哪些函数?

  1. redis 实现对列 关键点是什么 用了什么函数?

  用了list

  1. Mysql日志有哪些 ,这个 日志 默认文件格式 是什么 和文件格式 有哪些?

  1. 客户端禁掉 cookie session还能用吗?

  1. 知道的PHP加密有哪些?

  1. 用过的webserver 有哪些?

Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务

Nginx apache

  1. 主主复制和主从复制的区别?

https://www.cnblogs.com/Richardzhu/archive/2013/11/14/3422840.html

 主主数据能互相同步,主主复制一用作个般高容灾方

  1. redis 持久化了解多少?

Aof(日志),rdb(快照)

  1. 用户表 做分表 hash分表之后 产生重复的数据怎么办?

  主表判断

  1. 了解的设计模式 单例模式怎么实现的?

三私一公

  1. 抽象类和接口类的区别?

抽象类要被子类继承,接口要被类实现。

抽象类里可以没有抽象方法

如果一个类里有抽象方法,那么这个类只能是抽象类

抽象方法要被实现,所以不能是静态的,也不能是私有的。

接口可继承接口,并可多继承接口,但类只能单根继承、

  1. 怎么防止form 表单多次提交?

  disabled

  1. 用过哪些版本控制软件?介绍一下?

Git和svn

git和其他版本控制系统(如 CVS)有不少的差别,git本身关心文件的整体性是否有改变,但多数的 CV S或 Subversion 系统则在乎文件内容的差异。因此git更像一个文件系统,直接在本机上获取数据,不必连接到主机端获取数据。

  SVN 是集中式或者有中心式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

      Git 是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

  1. 了解的魔术方法有哪些?

   __construct()   实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。

__destruct()   当删除一个对象或对象操作终止时被调用。

__call()      对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。

__get()    读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。

__set()     设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。

__toString()   打印一个对象的时被调用。如echo $obj;或print $obj;

__clone()     克隆对象时被调用。如:$t=new Test();$t1=clone $t;

__sleep()     serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

__wakeup()    unserialize时被调用,做些对象的初始化工作。

__isset()     检测一个对象的属性是否存在时被调用。如:isset($c->name)。

__unset() unset一个对象的属性时被调用。如:unset($c->name)。

__set_state()  调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

__autoload()   实例化一个对象时,如果对应的类不存在,则该方法被调用。

  1. 怎么保证接口的安全,做了哪些操作?

  1、当用户登录APP时,使用https协议调用后台相关接口,服务器端根据用户名和密码时生成一个access_key,并将access_key保存在session中,将生成的access_key和session_id返回给APP端。

2、APP端将接收到的access_key和session_id保存起来

3、当APP端调用接口传输数据时,将所传数据和access_key使用加密算法生成签名signature,并将signature和session_id一起发送给服务器端。

4、服务器端接收到数据时,使用session_id从session中获取对应的access_key,将access_key和接收到的数据使用同一加密算法生成对应signature,如果生成的签名和接收到的signature相同时,则表明数据合法

  1. sql注入和xss攻击了解多少,怎么实现的攻击?

Xss攻击是跨站脚本工具    Csrf攻击是跨站请求伪造   sql注入   DDOS流量攻击?

防止xss脚本攻击:

XSS攻击即跨站脚本攻击,通过篡改网页,注入恶意的HTML脚本,控制 用户浏览器进行恶意操作的一种攻击。

防止: script注入,转义过滤script标签。Htmlentities(把字符串转为html实体)

防止csrf跨站请求伪装:

CSRF的防御可以从服务端和客户端两方面着手,防御效果是从服务端着手效果比较好,现在一般的CSRF防御也都在服务端进行。

1:.Cookie Hashing(所有表单都包含同一个伪随机值):

2:验证码

3:One-Time Tokens(不同的表单包含一个不同的伪随机值)

防止sql注入:

1执行sql语句是使用addslashes进行sql语句转换

       2 sql语句书写尽量不要省略双引号和单引号

       3 过滤掉sql语句里的关键词 :update insert delete select *

       4 PHP配置文件中设置register_global为off,关闭全局变量注册

       5 控制错误信息 不要把错误信息输出到浏览器上 应保存在错误日  

防止DDOS流量攻击:

1 使用工具:DDoS deflate . 自动查封IP.

2 解析域名到127.0.0.1 让攻击方自己攻击自己

3 把网站做成静态页面

4 限制S YN/ICMP流量

  1. 面向过程,面向对象的区别?

  把面向过程封装起来就是面向对象

  1. php 怎么屏蔽错误?

  方法一:@         在任何错误语句之前加上@符号,即可屏蔽! 方法二:error_reporting        在PHP文件第一行加上:error_reporting(0); 即可屏蔽! 方法三:display_errors        打开php.ini文件,搜索display_errors = on,默认的应该是on,改为off 即可屏蔽!

  1. memcache 的原理?

在Web服务开发中,服务端缓存是服务实现中所常常采用的一种提高服务性能的方法。其通过记录某部分计算结果来尝试避免再次执行得到该结果所需要的复杂计算,从而提高了服务的运行效率。

  1. mysql连接池什么时候初始化?

第一次连接数据库时

  1. curl 和 file_get_contronts()的区别?

  1. php超全局变量有哪些?

$GLOBALS  储存全局作用域中的变量

$_SERVER  获取服务器相关信息

$_REQUEST  获取POST和GET请求的参数

$_POST  获取表单的POST请求参数

$_GET  获取表单的GET请求参数

$_FILES  获取上传文件的的变量

$_ENV  获取服务器端环境变量的数组

$_COOKIE   浏览器cookie的操作

          设置cookie:setcookie(name, value, expire, path, domain);

          获取cookie:$_COOKIE["user"];

          删除cookie:setcookie("user", "", time()-3600);//设置过期时间

$_SESSION  服务端session的操作

          使用session前一定要session_start()启动session

          储存session:$_SESSION["name"]="King";//数组操作

          销毁session:unset($_SESSION["name"]);//销毁一个

session_destroy()和unset($_SESSION);//销毁所有的session

  1. tcp和udp的区别?

小结TCP与UDP的区别:  1.基于连接与无连接;  2.对系统资源的要求(TCP较多,UDP少);  3.UDP程序结构较简单;  4.流模式与数据报模式 ;  5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

  1. myisam 和 innodb 谁支持事物 谁支持外键?

Innodb 支持事务,innodb 支持外键

  1. 说下常见的 http 返回状态码?

所有 HTTP 状态代码及其定义。 代码  指示  2xx  成功  200  正常;请求已完成。  201  正常;紧接 POST 命令。  202  正常;已接受用于处理,但处理尚未完成。  203  正常;部分信息 — 返回的信息只是一部分。  204  正常;无响应 — 已接收请求,但不存在要回送的信息。 

3xx  重定向  301  已移动 — 请求的数据具有新的位置且更改是永久的。  302  已找到 — 请求的数据临时具有不同 URI。  303  请参阅其它 — 可在另一 URI 下找到对请求的响应,且应使用 GET 方法检索此响应。  304  未修改 — 未按预期修改文档。  305  使用代理 — 必须通过位置字

标签: 压力变送器mpm486mpm430压力变送器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台