php面試題之PHP核心技術

来源:https://www.cnblogs.com/a609251438/archive/2019/12/27/12109629.html
-Advertisement-
Play Games

一、PHP核心技術 更多PHP相關知識請關註我的專欄PHP​zhuanlan.zhihu.com 1.寫出一個能創建多級目錄的PHP函數(新浪網技術部) <?php /** * 創建多級目錄 * @param $path string 要創建的目錄 * @param $mode int 創建目錄的模 ...


一、PHP核心技術

更多PHP相關知識請關註我的專欄PHP​zhuanlan.zhihu.com

1.寫出一個能創建多級目錄的PHP函數(新浪網技術部)

<?php

    /**

     * 創建多級目錄

     * @param $path string 要創建的目錄

     * @param $mode int 創建目錄的模式,在windows下可忽略

     */

    function create_dir($path,$mode = 0777)

    {

        if (is_dir($path)) {

            # 如果目錄已經存在,則不創建

            echo "該目錄已經存在";

        } else {

            # 不存在,創建

            if (mkdir($path,$mode,true)) {

                echo "創建目錄成功";

            } else {

                echo "創建目錄失敗";

            }

        }

    }

?>

 

2.寫出smarty模板的特點(新浪網技術部)

速度快,編譯型,緩存技術,插件機制,強大的表現邏輯

3.打開php.ini中的safe_mode,會影響哪些函數?至少說出6個。(新浪)

safe_mode,PHP安全模式,它提供一個基本安全的共用環境,在一個有多個用戶賬戶存在的php開發的web伺服器上。當安全模式打開的時候,一些函數將被完全的禁止,而另一些函數的功能將會受到限制,如:chdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,mkdir,unlink等。
註意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性完全去除了。

4.抓取遠程圖片到本地,你會用什麼函數?(筆試題)

file_get_contents或者curl

5.PHP的垃圾收集機制是怎樣的(騰訊)

PHP可以自動進行記憶體管理,清除不再需要的對象。
PHP使用了引用計數(reference counting)這種單純的垃圾回收(garbage collection)機制。每個對象都內含一個引用計數器,每個reference連接到對象,計數器加1。當reference離開生存空間或被設為NULL,計數器減1。當某個對象的引用計數器為零時,PHP知道你將不再需要使用這個對象,釋放其所占的記憶體空間。

6.請寫一段PHP代碼,確保多個進程同時寫入同一個文件成功(騰訊)

核心思路:加鎖

<?php

    $fp = fopen("lock.txt","w+");

    if (flock($fp,LOCK_EX)) {

        //獲得寫鎖,寫數據

        fwrite($fp, "write something");

  

        // 解除鎖定

        flock($fp, LOCK_UN);

    } else {

        echo "file is locking...";

    }

    fclose($fp);

?>

 

7.寫一個函數,儘可能高效的,從一個標準url里取出文件的擴展名,例如:

http://www.sina.com.cn/abc/de/fg.php?id=1需要取出php或.php(新浪)

<?php

    // 方案一

    function getExt1($url){

        $arr = parse_url($url);

        //Array ( [scheme] => http [host] => www.sina.com.cn [path] => /abc/de/fg.php [query] => id=1 )

  

        $file = basename($arr['path']);

        $ext = explode('.', $file);

        return $ext[count($ext)-1];

    }

  

    // 方案二

    function getExt2($url){

        $url = basename($url);

        $pos1 = strpos($url,'.');

        $pos2 = strpos($url,'?');

  

        if (strstr($url,'?')) {

            return substr($url,$pos1+1,$pos2-$pos1-1);

        } else {

            return substr($url,$pos1);

        }

  

    }

  

    $path = "http://www.sina.com.cn/abc/de/fg.php?id=1";

    echo getExt1($path);

    echo "<br />";

    echo getExt2($path);

?>

 

相關題目:使用五種以上方式獲取一個文件的擴展名,要求:dir/upload.image.jpg,找出.jpg或者jpg,必須使用PHP自帶的處理函數進行處理,方法不能明顯重覆,可以封裝成函數,比如get_ext1(file_name)

8.寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。(新浪)

