1.如何取得来访者的IP地址?

	$_SERVER[‘RRMOTE_ADDR’]; $_SERVER[‘CLIENT_IP’]; $_SERVER[‘HTTP_X_FORWARED_FOR’];

2.$_FILES的结构
Array
(
    [pic] => Array
        (
            [name] => 菜单2.jpg
            [type] => image/jpeg
            [tmp_name] => E:\sssssss\tmp\php1923.tmp
            [error] => 0
            [size] => 288583
        ) ) 3.session,cookie的区别
存储位置: cookie存储在浏览器,session存于服务器.
存储类型: cookie 能存储字符串,数字,不能存储数组,对象 session可以存储所有类型(除了资源)
存储大小不同:受浏览器的限制,不同浏览器对于cookie的个数和大小,有限制. session存储在文件上,因此可以存储较大内容.
安全性: 不能够直接信任cookie数据,因为可以伪造,要加盐验证,
session需要利用cookie来传递session_id.
禁用cookie后的方法:1、<input type="text" name="PHPSESSID" value="g6fgb641che30nre1bccvgeu23">
    cookie和session的设置和过期时间问题
    setcookie('test','hello',3600,'/');cookie,只要是根目录下的都可以访问
    session_start();
    $_SESSION["username"]="lhp";
4.函数:
pathinfo();
$url = "http://www.lagou.com/jobs/2499163.html?source=delivered&i=delivered-5";
$res = pathinfo($url);
Array
(
    [dirname] => http://www.lagou.com/jobs
    [basename] => 2499163.html?source=delivered&i=delivered-5
    [extension] => html?source=delivered&i=delivered-5
    [filename] => 2499163
) 字符串函数:
截取查找等
addslashes那几个函数
数组函数:
排序等 php获取mysql查询结果集总数的函数是?
mysql_num_rows(资源) // 获取select语句的返回行数
mysql_affected_rows(); // 获取insert/update/delete 语句的影响行数 5.请简述你对MVC设计模式的理解和常见开发设计模式
    mvc模式:
      m model 
      v view 
      c controller
      请求访问controller,经过controller进行逻辑处理,若需要进行数据增删改查,则通过controller处理好数据然后调用model,再根据model返回的数据进行处理,显示在view上
    
    开发设计模式
       单例模式:让某个类的实例只有一个,不重复,可以节约资源,防止new的滥用,常用在mysql,购物车
       工厂模式:将类的功能实现具体细节封装起来,开放某些接口,供外部调用,不让外部了解里面具体细节
       观察者模式:需要观察者和被观察者,通过被观察者的一些状态的变化,让观察者去进行相关业务处理 6.递归打印某个磁盘目录,结构和文件
使用到opendir(),readdir(),closedir();
判断是否为.和.. 是的话要过滤掉
判断是否是目录 是的话则递归调用本函数
7.PHP魔术方法(或函数)和魔术变量
__construct(),__destruct(),__get(),__set(),__isset(),__unset(),__unset(),__clone()等
__FILE__ 代表当前文件路径
__LINE__ 当前行数
__DIR__ 当前目录
__FUNCTION__ 当前函数名
__CLASS__ 当前类名
7.1 请简述php异常处理机制 语法
try{
throw new Exception("Error Exception", 1);
}catch(Exception $e){
echo $e -> getMessage ();
}
8.你的代码在本地正常,上传到购买的虚拟主机后,显示空白. 该如何调试?
查看日志.
如果程序没有日志, 只能看PHP的原始报错,想想,为什么空白?
php.ini有2个设置: 
display_errors,修改为on,
error_reporting(E_ALL);
同时,由于虚拟主机,你无权修改php.ini, 
在php脚本中,动态修改ini,用ini_set();
综上: ini_set(‘display_errors’ , 1);
error_reporting(E_ALL); 
9.以下HTTP状态码的含义 404,403,200,302,304,500
404 Not Found
403 forbidden
200 OK
302 临时重定向
304 not modified
500 服务器内部错误
10.各种服务的默认端口号:
http:80
https:443
tomcat:8080 mysql:3306 ftp:21
ssh:22
telnet:23
smtp:25 php-fpm:9000 memcached:11211
redis:6379
mongodb:27017
sphinx:9312
11.写一个最简单的单例类
final class single{
protected static $ins=null;
protected function __construct(){}
public static function getIns(){
if(self::$ins==null){
self::$ins = new self();
}
return self::$ins;
}
protected function __clone(){}
}
12.说出你用的框架,并比较他们之间的差异
TP, laravel
1. laravel的路由更简单灵活,直接指向控制器的方法,而tp是通过m/c/a的方式获取对应参数,来访问对应模块下控制器的方法
2. laravel接管了网站的全过程,数据库(迁移文件,migration)+mvc(路由)+错误处理
3. laravel的传参和获取参数方式不一样,它有一个强大的request对象
4. laravel模板blade语法更接近php语法,相对tp里面的改过的smarty模板更简单
5. laravel引入第三方类库方式比较好,大大提高开发人员使用第三方类库的效率 数据库
13.简述char与varchar的区别
分别是定长与变长.
以char(M)为例, 可以存储0-M个字符,存储不够M个字符, 仍然占据M个字符的宽度.(不够M个,右侧用空格补齐).
varchar(M),可以存储0-M个字符,但需要1-2个额外的字节,来标注此字段具体的大小.
14.ddl语句,数据表建立等语句
    1.复习秘籍.html 练习一遍
    2.show TABLE status [where name='art'] 
        //查看表的详细信息
        //里面有comment标注是 表 还是 视图
        show VARIABLES like '%character%':查看当前字符集设置 15、如何查看SQL语句的执行效率?
