大公司的PHP面試題

weixin_30924079發表於2020-04-04

 

  1. 禁用COOKIE 後 SEESION 還能用嗎?

  2. 抓取遠端圖片到本地,你會用什麼函式?

  4. 你覺得在pV10W的時候, 同等配置下,LUNIX 比WIN快多少?

  5. 簡述pOST 和GET傳輸的最大容量分別是多少?

  6. 用最少的程式碼寫一個求3值最大值的函式.

 

 

回覆 2 樓 2015-01-26

  以下是部分答案(不保證是正確的解)

  1. 不能

  2 fsockopen

  4 (不做優化的情況下一樣)

  5 2MB,1024B

  6 function($a,$b,$c){

  return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c );

  }

  ———————————————————————————–

  大公司的pHp面試題

  2. 求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數

  $begin=strtotime(‘2007-2-5′);

  $end=strtotime(‘2007-3-6′);

  echo ($end-$begin)/(24*3600);

  3. 請寫一個函式,實現以下功能:

  字串“open_door” 轉換成 “OpenDoor”、”make_by_id” 轉換成 ”MakeById”。

  function str_change($str) {

  $str = str_replace ( “_”, ” “, $str );

  $str = ucwords ( $str );

  $str = str_replace ( ” “, “”, $str );

  return $str; }

  4. 要求寫一段程式,實現以下陣列$arr1轉換成陣列$arr2:

  $arr1 = array (

  ‘0′ => array (‘fid’ => 1, ‘tid’ => 1, ‘name’ =>’Name1′ ),

  ‘1′ => array (‘fid’ => 1, ‘tid’ => 2 , ‘name’ =>’Name2′ ),

  ‘2′ => array (‘fid’ => 1, ‘tid’ => 5 , ‘name’ =>’Name3′ ),

  ‘3′ => array (‘fid’ => 1, ‘tid’ => 7 , ‘name’ =>’Name4′ ),

  ‘4′ => array (‘fid’ => 3, ‘tid’ => 9, ‘name’ =>’Name5′ )

  );

  $arr2 = array (

  ‘0′ => array (

  ‘0′ => array ( ‘tid’ => 1, ‘name’ => ‘Name1′),

  ‘1′ => array ( ‘tid’ => 2, ‘name’ => ‘Name2′),

  ‘2′ => array ( ‘tid’ => 5, ‘name’ => ‘Name3′),

  ‘3′ => array ( ‘tid’ => 7, ‘name’ => ‘Name4′) ),

  ‘1′ => array (

  ‘0′ => array ( ‘tid’ => 9, ‘name’ => ‘Name5′ ) ) );

  $arr1 = array (

  ‘0′ => array (‘fid’ => 1, ‘tid’ => 1, ‘name’ =>’Name1′ ),

  ‘1′ => array (‘fid’ => 1, ‘tid’ => 2 , ‘name’ =>’Name2′ ),

  ‘2′ => array (‘fid’ => 1, ‘tid’ => 5 , ‘name’ =>’Name3′ ),

  ‘3′ => array (‘fid’ => 1, ‘tid’ => 7 , ‘name’ =>’Name4′ ),

  ‘4′ => array (‘fid’ => 3, ‘tid’ => 9, ‘name’ =>’Name5′ )

  );

  function changeArrayStyle($arr){

  foreach($arr as $key=>$value){

  $result[$value[\fid\]][]=$value;

  }

  return array_values($result);

  }

  $arr2=changeArrayStyle($arr1);

  echo “

  ”;

  var_dump($arr2);

  ?>

  5. 請簡述資料庫設計的正規化及應用。

  一般第3正規化就足以,用於表結構的優化,這樣做既可以避免應用程式過於複雜同時也避免了SQL語句過於龐大所造成系統效率低下。

  ANSWER:

  第一正規化:若關係模式R的每一個屬性是不可再分解的,再屬於第一正規化。

  第二正規化:若R屬於第一正規化,且所有的非碼屬性都完全函式依賴於碼屬性,則為第二正規化。

  第三正規化:若R屬於第二正規化,且所有的非碼屬性沒有一個是傳遞函式依賴於候選碼,則屬於第三正規化。

  6.一個表中的Id有多個記錄,把所有這個id的記錄查出來,並顯示共有多少條記錄數,用SQL語句及檢視、儲存過程分別實現。

  儲存過程:

  DELIMITER //

  create procedure proc_countNum(in columnId int,out rowsNo int)

  begin

  select count(*) into rowsNo from member where member_id=columnId;

  end

  call proc_countNum(1,@no);

  select @no;

  檢視:

  create view v_countNum as select member_id,count(*) as countNum from member group by member_id

  select countNum from v_countNum where member_id=1

  7 表中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。

  select

  case

  when first_name>middle_name then

  case when first_name>last_name then first_name

  else last_name end

  else

  case when middle_name>last_name then middle_name else last_name

  end

  end as name

  from member

  8請簡述專案中優化sql語句執行效率的方法,從哪些方面,sql語句效能如何分析?

  sql優化有鳥用,不如直接加索引。

  9 如果模板是用smarty模板。怎樣用section語句來顯示一個名為$data的陣列。比如:

  $data = array(

  [0] => array( [id]=8 [name]=’name1′)

  [1] => array( [id]=10 [name]=’name2′)

  [2] => array( [id]=15 [name]=’name3′)

  ……

  )

  寫出在模板頁的程式碼? 若用foreach語句又要怎樣顯示呢?

  {section name=loop loop=$data}

  {$data[loop].id}

  {$data[loop].name}

  {/section}

  {foreach from=$data item=id key=k}

  {$k} – {$id}

  {/foreach}

  10 寫一個函式,能夠遍歷一個資料夾下的所有檔案和子資料夾。(目錄操作)

  $d = dir(dirname(__file__));

  //echo “Handle: ” . $d->handle . “\\n”;

  //echo “path: ” . $d->path . “\\n”;

  while ( false !== ($entry = $d->read ()) ) {

  echo $entry . “”;

  }

  $d->close ();

  ?>

  11 兩張表 city表和province表。分別為城市與省份的關係表。

  city:

  id City provinceid

  1 廣州 1

  2 深圳 1

  3 惠州 1

  4 長沙 2

  5 武漢 3

  ………. 廣州

  province:

  id province

  1 廣東

  2 湖南

  3 湖北

  ……….

  (1) 寫一條sql語句關係兩個表,實現:顯示城市的基本資訊。?

  (2) 顯示欄位:城市id ,城市名, 所屬省份 。

  如:

  Id(城市id) Cityname(城市名) privence(所屬省份)

  。。。。。。。。。

  。。。。。。。。。

  (2)如果要統計每個省份有多少個城市,請用group by 查詢出來。?

  顯示欄位:省份id ,省份名,包含多少個城市。

  ANSWER:

  1.select A.id,A.Cityname,B.province from city A,province B where A.provinceid=B.id

  2.select B.id,B.province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id

  12. 按照你的經驗請簡述軟體工程進行軟體開發的步驟。以下工具Rational Rose、powerDesigner、project、VSS或CVS、TestDirector使用過那種,有缺點是什麼?

  公司用dbdesigner及cvs,測試管理工具用的是Mantis

  13. 請簡述作業系統的執行緒與程式的區別。列舉LINUX下面你使用過的軟體?

  14. 請使用偽語言結合資料結構氣泡排序法對以下一組資料進行排序 10 2 36 14 10 25 23 85 99 45。

  $a = array(10,2,36,14,10,25,23,85,99,45);

  for($j=0 ; $j<9 ; $j++)

  for($i=0 ; $i<9-$j ; $i++)

  if($a[$i] > $a[$i+1]) {

  $t = $a[$i] ;

  $a[$i] = $a[$i+1] ;

  $a[$i+1] = $t ; }

  echo var_dump($a);

  —————————————————————————–

  —————————————————————————–

  —————————————————————————–

  新浪php工程師面試題 收藏

  1、COOKIE、SESSION的聯絡和區別,多臺web伺服器如何共享SESSION?

  2、HTTp協議中的pOST和GET有何區別?

  3、一段php程式碼,寫出輸出結果:

  /**** 這個程式****/

  $a=0;

  $b=0;

  if(($a=3)>0||($b=3)>0){

  $a++;

  $b++;

  echo $a ;

  echo $b; //輸出b的值 ($a=4 ,$b=1) $b=3沒有執行

  }

  4、reqiure的include都可包含檔案,二者的區別何在?

  5、php中WEB上傳檔案的原理是什麼,如何限制上傳檔案的大小?

  is_uploaded_file() 和 move_uploaded_file()

  6、寫一個函式,可以遍歷資料夾下的所有檔案和資料夾.

  7、8、中間有幾個unix shell的題目(好像是兩個),因為不懂,不記得這些題目了

  9、有mail.log的一個文件,內容為若干郵件地址,其中用’\\n’將郵件地址分隔。要求從中挑選出sina.com的郵件地址(包括從檔案讀取、過濾到列印出來)。

  mail.log內容如下:

  james@sina.com.cn

  jack@163.com

  zhansan@sohu.com

  lisi@hotmail.com

  wangwu@gmail.com

  10、js中網頁前進和後退的程式碼 ( 前進: history.forward();=history.go(1); 後退: history.back();=history.go(-1); )

  11、window(A)中用window.open()開啟了window(B),如何從視窗B呼叫視窗A中的內容?A、B僅僅是視窗的代號,不是視窗名字

  12、瞭解ajax嗎?用過嗎?……

  13、什麼是MVC?用過嗎?使用時遇到了什麼問題,怎麼解決的?

  14.寫出 訪問 http://www.sina.com.cn 所需的報文頭,嘿嘿,這是超級豬自己想起來地。md5_file()

  —————————————————————————–

  —————————————————————————–

  —————————————————————————–

  最新的新浪pHp面試題(2009.3)

  1. echo count(“abc”); 輸出什麼?

  答案:1

  2. 用pHp寫出顯示客戶端Ip與伺服器Ip的程式碼

  答案:客戶端 getenv(‘REMOTE_ADDR’);

  伺服器端 getenv(‘SERVER_ADDR’); // gethostbyname(“www.baidu.com”);

  3. error_reporting(2047)什麼作用?

  答案:相當於 error_reporting(‘E_ALL’); 輸出所有的錯誤

  4.如何實現pHp、JSp互動?

   題目有點含糊不清,SOAp,XML_RpC,Socket function,CURL都可以實現這些,如果是考pHp和Java的整合,pHp內建了這種機制(如果考pHp和.NET的整合,也可以這麼回答), 例如$foo = new Java(‘java.lang.System’);

  5. 開啟php.ini中的Safe_mode,會影響哪些引數?至少說出6個。

   答案:此模組開啟時,php將檢查當前指令碼的擁有者是否和被操作檔案的擁有者相同,因此,將影響檔案操作類函式,程式執行函式(program Execution Functions)。這些函式有.pathinfo,basename,fopen,system,exec,proc_open 等函式;

  7. 請寫一個函式驗證電子郵件的格式是否正確(要求使用正則)

  function checkEmail($mail){

  $reg = ‘/^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/’;

  $rst = preg_match($reg , $mail);

  if($rst){

  return TRUE;

  }else {

  return FALSE;

  }

  }

  11. 寫個函式用來對二維陣列排序。

  array_multisort()

  12. 寫5個不同的自己的函式,來擷取一個全路徑的檔案的副檔名,允許封裝php庫中已有的函式。

   13. 一群猴子排成一圈,按1,2,…,n依次編號。然後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停 的進行下去,直到最後只剩下一隻猴子為止,那隻猴子就叫做大王。要求程式設計模擬此過程,輸入m、n, 輸出最後那個大王的編號

  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語句,比如修改文章的時候,如果使用者只修改了標題,那就… set title = ? where article_id = ?不要set content = ?(大文字)

  (6).必要的時候用不同的儲存引擎.比如InnoDB可以減少死鎖.HEAp可以提高一個數量級的查詢速度

  ————————————————————————

  $s = ‘abc’;

  if ($s==0)

  echo ‘is zero’;

  else

  echo ‘is not zero’;

  ?>

  好多人答錯了,認為答案是輸出字串“is not zero”。其實正確答案應該是輸出字串“is zero”。

   原因其實簡單,因為 pHp 是一門弱型別的語言,它對變數沒有“必須先定義再使用”的強制要求,變數的型別也是根據賦值的型別來靈活變化的。這一“靈活性”看似靈活,實際上埋下了錯 誤的隱患。雖然 $s = ‘abc’; 語句定義了變數 $s 為字串型別,但因為 if ($s==0)語句中,$s 是和數字型常量比較,所以 $s 這時被隱含的轉換成了數字型變數,其值是 0,所以 $s==0 比較的結果就為真。

  犯這一型別錯誤的人一般是從 Java、C 等語言轉到 pHp 開發的程式設計師,因為 Java、C 等語言是強型別語言,是不允許不同型別的變數和常量相互比較的,在這種情況下會報告語法錯誤。

  其實 pHp 語言的開發者並不是沒有注意到這類問題,在 pHp 語言裡還有一個嚴格比較的運算子“===”,要求比較的雙方必須型別一致,把上述 if ($s==0) 語句寫為 if ($s===0) 就會避免前述錯誤的發生。

  ———————————————————————————–

  $str=”cd”;

  $$str=”hotdog”; //$cd

  $$str.=”ok”;

  echo $cd; //hotdogok

  ?>

  ————————————————————————————–

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

  主要是配置檔案的優化了,另外用linux跑要比用windows跑效果好一點。

  mkdir建立目錄 touch建立資料夾 修改許可權chmod之類

  51、請寫出pHp5許可權控制修飾符(3分)

  private protected public

  13、對於大流量的網站,您採用什麼樣的方法來解決訪問量問題?(4分)

  首先,確認伺服器硬體是否足夠支援當前的流量

  其次,優化資料庫訪問。

  第三,禁止外部的盜鏈。

  第四,控制大檔案的下載。

  第五,使用不同主機分流主要流量

  第六,使用流量分析統計軟體。

  htmlspecialchars() 函式把一些預定義的字元轉換為 HTML 實體。

  htmlentities() 函式把字元轉換為 HTML 實體。(htmlentities( )的轉義更為徹底。)

  SQL隱碼攻擊是很容易避免的。正如第一章所提及的,你必須堅持 過濾輸入和轉義輸出。———

  microtime 返回當前時間戳, mktime()取得指定的時間戳

  //本頁地址,當前指令碼的名稱.

  echo $_SERVER[\pHp_SELF\].””;

  //連結到當前頁面的前一頁面的 URL 地址:

  echo $_SERVER[\HTTp_REFERER\].””;

  3.在HTTp 1.0中,狀態碼 401 的含義是(4);如果返回“找不到檔案”的提示,則可用 header 函式,

  其語句為(5)。

  (4)未授權 (5) header(“HTTp/1.0 404 Not Found”);———找不到檔案

  header(“HTTp/1.1 403 Forbidden”);———不允許訪問

  7.以Apache模組的方式安裝pHp,在檔案http.conf中首先要用語句(10)動態裝載pHp模組,

  然後再用語句(11)使得Apache把所有副檔名為php的檔案都作為pHp指令碼處理。

  (10) LoadModule php5_module “c:/php/php5apache2.dll”

  (11) AddType application/x-httpd-php-source .phps

  AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml

  9.類的屬性可以序列化後儲存到 session 中,從而以後可以恢復整個類,這要用到的函式是(14)。

  serialize() /unserialize()

  10.一個函式的引數不能是對變數的引用,除非在php.ini中把(15)設為on.

  allow_call_time_pass_reference

 

 

