一. 基礎
1, session和cookie的區別
Session是在服務端保存的一個數據結構,用來跟蹤用戶 的狀態,這個數據可以保存在集群、數據庫、文件中
html' target='_blank'>Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的 一種方式。
2, PHP7用了嗎,了解哪些新特性
PHP7在性能方面實現跨越式的提升,新的操作符,統一變量語法等等
3, 魔術變量
問了__dir__代表的含意,這個是回答文件所在的目錄
4, 魔術方法
這算是經常會問到的一個題目了,常用的都記得,忽然問到__invoke()就懵了
__construct(), __destruct(), __call(), __callStatic() , __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()
二. 數據結構和算法
1, 棧數據結構
只要能用代碼實現出棧數據結構即可
2, 冒泡排序
只要能用代碼實現出冒泡排序即可
3, 完全二叉樹和滿二叉樹的區別
只有最下面的兩層結點度能夠小于2,并且最下面一層的結點都集中在該層最左邊的 若干位置的二叉樹才為完全二叉樹
而一棵深度為h且有 2^h-1個結點的二叉樹即為 滿二叉樹
三. 架構相關
1, Laravel和ThinkPHP有什么區別,對于laravel有什么要吐槽的
我從路由,中間件到控制器,數據訪問,視圖等層面上介紹了不同
吐槽的話可能相對于一些項目,laravel有點‘重’
2, 有用composer發布過自己的包嗎? (基于 Composer 的 PHP 模塊化開發)
我回答沒有,只是了解過
面試官就說他們的框架是自己在 Discuz的基礎上二次開發的框架,在他優秀的基礎上把composer依賴管理也都引進blabla
3, 談談對于MVC的理解
結合項目說明模板,視圖,控制器之間的關系和基本的構成
四. 防護
1, XSS 跨站腳本攻擊
2, DDOS 流量攻擊
3, CSRF 跨站請求偽造攻擊
4, SQL注入
在前端表單用戶輸入進行控制或限制
有后端傳參數和數據時進行過濾等等
五. 項目
1, 在項目中如何解決并發的問題
我的解決辦法先是前端控制有效請求,例如一分鐘才正常請求一次
接著 后端同樣過慮無效請求,接著接操作放進隊列中實現
有個面試官問,你這個隊列是阻塞的嗎,如果真的同時兩個用戶購買,兩個用戶等待 完成,他們還是用同一個線程完成,有沒有考慮 用其它方式實現
我說無,他就說可 以用鎖的機制,第二個等待第一個完成,一個接一個
2, 微信支付具體實現流程
1. H5頁面發起支付請求,請求生成支付訂單
2. 調用統一下單API,生成預付單
3. 生成JSAPI頁面調用的支付參數并簽名
4. 微信瀏覽器自動調起支付 JSAPI接口支付
5. 確認支付
6. 異步通 知商戶支付結果,商戶收到通知返回確認信息
7. 返回支付結果,展 示支付信息給用戶
3, 簡單實現登錄注冊功能
各個框架考慮的方面不一樣,這就按自己的理解寫出相應的代碼就好
4, 如何設計一個商城
我是先給自己限定了一個B2C的商城,然后從數據表開始,接著簡單 介紹前端和后端實現邏輯
MYSQL
mysql優化基本是重中之重了,尤其考驗技術
一. 基礎
1, InnoDB和MyISAM有什么區別
InnoDB提供事務處理,行級鎖,支持外鍵,支持多種行格式
MyISAM只支持表級鎖,全文索引,堆表
2, 事務有哪幾個特性
原子性、一致性、隔離性、持久性
3, 事務的隔離級別
未提交讀、已提交讀、可重復讀、可串行化
4, 有個表字段的O_Id,OrderDate,OrderPrice,Customer這幾個,我們希望查找訂單總 金額少于 2000 的客戶
SELECT Customer,SUM(OrderPrice) FROM
Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
5, 查詢學生表的數據,大于六十的為及格,反之不及格
select 分數,類別=Case
WHEN 分數 >=60 THEN '及格'
ELSE '不及格 '
END
from 成績表
6, 查詢沒有學完所有課程的學生學號、姓名
SELECT a.SNO ,a.SNAME
FROM student a
WHERE a.`SNO` NOT IN
( SELECT b.`SNO` FROM SC b
GROUP BY b.`SNO` HAVING COUNT(*) =
( SELECT COUNT(*) FROM course)
);
二. 優化
1, "select * from student where name='red'","select * from student where name='blue'",優化語句
select name from student where
name='red'
union
select
name from student where name='blue'
如果用or條件, myisam表能用到索引, innodb不行。
innodb用UNION替換OR (適用于索引列)
2, 你一般都會怎么優化數據庫
查詢緩存、EXPLAIN、(聯合)索引、使用固定長度靜態表
一. 防護
服務器怎么做防護
僅開放有限端口,限制登錄IP,限制登錄帳號
也是可以定一本書的問題,可以根據項目回答
二. 協議
Get和Post有什么區別
Get的參數包含在URL,GET請求會被瀏覽器主動cache,是url編碼, 有字符限制參數為ASCII字符
Post 通過request body傳遞參數,且 有多種編碼方式
三. NginX
設置nginx時php腳本請求是讓什么處理
默認配置的是轉發到FastCGI處理
四. Redis
1、你用redis來緩存什么數據
跟據項目來說自己緩存的一些經常要用到的數據
2、Redis怎么做持久化,配置哪種刷新頻率
配置aof持久化,用默認的每秒刷新aof文件
3、Redis是多線程嗎
單線程(我竟然回答是多線程,233)
4、Redis怎么配置一主多從,要多久
可以用Redis官方集群方案,具體沒有實踐過,可能要花幾周時間來 完成
五. 代碼管理
有用過git嗎?當兩個人提交了錯誤代碼后,怎么解決