16、关系数据库中,索引的作用主要有哪些,一般什么情况下需要建索引?
并简述索引都有哪几种类型,有何区别?
提高查询速度,有利于排序和分组. (排序和分组如用不上索引,则会产生临时表和filesort的过程)
根据业务逻辑,分析列查询的频度和顺序, 建立索引和复合索引.
主键索引(primary key), ---->不需要有索引名,因为只有一个主键索引
唯一索引(unique key)
---->unique key email(email(10))
括号里面是表字段,外面是索引名字,其他索引一样
里面的10是指索引的长度,如1234567899@qq.com,只取出了前面10个字符做索引
普通索引(key),
全文索引(fulltext key)--->中文环境下基本无效,一般用第三方方案如sphinx(中文分词)
多列索引:key xm(xing,ming)用xing和ming两个字段做索引
冗余索引:在某个字段上有多个索引,如 key xm(xing,ming) ,key m(ming),有两个 就是冗余索引
16.1、索引:提高了查询速度,降低了增删改的速度
  索引操作:
   查看索引:show index from table tbname,show create table tbname
   删除索引:alter table tbname drop index key1,drop index key1 from tbname
   添加索引:alter table tbname add index key1(字段)
   添加主键索引:alter table tbname add primary key(id)
   删除主键索引:alter table tbname drop primary key 17、在使用多列索引或建立多列索引时,我们一般要遵循“最左前缀原则”。请简单说明“最左前缀原则”。
针对单列索引, 左边准确而右边模糊,可以用到索引,反之则不可以.
如 where name like ‘poly%’,可以用到, 而”%poly”则不用到.
针对多列索引, 左边的列用到索引后,右侧的列才有可能用到索引.
例 index(a,b,c), where a=? and b=? ,b列索引会用到.
如果直接 where b=?, 因为a列没用索引,所以b索引,用不到. 17.1事务
四大特性:隔离性,原子性,一致性,持久性
17.2 mysql引擎
常见三种:
innodb:所有数据在一个文件中
myisam:数据分类存储
memory:内存
innodb和myisam区别:
innodb(李小心):支持事务,不支持全文索引,行锁(更细),支持多种索引
myisam(张马虎):不支持事务,支持全文索引,表锁,只支持B树索引
linux
18.查找当前目录下,所有的.php文件
答: find . -name “*.php”
19. 查找当前目录下,所有的.php文件并匹配含有”dog”的行
答: find . -name “*.php” | xargs  grep dog
20.有一个备份程序 mybackup.sh,需要每天凌晨3点执行一次,crontab命令格式怎么写?
答: crontab -e 进入编辑状态.
    0 3 * * * /bin/bash mybackup.sh
