SESSION 与 COOKIE的区别是什么,请从协议,产生的缘由与做用说明? javascript
一、http无状态协议,不能区分用户是不是从同一个网站上来的,同一个用户请求不一样的页面不能看作是同一个用户。php
二、SESSION存储在服务器端,COOKIE保存在客户端。Session比较安全,cookie用某些手段能够修改,不安全。Session依赖于cookie进行传递。html
禁用cookie后,session不能正常使用。Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。Session文件是公有的。java
不使用cookie向客户端发送一个cookie. mysql
理解:session_start()开启时,生成一个常量 SID,当COOKIE开启时,这个常量为空,当COOKIE关闭时,这个常量中存储了PHPSESSID的值。经过在URL后加一个SID参数来传递SESSIONID的值,从而使客户端页面可使用SESSION里面的值。 当客户端开启COOKIE和服务器端开启SESSION时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE里面存储SESSIONID. 当浏览器第二次请求时,会把已存在的COOKIE一块儿提交到服务器端。jquery
简述Cookie的设置及获取过程c++
设置COOKIE的值:程序员
Setcookie(名称,值,保存时间,有效域);web
获取值:$_COOKIE['名称'];正则表达式
HTTP 状态中30二、40三、 500、200、40四、502代码含义?
一二三四五原则: 一. 消息系列 二. 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列 302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401表明未受权。 200是请求成功,404是文件未找到,502是服务器内部错误。
MyISAM 和 InnoDB 的基本区别?索引结构如何实现?
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,可是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
建立索引:alert table tablename add index (`字段名`)
include与require的区别?
1.include()在执行文件时每次都要进行读取和评估
require()文件只处理一次(实际上文件内容替换了require()语句)
2.require()一般放在PHP脚本程序的最前面
include()的使用和require()同样,通常放在流程控制的处理区段中,PHP脚本文件读到include()语句时,才将它包含的文件读进来,这种方式,能够把程序执行时的流程简单化
3,require()和include()语句是语言结构,不是真正的函数,能够像PHP的其余语言结构同样
4,include_once()和require_once()语句也是在脚本执行期间包括并运行指定文件,与include()require()惟一的区别是若是文件中的代码已经被包括了,则不会再次包括.
5,require()包含文件失败,中止执行,给出错误(致命的)
include()经常使用于动态包含.
一般是自动加载的文件,即便加载出错,整个程序仍是继续执行
一个页面声明,另外一个页面调用
包函文件失败,继续向下执行,返回一条警告
PHP字符串中单引号与双引号的区别?
单引号不能解释变量,而双引号能够解释变量。
单引号不能解释转义字符,而双引号能够解释转义字符。
请说明 PHP 中传值与传引用的区别。何时传值何时传引用?
按值传递:函数范围内对值的任何改变在函数外部都会被忽略
按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改
优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来讲,这将会是一个代价很大的操做。按引用传递则不须要复制值,对于性能提升颇有好处。
function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b); //这里$b传递给函数的实际上是$b的变量内容所处的内存地址,经过在函数里改变$a的值 就能够改变$b的值了
echo "<br>";
echo $b;//输出101
面向对象中接口和抽象类的区别及应用场景?
一、有抽象方法的类叫作抽象类,抽象类中不必定有抽象方法,抽象方法必须使用abstract关键字定义。
二、接口中所有是抽象方法,方法不用使用abstract定义。
三、当有子类要设计一个上层,一般设计为抽象类,当多个类要设计一个上层,一般设计为接口。
echo(),print(),print_r()的区别?
echo是PHP语句, print和print_r是函数,语句没有返回值,函数能够有返回值(即使没有用)
Print()只能打印出简单类型变量的值(如int,string)
print_r()能够打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串
mysql_fetch_row() 和mysql_fetch_array之间有什么区别?
Mysql_fetch_row()以索引数组的方式取查询的结果集,mysql_fetch_array()以索引数组和关联数组两种方式取查询的结果集。
33. HTTP协议中GET、POST和HEAD的区别?
HEAD: 只请求页面的首部。
GET: 请求指定的页面信息,并返回实体主体。
POST: 请求服务器接受所指定的文档做为对所标识的URI的新的从属实体。
(1)HTTP 定义了与服务器交互的不一样方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。
(2)在FORM提交的时候,若是不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url以后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为 该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)GET 这个是浏览器用语向服务器请求最经常使用的方法。POST这个方法也是用来传送数据的,可是与GET不一样的是,使用POST的时候,数据不是附在URI后面传递的,而是要作为独立的行来传递,此时还必需要发送一个Content_length标题,以标明数据长度,随后一个空白行,而后就是实际传送的数据。网页的表单一般是用POST来传送的。
表单中 get与post提交方法的区别?
1. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中能够看到。post是经过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一块儿传送到ACTION属性所指的URL地址。用户看不到这个过程。
2. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,通常被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
get安全性很是低,post安全性较高。
foo()和@foo()之间有什么区别?(1分)
@foo()控制错误输出
什么是数据库索引,主键索引,惟一索引的区别,索引的缺点是什么?
索引用来快速地寻找那些具备特定值的记录。
主键索引和惟一索引的区别:主键是一种惟一性索引,但它必须指定为“PRIMARY KEY”,每一个表只能有一个主键。惟一索引索引列的全部值都只能出现一次,即必须惟一。
索引的缺点:
一、建立索引和维护索引要耗费时间,这种时间随着数据量的增长而增长。
二、索引须要占用物理空间,除了数据表占数据空间以外,每个索引还要占必定的物理空间,若是要创建聚簇索引,须要的空间就会更大。
3、当对表中 的数据进行增长、删除、修改的时候,索引也要动态的维护,这样就下降了数据的维护速度。
使用那些工具进行版本控制?
Clear case、CVS、SVN、PVCS、Perforce、CCC、StarTeam、RCS
写出三种以上MySQL数据库存储引擎的名称(提示:不区分大小写)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十几个引擎
什么是模板技术、可以使HTML和PHP分离开使用的模板?
模板技术就是使程序的逻辑代码和界面分开的技术。
可以使HTML和PHP分开的模板有:Smarty、Template、PHPlib Template、FastTemplate
实现中文字串截取无乱码的方法
Mb_substr();
用PHP写出显示客户端IP与服务器IP的代码
获取客户端IP:get_env(“REMOTE_ADDR”);
获取服务器端IP:$_SERVER["SERVER_ADDR"];
写几个魔术方法并说明做用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个还没有被定义的类是会自动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方法
__get()当获取未定义变量的值时会自动调用的方法
__construct()构造方法,实例化类时自动调用的方法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用unset()时自动调用的方法
__isset()当对一个未定义变量调用isset()方法时自动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什么?
它们都是PHP预约义变量
$_REQUEST用来获取post或get方式提交的值
$_POST用来获取post方式提交的值
$_GET用来获取get方式提交的值
$_COOKIE用来获取cookie存储的值
$_SESSION用来获取session存储的值
$_FILE用来获取上传文件表单的值
数组中下标最好是什么类型的,为何?
数组的下标最好是数字类型的,数字类型的处理速度快。
++i和i++哪个效率高,为何?
++i效率比i++的效率更高,由于++i少了一个返回i的过程。
magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?
Magic_quotes_gpc()是php配置文件中的,若是设置为on则会自动POST,GET,COOKIE中的字符串进行转义,在‘以前加\
Magic_quotes_runtime()是php中的函数,若是参数为true则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。
框架中什么是单一入口和多入口,单一入口的优缺点?
一、多入口就是经过访问不一样的文件来完成用户请求。
单一入口只web程序全部的请求都指向一个脚本文件的。
二、单一入口更容易控制权限,方便对http请求能够进行安全性检查。
缺点:URL看起来不那么美观,特别是对搜索引擎来讲不友好。
你对Memcach的理解,优势有哪些?
Memcache是一种缓存技术,在必定的时间内将动态网页通过解析以后保存到文件,下次访问时动态网页就直接调用这个文件,而没必要在从新访问数据库。使用memcache作缓存的好处是:提升网站的访问速度,减轻高并发时服务器的压力。
Memcache的优势:稳定、配置简单、多机分布式存储、速度快。
对关系型数据库而言,索引是至关重要的概念,请回答有关索引几个问题:
a) 索引的目的是什么?
一、快速访问数据表中的特定信息,提升检索速度
二、建立惟一性索引,保证数据库表中每一行数据的惟一性
三、加速表和表之间的链接
四、使用分组和排序子句进行数据检索时,能够显著减小查询中分组和排序的时间
b) 索引对数据库系统的小负面影响是什么?
负面影响:建立索引和维护索引须要耗费时间,这个时间随着数据量的增长而增长;索引须要占用物理空间,不光是表须要占用数据空间,每一个索引也须要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就下降了数据的维护速度。
c) 为数据表创建索引的原则有哪些?
一、在最频繁使用的、用以缩小查询范围的字段上创建索引
二、在平频繁使用的、须要排序的字段上创建索引
d) 什么状况下不宜创建索引?
一、对于查询中不多涉及的列或者重复值比较多的列,不宜创建索引
二、对于一些特殊的数据类型,不宜创建索引,好比文本字段(text)等。
web应用中,数据库的读取频率远高于写入频率, 如何优化MySQL而应对此种情景?
使用memcache缓存技术,而没必要从新访问数据库,这样就减小了查询数据库的次数。
若是网站的访问量很大,能够把数据库读写服务器分开,使用多态服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。
请举例说明在你的开发过程当中用什么方法来加快页面的加载速度
要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具。
描述一下大流量高并发量网站的解决方案
一、确认服务器硬件是否足够支持当前的流量。
二、使用memcache缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而没必要在访问数据库。
三、禁止外部的盗链。
四、外部网站的图片或者文件盗链每每会带来大量的负载压力,所以应该严格限制外部对自身图片或者文件盗链,目前能够简单的经过refer来控制盗链,apache本身就能够经过配置来禁止盗链。
五、控制大文件的下载。大文件的下载会占用很大的流量,对于非SCSI硬盘来讲会消耗,使得网站响应能力降低。
六、使用不一样的主机分流主要流量
七、使用流量统计软件。在网站上安装一个流量统计软件,能够即时知道哪些地方耗费了大量流量,哪些页面须要再进行优化。
八、分库分表。
设定网站的用户数量在千万级,可是活跃用户的数量只有1%,如何经过优化数据库提升活跃用户的访问速度?
咱们能够根据用户的活跃程度,把活跃的用户提取出来放到另一张表里面,每次活跃的用户登录的时候就直接到活跃用户表中进行查询,这样就提升了数据库的查询速度。
了解XSS攻击吗? 如何防止 ?
XSS是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,而后利用不安全的Activex控件执行恶意的行为。
使用htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。
SQL注入漏洞产生的缘由 ? 如何防止?
SQL注入产生的缘由:程序开发过程当中不注意规范书写sql语句和对特殊字符进行过滤,致使客户端能够经过全局变量POST和GET提交一些sql语句正常执行。
如何进行防SQL注入?
一、过滤掉一些常见的数据库操做关键字:select,insert,update,delete,and,*等或者经过系统函数:addslashes(须要被过滤的内容)来进行过滤。
二、在PHP配置文件中Register_globals=off;设置为关闭状态 //做用将注册全局变量关闭。
三、SQL语句书写的时候尽可能不要省略小引号(tab键上面那个)和单引号
四、提升数据库命名技巧,对于一些重要的字段根据程序的特色命名,取不易被猜到的
五、对于经常使用的方法加以封装,避免直接暴漏SQL语句
六、开启PHP安全模式Safe_mode=on;
七、打开magic_quotes_gpc来防止SQL注,Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的sql语句的查询进行转换,把'转为\',这对防止sql注入有重大做用。所以开启:magic_quotes_gpc=on;
八、控制错误信息,关闭错误提示信息,将错误信息写到系统日志。
九、使用mysqli或pdo预处理。
用PHP写出一个安全的用户登陆系统须要注意哪些方面。
一、密码要使用MD5(密码+字符串)进行加密。
二、登陆表单的名称不要跟数据库字段同样,以避免暴漏表字段。
三、用户表的表名、字段名、密码尽可能用不容易被猜到的。
四、要使用验证码验证登录,以防止暴力破解。
五、验证提交的数据是否是来自本网站。
六、登陆后台处理代码数据库部分使用预处理,作好过滤,防止sql注入。
如何实现多个线程安全的写入一个文件数据。
采用锁机制,当一个用户在对此文件进行读写入操做时,将此文件锁定,操做完毕后解除锁定,在该用户进行读写入操做过程当中,其余用户不能操做此文件,须要排队等待。
字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?
Implode()、explode()、substr()、str_replace()、strpos、strrpos、strstr
GD库是作什么用的? (1分)
gd库提供了一系列用来处理图片的API,使用GD库能够处理图片,或者生成图片。
在网站上GD库一般用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
在网站上GD库一般用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
谈谈对mvc的认识?
由模型(model),视图(view),控制器(controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分红三个核心部件:模型、视图、控制器。它们各自处理本身的任务。
视图是用户看到并与之交互的界面。
模型表示企业数据和业务规则。
控制器接受用户的输入并调用模型和视图去完成用户的需求。
MVC的优势:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理
PHP如何抛出和接收错误?
使用try...catch,异常的代码放在try代码块内,若是没有触发异常,则代码继续执行,若是异常被触发,就会抛出一个异常。Catch代码块捕获异常,并建立一个包含异常信息的对象。$e->getMessage(),输出异常的错误信息。
一、命令注入(Command Injection)
二、eval注入(Eval Injection)
三、客户端脚本攻击(Script Insertion)
四、跨网站脚本攻击(Cross Site Scripting, XSS)
五、SQL注入攻击(SQL injection)
六、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
七、Session 会话劫持(Session Hijacking)
八、Session 固定攻击(Session Fixation)
九、HTTP响应拆分攻击(HTTP Response Splitting)
十、文件上传漏洞(File Upload Attack)
十一、目录穿越漏洞(Directory Traversal)
十二、远程文件包含攻击(Remote Inclusion)
1三、动态函数注入攻击(Dynamic Variable Evaluation)
1四、URL攻击(URL attack)
1五、表单提交欺骗攻击(Spoofed Form Submissions)
1六、HTTP请求欺骗攻击(Spoofed HTTP Requests)
几个重要的php.ini选项
Register Globals
php>=4.2.0,php.ini的register_globals选项的默认值预设为Off,当register_globals的设定为On时,程序能够接收来自服务器的各类环境变量,包括表单提交的变量,并且因为PHP没必要事先初始化变量的值,从而致使很大的安全隐患。
safe_mode
安全模式,PHP用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini中的safe_mode = On
一、限制文件存取
safe_mode_include_dir = “/path1:/path2:/path3″
不一样的文件夹用冒号隔开
二、限制环境变量的存取
safe_mode_allowed_env_vars = string
指定PHP程序能够改变的环境变量的前缀,如:safe_mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么php能够改变任何环境变量
safe_mode_protected_env_vars = string
用来指定php程序不可改变的环境变量的前缀
三、限制外部程序的执行
safe_mode_exec_dir = string
此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell_exec和“` `”。
disable_functions = string
不一样的函数名称用逗号隔开,此选项不受安全模式影响
magic quotes
用来让php程序的输入信息自动转义,全部的单引号(“’”),双引号(“””),反斜杠(“\”)和空字符(NULL),都自动被加上反斜杠进行转义
magic_quotes_gpc = On 用来设置magic quotes 为On,它会影响HTTP请求的数据(GET、POST、Cookies)
程序员也可使用addslashes来转义提交的HTTP请求数据,或者用stripslashes来删除转义
使用过哪些PHP框架。
一、YII框架:
二、ThinkPHP框架:
php中,模板引擎的目的是什么? 你用过哪些模板引擎?
使用模板引擎的目的是使程序的逻辑代码和html界面代码分离开,是程序的结构更清晰。
使用过的模板引擎:Smarty、ThinkPHP的ThinkTemplate
你所知道的php数组相关的函数?
array()----建立数组
array_combine()----经过合并两个数组来建立一个新数组
range()----建立并返回一个包含指定范围的元素的数组
compact()----创建一个数组
array_chunk()----将一个数组分割成多个
array_merge()----把两个或多个数组合并成一个数组
array_slice()----在数组中根据条件取出一段值
array_diff()----返回两个数组的差集数组
array_intersect()----计算数组的交集
array_search()----在数组中搜索给定的值
array_splice()----移除数组的一部分且替代它
array_key_exists()----判断某个数组中是否存在指定的key
shuffle()----把数组中的元素按随机顺序从新排列
array_flip()----交换数组中的键和值
array_reverse()----将原数组中的元素顺序翻转,建立新的数组并返回
array_unique()----移除数组中重复的值
你所熟悉的开源项目有哪些?
你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、命令链模式
常使用那些代码版本控制软件?
一般一个项目是由一个团队去开发,每一个人将本身写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提升开发效率,保证须要时能够回到旧版本。
经常使用的版本控制器:SVN
PHP加速模式/扩展? PHP调试模式/工具?
Zend Optimizer加速扩展
调试工具:xdebug
show processlist; 这个命令的做用?
显示哪些线程正在运行
SHOW VARIABLES; 这个命令的做用?
显示系统变量和值
SHOW VARIABLES like ’%conn%’; 这个命令的做用?
显示系统变量名包含conn的值
LEFT JOIN 写一个SQL语句?
SELECT A.id,A.class FROM A LEFT JOIN B ON A.cid=B.id
请写出5个经常使用的unix操做命令。
一、Ls -l
二、tar -zxvf
三、Touch
四、Cat
五、Mkdir
六、rm
请写出如下5个UNIX系统配置文件/服务的做用。
/etc/passwd
/etc/hosts
/etc/fstab
Crontab
sshd
一、/etc/passwd :用户信息文件,其中包含用户名、用户是否有密码、用户ID及用户所属组
二、/etc/hosts:主机名数据库,包IP地址、主机名或域名、别名等信息,在此文件中添加记录可绕过DNS
三、/etc/fstab 保存了系统全部分区信息的配置文件。
四、Crontab 计划任务命令
五、Sshd 远程链接管理命令
请列出5个经常使用的PHP操做MySQL的函数
一、Mysql_connect()
二、Mysql_select_db()
三、Mysql_query()
四、Mysql_fetch_row()
五、Mysql_close()
什么是时间戳? 如何取得当前时间戳?
时间戳是从1970年1月1日 00:00:00到指定日期的秒数。
获取当前时间戳:time()
有一个网页地址, 好比PHP开发资源网主页: http://www.phpres.com/index.html,如何获得它的内容?
获取网页内容:
$url=”http://www.phpres.com/index.html“;
$str=file_get_contents($url);
如何获得当前执行脚本路径,包括所获得参数
$_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];取得当前页面的完整路径和参数。
取得参数:$_SERVER['QUERY_STRING'];
如何用php的环境变量获得一个网页地址的内容?ip地址又要怎样获得?
echo $_SERVER ["PHP_SELF"];
echo $_SERVER ["SERVER_ADDR"];
求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
$begin=strtotime(“2007-2-5″);
$end=strtotime(“2007-3-6″);
echo ($end-$begin)/(24*3600);
给一个变量赋值为0123,可是输出该变量的值老是为其余数字,请问这是什么问题?
PHP 解释器会把以0开始的数字当作是八进制的,因此它的值会变成八进制的。
PHP里面如何定义一个常量(constant)?
经过define()指令,例如:define(”MYCONSTANT”, 100)
如何对一个变量进行值传递?
能够像C++那样, 在变量的前面加上&, 例如:$a = &$b
在PHP里面能够对string “10″ 和整型 11进行比较吗?
能够,PHP内部实现会把全部东西转换成整型,因此数字10和11能够进行比较
在什么状况下须要用endif 来结束条件语句?
当if语句后面跟的是冒号”:”而不是大括号{时,须要用endif来结束条件语句
优化MYSQL数据库的方法。
一、选取最适用的字段属性,尽量减小定义字段长度,尽可能把字段设置NOT NULL,例如’省份,性别’,最好设置为ENUM
二、使用链接(JOIN)来代替子查询:
三、使用联合(UNION)来代替手动建立的临时表
四、事务处理:
五、锁定表,优化事务处理:
六、使用外键,优化锁定表
七、创建索引:
a.格式:
(普通索引)->
建立:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
(惟一索引)->
建立:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
(主键)->
它是惟一索引,通常在建立表是创建,格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
八、优化查询语句
分别指出php.ini中 magic_quotes_gpc, magic_quotes_runtime两项参数的做用.
Magic_quotes_gpc的做用是在POST、GET、COOKIE数据上使用addslashes()自动转义。
Magic_quotes_runtime参数的做用是设置状态,当状态为0时则关闭自动转义,设置为1则自动转义,将数据库中取出来的单引号、双引号、反斜线这些字符加上反斜杠转义。
如何快速下载一个远程http服务器上的图片文件到本地?
$file=”";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=”./”;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);
一个字节占多少bit ? 一个IPv4地址占几个字节? 一个IPv6地址呢?
一个字节占8bit,一个IPV4占用4字节,一个IPV6占用16字节。
如何实例化一个名为”myclass”的对象?
new myclass()
你如何访问和设置一个类的属性? (2分)
$object = new myclass();
$newstr = $object->test;
$object->test = "info";
请写出一个正则表达式,用于匹配一个HTML文件中<img />标记中的图片地址
$url=”<img src=’11.jpg’/>”;
/<img[\s]*src=['|\"](.*)['|\"][\s]*\/>/
在PHP中error_reporting这个函数有什么做用?
设置 PHP 的报错级别并返回当前级别。
使用PHP描述快速排序算法,对象能够是一个数组?
原理:快速排序使用分治策略来把待排序数据序列分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将全部比“基准”小的元素排在基准前面,全部比“基准”大的元素排在基准后面。
(3)经过递归,将各子序列划分为更小的序列,直到把小于基准值元素的子数列和大于基准值元素的子数列排序。
//快速排序(数组排序)
function QuickSort($arr){
$num = count($arr);
$l=$r=0;
for($i=1;$i<$num;$i++){
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new_arr[] = $arr[0];
if($r > 1){
$right = QuickSort($right);
}
for($i=0;$i<$r;$i++){
$new_arr[] = $right[$i];
}
return $new_arr;
}
使用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;
}
}
写一个二维数组排序算法函数,可以具备通用性,能够调用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 session扩展默认将session数据储存在哪里? D
A) SQLite Database
B) MySQL Database
C) Shared Memory
D) File System
E) Session Server
若是你想要自动加载类,下面哪一种函数声明是正确的 C
A) function autoload($class_name)
B) function __autoload($class_name, $file)
C) function __autoload($class_name)
D) function _autoload($class_name)
E) function autoload($class_name, $file)
设计一个页面(4个 div 第一个div 宽960px 居中;嵌入第2-4个div等分960px;)
<style>
Body{ Text-align:center; Margin:0; Padding:0; }
#box{ Width:960px; Margin:0 auto; }
.small{ Width:320px; Float:left; }
</style>
<div id=’box’>
<div class=’small’></div>
<div class=’small’></div>
<div class=’small’></div>
</div>
简述如何获得当前执行脚本路径,包括所获得参数。(2分)
$script_name = basename(__file__); print_r($script_name);
js中网页前进和后退的代码
前进: history.forward();=history.go(1);
后退: history.back();=history.go(-1);
JS表单弹出对话框函数是?得到输入焦点函数是? (2分)
弹出对话框: alert(),prompt(),confirm()
得到输入焦点 focus()
JS的转向函数是?怎么引入一个外部JS文件?(2分)
window.location.href,
<script type="text/javascript" src="hello.js"></script>
用javascript取得一个input的值?取得一个input的属性?
document.getElementById(‘name’).value;
document.getElementById(‘name’).type;
用Jquery取得一个input的值?取得一个input的属性?
$(“input[name='aa']“).val();
$(“input[name='aa']“).attr(‘name’);
写一个简单的jquery显示隐藏代码?
$("#aa").hide();
$("#aa").show();
javascript可否定义二维数组,若是不能你如何解决?
javascript不支持二维数组定义,能够用arr[0] = new array()来解决
请使用JavaScript写出三种产生一个Image 标签的方法(提示:从方法、对象、HTML角度考虑)
(1)var img = new Image();
(2)var img = document.createElementById(“image”)
(3)img.innerHTML = “<img src=”xxx.jpg” />”
假设a.html和b.html在同一个文件夹下面,用javascript实现当打开a.html五秒钟后,自动跳转到b.html。
<script>
function go2b(){
window.location = “b.html”;
window.close();
}
setTimeout( “go2b()”,5000 ); //5秒钟后自动执行go2b()
</script>
Linux的目录进行遍历,编写shell脚本
#!/bin/bash
Tree
指出如下代码片断中的SQL注入漏洞以及解决方法(magic_quotes_gpc = off)
mysql_query(“select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%’”, $link);
注入漏洞主要存在用户提交的数据上,这里的注入漏洞主要是$_GET[catid]和$_GET[keyword]
解决注入漏洞:
$_GET[catid]=intval($_GET[catid]);
$sql=”select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%”;
$sql=addslashes($sql);
Mysql_query($sql);
把 John 新增到 users数组?
$users[] = ‘john’; array_push($users,‘john’);
在PHP中error_reporting这个函数有什么做用?
error_reporting() 设置 PHP 的报错级别并返回当前级别。
如何修改SESSION的生存时间.
方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache
方法2:$savePath = “./session_save_dir/”;
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:
setcookie() and session_set_cookie_params($lifeTime);
请写一个函数,实现如下功能:
字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
方法:
function str_explode($str){
$str_arr=explode(“_”,$str);$str_implode=implode(” “,$str_arr); $str_implode=implode
(“”,explode(” “,ucwords($str_implode)));
return $str_implode;
}
$strexplode=str_explode(“make_by_id”);print_r($strexplode);
方法二:$str=”make_by_id!”;
$expStr=explode(“_”,$str);
for($i=0;$i<count($expStr);$i++){
echo ucwords($expStr[$i]);
}
方法三:echo str_replace(‘ ‘,”,ucwords(str_replace(‘_’,’ ‘,’open_door’)));
下面的类是否正确,若是正确请补全方法输入类属性$_a;错误请修改并输出属性$_a
<?php
Class A{
protected$a=1;
publicfunction test(){
echo$this->a;
}
}
答:
$a=new A;
$a->test();
请取出数组中的最大值?
$a=array(1,9,3,5,6,8);
$a=array(1,2,3,4,5,9);
答:
$b=max($a);
echo $b;
or
$a=array(1,9,3,5,6,8);
rsort($a);
Echo array_shift($a);
写出一个简单的静态数组?
Class A{
Static $a=array('11'=>'1111');
}
Print_r(A::$a);
从表login中选出name字段包含admin的前10条结果全部信息的sql语句
Select *from login where name like '%admin%' limit 0,10;
写出发贴数最多的十我的名字的SQL,利用下表:members(id,username,posts,pass,email)
SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
检测一个变量是否有设置的函数是否?是否为空的函数是?(2分)
isset($str),empty($str);
取得查询结果集总数的函数是?(1分)
答:mysql_num_rows($result);
$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值 (1分)
答:echo $array[0];
完成如下:
(一)建立新闻发布系统,表名为message有以下字段 (3分)
id 文章id
title 文章标题
content 文章内容
category_id 文章分类id
hits 点击量
答:CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY('id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
在数据库test中的一个表student,字段是name,class,score。分别表明姓名、所在班级,分数。
1) 学出每一个班级中的学生,按照成绩降序排序;
select * from student order by score desc;
2) 查出每一个班的及格人数和不及格人数,格式为:class、及格人数、不及格人数;
Select A.class,A.及格人数,B.不及格人数 from (select class, count(*) as ’及格人数‘ from student where score>=60 group by class) as A,(select class,count(*) as ’不及格人数‘ from student where score<60 group by class) as B where A.class=B.class;
3) 用PHP写入链接数据库(“localhost”,”msuser”,”mspass”)、执行以上SQL、显示结果、判断错误、关闭数据库的过程;
$conn=mysql_connect(‘localhost’,'root’,’12345′);
Mysql_select_db(‘test’);
$sql=”";
$result=Mysql_query($sql);
Mysql_close();
ftp://pub.foo.bar.com:2121/incoming/rls.sfv 请给出这个URL各部分的意义
一、ftp:// ;使用的协议是:ftp
二、Pub.foo.bar.com 是域名
三、2121 是使用的端口
四、Incoming/rls.sfv 是当前访问的文件。
下列不属于Javascrip DOM操做事件的是 C
A. onclick
B. onkeydown
C. onbodyload
D. onmouseover
下列PHP函数中不能直接在页面输出字符串的函数是 B
A. echo
B. sprintf
C. printf
在PHP中,‘+’操做符的功能不包括 A
A. 字符串链接
B. 数组数据合并
C. 变量数据相加
下面哪一个选项没有将john添加到users数组中?C
(A) $users[] = ’john’;
(B) array_push($users, ’john’);
(C) $users ||= ’john’;
(D) array_unshift($users, ’john’);
请列出3种PHP数组循环操做的语法,并注明每种循环的优缺点
一、Foreach() 能够遍历关联数组和索引数组,操做简单。
二、For() 只能遍历索引数组。
三、Each list while 以关联和索引两种方式遍历数组,操做复杂。
请列出3个PHP中的预约义全局变量
一、$_SESSION
二、$_COOKIE
三、$_SERVER
四、$_GET
五、$_POST
从PHP4.2.0开始 PHP默认配置将register_globals配置设定为off,请指出这个设定的做用和对PHP相关程序的影响。
Register_globals=off;的时候,关闭了全局变量注册,访问POST方式提交值时用$_POST[];来访问,访问GET方式提交的值时用$_GET[];方式访问。
输出用户的IP地址,而且判断用户的IP地址是否在192.168.1.100 — 192.168.1.150之间
Echo $ip=getenv(‘REMOTE_ADDR’);
$ip=Str_replace(‘.’,”",$ip);
If($ip<1921681150 && $ip>1921681100){
Echo ’ip在192.168.1.100—–192.168.1.150之间‘;
}Else{
Echo ’ip不在192.168.1.100—–192.168.1.150之间‘;
}
输出为Mozilla/4.0(compatible;MSIE5.01;Window NT 5.0)时,可能的输出语句是:B
A.$_SERVER['HTTP_USER_AGENT_TYPE'];
B. $_SERVER['HTTP_USER_AGENT'];
C. $_SERVER['USER_AGENT'];
D. $_SERVER['AGENT'];
下面说法不正确的是:C
A. PHP有四种标量类型:布尔型(boolean),整型(integer),浮点型(float),字符串(string)
B. 浮点型(float)与双精度型(double)是同一种类型
C. 符合类型包括:数组(array),对象(object),资源(resource)
D. 伪类型:混合型(mixed),数字型(number),回调(callback)
下面不是PHP语法的组成部分的函数是:AD
A. array
B. eval
C. each
D. list
执行下面的代码的结果是什么?A
<?php
$bool = TRUE;
echo gettype($bool);
echo is_string($bool);
?>
A. boolean
B. boolean0
C. booleanFALSE
D. booleanfalse
一、 若是能将类的方法定义成static,就尽可能定义成static,它的速度会提高将近4倍。
二、$row[’id’] 的速度是$row[id]的7倍。
三、echo 比 print快,而且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串链接,好比echo$str1,$str2。
四、在执行for循环以前肯定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
五、注销那些不用的变量尤为是大数组,以便释放内存。
六、尽可能避免使用__get,__set,__autoload。
七、require_once()代价昂贵。
八、include文件时尽可能使用绝对路径,由于它避免了PHP去include_path里查找文件的速度,解析操做系统路径所需的时间会更少。
九、若是你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于 time()。
十、函数代替正则表达式完成相同功能。
十一、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
十二、若是一个字符串替换函数,可接受数组或字符做为参数,而且参数长度不太长,那么能够考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组做为查询和替换的参数。
1三、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
1四、用@屏蔽错误消息的作法很是低效,极其低效。
1五、打开apache的mod_deflate模块,能够提升网页的浏览速度。
1六、数据库链接当使用完毕时应关掉,不要用长链接。
1七、错误消息代价昂贵。
1八、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度至关。
1九、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
2一、递增一个未预约义的局部变量要比递增一个预约义的局部变量慢9至10倍。
2二、仅定义一个局部变量而没在函数中调用它,一样会减慢速度(其程度至关于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
2三、方法调用看来与类中定义的方法的数量无关,由于我(在测试方法以前和以后都)添加了10个方法,但性能上没有变化。
2四、派生类中的方法运行起来要快于在基类中定义的一样的方法。
2五、调用带有一个参数的空函数,其花费的时间至关于执行7至8次的局部变量递增操做。相似的方法调用所花费的时间接近于15次的局部变量递增操做。
2六、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽可能多用静态HTML页面,少用脚本。
2七、除非脚本能够缓存,不然每次调用时都会从新编译一次。引入一套PHP缓存机制一般能够提高25%至100%的性能,以避免除编译开销。
2八、尽可能作缓存,可以使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存颇有用,使得脚本没必要为每一个请求作从新编译。
2九、当操做字符串并须要检验其长度是否知足某种要求时,你想固然地会使用strlen()函数。此函数执行起来至关快,由于它不作任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。可是,因为strlen()是函数,多多少少会有些慢,由于函数调用会通过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一块儿执行。在某些状况下,你可使用isset() 技巧加速执行你的代码。
(举例以下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(与下面的技巧作比较)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,由于与后者不一样的是,isset()做为一种语言结构,意味着它的执行不须要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。 3四、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差别是PHP特有的,并不适用于其余语言,因此请不要修改你的C或 Java代码并期望它们能当即变快,没用的。++$i更快是由于它只须要3条指令(opcodes),$i++则须要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所做的那样。牢记这个优化处理不失为一个好主意,由于并非全部的指令优化器都会作一样的优化处理,而且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。 3五、并非事必面向对象(OOP),面向对象每每开销很大,每一个方法和对象调用都会消耗不少内存。 3六、并不是要用类实现全部的数据结构,数组也颇有用。 3七、不要把方法细分得过多,仔细想一想你真正打算重用的是哪些代码? 3八、当你须要时,你总能把代码分解成方法。 3九、尽可能采用大量的PHP内置函数。 40、若是在代码中存在大量耗时的函数,你能够考虑用C扩展的方式实现它们。 4一、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验整体上能够显示出代码的瓶颈。 4二、mod_zip可做为Apache模块,用来即时压缩你的数据,并可以让数据传输量下降80%。 4三、在能够用file_get_contents替代file、fopen、feof、fgets等系列方法的状况下,尽可能用 file_get_contents,由于他的效率高得多!可是要注意file_get_contents在打开一个URL文件时候的PHP版本问题; 4四、尽可能的少进行文件操做,虽然PHP的文件操做效率也不低的; 4五、优化Select SQL语句,在可能的状况下尽可能少的进行Insert、Update操做; 4六、尽量的使用PHP内部函数(可是我却为了找个PHP里面不存在的函数,浪费了本能够写出一个自定义函数的时间,经验问题啊!); 4七、循环内部不要声明变量,尤为是大变量:对象(这好像不仅是PHP里面要注意的问题吧?); 4八、多维数组尽可能不要循环嵌套赋值; 4九、在能够用PHP内部字符串操做函数的状况下,不要用正则表达式; 50、foreach效率更高,尽可能用foreach代替while和for循环; 5一、用单引号替代双引号引用字符串; 5二、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”; 5三、对global变量,应该用完就unset()掉。