1.谈谈对MVC的认识?
MVC是一种设计模式,他强制性的使应用程序的输入/处理/输出分开,应用程序被分化成三个核心部件:模型、视图、控制器。
视图是用户看到并与之交互的办面。
模型表示业务模型与企业规则
控制器接入用户输入并调用模型与视图去完成用户的需求。
MVC优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速部署、有利于软件工程化管理
MVC缺点:没有明确的定义,完全理解MVC并不容易.不适合小型规模的应用程序.
2.php如何抛出和接收错误?
try{....}catch(){.....}如果没有触发异常,继续执行.如果异常被触发就会抛出一个异常.catch代码捕获悍异常,并创建一个包含异常性的对象.$e->getMessage();
实例1.
getMessage(), "\n";
}
// 继续执行
echo 'Hello World';
?>
$a=array(1,9,8,7,8,7,9,7,10);
echo $max($a);
或
rsort($a);
echo array_shift($a);
4.请说明PHP中传值和引用的区别.什么时候用传值什么时候引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略.
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改.
优缺点:按值传递时.php必须复制值.特别是对于大型的字符串和对象说,将是一个很大的代价.按引用传递则不需要复制值.对于性能提高很有好处.
如果不想改变变量的值的时候就传值.如果要让函数改变原变量就可以用引用传值.
5.有一个一维数组,里面存储整形数据,请写一函数,将他们按从大到小的顺序排序,要求执行效率高.并说明如何改善执行效率,不能使用PHP函数.
分析:被10除余9,那么+1则被10整除,同理+1分别能被9和8整除.假高这个数为X,则这个100<=X<=100
则101<=X+1<=1000+1 => x+1为 8 ,9,10的倍数=>8=2*2*2,9=3*3,10=2*5
则X+1一定是2*2*2*3*3*5的倍数(只能约掉一个2) =>第一个数为360,第二个数720
=> 359,719
7.请写出一个简单的静态数组?
class A
{
static $a = array('xxx'=>xxxx);
}
print_r(A::$a);
8.写一个简单的jqeruy显示隐藏代码?
$("#xxx").show();
$("#xxx").hide();
9.include与require的区别是什么?
php在遇到include时就必须重新解析一次,如果在同一个页面出现10次include,它就会解析10次,而require不管在同一个页面出现多少次,只会解析一次.require执行效率比include高.
require包含进来 的内容被当成当前文件的一个组成部分,所以当包含进来的文件有语法错误或者文件不存在的时候,那个PHP脚本都不在执行.include函数相当于指定这个文件夹的路径,当包含的文件有错时不会影响本身程序执行.include可以进行判断是否包含进来,而require不管在任何时候都被包含进来了.
10.php获取当前时间并打印?
echo date('Y-m-d H:i:s');
11.字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是?
implode() expload() substr() str_replace() strpos,strrpos,strstr
12.解释下PHP类中:protected,public,prtvate,interface,abstract ,final,static的含义?
protected受保护的,在本类和子类中有效.
public 公共的,在本类,子类中,类外都可以用
private私有的,只在本类中有用
interface定义一个接口时使用的关键字
abstract定义一个抽象类或者抽象方法时使用的关键字.
final用final申明的方法无法被覆盖,用final申明的类不能被继承
static定义一个静态方法或者静态属性使用的关键字
13.从表login中选出name字段包含的前10条结果所有信息的sql语句
select * from login where name like '%admin%' limit 0,10;
14.解释左连接,右连接,内连接,全连接
内连接只会选出两张表中互相匹配的记录,因此,这会导致有时我们需要的记录没有包含进来.内连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来..
左连接和右连接者是外部链接,也就是区别于内部连接,它对不满足连接条件的行并不是像内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少;左连接只要左边表中有记录,数据就能被检索出来,而右边有的记录必要在左边表中有的记能才能被检索出来.
右连接就是只要右边表中有记录,数据就能检索出来.
全连接刚会回返两个表中的所有记录
15.简述论坛中无限分类的实现原理
数据库分类表的设计:id字段,父id字段,类名称字段,path字段
path字段存当前分类的路径, 格式:0,父类id,本身ID
查询分类select * from 分类表 order by path asc;(查出每个分类及其他对应的子类)
16.写一个函数,尽可能高效,从一个标准URL里取出文件的扩展名.如:http://www.baidu.com/sex/sm.php?id=1需要取php或.php
$a = "url地址";
$b=parse_url($a);
echo substr($b['path'],strpos($b['path'],'.')); 或 echo end(expload('.',$b['path']));
17.描述下大流量高并发量网站的解决方案
确认服务器硬件是否足够支持当前的流量
使用memcache缓存技术,将动态数据缓存到内存中,动态网直接调用这些文件不必再访问数据库
禁用外部盗链,外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链.目前可以简单的通refer来控制盗链.apache自己就可以通过配置来禁止盗链.
控制大文件的下载,大文件下载会占很大的流量.对于非SCSI硬盘来说会消耗,使得网站响应能力下降.
使用不迥的主机分流主要流量,使用流量统计软件可以知道哪些地方不费大量流量,哪些页面需要再进行优化
分库分表
sphinx全文索引引擎
18.如何设计和配置Mysql,才能达到高效使用的目的.
数据库设计方面,设计结构良好的数据库,允许部分数据冗余
选取最适用的字段属性,尽可以把字段设置为NOTNULL,这样查询的时候,数据库不用去比较空值.
系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开
写高效sql语句,以提高效率
使用JOIN代替子查询
使用UNION来代替手动创建的临时表
只从数据取必须的数据
必要的时候用不同存储引擎,INNODB可以减少死锁,heap可以提高一个数量级的查询速度
使用事务/外键/索引
19.如何进行防SQL注入?
过滤一些常见的数据库操作关键字, select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤
php配置文件中register_globals=off;设置为关闭状态.(作用将注册全局变量关闭);如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值
sql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号
提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中
对于常的方法加以封装,避免直接暴漏SQL语句
开启PHP安全模式safe_mode=on
打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"
控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志
使用MYSQLI或PDO预处理
20.用PHP写出一个安全的用户登录系统需要注意哪些方面.
密码要使用MD5(密码+字符串)进行加密
登录表单的名称不要跟数据库字段一样,以免暴露表字段.
用户表的表名,字段名,密码尽量用不容易被猜到的.
要使用验证码验证登陆,以防止暴力破解
验证提交的数据是不是来本网站.
登陆后台处理代码数据库部分可以使用预处理,做好过滤,防止sql注入
21.输出为Moailla/4.0(compatible;MSIE5.01;Window NT5.0)时,可能的输出语句是:
$_SERVER['HTTP_USER_AGENT']
22.php一些正确的说法:
PHP有四种标量类型,布尔型(boolean),整型(integer),浮点型(float),字符串(string)
浮点型和双精度型是同一种类型
伪类型:混合型(mixed),数字型(number),回调(callback)
23.echo function_exists('print');
输出为空,echo和print不是系统函数
24.
25.
输入结果为 12 10 18
26.echo 1+2+"3+4+5"
输出6
26.return chr(65)=='A'
输出TRUE
26
5,5=>8,22,2=>'8',81);
echo $a[7];
echo $a[6];
echo $a[3];
?>
输出8122加提示信息
27
28.php二进制位移
<<相当于乘2,>>相当于除2
29.
31.
32.
$a=3;$b=4;
if($a||$b=5){ ||或和|的区别
echo 'todo';
}
33.什么是面向对象?主要特征是什么?
面向对象是程序的一种设计方式 ,它利于提高程序的重用性,使程序结构更加清晰
主要特征:封装,继承,多态
34.session与cookie的区别是什么,请从协议,产生的原因与作用上说明?
http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看作是同一个用户
session保存在服务器端,cookie保存在客户端,session依赖cookie进行保存.如果cookie被禁用了,session不能继续使用.
35.http状态中302,403,500代码含义?
300重定向,403服务器拒绝访问,500服务器内部错误
36.linux下建立压缩包,解压缩包的命令
压缩:gzip tar -cvfz,zip,bzip2
解压:gunzip,tar -zxvf,unzip,bunzip2