<?php

    function my_scandir($dir){

        $files = array();

        if(is_dir($dir)){

            if ($handle = opendir($dir)) {

                while (($flie = readdir($handle))!== false) {

                    if ($flie!="." && $file!="..") {

                        if (is_dir($dir."/".$file)) {

                            $files[$file] = my_scandir($dir."/".$file);

                        } else {

                            $files[] = $dir."/".$file;

                        }

                    }

                }

                closedir($handle);

                return $files;

            }

        }

    }

?>

 

9.簡述論壇中無限分類的實現原理。(新浪)

創建類別表如下:

CREATE TABLE category(

cat_id smallint unsigned not null auto_increment primary key comment'類別ID',

cat_name VARCHAR(30)NOT NULL DEFAULT''COMMENT'類別名稱',

parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT'類別父ID'

)engine=MyISAM charset=utf8;

 

編寫一個函數,遞歸遍歷,實現無限分類

<?php

    function tree($arr,$pid=0,$level=0){

        static $list = array();

        foreach ($arr as $v) {

            //如果是頂級分類,則將其存到$list中,並以此節點為根節點,遍歷其子節點

            if ($v['parent_id'] == $pid) {

                $v['level'] = $level;

                $list[] = $v;

                tree($arr,$v['cat_id'],$level+1);

            }

        }

        return $list;

    }

?>

  

10.寫一個函數,算出兩個文件的相對路徑,如b='/a/b/12/34/c.php';計算出a的相對路徑應該是../../c/d(新浪)

<?php

    function releative_path($path1,$path2){

        $arr1 = explode("/",dirname($path1));

        $arr2 = explode("/",dirname($path2));

  

        for ($i=0,$len = count($arr2); $i < $len; $i++) {

            if ($arr1[$i]!=$arr2[$i]) {

                break;

            }

        }

  

        // 不在同一個根目錄下

        if ($i==1) {

            $return_path = array();

        }

  

        // 在同一個根目錄下

        if ($i != 1 && $i < $len) {

            $return_path = array_fill(0, $len - $i,"..");

        }

  

        // 在同一個目錄下

        if ($i == $len) {

            $return_path = array('./');

        }

  

        $return_path = array_merge($return_path,array_slice($arr1,$i));

        return implode('/',$return_path);

    }

  

    $a = '/a/b/c/d/e.php';

    $b = '/a/b/12/34/c.php';

    $c = '/e/b/c/d/f.php';

    $d = '/a/b/c/d/g.php';

  

    echo releative_path($a,$b);//結果是../../c/d

    echo "<br />";

    echo releative_path($a,$c);//結果是a/b/c/d

    echo "<br />";

    echo releative_path($a,$d);//結果是./

    echo "<br />";

?>

 

11.mysql_fetch_row()和mysql_fetch_array()有什麼分別?

mysql_fetch_row()把資料庫的一列儲存在一個以零為基數的數組中,第一欄在數組的索引0,第二欄在索引1,依此類推。
mysql_fetch_assoc()把資料庫的一列儲存在一個關聯數組中,數組的索引就是欄位名稱,例如我的資料庫查詢送回“first_name”、“last_name”、“email”三個欄位,數組的索引便是“first_name”、“last_name”和“email”。
mysql_fetch_array()可以同時送回mysql_fetch_row()和mysql_fetch_assoc()的值。

12.有一個網頁地址,比如PHP開發資源網主頁:,如何得到它的內容?

方法1(對於PHP5及更高版本):

$readcontents=fopen("http://www.phpres.com/index.html","rb");

$contents=stream_get_contents($readcontents);

fclose($readcontents);

echo $contents;

 

方法2:
echo file_get_contents("http://www.phpres.com/index.html");

 

13.談談對mvc的認識

由模型(model),視圖(view),控制器(controller)完成的應用程式。
model層負責提供數據,和資料庫有關的操作都交給模型層來處理,view層則提供交互的界面,並輸出數據,而controller層則負責接收請求,並分發給相應的model來處理,然後調用view層來顯示。

14.What does the GD library do?(Yahoo)

GD庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。自從PHP 4.3.0版本後GD便內建在PHP系統中。

15.What function can you use to open a file for reading and writing?(Yahoo)