21.请简述php会话(session)实现原理,并考虑如下问题:
禁用了cookie,session能否使用?
如何把session存储数据库/memcached/redis
如何实现一个严格的30分钟过期的会话?、
如何实践web服务器集群的会话共享?
如何实现两个不同域站点的会话共享?
答: 能!
cookie和session的关系
cookie传递session_id,供服务器决定session文件.
所以只要能向服务器传递session_id,session就能正常使用.
而cookie只是传递session_id的一种方式而已.
用url也能传递session_id
php.ini 配置如下:
session.use_only_cookies = 0
session.use_trans_sid = 1
OK了. class sess {
    protected static $mem = null;     public static function open() {
        if(self::$mem === null) {
            self::$mem = new memcache();
            self::$mem->connect('localhost' , 11211);
        }
    }     public static function close() {
        self::$mem->close();
    }     public static function read($id) {
        return self::$mem->get($id);
    }     public static function write($id , $data) {
        return self::$mem->add($id,$data , false);
    }     public static function destroy($id) {
        return self::$mem->delete($id);
    }     public static function gc($lifetime) {
        // 
    }
} session_set_save_handler('sess::open', 'sess::close', 'sess::read', 'sess::write', 'sess::destroy', 'sess::gc'); ?> 如何实现30分钟过期的session?
答: 1. 加时间戳, $_SESSION[‘expire’] = time()+1800;
业务逻辑去判断. 2.ini_set(‘session.cookie_lifetime’ , 1800)
3.或者用memcache,存储的时候,加上1800的有效期.
4.接管session处理权,第1题中,$mem->connect(‘专门的一台memcached服务器’).
把session文件放在专门的服务器中. 各个web服务器共享此session服务器.
5.如果不跨主域, 如book.163.com, lady.163.com , mil.163.com
在setcookie(‘key’,’value’,’expire’ , /path‘ , ‘.163.com’);
域名只写到主域名,cookie将会在各个子域名生效. 如果必须跨域,我们依照oauth原理.
22.在不刷新新页面的前提下,js有哪几种方式可以向后端服务发起请求?怎么通过前后端的配置实现跨域请求?
ajax (默认不能跨域)
jsonp(可以跨域)
document.createElement(‘img’);
img.src=’xx.com/url’;
也可以通过最新的XHR对象的特点, 在服务端发送头信息 Access-Control-Allow -Origin: *
同步和异步的区别:
同步需要等待返回结果才能继续,异步不必等待 23请指出下面几种编码分别是什么格式:
%E4%B8%AD%E6%96%87
%D6%D0%CE%C4  URL encoded, php有urlencoded, js用encodeURI
0xe40xb80xad0xe60x960x87 ,十六进制
\u4e2d\u6587   , unicode码,返回的json数据中常见
中&#25991 , html实体 24、请给出能满足下面要求的linux命令:   1) 查看系统的运行状态(CPU/内存/负载等);
top   ,  
cat /proc/meminfo 查看内层状态
cat /proc/cpuinfo
w 命令可以看到  load average: 0.00, 0.00, 0.00   2)重启apache/httpd/nginx服务(写出一条即可);
apache:  /path/to/apache/httpd -k start|stop|restart
nginx:   /path/to/nginx/sbin/nginx -s reload 24.1 查看文件大小 25、PHP运行模式:
1) CGI (通用网关接口 / Common Gatew ay I nterface)
CGI 即通用网关接口:每有一个用户请求,都会先要创建CGI 的子进程,然后处理请求,
处理完后结束这个子进程,
这就是Fork-And-Ex ecute模式。 当用户请求数量非常多时,会大量挤占系统的资源如
内存, CPU 时间等,造成效能低下。
属于PH P早期的运行模式,目前使用较少;
2) FastCGI (常驻型CGI  / Long-Live CGI )
FastCGI 是CGI 的升级版本, FastCGI 像是一个常驻 (long-live)型的 CGI ,它可以一直执行
着,只要激活后,
不会每次都要花费时间去 Fork 一次 (这是 CGI  最为人诟病的 fork-and-ex ecute 模
式)。
3) Web模块模式( Apache等Web服务器运行的模式)
模块的作用是接收Apache传递过来的PH P文件请求,并处理这些请求,然后将处理后
的结果返回给Apache。然后在返回给用户;
4) CLI (命令行运行 / Command Line I nterface)
PH P-CLI 是PH P Command Line I nterface的简称,如同它名字的意思,就是PH P在命令行运行的接口,
区别于在Web服务器上运行的PH P环境( PH P-CGI , I SAPI 等)。
PH P 的命令行模式能使得 PH P 脚本能完全独立于 w eb 服务器单独运行。
切换目录到php.ex e所在文件夹; 在cli命令行模式下:
命令行下如何接收参数 命令行下如何接收参数
用$argv来接收参数,
$argv是一个数组,
第0个单元,代表php文件的名称
第1个单元,代表第1个参数的值
第2个单元,代表第2个参数的值
...
26、lnmp搭建步骤 
27、js事件委托
有时候进行某个事件操作,可能操作对象是很多类似的对象,不可能全部绑定同一个方法
这个时候用事件委托,将事件绑定到这些相似对象的上一级,如td绑定到table
var table = document.getElementsByTagName('table')[0];
table.onclick = function(ev){
ev.srcElement.style.background = '#000';
}
28、框架,tp,laravel(队列?),yii,node.js
29、面向对象 单例模式  几个类
30、排序算法代码(冒泡,快速等)
冒泡排序:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
代码:
function bubbleSort($numbers) {
    $cnt = count($numbers);
    for ($i = 0; $i < $cnt; $i++) {
        for ($j = 0; $j < $cnt - $i - 1; $j++) {
            if ($numbers[$j] > $numbers[$j + 1]) {
                $temp = $numbers[$j];
                $numbers[$j] = $numbers[$j + 1];
                $numbers[$j + 1] = $temp;
            }
        }
    }  
    return $numbers;
}
 