尹勇荷

回覆 3 樓 2015-08-04

   問題:請用最簡單的語言告訴我PHP是什麼?

  回答:PHP全稱:Hypertext Preprocessor,是一種用來開發動態網站的伺服器指令碼語言。

  問題:什麼是MVC?

  回答:MVC由Model(模型), View(檢視)和Controller(控制器)組成,PHP MVC可以更高效地管理好3個不同層的PHP程式碼。

  Model:資料資訊存取層。

  View:view層負責將應用的資料以特定的方式展現在介面上。

  Controller:通常控制器負責從檢視讀取資料,控制使用者輸入,並向模型傳送資料。

  問題:在頁面中引用CSS有幾種方式?

  回答:在頁面中使用CSS有3中方式:

  引用外部CSS檔案

  內部定義Style樣式

  內聯樣式

  問題:PHP支援多繼承嗎?

  回答:不可以。PHP類只能繼承一個父類,並用關鍵字“extended”標識。

  問題:請問PHP中echo和print有什麼區別?

  這兩個看起來很相似,因為它們都是將一些值列印在螢幕上。但是echo和print的本質區別在於:echo用來輸出字串,顯示多個值的時候可以用逗號隔開。只支援基本型別,print不僅可以列印字串值,而且可以列印函式的返回值。

  問題:請問GET和POST方法有什麼區別?

  回

  答:我們再網頁上填寫的表單資訊都可以通過這兩個方法將資料傳遞到伺服器上,當我們使用GET方法是,所有的資訊都會出現在URL地址中,並且使用GET

  方法最多隻能傳遞1024個字元,所以如果在傳輸量小或者安全性不那麼重要的情況下可以使用GET方法。說到POST方法,最多可以傳輸2MB位元組的數

  據,而且可以根據需要調節。

  問題:PHP中獲取影像尺寸大小的方法是什麼?

  回答:getimagesize () 獲取圖片的尺寸

  Imagesx () 獲取圖片的寬度

  Imagesy () 獲取圖片的高度

  問題:PHP中的PEAR是什麼?

  回答:PEAR也就是為PHP擴充套件與應用庫(PHP Extension and Application Repository),它是一個PHP擴充套件及應用的一個程式碼倉庫。

  問題:如何用PHP和MySQL上傳視訊?

  回答:我們可以在資料庫中存放視訊的地址,而不需要將真正的視訊資料存在資料庫中。可以將視訊資料存放在伺服器的指定資料夾下,上傳的預設大小是2MB,但是我們也可以在php.ini檔案中修改max_file size選項來改變。

  問題:PHP中的錯誤型別有哪些?

  回答:PHP中遇到的錯誤型別大致有3類。

  提示:這都是一些非常正常的資訊,而非重大的錯誤,有些甚至不會展示給使用者。比如訪問不存在的變數。

  警告:這是有點嚴重的錯誤,將會把警告資訊展示給使用者,但不會影響程式碼的輸出,比如包含一些不存在的檔案。

  錯誤:這是真正的嚴重錯誤,比如訪問不存在的PHP類。

  問題:如何在PHP中定義常量?

  回答:PHP中使用Define () 來定義常量。

  define (“Newconstant”, 30);

  問題:如何不使用submit按鈕來提交表單?

  如果我們不想用submit按鈕來提交表單,我們也可以用超連結來提交,我們可以這樣寫程式碼:

       <a href=”javascript: document.myform.submit();”>Submit Me</a>

 

 

