Vue の高度な面接の質問 (第一線に適用) P5 レベル

1. クロスドメインに関するいくつかの方法

1.1jsonp
1.2proxy プロキシ
1.3cors クロスドメイン リソース共有
1.4Websocket

2. http と http の違い

HTTP プロトコルはコンテンツをクリア テキストで送信し、いかなる形式のデータ暗号化も提供しません。HTTP プロトコルは、クレジット カード番号やパスワードなどの支払い情報など、一部の機密情報の送信には適していません。https は、安全な ssl 暗号化通信プロトコルです。http と https は接続方法もポートも全く異なり、前者は 80、後者は 443 です。また、https プロトコルは ca からの証明書を申請する必要があります。HTTPSプロトコルは、SSL+HTTPプロトコルで構築された暗号化通信と本人認証が可能なネットワークプロトコルで、httpプロトコルよりも安全です。

3.同期と非同期の違い

同期はブロッキング モードであり、非同期は非ブロッキング モードです。
同期とは、プロセスが特定の要求を実行するときに、要求が情報を返すのに時間がかかる場合、プロセスは戻り情報を受け取るまで待機してから処理を続行することを意味します。 execute. ;
非同期とは、プロセスが永久に待機する必要がないことを意味しますが、他のプロセスのステータスに関係なく、次の操作を実行し続けます。メッセージが返されると、システムはそれを処理するようにプロセスに通知します。これにより、実行効率が向上します。

4. 空オブジェクトかどうかの判断方法

Object.keys(obj).length == 0
JSON.stringify(obj)==='{}'

5.配列かどうかの判断方法

arr instanceof Array //不正確かもしれません
arr.constructor === Array //不正確かもしれません 注: コンストラクターは書き換えられる可能性があるため、配列であるとは限りません
Object.prototype.toString.call(arr) === ' [オブジェクト配列]'

6. axios の 2 番目のパッケージとは

複数の環境: 開発、テスト、および運用環境。

統一されたエラー処理: 401、404、500 およびその他のエラー。

ネットワークの切断とリクエストのタイムアウト処理。

リクエストのキャンセル/リクエストのインターセプト: 繰り返しリクエストがサーバーに送信され、サーバーに圧力がかかるのを防ぎます。

許可の要求: 一部のインターフェースは、アクセスする前にログインする必要があります。

axiosを再パッケージ化する方法は?

まず、create を使用して axios インスタンスを初期化してから、リクエスト インターセプトとレスポンス インターセプトを設定し、トークンの追加やレスポンス インターセプトのエラー処理など、特定のビジネス要件に従ってロジックを記述し、その後で集中管理する必要があります。 API 、たとえば、ユーザー サービス インターフェースは user.js ファイルにカプセル化されています。ページが直接呼び出しを使用して値を渡す場合、
 

7. プロトタイプとプロトタイプ チェーン

プロトタイプ: すべての JavaScript オブジェクト (null を除く) は、作成時に別のオブジェクトに関連付けられます. このオブジェクトは、プロトタイプと呼ばれるものです. すべてのオブジェクトは、実際にはプロトタイプ オブジェクトであるプロトタイプからプロパティを「継承」します.
プロトタイプチェーン: 相互に関連するプロトタイプで構成されるチェーン構造がプロトタイプチェーンです。

8. スコープとスコープチェーン

スコープ: 変数を検索する方法、つまり、現在実行中のコードの変数へのアクセス権を決定する方法を指定します。つまり、スコープは、コード ブロック内の変数やその他のリソースの可視性を決定します。(グローバルスコープ、関数スコープ、ブロックスコープ)

スコープ チェーン: 現在のスコープから開始して、レイヤーごとに変数を検索します。グローバル スコープが見つからない場合、検索は放棄されます。この階層関係がスコープ チェーンです。

作用域就是变量的可用性的代码范围,就叫做这个变量的作用域。简单理解,
就是在这个范围内,变量是可以使用的,超过这个范围,变量就无法使用,这个范围就是作用域。

作用域分为三种:全局作用域、局部作用域、块级作用域。

全局作用域
顾名思义,全局作用域就是能够在全局使用,可以在代码的任何地方被调用。
示例:创建一个拥有全局作用域的变量a
var a=0;
function fun(){
	conslie.log(a);//在函数内部访问变量a
}
console.log(a);//在最外层访问变量a


局部作用域
局部作用域只能作用于局部的代码片段,常见于函数内部,即函数内创建的变量,
只能作用于函数内部,函数外部无法使用函数内部创建的变量。示例:
创建一个拥有局部作用域的变量b
function fun(){
	var b=1;
	console.log(b);//1
}
console.log(b);//b is not defined


块级作用域
块级作用域是es6新增的,使用let关键字创建变量、
const关键字创建常量(当然let、const也会有自己的语法规范,这里不过多展开),
作用域只存在于{}花括号内。示例:创建一个拥有局部作用域的变量c
function fun(){
	let c=1;
	const d=2;
	console.log(c);//1
	console.log(d);//2
}
console.log(c);//c is not defined