$num = array(20, 40, 60, 80, 30, 70, 90, 10, 50, 0);
var_dump(bubbleSort($num)); 快速排序:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
代码:
function quickSort(&$arr){
    if(count($arr)>1){
        $k=$arr[0];
        $x=array();
        $y=array();
        $_size=count($arr);
        for($i=1;$i<$_size;$i++){
            if($arr[$i]<=$k){
                $x[]=$arr[$i];
            }elseif($arr[$i]>$k){
                $y[]=$arr[$i];
            }
        }
        $x=quickSort($x);
        $y=quickSort($y);
        return array_merge($x,array($k),$y);
    }else{
        return $arr;
    }
} 31、memcached、redis、mongodb以及它们之间的区别
32、邮件发送协议:SMTP、POP3、IMAP4
33、 33、$GLOBALS和global区别
$GLOBALS:全局变量数组
global:在函数内容声明某个变量是全局变量中的某一个变量,
然后可以对这个声明的变量进行全局增删改查
例如:
$c = 1;
echo $c;//1
function a(){
global $c;
$c = 222;
}
a();
echo $c;//222 34、字符串函数:
正则常用函数:
preg_split()将字符串,按正则一个一个字符分割到数组中
字符串函数:
strrev,反转字符串
str_split,按指定字符串长度拆成数组
chunk_split,按照指定的长度进行切割字符串并加上其他字符如 123434--->123,434
number_format 千分位格式化数字 35、多练习理解memcached、redis、momgodb 三者应用如下
<?php
$mem = new memcache;
$mem->connect('localhost',11211);
//通过memcached来设置一个自增的id
$_id = $mem->increment('_id'); $mongo = new mongoClient;
$test = $mongo->test;
$book = $test->book; //用自增的id来放到mongodb的json串中
$data = ['_id'=>$_id,'title'=>$_POST['title']];
$book->insert($data); $tags = explode(',',$_POST['tags']);
$redis = new redis;
var_dump($redis->connect('localhost',6379)); foreach($tags as $v){
    echo $v;
//使用redis来保存标签tags的内容
    $redis->sAdd($v,$_id);
}
echo 'OK';
?> 36、服务器反向代理,集群,负载均衡
反向代理:动静分离等, 也就是对应不同的请求使用不同的服务器,
如:访问一个页面时,用一个服务器来解析html,一个解析php,一个服务器来存图片并,请求的时候返回图片资源等 集群:多个服务器,放在一个服务器组里面,当有请求时,将请求给服务器组。
配置例子: 
upstream aaaserver{
sever 192.168.3.1:80.......
sever 192.168.3.2:80.......
sever 192.168.3.3:80.......
}
    
    负载均衡:当请求给服务器组时,将请求按照一定(算法、策略),分发给服务器组里面的各个服务器 37、mysql优化
①原则:不查-->少查-->内存查-->磁盘查-->少排序(最好的优化是少查询)
②表的优化:
    a定长和变长字段分离--->核心且常用字段宜建成定长,放一张表
    b常用和不常用字段分离
    c需要关联同级的表中,添加冗余字段
        如:一个文章表中,展示文章的时候经常要用到作者名,
            这个时候可以在文章表中加上用户(作者)uname,从而不用去连表查用户表
    ③列的选择:
     a字段类型优先级--->int>date,time<enum.char>varchar>blob,text
     b长度够用就行--->如age用tinyint最大可存255,用int浪费了3个字节
      因为大的字段,浪费内存,影响速度
     c尽量避免用null
       因为null不利于索引,要用特殊字段来标注
       另外查询也不方便,还需要用is null或is not null
    ④索引的优化
        常用符合索引来优化,同时用几个字段来索引 38、查看sql语句执行效率
a:使用explain + select语句 
b:set profiling=1,show profiles   设计模式,数据库设计,优化,laravel,tp

