【精選】Mysql B-Tree和B+Tree的結構?
1.(int)'0xff'為什么是0?
0xff是字符串 字符串轉int 第一個是0 可以轉換成功 xff轉換失敗
2. PHP中10進制與16進制互轉
#10轉16 dechex(52558);或 gmp_strval(52558,16);
#16轉10 hexdec('0xcd4e');
3. 通過aux命令查詢cup和內存前十的記錄
ps -aux --sort -pcpu,-pmem | head -n 10
參數:
pcpu是CPU利用率
pmem是內存利用率
--sort -是降序,+是升序
4. 面向對象基本原則?
單一職責原則SRP(Single Responsibility Principle) :是指一個類的功能要單一,不能包羅萬象。
開放封閉原則OCP(Open-Close Principle) 一個模塊在擴展性方面應該是開放的而在更改性方面應該是封閉的。
替換原則(the Liskov Substitution Principle LSP) :子類應當可以替換父類并出現在父類能夠出現的任何地方。
依賴倒置原則(the Dependency Inversion Principle DIP) 具體依賴抽象,上層依賴下層。
接口分離原則(the Interface Segregation Principle ISP) 模塊間要通過抽象接口隔離開,而不是通過具體的類強耦合起來。
5. 設計模式分類,設計原則
創(chuàng)建型模式、結構型模式、行為模式
創(chuàng)建型模式,就是創(chuàng)建對象的模式,抽象了實例化的過程。
簡單工廠模式(Simple Factory)
工廠方法模式(Factory Method)
抽象工廠模式(Abstract Factory)
創(chuàng)建者模式(Builder)
原型模式(Prototype):利用原型實例來“克隆”創(chuàng)建新的對象。
單例模式(Singleton)
結構型模式:處理類或對象間的組合。是為解決怎樣組裝現有的類,設計它們的交互方式,從而達到實現一定的功能目的。
外觀模式/門面模式(Facade門面模式)
適配器模式(Adapter)
代理模式(Proxy)
裝飾模式(Decorator)
橋接模式(Bridge)
組合模式(Composite):
享元模式(Flyweight)
行為型模式涉及到算法和對象間職責的分配,行為模式描述了對象和類的模式,以及它們之間的通信模式。
模板方法模式(Template Method)
觀察者模式(Observer)
狀態(tài)模式(State)
策略模式(Strategy)
職責鏈模式(Chain of Responsibility)
命令模式(Command)
訪問者模式(Visitor)
調停者模式(Mediator)
備忘錄模式(Memento)
迭代器模式(Iterator)
解釋器模式(Interpreter)
6. PHP一次web請求的流程
瀏覽器發(fā)送URL請求
DNS解析域名
獲取到IP后開始訪問IP和Port
開發(fā)發(fā)送TCP請求到Nginx
Nginx解析server name ,然后發(fā)送到 php-fpm管理進程
php-fpm把具體的請求交給PHP執(zhí)行
7. PHP靜態(tài)變量有幾種?
靜態(tài)變量屬于靜態(tài)存儲方式,其存儲空間為內存中的靜態(tài)數據區(qū)(在靜態(tài)存儲區(qū)內分配存儲單元)。
靜態(tài)變量可以在任何可以申請的地方申請,一旦申請成功后,它將不再接受其他的同樣申請。
靜態(tài)變量的值可變,但不會隨著函數的調用和退出而發(fā)生變化。
靜態(tài)局部變量:static類型的內部變量是一種只能在某個特定函數中使用,但一直占據存儲空間的變量。
靜態(tài)變量的初始值為0。
靜態(tài)全局變量:全局變量(外部變量)的聲明之前再冠以static 就構成了靜態(tài)的全局變量。
7.局部變量和靜態(tài)局部變量,全局變量和靜態(tài)全局變量的區(qū)別?
把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式,即改變了它的生存期。
把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域(靜態(tài)全局變量只在定義該變量的源文件內有效),限制了它的使用范圍。
9.array_merge和array+array的區(qū)別?
$a=[0,1,2,3];
$b=[1,2,3,4,5];
$a+=$b;
echo json_encode($a);
//[0,1,2,3,5]
array_merge()不會覆蓋掉原來的值
array+array:合并數組則會把最先出現的值作為最終結果返回,拋棄掉后面的數組擁有相同鍵名的值。
10.foreach引用傳值結果
<?php
$a=[1,2,3];
foreach($a as &$v){} //$v 仍然引用到最后一項 $a[2]
foreach($a as $v){} //$a[2]會遍歷$a中的值,$v=1,$v=2,$v=2
echo json_encode($a);//[1,2,2]
11.PHP的執(zhí)行過程?
掃描(scanning) :將index.php內容變成一個個語言片段(token)
解析(parsing) :將一個個語言片段變成有意義的表達式
編譯(complication):將表達式編譯成中間碼(opcode)
執(zhí)行(execution):將中間碼一條一條的執(zhí)行
輸出(output buffer):將要輸出的內容輸出到緩沖區(qū)
12.PHP的變量存儲
php中變量存在于zval變量容器中。
zval結構:變量類型,變量值,is_ref字段,refcount字段。
is_ref:是個bool值,用來區(qū)分變量是否屬于引用集合,表示變量是否有一個以上的別名。
refcount:計數器,表示指向這個zval變量容器的變量個數。
當refcount值為1時,is_ref的值為false。因為refcount為1,此變量不可能有多個別名,也就不存在引用了。
將一個變量 = 賦值給另一個變量時,不會立即為新變量分配內存空間,而是在原變量的zval中給refcount加1。
有當原變量或者發(fā)生改變時,才會為新變量分配內存空間,同時原變量的refcount減 1 。
如果unset原變量,新變量直接就使用原變量的zval而不是重新分配。
&引用賦值時,原變量的is_ref 變?yōu)?,refcount 加1. 如果給一個變量&賦值,之前 = 賦值的變量會分配空間。
13.PHP環(huán)狀引用內存泄漏
<?php
$a = array( 'one' );
$a[] = &$a;
xdebug_debug_zval( 'a' );//a:(refcount=2, is_ref=1),
?>
PHP5.2以前,refcount為0,則變量的空間可以被釋放,否則就不釋放
unset($a); //refcount減1變?yōu)?,不會回收
14.PHP5.3的GC垃圾回收機制
算法把所有可能根(possible roots 都是zval變量容器),放在根緩沖區(qū)(root buffer)中(稱為疑似垃圾),在根緩沖區(qū)滿了時,對緩沖區(qū)內部所有不同的變量容器執(zhí)行垃圾回收操作。
或者我們在腳本中使用gc_collect_cycles,強制回收緩沖區(qū)中的垃圾。
如果一個引用計數refcount增加,它將繼續(xù)被使用,當然就不再在垃圾中。
如果引用計數refcount減少到0,所在變量容器將被清除(free),不會進入緩沖區(qū)。
僅僅在引用計數減少到非零值時,才會產生垃圾周期(garbage cycle),將其放入緩沖區(qū)。在一個垃圾周期中,通過檢查引用計數是否減1,并且檢查哪些變量容器的引用次數是零,來發(fā)現哪部分是垃圾。
或者我們在腳本中使用gc_collect_cycles()強制回收緩沖區(qū)中的垃圾。
15. PHP開啟/關閉垃圾回收
默認的,PHP的垃圾回收機制是打開的,然后有個 php.ini 設置允許你修改它:zend.enable_gc
在程序中使用gc_enable() 和 gc_disable()開啟和關閉
16. XSS攻擊及防御機制
Xss(cross-site scripting)跨站腳本攻擊:指攻擊者往Web頁面里插入惡意html標簽或javascript代碼。
防御機制:
轉義標簽(htmlspecialchars)
限制字符(reg\_match)
過濾(preg\_replace)
cookie設置HTTPOnly(js無法讀取)
模板引擎
17.CSRF攻擊及防御機制
CSRF跨站點請求偽造(Cross—Site Request Forgery):
CSRF攻擊攻擊原理及過程如下:
用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;
在用戶信息通過驗證后,網站A產生Cookie信息并返回給瀏覽器,此時用戶登錄網站A成功,可以正常發(fā)送請求到網站A;
用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;
網站B接收到用戶請求后,返回一些攻擊性代碼,并發(fā)出一個請求要求訪問第三方站點A;
瀏覽器在接收到這些攻擊性代碼后,根據網站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網站A發(fā)出請求。網站A并不知道該請求其實是由B發(fā)起的,所以會根據用戶C的Cookie信息以C的權限處理該請求,導致來自網站B的惡意代碼被執(zhí)行。
防御CSRF攻擊:目前防御 CSRF 攻擊主要有三種策略:驗證 HTTP Referer 字段;在請求地址中添加 token 并驗證;在 HTTP 頭中自定義屬性并驗證。
18. 有一個文件ip.txt,每行一條ip記錄共若干行,如何統(tǒng)計出現次數最多的前3個ip及其次數?
sort -nr ip.txt | uniq -c | sort -nr | head -n 3
uniq -c filename用于去除冗余并統(tǒng)計每一行出現的次數。
sort -r 指逆序排序 -n指按數字字符串大小排序
head -n 指定數量
注:第一次排序,把ip按順序排列,因為第二個uniq只會合并相鄰項 第二次排序,才是把ip按出現次序大小從大到小排列 最后取前三項結果。
19. Mysql B-Tree和B+Tree的結構?
B-Tree:
d>=2,即B-Tree的度(對于一個節(jié)點,有n個邊和它相連,就叫做度數=n);
h為B-Tree的高;
每個非葉子結點由n-1個key和n個指針組成,其中d<=n<=2d;
每個葉子結點至少包含一個key和兩個指針,最多包含2d-1個key和2d個指針,葉結點的指針均為NULL;
所有葉結點都在同一層,深度等于樹高h;
key和指針相互間隔,結點兩端是指針;
一個結點中的key從左至右遞增排列;
一個度為d的B-Tree,設其索引N個key,則其樹高h的上限為logd((N+1)/2),檢索一個key,其查找結點個數的漸進復雜度為O(logdN)
B+Tree:
每個結點的指針上限為2d而不是2d+1(指針個數和 key的個數相同)。
非葉子結點不存儲data,只存儲key;
葉子結點不存儲指針。
作者:碼農編程進階筆記
歡迎關注微信公眾號 :碼農編程進階筆記