Linux
? shell統(tǒng)計日志中單接口訪問量
mysql
? Mysql是不支持嵌套事務(wù)的,開啟了一個事務(wù)的情況下,再開啟一個事務(wù)嚷狞,會隱式的提交上一個事務(wù)块促。
? mysql事務(wù)隔離級別
redis
? redis的key過期機制
? redis的持久化
php
? 寫一個算法模擬抽取撲克牌的過程。例如床未,如果有N張牌竭翠,每次抽取一張(等概率的)直到抽完所有的牌,返回抽取的過程薇搁。
? 最佳答案:1. 初始隨機范圍是數(shù)組的長度2. 每次都隨機出的要抽出的牌然后和最后的那張牌進行交換 (30%)3. 然后隨機范圍-1 (40%)4. 繼續(xù)抽取斋扰,直到抽取隨機范圍-1是0為止。 (100%)這是O(n)的算法復雜度啃洋。
? foreach传货, for , while 循環(huán)訪問數(shù)組宏娄,哪個效率最高问裕?為什么?(foreach孵坚,hash下標)
? php 讀取文件的方式有幾種粮宛? 都有什么區(qū)別?(file卖宠,fopen巍杈,file_get_contents,其余請補充)
1.fseek扛伍,在文件指針中定位筷畦,可以不是順序讀取,fseek($fh, 1024);//返回前1024字節(jié)
2.file蜒秤,將整個文件讀入到一個數(shù)組中返回 file()
3.file_get_contents(),以字符串形式獲取文件的內(nèi)容
4.fread—讀取文件(可安全用于二進制文件),從文件指針handle讀取最多l(xiāng)ength個字節(jié),返回所讀取的字符串亚斋, 或者在失敗時返回FALSE作媚。
5.fgets,從文件指針中讀取一行,從handle指向的文件中讀取一行并返回長度最多為length- 1 字節(jié)的字符串
6.fgetss帅刊,文件指針中讀取一行并過濾掉 HTML 標記纸泡,從handle指向的文件中大讀取length- 1 個字節(jié)的字符,并過濾了所有的 HTML 和 PHP 代碼赖瞒。
? PHP empty女揭、isset、is_null的區(qū)別(empty會誤傷0和空串)
1.$a=''栏饮,isset($a)返回true吧兔,is_null返回false
特殊的NULL值表示一個變量沒有值。NULL類型唯一可能的值就是NULL
在下列情況下一個變量被認為是NULL:
1.被賦值為NULL 2.未被賦值 3.被unset
? a=null;a=null;b=NULL a==a==b 和 a===a===b的結(jié)果是什么袍嬉;
? a=″,a=″,a==null 和 is_null($a)結(jié)果是什么境蔼?
? 一個多維數(shù)組灶平,請寫一個遞歸函數(shù)輸出所有內(nèi)容并返回數(shù)組內(nèi)元素的總個數(shù)(static 變量);
? 刪除數(shù)組中的元素的方法有哪些箍土?它們的優(yōu)缺點是什么逢享?(uset,array_splice(自動下標,會重排吴藻,uset不會))
1.array_splice—去掉數(shù)組中的某一部分并用其它值取代瞒爬,鍵名不被保留
2.unset,去掉一個變量沟堡,需要知道你想取到的變量是哪個,可以用array_search搜索元素侧但,數(shù)組下標不會變化,
3.去除多個元素,取差集弦叶,array_diff俊犯,array_diff_key,去除多個值相同的元素伤哺,先找到同名的鍵燕侠,array_keys($arr,$search_value)
關(guān)于去除數(shù)組元素有一個非常棒的帖子:https://stackoverflow.com/questions/369602/php-delete-an-element-from-an-array
? PHP中的函數(shù)區(qū)分大小寫嗎?(不區(qū)分)
? if(){} else if(){} 立莉;if(){} elseif(){} 绢彤;if(){} Else (){}哪個對?
php的條件語句有以下幾種:
1蜓耻、if 語句- 如果指定條件為真茫舶,則執(zhí)行代碼
2、if...else 語句- 如果條件為 true刹淌,則執(zhí)行代碼饶氏;如果條件為 false,則執(zhí)行另一段代碼
3有勾、if...elseif....else 語句- 選擇若干段代碼塊之一來執(zhí)行
4疹启、switch 語句- 語句多個代碼塊之一來執(zhí)行
? php 有幾個魔術(shù)方法亏栈,都有什么用唉铜?(__constraction,__set,__get,__call,__callStatic, __construct …..)
16個魔術(shù)方法(https://segmentfault.com/a/1190000007250604),8個魔術(shù)常量
? empty和unset有什么區(qū)別
1.empty() 判斷一個變量是否被認為是空的豪直,當一個變量并不存在雇逞,或者它的值等同于FALSE荤懂,那么它會被認為不存在。isset—檢測變量是否已設(shè)置并且非NULL节仿。
2、當 $id=0 時掉蔬,用empty() 和 isset() 來檢測變量 $id 是否已經(jīng)配置查近,兩都將返回不同的值—— empty() 認為沒有配置,isset() 能夠取得 $id 的值
? foo()和@foo()有什么區(qū)別
1.foo()會報錯誤挤忙,@foo()隱藏錯誤。
2.PHP 支持一個錯誤控制運算符:@册烈。當將其放置在一個 PHP 表達式之前,該表達式可能產(chǎn)生的任何錯誤信息都被忽略掉赏僧。
注意: @ 運算符只對表達式有效。對新手來說一個簡單的規(guī)則就是:如果能從某處得到值淀零,就能在它前面加上 @ 運算符。
例如驾中,可以把它放在變量唉堪,函數(shù)和include()調(diào)用肩民,常量,等等之前持痰。不能把它放在函數(shù)或類的定義之前,也不能用于條件結(jié)構(gòu)例如 if 和 foreach 等工窍。
? php中object和array的相互轉(zhuǎn)化
1.答案:https://blog.longqiuhong.com/archives/123
? 用php寫一個singleton
1.實例設(shè)置private割卖,構(gòu)造函數(shù)private,外部訪問public的方法要設(shè)置成靜態(tài)方法患雏,內(nèi)存只有一處存放
2.私有化__clone()/__wakeup()方法
? 類的靜態(tài)屬性和靜態(tài)方法鹏溯,需要通過什么樣的方式去訪問?(對象可以訪問靜態(tài)方法纵苛,不能訪問靜態(tài)成員剿涮?)
參考:https://laravel-china.org/articles/3652/static-static-attribute-and-static-method-call-in-php
(1)言津、靜態(tài)屬性不需要實例化即可調(diào)用攻人。因為靜態(tài)屬性存放的位置是在類里,調(diào)用方法為"類名::屬性名"悬槽;
(2)怀吻、靜態(tài)方法不需要實例化即可調(diào)用。同上
(3)初婆、靜態(tài)方法不能調(diào)用非靜態(tài)屬性蓬坡。因為非靜態(tài)屬性需要實例化后猿棉,存放在對象里;
(4)屑咳、靜態(tài)方法可以調(diào)用非靜態(tài)方法萨赁,使用 self 關(guān)鍵詞。php里兆龙,一個方法被self:: 后杖爽,它就自動轉(zhuǎn)變?yōu)殪o態(tài)方法;php日志中會有一條提示紫皇,php不贊成這么使用慰安,第一次看到這種類型,看的比較多的是php Fatal聪铺、php warning這些化焕,PHP Deprecated:? Non-static method Human::say() should not be called statically in /home/map/lihuiqin/script/tmp/staticFunc.php on line 18
(5)、調(diào)用類的靜態(tài)函數(shù)時不會自動調(diào)用類的構(gòu)造函數(shù)铃剔。
? this 撒桨,self和parent的區(qū)別是什么?
this是指向?qū)ο髮嵗囊粋€指針番宁,在實例化的時候來確定指向元莫;self是對類本身的一個引用,一般用來指向類中的靜態(tài)變量蝶押;parent是對父類的引用踱蠢,一般使用parent來調(diào)用父類的構(gòu)造函數(shù)。
? 定義常量的方式有幾種棋电?都有什么區(qū)別茎截? (define和const的區(qū)別是什么?)
(1).const用于類成員變量的定義赶盔,一經(jīng)定義企锌,不可修改撕攒。define不可用于類成員變量的定義,可用于全局常量抖坪。
(2).const可在類中使用擦俐,define不能握侧。
(3).const不能在條件語句中定義常量嘿期。
(4).const采用一個普通的常量名稱备徐,define可以采用表達式作為名稱甚颂。
(5).const只能接受靜態(tài)的標量西设,而define可以采用任何表達式。
(6).const定義的常量時大小寫敏感的棠笑,而define可通過第三個參數(shù)(為true表示大小寫不敏感)來指定大小寫是否敏感禽绪。
? PDO是什么印屁?有什么作用?
PHP DATA OBJECT,數(shù)據(jù)庫訪問抽象層从橘,統(tǒng)一各種數(shù)據(jù)庫的訪問接口础钠。
PDO是一個“數(shù)據(jù)庫訪問抽象層”旗吁,作用是統(tǒng)一各種數(shù)據(jù)庫的訪問接口,與mysql和mysqli的函數(shù)庫相比香府,PDO讓跨數(shù)據(jù)庫的使用更具有親和力码倦;與ADODB和MDB2相比叹洲,PDO更高效工禾。目前而言蝗柔,實現(xiàn)“數(shù)據(jù)庫抽象層”任重而道遠癣丧,使用PDO這樣的“數(shù)據(jù)庫訪問抽象層”是一個不錯的選擇胁编。
PHP與MySQL的連接有三種API接口鳞尔,分別是:PHP的MySQL擴展 、PHP的mysqli擴展 市框、PHP數(shù)據(jù)對象(PDO)
1.mysql擴展是設(shè)計開發(fā)允許php應(yīng)用與MySQL數(shù)據(jù)庫交互的早期擴展枫振,針對MySQL4.1.3或者更早版本設(shè)計的萤彩,但并不支持后期MySQL服務(wù)端提供的一些特性。由于太古老杖小,又不安全愚墓,所以已被后來的mysqli完全取代;
2.mysqli擴展伟件,我們有時稱之為MySQL增強擴展斧账,可以用于使用 MySQL4.1.3或更新版本中新的高級特性煞肾。其特點為:面向?qū)ο蠼涌?、prepared語句支持习绢、多語句執(zhí)行支持闪萄、事務(wù)支持 、增強的調(diào)試能力放航、嵌入式服務(wù)支持 圆裕、預(yù)處理方式完全解決了sql注入的問題。不過其也有缺點赊时,就是只支持mysql數(shù)據(jù)庫蛋叼。如果你要是不操作其他的數(shù)據(jù)庫剂陡,這無疑是最好的選擇。
3.PDO是PHP Data Objects的縮寫歌馍,是PHP應(yīng)用中的一個數(shù)據(jù)庫抽象層規(guī)范松却。PDO提供了一個統(tǒng)一的API接口可以使得你的PHP應(yīng)用不去關(guān)心具體要連接的數(shù)據(jù)庫服務(wù)器系統(tǒng)類型溅话,也就是說,如果你使用PDO的API砚哆,可以在任何需要的時候無縫切換數(shù)據(jù)庫服務(wù)器躁锁,比如從Oracle 到MySQL卵史,僅僅需要修改很少的PHP代碼。其功能類似于JDBC槐秧、ODBC刁标、DBI之類接口。同樣,其也解決了sql注入問題斩箫,有很好的安全性。不過他也有缺點狐血,某些多語句執(zhí)行查詢不支持易核。
? php 與 nginx 和apache之間關(guān)系是什么?
nginx和apache都是web服務(wù)器缀匕,
apache是通過mod_php來解析php乡小,nginx是通過php-fpm(fast-cgi)來解析php
1.CGI是為了保證web server傳遞過來的數(shù)據(jù)是標準格式的饵史,方便CGI程序的編寫者。CGI就是規(guī)定要傳哪些數(shù)據(jù)湃番、以什么樣的格式傳遞給后方處理這個請求的協(xié)議吠撮。
2.php-cgi只是解釋PHP腳本的程序而已讲竿,php-cgi只是個CGI程序,他自己本身只能解析請求逾条,返回結(jié)果投剥,不會進程管理
3.fastcgi是一個協(xié)議,F(xiàn)astcgi是用來提高CGI程序性能的糕篇,php-fpm實現(xiàn)了這個協(xié)議
4.PHP-FPM酌心,是一個實現(xiàn)了Fastcgi的程序,被PHP官方收了墩崩。php-fpm的管理對象是php-cgi鹦筹,修改了php.ini配置文件后址貌,php-fpm能夠平滑重啟,php-fpm對此的處理機制是新的worker用新的配置遍蟋,已經(jīng)存在的worker處理完手上的活就可以歇著了匿值,通過這種機制來平滑過度赂摆。
? 如何實現(xiàn)php的數(shù)組?
hashtable
? include和require有什么異同點绊谭,還有哪些函數(shù)可以加載外表類庫com_load, dotnet_load
1.include()用時加載达传,require是一開始就加載