面试知识点3

  1. PHP打印出前一天的时间格式是2010-7-3 12:28:21?

echo date(‘Y-m-d H:i:s, strtotime(‘-1 days’)); javascript

 

  1. 下面哪一个方式不能取出$q = ‘obodol’;的第一个字母()

A:$a{0}  B:left{$a,1}   C:substr($a,0-strlen($a),1);    D:$a[0]php

 

  1. 实现中文字符串截取无乱码的方法?

1) mbstring扩展库的mb_substr截取html

2) 自定义函数前端

 

  1. PHPerror_reporting函数有什么做用?PHP的错误类型都有哪些?

1) error_reporting() 设置 PHP 的报错级别并返回当前级别。java

2) 1 E_ERROR 致命的运行错误。错误没法恢复,暂停执行脚本。mysql

3) 2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会中止。linux

4) 4 E_PARSE 编译时解析错误。解析错误只由分析器产生。web

5) 8 E_NOTICE 运行时提醒(这些常常是你代码中的bug引发的,也多是有意的行为形成的。)ajax

6) 8191 E_ALL 全部的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0)正则表达式

 

  1. PHP如何实现页面跳转

1) 方法一:php函数跳转,缺点,header头以前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。

2) header("Location:网址");//直接跳转

3) header("refresh:3;url=http://www.baidu.com");//三秒后跳转

 

  1. sessioncookie的区别?

1) session:储存用户访问的全局惟一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放

2) cookie:用来存储连续访问一个頁面时所使用,是存储在客户端,对于Cookie来讲是存储在用户WINTemp目录中的。

3) 二者均可经过时间来设置时间长短。

 

  1. 如何获取经过setcookie设置的cookie中键名带点(.)的值?

1) 点换为下划线获取。

2) 如:setcookie('user.name', 'zhangsan');

3)  setcookie('user.age', '18');

4) 则须要经过$_COOKIE[‘user_name’]$_COOKIE[‘user_age’]获取,经过var_dump($_COOKIE)可确认。

 

  1. 如何合并数组?

1) 操做符+,在前一个数的基础上插入后一个数组,若是有相同的抛弃。

2) array_merge 是在前一个参数基础上插入后一个参数,若是有相同用的key 用后一个覆盖。

 

  1. 合并数组array_merge([1,2,3], [3,4,5])的结果是什么?

[1,2,3,3,4,5]

 

  1. 下列哪一个选项没有将john添加到users数组中()
    1. $user=array[“john”]
    2. array_unshift[$users,”john”]
    3. array_push[$users,”john”]
    4. $users  || = john

 

  1. "$array[anykey]" "$array[anykey]" 有什么区别?

索引数组和关联数组的区别

 

  1. 数组arsort的做用?

1) 对数组进行逆向排序并保持索引关系。

2) 相似的函数还有:

  1. sort — 对数组排序
  2. asort — 对数组进行排序并保持索引关系
  3. rsort — 对数组逆向排序
  4. arsort — 对数组进行逆向排序并保持索引关系
  5. usort — 使用用户自定义的比较函数对数组中的值进行排序
  6. uasort — 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
  7. uksort — 使用用户自定义的比较函数对数组中的键名进行排序
  8. 下面功能PHP没法实现的是()
    1. 服务器脚本运行
    2. 命令行脚本运行
    3. 客户端图形界面(GUI) 程序
    4. 浏览器执行DOM操做

 

  1. 下面哪一个方法不能读取网址”http://www.qq.com “的内容()
    1. file_get_contents()   
    2. read_exif_data()
    3. socket_read()       
    4. curl_exec()

 

  1. 抓取远程图片到本地,你会用什么函数?

file_get_contents或者curl

 

  1. PHP的位运算符不包括()

A.&    B.|  C. ~   D.!

 

  1. 要检查PHP常量是否认义,可使用函数()

A. defined()       B. ifdefin()        C. ifdefined()        D. 无

 

  1. 如下说法不正确的是( )

A. php有四种标量类型:布尔类型(boolean),整型(integer),浮点型(float),字符串(string)

B.浮点型(float)与双精度型(double)是同一种类型

