mysql跨年统计年前年后_PHP面试总结 - osc_chmxgjn9的个人空间 - OSCHINA - 中文开源技术交流社区...
18、一群猴子排成一圈,按1,2,…,n依次編號。然后從第1只開始數,數到第m只,把它踢出圈,從它后面再開始數,再數到第m只,在把它踢出去…,如此不停 的進行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最后那個大王的編號(約瑟夫環)。
1
2 function fuhuan($allnum, $ti){
3 $arr = array();
4 for($i = 0; $i < $allnum; $i++){
5 $arr[$i] = $i;
6 }
7
8 $nums = 1;
9 while(count($arr) > 1){
10 foreach ($arr as $key => $value) {
11 if($nums == $ti){
12 unset($arr[$key]);
13 $nums = 1;
14 }else{
15 $nums++;
16 }
17 }
18 }
19 $new_arr = array_values($arr);
20 var_dump($new_arr[0] + 1);
21 }
22 fuhuan(10,10);
19、isset() 、empty()與is_null的區別
1、當變量未定義時,is_null() 和“參數本身”是不允許作為參數判斷的,會報Notice警告錯誤;
2、empty , isset首先都會檢查變量是否存在,然后對變量值進行檢測。而is_null 和 “參數本身”只是直接檢查變量值,是否為null,因此如果變量未定義就會出現錯誤!
3、isset():僅當null和未定義,返回false;
4、empty():""、0、"0"、NULL、FALSE、array(),未定義,均返回true;
5、is_null():僅判斷是否為null,未定義報警告;
6、變量本身作為參數,與empty()一致,但接受未定義變量時,報警告;
20、求兩個文件的相對路徑(這題沒什么實際意義)
1 getpath('/a/b/c/d/e.php', '/a/d/12/34/c.php');
2
3 public function getpath($a, $b)
4 {
5 $aarr = explode('/', $a);
6 $barr = explode('/', $b);
7 $count = count($barr) - 2;
8 $pathinfo = '';
9 for($i = 1; $i <= $count; $i++){
10 if($aarr[$i] == $barr[$i]){
11 $pathinfo .= '../';
12 }else{
13 $pathinfo .= $barr[$i] . '/';
14 }
15 }
16 echo $pathinfo;
17 }
21、MVC的優缺點
1、 MVC的優點
(1)
可以為一個模型在運行時同時建立和使用多個視圖。變化-傳播機制可以確保所有相關的視圖及時得到模型數據變化,從而使所有關聯的視圖和控制器做到行為同步。(2)視圖與控制器的可接插性,允許更換視圖和控制器對象,而且可以根據需求動態的打開或關閉、甚至在運行期間進行對象替換。(3)模型的可移植性。因為模型是獨立于視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進行新的修改。(4)潛在的框架結構??梢曰诖四P徒贸绦蚩蚣?#xff0c;不僅僅是用在設計界面的設計中。2、 MVC的不足之處
(1)增加了系統結構和實現的復雜性。對于簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的復雜性,并可能產生過多的更新操作,降低運行效率。(2)視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。(3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。(4) 目前,一般高級的界面工具或構造器不支持MVC模式。改造這些工具以適應MVC需要和建立分離的部件的代價是很高的,從而造成使用MVC的困難。
22、session與cookie的聯系和區別(運行機制),session共享問題解決方案
區別與聯系:
使用session_start()調用session,服務器端在生成session文件的同時生成session ID哈希值和默認值為PHPSESSID的session name,并向客戶端發送變量為PHPSESSID(session name)(默認)值為一個128位的哈希值。服務器端將通過該cookie與客戶端進行交互,session變量的值經php內部系列化后保存在服務器 機器上的文本文件中,和客戶端的變量名默認情況下為PHPSESSID的coolie進行對應交互,即服務器自動發送了http 頭:header(‘Set-Cookie: session_name()=session_id(); path=/’);即setcookie(session_name(),session_id());當從該頁跳轉到的新頁面并調用 session_start()后,PHP將檢查與給定ID相關聯的服務器端存貯的session數據,如果沒找到則新建一個數據集。
共享
方案:
1:使用數據庫保存session, 使用數據庫來保存session,就算服務器宕機了也沒事,session照樣在。
問題:程序需要定制;每次請求都進行數據庫讀寫開銷不小,另外數據庫是一個單點,可以做數據庫的hash來解 決這個問題。
2:使用 memcached來保存session,?這種方式跟數據庫類似,內存存取性能比數據庫好很多。
問題:程序需要定制,增加 了工作量;存入memcached中的數據都需要序列化,效率較低,斷電或者重啟電腦容易丟失數據;
3: 通過加密的cookie,在A服務器上登錄,在用戶的瀏覽器上添加加密的cookie,當用戶訪問B服務器時,檢查有無Session,如果沒有,就檢驗 Cookie是否有效,Cookie有效的話就在B服務器上重建session。簡單,高效, 服務器的壓力減小了,因為session數據不存在服務器磁盤上。根本就不會出現session讀取不到的問題。
問題:網絡請求占用很多。每次請求時,客戶端都要通過cookie發送session數據給服務器,session中數據不能太多,瀏覽器對cookie 的大
小存在限制。不適合高訪問量的情況,因為高訪問量的情況下。
23、?正則表達式
正則表達式一定要會, 通過正則表達式能很容易的看出一個人的基礎
匹配中文字符的正則表達式: [\u4e00-\u9fa5]匹配雙字節字符(包括漢字在內):[^\x00-\xff]匹配空行的正則表達式:\n[\s| ]*\r匹配HTML標記的正則表達式:/.*|/匹配首尾空格的正則表達式:(^\s*)|(\s*$)匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*匹配網址URL的正則表達式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$匹配帳號是否合法(字母開頭,允許5-16字節,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配國內電話號碼:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?匹配騰訊QQ號:^[1-9]*[1-9][0-9]*$
24、寫一個函數得到header頭信息
function getHeader()
{
$headers = [];
if (function_exists('getallheaders')) {
$headers = getallheaders();
} elseif (function_exists('http_get_request_headers')) {
$headers = http_get_request_headers();
} else {
foreach ($_SERVER as $key => $value) {
if(strstr($key, 'HTTP_')) {
$newk = ucwords(strtolower(str_replace('_', '-', substr($key, 5))));
$headers[$newk] = $value;
}
}
}
var_dump($headers);
}
------------------------MySQL部分-----------------------
1、select * from table where (ID = 10)? or (ID = 32) or (ID = 22)? 讓結果按10, 32, 22的順序檢索出來?
Select *
from user_info
Where (ID IN (10, 32, 22))
order BY FIND_IN_SET(ID, '10, 32, 22')
----------------------linux部分-----------------------
1、core文件是什么,有什么用?
core是unix系統的內核。當你的程序出現內存越界的時候,操作系統會中止你的進程,并將當前內存狀態倒出到core文件中,以便進一步分析。程序員可以通過core文件來找出問題所在。它記錄了程序掛掉時詳細的狀態描述。
什么是core dump Core的意思是內存, Dump的意思是扔出來, 堆出來。開發和使用Unix程序時, 有時程序莫名其妙的down了, 卻沒有任何的提示(有時候會提示core dumped). 這時候可以查看一下有沒有形如core.進程號的文件生成, 這個文件便是操作系統把程序down掉時的內存內容扔出來生成的,它可以做為調試程序的參考.
core dump又叫核心轉儲, 當程序運行過程中發生異常, 程序異常退出時, 由操作系統把程序當前的內存狀況存儲在一個core文件中, 叫core dump。如何使用core文件 gdb -c core文件路徑 [應用程序的路徑],進去后輸入where回車, 就可以顯示程序在哪一行當掉的, 在哪個函數中.
為什么沒有core文件生成呢? core文件的生成跟你當前系統的環境設置有關系, 可以用下面的語句設置一下, 然后再運行程序便成生成core文件.
ulimit -c unlimited core文件生成的位置一般于運行程序的路徑相同, 文件名一般為core.進程號
不用core文件,程序出了問題產生信號是否知道?答:內核向進程發信號嘛。
2、共享內存除了文件映射還有什么方式?
共享內存對象映射。
二者有什么區別:
區別:內存映射文件是由一個文件到一塊內存的映射,使應用程序可以通過內存指針對磁盤上的文件進行訪問,其過程就如同對加載了文件的內存的訪問,因此內存文件映射非常適合于用來管理大文件。
3、請解釋下列10個shell命令的用途
top、ps、mv、find、df、cat、chmod、chgrp、grep、wc
top:命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似于Windows的任務管理器。
ps:查看進程
mv:移動或者更改文件
find:在子目錄中搜索匹配的文件
df:linux中df命令參數功能:檢查文件系統的磁盤空間占用情況。
cat:把一個或多個文件內容顯示到標準輸出
chmod:改變文件屬性
chgrp:改變用戶分組
grep:在文件內進行搜索
wc:命令的功能為統計指定文件中的字節數、字數、行數,?并將統計結果顯示輸出。
4、Linux文件屬性有哪些?(共十位)
-rw-r--r--那個是權限符號,總共是- --- --- ---這幾個位。
第一個短橫處是文件類型識別符:-表示普通文件;c表示字符設備(character);b表示塊設備(block);d表示目錄 (directory);l表示鏈接文件(link);后面第一個三個連續的短橫是用戶權限位(User),第二個三個連續短橫是組權限位 (Group),第三個三個連續短橫是其他權限位(Other)。每個權限位有三個權限,r(讀權限),w(寫權限),x(執行權限)。如果每個權限位都 有權限存在,那么滿權限的情況就是:-rwxrwxrwx;權限為空的情況就是- --- --- ---。
權限的設定可以用chmod命令,其格式位:chmod ugoa+/-/=rwx filename/directory。例如:
一個文件aaa具有完全空的權限- --- --- ---。
chmod u+rw aaa(給用戶權限位設置讀寫權限,其權限表示為:- rw- --- ---)
chmod g+r aaa(給組設置權限為可讀,其權限表示為:- --- r-- ---)
chmod ugo+rw aaa(給用戶,組,其它用戶或組設置權限為讀寫,權限表示為:- rw- rw- rw-)
如果aaa具有滿權限- rwx rwx rwx。
chmod u-x aaa(去掉用戶可執行權限,權限表示為:- rw- rwx rwx)
如果要給aaa賦予制定權限- rwx r-x r-x,命令為:
chmod u=rwx,go=rx aaa
總結
以上是生活随笔為你收集整理的mysql跨年统计年前年后_PHP面试总结 - osc_chmxgjn9的个人空间 - OSCHINA - 中文开源技术交流社区...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 购买财务软件需要注意的4个方面
- 下一篇: linux cmake编译源码,linu