高璐奇

回覆 4 樓 2015-08-04

   紮實的基礎知識、高質量的程式碼、清晰的思路、優化程式碼的能力、優秀的綜合能力是程式設計技術面試的五大要點。

  找工作一直是一個熱門話題。要想找到心儀的工作,難免需要經過多輪面試。程式設計面試是程式設計師面試過程中最為重要的一個環節。如果能在程式設計面試的環節充分展示自己的能力,那麼拿到中意的Offer就是水到渠成的事情。

   我先後在歐特克、微軟和思科等公司任軟體工程師,多次接受他人的面試,同時也面試過很多人。總結面試與被面試的經驗,我發現儘管面試官的背景、性格各不 相同,但都關注應聘者五種素質:紮實的基礎知識;能寫高質量的程式碼;分析問題時思路清晰;能優化時間效率和空間效率;具備包括學習能力、溝通能力、發散思 維能力等在內的綜合能力。

  紮實的基礎知識

  紮實的基本功是成為優秀程式設計師的前提條件,因此面試官首要關注應聘者的素質即是否具備紮實的基礎。通常基本功在程式設計面試環節體現在兩個方面:一是程式語言,二是資料結構和演算法。

   每個程式設計師至少要熟練掌握1~2門程式語言。面試官從應聘者在面試過程中寫的程式碼以及跟進的提問中,能看出他程式語言掌握的熟練程度。以大部分公司面試 要求的C++為例,如果函式需要傳入一個指標,面試官可能會問是否需要為該指標加上const,把const加在指標不同的位置有什麼區別;如果寫的函式 需要傳入的引數是一個複雜型別的例項,面試官可能會問傳入值引數或者引用引數有什麼區別,什麼時候需要為傳入的引用引數加上const。

   資料結構通常是程式設計面試過程中考查的重點。在參加面試之前,應聘者需要熟練掌握連結串列、樹、棧、佇列以及雜湊表等資料結構以及它們的操作。如果我們留心各 大公司的面試題,就會發現連結串列和二叉樹相關的問題是很多面試官喜歡問的問題。這方面的問題看似簡單,但真正掌握也很不容易,特別適合在短短几十分鐘的面試 時間內檢驗應聘者的基本功。如果應聘者事先對連結串列的插入和刪除結點了如指掌,對二叉樹的各種遍歷方法的迴圈和遞迴寫法都爛熟於胸,那麼真正到了面試時也就 遊刃有餘了。

  大部分公司對演算法的要求都只是考查查詢和排序。應聘者可以在瞭解各種查詢和排序演算法的基礎上,重點掌握二分查詢、歸併排 序和快速排序,因為很多面試題都只是這些演算法的變體而已。比如把排序好的陣列的前面若干個數字移到陣列的後面,然後問怎樣在這個陣列之中找到最小的數字。 這道題其本質就是考查二分查詢。少數對演算法很重視的公司比如谷歌或者百度,還會要求應聘者熟練掌握動態規劃和貪婪演算法。如果對這種型別的公司感興趣,那麼 應聘者在參加面試之前就應該加強對相關演算法題目的練習。

  高質量的程式碼

  只有注重質量的程式設計師,才能寫出魯棒穩定的 大型軟體。在面試過程中,面試官總會格外關注邊界條件、特殊輸入等看似細枝末節但實質至關重要的地方,以此來分析應聘者是否注重程式碼質量。很多時候,面試 官發現應聘者寫出來的程式碼只能完成最基本的功能,一旦輸入特殊的邊界條件引數就會錯誤百出甚至程式崩潰。

  舉個很多應聘者都被問過的一 個問題:寫一個函式,把字串轉化成整數。這道題看似很簡單,絕大部分計算機專業的畢業生都能用十行以內的程式碼實現最基本的功能。可是在實際面試過程中, 十個應聘者中只有一個人能通過這道題的面試,因為絕大部分應聘者不能全面考慮到各種特殊輸入,比如輸入的字串含中有非數字的符號、在字串的開頭有正負 號、字串中有正負號但其位置不是在字串的開頭。

  除此之外,面試官還希望應聘者能考慮的邊界條件包括2147483647(0x7FFFFFFF,int能表示的最大正整數)和-2147483648(0×80000000,int能表示的最小負整數)。

   除了邊界條件和特殊輸入考慮不足之外,面試官還有一個不能容忍的錯誤就是程式崩潰。面試時很多應聘者都會忘記對空指標做特殊處理而導致程式崩潰。如果面 試時遇到連結串列、二叉樹相關的題目,應聘者一定要特別小心。因為這兩種題目對應的程式碼裡通常會有大量的指標操作,如果考慮不周到,就有可能對空指標進行操作 而使程式崩潰。

  比如這樣一道題:輸入一個連結串列的頭指標和一個無符號整數k,輸出該連結串列的倒數第k個結點。這個題目很多人都能想到用兩 個指標來解決:第一個指標先在連結串列上移動k-1步,同時讓第一個指標和第二個指標在連結串列上移動。當第一個指標移動到尾指標時,第二個指標指向的就是倒數第 k個結點。然而不是每個應聘者都能根據正確思路寫出完整的程式碼。不少應聘者會忽略兩種可能:一是輸入的連結串列頭指標有可能是空指標;二是連結串列上結點的數目有 可能少於k個。忽略這兩點的程式碼都存在崩潰的可能,從而很難獲得面試官的青睞。

  要想寫出魯棒的高質量程式碼,需要在動手寫程式碼之前想好 測試用例。在寫程式碼之前,先要想好各種邊界條件和特殊輸入作為測試用例。當程式碼寫好之後,自己在心裡用之前想好的測試用例來檢驗自己寫出的程式碼,這樣就能 在面試官之前發現並解決問題。以求連結串列的倒數第k個結點為例,如果事先想到了輸入頭指標為空指標和連結串列上的結點總數少於k這兩個測試用例,並且在寫好程式碼 之後在心裡模擬程式碼的執行過程,確保能夠通過這兩個測試用例的測試,那麼這輪面試必然是能夠通過的。

  清晰的思路

   只有思路清晰,應聘者才有可能在面試過程中解決複雜的問題。有時面試官會有意出一些比較複雜的問題,以考查能否在短時間內形成清晰的思路並解決問題。對於 確實很複雜的問題,面試官甚至不期待應聘者能在面試不到一個小時的時間裡給出完整的答案,他更看重的可能還是應聘者是否有清晰的思路。面試官通常不會喜歡 應聘者在沒有形成清晰思路之前就草率地開始寫程式碼,結果寫出來的程式碼容易邏輯混亂、錯誤百出。

  應聘者可以用幾個簡單的方法幫助自己形成清晰的思路。

  首先是舉幾個簡單的具體例子讓自己理解問題。當一眼看不出問題中隱藏的規律時,可以試著用1~2個具體的例子模擬操作的過程,這樣說不定就能通過具體的例子找到抽象的規律。

  其次可以試著用圖形表示抽象的資料結構。像分析與連結串列、二叉樹相關的題目時,可以畫出它們的結構圖來簡化題目。

  最後可以試著把複雜的問題分解成若干個簡單的子問題,再一一解決。很多基於遞迴的思路,包括分治法和動態規劃法,都是把複雜的問題分解成一個或者多個簡單的子問題。

   比如把二叉搜尋樹轉化排序的雙向連結串列這個問題就很複雜。碰到這個問題,不妨先畫出1~2個具體的二叉搜尋樹及其對應的排序雙向連結串列,直觀地感受二叉搜尋 樹和排序的雙向連結串列有哪些聯絡。如果一下子找不出轉換的規律,可以把整個二叉樹看出三部分:根結點、左子樹和右子樹。當遞迴地把轉換左右子樹這兩個子問題 解決之後,再把轉換左右子樹得到的連結串列和根結點連結起來,整個問題也就解決了。

  優化程式碼的能力

  優秀的程式設計師對時間和空間的消耗錙銖必較,他們很有激情不斷優化自己的程式碼。當面試官出的題目有多種解法時,通常他會期待應聘者最終能夠找到最優解。這就要求應聘者在面試官提示還有更好的解法時,不能放棄思考,而應該努力尋找在時間消耗或者空間消耗上可以優化的地方。

   要想優化時間或者空間效率,首先要知道如何分析效率。即使是同一個演算法,用不同方法實現的效率可能也會大不相同,要能夠分析出演算法及其程式碼實現的效率。 例如求斐波那契數列,很多人喜歡用遞迴公式f(n)=f(n-1)+f(n-2)求解。如果分析它的遞迴呼叫樹,就會發現有大量的計算是重複的,時間效率 是以n的指數增加。但如果先求f(1)、f(2),再根據f(1)和f(2)求出f(3),接下來根據f(2)、f(3)求出f(4),並以此類推用一個 迴圈求出f(n),這種計算方法的時間效率就只有O(n),比前面遞迴的方法要好很多。

  要想優化程式碼的效率,還要熟知各種資料結構的 優缺點,並能選擇合適的資料結構解決問題。我們在陣列中根據下標可以用O(1)完成查詢。陣列的這個特徵可以用來實現簡單的雜湊表解決很多面試題,比如在 字串中找到第一個只出現一次的字元。再比如為了找出n個數字中最小的k個數,需要一個資料容器來儲存k個數字。在這個資料容器中,我們希望能夠快速地找 到最大值並且能快速地替換其中的數字。經過權衡,我們發現二叉樹比如最大堆或者紅黑樹都是實現這個資料容器的理想選擇。

  要想優化程式碼 的效率,也要熟練掌握常用的演算法。面試中最常用的演算法是查詢和排序。如果從頭到尾順序掃描一個陣列,需要O(n)時間才能完成查詢操作。但如果陣列是排序 的,應用二分查詢演算法就能把時間複雜度降低到O(logn)。排序演算法除了能夠給陣列排序之外,還能用來解決其他問題。比如快速排序演算法中的 Partition函式能夠用來在n個數裡查詢第k大的數字,從而可以用O(n)的時間在陣列中找到出現次數超過陣列長度一半的數字。如果面試題是一個求 最大值或者最小值的題目,則可以嘗試用動態規劃法或者貪婪演算法,比如用動態規劃法求出陣列中連續子陣列的最大和。

  優秀的綜合能力

   在面試過程中,應聘者除了展示自己的程式設計能力和技術功底之外,還需要展示自己的軟技能,諸如溝通能力和學習能力。隨著軟體系統的規模越來越大,軟體開發 已經告別了單打獨鬥的年代,程式設計師與他人的溝通變得越來越重要。在面試過程中,面試官會觀察應聘者在介紹專案經驗或者演算法思路時是否觀點明確、邏輯清晰, 並以此判斷他溝通能力的強弱。另外,面試官也會從應聘者說話的神態和語氣來判斷他是否有團隊合作的意識。通常面試官不會喜歡高傲或者輕視合作者的人。

   IT行業知識更新很快,因此程式設計師只有具備很好的學習能力才能跟上知識更替的步伐。通常面試官有兩種辦法考查應聘者的學習能力。第一種方法是詢問應聘者 最近在看什麼書、從中學到了哪些新技術。面試官可以用這個問題了解應聘者的學習願望和學習能力。第二種方法是丟擲一個新概念,接下來他會觀察應聘者能不能 在較短時間內理解這個新概念並解決相關的問題。比如面試官要求應聘者計算第1500個醜數。很多人都沒有聽說過醜數這個概念。這時面試官就會觀察應聘者面 對醜數這個新概念,能不能經過提問、思考、再提問的過程,最終找出醜數的規律從而找到解決方案。

  知識遷移能力是一種特殊的學習能力。 如果我們能夠把已經掌握的知識遷移到其他領域,那麼學習新技術或者解決新問題就會變得容易。面試官經常會先問一個簡單的問題,再問一個很複雜但和前面的簡 單問題相關的問題。這時面試官期待應聘者能夠從簡單問題中得到啟示,從而找到解決複雜問題的竅門。比如面試官先要求應聘者寫一個函式求斐波那契數列,再問 一個青蛙跳臺階的問題:一隻青蛙一次可以跳上1級臺階,也可以跳上2級臺階,請問這隻青蛙跳上n級的臺階總共有多少種跳法?應聘者如果具有較強的知識遷移 能力,就能分析出青蛙跳臺階問題實質上只是斐波那契數列的一個應用。

  還有不少面試官喜歡考查應聘者的抽象建模能力和發散思維能力。面 試官從日常生活中提煉出問題,比如如何判斷5張撲克牌是不是順子,考查應聘者能不能把問題抽象出來用合理的資料結構表示,並找到其中的規律解決這個問題。 面試官也可以限制應聘者不得使用常規方法,這要求應聘者具備創新精神,能夠開啟思路從多角度去分析、解決問題。比如面試官要求應聘者不用加減乘除四則運算 實現兩個整數的加法。此時面試官期待應聘者能夠開啟思路,用位運算實現整數的加法。

 

 