C.复合类型包括:数组(array),对象(object),资源(resource)

D.伪类型:混合型(mixed),数字型(number),回调(callback)

 

  1. 表单中的 GET POST 提交方法有什么区别?

1) GET请求的数据会附在URL以后,POST把提交的数据则放置在是HTTP包的包体中。

2) GET方式提交的数据最多只能是1024字节, POST是没有大小限制的,HTTP协议规范也没有进行大小限制。

3) POST的安全性要比GET的安全性高。经过GET提交数据,用户名和密码将明文出如今URL上,由于(1)登陆页面有可能被浏览器缓存,(2)其余人查看浏览器的历史纪录,那么别人就能够拿到你的帐号和密码了,除此以外,使用GET提交数据还可能会形成Cross-site request forgery攻击。

 

  1. GD库是作什么用的?

1) GD库提供了一系列用来处理图片的功能,使用GD库能够处理图片,或者生成图片。

2) 在网站上GD库一般用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

 

  1. PHP魔术方法都有哪些?

1) __construct(),类的构造函数

2) __destruct(),类的析构函数

3) __call(),在对象中调用一个不可访问方法时调用

4) __callStatic(),用静态方式中调用一个不可访问方法时调用

5) __get(),得到一个类的成员变量时调用

6) __set(),设置一个类的成员变量时调用

7) __isset(),当对不可访问属性调用isset()empty()时调用

8) __unset(),当对不可访问属性调用unset()时被调用。

9) __sleep(),执行serialize()时,先会调用这个函数

10) __wakeup(),执行unserialize()时,先会调用这个函数

11) __toString(),类被当成字符串时的回应方法

12) __invoke(),调用函数的方式调用一个对象时的回应方法

13) __set_state(),调用var_export()导出类时,此静态方法会被调用。

14) __clone(),当对象复制完成时调用

15) __autoload(),尝试加载未定义的类

16) __debugInfo(),打印所需调试信息

 

  1. 怎么认识PHP的异常处理?

1) 可使用检测(try)、抛出(throw)和捕获(catch)异常。即便用try检测有没有抛出(throw)异常,如有异常抛出(throw),使用catch捕获异常。

2) 一个 try 至少要有一个与之对应的 catch。定义多个 catch 能够捕获不一样的对象。PHP 会按这些 catch 被定义的顺序执行,直到完成最后一个为止。而在这些 catch 内,又能够抛出新的异常。

 

  1. 解释下PHP的垃圾回收机制?

1) php 5.3以前使用的垃圾回收机制是单纯的“引用计数”,也就是每一个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,代表内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。

2) “引用计数”存在问题,就是当两个或多个对象互相引用造成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,可是不能回收,从而致使内存泄露;

3) php5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以免内存泄露。

 

  1. 打开php.ini中的safe_mode,会影响哪些函数?至少说出6个。(新浪)

1) safe_modePHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户帐户存在的php开发的web服务器上。当安全模式打开的时候,一些函数将被彻底的禁止,而另外一些函数的功能将会受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。

2) 注意,在php5.3以上版本,safe_mode被弃用,在php5.4以上版本,则将此特性彻底去除了。

 

  1. url中用get传值的时候,若中文出现乱码,应该用哪一个函数对中文进行编码?

Urlencode

 

  1. 如下代码执行后$matches[1 ]”的值是什么()

<?php

$a=“<H>some</H><b>html</b>“;

Preg_match(“/<\w?>(\w*?)<\/\w?>/”, $a, $matches);

?>

A.some   B.html  C.<H>some</H><b>html</b>   D.</H><b>

  1. 一下哪一个正则表达式可以抓取”//x”风格的注释而且不会误抓取如”http//x”()

A@(?<!:)//.*?$@    B: /(^:)\/\/.*?$/     C: /\/\/.*$/         D: @(?<=:)//.*?@

 

  1. 写一个匹配IP的正则表达式:

^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$

 

  1. 写一个匹配邮箱的正则表达式:

^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$

 

  1. 请写一个函数验证电子邮件的格式是否正确(要求使用正则)

preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);

 

  1. 什么是MVC

