大佬教程收集整理的这篇文章主要介绍了面试知识点3,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));
A:$a{0} B:left{$a,1} C:substr($a,0-strlen($a),1); D:$a[0]
2) 自定义函数
1) error_reporTing() 设置 PHP 的报错级别并返回当前级别。
2) 1 E_ERROR 致命的运行错误。错误无法恢复,暂停执行脚本。
3) 2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。
4) 4 E_PARSE 编译时解析错误。解析错误只由分析器产生。
5) 8 E_NOTICE 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)
6) 8191 E_ALL 所有的错误和警告(不包括 E_StriCT) (E_StriCT will be part of E_ALL as of PHP 6.0)
1) 方法一:PHP函数跳转,缺点,header头之前不能有输出,跳转后的程序继续执行,可用exit中断执行后面的程序。
2) header("LOCATIOn:网址");//直接跳转
3) header("refresh:3;url=http://www.baidu.com");//三秒后跳转
1) session:储存用户访问的全局唯一变量,存储在服务器上的PHP指定的目录中的(session_dir)的位置进行的存放
2) cookie:用来存储连续访问一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
3) 两者都可通过时间来设置时间长短。
1) 点换为下划线获取。
2) 如:setcookie('user.name', 'zhangsan');
3) setcookie('user.age', '18');
4) 则需要通过$_COOKIE[‘user_name’]和$_COOKIE[‘user_age’]获取,通过var_dump($_COOKIE)可确认。
1) 操作符+,在前一个数的基础上插入后一个数组,如果有相同的抛弃。
2) array_merge 是在前一个参数基础上插入后一个参数,如果有相同用的key 用后一个覆盖。
[1,2,3,3,4,5]
索引数组和关联数组的区别
1) 对数组进行逆向排序并保持索引关系。
2) 类似的函数还有:
file_get_contents或者curl
A.& B.| C. ~ D.!
A. defined() B. ifdefin() C. ifdefined() D. 无
A. PHP有四种标量类型:布尔类型(Boolean),整型(Integer),浮点型(float),字符串(String)
B.浮点型(float)与双精度型(doublE)是同一种类型
C.复合类型包括:数组(array),对象(object),资源(resourcE)
D.伪类型:混合型(mixed),数字型(number),回调(callBACk)
1) GET请求的数据会附在URL之后,POST把提交的数据则放置在是@R_403_1721@的包体中。
2) GET方式提交的数据最多只能是1024字节, POST是没有大小限制的,http协议规范也没有进行大小限制。
3) POST的安全性要比GET的安全性高。通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存,(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。
1) GD库提供了一系列用来处理图片的功能,使用GD库可以处理图片,或者生成图片。
2) 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
1) __construct(),类的构造函数
2) __destruct(),类的析构函数
4) __callStatic(),用静态方式中调用一个不可访问方法时调用
7) __isset(),当对不可访问@L_607_100@调用isset()或empty()时调用
8) __unset(),当对不可访问@L_607_100@调用unset()时被调用。
9) __sleep(),执行serialize()时,先会调用这个函数
10) __wakeup(),执行unserialize()时,先会调用这个函数
11) __toString(),类被当成字符串时的回应方法
12) __invoke(),调用函数的方式调用一个对象时的回应方法
13) __set_state(),调用var_export()导出类时,此静态方法会被调用。
14) __clone(),当对象复制完成时调用
15) __autoload(),尝试加载未定义的类
16) __debugInfo(),打印所需调试信息
1) 可以使用检测(try)、抛出(throw)和捕获(catch)异常。即使用try检测有没有抛出(throw)异常,若有异常抛出(throw),使用catch捕获异常。
2) 一个 try 至少要有一个与之对应的 catch。定义多个 catch 可以捕获不同的对象。PHP 会按这些 catch 被定义的顺序执行,直到完成最后一个为止。而@L_696_126@些 catch 内,又可以抛出新的异常。
1) PHP 5.3之前使用的垃圾回收机制是单纯的“引用计数”,也就是每个内存对象都分配一个计数器,当内存对象被变量引用时,计数器 1;当变量引用撤掉后,计数器-1;当计数器=0时,表明内存对象没有被使用,该内存对象则进行销毁,垃圾回收完成。
2) “引用计数”存在问题,就是当两个或多个对象互相引用形成环状后,内存对象的计数器则不会消减为0;这时候,这一组内存对象已经没用了,但是不能回收,从而导致内存泄露;
3) PHP5.3开始,使用了新的垃圾回收机制,在引用计数基础上,实现了一种复杂的算法,来检测内存对象中引用环的存在,以避免内存泄露。
1) safe_mode,PHP安全模式,它提供一个基本安全的共享环境,在一个有多个用户账户存在的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以上版本,则将此特性完全去除了。
Urlencode
<?PHP
$a=“<H>some</H><b>html</b>“;
Preg_match(“/<\w?>(\w*?)<\/\w?>/”, $a, $matches);
?>
A@L_71_154@me B.html C.<H>some</H><b>html</b> D.</H><b>
A:@(?<!:)//.*?$@ B: /(^:)\/\/.*?$/ C: /\/\/.*$/ D: @(?<=:)//.*?@
^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$
^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);
View:view层负责将应用的数据以特定的方式展现在界面上。
Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
PHP 命名空间(namespacE)是在PHP 5.3中加入的.
a) 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
b) 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
1) 数据缓存——普遍的一种缓存技术
2) 页面缓存
3) 内存缓存
A.Eaccelerafor
B.HCache
C.APC
D.Zend Framework
4) 500 服务器内部错误
1) register_globals=Off
接收数据的程序应该用根据表单form传值的方法来决定。GET:用$_GET['name']、$http_GET_VARS['name']来接收值;POST:当form用POST提交数据$_POST['name']、$http_POST_VARS['name']来接收值;
接收数据的程序可以直接使用$user_name和$user_pass的这种类似访问变量的方式得到值。
2) magic_quotes_gpc=On
如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用Stripslashes()去掉多余的反斜杠。
必须使用addslashes()对输入数据进行处理,但并不需要使用Stripslashes()格式化输出,因为addslashes()并未将反斜杠一起写入数据库,只是帮助@L_607_224@完成了sql语句的执行。
3) allw_url_include=Off
4) sssion.auto_start=0
答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,
程序功能规则,禁止外部的盗链,控制大@L_197_181@的下载,使用不同主机分流主要流量。
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在请求之间的任何时间点重启,客户端不会得到通知。此外,无状态请求可以由任何可用服务器回答,这十分适合云计算之类的环境。客户端可以缓存数据以改进性能。
在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 http 方法,比如 GET、PUT、POST 和 deletE。Hypermedia 是应用程序状态的引擎,资源表示通过超链接互联。
用框架写接口,普通POST,GET接口,有时候用RESTFUL接口。写控制器从模型调用数据,返回XML或者JSON数据就行了。
APP接口主要解决两个问题,一个SESSION问题,一个是TOKEN问题。客户端第一次请求,服务端生成SESSION_ID,返回给客户端。之和的请求中,客户端把SESSION_ID传给服务端,服务端用SESSION_ID函数可以确保多次请求用的同一个SESSION。TOKEN需要加密和服务端验证。
smarty是很老的技术了。常用的框架如ThinkPHP,Yii都自带模板引擎。最常用的方法是3个:assign赋值,display显示页面,fetch获取页面内容而非显示。
单例模式,简单工厂模式,策略模式,观察者模式,@L_323_262@(树)模式,迭代模式, IOC, mixin。
核心思路:加锁
<?PHP
$fp = fopen("lock.txt","w+");
fwrite($fp, "write something");
flock($fp, LOCK_UN);
fclose($fp);
?>
<?PHP
@R_961_3816@ my_scandir($dir){
$files = array();
if(is_dir($dir)){
if ($handle = opendir($dir)) {
while (($flie = readdir($handlE))!== falsE) {
if ($flie!="." && $file!="..") {
$files[$file] = my_scandir($dir."/".$filE);
} else {
closedir($handlE);
return $files;
?>
过滤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);//以下内容不显示:脚本内容
?>
首先进入PHP安装目录
PHP -f d:/wamp/www/1.PHP 其中-f参数指定要执行的PHP@L_197_181@
PHP -r PHPinfo(); 其中-r表示直接执行PHP代码,无需写开始结束标记
使用key()可以获得数组中当前元素的键名,使用current()则可以返回当前元素的值。
使用array_keys()则可以得到数组中所有的键名。
使用foreach结构foreach($arr as key=>value)可以通过key和value分别获取键名和值。
从以下几个方面考虑:
数据库中库和表都用utf8编码
PHP连接@L_607_224@,指定数据库编码为utf8 @L_607_224@_query(“set names utf8”);
PHP@L_197_181@指定头部编码为utf-8header(“content-type:text/html;charset=utf-8”);
网站下所有@L_197_181@的编码为utf8
html@L_197_181@指定编码为utf-8<Meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>
@H_329_4@mb_sring、iconv、curl、GD、XML、socket、@L_607_224@、PDO等
<IfModulemod_rewrite.c>
RewriteENGIneon
RewriteCond%{requEST_FILename}!-f
RewriteCond%{requEST_FILename}!-d
RewriteBase/
RewriteRule./index.PHP[L]
</IfModule>
如果requEST_FILename@L_197_181@存在,就直接访问@L_197_181@,不进行下面的rewrite规则,
如果requEST_FILename目录存在,就直接访问目录,不进行下面的rewrite规则,
RewriteRule./index.PHP[L]的意思是把所有的请求都给index.PHP处理。
一般是在header、set_cookie以及session_start函数前面有输出(包括空格)的情况下,会报该警告信息
对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。
基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。
转义引号。
addslashes() 是强行加\;
PDO的预处理与参数绑定。
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
2.在不登出A的情况下,访问危险网站B。
服务端进行CSRF防御
主要是通过伪静态来实现单一入口,mvc框架都是这样。将所有请求通过apache伪静态解析转给某个指定@L_197_181@,然后通过PHP的$_SERVER[]这个全局变量来去的请求的路径字符串,对其进行解析再分配给指定的类去处理,基本就是这样。
最简单的方法是建立一个.htaccess@L_197_181@。@L_197_181@内容贴给你
<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
将这个@L_197_181@放在根目录下即可。@L_197_181@作用很明显:将所有的请求路径转给index.PHP,然后在index.PHP里做请求字符串的判断即可打到路由解析功能。
57. PHP有几种运行方式?
1、CGI
CGI即通用网关接口(common gatewag interfacE),它是一段程序,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执 行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。
2、FastCGI
fast-cgi 是cgi的升级版本,FastCGI像是一个常驻(long-livE)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一 次。PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。
3、APACHE2HANDLER
PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出 现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次http请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。
4、CLI
cli是PHP的命令行运行模式,大家经常会使用它,但是可能并没有注意到(例如:我们在linux下经常使用 “PHP -m”查找PHP安装了那些扩展就是PHP命令行运行模式;
1. 第一范式
确保数据表中每列(字段)的原子性。
2. 第二范式(依赖性)
在第一范式的基础上更进一步,目标是确保表中的每列都和主键相关。
3. 第三范式(唯一性)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。
数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做要么全不做,是一个不可分割的工作单位。
数据库事务的四大特性(简称ACID)是:
(1) 原子性(Atomicity)
事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。
例如银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折减款,却没有提取现金。2个步骤必须同时完成或者都不完成。
(2)一致性(consistency)
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。
例如完整性约束a+b=10,一个事务改变了a,那么b也应随之改变。
(3)分离性(亦称独立性isolation)
分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
(4)持久性(Durability)
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。
a) 数据库设计方面,设计结构良好的数据库,允许部分数据冗余。 选取最适用的字段@L_607_100@,尽可能把字段设置为NOT NULL,这样在查询的时候,数据库不用去比较NULL值。
b) 系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开。 写高效sql语句,以提高效率。使用连接(join)来代替子查询使用联合(union)来代替手动创建的临时表所得皆必须,只从数据库取必须的数据。必 要的时候用不同的存储引擎,比如InnoDB可以减少死锁,HEAP可以提高一个数量级的查询速度。
a) MyISAM、InnoDB、MERGE、MEMORY(HEAp)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
b) MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。MyISAM在所有@L_607_224@配置里被支持,它是默认的存储引擎,除非你配置@L_607_224@默认使用另外一个引擎。
C) InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的@L_607_224@-Max二进制分发版里。InnoDB也默认被包括在所 有@L_607_224@ 5.1二进制分发版里,你可以按照喜好通过配置@L_607_224@来允许或禁止任一引擎。
d) MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被默认包含在@L_607_224@中。
E) NDB Cluster是被@L_607_224@ Cluster用来实现分割到多台计算机上的表的存储引擎。它在@L_607_224@-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在未来的@L_607_224@分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows。
f) 比较常用的是MyISAM和InnoDB
a) 通过Show命令,慢查询日志,profiling分析查询确定瓶颈。
b) 使用 EXPLAIN 关键字可以让你知道@L_607_224@是如何处理你的sql语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
C) 当只要一行数据时使用 LIMIT 1
d) 为搜索字段建索引
E) 在Join表的时候使用相当类型的例,并将其索引
f) 尽可能的使用 NOT NULL
g) 水平分表
h) 垂直分表
i) 选择正确的存储引擎
j) 避免长连接
算法问题
//冒泡排序(数组排序)
function bubble_sort($array){
$count = count($array);
if ($count <= 0) return false;
for($j=$i; $j<$count-1; $j++){
$tmp = $arraY[$i];
$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];
$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);
}
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
return $mid;
return bin_sch($array, $low, $mid-1, $k);
return bin_sch($array, $mid+1, $high, $k);
return -1;
}
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
$arraY[$n] = $k;
if ($i<$n){
return $i;
return -1;
}
//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
if($order == 0){
asort($keysvalue);
foreach($keysvalue as $key => $vals) {
$new_array = array();
foreach($keysort as $key => $val) {
$new_arraY[$key] = $arr[$val];
return $new_array;
}
PHP周边问题
SVN , GIT。
具体命令不在一一列举,需熟记。
a) ls, pwd, cd, cat, vi, service, chmod, chown, tar, su等。
使用crontab执行。
在Linux中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出。
在crontab@L_197_181@中如何输入需要执行的命令和时间。该@L_197_181@中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔。格式如下:
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把任何输出都email到root的信箱了。
每两个小时
0 */2 * * * echo "Have a break Now." >> /tmp/test.txt
a) 用的CentOS,Yum安装。生产环境有专门的运维工程师负责。
a) Kill
b) Pkill
a) Scp
b) ftp
a) Top
b) W
C) Uptime
前端问题
a) jQuery和扩展。
javascript 中的 this 有 五种情况:
1.全局范围:
它 会指向 全局对象( 浏览器下指window)
它 还是指向全局对象。
4.使用 new 实例化对象时:
它指向 新创建的 对象。
如: Function.prototype 上的 call 或者 apply 方法 以及 with等
它指向 传入的对象。
concat, join, pop, push, shift, unshift, sort
a) 每个函数都有一个prototype@L_607_100@,这个@L_607_100@是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和@L_607_100@,也就是说将函数用作构造函数调用(使用New操作符调用)的时候,新创建的对象会从原型对象上继承@L_607_100@和方法。
b) prototype @L_607_100@使您有能力向对象添加@L_607_100@和方法。
a) Window.domain;
b) JSONP
以上是大佬教程为你收集整理的面试知识点3全部内容,希望文章能够帮你解决面试知识点3所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。