程式設計師找工作必備 PHP 基礎面試題 - 第十一天

viphper發表於2020-03-23

“PHP學習網” 公眾號會每天分享一些面試題,正在找工作的小夥伴們可以來看看哦。

一、兩張表 city表和province表。分別為城市與省份的關係表。

表名:city
id City Provinceid
1 廣州 1
2 深圳 1
3 惠州 1
4 長沙 2
5 武漢 3
………. 廣州
表名稱:province:
id Province
1 廣東
2 湖南
3 湖北
……….

1、寫一條sql語句關係兩個表,實現:顯示城市的基本資訊。顯示欄位:城市id ,城市名, 所屬省份 。
如:
Id(城市id) Cityname(城市名) Privence(所屬省份)

select A.id,A.Cityname,B.Province from city as A,province as B where A.provinceid=B.id

2、如果要統計每個省份有多少個城市,請用group by 查詢出來。顯示欄位:省份id ,省份名,包含多少個城市。

select B.id,B.Province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id

二、主鍵 和外來鍵表示什麼?一般用於做什麼?

主鍵:能夠唯一表示資料表中的每個記錄的欄位或者欄位的組合就稱為主鍵。一個主鍵是唯一識別一個表的每一行記錄,但這只是其作用的一療分,主鍵的主要作用是將記錄和存放在其他表中的資料進行關聯,在這一點上,主鍵是不同表中各記錄間的簡單指標,主鍵約整就是確定表中的每一條記錄,主鍵不能是空值,唯一約束是用於指定一個或多個列的組合值具有唯一性,以防止在列中輸入重複的值,所以,主鍵的值對使用者而言是沒有什麼意義,並且和它賦予的值也沒有什麼特別聯絡。

外來鍵:若有兩個表A,B,C是A的主鍵,而B中也有C欄位,則C就是表B的外來鍵,外來鍵約束主要用來維護兩個表之間資料的一致性。A為基本表,B為資訊表。
在資料庫中,常常不只是一個表,這些表之間也不是相互獨立的,不同的表之間需要建立一種關係,才能將它們的資料相互溝通,而在這個溝透過程中,就需要表中有一個欄位作為標誌,不同的記錄對應的欄位取值不能相同,也不能是空白的,透過這個欄位中不同的值可以區別各條記錄,就像我們區別不同的人,每個人都有名字,但它卻不能作為主鍵,因為人名很容易出現重複,而身份證號是每個人都不同的,所以可以根據它來區別不同的人,資料庫的表中作為主鍵的段段就要像人的身份證號一樣,必須是每個記錄的值都不同,這才能根據
主鍵的值來確定不同的記錄。

關係:外來鍵一定是另外某個表的主鍵。

三、select now(),Date_ADD(now(),INTERVAL 14 day),Date_SUB(now(),INTERVAL 3 Day) from table; 會獲得什麼內容,請寫出來。

會獲得三條資料:
第一條:當前時間;
第二條:當前時間加上14天;
第三條:當前時間減去3天。

四、您所知道的MYSQL 資料庫備份,還原方式有哪幾種?

備份:
一,搭建主從架構,master-slave,透過binlog檔案同步複製主庫的資料,也可以直接透過binlog檔案恢復資料。
二,透過系統計劃任務執行mysqldump做週期性全備份。
三,物理備份,直接複製資料檔案、引數檔案、日誌檔案。
還原:
一.透過mysql操作工具,如phpmyadmin,sqlyog等匯入備份過的資料庫檔案。
二.將物理備份的檔案複製到mysql的data目錄下

五、內容管理系統中,表message有如下欄位

id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點選量
建立上表,寫出MySQL語句

Create table if not exists message(
  Id int not null AUTO_INCREMENT PRIMARY key comment '文章id',
  title varchar(60) not null comment '文章標題',
  Content text not null comment '文章內容',
  Category_id tinyint not null comment '文章分類id',
  Hits int not null default 0 comment '點選量'
)engine=myisam default charset = utf8;
六、同樣上述內容管理系統:表comment記錄使用者回覆內容,欄位如下

comment_id 回覆id
id 文章id,關聯message表中的id
comment_content 回覆內容
現透過查詢資料庫需要得到以下格式的文章標題列表,並按照回覆數量排序,回覆最高的排在最前面
文章id 文章標題 點選量 回覆數量
用一個SQL語句完成上述查詢,如果文章沒有回覆則回覆數量顯示0

select m.id,m.title,m.hits,count(c.comment_content) count from message m,comment c where m.id = c.coment_id group by m.id order by count desc;

七、內容管理系統,表category儲存分類資訊,欄位如下

category_id int(4) not null auto_increment;
category_name varchar(40) not null;
使用者輸入文章時,透過選擇下拉選單選定文章分類
寫出如何實現這個下拉選單

<?php
$dsn = ‘mysql:host=***;dbname=***;
$pdo = new PDO($dsn,’使用者名稱’,’密碼’);
$sql = ‘select category_id,category_name from category’;
$list = $pdo->query($sql);
//使用類似smarty模板引擎
$this->assign(list,$list);
?>
//模板實現端
<select name=””>
<option>-請選擇分類-</option>
{foreach $list as $val}
<option value={$val.category_id}>{$val.category_name}</option>
{/foreach}
</select>

八、PHP檔案操作

1、內容管理系統:使用者提交內容後,系統生成靜態HTML頁面;寫出實現的基本思路
2、簡單描述使用者修改釋出內容的實現流程和基本思路

1) 當使用者提交後生成一個由url地址MD5後的檔案的編譯頁面,用檔案處理file函式生成一個模板合成頁,判斷模板編譯頁是否有,模板頁無或者編譯頁的建立時間戳小於模板頁的修改時間都會從新生成編譯頁面,編譯後的頁面會呼叫對應資料庫的值顯示在頁面中,透過對記憶體資料的讀取釋放,顯示出我們看到的靜態資料,然後用file檔案將其儲存起來生成靜態的頁面
2) 當使用者修改了釋出內容都會修改資料相關的內容,並透過編譯頁面更新靜態資料並用檔案的方式快取起來,當使用者檢視時將不做任何資料庫查詢,直接呼叫該快取檔案即可

最後各位可以掃下方二維碼關注我公眾號,目前我正在更新基礎面試題,之後會更新中高階、redis、liunx面試題

本作品採用《CC 協議》,轉載必須註明作者和本文連結
和PHP學習網一起努力學習

相關文章