一道新浪的 PHP 面試題,代碼輸出是否跟運行環境相關?

來源:互聯網
上載者:User
關鍵字 aaa include print Exception MySQL
寫出以下代碼的輸出:

try {
include_once "aaa";
print "aaa";
} catch (Exception $e) {
print 'dddd';
}
我的回答是:如果 include_path 中包含有 aaa 為檔案名稱的檔案,則代碼輸出 aaa。 否則輸出 ddd。

面試官對我的回答提出質疑:代碼就是代碼,只有可能有一種輸出結果。

我對面試管的追問回覆:
你可以認為我這道題答錯了。

從這道題以後面試官(一面)對我的技術能力持懷疑態度。後面的 MySQL char(2) 能儲存幾個中文字元,由於學藝不精沒有答上來。後來二面直接讓我在待遇和機遇中做權衡。

回複內容:

首先面試不一定要回答出abc才是正確的...
最主要的是一次思考的過程,對於很多知識點舉一反三的能力...
第一題:考的是include 和 require的區別
include 包含不存在的檔案,只會拋出warning,require 包含不存在的檔案會報fatal error
所以該題無論如何都會輸出ddd 因為不會報錯,所以不會拋出異常...
反之如果是require包含,如果aaa檔案不存在則會拋出異常,跳轉到catach代碼塊,否則輸出ddd

第二題:考的是對中文按位元組如何儲存,char 儲存的位元組
utf-8下 每個中文對應3個位元組,char(2) 代表該行該列儲存暫用2個位元組(無論存幾個字元)
所以1個都辦法儲存...

如果你能這樣回答,並舉一反三的話,面試官一定會看好你哦~

latin1:

1character=1byte, 1漢字=2character(字元),

也就是說一個欄位定義成 varchar(200),則它可以儲存100個漢字或者200個字母。

這一點要注意,尤其是當欄位內容是字母和漢字組成時,盡量假設欄位內容都是由漢字組成,據此來設定欄位長度

utf8:

1character=3bytes, 1漢字=1character(字元)

也就是說一個欄位定義成 varchar(200),則它可以儲存200個漢字或者200個字母。

gbk:

1character=2bytes,1漢字=1character(字元)

也就是說一個欄位定義成 varchar(200),則它可以儲存200個漢字或者200個字母。第一題經過測試 Warning之後輸出 aaa 如果換成require 也只是到Fatal error: require() [function.require]: Failed opening required 'aaa' 。。。然後什麼都不會再輸出了,也不拋出異常
第二題 經過測試可以儲存2個中文字元
CREATE TABLE `testchar` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`aa` char(2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `testchar` VALUES ('1', '啊');
INSERT INTO `testchar` VALUES ('2', '啊啊');
INSERT INTO `testchar` VALUES ('3', '啊啊啊');剛才在本機做了一下測試,當 include_path 中沒有找到 aaa 為檔案名稱的檔案時,該代碼會有 Warning 層級的錯誤提示:failed to open stream ....。而當include_path 中存在該檔案時,代碼會輸出"aaa".

我認為這道題實際是考察 include_once 的報錯會無視 try catch 語句這個知識點。我學藝不精,回答只答對了一半。那麼面試官的追問:代碼只有可能有一種輸出的觀點是否正確呢?
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.