get req.querypost // 引入表單處理模組 var bodyParser = require('body-parser'); / 設定 url 解析 規則 // app.use(bodyParser.json()); // for parsing application/json 可以加 可以 不加 // 必須加 app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form- urlencoded // 處理 post 引數 req.body
52.socket 如何傳送和接收訊息?// 傳送訊息 socket.emit('jyzj', '您多大了?'); // 點選按鈕 傳送訊息 document.getElementById('btn').onclick = function () { socket.emit('s80', '渣男'); // socket.emit('jyzj', '打狗棍法!天下無狗!'); }; // 監聽回答 socket.on('action', function (msg) { alert('xxx: ' + msg); });// 接收訊息的方法 socket.on('event',function(msg){ 接收到訊息的業務邏輯操作 }); socket.on('s80', function (msg) { console.log('接收的訊息'+msg); socket.emit('action', '我就是渣男,不服來砍我!'); // 關於emi方法的備註 // console.log(io);console.log(socket); // 結果一樣 // 使用socket.emit 和io.emit是一個方法. // 但是常用是socket.emit })
53. b2b2c o2o p2p CRM ERP OA 分別是什麼?B2B2C:是一種電子商務型別的網路購物商業模式,B是BUSINESS的簡稱,C是CUSTOMER的簡稱,第一個B指的是商品或服務的供應商,第二個B指的是從事電子商務的企業,C則是表示消費者。中文名 電子購物平臺模式外文名 B2B2C模 式 供應商對企業,企業對消費者平 臺 淘寶,京東等O2O:即Online To Offline(線上離線/線上到線下),是指將線下的商務機會與網際網路結合,讓網際網路成為線下交易的平臺,這個概念最早來源於美國。O2O的概念非常廣泛,既可涉及到線上,又可涉及到線下,可以通稱為O2O。主流商業管理課程均對O2O這種新型的商業模式有所介紹及關注。例如:雲家園、雲家政、e家潔、小區管家P2P peer-to-peer lendingp2p金融又叫P2P信貸。其中,P2P是 peer-to-peer 或 person-to-person 的簡寫,意思是:個人對個人。P2P金融指個人與個人間的小額借貸交易,一般需要藉助電子商務專業網路平臺幫助借貸雙方確立借貸關係並完成相關交易手續。借款者可自行釋出借款資訊,包括金額、利息、還款方式和時間,實現自助式借款;借出者根據借款人釋出的資訊,自行決定借出金額,實現自助式借貸。舉例說明:MB月光寶盒平臺目前做P2P最多的屬於P2P網際網路金融平臺,簡單的意思就是個人對個人通過平臺來連線達到解決雙方的需求。ERP所謂ERP是英文Enterprise Resource Planning(企業資源計劃)的簡寫。是指建立在資訊科技基礎上,以系統化的管理思想,為企業決策層及員工提供決策執行手段的管理平臺。ERP系統集中資訊科技與先進的管理思想於一身,成為現代企業的執行模式,反映時代對企業合理調配資源,最大化地創造社會財富的要求,成為企業在資訊時代生存、發展的基石。CRM Customer Relationship Management即客戶關係管理,是指企業用CRM技術來管理與客戶之間的關係。在不同場合下,CRM可能是一個管理學術語,可能是一個軟體系統。通常所指的CRM,指用計算機自動化分析銷售、市場營銷、客戶服務以及應用等流程的軟體系統。它的目標是通過提高客戶的價值、滿意度、贏利性和忠實度來縮減銷售週期和銷售成本、增加收入、尋找擴充套件業務所需的新的市場和渠道。CRM是選擇和管理有價值客戶及其關係的一種商業策略,CRM要求以客戶為中心的企業文化來支援有效的市場營銷、銷售與服務流程OA:說起OA(Office Automation,辦公自動化),總體上講,它是指一切可滿足於企事業單位的、綜合型的、能夠提高單位內部資訊交流、共享、流轉處理的和實現辦公自動化和提高工作效率的各種資訊化裝置和應用軟體。它不是孤立存在的,而是與企事業單位其它各類管理系統(如行政管理系統、人力資源管理系統、CRM系統、銷售管系統、ERP系統、財務系統、銷售會員管理系統)密切相關、有機整合。一個獨立存在的OA辦公自動化系統生命力及作用是薄弱的。——這也是目前最全面、最被認可的OA的概念。
55. 如何完成微信的介面配置? 以及配置失敗的原因?填寫的URL需要正確響應微信傳送的Token驗證
56. 如何獲取微信傳送的內容?$postStr = file_get_contents("php://input");
57.php 是單執行緒還是多執行緒單執行緒
58. 什麼是依賴注入,解決了那些問題1.什麼是依賴注入
依賴注入是控制反轉的一種實現,實現程式碼解耦,便於單元測試。因為它並不需要了解自身所依賴的類,而只需要知道所依賴的類實現了自身所需要的方法就可以了。
2.解決那些問題
依賴之間的解耦
單元測試,方便Mock
理解依賴注入與控制反轉 | Laravel China 社群...
59. 什麼是控制反轉控制反轉 是面向物件程式設計中的一種設計原則,可以用來減低計算機程式碼之間的耦合度。其中最常見的方式叫做依賴注入(Dependency Injection, DI), 還有一種叫"依賴查詢"(Dependency Lookup)。通過控制反轉,物件在被建立的時候,由一個調控系統內所有物件的外界實體,將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。
60. 伺服器之間如何共享 session61.session 和 cookie 的區別1.通過資料庫mysql共享sessiona.採用一臺專門的mysql伺服器來儲存所有的session資訊。使用者訪問隨機的web伺服器時,會去這個專門的資料庫伺服器check一下session的情況,以達到session同步的目的。缺點就是:依懶性太強,mysql伺服器無法工作,影響整個系統;b.將存放session的資料表與業務的資料表放在同一個庫。如果mysql做了主從,需要每一個庫都需要存在這個表,並且需要資料實時同步。缺點:用資料庫來同步session,會加大資料庫的負擔,資料庫本來就是容易產生瓶頸的地方,如果把session還放到資料庫裡面,無疑是雪上加霜。上面的二種方法,第一點方法較好,把放session的表獨立開來,減輕了真正資料庫的負擔 。但是session一般的查詢頻率較高,放在資料庫中查詢效能也不是很好,不推薦使用這種方式。2.通過cookie共享session把使用者訪問頁面產生的session放到cookie裡面,就是以cookie為中轉站。當訪問伺服器A時,登入成功之後將產生的session資訊存放在cookie中;當訪問請求分配到伺服器B時,伺服器B先判斷伺服器有沒有這個session,如果沒有,在去看看客戶端的cookie裡面有沒有這個session,如果cookie裡面有,就把cookie裡面的sessoin同步到web伺服器B,這樣就可以實現session的同步了。缺點:cookie的安全性不高,容易偽造、客戶端禁止使用cookie等都可能造成無法共享session。3.通過伺服器之間的資料同步session使用一臺作為使用者的登入伺服器,當用戶登入成功之後,會將session寫到當前伺服器上,我們通過指令碼或者守護程序將session同步到其他伺服器上,這時當用戶跳轉到其他伺服器,session一致,也就不用再次登入。缺陷:速度慢,同步session有延遲性,可能導致跳轉伺服器之後,session未同步。而且單向同步時,登入伺服器宕機,整個系統都不能正常執行。4.通過NFS共享Session選擇一臺公共的NFS伺服器(Network File Server)做共享伺服器,所有的Web伺服器登陸的時候把session資料寫到這臺伺服器上,那麼所有的session資料其實都是儲存在這臺NFS伺服器上的,不論使用者訪問那太Web伺服器,都要來這臺伺服器獲取session資料,那麼就能夠實現共享session資料了。缺點:依賴性太強,如果NFS伺服器down掉了,那麼大家都無法工作了,當然,可以考慮多臺NFS伺服器同步的形式。5.通過memcache同步sessionmemcache可以做分散式,如果沒有這功能,他也不能用來做session同步。他可以把web伺服器中的記憶體組合起來,成為一個"記憶體池",不管是哪個伺服器產生的sessoin都可以放到這個"記憶體池"中,其他的都可以使用。優點:以這種方式來同步session,不會加大資料庫的負擔,並且安全性比用cookie大大的提高,把session放到記憶體裡面,比從檔案中讀取要快很多。缺點:memcache把記憶體分成很多種規格的儲存塊,有塊就有大小,這種方式也就決定了,memcache不能完全利用記憶體,會產生記憶體碎片,如果儲存塊不足,還會產生記憶體溢位。6.通過redis共享sessionredis與memcache一樣,都是將資料放在記憶體中。區別的是redis會週期性的把更新的資料寫入磁碟或者把修改操作寫入追加的記錄檔案,並且在此基礎上實現了master-slave(主從)同步。
62.cookie 禁用後如何使用 sessioncookie session位置 瀏覽器 伺服器特點 方便和js交換 高效安全獲取使用者資訊 不依賴瀏覽器環境風險 使用者禁用cookie替代 url引數
63.PSR 規範1、設定php.ini的session.use_trans_sid = 1或者開啟enable-trans-sid選項,讓PHP自動跨頁傳遞session id。2、手動通過URL傳值、隱藏表單傳遞session id。3、用檔案、資料庫等形式儲存session_id,在跨頁過程中手動呼叫。
64.git 高階命令psr-1是基本程式碼規範psr-2是程式碼風格規範psr-3是日誌介面規範psr-4是為了解決自動載入psr-6是快取介面規範psr-7是HTTP訊息介面規範psr.phphub.org/
65.PHP 如何實現多繼承git rebase 在新位置重新提交git revert 撤銷commitgit reset 丟棄提交git stash 臨時存放工作目錄的改動git reflog 找回分支git-scm.com/docsPro Git(中文版)
1.介面單繼承
2.介面多繼承
3.trait
4.PHP 預設並不支援多執行緒,要使用多執行緒需要安裝 pthread 擴充套件,而要安裝 pthread 擴充套件
php.net/manual/zh/language.oop5.tra...
www.cnblogs.com/jkko123/p/6351604....
trait 示例
66. 程序,協程,執行緒<?phptrait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ }}class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */}class ezcReflectionFunction extends ReflectionFunction { use ezcReflectionReturnInfo; /* ... */}?>
67.php 反射程序是程式執行是的一個例項,程序能夠分配給cpu和記憶體等資源。程序一般包括指令集和系統資源,其中指令集就是你的程式碼,系統資源就是指cpu、記憶體以及I/O等。程序是一個程式在一個數據集中的一次動態執行過程,可以簡單理解為“正在執行的程式”,它是CPU資源分配和排程的獨立單位。程序一般由程式、資料集、程序控制塊三部分組成。我們編寫的程式用來描述程序要完成哪些功能以及如何完成;資料集則是程式在執行過程中所需要使用的資源;程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它來控制和管理程序,它是系統感知程序存在的唯一標誌。程序的侷限是建立、撤銷和切換的開銷比較大。執行緒是程序的一個執行流,執行緒不能分配系統資源,它是程序的一部分,比程序更小的獨立執行的單位。解釋一下:程序有兩個特性:一是資源的所有權,一個是排程執行(指令集),執行緒是排程執行中的一部分,是指程序執行過程的路徑,也叫程式執行流。執行緒有時候也叫輕量級程序。執行緒是在程序之後發展出來的概念。 執行緒也叫輕量級程序,它是一個基本的CPU執行單元,也是程式執行過程中的最小單元,由執行緒ID、程式計數器、暫存器集合和堆疊共同組成。一個程序可以包含多個執行緒。執行緒的優點是減小了程式併發執行時的開銷,提高了作業系統的併發效能,缺點是執行緒沒有自己的系統資源,只擁有在執行時必不可少的資源,但同一程序的各執行緒可以共享程序所擁有的系統資源,如果把程序比作一個車間,那麼執行緒就好比是車間裡面的工人。不過對於某些獨佔性資源存在鎖機制,處理不當可能會產生“死鎖”。協程是一種使用者態的輕量級執行緒,又稱微執行緒,英文名Coroutine,協程的排程完全由使用者控制。人們通常將協程和子程式(函式)比較著理解。子程式呼叫總是一個入口,一次返回,一旦退出即完成了子程式的執行。協程的起始處是第一個入口點,在協程裡,返回點之後是接下來的入口點。在python中,協程可以通過yield來呼叫其它協程。通過yield方式轉移執行權的協程之間不是呼叫者與被呼叫者的關係,而是彼此對稱、平等的,通過相互協作共同完成任務。其執行的大致流程如下:第一步,協程A開始執行。第二步,協程A執行到一半,進入暫停,通過yield命令將執行權轉移到協程B。第三步,(一段時間後)協程B交還執行權。第四步,協程A恢復執行。協程的特點在於是一個執行緒執行,與多執行緒相比,其優勢體現在:* 協程的執行效率非常高。因為子程式切換不是執行緒切換,而是由程式自身控制,因此,沒有執行緒切換的開銷,和多執行緒比,執行緒數量越多,協程的效能優勢就越明顯。* 協程不需要多執行緒的鎖機制。在協程中控制共享資源不加鎖,只需要判斷狀態就好了。Tips:利用多核CPU最簡單的方法是多程序+協程,既充分利用多核,又充分發揮協程的高效率,可獲得極高的效能。程序,執行緒,協程-阿里雲開發者社群www.php.cn/php-weizijiaocheng-39314...
http://php.net/manual/zh/book.reflection.php
69. 自定義選單1、自定義選單最多包括3個一級選單,每個一級選單最多包含5個二級選單。
2、一級選單最多4個漢字,二級選單最多7個漢字,多出來的部分將會以“...”代替。
3、建立自定義選單後,選單的重新整理策略是,在使用者進入公眾號會話頁或公眾號profile頁時,如果發現上一次拉取選單的請求在5分鐘以前,就會拉取一下選單,如果選單有更新,就會重新整理客戶端的選單。測試時可以嘗試取消關注公眾賬號後再次關注,則可以看到建立後的效果。
70. 寫出四個自定義選單按鈕型別71. 寫出四個接受訊息型別1、click:點選推事件使用者點選click型別按鈕後,微信伺服器會通過訊息介面推送訊息型別為event的結構給開發者(參考訊息介面指南),並且帶上按鈕中開發者填寫的key值,開發者可以通過自定義的key值與使用者進行互動;2、view:跳轉URL使用者點選view型別按鈕後,微信客戶端將會開啟開發者在按鈕中填寫的網頁URL,可與網頁授權獲取使用者基本資訊介面結合,獲得使用者基本資訊。3、scancode_push:掃碼推事件使用者點選按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操作後顯示掃描結果(如果是URL,將進入URL),且會將掃碼的結果傳給開發者,開發者可以下發訊息。4、scancode_waitmsg:掃碼推事件且彈出“訊息接收中”提示框使用者點選按鈕後,微信客戶端將調起掃一掃工具,完成掃碼操作後,將掃碼的結果傳給開發者,同時收起掃一掃工具,然後彈出“訊息接收中”提示框,隨後可能會收到開發者下發的訊息。5、pic_sysphoto:彈出系統拍照發圖使用者點選按鈕後,微信客戶端將調起系統相機,完成拍照操作後,會將拍攝的相片傳送給開發者,並推送事件給開發者,同時收起系統相機,隨後可能會收到開發者下發的訊息。6、pic_photo_or_album:彈出拍照或者相簿發圖使用者點選按鈕後,微信客戶端將彈出選擇器供使用者選擇“拍照”或者“從手機相簿選擇”。使用者選擇後即走其他兩種流程。7、pic_weixin:彈出微信相簿發圖器使用者點選按鈕後,微信客戶端將調起微信相簿,完成選擇操作後,將選擇的相片傳送給開發者的伺服器,並推送事件給開發者,同時收起相簿,隨後可能會收到開發者下發的訊息。8、location_select:彈出地理位置選擇器使用者點選按鈕後,微信客戶端將調起地理位置選擇工具,完成選擇操作後,將選擇的地理位置傳送給開發者的伺服器,同時收起位置選擇工具,隨後可能會收到開發者下發的訊息。9、media_id:下發訊息(除文字訊息)使用者點選media_id型別按鈕後,微信伺服器會將開發者填寫的永久素材id對應的素材下發給使用者,永久素材型別可以是圖片、音訊、視訊、圖文訊息。請注意:永久素材id必須是在“素材管理/新增永久素材”介面上傳後獲得的合法id。10、view_limited:跳轉圖文訊息URL使用者點選view_limited型別按鈕後,微信客戶端將開啟開發者在按鈕中填寫的永久素材id對應的圖文訊息URL,永久素材型別只支援圖文訊息。請注意:永久素材id必須是在“素材管理/新增永久素材”介面上傳後獲得的合法id。請注意!!! 3到8的所有事件,僅支援微信iPhone5.4.1以上版本,和Android5.4以上版本的微信使用者,舊版本微信使用者點選後將沒有迴應,開發者也不能正常接收到事件推送。9和10,是專門給第三方平臺旗下未微信認證(具體而言,是資質認證未通過)的訂閱號準備的事件型別,它們是沒有事件推送的,能力相對受限,其他型別的公眾號不必使用。
寫出四個接收訊息型別( 文字訊息 圖片訊息 語音訊息 視訊訊息 小視訊訊息 地理位置訊息 連結訊息 )。
72. 模板內容中部必須為多少個個 “關鍵詞名稱:關鍵詞內容引數” 的組合排列73. 在使用介面特別是傳送訊息時,對多媒體檔案、多媒體訊息的獲取和呼叫等操作,是通過 ( media_id ) 來進行的。模板訊息填寫時,必須嚴格遵守以下規則,否則也不能稽核通過:1、模板內容長度不能超過200個字元,且必須有至少10個固定文字或標點2、模版內容中,引數是可以在傳送時賦值的,引數必須以“{ {”開頭,以“.DATA} }”結尾)3、內容示例是將模板內容中的引數分別舉例後的模板內容的副本,必須嚴格填寫,用以幫助稽核人員詳細理解模板的用途4、引數中可以通過增加“\\n”,來實現換行,所以,一般建議將引數緊貼上一行,在需要時用“\\n”自行換行。通過該技巧,可以讓模板訊息的拓展能力變得非常強。5、模版內容中,第一句話需要為禮貌性、稱謂性的用語,這句話統一用{ {first.DATA} }引數來概括,以免此後稱謂習慣等修改後,需修改模版。6、模版內容的中部必須為2到5個“關鍵詞名稱:關鍵詞內容引數”(中文冒號)的組合排列,這樣顯示在微信客戶端中體驗最佳。7、模版內容中,末尾必須有{ {remark.DATA} }引數,該引數的作用是,使用者可以自行新增多行需要的內容。例如,模版中有姓名、時間這2個關鍵詞,但你需要姓名、時間、地點3個,則可以將地點這個關鍵詞的內容放入remark引數中(需要時可通過\\n來換行)。這樣就達到了用remark引數來擴充關鍵詞的作用,極大增強了模版的通用性。8、直接相連在一起的引數,應簡化為一個,避免模板內容過於複雜,因為賦值到兩個引數中的內容可以簡化地賦值到一個引數中。9、為了保持行業通用性,模板標題和模板內容中,不允許帶有品牌等關鍵詞,以免影響通用性。
74. 模板訊息不允許在使用者沒做任何操作或未經使用者同意接收的前提下,主動下發訊息給使用者素材管理新增臨時素材公眾號經常有需要用到一些臨時性的多媒體素材的場景,例如在使用介面特別是傳送訊息時,對多媒體檔案、多媒體訊息的獲取和呼叫等操作,是通過media_id來進行的。素材管理介面對所有認證的訂閱號和服務號開放。通過本介面,公眾號可以新增臨時素材(即上傳臨時多媒體檔案)。注意點:1、臨時素材media_id是可複用的。2、媒體檔案在微信後臺儲存時間為3天,即3天后media_id失效。3、上傳臨時素材的格式、大小限制與公眾平臺官網一致。圖片(image): 2M,支援PNG\\JPEG\\JPG\\GIF格式語音(voice):2M,播放長度不超過60s,支援AMR\\MP3格式視訊(video):10MB,支援MP4格式縮圖(thumb):64KB,支援JPG格式4、需使用https呼叫本介面。
75. 模板訊息內容不能做營銷、推廣模板訊息運營規範模板訊息用來幫助公眾號進行業務通知,是開發者在模板內容中設定引數(引數必須以“{ {”開頭,且以“.DATA} }”結尾),並在呼叫時為這些引數賦值併發送的訊息。模板訊息的定位是使用者觸發後的通知訊息,不允許在使用者沒做任何操作或未經使用者同意接收的前提下,主動下發訊息給使用者。目前在特殊情況下允許主動下發的訊息只有故障類和災害警示警告類通知,除此之外都要經過使用者同意或使用者有觸發行為才能下發模板訊息。公眾號只能在模板庫中按照自己的行業來選擇模板。如果模板庫中暫時沒有你想要的模板,則請你仔細閱讀以下內容後,在滿足要求的情況下,可以為你所在的行業貢獻新模板,幫助充實模板庫。
76. 對於臨時素材,每個素材會在開發者上傳或粉絲髮送到微信伺服器 3 天后自動刪除模板訊息運營規範處罰規則違規的判定原則1.發模板的行為:①模板訊息不能主動下發給沒有接受過服務的接收者(故障報警、災害報警和不涉及營銷推廣的通知除外)例:某使用者僅僅是關注公眾號,沒有和公眾號及其所屬主體有任何互動行為,卻無故收到該公眾號下發的模板訊息,屬於違規行為②模板訊息的傳送頻率不能太高騷擾接收者例:某使用者點選公眾號的自定義選單一次或其它觸發操作,連續收到3條或更多重複模板訊息,屬於違規行為2.模板的內容:①模板訊息內容不能做營銷、推廣、誘導分享及誘導下載APP例:某使用者購買某商品後,公眾號下發模板推銷其它商品,與使用者此次接受的服務無關,屬於違規②模板內容與模板標題或關鍵詞無關聯例:標題是刷卡成功通知,模板內容卻是推銷商品或活動通知,屬於違規③模板內容是營銷性質的群發活動公告通知例:標題小區物業通知,模板內容卻是群發活動的營銷資訊綜合上述兩項原則後判斷,主動下發、內容涉及惡意營銷、頻率過高惡意騷擾、以及模板引數內容亂填寫將被封介面處罰。對於多次使用同一模板違規的,將回收違規模板,不允許再使用,違規處罰將通過微信公眾平臺站內信告知運營者。
媒體檔案在微信後臺儲存時間為3天,即3天后media_id失效。
77. 含有明示或暗示使用者分享的文案、圖片、按鈕、彈層、彈窗,不屬於誘導分享78. 企業號、服務號、訂閱號區別誘導分享類內容1.1 要求使用者分享,分享後方可進行下一步操作,分享後方可知道答案等;1.2 含有明示或暗示使用者分享的文案、圖片、按鈕、彈層、彈窗等的,如:分享給好友、邀請好友一起完成任務等;1.3 通過利益誘惑,誘導使用者分享、傳播外鏈內容或者微信公眾帳號文章的,包括但不限於:現金獎勵、實物獎品、虛擬獎品(紅包、優惠券、代金券、積分、話費、流量、資訊等)、集贊、拼團、分享可增加抽獎機會、中獎概率,以積分或金錢利益誘導使用者分享、點選、點贊微信公眾帳號文章等;1.4 用誇張言語來脅迫、引誘使用者分享的。包括但不限於:“不轉不是中中國人”、“請好心人轉發一下”、“轉發後一生平安”、“轉瘋了”、“必轉”、“轉到你的朋友圈朋友都會感激你”等
79. 簡單描述微信公眾平臺接入80. 網頁授權使用者訊息流程步驟企業號 服務號 訂閱號訊息次數限制 最高每分鐘可群發 200 次 每月主動傳送訊息不超過 4 條 每天群發一條驗證關注者身份 通訊錄成員可關注 不論什麼微信使用者掃碼就可以關注 不論什麼微信使用者掃碼就可以關注訊息保密 訊息可轉發、分享。支援保密訊息,防成員轉發 訊息可轉發、分享 訊息可轉發、分享高階介面許可權 支援 支援 不支援定製應用 可依據須要定製應用,多個應用聚合成一個企業號 不支援。新增服務號須要又一次關注。 不支援,新增服務號須要又一次關注。
81. 描述小程式的框架1、引導使用者進入授權頁面同意授權,獲取code2、通過code換取網頁授權access_token(與基礎支援中的access_token不同)3、如果需要,開發者可以重新整理網頁授權access_token,避免過期4、通過網頁授權access_token和openid獲取使用者基本資訊(支援UnionID機制)
82. 檢測是否是微信瀏覽器框架名稱:MINA (MINA IS NOT APP) 是在微信中開發小程式的框架。框架結構 :MINA 框架由兩部分組成。檢視層 (View) 和邏輯層 (App Service)。框架特徵:響應式的資料繫結 (MINA 用響應式資料繫結的方式,在檢視層和邏輯層之間進行通訊。從某種程度上,可以看成是 MVVM 模式。)結構:MINA 程式包含一個描述整體程式的 app 和多個描述各自頁面的 page。一個 MINA 程式主體部分由三個檔案組成,必須放在根目錄下。Paste_Image.png一個 MINA 頁面由四個檔案組成。如下圖
判斷瀏覽器是否是微信內建瀏覽器主要通過UserAgent或者WeiXinJSBridge兩種方式進行
83. 瀏覽器核心有哪些?84.php-fpm 是什麼1、Trident核心:代表作品是IE,因IE捆綁在Windows中,所以佔有極高的份額,又稱為IE核心或MSHTML,此核心只能用於Windows平臺,且不是開源的。? ? 代表作品還有騰訊、Maxthon(遨遊)、360瀏覽器等。但由於市場份額比較大,曾經出現脫離了W3C標準的時候,同時IE版本比較多,? ??存在很多的相容性問題。2、Gecko核心:代表作品是Firefox,即火狐瀏覽器。因火狐是最多的使用者,故常被稱為firefox核心它是開源的,最大優勢是跨平臺,在Microsoft Windows、Linux、MacOs X等主 ??要作業系統中使用。? ?Mozilla是網景公司在第一次瀏覽器大戰敗給微軟之後建立的。有興趣的同學可以了解一下瀏覽器大戰3、Webkit核心:代表作品是Safari、曾經的Chrome,是開源的專案。4、Presto核心:代表作品是Opera,Presto是由Opera Software開發的瀏覽器排版引擎,它是世界公認最快的渲染速度的引擎。在13年之後,Opera宣佈加入谷歌陣營,棄用了 ? ?Presto5、Blink核心:由Google和Opera Software開發的瀏覽器排版引擎,2013年4月釋出。現在Chrome核心是Blink。谷歌還開發了自己的JS引擎,V8,使JS執行速度極大地提高了
85.ngnix 反向代理PHP-FPM(FastCGI Process Manager:FastCGI程序管理器)是一個PHPFastCGI管理器,對於PHP 5.3.3之前的php來說,是一個補丁包 [1] ,旨在將FastCGI程序管理整合進PHP包中。如果你使用的是PHP5.3.3之前的PHP的話,就必須將它patch到你的PHP原始碼中,在編譯安裝PHP後才可以使用。相對Spawn-FCGI,PHP-FPM在CPU和記憶體方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。php-fpm是 FastCGI 的實現,並提供了程序管理的功能。程序包含 master 程序和 worker 程序兩種程序。master 程序只有一個,負責監聽埠,接收來自 Web Server 的請求,而 worker 程序則一般有多個(具體數量根據實際需要配置),每個程序內部都嵌入了一個 PHP 直譯器,是 PHP 程式碼真正執行的地方。使用PHP-FPM來控制PHP-CGI的FastCGI程序/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}--start 啟動php的fastcgi程序--stop 強制終止php的fastcgi程序--quit 平滑終止php的fastcgi程序--restart 重啟php的fastcgi程序--reload 重新平滑載入php的php.ini--logrotate 重新啟用log檔案
86.Nginx 正向代理反向代理(Reverse Proxy)方式是指以代理伺服器來接受Internet上的連線請求,然後將請求轉發給內部網路上的伺服器;並將從伺服器上得到的結果返回給Internet上請求連線的客戶端,此時代理伺服器對外就表現為一個伺服器客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理 的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容 原本就是它自己的一樣。作用:1.保護和隱藏原始資源伺服器2.負載均衡(需要多個)3.過配置快取功能加速Web請求:可以快取真實Web伺服器上的某些靜態資源,減輕真實Web伺服器的負載壓力通常的代理伺服器,只用於代理內部網路對 Internet 的連線請求,客戶機必須指定代理伺服器,並將本來要直接傳送到 Web 伺服器上的 http 請求傳送到代理伺服器中。當一個代理伺服器能夠代理外部網路上的主機,訪問內部網路時,這種代理服務的方式稱為反向代理服務。blog.csdn.net/tsummerb/article/det...
87. 什麼是中介軟體正向代理,也就是傳說中的代理,他的工作原理就像一個跳板, 簡單的說, 我是一個使用者,我訪問不了某網站,但是我能訪問一個代理伺服器 這個代理伺服器呢,他能訪問那個我不能訪問的網站 於是我先連上代理伺服器,告訴他我需要那個無法訪問網站的內容 代理伺服器去取回來,然後返回給我正向代理 是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。1.訪問本無法訪問的伺服器2.正向代理提速(現在不流行)3.快取作用4.客戶端訪問授權5.隱藏訪問者的行蹤訪問 google.com 這個例子www.php.cn/php-weizijiaocheng-39315...
88.trait 優先順序過濾Http請求過濾進入應用的HTTP請求物件(Request)和完善離開應用的HTTP響應物件(Reponse)的作用, 而且可以通過應用多箇中間件來層層過濾請求、逐步完善相應。這樣就做到了程式的解耦,如果沒有中介軟體那麼我們必須在控制器中來完成這些步驟,這無疑會造成控制器的臃腫。請求->中介軟體->中介軟體->應用->中介軟體->中介軟體->響應中介軟體的設計使用了裝飾器模式www.php.cn/php-weizijiaocheng-38647...
在trait繼承中,優先順序依次是:來自當前類的成員覆蓋了 trait 的方法,而 trait 則覆蓋了被繼承的方法。
89. 索引使用經典場景For example: class A{ public function sayHello(){ echo "A"; } } trait B{ public function sayHello(){ parent::sayHello(); echo "B"; } } class C extends A{ use B; } $c=new C(); $c->sayHello(); 上述列印結果是:AB
90. 存在卻不能使用的場景1.匹配全值2.匹配範圍3.最左字首4.搜尋索引5.匹配列字首
91. 軟體開發流程1.以%開頭的LIKE檔案2.資料型別出現隱式轉換3.多列索引查詢條件不包括最左部分,即不滿足左原則4.使用索引比全表掃面慢5.使用索引比全表掃描慢6.用or分開的條件7.條件索引使用函式
92. 訊息佇列 MQ需求分析1.相關係統分析員向用戶初步了解需求,然後用相關的工具軟體列出要開發的系統的大功能模組,每個大功能模組有哪些小功能模組,對於有些需求比較明確相關的介面時,在這一步裡面可以初步定義好少量的介面。2.系統分析員深入了解和分析需求,根據自己的經驗和需求用WORD或相關的工具再做出一份文件系統的功能需求文件。這次的文件會清楚列出系統大致的大功能模組,大功能模組有哪些小功能模組,並且還列出相關的介面和介面功能。3.系統分析員向用戶再次確認需求。概要設計首先,開發者需要對軟體系統進行概要設計,即系統設計。概要設計需要對軟體系統的設計進行考慮,包括系統的基本處理流程、系統的組織結構、模組劃分、功能分配、介面設計、執行設計、資料結構設計和出錯處理設計等,為軟體的詳細設計提供基礎。詳細設計在概要設計的基礎上,開發者需要進行軟體系統的詳細設計。在詳細設計中,描述實現具體模組所涉及到的主要演算法、資料結構、類的層次結構及呼叫關係,需要說明軟體系統各個層次中的每一個程式(每個模組或子程式)的設計考慮,以便進行編碼和測試。應當保證軟體的需求完全分配給整個軟體。詳細設計應當足夠詳細,能夠根據詳細設計報告進行編碼。編碼在軟體編碼階段,開發者根據《軟體系統詳細設計報告》中對資料結構、演算法分析和模組實現等方面的設計要求,開始具體的編寫程式工作,分別實現各模組的功能,從而實現對目標系統的功能、效能、介面、介面等方面的要求。在規範化的研發流程中,編碼工作在整個專案流程裡最多不會超過1/2,通常在1/3的時間,所謂磨刀不誤砍柴功,設計過程完成的好,編碼效率就會極大提高,編碼時不同模組之間的進度協調和協作是最需要小心的,也許一個小模組的問題就可能影響了整體進度,讓很多程式設計師因此被迫停下工作等待,這種問題在很多研發過程中都出現過。編碼時的相互溝通和應急的解決手段都是相當重要的,對於程式設計師而言,bug永遠存在,你必須永遠面對這個問題,大名鼎鼎的微軟,可曾有連續三個月不發補丁的時候嗎?從來沒有!測試測試編寫好的系統。交給使用者使用,使用者使用後一個一個的確認每個功能。軟體測試有很多種:按照測試執行方,可以分為內部測試和外部測試;按照測試範圍,可以分為模組測試和整體聯調;按照測試條件,可以分為正常操作情況測試和異常情況測試;按照測試的輸入範圍,可以分為全覆蓋測試和抽樣測試。以上都很好理解,不再解釋。總之,測試同樣是專案研發中一個相當重要的步驟,對於一個大型軟體,3個月到1年的外部測試都是正常的,因為永遠都會有不可預料的問題存在。完成測試後,完成驗收並完成最後的一些幫助文件,整體專案才算告一段落,當然日後少不了升級,修補等等工作,只要不是想通過一錘子買賣騙錢,就要不停的跟蹤軟體的運營狀況並持續修補升級,直到這個軟體被徹底淘汰為止。軟體交付在軟體測試證明軟體達到要求後,軟體開發者應向用戶提交開發的目標安裝程式、資料庫的資料字典、《使用者安裝手冊》、《使用者使用指南》、需求報告、設計報告、測試報告等雙方合同約定的產物。《使用者安裝手冊》應詳細介紹安裝軟體對執行環境的要求、安裝軟體的定義和內容、在客戶端、伺服器端及中介軟體的具體安裝步驟、安裝後的系統配置。《使用者使用指南》應包括軟體各項功能的使用流程、操作步驟、相應業務介紹、特殊提示和注意事項等方面的內容,在需要時還應舉例說明。驗收使用者驗收。維護根據使用者需求的變化或環境的變化,對應用程式進行全部或部分的修改。
93. 千萬級別的資料庫經緯度,批量替換成地址“訊息佇列”是在訊息的傳輸過程中儲存訊息的容器。在專案中,將一些無需即時返回且耗時的操作提取出來,進行了非同步處理,而這種非同步處理的方式大大的節省了伺服器的請求響應時間,從而提高了系統的吞吐量。RabbitMQ支援訊息的持久化,也就是資料寫在磁碟上,為了資料安全考慮,我想大多數使用者都會選擇持久化。訊息佇列持久化包括3個部分:(1)exchange持久化,在宣告時指定durable => 1(2)queue持久化,在宣告時指定durable => 1(3)訊息持久化,在投遞時指定delivery_mode => 2(1是非持久化)如果exchange和queue都是持久化的,那麼它們之間的binding也是持久化的。如果exchange和queue兩者之間有一個持久化,一個非持久化,就不允許建立繫結。
1.拆表百萬為一單位
2.批量提交和讀取使用yield協程非同步操作
94.Redis 有哪些資料結構?95. 使用過 Redis 分散式鎖麼,它是什麼回事?字串 String、字典 Hash、列表 List、集合 Set、有序集合 SortedSet。如果你是 Redis 中高階使用者,還需要加上下面幾種資料結構 HyperLogLog、Geo、Pub/Sub。如果你說還玩過 Redis Module,像 BloomFilter,RedisSearch,Redis-ML,面試官得眼睛就開始發亮了。
96. 假如 Redis 裡面有 1 億個 key,其中有 10w 個 key 是以某個固定的已知的字首開頭的,如果將它們全部找出來?先拿 setnx 來爭搶鎖,搶到之後,再用 expire 給鎖加一個過期時間防止鎖忘記了釋放。這時候對方會告訴你說你回答得不錯,然後接著問如果在 setnx 之後執行 expire 之前程序意外 crash 或者要重啟維護了,那會怎麼樣?這時候你要給予驚訝的反饋:唉,是喔,這個鎖就永遠得不到釋放了。緊接著你需要抓一抓自己得腦袋,故作思考片刻,好像接下來的結果是你主動思考出來的,然後回答:我記得 set 指令有非常複雜的引數,這個應該是可以同時把 setnx 和 expire 合成一條指令來用的!對方這時會顯露笑容,心裡開始默唸:摁,這小子還不錯。
97. 使用過 Redis 做非同步佇列麼,你是怎麼用的?使用 keys 指令可以掃出指定模式的 key 列表。對方接著追問:如果這個 redis 正在給線上的業務提供服務,那使用 keys 指令會有什麼問題?這個時候你要回答 redis 關鍵的一個特性:redis 的單執行緒的。keys 指令會導致執行緒阻塞一段時間,線上服務會停頓,直到指令執行完畢,服務才能恢復。這個時候可以使用 scan 指令,scan 指令可以無阻塞的提取出指定模式的 key 列表,但是會有一定的重複概率,在客戶端做一次去重就可以了,但是整體所花費的時間會比直接用 keys 指令長。
98. 如果有大量的 key 需要設定同一時間過期,一般需要注意什麼?一般使用 list 結構作為佇列,rpush 生產訊息,lpop 消費訊息。當 lpop 沒有訊息的時候,要適當 sleep 一會再重試。如果對方追問可不可以不用 sleep 呢?list 還有個指令叫 blpop,在沒有訊息的時候,它會阻塞住直到訊息到來。如果對方追問能不能生產一次消費多次呢?使用 pub/sub 主題訂閱者模式,可以實現 1:N 的訊息佇列。如果對方追問 pub/sub 有什麼缺點?在消費者下線的情況下,生產的訊息會丟失,得使用專業的訊息佇列如 rabbitmq 等。如果對方追問 redis 如何實現延時佇列?我估計現在你很想把面試官一棒打死如果你手上有一根棒球棍的話,怎麼問的這麼詳細。但是你很剋制,然後神態自若的回答道:使用 sortedset,拿時間戳作為 score,訊息內容作為 key 呼叫 zadd 來生產訊息,消費者用 zrangebyscore 指令獲取 N 秒之前的資料輪詢進行處理。到這裡,面試官暗地裡已經對你豎起了大拇指。但是他不知道的是此刻你卻豎起了中指,在椅子背後。
如果大量的 key 過期時間設定的過於集中,到過期的那個時間點,redis 可能會出現短暫的卡頓現象。一般需要在時間上加一個隨機值,使得過期時間分散一些。
99.Redis 如何做持久化的?100.Pipeline 有什麼好處,為什麼要用 pipeline?bgsave 做映象全量持久化,aof 做增量持久化。因為 bgsave 會耗費較長時間,不夠實時,在停機的時候會導致大量丟失資料,所以需要 aof 來配合使用。在 redis 例項重啟時,優先使用 aof 來恢復記憶體的狀態,如果沒有 aof 日誌,就會使用 rdb 檔案來恢復。如果再問 aof 檔案過大恢復時間過長怎麼辦?你告訴面試官,Redis 會定期做 aof 重寫,壓縮 aof 檔案日誌大小。如果面試官不夠滿意,再拿出殺手鐗答案,Redis4.0 之後有了混合持久化的功能,將 bgsave 的全量和 aof 的增量做了融合處理,這樣既保證了恢復的效率又兼顧了資料的安全性。這個功能甚至很多面試官都不知道,他們肯定會對你刮目相看。如果對方追問那如果突然機器掉電會怎樣?取決於 aof 日誌 sync 屬性的配置,如果不要求效能,在每條寫指令時都 sync 一下磁碟,就不會丟失資料。但是在高效能的要求下每次都 sync 是不現實的,一般都使用定時 sync,比如 1s1 次,這個時候最多就會丟失 1s 的資料。如果對方追問 bgsave 的原理是什麼?你給出兩個詞彙就可以了,fork 和 cow。fork 是指 redis 通過建立子程序來進行 bgsave 操作,cow 指的是 copy on write,子程序建立後,父子程序共享資料段,父程序繼續提供讀寫服務,寫髒的頁面資料會逐漸和子程序分離開來。
可以將多次 IO 往返的時間縮減為一次,前提是 pipeline 執行的指令之間沒有因果相關性。使用 redis-benchmark 進行壓測的時候可以發現影響 redis 的 QPS 峰值的一個重要因素是 pipeline 批次指令的數目。