MVCModel(模型), View(视图)和Controller(控制器)组成,PHP MVC能够更高效地管理好3个不一样层的PHP代码。

Model:数据信息存取层。

Viewview层负责将应用的数据以特定的方式展示在界面上。

Controller:一般控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

 

  1. 你怎么理解命名空间?

PHP 命名空间(namespace)是在PHP 5.3中加入的.

PHP 命名空间能够解决如下两类问题:

a) 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

b) 为很长的标识符名称(一般是为了缓解第一类问题而定义的)建立一个别名(或简短)的名称,提升源代码的可读性。

 

  1. PHP如何实现缓存?

1) 数据缓存——广泛的一种缓存技术

  1. 很是直观的字面意思,就是把数据先存放好,减小对数据库的访问。第一次访问时,把要用到的数据保存到一个文件里,而后用户再次访问页面时,就先检测要查询的数据是否在缓存文件里,若存在,则直接取出,不需再次访问数据库。
  2. 通常这些数据以数组的形式保存。

2) 页面缓存

  1. 和数据缓存差很少,每次访问页面时,就检测相应的页面缓存是否存在,若不存在,则查询数据库获得相应的数据,同时生成缓存页面,这样,在下次访问就能够直接取出缓存页面,没必要再次查询数据库。

3) 内存缓存

  1. 不做过多分析,通常熟借助第三方软件进行优化,好比MemcachedRedis
  2. 以上方法可以解决频繁访问数据库的问题,可是缺少时效性,在数据库改变后,他们默认的数据仍是修改以前的。因此就要在规定时间内清除缓存,以更新数 据。好比在每次更新缓存后设定一个时间戳t1,当前的时间戳t2,规定缓存时间为T,那么,在t1t2相差在T以内时,就不更新缓存,不然,超过了T, 就从新查询数据库,清除以前的缓存,又获得一个新的时间戳,依次循环下去。

 

  1. 如下哪一项不属于PHPOPCode()

AEaccelerafor

BHCache

CAPC

DZend Framework

 

  1. 写出如下状态码含义:

1) 301 临时重定向

2) 302 重定向

3) 404 页面未找到

4) 500 服务器内部错误

 

  1. 请解释php.ini中如下配置的含义:

1) register_globals=Off

  1. register_globals=Off

接收数据的程序应该用根据表单form传值的方法来决定。GET:用$_GET['name']$HTTP_GET_VARS['name']来接收值;POST:当formPOST提交数据$_POST['name']$HTTP_POST_VARS['name']来接收值;

  1. register_globals=On

接收数据的程序能够直接使用$user_name$user_pass的这种相似访问变量的方式获得值。

2) magic_quotes_gpc=On

  1. 对于PHP magic_quotes_gpc=on的状况, 咱们能够不对输入和输出数据库的字符串数据做addslashes()stripslashes()的操做,数据也会正常显示。

若是此时你对输入的数据做了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。

  1. 对于PHP magic_quotes_gpc=off 的状况

必须使用addslashes()对输入数据进行处理,但并不须要使用stripslashes()格式化输出,由于addslashes()并未将反斜杠一块儿写入数据库,只是帮助mysql完成了sql语句的执行。

3) allw_url_include=Off

  1. 不容许include远程文件,不然会引发安全问题。

4) sssion.auto_start=0

  1. 不自动开启session,须要用session_start()开启。

 

  1. 对于大流量的网站,您采用什么样的方法来解决访问量问题?

答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,

程序功能规则,禁止外部的盗链,控制大文件的下载,使用不一样主机分流主要流量。

 

  1. 你了解RESTFUL吗?

REST 指的是一组架构约束条件和原则。知足这些约束条件和原则的应用程序或设计就是 RESTful

Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每一个请求都必须包含理解请求所必需的信息。若是服务器在请求之间的任什么时候间点重启,客户端不会获得通知。此外,无状态请求能够由任何可用服务器回答,这十分适合云计算之类的环境。客户端能够缓存数据以改进性能。

