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后的方法:一、<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%':查看当前字符集设置 1五、如何查看SQL语句的执行效率? 1六、关系数据库中,索引的做用主要有哪些,通常什么状况下须要建索引? 并简述索引都有哪几种类型,有何区别? 提升查询速度,有利于排序和分组. (排序和分组如用不上索引,则会产生临时表和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.一、索引:提升了查询速度,下降了增删改的速度 索引操做: 查看索引: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 1七、在使用多列索引或创建多列索引时,咱们通常要遵循“最左前缀原则”。请简单说明“最左前缀原则”。 针对单列索引, 左边准确而右边模糊,能够用到索引,反之则不能够. 如 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数据中常见 中文 , html实体 2四、请给出能知足下面要求的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 查看文件大小 2五、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个参数的值 ... 2六、lnmp搭建步骤 2七、js事件委托 有时候进行某个事件操做,可能操做对象是不少相似的对象,不可能所有绑定同一个方法 这个时候用事件委托,将事件绑定到这些类似对象的上一级,如td绑定到table var table = document.getElementsByTagName('table')[0]; table.onclick = function(ev){ ev.srcElement.style.background = '#000'; } 2八、框架,tp,laravel(队列?),yii,node.js 2九、面向对象 单例模式 几个类 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; } } 3一、memcached、redis、mongodb以及它们之间的区别 3二、邮件发送协议:SMTP、POP三、IMAP4 3三、 3三、$GLOBALS和global区别 $GLOBALS:全局变量数组 global:在函数内容声明某个变量是全局变量中的某一个变量, 而后能够对这个声明的变量进行全局增删改查 例如: $c = 1; echo $c;//1 function a(){ global $c; $c = 222; } a(); echo $c;//222 3四、字符串函数: 正则经常使用函数: preg_split()将字符串,按正则一个一个字符分割到数组中 字符串函数: strrev,反转字符串 str_split,按指定字符串长度拆成数组 chunk_split,按照指定的长度进行切割字符串并加上其余字符如 123434--->123,434 number_format 千分位格式化数字 3五、多练习理解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'; ?> 3六、服务器反向代理,集群,负载均衡 反向代理:动静分离等, 也就是对应不一样的请求使用不一样的服务器, 如:访问一个页面时,用一个服务器来解析html,一个解析php,一个服务器来存图片并,请求的时候返回图片资源等 集群:多个服务器,放在一个服务器组里面,当有请求时,将请求给服务器组。 配置例子: upstream aaaserver{ sever 192.168.3.1:80....... sever 192.168.3.2:80....... sever 192.168.3.3:80....... } 负载均衡:当请求给服务器组时,将请求按照必定(算法、策略),分发给服务器组里面的各个服务器 3七、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 ④索引的优化 经常使用符合索引来优化,同时用几个字段来索引 3八、查看sql语句执行效率 a:使用explain + select语句 b:set profiling=1,show profiles 设计模式,数据库设计,优化,laravel,tp