面試題6

一.sort  asort ksort 有什麼區別, 分別在什麼狀況下使用?

https://blog.csdn.net/junming4/article/details/53292122php

都是對PHP中的數組進行排序,若是成功返回true , 失敗返回false

sort:用於對數組的值從低到高進行排序, 下標從新編號,從0開始html

  ----下標可有可無時使用前端

asort:用於對數組的值從低到高進行排序並保持索引關係,下標不變mysql

  -----下標重要redis

ksort:對數組的索引進行排序,對應的值不變sql

    ------數組順序按key排序mongodb

 

二.傳值和傳引用的區別

傳值: 只是把值賦給變量數據庫

    對變量發生更改,值不會變apache

 

傳引用: 把變量地址傳給變量(共享)後端

    對變量的值發生更改,值會發生變化

三.Smarty優缺點

1. 相對於其餘模板,速度快

2. 緩存技術:cache

3. 插件

4. 實現先後端分離,便於代碼維護,二次開發

 

四.常見端口號

3306: MySQL

8080: Apache

11211: memcache

6379: redis

27017: mongodb

 

五.get post 區別

post比get傳輸量大,且相對安全

一、get是從服務器上獲取數據,post是向服務器傳送數據。
二、在客戶端, get方式在經過URL提交數據,數據在URL中能夠看到;post方式,數據放置在HTML HEADER內提交
四、get方式提交的數據最多隻能有1024字節,而post則沒有此限制
五、安全性問題。正如在2中提到,使用get的時候,參數會顯示在地址欄上,而 post 不會。因此,若是這些數據是中文數據並且是非敏感數據,那麼使用 get ;若是用戶輸入的數據不是中文字符並且包含敏感數據,那麼仍是使用 post爲好

GET產生一個TCP數據包;POST產生兩個TCP數據包。

GET後退按鈕/刷新無害,POST數據會被從新提交(瀏覽器應該告知用戶數據會被從新提交)

GET能被緩存,POST不能緩存 。

GET歷史參數保留在瀏覽器歷史中。POST參數不會保存在瀏覽器歷史中。

GET只容許 ASCII 字符。POST沒有限制。也容許二進制數據。

GET和POST本質上就是TCP連接,並沒有差異。

對於GET方式的請求,瀏覽器會把http header和data一併發送出去,服務器響應200(返回數據); 而對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

六.session  cookie 區別

session: 存在服務器上

cookie: 存在客戶端

關閉cookie後, session 能正常使用嗎>

如何修改session的生存時間

 

七.事務

一組有序的數據庫操做

1.四大特徵

原子性

隔離性

一致性

持久性

 

2.面向對象的特徵

封裝,繼承,多態,抽象

 

八.打印昨天的時間

date('Y-m-d H:i:s' , time()-60*60*24)

date('Y-m-d H:i:s' ,strtotime("-1 day"))

 

九. echo print print_t 區別

 

echo 輸出一個或者多個字符串 

echo 不是一個函數

echo 沒有返回值

 

print 輸出字符串 不是函數, 返回值老是1 

print_r 打印關於變量的易於理解的信息 , 返回值是布爾

 

printf 輸出格式化字符串 返回輸出字符串的長度

 

十. HTML PHP 分離模板

Smarty, Dwoo, tinyButStrong Templete Lite Savant, phemplate XTemplate

 

十一.版本控制工具

VSS適合團隊whends           CVS 適合小團隊            SVN CVS升級版, 

 

十二. 優化數據庫

1.建立索引

2.hash表分區存儲

3.儘可能不寫子查詢

分割表

4.創建合理數據庫,合理運用 Enum

5.不要在數據庫裏發生運算

6.my.cnf設置, 最大鏈接數,查詢緩存

7.選擇合適的儲存引擎

8.避免使用長鏈接

 MySQL均衡負載

利用mysql主從複製 實現 更新操做和查詢操做分流, 主要的實現是一臺主服務器實現更新操做, 多臺服務器實現查詢操做 , 主從之間經過複製實現數據同步

出現的問題是 主數據庫 更新頻繁及網絡問題 ,致使主從之間可能致使數據差別

 

mysql讀寫分離,異步複製

實時性要求不能過高

 

分佈式數據庫架構

分佈式儲存引擎只有innodb引擎支持 , 具體實現的時候,可使用mysql的Cluster功能(NDB引擎)

做用:實現高負載, 多臺服務器均衡負載, 

 

十二、apache+mysql+php實現最大負載的方法

1) 問的太籠統,生成靜態html頁面,squid反向代理,apache,mysql的負載均衡。

 

2) 能夠採起數據緩存的方法,咱們一般在統計數據的時候,須要在原始數據的基礎上通過計算等一系列操做,纔會獲得最終的結果,若是每作一個查詢都須要這樣一系列操做,當數據量大時,勢必會帶來不少問題。能夠創建一個結果表,寫一個腳本,用crontab定時觸發腳本去原始表取數據,計算,寫入到結果表,前端查詢從結果表取數據,這也是比較經常使用的一種作法。

 

3) 採用分佈式,多個apache,多個mysql,其實就是dns負載均衡,dns根據當前用戶解析幾個ip的ping值,將用戶轉移到某一臺最快的服務器,或者平均分配。

十三. 創建索引

 

建立索引:

create index 索引名稱 on 表名(字段列表)            普通索引  ->什麼字段均可以

create index 索引名稱 on 表名(字段列表)

create unique index 索引名稱 on 表名(字段列表)     建立惟一索引  ->字段必須惟一

alter table 表名 add primary key(字段名)        建立主鍵索引

 聯合主鍵:

 

alter table 表名 add fulltext index               建立全文索引(不支持中文)

sphinx corseek 中文分詞索引  

 

查看索引 show index from 表名

刪除索引 drop index 索引名 on 表名

使用索引場景

匹配全值,範圍查詢,匹配最左前綴,僅對索引進行查詢,匹配列前綴,索引部分等值匹配部分範圍匹配,列名是索引

 

索引存在但不能使用索引的場景

以%開頭的like查詢

二、數據類型出現隱式轉化,不會使用索引

三、組合索引,不知足最左原則,不使用符合索引

四、估計使用索引比全表掃描還慢,則不要使用索引

五、用or分割條件,若or先後只要有一個列沒有索引,就都不會用索引

  

十四. 解釋PHP

基於服務端來建立動態網站的腳本語言

 

十五 .MySQL獲取當前時間 select now();

 

十六.解決高併發 

首先查看是否被盜鏈, 谷歌有相關統計網站

若是流量能夠承受的話, 節約成本能夠用技術實現,

高併發會帶來用戶體驗很差, 一個重要緣由是CPU和內存負載太高,  這這塊用專業緣由來解釋就是在網絡沒有問題的前提下 頻繁的數據讀寫, 這點能夠用 頁面靜態化 , memcache緩存, mysql優化 這幾個方面着手

 

接着控制大文件的下載速度, 或者配置專門的服務器

若是預計流量過大的話, 能夠投入資金的話 , 使用多臺主機分流, 也是根治

控制大文件的下載速度, 或者配置專門服務器, 

 

 

十七.PHP 實現  顯示客戶端IP 與服務器 IP 的代碼

$_SERVER['remote_ADDR']

$_SERVER['SERVER_ADDR']

相關文章
相關標籤/搜索