在服务器端,应用程序状态和功能能够分为各类资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每一个资源都使用 URI (Universal Resource Identifier) 获得一个惟一的地址。全部资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,好比 GETPUTPOST DELETEHypermedia 是应用程序状态的引擎,资源表示经过超连接互联。

 

  1. 作过APP接口没?怎么作的?

用框架写接口,普通POSTGET接口,有时候用RESTFUL接口。写控制器从模型调用数据,返回XML或者JSON数据就好了。

APP接口主要解决两个问题,一个SESSION问题,一个是TOKEN问题。客户端第一次请求,服务端生成SESSION_ID,返回给客户端。之和的请求中,客户端把SESSION_ID传给服务端,服务端用SESSION_ID函数能够确保屡次请求用的同一个SESSIONTOKEN须要加密和服务端验证。

 

  1. smarty没有?用过什么模板引擎?

Smarty是很老的技术了。经常使用的框架如ThinkPHPYii都自带模板引擎。最经常使用的方法是3个:assign赋值,display显示页面,fetch获取页面内容而非显示。

 

  1. 设计模式有哪些?

单例模式,简单工厂模式,策略模式,观察者模式,注册()模式,迭代模式 IOCMixin

 

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

核心思路:加锁

 

<?php

    $fp = fopen("lock.txt","w+");

    if (flock($fp,LOCK_EX)) {

        //得到写锁,写数据

        fwrite($fp, "write something");

 

        // 解除锁定

        flock($fp, LOCK_UN);

    } else {

        echo "file is locking...";

    }

    fclose($fp);

?>

 

  1. 写一个函数,可以遍历一个文件夹下的全部文件和子文件夹。

<?php

    function my_scandir($dir){

        $files = array();

        if(is_dir($dir)){

            if ($handle = opendir($dir)) {

                while (($flie = readdir($handle))!== false) {

                    if ($flie!="." && $file!="..") {

                        if (is_dir($dir."/".$file)) {

                            $files[$file] = my_scandir($dir."/".$file);

                        } else {

                            $files[] = $dir."/".$file;

                        }

                    }

                }

                closedir($handle);

                return $files;

            }

        }

    }

?>

 

  1. 写出一个正则表达式,过虑网页上的全部JS/VBS脚本(即把script标记及其内容都去掉):

过滤JavaScript脚本参考:

 

<?php

    header("content-type:text/html;charset=utf-8");

 

    $script = "如下内容不显示:<script type='text/javascript'>alert('cc');</script>";

    $pattern = '/<script[^>]*?>.*?</script>/si';

 

    echo preg_replace($pattern, "脚本内容", $script);//如下内容不显示:脚本内容

?>

 

 

  1. 请写出并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

首先进入php安装目录

php -f d:/wamp/www/1.php 其中-f参数指定要执行的php文件

php -r phpinfo(); 其中-r表示直接执行php代码,无需写开始结束标记

 

  1. PHP中,如何得到一个数组的键值?

使用key()能够得到数组中当前元素的键名,使用current()则能够返回当前元素的值。

使用array_keys()则能够获得数组中全部的键名。

使用foreach结构foreach($arr as key=>value)能够经过keyvalue分别获取键名和值。

 

  1. 若是个人网站用的utf-8编码,为防止乱码出现,都须要注意哪些地方?

从如下几个方面考虑:

 

数据库中库和表都用utf8编码

php链接mysql,指定数据库编码为utf8 mysql_query(set names utf8);

php文件指定头部编码为utf-8header(content-type:text/html;charset=utf-8);

网站下全部文件的编码为utf8

html文件指定编码为utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>

 

 

  1. 写出五种以上你使用过的PHP的扩展的名称(提示:经常使用的PHP扩展)

mb_sringiconvcurlGDXMLsocketMySQLPDO

 

  1. 请描述以下URL重写规则的用意。

<IfModulemod_rewrite.c>

RewriteEngineon

RewriteCond%{REQUEST_FILENAME}!-f

RewriteCond%{REQUEST_FILENAME}!-d

RewriteBase/

RewriteRule./index.php[L]

</IfModule>

若是REQUEST_FILENAME文件存在,就直接访问文件,不进行下面的rewrite规则,