二、什么是作用域链?
当你要访问一个变量时,首先会在当前作用域下查找,如果当前作用域下没有查找到,
则返回上一级作用域进行查找,直到找到全局作用域,这个查找过程形成的链条叫做作用域链。

var a = 0;
var b = 0;

function fun1() {
	var b = 1;
	function fun2() {
		console.log(b);//1 在当前作用域下没有找到,到上一级作用域中查找
	}
    fun2();
	console.log(b);//1
}
fun1();
console.log(b);//0

9. テスト環境に関して言えば、まず開発環境、テスト環境、本番環境の違いを理解する必要がありますか?

プロジェクトの展開環境は、一般に、本番環境、テスト環境、および開発環境の 3 つのタイプに分けることができます
1. 開発環境: 開発環境では、プログラマーはサーバーを開発専用に使用し、構成はより任意にすることができます。開発とデバッグの、一般的にすべてのエラーを開く レポートとテスト ツールは、最も基本的な環境です。
2. テスト環境: 通常、本番環境の構成は複製されます. テスト環境でプログラムが正常に動作しない場合は、本番サーバーにリリースしてはなりません. 開発環境から本番への移行環境です.環境。
3. 本番環境: 本番環境とは、外部サービスの正式な提供を指し、通常、エラー レポートはオフにされ、エラー ログはオンにされます. 最も重要な環境です. 通常、デプロイメント ブランチはマスター ブランチです。
上記の環境は、システム開発の3段階とも言えます。開発→テスト→オンライン、本番環境は一般産業における本番環境、最後にユーザーに引き渡す環境です。
簡単に言えば、開発環境とは、開発者が共同デバッグを開発する際にフロントエンドとバックエンドと対話するローカル環境であり、通常、ローカル開発が完了した後、コードをテスト環境にデプロイします。テスト。
やや大規模な会社の場合、複数のテスト環境がある場合があります. たとえば、当社には 2 つのテスト環境があり、主に、オンラインにする前に異なるバージョンをテストするというニーズを満たすために使用されます.
会社は通常、会社の各業務を担当するさまざまな部門またはシステムに分かれています。次に、異なるシステム間の相互作用が発生するため、ソフトウェア プロジェクトの要件である場合、これらのシステムは、共同デバッグをテストする前に、同じテスト環境にあることを確認する必要があります。
本番環境が分かりやすく、テスト環境でのテスト完了後、バージョンアップ、運用保守リリースを行います。実稼働環境はオンライン環境であり、ユーザーに直接直面しています。
一般的に、本番環境の管理権限は非常に厳しく、一般的に開発テストは変更などの照会権限のみがあり、事業者や運用保守の手に委ねられています.管理職。
前回のデータベース削除暴走事件のように、本番データの権限管理が行き届いていないことが原因で、普通の開発エンジニアが大量の本番データを削除してしまい、会社の業務が麻痺してしまうのです。 、そして損失は数億にものぼります。
テスト環境の構築方法については、面接でもよく聞かれる質問ですが、一部のスタートアップ企業では一般的によくある質問ですが、テスト環境は完璧ではないため、環境の構築に問題が発生する場合があります。
一般的に、テスト環境の構築は運用保守の範囲に属しますが、一部のスタートアップ企業では運用保守の立場がなく、テスターしかできない場合があります。

10.0.1+0.2===0.3? 0.1 + 0.2 == 0.3?

10. 0.1+0.2===0.3?
0.1 + 0.2 == 0.3?
Not equal to
"0.1 + 0.2 is not equal to the complete 0.3. これは主に、これらの 2 つの 10 進数を "完全な" 2 進数で表すことができず、精度に従って丸めることしかできないためです。
のみ 近似値の形式で格納できます. 2 つの近似値を加算すると、結果は近似値
0.1 + 0.2 == 0.3?になります。

答えは: 0.1 + 0.2 は 0.3 と等しくありません!
ブラウザー コンソールから、結果が 0.3 ではなく 0.30000000000000004 になっていることがわかります。

これは、コンピュータがデータを保存する際の基本原則を持っているためです。

限られたストレージスペースを使用してバイナリデータを保存してください! 2 桁とも呼ばれる 0.3

11.イベントストリーム

キャプチャ バブリング       
[キャプチャ ステージ] は外側から内側 [バブリング ステージ] は内側から外側へ
デフォルトの動作が発生しないようにする 場合
によっては、リンク ジャンプやフォーム フィールドを防止するなど、デフォルトの動作が発生しないようにする必要がありますジャンプ

構文: e.preventDefault()

12. 閉鎖

 1.クロージャとは


