前端開發--面試題整理(JS篇)

来源:https://www.cnblogs.com/pythongood/archive/2019/07/24/11235535.html
-Advertisement-
Play Games

1.截取字元串abcdace的acealert('abcdace'.substring(4)); 2.規避javascript多人開發函數重名問題命名空間封閉空間js模塊化mvc(數據層、表現層、控制層)seajs變數轉換成對象的屬性對象化 3.javascript面向對象中繼承實現function ...


1.截取字元串abcdace的ace
alert('abcdace'.substring(4));

2.規避javascript多人開發函數重名問題
命名空間
封閉空間
js模塊化mvc(數據層、表現層、控制層)
seajs
變數轉換成對象的屬性
對象化

3.javascript面向對象中繼承實現
function Person(name){
        this.name = name;
}

Person.prototype.showName = function(){
        alert(this.name);
}

function Worker(name, job){
        Person.apply(this,arguments)
        this.job = job;
}
for(var i in Person.prototype){
        Worker.prototype = Person.prototype;
}
new Worker('sl', 'coders').showName();

 

價值13000的零基礎全套前端視頻教程

4.判斷一個字元串中出現次數最多的字元,統計這個次數
var str = 'asdfssaaasasasasaa';
var json = {};

for (var i = 0; i < str.length; i++) {
        if(!json[str.charAt(i)]){
                json[str.charAt(i)] = 1;
        }else{
                json[str.charAt(i)]++;
        }
};
var iMax = 0;
var iIndex = '';
for(var i in json){
        if(json[i]>iMax){
                iMax = json[i];
                iIndex = i;
        }
}
alert('出現次數最多的是:'+iIndex+'出現'+iMax+'次');

5.編寫一個方法 求一個字元串的位元組長度;
//假設一個中文占兩個位元組
var str = '22兩是';

alert(getStrlen(str))

function getStrlen(str){
        var json = {len:0};
        var re = /[\u4e00-\u9fa5]/;
        for (var i = 0; i < str.length; i++) {
                if(re.test(str.charAt(i))){
                        json['len']++;
                }
        };
        return json['len']+str.length;
}

6.編寫一個方法 去掉一個數組的重覆元素
var arr = [1,2,3,1,43,12,12,1];
var json = {};
var arr2 = [];
for (var i = 0; i < arr.length; i++) {
        if(!json[arr[i]]){
                json[arr[i]] = true;
        }else{
                json[arr[i]] = false;
        }

        if(json[arr[i]]){
                arr2.push(arr[i]);
        }
};

for (var i = 0; i < arr.length; i++) {
        if(!aa(arr[i], arr2)){
                arr2.push(arr[i])
        }
};
function aa(obj, arr){
        for (var i = 0; i < arr.length; i++) {
                if(arr[i] == obj) return true;
                else return false;
        };
}
alert(arr2)

7.寫出3個使用this的典型應用
事件: 如onclick  this->發生事件的對象
構造函數          this->new 出來的object
call/apply        改變this

8.如何深度克隆
var arr = [1,2,43];
var json = {a:6,b:4,c:[1,2,3]};
var str = 'sdfsdf';

var json2 = clone(json);

alert(json['c'])
function clone(obj){
        var oNew = new obj.constructor(obj.valueOf());
        if(obj.constructor == Object){
                for(var i in obj){
                        oNew[i] = obj[i];
                        if(typeof(oNew[i]) == 'object'){
                                clone(oNew[i]);
                        }
                }
        }
        return oNew;
}

9.JavaScript中如何檢測一個變數是一個String類型?請寫出函數實現
 typeof(obj) == 'string'
 obj.constructor == String;

10.網頁中實現一個計算當年還剩多少時間的倒數計時程式,要求網頁上實時動態顯示“××年還剩××天××時××分××秒”
var oDate = new Date();
var oYear = oDate.getFullYear();

var oNewDate = new Date();
oNewDate.setFullYear(oYear, 11, 31, 23, 59, 59);
var iTime = oNewDate.getTime()-oDate.getTime();

var iS = iTime/1000;
var iM = oNewDate.getMonth()-oDate.getMonth();
var iDate =iS

11. 請解釋一下什麼是語義化的HTML。
內容使用特定標簽,通過標簽就能大概瞭解整體頁面的佈局分佈

