勾股定理,矩形是對角線相等的四邊形。只要任意三點不在一條直線上,任選一點,求這一點到另外三點的長度的平方,兩個短的之和若是等於最長的,那麼這就是矩形。javascript
/* *單鏈表的結點類 */ class LNode{ //爲了簡化訪問單鏈表,結點中的數據項的訪問權限都設爲public public 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; } }
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); } } } }
若是沒有使用代理服務器:php
$ip = $_SERVER['REMOTE_ADDR'];html
使用透明代理java
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];mysql
參考文章linux
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中:laravel
CSRF:跨站請求僞造,能夠經過經過判斷來源和加 Token 的方式來防範。面試
XSS:跨站腳本攻擊,能夠經過對內容轉義和過濾來防範,還有CSP正則表達式
參考文章:
http://www.javashuo.com/article/p-elbjbxve-cd.html
http://www.jb51.net/article/48801.htm
這個問題有個關鍵點,撲克牌,1-13 不能再多了。這就很簡單了。用PHP來作,定義一個數組分別存着1到13,拿出一個,置空一個,最後看下 這五個置空的 是否是連續的。這種狀況不考慮抽出的順序。
思想:
若是兩個單向鏈表有公共的結點,也就是說兩個鏈表從某一結點開始,它們的m_pNext都指向同一個結點。但因爲是單向鏈表的結點,每一個結點只有一個m_pNext,所以從第一個公共結點開始,以後它們全部結點都是重合的,不可能再出現分叉。因此,兩個有公共結點而部分重合的鏈表,拓撲形狀看起來像一個Y,而不可能像X。
參考文獻:
https://blog.csdn.net/wcyoot/article/details/6426436
https://blog.csdn.net/Lieacui/article/details/52046548
主鍵:絕對不能有空值。惟一索引:能夠有空值
參考:http://www.javashuo.com/article/p-wmjflquq-bp.html
關鍵是S上。簡而言之,https創建鏈接後要先把SSL的證書發下去,有了公鑰和私鑰,就能夠解密了。
參考:http://www.javashuo.com/article/p-gpltrpuq-bg.html
參考:http://tool.oschina.net/commons?type=5
top、htop、free、uptime
原理:第一SQL自己有問題(這個不是主要問題)。第二你寫的SQL頗有問題(這是最主要的)
防範:第一,絕對不要相信用戶輸入的任何東西。第二,預編譯。如今的框架通常都會有SQL過濾的。
PHP入門問題,isset和empty的區別
分別是false, true, true, true
第一,數據超過必定數量或者體積,請拆分表,垂直或者水平分(最有效果的優化)
第二,務必有自增主鍵。經過自增主鍵來查數據是最快的。
第三,經常使用的查詢字段創建聯合索引,寫SQL必定要尊從最左原則,用到這個索引。
第四,不要把邏輯運算放到sql裏。言外之意是,不要寫太複雜的SQL,你能寫複雜的SQL 你確定也能經過PHP實現。
參考:https://cloud.tencent.com/developer/article/1004367
事務(transaction)是做爲一個單元的一組有序的數據庫操做。若是組中的全部操做都成功,則認爲事務成功,即便只有一個操做失敗,事務也不成功。若是全部操做完成,
事務則提交,其修改將做用於全部其餘數據庫進程。若是一個操做失敗,則事務將回滾,該事務全部操做的影響都將取消。
會 寫正則最好。我反正不會正則,須要用的時候就百度。
遍歷數組,求當前時間差,和第一個進行對比,小於第一個交換位置。最後取第一個便可。
這三個放在一塊兒,回答的點在於,print_r是函數,echo、print是結構語言。
至於他們具體的區別參考:http://www.javashuo.com/article/p-olivdlav-bb.html
這個問題,很難。一會半會說不清楚。若是作過PHP restful 接口開發,也踩過這裏面的坑,那應該是能夠答出來經常使用的幾個KEY的。
參考:https://blog.csdn.net/u014175572/article/details/54861813
1.層序遍歷
2.先序遍歷
3.中序遍歷
4.後序遍歷
參考:https://blog.csdn.net/wk199351/article/details/65936001
但從PHP來說,考的是PHP數組的實現。能夠簡單的認爲,PHP的數組是hash桶+十字鏈表(其實是數列Array,列表List,散列表/關聯數組/字典Hashtable的聚合體)。優勢是查詢效率很高,遍歷很方便,缺點是,佔內存較多。(仍是空間換時間的思路,畢竟如今內存又不值錢)
C語言的數組,就是定長定類型的數列。
跳躍表(skiplist)是一種有序數據結構,它經過在每一個節點中維持多個指向其餘節點的指針,從而達到快速訪問節點的目的。
參考:http://www.javashuo.com/article/p-utqrzwlq-hn.html
用普通方法,確定很容易的。
考zval的,PHP的八種類型,本質只有一個結構。
參考:https://blog.csdn.net/ohmygirl/article/details/41542445
三次握手和四次揮手,以及他們每步的狀態。
這個問題最好能一步到位回答的全面的。通常都是有客戶端告訴服務端,我這邊東西發完了,能夠斷鏈接了麼。可是若是客戶端發完FIN服務端沒有回覆,就會重試,直到超過超時時間,就斷了。服務端也同樣,超過期間,服務端就斷了。
典型的二叉搜索樹。大學數據結構的基礎題。
參考:http://www.javashuo.com/article/p-oqsdooqx-gd.html
將文件拆分紅若干個小文件,根據內容計算hash值,分散到不一樣文件。
array_map,array_filter, array_walk
核心方法是scandir,核心思想是遞歸。
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);
這個題有點繞。考的仍是COOKIE和SESSION的基礎知識。服務端經過set-cookie命令來通知客戶端保存cookie。
只要按照domain path 過時時間等規則 用header函數就能夠實現。
分佈式系統session,集中處理。按咱們公司的架構,爲了實現高可用和高容災,提供一個分佈式的驗籤服務。具體的能夠看下redis的分佈式服務架構。
區別主要在數據和索引的存儲結構和存儲方式上,以及對於事務的支持。
參考:http://www.javashuo.com/article/p-stwqezmv-do.html
入門問題。這個問題有一個很大的坑,面試官可能會從這個問題下手問你一大堆問題。
以PHP爲例:一般最簡單的回答,從用戶的電腦找到最近的DNS服務,而後解析到對應的IP 而後雙方開始HTTP鏈接,而後發送請求信息,服務器拿到請求信息就開始準備迴應的信息,中間要通過nginx轉發到frstCGI(PHP-FPM),而後PHP開始解析框架,解析請求頭部,找到對應的API,該查數據庫查數據,該組裝HTML組裝HTML,完事了就從新返回給用戶。用戶拿到返回數據,瀏覽器開始渲染頁面,JS開始加載。
explain,具體的請百度。(基本不多用性能分析語句。MYSQL的表設計上儘可能冗餘一部分字段,避免在MYSQL裏處理大量的邏輯運算。咱們是作PHP服務開發的,mysql語句能簡單儘可能簡單。邏輯運算的地方能夠在PHP裏作。)
linux:traceroute,windows:tracert
基礎問題。本質仍是考PHP數組的結構和特色。
結果是01235。PHP用數字索引和STRING索引差異仍是很大的
參考:http://www.jb51.net/article/38593.htm
122
此處有一坑。foreach 完以後,$index , $value 並不會消失保留最後一次賦值。
這裏的第一次foreach以後,數組中最後一個元素變成引用,引用變量 $v 繼續存在且指向數組的最後一個元素。第二次遍歷,由於遍歷變量名是 $v , 因此等於說每次遍歷都將這次遍歷的值修改爲最後元素的值,直至到遍歷最後一個元素(引用元素),由於此時數組的最後一個元素已被修改爲上一個元素的值,最後一次賦值就是 本身==本身。 故最後一個等於倒數第二個
https://laravel-china.org/articles/7001/php-ray-foreach-and-references-thunder
思路:生產者和消費者模式。這個問題也沒有說其餘的狀態,好比數據庫的數據會實時增長麼?redis中每一個錢包是否有其餘服務在讀取或者寫入啊。什麼的。數據庫和REDIS放一塊兒,要麼考數據一致性,要麼考出現鎖,致使效率下降。
不知道,沒用過,爲何這麼設計?故意給本身找不愉快?
kill -l 不多用
面試官這麼樣問你,你就反問他,你要的底層實現是字段的設計?內存分配管理?網絡模型?數據同步?仍是分佈式的實現?(TIPS:面試就是兩我的的博弈。面試官給出一個描述不清晰的問題,咱們不必回答。讓他把問題講清楚再思考怎麼回覆)
參考:https://cloud.tencent.com/developer/article/1004377
這篇文章 要多讀幾遍。
問清楚是IO異步模型。仍是AJAX這類的異步請求模型。差異很是大的。
參考:https://cloud.tencent.com/developer/article/1005481
狗東某風控研發必考題。
粗暴一點的方法 ini_set('memory_limit','-1'); 先把當前內存限制解除了 而後直接逐行統計。時間會很是的久。
有更好的方法請留言。
(TIPS)不要中招。不要用經常使用思路來處理,10億數據 你再怎麼優化,全表求和,都是要死人的。
咱們從設計上解決這個問題。只有一千個司機。咱們能夠作個簡單哈希,分庫分表,%求餘數。保證這一千個司機分在一千個表裏,每一個人有每一個人的單獨表。引擎用MYSAIM,求表中數據的總數,效率飛快,遍歷一千張表,求最大前二十便可。
沒作過。其實題目表達不清楚。若是作過微信公衆號開發,知道微信事件模型的XML數據結構,應該會好作一點。
tail -f access.log | awk -F '[' '{print $2}' | awk '{print $1}' | uniq -c
參考:https://blog.csdn.net/dong_007_007/article/details/78330337
不逼逼,直接參考:http://www.laruence.com/php-internal
鳥哥的文章要多讀,多讀。
遞歸。array_map傳入一個回調函數。
substr_count();
方法太多了,可是實現起來 各有各的問題。
我可能只會用HASH映射作。其餘的,不會。
參考:第64題。
> https://blog.csdn.net/v_JULY_v/article/details/6279498
守護進程模型(須要知道php-fpm的各類配置了)
參考:https://www.jianshu.com/p/542935a3bfa8
這個三言兩語說不清楚。
參考:https://www.zhihu.com/question/22062795
php-fpm 的配置並很少,經常使用的就更少了。
參考:http://www.4wei.cn/archives/1002061
static - 子進程的數量是固定的(pm.max_children) ondemand - 進程在有需求時才產生(當請求時,與 dynamic 相反,pm.start_servers 在服務啓動時即啓動 dynamic - 子進程的數量在下面配置的基礎上動態設置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers
參考:分佈式架構設計必備CAP原理。
不是核心業務的話,先停寫,把備機拉起來,查看兩臺機器的日誌,進行數據補償,開寫。
若是是核心業務的話,如今全部的寫操做都在正常的狀態機器上。把好的這臺機器的備機拉起來,當主機。
以上全是應急操做。實際上數據庫的容災設計要複雜的多。
面試官要是問你,備機的數據不一致怎麼辦,你要勇敢懟回去,大家每秒多少寫入操做。按照百萬級表,每秒1000的寫入效率,正常的設計是,分佈在2臺機器上每臺500。這個級別的數據同步,出現差別的機率 能夠忽略不計的。有一臺出現問題,另外一臺也能夠抗住。
(正常的操做,仍是先停寫,等數據一致,切換,開寫。咱們公司搞這些切換都是在凌晨4.00左右,核心業務的每秒寫操做,只有十幾個。先後耽擱不到20秒)。
這種題 有是很難回答的。太寬泛了,咱們面試早就不問這種問題了。
參考:日本人寫的《圖解HTTP》
計算機原理學的,生產者消費者模型,銀行家模型,均可以解決鎖的問題。
我實習的時候遇到這個坑。
說是mt_rand比rand快4倍。
在隨機數區間不大的狀況下並無很大的效率差距。可是出現重複數的概率,rand要比mt_rand高不少。
經過各類行鎖表鎖,各類樂觀鎖悲觀鎖,排他鎖實現的呀。
http://www.javashuo.com/article/p-bgxnekit-u.html
http://www.javashuo.com/article/p-hjtiwlwq-k.html
http://www.javashuo.com/article/p-wnyaiydz-dy.html
對稱加密:咱們倆共用一個祕鑰,你加密,我解密。
非對稱加密:我給你一個公鑰,你加密完了,我還能有個人私鑰把密文解開。可是你沒有個人私鑰。
擴展:橢圓加密算法。
四隻
二進制問題。薛定諤的老鼠。
一隻老鼠有兩個狀態,死活,對應01。假設老鼠的個數爲A,則有2^A>=10; A=4;
思路很簡單,十瓶藥編號:0,1,10,11....1001;
0不喝。第一隻老鼠喝全部個位是1的:13579,第二隻喝十位是1的,第三隻和百位是1的,第四隻喝千位是1的。
24小時後,看下死了的是1,活着的是0。按老鼠的順序乖乖站好……假如第一隻和第三隻死了,那就是0101,就是5 有問題。
redis 集羣主從同步的簡單原理
Redis的複製功能是基於內存快照的持久化策略基礎上的,也就是說不管你的持久化策略選擇的是什麼,只要用到了Redis的複製功能,就必定會有內存快照發生。
當Slave啓動並鏈接到Master以後,它將主動發送一個SYNC命令( 首先Master會啓動一個後臺進程,將數據快照保存到文件中[rdb文件] Master 會給Slave 發送一個
Ping命令來判斷Slave的存活狀態 當存活時 Master會將數據文件發送給Slave 並將全部寫命令發送到Slave )。
Slave首先會將數據文件保存到本地 以後再將 數據 加載到內存中。
當第一次連接 或者是 故障後 從新鏈接 都會先判斷Slave的存活狀態 在作所有數據的同步 , 以後只會同步Master的寫操做(將命令發送給Slave)
問題:
當 Master 同步數據時 若數據量較大 而Master自己只會啓用一個後臺進程 來對多個Slave進行同步 , 這樣Master就會壓力過大 , 並且Slave 恢復的時間也會很慢!
redis 主從複製的優勢:
(1)在一個Redis集羣中,master負責寫請求,slave負責讀請求,這麼作一方面經過將讀請求分散到其餘機器從而大大減小了master服務器的壓力,另外一方面slave專一於提供
讀服務從而提升了響應和讀取速度。
(2)在一個Redis集羣中,若是master宕機,slave能夠介入並取代master的位置,所以對於整個Redis服務來講不至於提供不了服務,這樣使得整個Redis服務足夠安全。
(3)水平增長Slave機器能夠提升性能
參考:
(1)可讀性方面:基本相同,XML的可讀性比較好;
(2)可擴展性方面:都具備良好的擴展性;
(3)編碼難度方面:相對而言,JSON的編碼比較容易;
(4)解碼難度:JSON的解碼難度基本爲零,XML須要考慮子節點和父節點;
(5)數據體積方面:JSON相對於XML來說,數據體積小,傳遞的速度比較快;
(6)數據交互方面:JSON與javascript的交互更加方便,更容易解析處理,更好的數據交互;
(7)數據描述方面:XML對數據描述性比較好;
(8)傳輸速度方面:JSON的速度遠遠快於XML。
參考:https://blog.csdn.net/java19880223/article/details/20054111
在trait繼承中,優先順序依次是:來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法
id | username | salary | pid |
---|---|---|---|
1 | a | 3000 | null |
2 | b | 8000 | null |
3 | c | 5000 | 1 |
4 | d | 6000 | 3 |
SELECT a.*, b.* FROM `user` as a LEFT JOIN `user` as b ON a.pid = b.id AND a.salary > b.salary WHERE b.id > 0;
http://www.javashuo.com/article/p-tckcljtj-bb.html
http://www.jb51.net/article/128449.htm
檢查nginx log,請求是否達到nginx 和是否正常轉發給 php-fpm
1)管道
管道分爲有名管道和無名管道
無名管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係的進程間使用.進程的親緣關係通常指的是父子關係。無明管道通常用於兩個不一樣進程之間的通訊。當一個進程建立了一個管道,並調用fork建立本身的一個子進程後,父進程關閉讀管道端,子進程關閉寫管道端,這樣提供了兩個進程之間數據流動的一種方式。
有名管道也是一種半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。
2)信號量
信號量是一個計數器,能夠用來控制多個線程對共享資源的訪問.,它不是用於交換大批數據,而用於多線程之間的同步.它常做爲一種鎖機制,防止某進程在訪問資源時其它進程也訪問該資源.所以,主要做爲進程間以及同一個進程內不一樣線程之間的同步手段.
3)信號
信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生.
4)消息隊列
消息隊列是消息的鏈表,存放在內核中並由消息隊列標識符標識.消息隊列克服了信號傳遞信息少,管道只能承載無格式字節流以及緩衝區大小受限等特色.消息隊列是UNIX下不一樣進程之間可實現共享資源的一種機制,UNIX容許不一樣進程將格式化的數據流以消息隊列形式發送給任意進程.對消息隊列具備操做權限的進程均可以使用msget完成對消息隊列的操做控制.經過使用消息類型,進程能夠按任何順序讀信息,或爲消息安排優先級順序.
5)共享內存
共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問.共享內存是最快的IPC(進程間通訊)方式,它是針對其它進程間通訊方式運行效率低而專門設計的.它每每與其餘通訊機制,如信號量,配合使用,來實現進程間的同步與通訊.
6)套接字:可用於不一樣及其間的進程通訊
不會;主從數據不一致;正常是不會出現這種情景,具體看狀況,是否能夠修復,恢復到以前的時間點,而後追回同步。
http://www.javashuo.com/article/p-xisokohk-bp.html
http://www.javashuo.com/article/p-stpfhwhn-km.html
冒泡排序
我當時的答案是用鏈表來存,緩存命中就將該緩存移到鏈表頭,而後鏈表尾就都是冷數據了。
我記得以前是在哪裏看過這個設計,但我忘記在鏈接了,請知道朋友的把鏈接貼上來。
false, true, true
雙引號串中的內容能夠被解釋並且替換,而單引號串中的內容總被認爲是普通字符。
在單引號串中甚至反斜槓也失去了他的擴展含義(除了插入反斜槓\和插入單引號\')。因此,當你想在字串中進行變量代換和包 含\n(換行符)等轉義序列時,你應該使用雙引號。單引號串能夠用在其餘任何地方,腳本中使用單引號串處理速度會更快些。
static:若是在子類中重寫了父類中的static方法、屬性,父類就會去訪問了子類的static方法
self: 是類內指針,無論子類有沒有重寫過父類中的方法、屬性都指向本類的靜態方法、屬性
http://www.laruence.com/2015/05/28/3038.html
https://blog.csdn.net/gavin_new/article/details/54603490
https://blog.csdn.net/zhihua_w/article/details/52723402
http://www.jb51.net/article/55853.htm
區別主要在數據和索引的存儲結構和存儲方式上,以及對於事務的支持。
參考:http://www.javashuo.com/article/p-stwqezmv-do.html
爲何創建TCP鏈接須要三次握手?
緣由:爲了應對網絡中存在的延遲的重複數組的問題
例子:
假設client發起鏈接的鏈接請求報文段在網絡中沒有丟失,而是在某個網絡節點長時間滯留了,致使延遲到達server。原本這是一個已經失效的鏈接報文,可是server接收到這個鏈接報文以後,誤認爲client發起了新的鏈接,因而向client發送確認報文段。此時由於沒有了鏈接的3次握手,client不會對server的確認報文做出迴應,也不會向server發送數據,server就覺得鏈接已經創建,一直在空等client的數據,這樣server的這一部分網絡資源就被浪費了。
爲何斷開TCP鏈接須要進行四次握手 ?
由於TCP鏈接是全雙工的網絡協議,容許同時通訊的雙方同時進行數據的收發,一樣也容許收發兩個方向的鏈接被獨立關閉,以免client數據發送完畢,向server發送FIN關閉鏈接,而server還有發送到client的數據沒有發送完畢的狀況。因此關閉TCP鏈接須要進行四次握手,每次關閉一個方向上的鏈接須要FIN和ACK兩次握手。
TIME_WAIT狀態的意義
在TCP鏈接中,當被動關閉鏈接的一方(圖中client)發送的FIN報文到達時,被動關閉鏈接的一方會發送ACK確認報文,而且進入TIME_WAIT狀態,而且等待2MSL時間段(MSL:maximum segment life)。這麼作有下述兩個緣由:
被動關閉鏈接的一方(圖中的server)在一段時間內沒有收到對方的ACK確認數據包,會從新發送FIN數據包,於是主動關閉鏈接的一方須要停留在等待狀態以處理對方從新發送的FIN數據包。不然他會迴應一個RST數據包給被動關閉鏈接的一方,使得對方莫名其妙。
在TIME_WAIT狀態下,不容許應用程序在當前ip和端口上和以前通訊的client(這個client的ip和端口號不變)創建一個新的鏈接。這樣就能避免新的鏈接收到以前的ip和端口一致的鏈接殘存在網絡中的數據包。這也是TIME_WAIT狀態的等待時間被設置爲2MSL的緣由,以確保網絡上當前鏈接兩個方向上還沒有接收的TCP報文已經所有消失。
http://www.javashuo.com/article/p-ksclncyj-cd.html
key value
https://www.jianshu.com/p/df89b530db89
http://www.javashuo.com/article/p-wdgyozkp-kx.html
php-fpm能夠經過tcp socket和unix socket兩種方式實現。
https://blog.csdn.net/koastal/article/details/52303316
--++----++--+++--- -++++----+++++++-- -+++----++++------ -----++------++++- ---++++++-----+++- -----+++------+++-
好比上圖在數組中表示成,1表示成陸地,0表示海洋:
[ [0,0,1,1,0,0,0,1,1....], [0,1,1,1.....], ]
寫個算法取出全部陸地的座標,並按塊放到一塊兒,如地圖上左上角第一個陸地的座標是:
[ [0,2],[0,3], [1,1],[1,2],[1,3],[1,4], [2,1],[2,2],[2,3] ]
curl 設置來源地址來欺騙對方服務器驗證
http://www.javashuo.com/article/p-zjbshgnt-mg.html
單例模式又稱爲職責模式,它用來在程序中建立一個單一功能的訪問點,通俗地說就是實例化出來的對象是惟一的。
全部的單例模式至少擁有如下三種公共元素:
抽象的類不能被實例化。任何一個類,若是它裏面至少有一個方法是被聲明爲抽象的,那麼這個類就必須被聲明爲抽象的。被定義爲抽象的方法只是聲明瞭其調用方式(參數),不能定義其具體的功能實現。
http://www.javashuo.com/article/p-vfjbzrdt-dc.html
工廠模式
適配器模式
轉載:https://laravel-china.org/articles/20714