、一个数据库的状态是否正常可以从哪些指标看出来,至少列出2个
答QPS以及IOPS
正在运行的mysql进行监控,其中一个方式就是查看mysql运行状态。
(1)QPS(每秒Query量)
QPS = Questions(or Queries) / seconds
mysql > show global status like 'Question%';
、apache和nginx的特性区别在哪?
apache是一个请求对应一个线程的模式,不管那个请求是否需要读写都会分配一个线程,而nginx则是异步非阻塞模型,只有当请求需要读写的时候才会拿出来处理。
、问页面请求超时取决于nginx的配置还是PHP-CGI的配置?
nginx
、PHP中的PEAR是什么?
PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库
、fastcgi与cgi的区别
fastcgi和cgi都是协议,fastcgi是管理cgi的
、PHP中常见错误类型?
1、Notice:这些都是一些非常正常的信息,而非重大错误,甚至有一些都不会展示给用户。
2、Warning:这类是稍微严重一些的错误,错误会展示给用户,但不影响程序的输出。
3、Fatal errors:这些是非常严重的错误,比如要访问一个不存在的PHP类。
、http 状态码?
200 - 服务器成功返回网页
301 - 永久移动,请求的网页已被永久移动到新位置
304 - 缓存网页未修改,直接返回内容
401 - 未授权
403 -(已禁止) 服务器拒绝请求
404 - 请求的网页不存在,网页不存在。
500 - 服务器遇到错误,无法完成请求。
503 - 服务器暂时不可用,目前无法使用服务器(由于超载或进行停机维护)。通常,这只是一种暂时的状态。 HTTP 状态代码的完整列表
、php中定义常量时,const和define的区别?
define ('Newconstant', 30);
答:使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
1、const用于类成员变量的定义,一经定义,不可修改。Define不可以用于类成员变量的定义,可用于全局常量。
2、Const可在类中使用,define不能
3、Const不能再条件语句中定义常量
4、const采用普通的常量名称,define可以采用表达式作为名称
5、const只能接受静态的标量,而define可以采用任何表达式
6、const定义的常量时大小写敏感,而define可以通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。
、PHP支持多继承吗?
5.4版本以后可以使用Traits方法实现
5.4版本不可以。PHP类只能继承一个父类,并用关键字“extended”标识。
、用最简单的语言告诉我PHP是什么?
PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。
、什么是MVC?
MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。
Model:数据信息存取层。
View:view层负责将应用的数据以特定的方式展现在界面上。
Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据
、cookie、session的联系和区别,多台web服务器如何共享session?
cookie在客户端保存状态,session在服务器端保存状态。但是由于在服务器端保存状态的时候,在客户端也需要一个标识,所以session也可能要借助cookie来实现保存标识位的作用。
cookie包括名字,值,域,路径,过期时间。路径和域构成cookie的作用范围。cookie如果不设置过期时间,则这个cookie在浏览器进程 存在时有效,关闭时销毁。
如果设置了过期时间,则cookie存储在本地硬盘上,在各浏览器进程间可以共享。
session存储在服务器端,服务器用一种散列表类型的结构存储信息。当一个连接建立的时候,服务器首先搜索有没有存储的session id,如果没有,则建立一个新的session,将session id返回给客户端,
客户端可以选择使用cookie来存储session id。也可以用其他的方法,比如服务器端将session id附在URL上。
区别:
(1).cookie在本地,session在服务器端。
(2).cookie不安全,容易被欺骗,session相对安全。
(3).session在服务器端,访问多了会影响服务器性能。
(4).cookie有大小限制,为3K
多服务器共享session可以尝试将session存储在memcache中。
、浏览器下载最大并发数
http1.0 一般在2-6个
http1.0 一般在4-6个
、 简述POST 和GET传输的最大容量分别是多少?
POST根据PHP.ini文件配置(默认的是8M)
GET大小限制在2kb
、http协议中的post和get有何区别?
GET用于获取信息,不应该用于修改信息,POST可用于更新修改信息。
GET可传输数据大小和URL有关,而POST没有限定大小,大小和服务器配置有关。
GET放在URL中,因此不安全,而pOST传输数据对于用户来说是不可见的,所以相对安全。
在ajax: post不被缓存,get被缓存所以一般在请求结尾加Math.random();
SERVER端接受:因为在submit提交的时候是按不同方式进行编码的,所以服务端在接受的时候会按照不同的方式进行接受!
编码方式:如果传递数据是非-ASCII,那么GET一般是不适应的,所以在传递的时候会做编码处理!
、字符串和数字比较,如题输出应该是?
$s = 'abc';
if ($s == 0) {
echo 'is zero';
} else {
echo 'is not zero';
}
答案:is zero 因为PHP是弱类型,类型是可以根据赋值改变
、echo count("abc"); 输出什么?
echo count(null); 答案:0
echo count(false); 答案:1
echo count(true); 答案:1
echo count("abc"); 答案:1
echo count(123); 答案:1
、写个函数用来对二维数组排序。
array_multisort()
、请写一个函数验证电子邮件的格式是否正确(要求使用正则)
$reg = '#[a-z0-9-_.]+@[\w]{2,}\.[\w]+#is';
$rst = preg_match($reg, '34234wujunzhiai@163.com');
if($rst){
echo '正确';
}else {
echo '错误';
}
、用php写出显示客户端Ip与服务器Ip的代码
答案:客户端 getenv('REMOTE_ADDR');
服务器端 getenv('SERVER_ADDR'); // gethostbyname('www.baidu.com');
、用最少的代码写一个求3值最大值的函数.
function get_max($a,$b,$c)
{
return ( $a > $b ? $a : $b ) > $c ? ( $a > $b ? $a : $b ) : $c;
}
echo get_max(1,2,3);
7、写出 访问 http://www.sina.com.cn 所需的报文头
md5_file()
、本页地址,当前脚本的名称
echo $_SERVER[PHP_SELF];
、链接到当前页面的上一页面的 URL 地址:
echo $_SERVER[HTTP_REFERER];
、echo(),print(),print_ r()的区别
echo 是php语句, print和print_ r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(如int, string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
、对于大流量的网站,您采用什么样的方法来解决访问量问题?
1、pHp缓存
2、生成html静态页面
3、使用主辅数据库,把数据库的读写分开
4、使用负载均衡器和多台服务器
、类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是。
serialize() 序列化
unserialize() 反序列化
、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
1、pHp程序执行到require()时,只会读取一次档案,故常放在程序开头,档案引入后pHp会将网页档重新编译,让引入档成为原先网页的一部分。
2、pHp程序执行到include()时,每次皆会读取档案,故常用于流程控制的区段,如条件判断或循环中。
3、require() :如果文件不存在,会报出一个fatal error.脚本停止执行
4、include() : 如果文件不存在,会给出一个 warning,但脚本会继续执行
5、推荐使用require_once()和include_once(),可以检测文件是否有重复包含。
、如何修改SESSION的生存时间.
方法一:
将php.ini 中session.gc_maxlifetime 设置为 9999(默认为 1440)重启 apache 即可
方法二:
$savepath = "./session_save_dir/";
$lifeTime = 24 * 3600;
session_save_path($savepath);
session_set_cookie_params($lifeTime);
session_start();
方法三:
setcookie() 或session_set_cookie_params($lifeTime) 在pHp中,heredoc是一种特殊的字符串,它的结束标志必须?
heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串
<?php
$str = <<<EOD
I saw a dog yesterday.
EOD;
>
需要注意的是:
1、"<<<"后面的EOD是自己定义的标签名称,必须要成对,而且后面要加上分号表示结束。
2、结束的标签前面最好不要有空格,以免发生错误
、在pHp中error_reporting这个函数有什么作用?
error_reporting() 用于设置php的侦听错误的级别.[用来配置错误信息回报的等级].
、error_reporting(2047)什么作用?
答案:相当于 error_reporting('E_ALL'); 输出所有的错误
、检测一个变量是否有设置的函数是?是否为空的函数是?
isset($a)
empty($a)
、$arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值
echo $arr[0];
、$a = 'abcdef'; 请取出$a的值并打印出第一个字母
答:echo $a{0} 或 echo substr($a,0,1)
、请写出php5权限控制修饰符
public(公共)
private(私用)
protected(继承)
、请写出php5的构造函数和析构函数
__construct() 构造函数
__destruct() 析构函数
4、php中web上传文件的原理是什么,如何限制上传文件的大小?
pHp上传文件默认大小为2M,设置上传大小的配置项是upload_max_filesize,post_max_size设置一次pOST中pHp能接收的最大数据量,应该比upload_max_filesize大。
5、php防止sql注入式攻击,用什么函数转换字符串?
addslashes();
6、你常用的php字符串函数?
substr(),strtolower(),ucwords(),ucfirst(),strtoupper(),implode(),explode(),str_replace(),strpos(),strrev()
8、HTTp的通讯协议是?
TCP
9、php中的文件读写操作,读取文件test.txt中前300字节的内容?
$handle=fopen("test.txt","r");
$contents=fread($handle,300);
fclose($handle);
11、写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
答案1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
12、php5中魔术方法函数有哪几个,请举例说明各自的用法
__construct() :实例化对象时被调用;
__destuct():当删除一个对象或者对象操作终止是被执行;
__call():调用对象不存在方法时被调用;
__get():调用对象不存在的属性时被调用;
__set():设置对象不存在的属性时被调用;
__toString():打印一个对象时被调用,比如echo $obj,print($obj);
__clone():克隆对象时被调用,比如$t = new Test();$tt = clone $t;
__sleep():serialize之前被调用,若对象比较大,想做一些删除在序列化,可以考虑使用该方法;
__wakeup():unserialize之前被调用,做些对象的初始化;
__isset():检测对象是否存在属性的时候被调用,如 isset($c->name);
__unset():unset一个对象属性时被调用,如:unset($c->name);
__set_state():调用var_export时被调用,用__set_state的返回值作为 var_export的返回值
__autoload():实例化一个对象时,如果对应的类不存在,在该方法被调用
魔术常量:
__LINE__:返回当前行号;
__FILE__:返回文件的完整路径和文件名,如果用在包含文件里面,则返回包含文件名,自 php4.0.2开始,
__FILE__总是包含一个绝对路径,而在此前的版本有时候会包含一个相对路径
__FUNCTION__:返回函数名称(自 php4.3.0新加的)。自php5起本常量返回该函数被定义时的名称,区分大小写,在php4中该值总是小写;
__CLASS__:返回类的名称,自 php4.3.0新加的,自php5起本常量返回该类被定义时的名称,区分大小写,在php4中该值总是小写的;
__METHOD__:返回类的方法名。 php5新加的
13、简单说明pHp的垃圾收集机制是怎样的?
对变量有个引用计数,计数到0时变量被销毁
14、请写一段pHp代码,确保多个进程同时写入同一个文件成功
代码:
function writeData($path, $mode, $data){
$fp = fopen($path, $mode);
$retries = 0;
$max_retries = 100;
do {
if ($retries > 0) {
usleep(rand(1, 10000));
}
$retries += 1;
}while (!flock($fp, LOCK_EX) and $retries <= $max_retries);
if ($retries == $max_retries) {
return false;
}
fwrite($fp, "$data\\n");
flock($fp, LOCK_UN);
fclose($fp);
return true;
}
15、你用什么方法检查php脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在
php脚本的执行效率
1, 代码脚本里计时
2, xdebug统计函数执行次数和具体时间进行分析,最好使用工具winCacheGrind分析
3, 在线系统用strace跟踪相关进程的具体系统调用
数据库SQL的效率
sql的explain(mysql),启用slow query log记录慢查询
通常还要看数据库设计是否合理,需求是否合理等
、microtime和mktime两个函数的区别。
echo microtime(); 返回当前时间戳
echo mktime(); 取得指定的时间戳
16、求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数
$begin = strtotime('2007-2-5');
$end = strtotime('2007-3-6');
echo ($end-$begin)/(24*3600);
17、用php打印出前一天的时间格式是YYYY-MM-DD HH:II:SS
echo date('Y-m-d H:i:s', time()-24*3600);
echo date('Y-m-d H:i:s', strtotime('-1 day')); 前一天
echo date('Y-m-d H:i:s', strtotime('-1 second'));
echo date('Y-m-d H:i:s', strtotime('-1 minute'));
echo date('Y-m-d H:i:s', strtotime('-1 hour'));
echo date('Y-m-d H:i:s', strtotime('-1 day'));
echo date('Y-m-d H:i:s', strtotime('-1 week'));
echo date('Y-m-d H:i:s', strtotime('-1 month'));
echo date('Y-m-d H:i:s', strtotime('-1 year'));
请写一个函数,实现以下功能:
字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”。
function str_change($str) {
$str = str_replace ('_', ' ', $str);
$str = ucwords($str);
$str = str_replace (' ', '', $str);
return $str;
}
4、请简述操作系统的线程与进程的区别。列举LINUX下面你使用过的软件?
5、熟悉memcache/redis、MVC/REST架构、模板引擎、中间件的原理与应用者优先;
6、熟悉TCP/IP、HTTP协议者优先;
===============算法=====================
1、请使用伪语言结合数据结构冒泡排序法对以下一组数据进行排序 10 2 36 14 10 25 23 85 99 45。
$a = array(10,2,36,14,10,25,23,85,99,45);
$count = count($a);
for($j=1; $j<$count; $j++){
for($i=0; $i<$count-$j; $i++){
if($a[$i] > $a[$i+1]) {
$t = $a[$i] ;
$a[$i] = $a[$i+1] ;
$a[$i+1] = $t ;
}
}
}
print_r($a);
============Mysql==========================
、mysql_fetch_row 和mysql_fetch_array之间有什么区别?
mysql_fetch_row() 从结果集中取得一行作为枚举数组
mysql_fetch_array() 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
、MYSQL取得当前时间的函数是?,格式化日期的函数是
now() DATE_FORMAT(date , format)
select now();
select curdate();
select curtime();
1、请简述数据库设计的范式及应用。
一般第3范式就足以,用于表结构的优化,这样做既可以避免应用程序过于复杂同时也避免了SQL语句过于庞大所造成系统效率低下
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;
ANSWER:
第一范式:若关系模式R的每一个属性是不可再分解的,再属于第一范式。
第二范式:若R属于第一范式,且所有的非码属性都完全函数依赖于码属性,则为第二范式。
第三范式:若R属于第二范式,且所有的非码属性没有一个是传递函数依赖于候选码,则属于第三范式
1、创建新闻发布系统,表名为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;
2、列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩
name score
张三 语文 59
张三 数学 80
张三 英语 33
李四 语文 50
李四 数学 50
李四 英语 58
王五 语文 88
王五 数学 90
答:select name,sum(score<60) as gk,avg(score) as pj from student group by name having gk>=2;
============Javascript==========================
、JS表单弹出对话框函数是?获得输入焦点函数是?
弹出对话框: alert(),prompt(),confirm()
获得输入焦点 focus()