找工做面試的過程當中,項目將會是整個流程的核心靈魂,也是能在面試中能讓面試官儘快認同你的一個強有力的依據,因此在面試中把電商項目清晰的表述出來是極爲關鍵的。
①技術更新較快:根據市場的需求,不斷迭代更新.
②技術涉及面廣:除了 PHP,還會用到 Python,GO 等其餘的一些語言;數據庫中 MySQL,nosql 是最頻繁使用的(固然也有的公司會用 oracle,可是 PHP 通常都是以 MySQL 爲主),服務器端使用 Linux(少部分公司會用到 Unix),還常常涉及到服務器安全、系統安全等安全方面的技術.
③分佈式:從前的單一的機器上運行,如今是分散到不一樣機器上,最後將數據集中彙總。集中式向分佈式進行發展是由需求來推進.
④高併發、集羣(高可用集羣)、負載均衡:由併發問題採用集羣進行處理,其中,集羣會涉及服務器的主從以及分佈問題,使用負載均衡。(權重高低)高可用是對用戶而言,用戶的服務不中斷(系統升級,服務不中斷,公司電商系統的部分更新等)。
⑤海量數據:每一年商家的各種活動(雙 11,雙 12 等等)訂單量、瀏覽數、商品量、活動相關數據都將會超級大超級多(通常隨同高併發出現).
⑥業務複雜:電商業務並不簡單:並非商品展現出來後,簡單的加入購物車後購買就完成了。除此之外後臺業務邏輯是至關複雜,好比優惠(包郵、滿減),秒殺,搶購等.
⑦系統安全:系統上線必須經過系統安所有門審覈經過,安全性問題正逐步的被放到檯面上,並且不少企業對這塊至關重視.javascript
系統功能
本商城系統是一個綜合性的 B2C 平臺,相似京東商城、天貓商城.php
用戶:html
用戶能夠經過註冊成爲商城的會員,登陸商城
根據會員等級得到相應的優惠和特權
用戶能夠瀏覽商品,能夠根據商品類型進行搜索
用戶能夠對購物車進行操做(增刪改查商品的數量、商品詳情等)
用戶下訂單、退訂單,對訂單的結算等
商家:前端
商家能夠入駐商城,在商城裏開店售賣本身的商品.
商家也有商家等級,若是在商城好評和商品銷售量到達必定數量,可得到商家的一些特權
商家能夠管理本身店鋪的商品:上架下架商品;設定庫存量;設定本身店鋪的會員制度等
電商項目的思惟圖java
以上是大部分經常使用模塊,若有其它模塊自行補充。根據上圖的體系架構,一層層的進行概括記憶,從項目——模塊——功能一點點的往深刻熟悉記憶,而且加以理解.node
項目團隊構成
產品經理:1 人,肯定需求以及給出產品原型圖。
項目經理:1 人,項目管理。
UI 設計 :1 人, 製做項目原型效果圖。
前端團隊:1 人,根據產品經理給出的原型製做靜態頁面。
後端團隊:3 人,實現產品功能。
運維 :1 人 ,負責公司運維項目的系統。
測試團隊:2 人,測試全部的功能。(小公司不會有測試)mysql
(上述是以團隊爲單位,有的公司技術部不止一個團隊,還有運維、UI、交互設計師等等,視狀況而定)linux
項目開發流程nginx
涉及技術
框架:ThinkPHP CI YII Laravel 等
前端:HTML CSS JS/JQ(Bootstrap、node.js、angluar.js 等能夠了解下) AJAX
PHP:PHP+MySQL session 和 cookie Nosql(redis memcache mongdb) 接口技術 緩存技術 優化技術等等
服務器方面:Linux Nginx
開發環境:WAMP 或者是 LAMP 比較常見,除此之外還有 LNMP 等
經常使用的工具:PHPStorm(PHP 最正統的工具) NetBeans Editplus Webstorm(web 最正統的工具) Sublime Dreamweaver SVN GITc++
(簡歷中或者是面試中儘可能不要說起版本號,若是要寫則須要把版本號對齊,不然不要寫版本號)
電商面試常見問題
1.說說你最近作的這個項目的背景,簡單的介紹一下你這個項目?
咱們公司以前主要以實體店爲主,進行批發與零售,業務也相對比較傳統。爲了適應市場需求,加強公司競爭力,提高業務績效,另外一方面,也爲基於互聯網的商務模式創新奠基基礎。因此開始 xxx 商城建設項目,其中包含商品管理、訂單管理、類目管理、客戶管理、合做商管理、客服管理、購物平臺、內容管理等,很大程度上分擔了人工的壓力,對提升客戶服務效率和客戶滿意度可以起到較好的做用。(先大致的描述下項目,而後可以挑一兩個本身最爲熟悉的模塊進行敘述)
2.項目的總體結構(從框架和具體技術來講)
框架方面:從大處進行描述,好比本項目是屬於電商項目,採用的是 TP 框架,運用php+MySQL+Apache 進行開發。由於 TP 框架是開源的、輕量級的,因此用起來更加方便快捷,從效率和成本方面來說都是性價比比較高的,因此那時候團隊決定用這個框架進行開發。而後再從框架的一些優勢特性進行說明下,讓面試官以爲你對這個框架很瞭解技術:描述技術時首先用從本身比較熟悉的模塊入手(好比說註冊驗證時會用到的 JS 技術、正則匹配、ajax 無刷新驗證等等),而後由此慢慢的向其餘方面的技術進行拓展,在說具體技術的時候若是能說到目前比較新或者是比較有難度的技術,可以讓面 試官眼前一亮,這樣能爲本身的面試增長很多分。
3.分佈式架構,對比傳統架構的優點 。
①最爲明顯的一點,在傳統的架構中,若是某個功能須要進行維護,那麼咱們必須停掉整個服務,這對於公司的運營會形成損失。分佈式系統在覈心功能模塊使用單獨服務器,維護部分模塊不影響用戶的其餘操做。
②在海量數據處理方面,傳統架構顯得比較乏力;分佈式系統架構採用服務器集羣,使用負載均衡,海量數據處理遊刃有餘!
③在性能(檢索)以及維護方面,分佈式系統架構也有較爲明顯的優點。
4.本項目提供了哪些模塊(功能和服務)
商品模塊:其中包括商品管理,類型管理,屬性管理,欄目管理等等
訂單模塊:其中包括下單,退單,庫存,收貨人信息等
會員模塊:會員註冊,會員信息管理,會員等級管理,會員權限等
購物車模塊:購物車數據存儲,增刪改查購物車商品,清空購物車等
提交訂單頁面:提交用戶的訂單信息, 處理併發問題。
我的中心:包括用戶的登陸,我的信息的管理,收貨地址的管理,用戶所下的訂單的管理
支付模塊:支付方式管理(在線支付、貨到付款)等
5.你負責的哪些模塊
在項目中主要負責相關功能的開發,主要有:
1) 後臺管理系統:主要實現商品管理、商品規格參數管理、訂單管理、會員管理等、CMS(內容管理系統)等,而且提供了跨域支持;
2) 前臺系統:主要是面向用戶訪問,使用 js、ajax 進行先後臺數據交互(通常是用 json 格式數據返回)
3) 會員登陸:提供和用戶信息相關的接口,好比說用戶註冊、查詢等接口(登陸時須要進行多重驗證,特別注意安全方面)
4) 訂單功能:主要是提供和訂單相關的業務接口,在訂單系統了作了嚴格的數據校驗以及高併發寫的支持(這裏能夠說使用隊列實現),而且使用了定時器實現對下單的時間控制,好比說關閉超時未付款的訂單;
5) 搜索功能:主要是提供商品的搜索,能夠採用 Sphinx 全文搜索,固然也有其餘的搜索方式;
6) 會員系統:主要是維護用戶的信息,已購買訂單、優惠券、系統消息、修改密碼、綁定手機等功能;
7) 緩存:主要是用 Redis 實現,而且對 Redis 作了集羣來保證 Redis 服務的高可用(緩存方面除了 redis 外還有 memcached)
8) 支付系統:主要是負責訂單的支付、對帳等功能,主要是對接了支付寶的接口;
(根據我的的實際狀況選擇最爲熟悉的模塊,進行敘述)
6.簡述下這些模塊怎麼實現的?(描述舉例只給出部分功能的過程)
商品類型管理
包含功能:添加商品類型、顯示商品類型列表、修改商品類別、刪除商品類型
描述舉例:
一、添加商品類型:在後臺模塊新建一個商品類型的控制器(TypeController),並添加add 方法, 同時創建好對應的靜態頁。新建一個對應的商品類型表,在表裏添加數據驗證。在商品類型控制器中的 add 方法中完成商品類型的添加。(其中關鍵點是 create 驗證和防止非法字段提交)
二、商品類型列表:在商品類型控制器中添加一個 lst 方法,取出商品類型數據,並在對應的靜態頁中完成數據遍歷,就能在頁面中得出相應的商品類型列表
屬性管理
包含功能:添加屬性、顯示屬性列表、根據商品類型搜索屬性、修改屬性、刪除屬性
描述舉例:
前提條件:創建一個屬性表將各字段所有預先設置好,才能夠進行一下操做
一、添加屬性:在後臺模塊新建一個 AttributeController 的控制器,並添加 add 方法,並創建好對應的靜態頁面,修改頁面裏的表單。而後新建一個 attribute 表對應的模型文件,進行數據驗證(驗證規則能夠查手冊),在方法中完成屬性添加的代碼。在屬性控制器中寫入 lst 方法,而且完成對應靜態頁,把取出的數據遍歷到對應的靜態頁
二、根據商品類型搜索屬性:(給 select 添加 change 事件,完成提交表單, 表單提交到當前頁面。)首先在方法中將商品顯示出來,並將商品數據完成遍歷,給顯示商品 類型的 select 添加 change 事件,完成表單提交,其中會引用 JQ 添加 change 事件,當觸 發change 事件後,顯示出當前顯示的商品類型。在商品類型列表,添加「屬性列表「的 鏈接,在添加完成屬性後,跳轉到屬性列表,直接顯示所 屬當前商品類型的屬性,最後實 現分頁.
商品欄目管理
包含功能:建立欄目、欄目的增刪改查 (注:商品類型和商品欄目的區別,類型是大類,
欄目是小類)
描述舉例:
前提條件:要建立一個欄目表,以便進行下面的功能開發
一、添加欄目:在 admin 模塊裏面新建一個 category 的控制器,添加 add 方法,並完成對應頁面設計。在頁面上設計好表單,在添加欄目時將已經添加的欄目顯示出來(新建一個商品欄目模型,在裏面定義好方法,用於取出欄目的數據,而且已經格式化好的),而後在 add 方法裏將數據取出來,而且進行遍歷,在此方法中完成欄目的添加
二、欄目列表:在 category 的控制器裏添加 lst 方法,而且完成對應頁面的設計,在頁面中遍歷欄目數據,將其遍歷顯示到頁面中
三、刪除欄目:(注:在刪除欄目時,若是有子欄目則不能刪除)在欄目列表中添加刪除欄目的連接(用 U 函數自動生成路徑),在相應的 category 控制器裏,寫上 del 方法,接受傳遞過來的 id,實例化自定義模型,利用 sql 拼接進行查詢,找出對應的欄目記錄,將其刪除
商品管理
包含功能:商品的增刪改查,在線編輯器,屬性選項卡,屬性的增刪改查,商品相冊選項卡,添加相冊,文件上傳,相冊上傳等
描述舉例:
前提條件:要將商品表建立好,具體字段根據需求開設計
一、添加商品:在後臺模塊(admin 模塊)裏新建一個 Goods 控制器,寫入 add 方法,同時完成相應的頁面設計,在 add 方法對應的頁面中對錶單行進相應的修改(具體的頁面要求感受需求來修改)。在 add 方法中完成商品的添加功能代碼,例如生成惟一的商品 id號、添加商品的時間等(利用前綴+時間+惟一碼=惟一 id)
二、圖片上傳:能夠利用 TP 已經定義好的鉤子函數,來 完成圖片文件的上傳,返回保存圖片的路徑。鉤子函數在模型裏面會自動調用, 好比:入庫以前:_before_insert() 和入庫以後:_after_insert() 會被模型裏面的 add 方法,自動調用。只須要在上傳以前,把圖片的路徑、上傳單個文件的最大值、容許上傳格式限制好
三、縮略圖:在圖片上傳的基礎上利用 new \Think\Image()按照原生圖片的比例生成一個縮略像素*縮略像素的縮略圖,每一個縮略圖都會生成一個惟一的 id 名,而且保存到預設好的路徑文件夾中(這裏要注意的是生成多張縮略圖的時候,必須先生成大圖,再生成小圖),圖片生成後將路徑入庫。
四、顯示屬性選項卡:(選項卡的顯示重點是給標籤設置一個 onclick 事件函數)要在選項卡中顯示商品類型,在 goods 控制器裏面的 add 方法中取出商品類型數據,而後在相應的頁面商品屬性選項卡位置遍歷商品類型數據,分別顯示出來
五、完成商品屬性的添加:前提將商品屬性表設計好,而後根據實際的靜態頁面進行表單的修改,修改指定表單的域名(即標籤中的 name),修改完成後在 Goods 模型裏定義一個鉤子_after_insert,在該方法中完成屬性數據的入庫,由此屬性的添加完成.
權限管理
包含功能:管理員登陸,權限管理(權限管理控制),角色管理,管理員管理
權限管理簡述:權限管理是根據不一樣等級,不一樣管理員的狀況下,授予不一樣的權限,各自操做各自受權。受權方式大致分爲兩種:一種是直接給管理員受權權限,適合於管理員比較少,權限數量也比較少的狀況下;第二種是 RBAC 基於角色的訪問控制。
在建表方面,採用五張表,其中有三張主表,權限表、角色表、管理員表,兩張從表,角色與權限的中間表、管理員與角色的中間表。
角色表與權限表的關係:一個角色能夠有多個權限,一個權限能夠屬於多個角色,權限表與角色表是多對多的關係,要體現這種關係,要使用角色與權限的中間表;管理員表與角色表的關係:一個管理員能夠屬於多個角色,一個角色能夠包含多個管理員,角色表與管理員表是多對多的關係,要體現這種關係,要使用管理員與角色的中間表。
五張表關係圖以下:
描述舉例:
一、權限管理:在項目中權限管理就是按鈕,經過按鈕給對應的管理員或者是角色分配權限。在後臺模塊新建一個權限的控制器,並寫入 add 方法,完成對應的頁面設計,修改好頁面上的表單,完善頁面。新建一個權限模型,而且在模型中添加數據驗證,設置好驗證規則(具體代碼參考項目中的),在模型中完成權限添加。在父級權限完成後,繼續添加子級權限:在模型裏面定義一個方法,用於取出權限,並格式化好權限數據,而後在添加權限控制器裏面,取出權限數據,並進行遍歷,將遍歷出來的子級權限顯示在頁面中
二、角色管理:角色管理中包含對角色的增刪改查,受權等等。添加角色首先要在在後臺模塊新建一個 RoleController 的控制器,寫入添加 add 方法,完成對應的靜態頁面,取出權限數據,並修改對應的表單。在後臺模塊裏面,添加一個 RoleModel 模型,寫入添加數據驗證。接下來就是數據入庫,在入庫時要注意的是該表單提交的數據,是入庫兩張的表,一個是角色表,一個是角色與權限的中間表,其中角色與權限的中間表的數據,是使用鉤子函數_after_insert()來完成。
三、角色刪除:若是角色裏面有管理員,則不能刪除,在刪除角色的同時,要刪除角色與權限的中間表裏面的對應的數據。首先在角色列表中添加刪除的連接(用 U 函數自動生成路徑),而後在角色控制器中添加刪除 del 方法,用於刪除角色,其次在角色模型中添加鉤子函數_after_delete()用來刪除角色與權限中間表對應的角色數據,刪除完成
四、管理員管理:在添加管理員時,要分配管理員所屬角色,而且將管理員各個數據根據要求設定好格式。建立管理員控制器,添加 add 方法,取出角色數據,並完成頁面設計將數據顯示到頁面上。在管理員模型中添加數據驗證,使用靜態方法來完成驗證,
使用模型添加數據,接受明文密碼,而後用雙重 md5 進行加密,這個過程的代碼能夠直接寫到鉤子函數裏。使用鉤子函數添加管理員與角色中間表的數據,在管理員的模型裏面,添加_after_insert()鉤子函數
五、管理員列表:在管理員的控制器裏面添加 lst 方法,用於取出管理員數據,並完成對應的靜態頁面,要注意:顯示管理員的同時,要顯示出所屬角色的名稱,所以要連表查詢(管理員表 管理員角色表 角色表)
而後在對應的界面中進行管理員數據遍歷而且顯示到頁面上。
六、刪除管理員:要操做的表是:it_admin 和 it_admin_role,在刪除 it_admin_role表裏面數據時,則可使用鉤子函數_after_delete(),鉤子函數是 TP 框架裏面提供的,
主要有:_before_insert()、_after_insert()、_before_update()、_after_update(),_before_delete(),_after_delete()(該系列函數是在模型裏面定義,會被自動調用。)
注意:超級管理員不能被刪除(擁有最高權限)
郵件發送驗證管理
包含功能:(原理要理解、)註冊、登陸、發送、密碼找回等
描述舉例:
一、原理:
郵件的 SMTP(Simple Mail Transfer Protocol):即簡單郵件傳輸協議,它是一組用於由源地址到目的地址傳送郵件的規則,由它來控制信件的中轉方式。SMTP 協議屬於TCP/IP 協議族,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。經過 SMTP協議所指定的服務器,就能夠把 E-mail 寄到收信人的服務器上了,整個過程只要幾分鐘。SMTP 服務器則是遵循 SMTP 協議的發送郵件服務器,用來發送或中轉發出的電子郵件。
二、用戶註冊:建立用戶表,將所需字段設置好(在設置字段的時候能夠預留一些字段以便後面拓展使用)。在前臺模塊中新建一個 user 控制器,添加 register 方法,而且完成對應靜態頁。在 user 模型中添加數據驗證,返回數據.
在控制器中完成註冊後,發送郵件:
郵件發送後,由用戶進行激活認證,所以在控制器中新建 active 方法。方法中首先要接受數據(key 值,用戶郵件數據),而後判斷連接是否合法,根據傳遞的 email 查找出 vaildate字段內容和 key 值進行匹配。若是匹配成功那麼,就讓用戶進行激活,激活的同時將 active的初始狀態更改成 1,則功能完結
三、密碼找回功能:實現方式,根據用戶名->查找出註冊時設置的問題->輸入問題的答案->若是答案正確->發送一封郵件,根據該郵件裏面的連接去完成密碼的修改。首先在頁面上將密碼找回的連接設置好,在 user 控制器裏添加 findpwd1 方法(用於找回密碼的第一個方法),該方法顯示出找回密碼輸入用戶的一個界面,同時應該完成對應頁面的編寫。再在 user 控制器中添加 findpwd2 方法,根據用戶名查找出註冊時設置的問題,讓用戶輸入問題的答案。第三是在user 控制器中寫入 findpwd3 方法,用於問題答案的匹配併發送郵件,經過郵件的連接來完成密碼的修改。最後在 user 控制器中添加一個 update 方法,用於完成密碼的修改
購物車管理
包含功能:提交商品到購物車、顯示購物車列表、刪除購物車裏商品、修改購物車、
清空購物車等等
一、 購物車的實現方式:① 能夠把購物車的數據,給存儲到 session 裏面,一旦關閉瀏覽器,則商品數據就丟失;②能夠把購物車的數據,給存儲到 cookie 裏面,能夠長久的保存購物車裏面的數據;③能夠把購物車的數據,給存儲到數據庫裏面,能夠長久的保存購物車裏面的數據;④能夠把購物車的數據,給存儲到緩存裏(memcache,redis),也能夠長久的保存購物車的數據。
注:Session 可能會引發併發問題,若是腳本很短,這一般沒有問題。但若是腳本運行時間比較長,那就可能會產生問題。在現代 Web 應用程序開發中,有一個很是常見的狀況,就是使用 AJAX 技術在同一個頁面內發送多個請求獲取數據。若是這些請求都須要使用Session,那麼第一個請求到達服務器後會取得 Session 鎖,其它請求就必須等待,全部請求將串行處理,即便它們彼此之間並無依賴關係。這將大大增長頁面的響應時間。 有一個方法能夠避免這個問題,就是在使用完 Session 之後當即調用 session_write_close()方法關閉 Session。這樣 Session 鎖就會釋放,即便當前腳本還在等在處理。須要注意的是,調用該方法後,當前腳本就不能進一步操做 Session 了
二、實例:京東購物車的設置,若是用戶已經登陸,則把購物車數據保存到數據庫裏面,若是沒有登陸,則把購物車的數據給保存到 cookie 裏面,當登陸時,要判斷 cookie是否有購物車的數據,若是有,則把 cookie 裏面的數據給移動到數據庫裏面。
三、提交商品到購物車:在前臺模塊裏新建一個 CartController 控制器,添加 addCart方法
四、購物車列表:在購物車模型裏添加 cartList 方法,用於顯示列表。若是用戶已經登陸,則直接從購物車數據庫裏面取出數據,若是用戶沒有登陸,則直接從 cookie裏面獲取數據。最後在購物車控制器裏面的 cartList 的方法中,並取出購物車數據,並在對應的靜態頁面裏完成遍歷,顯示出來
五、cookie 移到 DB 中:用戶登陸後,要判斷 cookie 裏面是否有購物車數據,若是有,則就移動到數據庫,在購物車模型裏面定義一個方法 cookie2db
登陸成功後調用 cookie2db 方法便可
訂單管理
描述舉例:
一、創建訂單控制器,添加 flow 方法,完成對應的靜態頁面。在 order 控制器裏面添加一個 done 方法,用來完成下訂單功能:首先接受傳遞過來的訂單信息數據,判斷購物車裏面是否有商品,防止出現可以直接訪問該方法的狀況,若是沒有商品則提示沒法下單,接着判斷用戶是否已經登錄,若是沒有登陸把當前訪問的地址存儲到 session裏,跳轉登陸頁面,完成登陸後再跳轉回來,再判斷是否填寫收貨人的信息,同理,若是沒有填寫則跳轉填寫頁面。下單時會自動算出訂單總額,生成惟一的訂單號,而且從session 中取出用戶 id,獲取收貨人信息。隨後將訂單信息和訂單商品信息入庫結算完成後,清空購物車,訂單完成
二、下訂單注意事項:
①在下訂單以前要判斷庫存是否充足:判斷商品屬性 id 是否有值,若是有說明該商品有屬性,直接從 product 表裏進行判斷,若是沒有屬性則直接從goods 表裏判斷庫存
②下完訂單後要減掉庫存: 在入庫 it_order_goods 表時,要完成減掉庫存
③ 高併發下訂單問題:使用文件鎖,對文件鎖定後,不是操做文件,是鎖定文件後,執行下訂單, 查看庫存以前,就要加鎖,一直到購買完成(另外 redis 消息隊列)
④添加事務:防止某些操做只完成一半
網上支付管理
支付過程主要是調用第三方支付接口
網上支付流程:
商城與銀行對接方案:
一、直接與銀行對接
優勢:
由於直接與銀行進行財務結算,交易資金結算比較安全。適合資金流量比較大的企業,這種方案適合於,每個月結算金額百萬以上的企業。
缺點:
開發工做量比較大,並且銀行會不按期升級交易系統,隨着銀行系統的升級,企業也也須要作相應的改動,因此維護工做量也是比較大的,並且企業每一年還須要向銀行交納必定數量的接口使用費用。
二、經過中間公司間接與銀行對接
優勢:
開發工做量較少,銀行升級系統,不須要企業作相應的修改,除非中間企業的接入規範發生了改變,相對前一種接入方案,這種方案的維護工做量比較少的。由於只與一家企業對接,因此接入費用相對比較低。這種方案適合於:每個月結算資金在幾十萬如下的中小企業。
缺點:
由於是與中間企業進行資金結算,目前全部中間企業都是私企,資金安全是個大問題
7.對於大流量的網站,您採用什麼樣的方法來解決訪問量問題?
①確認服務器硬件是否足夠支持當前的流量
②優化數據庫訪問
③禁止外部的盜鏈
④控制大文件的下載
⑤使用不一樣主機分流主要流量、集羣
⑥使用流量分析統計軟件
8.數據庫的存儲引擎?有什麼區別?
MyISAM、InnoDB
構成上,MyISAM 的表在磁盤中有三個文件組成,分別是表定義文件(.frm)、數據文件(.MYD)、索引文件(.MYI),而 InnoDB 的表由表定義文件(.frm)、表空間數據和日誌文件組成。
安全方面,MyISAM 強調的是性能,其查詢效率較高,但不支持事務和外鍵等安全性方面的功能,而 InnoDB 支持事務和外鍵等高級功能,查詢效率稍低。
對鎖的支持,MyISAM 支持表鎖,而 InnoDB 支持行鎖。
9.Sql 語句的優化?
1)儘可能選擇較小的列
2)將 where 中用的比較頻繁的字段創建索引
3)select 子句中避免使用‘*’
4)避免在索引列上使用計算、not in 和<>等操做
5)當只須要一行數據的時候使用 limit 1
6)保證單表數據不超過 200W,適時分割表。 針對查詢較慢的語句,可使用 explain 來分析該語句具體的執行狀況。
10.什麼是頁面靜態化?
就是把一個動態的頁面(操做數據庫的 php 頁面)變成一個靜態頁面,後續用戶直接訪問靜態頁面。
頁面靜態化技術分爲兩種:真靜態和僞靜態。
真靜態:把一個動態的頁面,實實在在的轉成一個靜態的頁面,即.html 文件
僞靜態:所謂僞靜態是從 url 地址上看是一個靜態頁面,可是實際上仍是對應一個動態頁面
11.如何實現用戶的安全登陸?
①防止 Sql 注入,對特殊字符進行轉義、過濾或者使用預編譯的 sql 語句綁定變量。最小權限原則,特別是不要用 root 帳戶,爲不一樣的類型的動做或者組建使用不一樣的帳戶。
②當 sql 運行出錯時,不要把數據庫返回的錯誤信息所有顯示給用戶,以防止泄露服務器和數據庫相關信息
③XSS 攻擊
④暴力破解
12.使用過 Memcache 緩存嗎?請簡述一下
Memcache 是把全部的數據保存在內存中,採用 hash 表的方式,把每條數據有 key 和 value組成,每一個 key 獨一無二的,當要訪問的某個值的時候先按照找到值,而後在返回結果,Memcache採用 LRU 算法來逐漸把過時的數據清除掉
13.說出 JQUERY 經常使用的幾個函數?
$(selector).hide() 隱藏被選元素
$(selector).show() 顯示被選元素
$(selector).toggle() 切換(在隱藏與顯示之間)被選元素
$(selector).slideDown() 向下滑動(顯示)被選元素
$(selector).slideUp() 向上滑動(隱藏)被選元素
$(selector).slideToggle() 對被選元素切換向上滑動和向下
$(selector).fadeIn() 淡入被選元素$(selector).fadeOut() 淡出被選元素
$(selector).fadeTo() 把被選元素淡出爲給定的不透明度
$(selector).animate() 對被選元素執行自定義動畫
14.什麼是二次開發?二次開發的弊端?
二次開發,簡單的說就是在現有的軟件上進行定製修改,功能的擴展,而後達到本身想要的功能,通常來講都不會改變原有系統的內核。dede 二次開發就是以 dede 織夢繫統爲基礎進行的二次開發。
弊端:
1)插件限制太多;
2)修改源文件對升級有影響。
15.單例模式
16.Redis 有幾種持久化的方式? redis 缺點是什麼?
兩種,分別是 RDB 和 AOF 快照;
Redis 的主要缺點是數據庫容量受到物理內存的限制,不能用做海量數據的高性能讀寫,所以 Redis 適合的場景主要侷限在較小數據量的高性能操做和運算上
17.先後臺數據不一致怎麼辦?
先後操做人員錄入數據保持一致,開啓驗證功能,因爲通信故障形成的前臺數據積壓,維護時及時備份
18.數據庫的讀寫分離?主從複製?
讀寫分離,基本的原理是讓主數據庫處理事務性增、改、刪操做(INSERT、UPDATE、DELETE),而從數據庫處理 SELECT 查詢操做。數據庫複製被用來把事務性操做致使的變動同步到集羣中的從數據庫。
至少兩臺數據庫服務器,能夠分別設置主服務器和從服務器,對主服務器的任何操做都會同步到從服務器上
原理:mysql 中有一種日誌,叫作 bin 日誌(二進制日誌),會記錄下全部修改過數據庫的 sql 語句。主從複製的原理實際是多臺服務器都開啓 bin 日誌,而後主服務器會把執行過的sql 語句記錄到 bin 日誌中,以後把這個 bin 日誌發給從服務器,在從服務器再把 bin 日誌中記錄的 sql 語句一樣的執行一遍。這樣從服務器上的數據就和主服務器相同了。
19.高併發如何處理?
須要對服務器的架構分層,從新佈局,負載均衡,集羣策略。
負載均衡器(硬件和軟件)
硬件:F5-Bigip:立竿見影,價格昂貴,網遊公司或大網站用的比較多
軟件:lvs(linux virtual server 虛擬服務,集成到內核中),nginx(能夠作 web 服務器,也能夠作負載均衡使用)
負載均衡策略:
(1)輪詢技術:把客戶端的請求輪流分發給服務器。
(2)最少鏈接;負載均衡把請求給最空閒的服務器
(3)ip 哈希:同一地址的客戶端,始終請求同一臺服務器。
20.先後臺數據交互時用到那些技術?
Ajax,Ajax 的跨域請求經常使用的有兩種方式:
1)使用中間層過渡的方式:
中間過渡,很明顯,就是在 AJAX 與不一樣域的服務器進行通信的中間加一層過渡,這一層過渡能夠是 PHP 、JSP、c++等任何具有網絡通信功能的語言,由中間層向不一樣域的服務器進行讀取數據的操做。拿 PHP 作 一個例子,若是須要對不一樣域的某一個 php 進行通信,如今客戶端的xmlhttprequest 先 query 本域的一個 PHP,而後由本域的這個 PHP 去和不一樣域的 PHP 進行通信,而後由本域的 PHP 輸出 response;
2)使用標籤
這個方法是利用標籤中的 src 來 query 一個 PHP 得到 response,由於標籤 的 src 屬性不存在跨域的問題。
21.什麼是 Ajax,Ajax 異步處理?
Ajax 是一種在頁面沒有刷新的狀況下,經過客戶端(瀏覽器)與服務器交互的一種技術。
Ajax 語言的載體是 javascript,最大特色:頁面不刷新完成請求。
open 方法:如 xhr.open(‘get’,’demo.php’,true)open 方法,第三個參數表示是異步請求,默認 true 表示異步請求處理
22.什麼是 Bootstrap?有什麼優點?
簡單、直觀、強悍的前端開發框架,讓 Web 開發更快速、簡單
優點:入門簡單,支持響應式,優先支持移動設備
23.http 協議請求的狀態?404 是什麼?500?
200(成功):服務器已成功處理了請求。一般,這表示服務器提供了請求的網頁
201(已建立):請求成功而且服務器建立了新的資源
202(已接受):服務器已接受請求,但還沒有處理
203(非受權信息):服務器已成功處理了請求,但返回的信息可能來自另外一來源
204(無內容):服務器成功處理了請求,但沒有返回任何內容
205(重置內容):服務器成功處理了請求,但沒有返回任何內容
206 (部份內容):服務器成功處理了部分 GET 請求
404(未找到):服務器找不到請求的網頁
500(服務器內部錯誤):服務器遇到錯誤,沒法完成請求
PHP 中的框架是什麼?
框架就是經過提供一個開發 Web 程序的基本架構,PHP 開發框架把 PHPWeb 程序開發擺到了流水線上。換句話說,PHP 開發框架有助於促進快速軟件開發(RAD),這節約了開發時間,有助於建立更爲穩定的程序,並減小開發者的重複編寫代碼的勞動。
框架專門用於爲這些經常使用元素(數據庫交互、表示層、應用程序邏輯)提供結構,以即可以花費更少的時間來編寫數據庫接口代碼或者表示層接口,而花費更多的時間來編寫應用程序自己。以這種方式分解應用程序,這種架構被稱爲模型-視圖-控制器(Model-View-Controller,MVC)。模型(Model)指數據,視圖(View)指表示層,而控制器(Controller)指應用程序邏輯或業務邏輯。