「PHP學習網」 公衆號會天天分享一些面試題,正在找工做的小夥伴們能夠來看看哦。
<?php $memcache_obj=new memcache $memcache_obj->connect(‘memcache_host,11211’); $memcache_obj->set(‘varKey’,’varValue’,0,____); ?>
答案:31243600php
答案:select * from tableExample where (a and b and c) or (a and b and c and d);
答案:debug_backtrace()mysql
答案:
1.能夠經過count(*)來獲得記錄總條數面試
2.將總條數除以每頁顯示條數取整獲得分頁數redis
3.點擊下一頁的連接進行傳值,將傳值拼裝成where條件算法
4.顯示相應數據sql
或者數據庫
一個簡單的數據庫的增刪改查的留言版,分頁的設計思路,便是每次進行查詢所發送的參數不一樣,從數據庫中獲得不一樣數據,在sql語句中用limit動態設置偏移量。偏移量能夠經過判斷和疊加的方式而改變。而總頁數能夠是,返回的總行數除以每頁顯示的條數以後取整。
若是是一個文件寫入的留言版,則能夠將取出的內容拆分紅數組,讓後設置偏移量取出不一樣的元素。數組
答:事務(transaction)是做爲一個單元的一組有序的數據庫操做。若是組中的全部操做都成功,則認爲事務成功,即便只有一個操做失敗,事務也不成功。若是全部操做完成,
事務則提交,其修改將做用於全部其餘數據庫進程。若是一個操做失敗,則事務將回滾,該事務全部操做的影響都將取消。安全
答:
一、選取最適用的字段屬性,儘量減小定義字段長度,儘可能把字段設置NOT NULL,例如'省份,性別',最好設置爲ENUM函數
二、使用鏈接(JOIN)來代替子查詢:
a.刪除沒有任何訂單客戶:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo) b.提取全部沒有訂單客戶:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo) c.提升b的速度優化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid WHERE orderinfo.customerid IS NULL
三、使用聯合(UNION)來代替手動建立的臨時表
a.建立臨時表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
四、事務處理:
a.保證數據完整性,例如添加和修改同時,二者成立則都執行,一者失敗都失敗
mysql_query("BEGIN"); mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')"; mysql_query("SELECT * FROM `orderinfo` where customerid=".$id"); mysql_query("COMMIT");
五、鎖定表,優化事務處理:
a.咱們用一個 SELECT 語句取出初始數據,經過一些計算,用 UPDATE 語句將新值更新到表中。
包含有 WRITE 關鍵字的 LOCK TABLE 語句能夠保證在 UNLOCK TABLES 命令被執行以前,不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操做
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE"); mysql_query("SELECT customerid FROM `customerinfo` where id=".$id); mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id); mysql_query("UNLOCK TABLES");
六、使用外鍵,優化鎖定表
a.把customerinfo裏的customerid映射到orderinfo裏的customerid,任何一條沒有合法的customerid的記錄不會寫到orderinfo裏
CREATE TABLE customerinfo ( customerid INT NOT NULL, PRIMARY KEY(customerid) )TYPE = INNODB; CREATE TABLE orderinfo ( orderid INT NOT NULL, customerid INT NOT NULL, PRIMARY KEY(customerid,orderid), FOREIGN KEY (customerid) REFERENCES customerinfo (customerid) ON DELETE CASCADE )TYPE = INNODB;
注意:'ON DELETE CASCADE',該參數保證當customerinfo表中的一條記錄刪除的話同時也會刪除order表中的該用戶的全部記錄,注意使用外鍵要定義事務安全類型爲INNODB;
七、創建索引:
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[索引字段])
八、優化查詢語句
a.最好在相同字段進行比較操做,在創建好的索引字段上儘可能減小函數操做
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢) SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
例子2:
SELECT * FROM order WHERE addtime/7<24;(慢) SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
SELECT * FROM order WHERE title like "%good%"; SELECT * FROM order WHERE title>="good" and name<"good";
選取最適用的字段屬性 儘可能減小字段的長度 設置爲not null
使用join代替子查詢
使用union代替手動建立臨時表
使用並優化事物處理
使用外鍵
使用索引
優化查詢語句
最後各位能夠掃下方二維碼關注我公衆號,目前我正在更新基礎面試題,以後會更新中高級、redis、liunx面試題