若是REQUEST_FILENAME目录存在,就直接访问目录,不进行下面的rewrite规则,

RewriteRule./index.php[L]的意思是把全部的请求都给index.php处理。

 

  1. Warning:Cannot modify header information-headers already sent by(output started at D:\src\init.php:7)in D:\src\init.php on line10一般什么状况下php会报该警告信息?

通常是在headerset_cookie以及session_start函数前面有输出(包括空格)的状况下,会报该警告信息

 

  1. 什么是ORM

对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不一样类型系统的数据之间的转换。从效果上说,它实际上是建立了一个可在编程语言里使用的--“虚拟对象数据库”。

 

  1. 什么是RBAC

基于角色的访问控制(Role-Based Access Control)做为传统访问控制(自主访问,强制访问)的有前景的代替受到普遍的关注。在RBAC中,权限与角色相关联,用户经过成为适当角色的成员而获得这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各类工做而创造,用户则依据它的责任和资格来被指派相应的角色,用户能够很容易地从一个角色被指派到另外一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据须要而从某角色中回收。角色与角色的关系能够创建起来以囊括更普遍的客观状况。

 

  1. 如何防止SQL注入?

转义引号。

addslashes() 是强行加\

PDO的预处理与参数绑定。

 

  1. 如何避免跨站攻击

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登陆受信任网站A,并在本地生成Cookie

2.在不登出A的状况下,访问危险网站B

 

服务端进行CSRF防护

  1. Cookie Hashing(全部表单都包含同一个伪随机值)。由于攻击者不能得到第三方的Cookie(理论上),因此表单中的数据也就构造失败了
  2. 验证码。每次的用户提交都须要用户在表单中填写一个图片上的随机字符串。
  3. One-Time Tokens(不一样的表单包含一个不一样的伪随机值)

 

  1. 都作过什么项目,的那几个模块?担任什么职责?

 

 

  1. 如何认识PHP框架的路由机制?

主要是经过伪静态来实现单一入口,mvc框架都是这样。将全部请求经过apache伪静态解析转给某个指定文件,而后经过php$_SERVER[]这个全局变量来去的请求的路径字符串,对其进行解析再分配给指定的类去处理,基本就是这样。

最简单的方法是创建一个.htaccess文件。文件内容贴给你

<IfModule !mod_rewrite.c>

    ErrorDocument 500 'mod_rewrite must be enabled'

</IfModule>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php

 

将这个文件放在根目录下便可。文件做用很明显:将全部的请求路径转给index.php,而后在index.php里作请求字符串的判断便可打到路由解析功能。

 

57. PHP有几种运行方式?

1CGI

CGI即通用网关接口(common gatewag interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序链接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎能够在任何操做系统上实现。

2FastCGI

fast-cgi cgi的升级版本,FastCGI像是一个常驻(long-live)型的CGI,它能够一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。

3APACHE2HANDLER

PHP做为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就当即使用这些空余的子进程进行处理,这样就不存在生成子进程形成的延迟了。这些服务器副本在处理完一次HTTP请求以后并不当即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

4CLI

cliphp的命令行运行模式,你们常常会使用它,可是可能并无注意到(例如:咱们在linux下常用 “php -m”查找PHP安装了那些扩展就是PHP命令行运行模式;

 

 

 

 

 

MySQL数据库问题:

 

 

  1. 第二范式和第一范式的区别是什么?

1. 第一范式

确保数据表中每列(字段)的原子性。

 

2. 第二范式(依赖性)

在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关。

 

3. 第三范式(惟一性)

 

知足第三范式(3NF)必须先知足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

 

  1. 数据库事务的四个特征及含义?

数据库事务是指做为单个逻辑工做单元执行的一系列操做,这些操做要么全作要么全不作,是一个不可分割的工做单位。

 

数据库事务的四大特性(简称ACID)是:

(1) 原子性(Atomicity)

 

事务的原子性指的是,事务中包含的程序做为数据库的逻辑工做单位,它所作的对数据修改操做要么所有执行,要么彻底不执行。这种特性称为原子性。

 

例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折减款,却没有提取现金。2个步骤必须同时完成或者都不完成。

(2)一致性(Consistency)   

 

事务的一致性指的是在一个事务执行以前和执行以后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态知足全部的完整性约束,就说该数据库是一致的。

 

例如完整性约束a+b=10,一个事务改变了a,那么b也应随之改变。

(3)分离性(亦称独立性Isolation)

 

分离性指并发的事务是相互隔离的。即一个事务内部的操做及正在操做的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引发异常状况。

(4)持久性(Durability)

 

持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性经过数据库备份和恢复来保证。

 

  1. 如何设计或配置Mysql,才能达到高效使用的目的。

a) 数据库设计方面,设计结构良好的数据库,容许部分数据冗余。 选取最适用的字段属性,尽量把字段设置为NOT NULL,这样在查询的时候,数据库不用去比较NULL值。

b) 系统架构设计方面,表散列,把海量数据散列到几个不一样的表里面,集群,数据库查询和写入分开。 写高效sql语句,以提升效率。使用链接(join)来代替子查询使用联合(union)来代替手动建立的临时表所得皆必须,只从数据库取必须的数据。必 要的时候用不一样的存储引擎,好比Innodb能够减小死锁,HEAP能够提升一个数量级的查询速度。

 

  1. 请说出mysql经常使用存储引擎?memory存储引擎的特色?:

