前言:秋招也跑了挺多的公司,雖然都是招Web前端,但是不同的公司,因為需求和目的不同,面試的考察點也是各不相同。我沒有實習經驗,只有自己學東學西比較雜也比較淺的一些知識積累可以用,這個過程我發現了自己的不足,也增加了很多對公司、對社會的閱歷,覺得自己成長了。哈哈哈,廢話不多說,下面我就整理一下自己面試的很多問題,還有自己整理總結的答案、分析。
一、基礎入門類 |
二、原生JS和Jquery操作DOM元素 |
- 常用的事件:十個
- click
- mousemove
- mouseover
- mouseout
- mouseenter
- mouseleave
- mouseup
- scroll
- mousewheel
- onkeydown
【特別注明:這里原生JS和JQuery操作DOM元素 參考梳理自博文 —— 感謝原作者的分享,這里僅作學習整理】
三、PHP和Node.js的區別 |
面試問了PHP和Node.js的區別,是因為它們首先值得比較(相似點很多):兩者都是開放源碼,都是致力於web開發,並且都可用於相似的項目
下面將會對 PHP 和 Node.js 進行十幾個方面的比較。每個對比都會考量可以應用到任意 web 技術的常見的開發挑戰。我們不會太深入討論細節;很少有人會關心隨機數生成器或數組排序的價值。
【特別注明:這里PHP和Node.js的區別梳理參考 文章 —— 感謝原作者的分享,這里僅作學習整理】
PHP | Node.js | |
創建時間 | 1994年 | 2009年 |
運行基礎 | 安裝在web服務器(Apache等)上的組件運行的 | 基於Google的V8 JavaScript解釋引擎 (在Chrome瀏覽器里它負責執行客戶端的JavaScript代碼) |
和其他語言不同的地方 | PHP代碼可以和HTML混合到一塊 | Node.js內置了處理網絡請求和響應的函數庫, 所以不需要單獨的服務器(Apache等)或者其他依賴 |
起步 | 一段<?php …php>代碼可以放在任意.php文件中, 在瀏覽器中輸入URL跳轉到文件即可 但是,只能運行於安裝了PHP的web服務器 |
只需要 下載安裝程序 或 使用包管理器 在瀏覽器輸入http://127.0.0.8080/之前, 需要在終端輸入node app.js來啟動應用程序 |
幫助和支持 | 有大量的指南和二十年的 Q&A | 擁有很好的文檔,但是更加年輕,能提供的幫助較 PHP 也少 |
語言語法 | PHP不會限制按特定的方式編寫, PHP在版本間可能有一些調整,但是向后兼容一般都做的很好 也導致一個問題:PHP很混亂, 怎么統計一個字符串中字符的個數 PHP有數以百記的函數,而且命名規則也不完全一致 |
JavaScript代碼比PHP簡潔 例如,你再不需要跟 JSON 轉來轉去—— UTF-8 也不用 全棧工程師可以同時在客戶端與服務端使用 JavaScript 大腦不用來回切換 |
開發工具 | NPM包管理器 NPM允許安裝和管理依賴,設置配置變量,定義腳本和其他 |
|
環境 | PHP本質上就是一個服務端技術,它很擅長該領域 | JavaScript原來的主戰場還是瀏覽器, Node.JS出現后可以在任何地方使用, 瀏覽器、服務器、終端、桌面甚至嵌入型系統 |
集成 | PHP的擴展,使他能和擁有主流或冷門的API的服務器直接通訊 | Node.js會為某些老舊冷門的技術尋找成熟集成組件而頭疼 |
托管和部署 | 隨機聯系某個網頁托管公司你可以找到對主要的 PHP 支持, 也許還免費附送 MySQL |
Node.js 是個不同的野獸,服務端的應用永遠運行。 你需要一台物理/虛擬/雲或定制的服務器環境,最好有 root 權限, 這對有些服務器來說遙不可及,特別是那些共享的服務器, 你有可能讓整台服務器宕機 |
性能 ↓ | PHP很快, 有很多項目和選項可以使他跑得更快, 幾乎不會擔心速度問題 |
Node.js性能通常會更好一點 |
1、Node.js更少的依賴 |
所有對PHP的應用,都必須經過一個Web服務器的路由, 來啟動PHP的解釋器運行PHP代碼 |
Node.js不需要這些依賴, 而且你基本一定會使用一個帶服務器的框架, 比如:Express,它很輕量,很好的扮演應用的一部分 |
2、Node.js更小更快的解釋器 |
會受到舊版語言遺留兼容問題的拖累 |
Node.js 的解釋器比 PHP 的更小更靈活。 他並不受舊版語言遺留兼容問題的拖累, 而且 Google 在 V8 引擎性能改善上出了大力。 |
3、Node.js應用永久在線 |
PHP遵循標准客戶端—服務端模型。 每個頁面請求都會初始化應用; 讀取配置參數、連接數據庫、讀取信息、渲染HTML。 |
Node.js應用持久運行,只需要啟動一次。 例如:可以創建一個單獨的數據連接對象,然后所求請求一起復用 |
4、Node.js事件驅動,無阻塞I/O |
PHP跟其他多數服務器語言采用阻塞執行的模型。 當你執行一個命令,比如數據庫取數據, 那么必須等這個命令執行完成后,才執行下面的命令 |
Node.js通常不會等的, 取而代之的是,你需要提供一個回調函數, 這個函數當指令執行后,會被調用一次。 換句話說,當解釋器在其他進程處理的時候可以干些別的事情 |
關於集成:指開發技術很受限制,除非它們能與數據庫和驅動集成。
關於性能:性能很大程度上決定於開發團隊的經驗以及是否上心。
關於Node.js事件驅動,無阻塞I/O的幾個警告:
- Node.js/JavaScript只能在單線程上運行,但是大多數Web服務器都是多線程,而且並發的處理請求。
- 一個用戶長時間運行的 JavaScript 處理會阻止其它用戶的代碼執行,除非拆分任務或者使用Web Workers。
開發建議:評估選項,根據你的需求來選擇一門語言,這比這樣的”對比“靠譜得多。
四、AngularJS和Node.js的區別 |
從應用上來說,寬泛的講:
- node.js是用於服務器端,做后台程序的。
- AngularJS是前端框架,主要用於數據綁定;不需要安裝,只要在<script>標簽導入就能用了。
當然,面試一定不是問這個,這個太敷衍了,要區別AngularJS和Nodejs的原因,首先也是因為它們是有相似點的:
- 它們都是單線程運行類型。
- 都可以使用一個主文件(引導頁面或js文件)+多個路由運行的模式,實現頁面的跳轉。
【特別注明:這里AngularJS和Node.js的路由區別梳理參考 文章 —— 感謝原作者的分享,這里僅作學習整理】
AngularJS的路由 | NodeJS(Express)的路由 | |
頁面跳轉 | 針對於單頁面的路由,每次路由發生變化, 只是頁面的狀態發生變化,頁面本身沒有發生跳轉 |
express的路由是針對多頁面的, 也就是說他做的頁面,路由的切換是伴隨着頁面的切換 |
路由類型 | Angular的路由是前台的就是以前html的各個錨點, #login,#index,#user,看到了沒,有個井號 |
Express的路由是后台的url 例如:/user/:id/edit |
互相使用 | Angular不可以跑Express | Express可以跑Angular 可以在Express的路由里面跳轉到一個Angular頁面, 之后所有的操作可以在Angular的路由里面玩耍, 但是玩耍到最后, 發生數據交互,還是要發給Express |
關於頁面跳轉的選擇,建議:頁面內部的路由變化使用angular.js 的router,而頁面間的路由用express
注:轉載請注明出處