鄭盛霞

回覆 5 樓 2015-08-04

   IT公司AS3面試題

  1.談談你對MVC的理解??

  答:MVC就是 模型、檢視 、控制器 的縮寫,檢視和使用者互動 通過事件導致控制器改變 控制器改變導致模型改變 或者控制器同時改變兩者 模型改變導致檢視改變 或者檢視改變 潛在的從模型裡面獲得引數 來改變自己。

  Mvc就是一種模型 ,一種程式設計思想。

  MVC(Model-View-Controller),即把一個應用的輸入、處理、輸出流程按照Model、View、Controller的方式進行分離,這樣一個應用被分成三個層——模型層、檢視層、控制層。

  檢視(View):代表使用者互動介面,MVC設計模式對於檢視的處理是限於檢視上資料的採集和處理,以及使用者的請求,而不包括在檢視上的業務流程的處理。

  模型(Model):業務流程/狀態的處理以及業務規則的制定。業務流程的處理過程對其它層來說是黑箱操作,模型接受檢視請求的資料,並返回最終的處理結果。業務模型的設計可以說是MVC的核心。

  控制(Controller):可以理解為從使用者接收請求, 將模型與檢視匹配在一起,共同完成使用者的請求,但是它卻不做任何的資料處理。

  它的優勢在與:開發人員可以只關注整個結構中的其中某一層,可以很容易的用新的實現來替換原有層次的實現,可以降低層與層之間的依賴,有利於標準化,利於各層邏輯的複用

  2. as3怎樣連線資料庫??

  答:as3 要和資料庫通訊 一般通過第三方語言 比如 jsp/ php /asp/ asp.net 等

  As3通過解析xml裡面的資料和資料庫通訊。

  切換。

  3.瞭解as3與PHP通訊麼?

  答:通過apache軟體(軟體介紹:最流行的HTTP伺服器軟體之一。快速、可靠、可通過簡單的API擴充套件,Perl/Python直譯器可被編譯到伺服器中,完全免費,完全原始碼開放。如果你需要建立一個每天有數百萬人訪問的Web伺服器)

  首先需要兩個檔案 我隨便起一個名字test.php 和 test.fla

  把他們放在apache執行目錄下面

  As程式碼裡面主要用到urlloader、urlrequest、urlvariable等類,用urlrequest.data 屬性和Urlrequest.method等屬性來和php傳引數。

  Php裡面傳送什麼,as就可以接收到什麼,這樣可以實現as3和php的通訊。

  4. 怎麼獲取居中的位置??

  答:mc.x=stage.StageWidth/2

  mc.y=stage.StageHeight/2

  5. 多場景如果互相切換(考慮效率);

  答:通過nextscene()函式

  或者用Loader 載入另外的swf檔案來場景

  6:談談對A*尋路演算法的理解

  答: 一個估價值函式 f(n)=g(n)+h(n)

  g(n)就是當時目標的位置到指定點的位置的一個值

  h(n)就是指定點的位置到目標點的位置的的一個值

  7: as2與as3.的最主要區別是什麼?,以及相互的優缺點

  答:as2和as3最大的區別在於 as2是程式導向的 as3是純物件導向的。As3增加了很多新的東西 比如正規表示式 ,垃圾回收機制,增加了很多error類。

  裡面的函式架構變了很多 頂級函式縮減了很多 as3的架構更合理

  8: 談談你對物件導向的理解

  答:物件導向關鍵是物件,引用一句話“一切事物結物件”;物件有它固有的屬性和方法,

  物件也就是由屬性的集合和方法的集合構成的, 談到物件了,物件是類的一個例項。

  類和物件是物件導向的基礎 類是物件的一個抽象,不是具體的例項, 比如說狗類

  分為很多種,而狗就是一個抽象, 狗有四條腿,兩隻眼睛 等式他的屬性, 狗會吃東西,叫,等式他的方法。這是我理解的物件導向。

  9.你的5(或3)年前景規劃和在5(或3)年後在flash行業要達到的目標(及個人職業規劃)?建議:

  1.儘量選擇有自主產品的公司,而非單純的外包公司。(有自己的產品,代表你可以對你自己的產品進行持續維護和改良,對你自身的程式設計能力是一種持續性的提高)

  2.儘量選擇待成長型的公司,而並非公司越大越好。(成長型的公司往往產品更有創意,開發成本更小,效率更高,有利於你在短時間內積累更多的作品)

  3.儘量遠離廣告製作公司。

  10什麼是OOP? OOP有那些特徵簡要說明?

  OOP: Object OrientedProgramming,物件導向的程式設計

  特徵:抽象,多型,封裝,繼承

  12.請說下你理解AS3的事件機制是什麼機制?你認為正確的就可以說出來.

  答:從應用程式到最外層的容器在到容器裡的元件或容器遍歷註冊的事件,然後按照原路返回冒泡響應事件

  AS3事件流分三個階段:

  1.捕獲階段 (即由根節點流向子節點,檢測每個節點是否註冊了監聽器)

  2.目標階段 (激發在目標物件本身註冊的監聽程式)

  3.冒泡階段 (從目標節點到根節點,檢測每個節點是否註冊了監聽器)

  當中涉及了兩個屬性target和currentTarget,target是事件的派發者,currentTarget是正在檢測的物件,當開始了事件流,事件的currentTarget屬性處於不斷變化中.

  PS:註冊事件時捕獲階段預設是關閉的,無論事件是否開啟了捕獲,事件流只會兩選一去執行

  13.說說就你所知道的用flash做網站建設的優缺點

  優點:全面的控制、無縫的導向跳轉、更豐富的媒體內容、更體貼使用者的流暢互動、跨平臺和瘦客戶端的支援、以及與其它Flash應用方案無縫連線整合等

  限制:受頻寬與下載時間的限,下載速度有時候很慢;受搜尋引擎的限制,現在大部分的搜尋引擎搜多不到Flash站點資訊,但是google搜尋引擎已經解決了這個問題。

  15.as3.0垃圾回收器是如何工作的?

   flash player 8之前採用的是引用計數法,在flash player 8 之後用的是標記法,簡單的說就是:從應用的根節點開始,遍歷所有其上的引用,標記每個它所發現的物件。然後迭代遍歷每個被標記的物件,標記它們的子物件。 這個過程第歸進行,直到Player遍歷了應用的整個物件樹並標記了它所發現的每個東西。在這個過程技術的時候,可以安全地認為,記憶體中那些沒有被打標記 的物件沒有任何活動引用,因此可以被安全地釋放記憶體。一般來說,flash player採用的是一種低頻的垃圾回收機制,Flash Player的垃圾回收發生在FlashPlayer需要另外請求記憶體之前。但並不是每次應用申請記憶體時都會導致垃圾回收的執行,只有當Flash佔用的 記憶體緊張到一定程度時才會執行真正的垃圾回收,一定程度上取決於客戶端計算機的實體記憶體的大小。

  16.什麼是遊戲引擎和對他的認識?

  答:是指應用通常遊戲設計的模型構建一個“平臺“,能夠

  方便的支援遊戲開發後續的工作 引擎就是“用於控制所有遊戲功能的主程式,從計算碰撞、物理系統和物體的相對位置,到接受玩家的輸入,以及按照正確的音量輸出聲音等等

  17. flash與flex是如何協調開發的?

   這個問題可以這樣來理解,如果是確實需要用到FLEX SDK的應用,那我們就可以建立一個flex工程,具體需要flash做UI的時候,輸出成swc作為flex的skin,如果說並不需要flex sdk,只是為了編碼方便而選擇flex的話,那我們只要建立一個as工程,讓flex作為flash的編碼器。

  18.使用Flex Bulider3建立一下新的.mxml的頁面時預設的背景是藍色的,請問用什麼辦法能修改掉此背景顏色,以至於下次建立時背景不是為預設的藍色的呢?請寫出你認為正確的方法.

  答:修改sdk\frameworks\projects\framework\default.css裡Application的backgroundColor: #0000FF;

  19.flex的開發框架有哪些,它們有什麼優缺點?

   答: 最常見的當然是Cairngorm、Puremvc了,此外還有Mate,Swiz等等,據說被廣泛應用的已經有10幾款了。Cairngorm作為 Adobe官方出品,有著貴族血統的它比較全面,是這些框架中已知bug最少的,但是基於他的應用相對臃腫複雜一些,需要對每個可以被觸發的事件寫一個對 應的Command,編碼量巨大,並且單元測試很不容易,不適合敏捷開發。Puremvc應該是現在用的最多的as框架了。比較完善、並且與 Cairngorm相比,更適合中小型應用的開發,它與Cairngorm一樣,也是以MVC模式為中心,並以Fa?0?4ade作為中央儲存器的單件類 的形式進行開發的。說下Mate,它是一個比較奇怪的框架,是基於標籤的事件驅動型的。也就是說你不能再隨意的寫as類的,在使用Mate的情況下,只能 用MXML來做這些事情。Swiz是Mate的孿生兄弟,長的挺像,沒具體用過,不大瞭解。

  11.使用Flex Bulider3如何跟蹤程式?

   答:我知道的三種1.trace() 2.設定斷點 3.當不在除錯模式時可以呼叫as的Alert.show()或js的alert() 如:navigateToURL(new URLRequest(“javascript:alert(traceMsg)”),”_self”);

  20.在flex開發中,很多程式碼都寫在mxml檔案裡,為了做到mvc模式,你是怎麼處理的。

   我認為mxml並不影響mvc模式啊。分兩種情況來討論,首先,是自己建立整個應用結構的時候,那我們可以手動將UI所在的mxml歸為一類,然後由 Mediator去操作或者說控制這些元件既可了,然後Mediator又統一交給Controller去操作。如果採用其他框架來進行開發的話,那就更 不用來考慮這個問題了,像Cairngorm、Puremvc之類的框架已經很好的為我們解決了這些問題。只要按照它們的使用規範來進行開發,自然沒有問 題。

 

 

