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