面試問題總結二(技術能力-PHP)----Ⅳ

5七、Linux 的基本命令(重點,如今多數服務器都是Linux 系統)php

答:arch 顯示機器的處理器架構html

uname -m 顯示機器的處理器架構前端

uname -r 顯示正在使用的內核版本vue

dmidecode -q 顯示硬件系統部件node

- (SMBIOS / DMI) hdparm -i /dev/hda 羅列一個磁盤的架構特性mysql

hdparm -tT /dev/sda 在磁盤上執行測試性讀取操做web

cat /porc/cpuinfo 顯示 CPU info 的信息redis

cat /porc/interrupts 顯示中斷算法

cat /porc/meminfo 校驗內存使用sql

cat /porc/swaps 顯示哪些 swap 被使用

cat /porc/verion 顯示內核的版本

cat /porc/net/dev 顯示網絡適配器及統計

cat /porc/mounts 顯示已加載的文件系統

date 顯示系統日期

cal 2007 顯示 2007 年的日曆表

date 061212352018.00 設置日期和時間 -月日時分年.秒

clock -w 將時間修改保存到 BIOS

文件搜索:

find / -name file1 從 '/'開始進入根文件系統搜索文件和目錄

locate *.ps 尋找以 '.ps'結尾的文件-先運行'updatedb'命令

whereis halt 顯示一個二進制文件、源碼或 man 的位置

which halt 顯示一個二進制文件或可執行文件的完整路徑

掛載一個文件系統:

mount /dev/hda2 /mnt/hda2 掛載一個叫作 hda2 的盤- 肯定目錄'/ mnt/hda2' 已經存在

umount /dev/hda2 卸載一個叫作 hda2 的盤- 先從掛載點'/ mnt/hda2' 退出

追加命令:

一、sudo cat /etc/aaa >>/usr/bbb        把文件/etc/aaa 中的內容追加到/usr/bbb 中的內容的後面         

二、sudo chmod apache:apache /etc/index.html        更改/etc/index.html 的文件全部者爲 apache,文件羣組爲 apache         

三、sudo chmod 744 /etc/index.html4        更改/etc/index.html 的全部者權限爲讀取、寫入、執行。羣組權限爲讀取。其餘權限爲讀取

sudo rm /etc/index.html        刪除/etc 下名爲 hello 的文件 

固然,若是你是以 orot 用戶執行以上操做,能夠去掉前邊的 sudo

df -hl     查看磁盤剩餘空間

df -h     查看每一個根路徑的分區大小

du -sh [目錄名]     返回該目錄的大小

du -sm [文件夾]     返回該文件夾總 M 數

shutdown -h now    關機 (系統的關機、重啓以及登出) 

關閉系統

init 0 關閉系統

telinit 0 關閉系統

shutdown -h hour:minutes & 按預約時間關閉系統

shutdown -c 取消按預約時間關閉系統

shutdown -r now    重啓

reboot 重啓

logout    註銷文件和目錄

pwd     顯示工做路徑

ls      查看目錄中的文件

ls -F     查看目錄中的文件

ls -l     顯示文件和目錄的詳細資料

ls -a     顯示隱藏文件

ls *[0-9]*     顯示包含數字的文件名和目錄名

tree [文件夾]       顯示文件和目錄由根目錄開始的樹形結構

lstree  [文件夾]       顯示文件和目錄由根目錄開始的樹形結構

mkdir dir1    建立一個叫作 'dir1'的目錄' 磁盤空間

df -h     顯示已經掛載的分區列表

ls -lSr |more 以尺寸大小排列文件和目錄

du -sh dir1 估算目錄 'dir1'已經使用的磁盤空間'

下載、解壓

一、對於.tar 結尾的文件   tar -xf all.tar

二、對於.gz 結尾的文件   gzip -d all.gz   

gunzip all.gz

# zip all.zip *.jpg   這條命令是將全部.jpg 的文件壓縮成一個 zip 包

# unzip all.zip   這條命令是將 all.zip 中的全部文件解壓出來下載命令

wget + 空格 +要下載文件的 url 路徑=====================================

 