12. 為什麼利用多個功能變數名稱來存儲網站資源會更有效?
確保用戶在不同地區能用最快的速度打開網站,其中某個功能變數名稱崩潰用戶也能通過其他鬱悶訪問網站

13.請說出三種減低頁面載入時間的方法
1、壓縮css、js文件
2、合併js、css文件,減少http請求
3、外部js、css文件放在最底下
4、減少dom操作,儘可能用變數替代不必要的dom操作

14.什麼是FOUC?你如何來避免FOUC?
由於css引入使用了@import 或者存在多個style標簽以及css文件在頁面底部引入使得css文件載入在html之後導致頁面閃爍、花屏
用link載入css文件,放在head標簽裡面

15.文檔類型的作用是什麼?你知道多少種文檔類型?
影響瀏覽器對html代碼的編譯渲染
html2.0
xHtml
html5

16.瀏覽器標準模式和怪異模式之間的區別是什麼?
盒模型解釋不同

17.閉包
子函數能被外部調用到,則該作用連上的所有變數都會被保存下來。

18.請解釋什麼是Javascript的模塊模式,並舉出實用實例。
js模塊化mvc(數據層、表現層、控制層)
seajs
命名空間

19.你如何組織自己的代碼?是使用模塊模式,還是使用經典繼承的方法?
對內:模塊模式
對外:繼承

20.你如何優化自己的代碼?
代碼重用
避免全局變數(命名空間,封閉空間,模塊化mvc..)
拆分函數避免函數過於臃腫
註釋

21.你能解釋一下JavaScript中的繼承是如何工作的嗎?
子構造函數中執行父構造函數,並用call\apply改變this
克隆父構造函數原型上的方法

22.請儘可能詳盡的解釋AJAX的工作原理。
創建ajax對象(XMLHttpRequest/ActiveXObject(Microsoft.XMLHttp))
判斷數據傳輸方式(GET/POST)
打開鏈接 open()
發送 send()
當ajax對象完成第四步(onreadystatechange)數據接收完成,判斷http響應狀態(status)200-300之間或者304(緩存)執行回調函數


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 問題: 正常start-all.sh無法啟動datanode進程,但是./hadoop-daemon.sh start datanode又可以啟動。過一會後datanode進程又莫名消失。 原理: 多次hdfs namenode -format導致namenode生成了新的clusterID, 和d ...
  • 0 "相關源碼" 掌握Flink中三種常用的Time處理方式,掌握Flink中滾動視窗以及滑動視窗的使用,瞭解Flink中的watermark。 Flink 在流處理工程中支持不同的時間概念。 1 處理時間(Processing time) 執行相應運算元操作的機器的系統時間. 當流程式在處理時間運行 ...
  • hdfs:分散式文件系統 有目錄結構,頂層目錄是: /,存的是文件,把文件存入hdfs後,會把這個文件進行切塊並且進行備份,切塊大小和備份的數量有客戶決定。 存文件的叫datanode,記錄文件的切塊信息的叫namenode Hdfs的安裝 準備四台linux伺服器 先在hdp-01上進行下麵操作 ...
  • 今天使用sql developer 新建連接資料庫測試時,有”狀態: 失敗 -測試失敗: Listener refused the connection with the following error:ORA-12514, TNS:listener does not currently know ...
  • 1.停庫[oracle@testdb ~]$ sqlplus / as sysdbaSQL> shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL> exit 2.停監聽[oracle@ ...
  • 1. 需求描述 觀察MongoDB的啟動Log,會看到一個關於 NUMA 的警告 和 優化建議 那麼我們是不是要調整下Linux的系統配置?首先我們先補充下基本知識。 2.相關知識介紹 2.1 NUMA和SMP NUMA和SMP是兩種CPU相關的硬體架構。 SMP (對稱多處理器結構: Symmet ...
  • 一、多表查詢 # 創建部門表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ); INSERT INTO dept (NAME) VALUES ('開發部'),('市場部'),('財務部'); # 創建員 ...
  • 步驟其實很簡單,一共三步,但是每一步都需要完成,步驟如下: 打開控制面板或騰訊軟體管家等執行常規的卸載操作。 找到SDK的安裝目錄手動刪除SDK。 進入“C:\Users\<你的用戶名下>”目錄下,手動刪除".android"、".AndroidStudioX.X"、".gradle"目錄(比如我登 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...