某公司在線面試題(失敗了結@_@)

最近處於失業狀態@_@, 這段時間找工做挺不如意的,我偶爾看到這家公司的招聘以爲挺有意思,他們有專門的招聘網站,讓面試者在線作題,因而我就去試了一下,最終結果不盡人意,沒能接到面試通知,我把作題的答案粘出來,若是有人看到,但願能夠指正一二,萬分感謝。php

  1. 請使用正則表達式,可以把如下符合美圓價格格式的字符串匹配並可從一段字符串中提取出來:"$200.49"、"$1,999.00"、"$99"、"50.00美圓"。【加分提示:假設不須要考慮極端狀況(如千分位或小數點的位置校驗),越短越加分】
  • 個人答案(\$\d,?\d+\.?\d+)|(\$\d+)
  1. 請使用PHP寫一個類裏面的方法,方法名稱是publics,做用是以數組形式返回這個對象裏面的全部公開屬性及值,而私有屬性不返回。舉例:
class User
{
    public $name = "kingmax";
    private $_age = 30;

    public function publics()
    {
        //wait for your implement
    }
}

$User = new User();
$data = $User->publics();
print_r($data);
複製代碼

以上例程會輸出:mysql

Array
(
    [name] => kingmax
)
複製代碼

請實現publics方法。要求能夠把publics這個方法封裝在trait裏面,全部類通用。【加分提示:不直接使用反射類可加分】面試

  • 個人答案
<?php

class User
{
    public $name  = "kingmax";
    public $sex  = "man";
    private $_age = 30;

    public function publics()
    {
        //wait for your implement
    }
}

trait UserReturnInfo
{
    public function publics()
    {
        $data = [];
        //有三種實現方法,分別是經過get_object_vars(),foreach和反射,其中反射須要手動篩選public屬性
        //第一種:get_object_vars()
        $vars = get_object_vars($this);
        foreach ($vars as $k => $v) {
            $data[$k] = $v;
        }
        return $data;

        //第二種:foreach()
//        foreach ($this as $k => $v) {
//            $data[$k] = $v;
//        }
//        return $data;
        //第三種 反射
//        $reflectionClass = new ReflectionClass('User');
//        $props = $reflectionClass->getDefaultProperties();
//        $userObj = new User();
//        foreach ($props as $key => $val){
//            $rp = new ReflectionProperty($userObj,$key);
//            if ($rp->isPublic()){
//                $data[$key] = $val;
//            }
//        }
//        return $data;
    }
}

class UserReturnInfoMethod extends User
{
    use UserReturnInfo;
    /* ... */
}


$User = new UserReturnInfoMethod();
$data = $User->publics();
print_r($data);
複製代碼
  1. 請參照SQL到Mongo的對應表,學習一下Mongo的使用(若是須要)。php.net/manual/zh/m… Query:SELECT * FROM users WHERE name!="kingmax" and name!="soul"【得分提示:請先測試清楚,這道題不要想固然】
  • 個人答案
db.col.find(
    {
        "$and":[
                {
                    "title":{$ne:"mysql 教程"}
                },
                {
                    "title":{$ne:"php 教程"}
                }
        ]
    }
)
複製代碼
  1. 【亮出您的代碼】請設計一個登陸類LoginHelper,用來處理用戶的登陸(login方法)、註銷(logout方法)流程。【加分提示:儘量使用最新流行的設計模式和軟件工程規範】
  • 個人答案
<?php

// 請設計一個登陸類LoginHelper,用來處理用戶的登陸(login方法)、註銷(logout方法)流程。【加分提示:儘量使用最新流行的設計模式和軟件工程規範

//假設登陸須要 用戶名,密碼和驗證碼,密碼採用廣泛的md5+鹽值的形式,鹽值存在庫
//如下, 僞代碼
class LoginHelper 
{
    public function login()
    {
        //1. 接受參數(同時要過濾和驗證合法性,驗證能夠獨立封裝成一個驗證類)
        //2. 將傳過來的密碼經過預先定義好的方式加密而後和數據庫密碼比對,
            //正確,登陸成功,存下session,記錄日誌,跳轉相應頁面;
            //錯誤,登陸失敗,記錄日誌, 跳轉登陸頁。

        //其中,數據庫的實例化使用單例模式,始終new出來的都只是同一個類;每個動做執行以前都應該先判斷是否存有session,這個能夠寫在一個基類裏,該類繼承基類,用構造方法實現
    }   

    public function logout()
    {
        //1. 接受參數(同時要過濾和驗證合法性,驗證能夠獨立封裝成一個驗證類)
        //2. 銷燬session,退出登陸,跳轉頁面,記錄日誌
    } 

}
複製代碼
相關文章
相關標籤/搜索