範發可

回覆 6 樓 2015-08-04

 訪問控制程式碼:

  class Foo

  {

  private $name = hdj;

  public function getName(){

  return $this->name;

  }

  }

  class Bar extends Foo

  {

  public $name = deeka;

  }

  $bar = new Bar;

  var_dump($bar->name);

 

  var_dump($bar->getName());

 

 

史君昌

回覆 7 樓 2015-08-04

   小演算法總結:

  //列印一個三角形

  for($i=0;$i<=3;$i++)

  {

  for($j=0;$j<=3-$i;$j++){

  echo ‘ ’;

  }

  for($k=0;$k<=2*$i;$k++)

  {

  echo “*”;

  }

  echo ‘

  ’;

  }

  ?>

  //楊輝三角

  for($i=0;$i<6;$i++)

  {

  //第一個和最後一個都為1

  $a[$i][0]=1;

  $a[$i][$i]=1;

  }

  for($i=2;$i<6;$i++){

  for($j=1;$j<$i;$j++)

  {

  $a[$i][$j]=$a[$i-1][$i-1]+$a[$i-1][$j];

  }

  }

  for($i=0;$i<6;$i++)

  {

  for($j=0;$j<=$i;$j++){

  echo $a[$i][$j].’ ’;

  }

  echo ‘

  ’;

  }

  ?>

  //合併多個陣列

  function t(){

  $c=func_num_args()-1;//返回傳遞給函式的引數個數

  $a=func_get_args();//返回一個陣列,包括函式的引數列表

  for($i=0;$i<=$c;$i++){

  if(is_array($a[$i])){

  for($j=0;$j

  $r[]=$a[$i][$j];

  }

  }else{

  die(‘Not a array’);

  }

  }

  return $r;

  }

  print_r(t(range(1,4),range(1,4),range(1,4)));

  ?>

  //求牛

  function cow($num,$y)

  {

  for($j=1;$j<$y;$j++)

  {

  if($j>=4 && $j<15)

  {

  $num++;

  cow($num,$y-$j);

  }

  if($j==20)

  $num–;

  }

  return $num;

  }

  echo cow(2,2);

  ?>

  //順序查詢(陣列裡查詢某個元素)

  function seq_sch($array,$n,$k)//在某個位置之前查詢某元素(不包括指定位置)

  {

  $array[$n]=$k;

  for($i=0;$i<$n;$i++)

  {

  if($array[$i]==$k)

  break;

  }

  if($i<$n)

  return $i;

  else

  return -1;

  }

  $array=array(‘a’,b’,c’);

  echo seq_sch($array,2,’b);

  ?>

  function show($i)

  {

  if($i==1)

  return 1;

  else

  return $i*show($i-1);

  }

  echo “

  ”;

  echo show(3);

  ?>

  //裴波那挈數列

  function b($n)

  {

  if($n<2)

  return $n;

  else

  return b($n-1)+show($n-2);

  }

  echo b(2);

  ?>

轉載於:https://www.cnblogs.com/zhqBlog/p/6005499.html

相關文章