Closure: 内部関数は、それが配置されている外部関数で宣言されたパラメーターと変数にアクセスできます. 外部関数がファイナライズ後にグローバル スコープ内のローカル スコープ内の変数にアクセスできない場合でも、js によって提供されるソリューションは、関数 関数を定義する、
つまりクロージャ
クロージャ関数: 関数内で宣言された関数をクロージャ関数と呼ぶ
2. クロージャの長所と短所 利点
: カプセル化に役立ち、ローカル変数にアクセスできる; グローバルを汚染しない変数
欠点: メモリ使用量の無駄; メモリ リーク
メモリ リーク: もはや使用されず、時間内に解放されないメモリ
クロージャは、同じアドレスにある親関数の対応する変数の値を見つけることです

13. ガベージ コレクションのメカニズム

 ガベージ コレクション メカニズム javaScript は、オブジェクトが作成されるとアクティブにメモリを割り当て、オブジェクトが使用されなくなるとメモリを解放します。
(ガベージ コレクターは、使用されなくなった変数を定期的に見つけて、それらのメモリを解放します。)
リサイクル方法
ガベージ コレクション メカニズムには 2 つの主な方法があります
。 clear method
function
 test(){    var a = 10 ; //マークを付けて環境に入る    var b = 20 ; //マークを付けて環境に入る    }    test(); //実行後、a と b にマークを付けて、環境とリサイクル。2.参照カウント




function
    test(){     var a = {} ; //a への参照数は 0     var b = a ; //a への参照数プラス 1、1     var c =a; //への参照数a プラス 1、それは 2     var b ={}; //a マイナス 1 の参照の数、それは 1       }




一般的なメモリ リーク
グローバル変数、クリアされていないタイマー、DOM の使用、クロージャー

14. リフローの再描画

再描画とは何ですか?
再描画: レンダリング ツリー内の一部の要素が属性を更新する必要があり、これらの属性が要素の外観とスタイルにのみ影響する場合、

背景色など、レイアウトに影響を与えない操作を再描画と呼びます。

リフローとは
リフロー:レンダリングツリーの一部(または全部)がサイズ、レイアウトに起因する場合

、非表示などの変更により再構築が必要な操作は、レイアウトの操作に影響を与えます。

リフローを引き起こす一般的なプロパティとメソッド:
要素の幾何学的情報 (要素の位置とサイズ) を変更する操作はすべて、リフローを引き起こします。
(1) 表示可能な DOM 要素の追加または削除
(2) 要素のサイズの変更 - マージン、パディング、ボーダー、幅、高さ
(3) ユーザーが入力ボックスにテキストを入力するなどのコンテンツの変更
(4) ブラウザ ウィンドウのサイズの変更 -サイズ変更イベントが発生したとき
(5) offsetWidth および offsetHeight プロパティを計算します(6) Web ページのデフォルト フォントを変更するときに、
style プロパティの値を設定します(7)。

要約: 
リフローは必ず発生し、再描画によって必ずしもリフローが発生するとは限りません。
リフローのコストは再描画のコストよりもはるかに高く、親ノードの子ノードを変更すると、親ノードの一連のリフローが発生する可能性があります。

15.約束


Promise オブジェクトには、保留中 (初期状態) の 3 つの状態があります: 待機中、または結果が得られていないことを
示す進行中です。取得したが、理由がない 希望するので実施をお断りする


async/await は Promise を改良したもので、厳密に言えば構文糖衣であり、本質的には Promise のままです。

Promise方法:then()

   then() は、引数として 2 つのコールバック関数を受け入れます。Promise の実行内容が成功条件を満たした場合は resolve 関数が呼び出され、
失敗した場合は reject 関数が呼び出されます。2 番目のパラメーターは省略でき (catch() メソッドの関数)、
then メソッドは新しい Promise インスタンスを返すため、チェーンで呼び出すことができます。


Promise メソッド: catch()
        catch() このメソッドは then メソッドの 2 番目のパラメーターに相当し、reject のコールバック関数を指します;
もう 1 つの関数は、resolve コールバック関数が実行されたときにエラーが発生した場合、例外が発生するというものです。実行を停止しますが、
catch メソッドに入ります。

Promise メソッド: all()
        all() メソッドは、並列タスクを完了することができます.配列を受け取り、配列内の各項目は promise オブジェクトです。
配列内のすべてのプロミスの状態が解決済みになると、すべてのメソッドの状態が解決され、
1 つの状態が拒否されると、すべてのメソッドの状態が拒否されます。

Promise メソッド: race()
        race() が受け取るパラメータも promise を項目とする配列で、最初に実行されたイベントが実行されると、
promise オブジェクトの値が直接返されます。最初の promise オブジェクトの状態が解決されると、
それ自体の状態が解決されます。それ以外の場合、最初の promise オブジェクトが拒否され、それ自体の状態が拒否されます。

Promise メソッド: finally()
        finally() メソッドは、Promise オブジェクトの最終状態に関係なく実行される操作を指定するために使用されます。
promise
.then(result => {···})
.catch(エラー => {···})
.finally(() => {···});

おすすめ

転載: blog.csdn.net/weixin_53185230/article/details/127687905