a) MyISAMInnoDBMERGEMEMORY(HEAP)BDB(BerkeleyDB)EXAMPLEFEDERATEDARCHIVECSVBLACKHOLE

b) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在全部MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另一个引擎。

c) InnoDBBDB存储引擎提供事务安全表。BDB被包含在为支持它的操做系统发布的MySQL-Max二进制分发版里。InnoDB也默认被包括在所 有MySQL 5.1二进制分发版里,你能够按照喜爱经过配置MySQL来容许或禁止任一引擎。

d) MEMORY存储引擎提供“内存中”表。MERGE存储引擎容许集合将被处理一样的MyISAM表做为一个单独的表。就像MyISAM同样,MEMORYMERGE存储引擎处理非事务表,这两个引擎也都被默认包含在MySQL中。

e) NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, Mac OS X 支持。在将来的MySQL分发版中,咱们想要添加其它平台对这个引擎的支持,包括Windows

f) 比较经常使用的是MyISAMInnoDB

 

  1. MySQL LEFT JOIN联查问题,再也不举例。

 

  1. 如何MySQL性能优化?

a) 经过Show命令,慢查询日志,profiling分析查询肯定瓶颈。

b) 使用 EXPLAIN 关键字可让你知道MySQL是如何处理你的SQL语句的。这能够帮你分析你的查询语句或是表结构的性能瓶颈。

c) 当只要一行数据时使用 LIMIT 1

d) 为搜索字段建索引

e) Join表的时候使用至关类型的例,并将其索引

f) 尽量的使用 NOT NULL

g) 水平分表

h) 垂直分表

i) 选择正确的存储引擎

j) 避免长链接

 

 

 

 

 

 

 

 

 

算法问题

  1. 使用PHP描述冒泡排序和快速排序算法,对象能够是一个数组

//冒泡排序(数组排序)

 

function bubble_sort($array){

    $count = count($array);

    if ($count <= 0) return false;

    for($i=0; $i<$count; $i++){

        for($j=$i; $j<$count-1; $j++){

            if ($array[$i] > $array[$j]){

                $tmp = $array[$i];

                $array[$i] = $array[$j];

                $array[$j] = $tmp;

            }

        }

    }

    return $array;

}

//快速排序(数组排序)

 

function quick_sort($array) {

    if (count($array) <= 1) return $array;

    $key = $array[0];

    $left_arr = array();

    $right_arr = array();

    for ($i=1; $i<count($array); $i++){

        if ($array[$i] <= $key)

            $left_arr[] = $array[$i];

        else

            $right_arr[] = $array[$i];

    }

    $left_arr = quick_sort($left_arr);

    $right_arr = quick_sort($right_arr);

    return array_merge($left_arr, array($key), $right_arr);

}

  1. 使用PHP描述顺序查找和二分查找(也叫作折半查找)算法,顺序查找必须考虑效率,对象能够是一个有序数组