Shell 腳本:必須以 #!/bin/sh 開頭簡單例子:判斷這個目錄下有沒有文件(File)    

#!/bin/bash

Num=`ls -al /opt |grep "^-"|wc -l `

if [ $Num != 0 ] 

then echo "/opt has $Num files" 

else echo "/opt has none file"

 

 

fils -al /opt |grep "^-"|wc -l     這個命令可以統計文件個數 爲 0 就是沒有文件 非零就是有文件

 

5八、memache 通常用來緩存什麼數據?

答:一、常常被讀取而且實時性要求不強能夠等到自動過時的數據。例如網站首頁最新文章列表、某某排行等數據。

二、常常被讀取而且實時性要求不強的數據。好比用戶的好友列表,用戶文章列表,用戶閱讀記錄等。

三、統計類緩存,好比文章瀏覽數、網站 PV 等。

四、活躍用戶的基本信息或者某篇熱門文章。

五、session 數據

 

5九、魔術方法和魔術常量

答:魔術方法:

一、__construct() 實例化對象時被調用,當 __construct 和以類名爲函數名的函數同時存在時,__construct 將被調用,另外一個不被調用。

二、__destruct() 當刪除一個對象或對象操做終止時被調用。

三、__call() 對象調用某個方法,若方法存在,則直接調用;若不存在,則會去調用 __call 函數。

四、__get() 讀取一個對象的屬性時,若屬性存在,則直接返回屬性值;若不存在,則會調用 __get 函數。__get()方法有一個參數,表示要調用的變量名

五、__set() 設置一個對象的屬性時,若屬性存在,則直接賦值;若不存在,則會調用 __set 函數。__set()方法包含兩個參數,分別表示變量名稱和變量值,兩個參數都不可省略

六、__toString() 打印一個對象的時被調用。如 echo obj;或 printobj;

七、__clone() 克隆對象時被調用。如:t=newTest();t1=clone $t;

八、__sleep() serialize 以前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。

九、__wakeup() unserialize 時被調用,作些對象的初始化工做。

十、__isset() 檢測一個對象的屬性是否存在時被調用。如:isset($c->name)。十一、__unset() unset銷燬指定的變量時被調用。如:unset($c->name)。

十二、__set_state() 調用 var_export 時,被調用。用 __set_state 的返回值作爲 var_export 的返回值。

var_export ( mixed $expression [,bool $return ] )此函數返回關於傳遞給該函數的變量的結構信息,它和 var_dump() 相似,不一樣的是其返回的表示是合法的 PHP 代碼。第二個參數設置爲 TRUE,從而返回變量的表示。

1三、__autoload()實例化一個對象時,若是對應的類不存在,則該方法被調用。

 

魔術常量:

一、__LINE__ 返回文件中的當前行號。

二、__FILE__ 返回文件的完整路徑和文件名。若是用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 老是包含一個絕對路徑,而在此以前的版本有時會包含一個相對路徑。

三、__FUNCTION__ 返回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。

四、__CLASS__ 返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。

五、__METHOD__ 返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。

六、__DIR__ 當前文件的目錄

 

60、接口 interface 和抽象類 abstract class 的區別?

答:抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。抽象類是經過關鍵字 abstract 來聲明的。抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,抽象方法沒有方法體,該方法天生就是要被子類重寫的。抽象方法的格式爲:abstract function abstractMethod();

接口是經過 interface 關鍵字來聲明的,接口中的成員常量和方法都是 public 的,方法能夠不寫關鍵字 public,接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。子類繼承抽象類使用 extends,子類實現接口使用 implements。

接口是一種特殊化的抽象類

 

6一、什麼是隊列?排它鎖,Myisam 死鎖如何解決?

答:在默認狀況下 MyIsam表級鎖,因此同時操做單張表的多個動做只能以隊列的方式進行。

排它鎖又名寫鎖,在 SQL 執行過程當中爲排除其它請求而寫鎖,在執行完畢後會自動釋放。

死鎖解決:先找到死鎖的線程號(從數據字典裏面分析,mysql> SELECT * FROM information_schema.INNODB_TRX\G),而後殺掉線程 ID(kill 線程ID)。

