十道前端面試題(8)

  1. symbol
  2. 垃圾回收機制
  3. 一個有序的數組如何進行查找操作
  4. 七層網絡協議,每層幹嘛的
  5. 線程和進程的區別
  6. 函數節流和函數防抖知道嗎,區別是什麼
  7. cookie有什麼限制
  8. cookie和session的區別和聯繫
  9. JS如何獲得用戶來源
  10. html5的新特性

1. Symbol

  • Symbol是ES6引入的一種新的數據類型,表示獨一無二的值。
  • 使用: Symbol值通過Symbol函數生成
  • let s = new Symbol()
  • typeof s; // "symbol"
  • Symbol值不能與其他類型的值進行運算。會報錯
  • 創建Symbol值的時候可以添加描述,如下
  • const sym = Symbol('foo')
  • 可使用symbol值作爲屬性名,用於對象屬性名的時候,就能保證不出現同名的屬性。好處是,防止某個鍵被不小心改寫或覆蓋

可以參考阮一峯es6


2. 垃圾回收機制

有關JavaScript垃圾回收機制,從以下幾點討論:

一、爲什麼需要垃圾回收

  1. 字符串、對象和數組沒有固定的大小,只有當它們的大小已知時,才能對它們進行動態的存儲分配。
  2. JS程序在每次創建字符串、對象或數組的時候,解釋器都必須分配內存來存儲實體。
  3. 只要像這樣動態分配了內存,最終都要釋放這些內存以便在再次使用,否則,JS解釋器會消耗完系統中所有可用的內存,造成系統崩潰

二、垃圾回收原理

瀏覽器採用垃圾回收的方法有兩種:

  1. 標記清除
    垃圾收集器在運行的時候會給存儲在內存中的所有變量都加上標記,然後它會去掉環境中的變量已經被標記爲引用的變量,在此之後再被標記的變量將被視爲準備刪除的變量。最後垃圾回收器清除標記的變量,回收它們所佔用的內存空間。

  2. 引用計數

  • 原理:每次引用加一,被釋放時減一,當這個值的引用次數變成 0 時,就可以將其內存空間回收
  • 缺點:循環引用(obj1 和 obj2 通過各自的屬性相互引用,也就是說,這兩個對象的引用次數都是 2)

儘量減少內存中的垃圾!


3. 一個有序的數組如何進行查找操作

二分查找算法:

  • 基本思想: 確定數組的中間位置,將要查找的值與中間位置的值進行比較,若相等直接中間位置,若不相等確定新的查找區域繼續二分。

假設數組是個升序數組:

  1. 遞歸實現二分查找
function BinarySearch(arr,target,start,end) {
	if(start > end) {
		return -1;
	}
	let middle = Math.floor((start+end)/2);
	if(target === arr[middle]){
		return middle;
	} else if(target < arr[middle]) {
		end = middle -1;
		return BinarySearch(arr,target,start,end);
	} else {
		start = middle + 1;
		return BinarySearch(arr,target,start,end)
	}
}
  1. 非遞歸實現二分查找
function BinarySearch(arr,target){
	let start = 0;
	let end = arr.length-1;
	while(start < end) {
		let middle = Math.floor((start + end)/2);
		if(target === arr[middle]) {
			return middle;
		} else if(target < arr[middle]){
			end = middle -1;
        } else {
			start = middle + 1;
		}
	}
	return -1;
}

4. 七層網絡協議,每層幹嘛的?

1. 應用層
  • 主要功能: 文件傳輸、電子郵件、文件服務、虛擬終端
  • 協議族: TFTP、HTTP、SNMP、FTP等
2. 表示層
  • 主要功能: 數據格式化、代碼轉換、數據加密
  • 該層沒有協議
3. 會話層
  • 主要功能:解除或建立與別的節點的聯繫
  • 該層沒有協議
4. 傳輸層
  • 主要功能:提供端對端的接口(TCP三次握手)
  • 協議族:TCP、UDP
5. 網絡層
  • 主要功能: 爲數據包選擇路由。(通過IP進行域名尋址)
  • 協議族:IP、ICMP、ARP、RARP
6. 數據鏈路層
  • 主要功能:傳輸有地址的幀以及錯誤檢測功能。定義瞭如何讓格式化數據進行傳輸,如何控制幀在物理信道上的傳輸,包括數據傳輸錯誤檢測和糾正,保證數據的可靠傳輸。
  • 協議族:SLIP、CSLIP、PPP
7. 物理層
  • 主要功能: 以二進制數據形式在物理媒體上傳輸數據
  • 協議族:ISO2110、IEEE802、IEEE802.2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章