A.fget();
B.file_open();
C.fopen();
D.open_file();
答案:C
fget()這不是一個PHP函數,會引致執行錯誤。
file_open()這不是一個PHP函數,會引致執行錯誤。
fopen()這是正確答案,fopen()可以用來開啟檔案以便讀寫。
open_file()這不是一個PHP函數,會引致執行錯誤。

16.Smarty的原理

smarty是一個模板引擎,使用smarty主要是為了實現邏輯和外在內容的分離,如果不使用模板的話,通常的做法就是php代碼和html代碼混編。使用了模板之後,則可以將業務邏輯都放到php文件中,而負責顯示內容的模板則放到html文件中。
Smarty在執行display方法的時候,讀取模板文件,併進行數據替換,生成編譯文件,之後每次訪問都會直接訪問編譯文件,讀取編譯文件省去了讀取模板文件,和字元串替換的時間,所以可以更快,編譯文件里時間戳記錄模板文件修改時間,如果模板被修改過就可以檢測到,然後重新編譯(編譯是把靜態內容保存起來,動態內容根據傳入的參數不同而不同)。
如果啟用了緩存,則會根據編譯文件生成緩存文件,在訪問的時候如果有緩存文件並且緩存文件沒有過期,則直接訪問緩存文件。

相關題目1:能夠使HTML和PHP分離開使用的模板

smarty,phplib等

相關題目2:您是否用過模板引擎?如果有您用的模板引擎的名字是?

Smarty

17.PHP如何實現頁面跳轉

方法一:php函數跳轉,缺點,header頭之前不能有輸出,跳轉後的程式繼續執行,可用exit中斷執行後面的程式。
header("Location:網址");//直接跳轉
header("refresh:3;url=");//三秒後跳轉

方法二:利用meta
echo"<meta http-equiv=refresh content='0;url=網址'>";

18.PHP可以和sql server/oracle等資料庫連接嗎?

可以

19.使用哪些工具進行版本控制?

SVN或者CVS

相關題目:您是否用過版本控制軟體?如果有您用的版本控制軟體的名字是?

TortoiseSVN-1.2.6

20.寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):

過濾JavaScript腳本參考:

<?php

    header("content-type:text/html;charset=utf-8");

  

    $script = "以下內容不顯示:<script type='text/javascript'>alert('cc');</script>";

    $pattern = '/<script[^>]*?>.*?</script>/si';

  

    echo preg_replace($pattern, "腳本內容", $script);//以下內容不顯示:腳本內容

?>

 

21.給定一行文本$string,如何編寫一個正則表達式來去掉所有的HTML標記?

方案一,使用PHP內建函數strip_tags()除去HTML標簽

方案二,自定義函數,如下:

<?php

    header("content-type:text/html;charset=utf-8");

  

    function strip_html_tags($str){

        $pattern = '/<("[^"]*"|\'[^\']\*\'|[^>"\'])*>/';

        return preg_replace($pattern,'',$str);

    }

  

    // 實例

    $html = '<p id="">ddddd<br /></p>';

    echo strip_html_tags($html);

    echo "<br />";

  

    $html = '<p id=">">bb<br />aaa<br /></p>';

    echo strip_html_tags($html);

?>

 

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

preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/',$email);

相關題目:請用正則表達式寫一個函數,驗證電子郵件的格式是否正確。(鑫眾人雲)

23.請對POSIX風格和相容Perl風格兩種正則表達式的主要函數進行類比說明(騰訊)

主要區別有以下三種:

preg_replace()裡面的正則可以寫成型如:"/.xxx/"而ereg_replace()裡面的正則需寫成型如 "xxx"

preg_replace()能操作數組,而ereg_replace()不可以

在逆向引用用preg_replace()可使用0-99個,而ereg_replace()最多為9個

使用Perl相容正則表達式語法的preg_match()函數通常是比ereg()更快的替代方案。

24.請寫出並說明如何在命令行下運行PHP腳本(寫出兩種方式)同時向PHP腳本傳遞參數?(騰訊)

首先進入php安裝目錄
php -f d:/wamp/www/1.php 其中-f參數指定要執行的php文件
php -r phpinfo(); 其中-r表示直接執行php代碼,無需寫開始結束標記