6二、Myisam 與 Innodb 的區別?

Innodb引擎

Innodb引擎提供了對數據庫ACID事務的支持,而且實現了SQL標準的四種隔離級別。 該引擎還提供了行級鎖和外鍵約束,它的設計目標是處理大容量數據庫系統,它自己其實就是基於MySQL後臺的完整數據庫系統,MySQL運行時Innodb會在內存中創建緩衝池,用於緩衝數據和索引。 可是該引擎不支持FULLTEXT類型的索引(全文索引),並且它沒有保存表的行數,當SELECT COUNT(*) FROM TABLE時須要掃描全表。 當須要使用數據庫事務時,該引擎固然是首選。因爲鎖的粒度更小,寫操做不會鎖定全表,因此在併發較高時,使用Innodb引擎會提高效率。 可是使用行級鎖也不是絕對的,若是在執行一個SQL語句時MySQL不能肯定要掃描的範圍,InnoDB表一樣會鎖全表。

MyIASM引擎

MyIASM是MySQL默認的引擎,可是它沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵,所以當INSERT(插入)或UPDATE(更新)數據時即寫操做須要鎖定整個表,效率便會低一些。 不過和Innodb不一樣,MyIASM中存儲了表的行數,因而SELECT COUNT(*) FROM TABLE 時只須要直接讀取已經保存好的值而不須要進行全表掃描。 若是表的讀操做遠遠多於寫操做且不須要數據庫事務的支持,那麼MyIASM也是很好的選擇

主要區別:

一、MyIASM是非事務安全的,而InnoDB是事務安全的

二、MyIASM鎖的粒度是表級的,而InnoDB支持行級鎖

三、MyIASM支持全文類型索引,而InnoDB不支持全文索引(5.6.24之後支持)、

四、MyIASM相對簡單,效率上要優於InnoDB,小型應用能夠考慮使用MyIASM

五、MyIASM表保存成文件形式,跨平臺使用更加方便

六、MyIASM不支持外鍵約束,而InnoDB 支持外鍵約束(可實現表的聯動操做,一刪多刪)

應用場景:

一、MyIASM管理非事務表,提供高速存儲和檢索以及全文搜索能力,若是再應用中執行大量select操做,應該選擇MyIASM

二、InnoDB用於事務處理,具備ACID事務支持等特性,若是在應用中執行大量insert和update操做,應該選擇InnoDB

 

6三、bootstrap 框架有哪些優勢?

答:bootstrap 是一款 web 開發框架,它由 CSS,JavaScript,Html,三部分構成,它簡潔靈活,使得 web 開發更加的快捷

優勢:

①節省時間: 使用 bootstrap 框架,能夠大大的節省項目開發時間,它包含了不少現成的代碼,若是須要使用,只須要找到合適的代碼,插入合適的位置便可,此外,CSS 是使用 LESS 編寫,不少樣式和設計都已經設計完成了

②定製化: bootstrap 能夠根據本身的項目,留取框架中本身須要的部分

③設計合理:

  •  柵格系統: bootstrap 定義 12 格柵系統,在頁面已經完成時,你能夠根據合適的網格,以本身的需求改變行數和佈局大小,樣式已經開發完成了,只須要把代碼放入合適的 HTML 代碼位置便可
  • LESS: LESS 是基於 CSS 之上的高級語言,其目的是使得 CSS 開發更加靈活,更增強大
  • JavaScript:bootstrap 提供 JavaScript 庫,該庫超越了基本的架構和樣式,開發者能夠輕鬆的操做窗口警告框,工具提示框等,可避免了咱們費神費力的寫腳本
  • 一致性: bootstrap 能夠保證界面在不一樣平臺的統一性,不管實在 IE,Chrome 等
  • 持續更新: bootstrap 在不斷的改進,更具規律性和持續性
  • 響應式: 不管是在 PC 端仍是移動端,均可以保持界面的一致性
  • 文檔多: bootstrap 的很是多

 

6四、簡述下node.js的認識?

中文文檔參考:http://nodejs.cn/api/

簡單的說 Node.js 就是運行在服務端的 JavaScript。一個新興的前端框架,後臺語言。

