一、兩張表 city表和province表。分別為城市與省份的關(guān)系表。
目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運(yùn)營、企業(yè)網(wǎng)站設(shè)計(jì)、泗洪網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
表名:city
id City Provinceid
1 廣州 1
2 深圳 1
3 惠州 1
4 長沙 2
5 武漢 3
………. 廣州
表名稱:province:
id Province
1 廣東
2 湖南
3 湖北
……….
1、寫一條sql語句關(guān)系兩個(gè)表,實(shí)現(xiàn):顯示城市的基本信息。顯示字段:城市id ,城市名, 所屬省份 。
如:
Id(城市id) Cityname(城市名) Privence(所屬省份)
2、如果要統(tǒng)計(jì)每個(gè)省份有多少個(gè)城市,請(qǐng)用group by 查詢出來。顯示字段:省份id ,省份名,包含多少個(gè)城市。
二、主鍵 和外鍵表示什么?一般用于做什么?
主鍵:能夠唯一表示數(shù)據(jù)表中的每個(gè)記錄的字段或者字段的組合就稱為主鍵。一個(gè)主鍵是唯一識(shí)別一個(gè)表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián),在這一點(diǎn)上,主鍵是不同表中各記錄間的簡單指針,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用于指定一個(gè)或多個(gè)列的組合值具有唯一性,以防止在列中輸入重復(fù)的值,所以,主鍵的值對(duì)用戶而言是沒有什么意義,并且和它賦予的值也沒有什么特別聯(lián)系。
外鍵:若有兩個(gè)表A,B,C是A的主鍵,而B中也有C字段,則C就是表B的外鍵,外鍵約束主要用來維護(hù)兩個(gè)表之間數(shù)據(jù)的一致性。A為基本表,B為信息表。
在數(shù)據(jù)庫中,常常不只是一個(gè)表,這些表之間也不是相互獨(dú)立的,不同的表之間需要建立一種關(guān)系,才能將它們的數(shù)據(jù)相互溝通,而在這個(gè)溝通過程中,就需要表中有一個(gè)字段作為標(biāo)志,不同的記錄對(duì)應(yīng)的字段取值不能相同,也不能是空白的,通過這個(gè)字段中不同的值可以區(qū)別各條記錄,就像我們區(qū)別不同的人,每個(gè)人都有名字,但它卻不能作為主鍵,因?yàn)槿嗣苋菀壮霈F(xiàn)重復(fù),而身份證號(hào)是每個(gè)人都不同的,所以可以根據(jù)它來區(qū)別不同的人,數(shù)據(jù)庫的表中作為主鍵的段段就要像人的身份證號(hào)一樣,必須是每個(gè)記錄的值都不同,這才能根據(jù)
主鍵的值來確定不同的記錄。
關(guān)系:外鍵一定是另外某個(gè)表的主鍵。
三、select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 會(huì)獲得什么內(nèi)容,請(qǐng)寫出來。
會(huì)獲得三條數(shù)據(jù):
第一條:當(dāng)前時(shí)間;
第二條:當(dāng)前時(shí)間加上14天;
第三條:當(dāng)前時(shí)間減去3天。
四、您所知道的MYSQL 數(shù)據(jù)庫備份,還原方式有哪幾種?
備份:
一,搭建主從架構(gòu),master-slave,通過binlog文件同步復(fù)制主庫的數(shù)據(jù),也可以直接通過binlog文件恢復(fù)數(shù)據(jù)。
二,通過系統(tǒng)計(jì)劃任務(wù)執(zhí)行mysqldump做周期性全備份。
三,物理備份,直接拷貝數(shù)據(jù)文件、參數(shù)文件、日志文件。
還原:
一.通過mysql操作工具,如phpmyadmin,sqlyog等導(dǎo)入備份過的數(shù)據(jù)庫文件。
二.將物理備份的文件拷貝到mysql的data目錄下
五、內(nèi)容管理系統(tǒng)中,表message有如下字段
id 文章id
title 文章標(biāo)題
content 文章內(nèi)容
category_id 文章分類id
hits 點(diǎn)擊量
創(chuàng)建上表,寫出MySQL語句
六、同樣上述內(nèi)容管理系統(tǒng):表comment記錄用戶回復(fù)內(nèi)容,字段如下
comment_id 回復(fù)id
id 文章id,關(guān)聯(lián)message表中的id
comment_content 回復(fù)內(nèi)容
現(xiàn)通過查詢數(shù)據(jù)庫需要得到以下格式的文章標(biāo)題列表,并按照回復(fù)數(shù)量排序,回復(fù)最高的排在最前面
文章id 文章標(biāo)題 點(diǎn)擊量 回復(fù)數(shù)量
用一個(gè)SQL語句完成上述查詢,如果文章沒有回復(fù)則回復(fù)數(shù)量顯示0
七、內(nèi)容管理系統(tǒng),表category保存分類信息,字段如下
category_id int(4) not null auto_increment;
category_name varchar(40) not null;
用戶輸入文章時(shí),通過選擇下拉菜單選定文章分類
寫出如何實(shí)現(xiàn)這個(gè)下拉菜單
八、PHP文件操作
1、內(nèi)容管理系統(tǒng):用戶提交內(nèi)容后,系統(tǒng)生成靜態(tài)HTML頁面;寫出實(shí)現(xiàn)的基本思路
2、簡單描述用戶修改發(fā)布內(nèi)容的實(shí)現(xiàn)流程和基本思路
1)當(dāng)用戶提交后生成一個(gè)由url地址MD5后的文件的編譯頁面,用文件處理file函數(shù)生成一個(gè)模板合成頁,判斷模板編譯頁是否有,模板頁無或者編譯頁的創(chuàng)建時(shí)間戳小于模板頁的修改時(shí)間都會(huì)從新生成編譯頁面,編譯后的頁面會(huì)調(diào)用對(duì)應(yīng)數(shù)據(jù)庫的值顯示在頁面中,通過對(duì)內(nèi)存數(shù)據(jù)的讀取釋放,顯示出我們看到的靜態(tài)數(shù)據(jù),然后用file文件將其保存起來生成靜態(tài)的頁面
2)當(dāng)用戶修改了發(fā)布內(nèi)容都會(huì)修改數(shù)據(jù)相關(guān)的內(nèi)容,并通過編譯頁面更新靜態(tài)數(shù)據(jù)并用文件的方式緩存起來,當(dāng)用戶查看時(shí)將不做任何數(shù)據(jù)庫查找,直接調(diào)用該緩存文件即可
某大公司的PHP面試題
管理提醒: 本帖被 haowubai 執(zhí)行取消置頂操作(2009-07-30)
1. 如何用php的環(huán)境變量得到一個(gè)網(wǎng)頁地址的內(nèi)容?ip地址又要怎樣得到?
[php]
echo $_SERVER ['PHP_SELF'];
echo $_SERVER ['SERVER_ADDR'];
[/php]
2. 求兩個(gè)日期的差數(shù),例如2007-2-5 ~ 2007-3-6 的日期差數(shù)
[php]
$begin=strtotime('2007-2-5');
$end=strtotime('2007-3-6');
echo ($end-$begin)/(24*3600);
[/php]
3. 請(qǐng)寫一個(gè)函數(shù),實(shí)現(xiàn)以下功能:
字符串“open_door” 轉(zhuǎn)換成 “OpenDoor”、”make_by_id” 轉(zhuǎn)換成 ”MakeById”。
[php]
function changeStyle( $str) {
/*$str = str_replace ( "_", " ", $str );
$str = ucwords ( $str );
$str = str_replace ( " ", "", $str );
return $str;*/
$arrStr=explode('_',$str);
foreach($arrStr as $key=$value){
$arrStr[$key]=strtoupper(substr($value,0,1)).substr($value,1);
}
return implode('',$arrStr);
}
$s = "open_door";
echo changeStyle ( $s );
[/php]
4. 要求寫一段程序,實(shí)現(xiàn)以下數(shù)組$arr1轉(zhuǎn)換成數(shù)組$arr2:
[php]$arr1 = array (
'0' = array ('fid' = 1, 'tid' = 1, 'name' ='Name1' ),
'1' = array ('fid' = 1, 'tid' = 2 , 'name' ='Name2' ),
'2' = array ('fid' = 1, 'tid' = 5 , 'name' ='Name3' ),
'3' = array ('fid' = 1, 'tid' = 7 , 'name' ='Name4' ),
'4' = array ('fid' = 3, 'tid' = 9, 'name' ='Name5' )
);
$arr2 = array (
'0' = array (
'0' = array ( 'tid' = 1, 'name' = 'Name1'),
'1' = array ( 'tid' = 2, 'name' = 'Name2'),
'2' = array ( 'tid' = 5, 'name' = 'Name3'),
'3' = array ( 'tid' = 7, 'name' = 'Name4')
),
'1' = array (
'0' = array ( 'tid' = 9, 'name' = 'Name5' )
)
);
?php
$arr1 = array (
'0' = array ('fid' = 1, 'tid' = 1, 'name' ='Name1' ),
'1' = array ('fid' = 1, 'tid' = 2 , 'name' ='Name2' ),
'2' = array ('fid' = 1, 'tid' = 5 , 'name' ='Name3' ),
'3' = array ('fid' = 1, 'tid' = 7 , 'name' ='Name4' ),
'4' = array ('fid' = 3, 'tid' = 9, 'name' ='Name5' )
);
function changeArrayStyle($arr){
foreach($arr as $key=$value){
$result[$value['fid']][]=$value;
}
return array_values($result);
}
$arr2=changeArrayStyle($arr1);
echo "pre";
var_dump($arr2);
[/php]
5. 請(qǐng)簡述數(shù)據(jù)庫設(shè)計(jì)的范式及應(yīng)用。
一般第3范式就足以,用于表結(jié)構(gòu)的優(yōu)化,這樣做既可以避免應(yīng)用程序過于復(fù)雜同時(shí)也避免了SQL語句過于龐大所造成系統(tǒng)效率低下。
ANSWER:
第一范式:若關(guān)系模式R的每一個(gè)屬性是不可再分解的,再屬于第一范式。
第二范式:若R屬于第一范式,且所有的非碼屬性都完全函數(shù)依賴于碼屬性,則為第二范式。
第三范式:若R屬于第二范式,且所有的非碼屬性沒有一個(gè)是傳遞函數(shù)依賴于候選碼,則屬于第三范式。
6.一個(gè)表中的Id有多個(gè)記錄,把所有這個(gè)id的記錄查出來,并顯示共有多少條記錄數(shù),用SQL語句及視圖、存儲(chǔ)過程分別實(shí)現(xiàn)。
存儲(chǔ)過程:
[php]
DELIMITER //
create procedure proc_countNum(in columnId int,out rowsNo int)
begin
select count(*) into rowsNo from member where member_id=columnId;
end
call proc_countNum(1,@no);
select @no;
[/php]
視圖:
create view v_countNum as select member_id,count(*) as countNum from member group by member_id
select countNum from v_countNum where member_id=1
7 表中有A B C三列,用SQL語句實(shí)現(xiàn):當(dāng)A列大于B列時(shí)選擇A列否則選擇B列,當(dāng)B列大于C列時(shí)選擇B列否則選擇C列。
[php]select
case
when first_namemiddle_name then
case when first_namelast_name then first_name
else last_name end
else
case when middle_namelast_name then middle_name else last_name
end
end as name
from member
[/php]
8請(qǐng)簡述項(xiàng)目中優(yōu)化sql語句執(zhí)行效率的方法,從哪些方面,sql語句性能如何分析?
ANSWER: sql優(yōu)化有鳥用,不如直接加索引。
9 如果模板是用smarty模板。怎樣用section語句來顯示一個(gè)名為$data的數(shù)組。比如:
[php]$data = array(
[0] = array( [id]=8 [name]=’name1′)
[1] = array( [id]=10 [name]=’name2′)
[2] = array( [id]=15 [name]=’name3′)
……
)[/php]
寫出在模板頁的代碼? 若用foreach語句又要怎樣顯示呢?
占無答案.
10 寫一個(gè)函數(shù),能夠遍歷一個(gè)文件夾下的所有文件和子文件夾。(目錄操作)
[php] ?php
$d = dir(dirname(__file__));
//echo "Handle: " . $d-handle . "\n";
//echo "Path: " . $d-path . "\n";
while ( false !== ($entry = $d-read ()) ) {
echo $entry . "br /";
}
$d-close ();
[/php]
11 兩張表 city表和province表。分別為城市與省份的關(guān)系表。
city:
id City Provinceid
1 廣州 1
2 深圳 1
3 惠州 1
4 長沙 2
5 武漢 3
………. 廣州
province:
id Province
1 廣東
2 湖南
3 湖北
……….
(1) 寫一條sql語句關(guān)系兩個(gè)表,實(shí)現(xiàn):顯示城市的基本信息。?
(2) 顯示字段:城市id ,城市名, 所屬省份 。
如:
Id(城市id) Cityname(城市名) Privence(所屬省份)
。。。。。。。。。
。。。。。。。。。
(2)如果要統(tǒng)計(jì)每個(gè)省份有多少個(gè)城市,請(qǐng)用group by 查詢出來。?
顯示字段:省份id ,省份名,包含多少個(gè)城市。
ANSWER:
1.select A.id,A.Cityname,B.Province from city A,province B where A.provinceid=B.id
2.select B.id,B.Province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id
12. 按照你的經(jīng)驗(yàn)請(qǐng)簡述軟件工程進(jìn)行軟件開發(fā)的步驟。以下工具Rational Rose、PowerDesigner、Project、VSS或CVS、TestDirector使用過那種,有缺點(diǎn)是什么?
公司用dbdesigner及cvs,測(cè)試管理工具用的是Mantis
13. 請(qǐng)簡述操作系統(tǒng)的線程與進(jìn)程的區(qū)別。列舉LINUX下面你使用過的軟件?
14. 請(qǐng)使用偽語言結(jié)合數(shù)據(jù)結(jié)構(gòu)冒泡排序法對(duì)以下一組數(shù)據(jù)進(jìn)行排序 10 2 36 14 10 25 23 85 99 45。
[php]function bubble_sort( $arr){
$number=count($arr);
for($i=0;$i$number-1;$i++){
for($j=0;$j$number-1-$i;$j++){
if($arr[$j]$arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
}
$str="10 2 36 14 10 25 23 85 99 45";
$arr=explode(" ",$str);
bubble_sort($arr);
echo "pre";
var_dump($arr);
[/php]
通過sysbench的oltp_read_write測(cè)試來模擬業(yè)務(wù)壓力、以此來給指定的硬件環(huán)境配置一份比較合理的MySQL配置文件。
環(huán)境介紹
硬件配置
請(qǐng)點(diǎn)擊輸入圖片描述
軟件環(huán)境
請(qǐng)點(diǎn)擊輸入圖片描述
優(yōu)化層級(jí)與指導(dǎo)思想
優(yōu)化層級(jí)
MySQL數(shù)據(jù)庫優(yōu)化可以在多個(gè)不同的層級(jí)進(jìn)行,常見的有:
SQL優(yōu)化
參數(shù)優(yōu)化
架構(gòu)優(yōu)化
本文重點(diǎn)關(guān)注:參數(shù)優(yōu)化
指導(dǎo)思想
日志先行 -- 一個(gè)事務(wù)能否成功提交的關(guān)鍵是日志是否成功落盤,與數(shù)據(jù)沒有太大的關(guān)系;也就是說對(duì)寫的優(yōu)化可以表述為各方面的資源向?qū)懖僮鲀A斜。
瓶頸分析 -- 通過show global status 的各個(gè)計(jì)數(shù)器的值基本上就能分析出當(dāng)前瓶頸所在,再結(jié)合一些簡單的系統(tǒng)層面的監(jiān)控工具如top iostat 就能明確瓶頸。
整體性能是“讀”“寫”之間的再平衡。
求職的朋友可以看看,不過也不要想著這些就一定有用,有時(shí)候工作中的經(jīng)驗(yàn)也是非常重要的。不過,基本知識(shí)點(diǎn)還是非常重要的。至于高階中的算法問題,如果你不是做特別重要的任務(wù),這些算法你是碰不到的(做網(wǎng)游的除外);高階中的像冊(cè)處理,如果你真能處理好了,你單獨(dú)做一個(gè)產(chǎn)品出售也不成問題啊。
1. 基本知識(shí)點(diǎn)
HTTP協(xié)議中幾個(gè)狀態(tài)碼的含義:503 500 401 200 301 302
Include require include_once require_once 的區(qū)別.
PHP/Mysql中幾個(gè)版本的進(jìn)化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改進(jìn)等等。
HEREDOC介紹
寫出一些php魔幻方法;
一些編譯php時(shí)的configure 參數(shù)
向php傳入?yún)?shù)的兩種方法。
(mysql)請(qǐng)寫出數(shù)據(jù)類型(int char varchar datetime text)的意思; 請(qǐng)問varchar和char有什么區(qū)別;
error_reporting 等調(diào)試函數(shù)使用
您是否用過版本控制軟件? 如果有您用的版本控制軟件的名字是?
posix和perl標(biāo)準(zhǔn)的正則表達(dá)式區(qū)別;
Safe_mode 打開后哪些地方受限.
寫代碼來解決多進(jìn)程/線程同時(shí)讀寫一個(gè)文件的問題。
寫一段上傳文件的代碼。
Mysql 的存儲(chǔ)引擎,myisam和innodb的區(qū)別。
2. web 架構(gòu),安全,項(xiàng)目經(jīng)驗(yàn)
介紹xdebug,apc,eAccelerator,Xcache,Zend opt的使用經(jīng)驗(yàn)。
使用mod_rewrite,在服務(wù)器上沒有/archivers/567.html這個(gè)物理文件時(shí),重定向到index.php?id=567 ,請(qǐng)先打開mod_rewrite.
MySQL數(shù)據(jù)庫作發(fā)布系統(tǒng)的存儲(chǔ),一天五萬條以上的增量,預(yù)計(jì)運(yùn)維三年,怎么優(yōu)化?
寫出一種排序算法(原理),并說出優(yōu)化它的方法。
請(qǐng)簡單闡述您最得意的開發(fā)之作
對(duì)于大流量的網(wǎng)站,您采用什么樣的方法來解決各頁面訪問量統(tǒng)計(jì)問題
您是否用過模板引擎? 如果有您用的模板引擎的名字是?
請(qǐng)介紹Session的原理,大型網(wǎng)站中Session方面應(yīng)注意什么?
測(cè)試php性能和mysql數(shù)據(jù)庫性能的工具,和找出瓶頸的方法。
正則提出一個(gè)網(wǎng)頁中的所有鏈接.
介紹一下常見的SSO(單點(diǎn)登陸)方案(比如dedecms整合discuz的passport)的原理。
您寫過的PHP框架的特點(diǎn),主要解決什么問題,與其他框架的不同點(diǎn)。
大型的論壇/新聞文章系統(tǒng)/SNS網(wǎng)站在性能優(yōu)化上有什么區(qū)別?
相冊(cè)類應(yīng)用:要求在瀏覽器中能同時(shí)選中并上傳多個(gè)文件,圖片要求能剪裁,壓縮包在服務(wù)器端解壓。能上傳單個(gè)達(dá)50M的文件。上傳過程中有進(jìn)度條顯示。每個(gè)圖片能生成四種大小縮略圖,視頻文件要轉(zhuǎn)成flv供flash播放。敘述要涉及的各類開源軟件和簡單用途。
一群猴子排成一圈,按1,2,…,n依次編號(hào)。然后從第1只開始數(shù),數(shù)到第m只,把它踢出圈,從它后面再開始數(shù),再數(shù)到第m只,在把它踢出去…, 如此不停的進(jìn)行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個(gè)大王的編號(hào)。用程序模擬該過程。
3. unix/linux 基本使用
linux下查看當(dāng)前系統(tǒng)負(fù)載信息的一些方法。
vim的基本快捷鍵。
ssh 安全增強(qiáng)方法;密碼方式和rsa key 方式的配置。
rpm/apt/yum/ports 裝包,查詢,刪除的基本命令。
Makefile的基本格式,gcc 編譯,連接的命令,-O0 和-O3區(qū)別。
gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
css盒模型。
javascript中的prototype。
javascript中this對(duì)象的作用域。
IE和firefox事件冒泡的不同。
什么是怪異模式,標(biāo)準(zhǔn)模式,近標(biāo)準(zhǔn)模式。
DTD的定義
IE/firefox常用hack.
firefox,IE下的前端js/css調(diào)試工具。