25.使用正則表達式提取一段標識語言(html或xml)代碼段中指定標簽的指定屬性值(需考慮屬性值對不規則的情況,如大小寫不敏感,屬性名值與等號間有空格等)。此處假設需提取test標簽的attr屬性值,請自行構建包含該標簽的串(騰訊)

編寫如下函數:

<?php

    header("content-type:text/html;charset=utf-8");

  

    function getAttrValue($str,$tagName,$attrName){

        $pattern1="/<".$tagName."(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\2))*\\s+".$attrName."\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";

  

        $arr=array();

        $re=preg_match($pattern1,$str,$arr);

  

        if($re){

            echo"<br/>\$arr[6]={$arr[6]}";

        }else{

            echo"<br/>沒找到。";

        }

    }

  

    // 示例

    $str1="<test attr='ddd'>";

    getAttrValue($str1,"test","attr");//找test標簽中attr屬性的值,結果為ddd

    $str2="<test2 attr='ddd'attr2='ddd2't1=\"t1 value\"t2='t2 value'>";

    getAttrValue($str2,"test2","t1");//找test2標簽中t1屬性的值,結果為t1 value

?>

 

26.What does the following code do?Explain what's going on there.date);(Yahoo)

這是把一個日期從MM/DD/YYYY的格式轉為DD/MM/YYYY格式。
輸出26/08/2003

27.What function would you use to redirect the browser to a new page?(Yahoo)

A.redir()
B.header()
C.location()
D.redirect()
答案:B
redir()這不是一個PHP函數,會引致執行錯誤。
header()這個是正確答案,header()函數發送頭信息,可以用來使瀏覽器轉向到另一個頁面,例如:header("Location:")。
location()這不是一個PHP函數,會引致執行錯誤。
redirect()這不是一個PHP函數,會引致執行錯誤。

28.When turned on____________will_________your script with different variables from
HTML forms and cookies.(騰訊)
A.show_errors,enable
B.show_errors,show
C.register_globals,enhance
D.register_globals,inject
答案:C

29.一個函數的參數不能是對變數的引用,除非在php.ini中把____設為on。
allow_call_time_pass_reference
是否啟用在函數調用時強制參數被按照引用傳遞

30.在HTML語言中,頁面頭部的meta標記可以用來輸出文件的編碼格式,以下是一個標準的meta語句<META http-equiv='Content-Type'content='text/html;charset=gbk'>,請使用PHP語言寫一個函數,把一個標準HTML頁面���的類似meta標記中的charset部分值改為big5。(新浪)

請註意:
(1)需要處理完整的html頁面,即不光此meta語句
(2)忽略大小寫
(3)'和"在此處是可以互換的
(4)'Content-Type'兩側的引號是可以忽略的,但'text/html;charset=gbk'兩側的不行
(5)註意處理多餘空格
編寫正則表達式如下:
$reg1="/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";

31.PHP中如何判斷一個字元串是否是合法的日期模式:2007-03-13 13:13:13。要求代碼不超過5行。(酷訊)

<?php

    function checkDateTime($data){

        if (date('Y-m-d H:i:s',strtotime($data)) == $data) {

            return true;

        } else {

            return false;

        }

    }

  

    // 示例

    $data = '2015-06-20 13:35:42';

    var_dump(checkDateTime($data));//bool(true)

  

    $data = '2015-06-36 13:35:42';

    var_dump(checkDateTime($data));//bool(false)

?>

 

32.PHP中,如何獲得一個數組的鍵值?(酷訊)

使用key()可以獲得數組中當前元素的鍵名,使用current()則可以返回當前元素的值。
使用array_keys()則可以得到數組中所有的鍵名。
使用foreach結構foreach($arr as value)可以通過value分別獲取鍵名和值。

33.如果模板是用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語句:

<{section name=test loop=$data start=0 step=1}>

id:<{$data[test].id}><br/>

name:<{$data[test].name}><br/><br/>

<{sectionelse}>

數組為空

<{/section}>

 

用foreach語句:

<{foreach from=$data item=test}>

id:<{$test.id}><br/>

name:<{$test.name}><br/><br/>

<{foreachelse}>

數組為空

<{/foreach}>

 

34.哪個選項會匹配下邊的這個正則表達式?(/.*xyz\d/)
A.*****xyz