Node.js 是一個基於Chrome JavaScript 運行時創建的一個平臺。 用於方便地搭建響應速度快、易於擴展的網絡應用。

Node.js是一個事件驅動I/O服務端JavaScript環境,基於Google的V8引擎,V8引擎執行Javascript的速度很是快,性能很是好。很是適合在分佈式設備上運行數據密集型的實時應用。

優勢:

RESTful API
單線程    Node.js能夠在不新增額外線程的狀況下,依然能夠對任務進行併發處理 —— Node.js是單線程的。它經過事件循環(event loop)來實現併發操做,對此,咱們應該要充分利用這一點 —— 儘量的避免阻塞操做,取而代之,多使用非阻塞操做。
非阻塞IO
V8虛擬機
事件驅動

 

6四、簡述下vue.js的認識?

答:

Vue.js(讀音 /vjuː/, 相似於 view) 是一套構建用戶界面的漸進式框架。

Vue 核心庫只關注視圖層, 採用自底向上增量開發的設計。

Vue 的目標是經過儘量簡單的 API 實現響應的數據綁定和組合的視圖組件。

Vue 學習起來很是簡單。

 

Vue.js的特性以下:

1.輕量級的框架

2.雙向數據綁定

3.指令

4.插件化

 

6五、Mysql 高併發解決方案?

答:參考:https://blog.csdn.net/qiuweihong/article/details/78751466

正常的優化方案以下:

一、代碼中sql語句優化

二、數據庫字段優化,索引優化

三、加緩存,redis/memcache等

四、主從,讀寫分離

五、分區表

六、垂直拆分,解耦模塊

七、水平切分

 

6六、InnoDB和MyIsam分別使用的什麼索引,如何實現的?

參考:https://blog.csdn.net/z702143700/article/details/46049101

MyISAM索引實現:

MyISAM引擎使用B+Tree做爲索引結構,葉節點的data域存放的是數據記錄的地址。所以,MyISAM中索引檢索的算法爲首先按照B+Tree搜索算法搜索索引,若是指定的Key存在,則取出其data域的值,而後以data域的值爲地址,讀取相應數據記錄。 
MyISAM的索引方式也叫作「非彙集」的,之因此這麼稱呼是爲了與InnoDB的彙集索引區分。

 

InnoDB索引實現:

InnoDB也使用B+Tree做爲索引結構,但具體實現方式卻與MyISAM大相徑庭。

區別:

一、InnoDB的數據文件自己就是索引文件。MyISAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在InnoDB中,表數據文件自己就是按B+Tree組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,所以InnoDB表數據文件自己就是主索引。 

二、葉節點包含了完整的數據記錄,這種索引叫作彙集索引

三、由於InnoDB的數據文件自己要按主鍵彙集,因此InnoDB要求表必須有主鍵(MyISAM能夠沒有),若是沒有顯式指定,則MySQL系統會自動選擇一個能夠惟一標識數據記錄的列做爲主鍵,若是不存在這種列,則MySQL自動爲InnoDB表生成一個隱含字段做爲主鍵,這個字段長度爲6個字節,類型爲長整形。

四、InnoDB的全部輔助索引都引用主鍵做爲data域。

五、彙集索引這種實現方式使得按主鍵的搜索十分高效,可是輔助索引搜索須要檢索兩遍索引:首先檢索輔助索引得到主鍵,而後用主鍵到主索引中檢索得到記錄。

 

總結:

一、InnoDB不建議使用過長的字段做爲主鍵。由於全部輔助索引都引用主索引,過長的主索引會令輔助索引變得過大。

二、非單調(不是自增或自減的均爲非單調)的字段做爲主鍵在InnoDB中不是個好作法,由於InnoDB數據文件自己是一顆B+Tree,非單調的主鍵會形成在插入新記錄時數據文件爲了維持B+Tree的特性而頻繁的分裂調整,十分低效,而使用自增字段做爲主鍵則是一個很好的選擇。

 

參考資料:

https://blog.csdn.net/Px01Ih8/article/details/80823381

相關文章
相關標籤/搜索