php機試題
讓你在電腦上寫代碼做題唄
2. PHP機試題
ajax那部分可以不會 數據表不會建? 啥都不會你還學php幹啥。
3. PHP編程題
唱的不錯,這個還是可以的,酸的玫瑰。
4. php面試題 memcache和redis的區別
Redis與Memcached的區別
傳統MySQL+ Memcached架構遇到的問題
實際MySQL是適合進行海量數據存儲的,通過Memcached將熱點數據載入到,加速訪問,很多公司都曾經使用過這樣的架構,但隨著業務數據量的不斷增加,和訪問量的持續增長,我們遇到了很多問題:
1.MySQL需要不斷進行拆庫拆表,Memcached也需不斷跟著擴容,擴容和維護工作占據大量開發時間。
2.Memcached與MySQL資料庫數據一致性問題。
3.Memcached數據命中率低或down機,大量訪問直接穿透到DB,MySQL無法支撐。
4.跨機房cache同步問題。
眾多NoSQL百花齊放,如何選擇
最近幾年,業界不斷涌現出很多各種各樣的NoSQL產品,那麼如何才能正確地使用好這些產品,最大化地發揮其長處,是我們需要深入研究和思考的
問題,實際歸根結底最重要的是了解這些產品的定位,並且了解到每款產品的tradeoffs,在實際應用中做到揚長避短,總體上這些NoSQL主要用於解
決以下幾種問題
1.少量數據存儲,高速讀寫訪問。此類產品通過數據全部in-momery 的方式來保證高速訪問,同時提供數據落地的功能,實際這正是Redis最主要的適用場景。
2.海量數據存儲,分布式系統支持,數據一致性保證,方便的集群節點添加/刪除。
3.這方面最具代表性的是dynamo和bigtable 2篇論文所闡述的思路。前者是一個完全無中心的設計,節點之間通過gossip方式傳遞集群信息,數據保證最終一致性,後者是一個中心化的方案設計,通過類似一個分布式鎖服務來保證強一致性,數據寫入先寫內存和redo log,然後定期compat歸並到磁碟上,將隨機寫優化為順序寫,提高寫入性能。
4.Schema free,auto-sharding等。比如目前常見的一些文檔資料庫都是支持schema-free的,直接存儲json格式數據,並且支持auto-sharding等功能,比如mongodb。
面對這些不同類型的NoSQL產品,我們需要根據我們的業務場景選擇最合適的產品。
Redis適用場景,如何正確的使用
前面已經分析過,Redis最適合所有數據in-momory的場景,雖然Redis也提供持久化功能,但實際更多的是一個disk-
backed的功能,跟傳統意義上的持久化有比較大的差別,那麼可能大家就會有疑問,似乎Redis更像一個加強版的Memcached,那麼何時使用
Memcached,何時使用Redis呢?
如果簡單地比較Redis與Memcached的區別,大多數都會得到以下觀點:
1 Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
2 Redis支持數據的備份,即master-slave模式的數據備份。
3 Redis支持數據的持久化,可以將內存中的數據保持在磁碟中,重啟的時候可以再次載入進行使用。
拋開這些,可以深入到Redis內部構造去觀察更加本質的區別,理解Redis的設計。
在
Redis中,並不是所有的數據都一直存儲在內存中的。這是和Memcached相比一個最大的區別。Redis只會緩存所有的
key的信息,如果Redis發現內存的使用量超過了某一個閥值,將觸發swap的操作,Redis根據「swappability =
age*log(size_in_memory)」計
算出哪些key對應的value需要swap到磁碟。然後再將這些key對應的value持久化到磁碟中,同時在內存中清除。這種特性使得Redis可以
保持超過其機器本身內存大小的數據。當然,機器本身的內存必須要能夠保持所有的key,畢竟這些數據是不會進行swap操作的。同時由於Redis將內存
中的數據swap到磁碟中的時候,提供服務的主線程和進行swap操作的子線程會共享這部分內存,所以如果更新需要swap的數據,Redis將阻塞這個
操作,直到子線程完成swap操作後才可以進行修改。
使用Redis特有內存模型前後的情況對比:
VM off: 300k keys, 4096 bytes values: 1.3G used
VM on: 300k keys, 4096 bytes values: 73M used
VM off: 1 million keys, 256 bytes values: 430.12M used
VM on: 1 million keys, 256 bytes values: 160.09M used
VM on: 1 million keys, values as large as you want, still: 160.09M used
當
從Redis中讀取數據的時候,如果讀取的key對應的value不在內存中,那麼Redis就需要從swap文件中載入相應數據,然後再返回給請求方。
這里就存在一個I/O線程池的問題。在默認的情況下,Redis會出現阻塞,即完成所有的swap文件載入後才會相應。這種策略在客戶端的數量較小,進行
批量操作的時候比較合適。但是如果將Redis應用在一個大型的網站應用程序中,這顯然是無法滿足大並發的情況的。所以Redis運行我們設置I/O線程
池的大小,對需要從swap文件中載入相應數據的讀取請求進行並發操作,減少阻塞的時間。
如果希望在海量數據的環境中使用好Redis,我相信理解Redis的內存設計和阻塞的情況是不可缺少的。
補充的知識點:
memcached和redis的比較
1 網路IO模型
Memcached是多線程,非阻塞IO復用的網路模型,分為監聽主線程和worker子線程,監聽線程監聽網路連接,接受請求後,將連接描述
字pipe 傳遞給worker線程,進行讀寫IO, 網路層使用libevent封裝的事件庫,多線程模型可以發揮多核作用,但是引入了cache
coherency和鎖的問題,比如,Memcached最常用的stats
命令,實際Memcached所有操作都要對這個全局變數加鎖,進行計數等工作,帶來了性能損耗。
(Memcached網路IO模型)
Redis使用單線程的IO復用模型,自己封裝了一個簡單的AeEvent事件處理框架,主要實現了epoll、kqueue和select,
對於單純只有IO操作來說,單線程可以將速度優勢發揮到最大,但是Redis也提供了一些簡單的計算功能,比如排序、聚合等,對於這些操作,單線程模型實
際會嚴重影響整體吞吐量,CPU計算過程中,整個IO調度都是被阻塞住的。
2.內存管理方面
Memcached使用預分配的內存池的方式,使用slab和大小不同的chunk來管理內存,Item根據大小選擇合適的chunk存儲,內
存池的方式可以省去申請/釋放內存的開銷,並且能減小內存碎片產生,但這種方式也會帶來一定程度上的空間浪費,並且在內存仍然有很大空間時,新的數據也可
能會被剔除,原因可以參考Timyang的文章:http://timyang.net/data/Memcached-lru-evictions/
Redis使用現場申請內存的方式來存儲數據,並且很少使用free-list等方式來優化內存分配,會在一定程度上存在內存碎片,Redis
跟據存儲命令參數,會把帶過期時間的數據單獨存放在一起,並把它們稱為臨時數據,非臨時數據是永遠不會被剔除的,即便物理內存不夠,導致swap也不會剔
除任何非臨時數據(但會嘗試剔除部分臨時數據),這點上Redis更適合作為存儲而不是cache。
3.數據一致性問題
Memcached提供了cas命令,可以保證多個並發訪問操作同一份數據的一致性問題。 Redis沒有提供cas 命令,並不能保證這點,不過Redis提供了事務的功能,可以保證一串 命令的原子性,中間不會被任何操作打斷。
4.存儲方式及其它方面
Memcached基本只支持簡單的key-value存儲,不支持枚舉,不支持持久化和復制等功能
Redis除key/value之外,還支持list,set,sorted set,hash等眾多數據結構,提供了KEYS
進行枚舉操作,但不能在線上使用,如果需要枚舉線上數據,Redis提供了工具可以直接掃描其mp文件,枚舉出所有數據,Redis還同時提供了持久化和復制等功能。
5.關於不同語言的客戶端支持
在不同語言的客戶端方面,Memcached和Redis都有豐富的第三方客戶端可供選擇,不過因為Memcached發展的時間更久一些,目
前看在客戶端支持方面,Memcached的很多客戶端更加成熟穩定,而Redis由於其協議本身就比Memcached復雜,加上作者不斷增加新的功能
等,對應第三方客戶端跟進速度可能會趕不上,有時可能需要自己在第三方客戶端基礎上做些修改才能更好的使用。
根據以上比較不難看出,當我們不希望數據被踢出,或者需要除key/value之外的更多數據類型時,或者需要落地功能時,使用Redis比使用Memcached更合適。
關於Redis的一些周邊功能
Redis除了作為存儲之外還提供了一些其它方面的功能,比如聚合計算、pubsub、scripting等,對於此類功能需要了解其實現原
理,清楚地了解到它的局限性後,才能正確的使用,比如pubsub功能,這個實際是沒有任何持久化支持的,消費方連接閃斷或重連之間過來的消息是會全部丟
失的,又比如聚合計算和scripting等功能受Redis單線程模型所限,是不可能達到很高的吞吐量的,需要謹慎使用。
總的來說Redis作者是一位非常勤奮的開發者,可以經常看到作者在嘗試著各種不同的新鮮想法和思路,針對這些方面的功能就要求我們需要深入了解後再使用。
總結:
1.Redis使用最佳方式是全部數據in-memory。
2.Redis更多場景是作為Memcached的替代者來使用。
3.當需要除key/value之外的更多數據類型支持時,使用Redis更合適。
4.當存儲的數據不能被剔除時,使用Redis更合適。
談談Memcached與Redis(一)
1. Memcached簡介
Memcached是以LiveJurnal旗下Danga Interactive公司的Bard
Fitzpatric為首開發的高性能分布式內存緩存伺服器。其本質上就是一個內存key-value資料庫,但是不支持數據的持久化,伺服器關閉之後數
據全部丟失。Memcached使用C語言開發,在大多數像Linux、BSD和Solaris等POSIX系統上,只要安裝了libevent即可使
用。在Windows下,它也有一個可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached
的客戶端軟體實現非常多,包括C/C++, PHP, java, Python, Ruby, Perl, Erlang,
Lua等。當前Memcached使用廣泛,除了LiveJournal以外還有Wikipedia、Flickr、Twitter、Youtube和
WordPress等。
在Window系統下,Memcached的安裝非常方便,只需從以上給出的地址下載可執行軟體然後運行memcached.exe –d
install即可完成安裝。在Linux等系統下,我們首先需要安裝libevent,然後從獲取源碼,make && make
install即可。默認情況下,Memcached的伺服器啟動程序會安裝到/usr/local/bin目錄下。在啟動Memcached時,我們可
以為其配置不同的啟動參數。
1.1 Memcache配置
Memcached伺服器在啟動時需要對關鍵的參數進行配置,下面我們就看一看Memcached在啟動時需要設定哪些關鍵參數以及這些參數的作用。
1)-p <num> Memcached的TCP監聽埠,預設配置為11211;
2)-U <num> Memcached的UDP監聽埠,預設配置為11211,為0時表示關閉UDP監聽;
3)-s <file> Memcached監聽的UNIX套接字路徑;
4)-a <mask> 訪問UNIX套接字的八進制掩碼,預設配置為0700;
5)-l <addr> 監聽的伺服器IP地址,默認為所有網卡;
6)-d 為Memcached伺服器啟動守護進程;
7)-r 最大core文件大小;
8)-u <username> 運行Memcached的用戶,如果當前為root的話需要使用此參數指定用戶;
9)-m <num> 分配給Memcached使用的內存數量,單位是MB;
10)-M 指示Memcached在內存用光的時候返回錯誤而不是使用LRU演算法移除數據記錄;
11)-c <num> 最大並發連數,預設配置為1024;
12)-v –vv –vvv 設定伺服器端列印的消息的詳細程度,其中-v僅列印錯誤和警告信息,-vv在-v的基礎上還會列印客戶端的命令和相應,-vvv在-vv的基礎上還會列印內存狀態轉換信息;
13)-f <factor> 用於設置chunk大小的遞增因子;
14)-n <bytes> 最小的chunk大小,預設配置為48個位元組;
15)-t <num> Memcached伺服器使用的線程數,預設配置為4個;
16)-L 嘗試使用大內存頁;
17)-R 每個事件的最大請求數,預設配置為20個;
18)-C 禁用CAS,CAS模式會帶來8個位元組的冗餘;
2. Redis簡介
Redis是一個開源的key-value存儲系統。與Memcached類似,Redis將大部分數據存儲在內存中,支持的數據類型包括:字
符串、哈希表、鏈表、集合、有序集合以及基於這些數據類型的相關操作。Redis使用C語言開發,在大多數像Linux、BSD和Solaris等
POSIX系統上無需任何外部依賴就可以使用。Redis支持的客戶端語言也非常豐富,常用的計算機語言如C、C#、C++、Object-C、PHP、
Python、Java、Perl、Lua、Erlang等均有可用的客戶端來訪問Redis伺服器。當前Redis的應用已經非常廣泛,國內像新浪、淘
寶,國外像Flickr、Github等均在使用Redis的緩存服務。
Redis的安裝非常方便,只需從http://redis.io/download獲取源碼,然後make && make
install即可。默認情況下,Redis的伺服器啟動程序和客戶端程序會安裝到/usr/local/bin目錄下。在啟動Redis伺服器時,我們
需要為其指定一個配置文件,預設情況下配置文件在Redis的源碼目錄下,文件名為redis.conf。
5. PHP+Mysql上機考試題
html"><?php
$p_arr=array("20120101"=>95,
"20120102"=>88,
"20120103"=>47,
"20120104"=>92,
"20120105"=>90,
"20120106"=>72,
"20120107"=>85,
"20120108"=>65,
"20120109"=>98,
"20120110"=>55);
$result=0;
foreach($p_arras$key=>&$value){
if($value>$result)
{
$result=$value;
$number=$key;
}
}
echo"最高成績";
echo"學號".$number;
echo"</br>";
echo"成績".$result;
echo"</br>";
echo"</br>";
echo"</br>";
echo"不及格:";
$result=0;
$number="";
foreach($p_arras$key=>&$value){
if($value<60)
{
echo"</br>";
echo"學號".$key;
echo"</br>";
echo"成績".$value;
}
}
?>
第一個問版題看w3school的幫助文檔權
6. 哪裡有php測試題帶答案的
1、用列印出前一天的時間,格式是2006-5-10 22:21:21
<?php
//echo date('Y-m-d H:i:s',time()-60*60*24
echo date("Y:m:d H:i:s",strtotime("-1 day"));
?>
2、echo(),print(),print_r()的區別
echo是語言結構,無返回值;print功能和echo基本相同,不同的是print是函數,有返回值;print_r是遞歸列印,用於輸出數組對象
3、能夠使HTML和PHP分離開使用的模板
so much,其實PHP本身就是一種模版引擎,我用過的是smarty,常見的還有PHPLib,FastTemplate,Savant這里有個模板引擎列表:http://www.sitepoint.com/forums/showthread.php?t=123769
4.如何實現PHP、JSP交互?
題目有點含糊不清,SOAP,XML_RPC,Socket function,CURL都可以實現這些,如果是考PHP和Java的整合,PHP內置了這種機制(如果考PHP和.NET的整合,也可以這么回答),例如$foo = new Java('java.lang.System');
5.使用哪些工具進行版本控制?
CVS和SVN,SVN號稱下一代CVS,功能強大,不過CVS是老牌,市佔率很高.我一直用SVN,題目是問用什麼工具,呃,這個可能需要這么回答:CVS Server on Apache作服務端,WinCVS作客戶端;Subversion on Apache/DAV 做服務端,TortoiseSVN做客戶端,或者Subclipse做客戶端
6.如何實現字元串翻轉?
<?php
function reverse($var)
{
$res="";
for($i=0,$j=strlen($var);$i<$j;$i++)
{
$res=$var[$i].$res;
}
return $res;
}
$tmpvar="wofang";
$res=reverse($tmpvar);
echo $res;
?>
7、優化MYSQL資料庫的方法。
(1).資料庫設計方面,這是DBA和Architect的責任,設計結構良好的資料庫,必要的時候,去正規化(英文是這個:denormalize,中文翻譯成啥我不知道),允許部分數據冗餘,避免JOIN操作,以提高查詢效率
(2).系統架構設計方面,表散列,把海量數據散列到幾個不同的表裡面.快慢表,快表只留最新數據,慢表是歷史存檔.集群,主伺服器Read & write,從伺服器read only,或者N台伺服器,各機器互為Master
(3).(1)和(2)超越PHP Programmer的要求了,會更好,不會沒關系.檢查有沒有少加索引
(4).寫高效的SQL語句,看看有沒有寫低效的SQL語句,比如生成笛卡爾積的全連接啊,大量的Group By和order by,沒有limit等等.必要的時候,把資料庫邏輯封裝到DBMS端的存儲過程裡面.緩存查詢結果,explain每一個sql語句
(5).所得皆必須,只從資料庫取必需的數據,比如查詢某篇文章的評論數,select count(*) ... where article_id = ? 就可以了,不要先select * ... where article_id = ?然後msql_num_rows.
只傳送必須的SQL語句,比如修改文章的時候,如果用戶只修改了標題,那就update ... set title = ? where article_id = ?不要set content = ?(大文本)
(6).必要的時候用不同的存儲引擎.比如InnoDB可以減少死鎖.HEAP可以提高一個數量級的查詢速度
8、談談事務處理
A給B的賬戶轉賬50美元的例子
9、apache+mysql+php實現最大負載的方法
見7
10.實現中文字串截取無亂碼的方法。
mb_substr()
11.
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是問題
$a = "hello";
$b = &$a;
unset($b);
$b = "world";
//答案為:hello
echo $a;
?>
12.
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是問題
$a = 1;
$x = &$a;
$b = $a++;
//以下為答案:1
echo $b;
?>
13
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是問題
$x = empty($array);
//以下為答案:true
echo $x?"true":"false";
?>
14、用PHP寫出顯示客戶端IP與伺服器IP的代碼:
<?php
$ip=gethostbyname ("");
echo $ip;
?>
7. (100分懸賞)幾道PHP題,速度快,准確高的多加200分
填空選擇題
1、在ASP頁面中用以下語句聲明<script language=VbScript _2___=server>腳本</script>,要求能在伺服器端運行VbScript腳本
2、把數值型轉換為字元串型的VbScript函數是_ CStr 3_;把字元串轉換為整數 VbScript函數是¬¬¬5¬cint()
3、HTML標記,可單獨使用或嵌入在各個ASP腳本單元中,以" __1____"為定界符; VBScript(或JScript)語句,可單獨使用或嵌入在各個ASP腳本單元中,以___9______為定界符,通過對"__2______"屬性的設置來決定是否在伺服器端運行;
ASP腳本命令,可單獨使用或包含在此和〈/html〉內,以"_____7____"為定界符
4、一段連接ACCESS資料庫的代碼
<% set conn=server.creatobject("adodb.connection")
Connstr= "DSN=____4___;UID=___6_____;PWD=;」
conn.open Connstr
%>
5、Session對象保存的用戶信息是存儲在___10_____;Cookie對象保存的用戶信息是存儲在____8_____
選項:
(1)< 和 〉 (2)runat (3)cstr (4)數據源的名稱 (5)cint
(6)資料庫的用戶名 (7)<% 和 %> (8)客戶端(9)<Script>和</Script> (10)伺服器端
三、判斷題
1、Vbscript只有一種數據類型,稱為Variant ( 1 wrong)
2、資料庫中的數據中最不可能為空值的是外鍵 ( 2 wrong)
3、Vbscript腳本語言不區分大小寫,而JavaScript區分大小寫 (right )
4、在特定的asp頁面中指定主要的腳本語言,格式為<%@ language=Language of Script%>,這一行聲明可以放在ASP頁面的任何位置 ( wrong)
5、一個包含動態腳本的ASP頁面直接雙擊,該頁面的內容不能正常顯示。( wrong)
6、刪除student表中學號為『200501012『的學生信息的SQL語句為
delete * from student where StudentID=』 200501012』 (right )
7、Vbscript聲明變數的時候用var;JavaScript聲明變數的時候用dim (wrong )
8、<%response.write Server.HTMLEncode(「<font color=』red』>顏色</font>」)%>將會以紅色的字體顯示「顏色」。( wrong)
9、ASP中request語句主要是用於用戶接收伺服器的數據 (wrong )
10、在用瀏覽器訪問某個網站的頁面時,可通過查看源文件的方式,修改網頁的源代碼( wrong)
四、問答題
1、ASP的工作原理 :用iis服務以網頁的形式瀏覽asp文件,
2、<form name="form1" method="post" action="">
<form name="form1" method="get" action="">
簡述Post和get方法的區別,並指出接收數據時用到的對象與方法
通過get方法提交數據,可能會帶來安全性的問題。比如一個登陸頁面。當通過get方法提交數據時,用戶名和密碼將出現在URL上。如果:
1、 登陸頁面可以被瀏覽器緩存;
2、 其他人可以訪問客戶的這台機器。
那麼,別人即可以從瀏覽器的歷史記錄中,讀取到此客戶的賬號和密碼。所以,在某些情況下,get方法會帶來嚴重的安全性問題。
建議 :在Form中,建議使用post方法。
post請求無長度限制(至少是理論上的)
表單提交中get和post方式的區別歸納如下幾點:
1. get是從伺服器上獲取數據,post是向伺服器傳送數據。
2. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個欄位一一對應,在URL中可以看到。post是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
3. 對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的數據。
4. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
5. get安全性非常低,post安全性較高。
get有長度限制,最長不超過2048位元組(1024個漢字)
8. php選擇題
答案為D
strcmp函數功能為:比較兩個字元串(區分大小寫)
函數返回:
0 - 如果兩個字元串相等
<0 - 如果string1小於string2
>0 - 如果string1大於string2
9. 大連東軟php上機期末考試題及答案代碼
Private Sub command1_click()
Dim m(10)
For k = 1 To 10
m(k) = 11 - k
Next k
x = 5
Print m(2 + m(x))
End Sub
A.2 B.3 C.4 D.5