B.*****xyz1
C.******xyz2
D.*xyz
答案:C

35.以下哪個錯誤無法被標準的錯誤控制器獲取?

A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
答案:B

36.以下哪種錯誤類型無法被自定義的錯誤處理器捕捉到?(奇矩互動)

A.E_WARNING
B.E_USER_ERROR
C.E_PARSE
D.E_NOTICE
答案:C

37.(^\s)|(\s$)這個正則表達式作用是:__________;

匹配以0個或多個空白符開頭或者0個或多個空白符結尾的字元串

38.編寫函數取得上一月的最後一天

<?php

    date_default_timezone_set('PRC');

  

    /**

     * 獲取給定月份的上一月最後一天

     * @param $date string 給定日期

     * @return string 上一月最後一天

     */

    function get_last_month_last_day($date = ''){

        if ($date != '') {

            $time = strtotime($date);

        } else {

            $time = time();

        }

        $day = date('j',$time);//獲取該日期是當前月的第幾天

        return date('Y-m-d',strtotime("-{$day} days",$time));

    }

  

    // 測試

    echo get_last_month_last_day();

    echo "<br />";

    echo get_last_month_last_day("2013-3-21");

?>

 

39.在很多時候,我們可以通過apache的主配置文件來設置對test目錄的訪問許可權控制,如請問如果需設置test下的一個子目錄的訪問控制許可權,是否可以在主配置文件中修改,如果不可以應如何解決。

可以,還可以在需要控制的子目錄下創建.htaccess文件,寫入訪問控制。

40.如果我的網站用的utf-8編碼,為防止亂碼出現,都需要註意哪些地方?

從以下幾個方面考慮:

資料庫中庫和表都用utf8編碼

php連接mysql,指定資料庫編碼為utf8 mysql_query(“set names utf8”);

php文件指定頭部編碼為utf-8header(“content-type:text/html;charset=utf-8”);

網站下所有文件的編碼為utf8

html文件指定編碼為utf-8<meta http-equiv="Content-Type"content="text/html;charset=utf-8"/>

41.在url中用get傳值的時候,若中文出現亂碼,應該用哪個函數對中文進行編碼?

urlencode()

42.寫出兩種對變數加密的函數?

md5(str);

43.如何把2009-9-2 10:30:25變成unix時間戳?

<?php

    date_default_timezone_set("PRC");

  

    // 將字元串轉成Unix時間戳

    $unix_time = strtotime("2009-9-2 10:30:45");

    echo $unix_time;

    echo "<br />";

  

    // 格式化Unix時間戳為正常時間格式

    echo date("Y-m-d H:i:s",$unix_time);

?>

 

44.如何把一個GB2312格式的字元串裝換成UTF-8格式?

<?php

    iconv('GB2312','UTF-8','悄悄是別離的笙簫');

?>

 

45.如果需要原樣輸出用戶輸入的內容,在數據入庫前,要用哪個函數處理?

htmlspecialchars或者htmlentities

46.寫出五種以上你使用過的PHP的擴展的名稱(提示:常用的PHP擴展)

mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO等

47.瞭解MVC模式嗎?請寫出三種以上目前PHP流行的MVC框架名稱(不區分大小寫)

FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等

48.php中WEB上傳文件的原理是什麼,如何限制上傳文件的大小?

上傳文件的表單使用post方式,並且要在form中添加enctype='multipart/form-data'。
一般可以加上隱藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。
value的值是上傳文件的客戶端位元組限制。可以避免用戶在花時間等待上傳大文件之後才發現文件過大上傳失敗的麻煩。
使用file文件域來選擇要上傳的文件,當點擊提交按鈕之後,文件會被上傳到伺服器中的臨時目錄,在腳本運行結束時會被銷毀,所以應該在腳本結束之前,將其移動到伺服器上的某個目錄下,可以通過函數move_uploaded_file()來移動臨時文件,要獲取臨時文件的信息,使用$_FILES。

限制上傳文件大小的因素有:

客戶端的隱藏域MAX_FILE_SIZE的數值(可以被繞開)。

伺服器端的upload_max_filesize,post_max_size和memory_limit。這幾項不能夠用腳本來設置。

