日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

sis最新ip地址2020入口一_2020最新大厂内部 PHP 高级工程师面试题汇总(一)

發布時間:2023/12/16 php 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sis最新ip地址2020入口一_2020最新大厂内部 PHP 高级工程师面试题汇总(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、給你四個坐標點,判斷它們能不能組成一個矩形,如判斷 ([0,0],[0,1],[1,1],[1,0]) 能組成一個矩形。

我們分析這道題, 給4個標點,判斷是否矩形

高中知識,矩形有4條邊,兩兩相等, 矩形兩條對角線相等, 矩形的長短邊與對角線滿足勾股定理。

故解題思路為,根據坐標點,

  列出所有的兩點組合邊長的數組,去重,看是不是只剩 3個長度(注意正方形2個長度)

  判斷是否滿足勾股定理

  調優一下,先判斷有沒有重復的點,有的話肯定不是矩形

代碼如下:

<?phpfunction isRectangle($point1, $point2, $point3, $point4){if ($point1 == $point2 || $point1 == $point3 || $point1 == $point4 || $point2 == $point3 || $point2 == $point4 || $point3 == $point4) {return false;}$lengthArr = [];$lengthArr[] = getLengthSquare($point1, $point2);$lengthArr[] = getLengthSquare($point1, $point3);$lengthArr[] = getLengthSquare($point1, $point4);$lengthArr[] = getLengthSquare($point2, $point3);$lengthArr[] = getLengthSquare($point2, $point4);$lengthArr[] = getLengthSquare($point3, $point4);$lengthArr = array_unique($lengthArr);$lengthCount = count($lengthArr);if ($lengthCount == 3 || $lengthCount == 2 ) {if ($lengthCount == 2) {return(max($lengthArr) == 2*min($lengthArr));} else {$maxLength = max($lengthArr);$minLength = min($lengthArr);$otherLength = array_diff($lengthArr, [$maxLength, $minLength]);return($minLength + $otherLength == $maxLength);}} else {return false;} }function getLengthSquare($point1, $point2){$res = pow($point1[0]-$point2[0], 2)+pow($point1[1]-$point2[1], 2);return $res; }var_dump(isRectangle([0,0],[0,2],[2,2],[2,0]));

2、寫一段代碼判斷單向鏈表中有沒有形成環,如果形成環,請找出環的入口處,即 P 點

/**單鏈表的結點類*/ class LNode{//為了簡化訪問單鏈表,結點中的數據項的訪問權限都設為publicpublic int data;public LNode next; }class LinkListUtli {//當單鏈表中沒有環時返回null,有環時返回環的入口結點public static LNode searchEntranceNode(LNode L){LNode slow=L;//p表示從頭結點開始每次往后走一步的指針LNode fast=L;//q表示從頭結點開始每次往后走兩步的指針while(fast !=null && fast.next !=null) {if(slow==fast) break;//p與q相等,單鏈表有環slow=slow.next;fast=fast.next.next;}if(fast==null || fast.next==null) return null;// 重新遍歷,尋找環的入口點slow=L;while(slow!=fast){slow=slow.next;fast=fast.next;}return slow;} }

3、寫一個函數,獲取一篇文章內容中的全部圖片,并下載

function download_images($article_url = '', $image_path = 'tmp'){// 獲取文章類容$content = file_get_contents($article_url);// 利用正則表達式得到圖片鏈接$reg_tag = '/<img.*?"([^"]*(jpg|bmp|jpeg|gif|png)).*?>/';$ret = preg_match_all($reg_tag, $content, $match_result); $pic_url_array = array_unique($match_result1[1]);// 創建路徑$dir = getcwd() . DIRECTORY_SEPARATOR .$image_path;mkdir(iconv("UTF-8", "GBK", $dir), 0777, true);foreach($pic_url_array as $pic_url){// 獲取文件信息$ch = curl_init($pic_url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_NOBODY, 0);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE );curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE );curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$fileInfo = curl_exec($ch);$httpinfo = curl_getinfo($ch);curl_close($ch);// 獲取圖片文件后綴$ext = strrchr($pic_url, '.');$filename = $dir . '/' . uniqid() . $ext; // 保存圖片信息到文件$local_file = fopen($filename, 'w');if(false !== $local_file){if( false !== fwrite($local_file, $filecontent) ){fclose($local_file);}}}}

4、獲取當前客戶端的 IP 地址,并判斷是否在(111.111.111.111,222.222.222.222)

如果沒有使用代理服務器:

$ip = $_SERVER['REMOTE_ADDR'];

使用透明代理

$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];

5、nginx 的 log_format 配置如下:

log_format main ‘remoteaddr?remote_user [timelocal]"request”’ ‘statusbody_bytes_sent “httpreferer"″"http_user_agent” “upstreamresponsetime""request_time” “http_x_forwarded_for"';

從今天的 nginx log 文件 access.log 中:

  • a、列出 “request_time” 最大的 20 行?
  • b、列出早上 10 點訪問量做多的 20 個 url 地址?

6、什么是 CSRF 攻擊?XSS 攻擊?如何防范?

CSRF:跨站請求偽造,可以通過通過判斷來源和加 Token 的方式來防范。

XSS:跨站腳本攻擊,可以通過對內容轉義和過濾來防范,還有 CSP

7、應用中我們經常會遇到在 user 表隨機調取 10 條數據來展示的情況,簡述你如何實現該功能。

SELECT * FROM `table` WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` ) ORDER BY id LIMIT 1;

8、從撲克牌中隨機抽 5 張牌,判斷是不是一個順子,即這 5 張牌是連續的

這個問題有個關鍵點,撲克牌,1-13 不能再多了。這就很簡單了。用 PHP 來做,定義一個數組分別存著 1 到 13, 拿出一個,置空一個,最后看下 這五個置空的 是不是連續的。這種情況不考慮抽出的順序。

9、兩條相交的單向鏈表,如何求它們的第一個公共節點

思想:

  • 如果兩個鏈表相交,則從相交點開始,后面的節點都相同,即最后一個節點肯定相同;
  • 從頭到尾遍歷兩個鏈表,并記錄鏈表長度,當二者的尾節點不同,則二者肯定不相交;
  • 尾節點相同,如果 A 長為 LA,B 為 LB,如果 LA>LB, 則 A 前 LA-LB 個先跳過
如果兩個單向鏈表有公共的結點,也就是說兩個鏈表從某一結點開始,它們的 m_pNext 都指向同一個結點。但由于是單向鏈表的結點,每個結點只有一個 m_pNext,因此從第一個公共結點開始,之后它們所有結點都是重合的,不可能再出現分叉。所以,兩個有公共結點而部分重合的鏈表,拓撲形狀看起來像一個 Y,而不可能像 X。

10、最長公共子序列問題 LCS,如有 [1,2,5,11,32,15,77] 和 [99,32,15,5,1,77] 兩個數組,找到它們共同都擁有的數,寫出時間復雜度最優的代碼,不能用 array_intersect(這里有坑,需要去研究一下動態規劃)。

11、linux 的內存分配和多線程原理

12、MYSQL 中主鍵與唯一索引的區別

主鍵:絕對不能有空值。唯一索引:可以有空值

13、http 與 https 的主要區別

關鍵是 S 上。簡而言之,https 建立連接后要先把 SSL 的證書發下去,有了公鑰和私鑰,就可以解密了。

14、http 狀態碼及其含意

  • 200 請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
  • 301 被請求的資源已永久移動到新位置。
  • 302 請求的資源現在臨時從不同的 URI 響應請求。
  • 400 1、語義有誤,當前請求無法被服務器理解。2、請求參數有誤。
  • 401 當前請求需要用戶驗證。
  • 403 服務器已經理解請求,但是拒絕執行它。
  • 404 請求失敗,請求所希望得到的資源未被在服務器上發現。
  • 500 服務器遇到了一個未曾預料的狀況,無法完成對請求的處理,會在程序碼出錯時出現。
  • 501 服務器不支持當前請求所需要的某個功能。無法識別請求的方法。
  • 502 作為網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。
  • 503 由于臨時的服務器維護或者過載,服務器當前無法處理請求。

15、linux 中怎么查看系統資源占用情況

top、htop、free、uptime

16、SQL 注入的原理是什么?如何防止 SQL 注入

原理:第一 SQL 本身有問題(這個不是主要問題)。第二你寫的 SQL 很有問題(這是最主要的)

防范:第一,絕對不要相信用戶輸入的任何東西。第二,預編譯。現在的框架一般都會有 SQL 過濾的。

17、isset (null) isset (false) empty (null) empty (false) 輸出

PHP 入門問題,isset 和 empty 的區別

分別是 false, true, true, true

18、優化 MYSQL 的方法

第一,數據超過一定數量或者體積,請拆分表,垂直或者水平分(最有效果的優化)

第二,務必有自增主鍵。通過自增主鍵來查數據是最快的。

第三,常用的查詢字段建立聯合索引,寫 SQL 一定要尊從最左原則,用到這個索引。

第四,不要把邏輯運算放到 sql 里。言外之意是,不要寫太復雜的 SQL,你能寫復雜的 SQL 你肯定也能通過 PHP 實現。

19、數據庫中的事務是什么?

事務(transaction)是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,

事務則提交,其修改將作用于所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。

20、寫一個函數,盡可能高效的從一個標準 URL 中取出文件的擴展名

會 寫正則最好。

21、參數為多個日期時間的數組,返回離當前時間最近的那個時間

遍歷數組,求當前時間差,和第一個進行對比,小于第一個交換位置。最后取第一個即可。

22、echo、print、print_r 的區別

這三個放在一起,回答的點在于,print_r 是函數,echo、print 是結構語言。

至于他們具體的區別參考:https://www.cnblogs.com/xiaotaoing/p/66873...

23、http 協議的 header 中有哪些 key 及含義

這個問題,很難。一會半會說不清楚。如果做過 PHP restful 接口開發,也踩過這里面的坑,那應該是可以答出來常用的幾個 KEY 的。

24、二叉樹前中后遍歷代碼

  • 層序遍歷
  • 先序遍歷
  • 中序遍歷
  • 后序遍歷

25、PHP 的數組和 C 語言的數組結構上有何區別?

但從 PHP 來講,考的是 PHP 數組的實現。可以簡單的認為,PHP 的數組是 hash 桶 + 十字鏈表(實際上是數列 Array,列表 List,散列表 / 關聯數組 / 字典 Hashtable 的聚合體)。優點是查詢效率很高,遍歷很方便,缺點是,占內存較多。(還是空間換時間的思路,畢竟現在內存又不值錢)

C 語言的數組,就是定長定類型的數列。

26、Redis 的跳躍表怎么實現的

跳躍表 (skiplist) 是一種有序數據結構,它通過在每個節點中維持多個指向其他節點的指針,從而達到快速訪問節點的目的。

27、哈希是什么?hash 沖突后,數據怎么存?

28、聚簇索引,聚集索引的區別?

29、B+Tree 是怎么進行搜索的

30、數組和 hash 的區別是什么?

31、寫個函數,判斷下面擴號是否閉合,左右對稱即為閉合: ((())),)(()),(()))),(((((()),(()()),()()

32、 找出數組中不重復的值 [1,2,3,3,2,1,5]

用普通方法,肯定很容易的。

33、32 題你的時間復雜度是多少?有的情況下,你寫了個算法,然后面試官會讓你把你的算法的時間復雜度表達式寫出來

34、PHP 的的這種弱類型變量是怎么實現的?

考 zval 的,PHP 的八種類型,本質只有一個結構。

35、在 HTTP 通訊過程中,是客戶端還是服務端主動斷開連接?

三次握手和四次揮手,以及他們每步的狀態。

這個問題最好能一步到位回答的全面的。一般都是有客戶端告訴服務端,我這邊東西發完了,可以斷連接了么。但是如果客戶端發完 FIN 服務端沒有回復,就會重試,直到超過超時時間,就斷了。服務端也一樣,超過時間,服務端就斷了。

36、PHP 中發起 http 請求有哪幾種方式?它們有何區別?

  • GET
  • POST
  • HEAD
  • PUT
  • DELETE
  • OPTIONS
  • TRACE
  • CONNECT

37、有一顆二叉樹,寫代碼找出來從根節點到 flag 節點的最短路徑并打印出來,flag 節點有多個。比如下圖這個樹中的 6 和 14 是 flag 節點,請寫代碼打印 8、3、6 和 8、10、14 兩個路徑

典型的二叉搜索樹。大學數據結構的基礎題。

38、有兩個文件文件,大小都超過了 1G,一行一條數據,每行數據不超過 500 字節,兩文件中有一部分內容是完全相同的,請寫代碼找到相同的行,并寫到新文件中。PHP 最大允許內內為 255M。

將文件拆分成若干個小文件,根據內容計算 hash 值,分散到不同文件。

39、請寫出自少兩個支持回調處理的 PHP 函數,并自己實現一個支持回調的 PHP 函數

array_map,array_filter, array_walk

40、請寫出自少兩個獲取指定文件夾下所有文件的方法(代碼或思路)。

核心方法是 scandir, 核心思想是遞歸。

41、請寫出自少三種截取文件名后綴的方法或函數(PHP 原生函數和自己實現函數均可)

echo substr(strrchr($file, '.'), 1);echo substr($file, strrpos($file, '.')+1);$arr=explode('.', $file); echo $arr[count($arr)-1];$arr=explode('.', $file); echo end($arr);echo strrev(explode('.', strrev($file))[0]);echo pathinfo($file)['extension'];echo pathinfo($file, PATHINFO_EXTENSION);

42、PHP 如何實現不用自帶的 cookie 函數為客戶端下發 cookie。對于分布式系統,如何來保存 session 值。

這個題有點繞。考的還是 COOKIE 和 SESSION 的基礎知識。服務端通過 set-cookie 命令來通知客戶端保存 cookie。

只要按照 domain path 過期時間等規則 用 header 函數就可以實現。

分布式系統 session,集中處理。按我們公司的架構,為了實現高可用和高容災,提供一個分布式的驗簽服務。具體的可以看下 redis 的分布式服務架構。

43、請用 SHELL 統計 5 分鐘內,nginx 日志里訪問最多的 URL 地址,對應的 IP 是哪些?

44、寫一段 shell 腳本實現備份 mysql 指定庫(如 test) 到指定文件夾并打包,并刪除 30 天前的備份,然后將新的備份推送到遠端服務器,完成后送郵件通知。

45、mysql 數據庫中 innodb 和 myisam 引擎的區別

區別主要在數據和索引的存儲結構和存儲方式上,以及對于事務的支持。

46、從用戶在瀏覽器中輸入網址并回車,到看到完整的見面,中間都經歷了哪些過程。

入門問題。這個問題有一個很大的坑,面試官可能會從這個問題下手問你一大堆問題。

以 PHP 為例:通常最簡單的回答,從用戶的電腦找到最近的 DNS 服務,然后解析到對應的 IP 然后雙方開始 HTTP 連接,然后發送請求信息,服務器拿到請求信息就開始準備回應的信息,中間要經過 nginx 轉發到 frstCGI (PHP-FPM), 然后 PHP 開始解析框架,解析請求頭部,找到對應的 API,該查數據庫查數據,該組裝 HTML 組裝 HTML,完事了就重新返回給用戶。用戶拿到返回數據,瀏覽器開始渲染頁面,JS 開始加載。

47、如何分析一條 sql 語句的性能。

explain,具體的請百度。(基本很少用性能分析語句。MYSQL 的表設計上盡量冗余一部分字段,避免在 MYSQL 里處理大量的邏輯運算。我們是做 PHP 服務開發的,mysql 語句能簡單盡量簡單。邏輯運算的地方可以在 PHP 里做。)

48、ping 一個服務器 ping 不通,用哪個命令跟蹤路由包?

linux:traceroute,windows:tracert

49、$a=[0,1,2,3]; $b=[1,2,3,4,5]; $a+=$b; var_dump ($a) 等于多少?

基礎問題。本質還是考 PHP 數組的結構和特點。

結果是 01235。PHP 用數字索引和 STRING 索引差別還是很大的

50、$a=[1,2,3]; foreach ($a as &$v){} foreach ($a as $v){} var_dump ($a) 等于多少;

122
此處有一坑。foreach 完之后,$index , $value 并不會消失保留最后一次賦值。
這里的第一次 foreach 之后,數組中最后一個元素變成引用,引用變量 $v 繼續存在且指向數組的最后一個元素。第二次遍歷,因為遍歷變量名是 $v , 所以等于說每次遍歷都將此次遍歷的值修改成最后元素的值,直至到遍歷最后一個元素(引用元素),因為此時數組的最后一個元素已被修改成上一個元素的值,最后一次賦值就是 自己 == 自己。 故最后一個等于倒數第二個

阿布阿布:2020最新大廠內部 PHP 高級工程師面試題匯總(二)?zhuanlan.zhihu.com阿布阿布:2020最新大廠內部 PHP 高級工程師面試題匯總(三)?zhuanlan.zhihu.com

更多學習內容可以訪問

阿布阿布:【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)??zhuanlan.zhihu.com

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限于:分布式架構、高可擴展、高性能、高并發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的PHP技術交流群953224940

進階PHP月薪30k>>>架構師成長路線【視頻、面試文檔免費獲取】?shimo.im

總結

以上是生活随笔為你收集整理的sis最新ip地址2020入口一_2020最新大厂内部 PHP 高级工程师面试题汇总(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。