php常见面试题的更多相关文章

  1. java常见面试题及答案 1-10(基础篇)

    java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...

  2. Web开发的常见面试题HTML和HTML5等

    作为一名前端开发人员,HTML,HTML5以及网站优化都是必须掌握的技术,下面列举一下HTML, HTML5, 网站优化等常见的面试题: HTML常见面试题: 1. 什么是Semantic HTML( ...

  3. 常见面试题之ListView的复用及如何优化

    经常有人问我,作为刚毕业的要去面试,关于安卓开发的问题,技术面试官会经常问哪些问题呢?我想来想去不能一股脑的全写出来,我准备把这些问题单独拿出来写,并详细的分析一下,这样对于初学者是最有帮助的.这次的 ...

  4. iOS常见面试题汇总

    iOS常见面试题汇总 1. 什么是 ARC? (ARC 是为了解决什么问题而诞生的?) ARC 是 Automatic Reference Counting 的缩写, 即自动引用计数. 这是苹果在 i ...

  5. JDBC常见面试题

    以下我是归纳的JDBC知识点图: 图上的知识点都可以在我其他的文章内找到相应内容. JDBC常见面试题 JDBC操作数据库的步骤 ? JDBC操作数据库的步骤 ? 注册数据库驱动. 建立数据库连接. ...

  6. Mybatis常见面试题

    Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是 ...

  7. JavaSE:数据类型之间的转换(附常见面试题)

    数据类型之间的转换 分为以下几种情况: 1)低级到高级的自动类型转换: 2)高级到低级的强制类型转换(会导致溢出或丢失精度): 3)基本类型向类类型转换: 4)基本类型向字符串的转换: 5)类类型向字 ...

  8. 整理的最全 python常见面试题(基本必考)

    整理的最全 python常见面试题(基本必考) python 2018-05-17 作者 大蛇王 1.大数据的文件读取 ① 利用生成器generator ②迭代器进行迭代遍历:for line in ...

  9. PHP常见面试题汇总(二)

    PHP常见面试题汇总(二)   //第51题:统计一维数组中所有值出现的次数?返回一个数组,其元素的键名是原数组的值;键值是该值在原数组中出现的次数 $array=array(4,5,1,2,3,1, ...

  10. java常见面试题及答案

    java常见面试题及答案 来源 https://blog.csdn.net/hsk256/article/details/49052293 来源 https://blog.csdn.net/hsk25 ...

随机推荐

  1. HTML <select>标签

    1.简单的下拉列表 <html> <body> <form> 名: <select name="firstname"> <op ...

  2. Ubuntu问题:E45: 'readonly' option is set (add ! to override)错误解决

    问题描述:E45: 'readonly' option is set (add ! to override) 问题分析:该错误为当前用户没有权限对文件作修改 问题解决: 输入 :w !sudo tee ...

  3. shell实例练习+详解

    想着将Shell与Python和Java等脚本比较比较,当一有这个念头我就放弃了.这太侮辱Shell了.(哭笑脸!) 作为一个程序员,Linux那是最基本要求.而shell脚本有时候也会显示它在Lin ...

  4. struts 中的addFieldError

    addFieldError("字段名","错误信息")给一个字段(属性)添加错误消息 在action中添加 this.addFieldError("p ...

  5. 赋值号和printf

    1.赋值号会自动转换类型: int a= 2.1; printf(‘‘%d’’,a);         //输出结果是2 2.printf不会转换类型,而是直接将内存中表示的补码数拿出来,最明显的就是 ...

  6. 备忘:Junit单元测试

    junit 目前测试都是在main方法中调用目前的结果都需要人工对比是否是想要的 1.使用Junit测试方法,绿色条条代表方法测试成功,没有bug,如果是红色条条代表有异常,测试不通过2.点击方法名. ...

  7. rabbitmq的构架和原理(三)

    前面两篇博文已经将环境安装和相关配置介绍了,现在开始正式学习rabbitmq的使用了: rabbitMQ的构架 rabbitmq作为消息队列,一条消息从发布到订阅消费的完整流程为: 消息 --> ...

  8. python unicode 字节串转成中文问题

    字符串:s = r"\u65b0\u6d6a\u5fae\u535a\u6ce8\u518c" 转换为中文:s = s.decode("unicode_escape&qu ...

  9. python中的线程之semaphore信号量

    semaphore是一个内置的计数器 每当调用acquire()时,内置计数器-1 每当调用release()时,内置计数器+1 计数器不能小于0,当计数器为0时,acquire()将阻塞线程直到其他 ...

  10. LVS、Nginx和HAProxy负载均衡器对比总结

    LVS特点: 1.抗负载能力强,使用IP负载均衡技术,只做分发,所以LVS本身并没有多少流量产生: 2.稳定性.可靠性好,自身有完美的热备方案:(如:LVS+Keepalived) 3.应用范围比较广 ...