自定義文件大小限制邏輯。即使伺服器的限制是能自己決定,也會有需要個別考慮的情況。所以這個限制方式經常是必要的。

49.簡述UBB code的實現原理。(YG)

UBB代碼是HTML的一個變種,通過程式自定義我們的標簽,比如“[a]PHP中UBB的使用[/a]”這樣的標簽,其實質就是查找[a][/a]標簽,將其替換成的標準html,說白了,就是將標準的html標記通過技術手段使其簡化,其輸出出來的結果還是標準的html。
明白了ubb的原理,那麼再製作一個簡單的ubb編輯器就不難了,和fck之類的編輯器比較起來,ubb代碼最大的優點就是代碼簡單,功能很少,簡單的ubb只需要一個文件,而且ubb標簽可以自己來定義,更改起來很方便,在php中就是利用替換函數就可以將
html進行標簽化,輸出時進行標簽的轉化。

50.怎麼把文件保存到指定目錄?怎麼避免上傳文件重名問題?

可以自己設置上傳文件的保存目錄,與文件名拼湊形成一個文件路徑,使用move_uploaded_file(),就可以完成將文件保存到指定目錄。
可以通過上傳的文件名獲取到文件尾碼,然後使用時間戳+隨機數+文件尾碼的方式為文件重新命名,這樣就避免了重名。

51._____函數能返回腳本里的任意行中調用的函數的名稱。該函數同時還經常被用在調試中,用來判斷錯誤是如何發生的。(奇矩互動)

debug_print_backtrace()


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實現紙牌游戲的隨機抽牌洗牌過程(item系列幾個內置方法的實例) 1、namedtuple:命名元組,可以創建一個沒有方法只有屬性的類 from collections import namedtuple card = namedtuple('card',['rank','suit']) # ran ...
  • 環境:xadmin django2.0 python3.7.4 操作登錄login()或者註銷logout()報以上錯誤的解決辦法如下: 在xadmin的views/website.py中 修改如下: from django.contrib.auth.views import login from ...
  • 問題現象 django xadmin中logout頁面在chrome瀏覽器中點擊關閉頁面無效,無法關閉相應的頁面 問題原因 高版本的chrome等瀏覽器不支持在window.colse()的寫法 問題源碼 在xadmin的templates的xadmin的views的logged_out.html中 ...
  • 問題描述 Alice和Bob正在玩井字棋游戲。 井字棋游戲的規則很簡單:兩人輪流往3*3的棋盤中放棋子,Alice放的是“X”,Bob放的是“O”,Alice執先。當同一種棋子占據一行、一列或一條對角線的三個格子時,游戲結束,該種棋子的持有者獲勝。當棋盤被填滿的時候,游戲結束,雙方平手。 Alice ...
  • 這幾個變數判斷函數在PHP開發中用的其實挺多的,而且粗看上去都差不多,但其實還是有不少的區別的,如果搞不清楚,也許就會遺留一些潛在的bug, 包括我自已也遇到過這樣的坑,比如有一次我就遇到過用empty判斷出現的問題,前端是允許輸入0的,但是我用empty判斷的話就為真,我就直接給報錯了,所以這裡就 ...
  • 需求場景 不同終端(PC端、手機端、平板),不同界面(列表頁、詳情頁),對圖片大小的要求不一樣, 如果所有場景下都使用同一尺寸的圖片,勢必對會網路帶寬及伺服器性能造成一定的影響,由此需要伺服器端能夠根據前端的請求參數,自動匹配出相對應的圖片資源,以此來降低服務端的壓力,同時也能給用戶帶來更友好的用戶 ...
  • ThinkPHP6 源碼分析之應用初始化 官方群點擊此處。 App Construct 先來看看在 __construct 中做了什麼,基本任何框架都會在這裡做一些基本的操作,也就是從這裡開始延伸出去。 public function __construct(string $rootPath = ' ...
  • ThinkPHP 6 從原先的 App 類中分離出 Http 類,負責應用的初始化和調度等功能,而 App 類則專註於容器的管理,符合單一職責原則。 以下源碼分析,我們可以從 App,Http 類的實例化過程,瞭解類是如何實現自動實例化的,依賴註入是怎麼實現的。 從入口文件出發 當訪問一個 Thin ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...