//二分查找(数组里查找某个元素)

 

function bin_sch($array, $low, $high, $k){

    if ($low <= $high){

    $mid = intval(($low+$high)/2);

    if ($array[$mid] == $k){

    return $mid;

    }elseif ($k < $array[$mid]){

    return bin_sch($array, $low, $mid-1, $k);

    }else{

    return bin_sch($array, $mid+1, $high, $k);

    }

    }

    return -1;

}

//顺序查找(数组里查找某个元素)

 

function seq_sch($array, $n, $k){

    $array[$n] = $k;

    for($i=0; $i<$n; $i++){

        if($array[$i]==$k){

            break;

        }

    }

    if ($i<$n){

        return $i;

    }else{

        return -1;

    }

}

  1. 写一个二维数组排序算法函数,可以具备通用性,能够调用php内置函数

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

 

function array_sort($arr, $keys, $order=0) {

    if (!is_array($arr)) {

        return false;

    }

    $keysvalue = array();

    foreach($arr as $key => $val) {

        $keysvalue[$key] = $val[$keys];

    }

    if($order == 0){

        asort($keysvalue);

    }else {

        arsort($keysvalue);

    }

    reset($keysvalue);

    foreach($keysvalue as $key => $vals) {

        $keysort[$key] = $key;

    }

    $new_array = array();

    foreach($keysort as $key => $val) {

        $new_array[$key] = $arr[$val];

    }

    return $new_array;

}

 

 

 

 

 

 

 

 

PHP周边问题

  1. 说出你经常使用的版本控制器?

SVN , GIT

具体命令不在一一列举,需熟记。

 

  1. Linux经常使用的命令,知道哪些?

a) ls, pwd, cd, cat, vi, service, chmod, chown, tar, su等。

 

  1. Linux的定时任务如何执行?

使用crontab执行。

Linux中你应该先输入crontab -e,而后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。

crontab文件中如何输入须要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。

每一个域之间使用空格或者制表符分隔。格式以下:

minute hour day-of-month month-of-year day-of-week commands

合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(表明要执行的脚本)

除了数字还有几个个特殊的符号就是"*""/""-"","*表明全部的取值范围内的数字,"/"表明每的意思,"/5"表示每5个单位,"-"表明从某个数字到某个数字,","分开几个离散的数字。

天天早上6

0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,由于cron把任何输出都emailroot的信箱了。

每两个小时

0 */2 * * * echo "Have a break now." >> /tmp/test.txt  

 

  1. Linux如何安装ApachePHPMySQLNginx?

a) 用的CentOSYum安装。生产环境有专门的运维工程师负责。

 

  1. Linux下如何杀掉一个进程?

a) Kill

b) Pkill

 

  1. 在两台Linux服务器之间复制数据,你经常使用什么命令?

a) Scp

b) ftp

  1. Linux下用什么方法能够查看当前系统的负载信息(CPU,内存,IO?

a) Top

b) W

c) Uptime

 

 

 

 

 

前端问题

  1. 都用过哪些JavaScript框架?

a) jQuery和扩展。

 

  1. JavaScriptthis指向问题?

javascript 中的 this 有 五种状况:

1.全局范围:

会指向 全局对象( 浏览器下指window

2.全局函数调用:

仍是指向全局对象。

3.对象函数调用:

调用某个对象的函数, 它指向 当前对象。

4.使用 new 实例化对象时:

它指向 新建立的 对象。

5.调用某些方法时:

如: Function.prototype 上的 call 或者 apply 方法 以及 with

它指向 传入的对象。

 

  1. 说出Array对象的5个方法:

concat, join, pop, push, shift, unshift, sort

 

  1. 谈谈你对prototype的理解?

a) 每一个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性,也就是说将函数用做构造函数调用(使用new操做符调用)的时候,新建立的对象会从原型对象上继承属性和方法。

b) prototype 属性使您有能力向对象添加属性和方法。

 

  1. 如何处理ajax的跨域问题?

a) Window.domain;

b) JSONP