웹 프런트 엔드 인터뷰에 대한 10 가지 어려운 질문

1. 폐쇄 란 무엇입니까? 폐쇄의 목적은 무엇입니까? 폐쇄의 단점은 무엇입니까?

정의:

클로저는 함수 내에서 액세스 할 수있는 함수와 변수의 합계입니다.
특정 구현 : 함수 B는 함수 A에서 선언되고 A 내부의 지역 변수 또는 형식 매개 변수는 함수 B에서 사용됩니다. 함수 B는 반환 값 또는 객체 속성의 형태로 함수 A 외부에서 계속 호출 될 수 있습니다.

용도 :
1) 임시 상태를 저장하기 위해 현재 상태를 루프와 타이머에서 사용할 수 있습니다
.2) 일부 데이터를 "캡슐화"하려면 (예 : f1의 내부 데이터를 f1 외부에서 사용할 수 있지만 직접 가져올 수는 없습니다.) ~ f1.a.

단점 : 1. 영구 메모리, 메모리 사용량 증가 2. IE에서 부적절하게 사용하면 메모리 누수가 발생할 수 있습니다.

let fa=function(){
let a=1;
let fb=function(){console.log(a)}
window.fb=fb;
}
fa();  //调用f1将f2挂在window上
window.fb();  //结果为1,在f1外调用f2,打印出f1的局部变量a

코드를 스캔하여 1000 개 이상의 프런트 엔드 인터뷰 질문 모음을 가져와 나중에 시도해보세요.

여기에 사진 설명 삽입

2. 호출, 적용 및 바인딩의 용도는 무엇입니까?

객체 x의 fn 함수를 호출하고 args가 매개 변수의 배열이라고 가정합니다.

fn.call(x,...args)
fn.apply(x,args)
fn.bind(x,args)()

차이점은 호출과 적용이 즉시 실행되는 반면 bind는 수동으로 호출하고 실행해야하는 새 함수를 생성하기위한 할당 일뿐입니다.

 

3. 프런트 엔드의 본질에 대한 이해 :

첫 번째 깨달음은 프론트 엔드가 페이지 디스플레이였으며 페이지를 그리고 스타일을 조정해야했습니다. 1 년의 연구 끝에 작업 내용이 그 이상이라는 것을 알게되었고, 내용, 스타일, 인터랙티브 작업, 페이지 로딩, 성능 등을 포함한 애니메이션이 모두 책임이 있음을 알게되었습니다.


컴퓨터 역사의 관점에서 컴퓨터의 탄생은 인간의 두뇌가 단시간에 처리하기 어려운 일부 작업을 수행하고 데이터를 완전히 저장하는 것이었다. 사실 현대 컴퓨터와 휴대폰의 필수 기능도 이와 같습니다. 인간과 컴퓨터 간의 상호 작용 프로세스는 프론트 엔드입니다 . 상호 작용 인터페이스를 더 아름답게 만드는 방법과 과정을 더 흐름을 이해하는 프론트 엔드 엔지니어의 기능입니다 .

4. 프런트 엔드 워크 플로에 대한 이해 :

일상적인 작업은 일부 개발에 노출되고 의식적으로 개발 프로세스를 이해합니다. 제품 요구 사항을 받고 (요구 사항에 대한 질문이있는 경우 적시에 논의), 요구 사항에 따라 코드를 작성하고 (백엔드에 연결하기 위해 데이터를 표시해야 할 수 있음), 온라인으로 전환하기 전에 자체 테스트하고 테스트 동료를 테스트, 확인 및 테스트에서 발생한 버그를 수정합니다.
물론 효과는 사람마다 다를 수 있으므로 실제 작업과 결합해야합니다.

 

5. 프런트 엔드에 필요한 기술의 이해 :

html, CSS, js 뿐만이 아닙니다. 코드 성능을 향상 시키려면 메모리와 HTTP를 배우고 효율성을 높이려면 프레임 워크와 라이브러리를 배워야합니다. 또한, 빅 보스가되고 싶다는 것은 단순히 사용법을 아는 것이 아니라 왜 이렇게 사용할 수 있는지도 알 수 있습니다.
프론트 엔드 기술이 업데이트되고 더 빠르게 반복되므로 학습 마음을 유지해야합니다.
물론 학습은 프론트 엔드 기술뿐만 아니라 다른 측면에도 있습니다. 프론트 엔드를 배우면서 배움의 기쁨을 느꼈지만 배움의 기쁨은 일에만 국한되어서는 안된다는 것도 깨달았습니다. 삶의 경계는 멀고 독립적 인 사고를 가진 사람이 되십시오.

 

6. JavaScript는 지정된 문자열에서 가장 빈번한 문자와 그 발생 횟수를 가져옵니다.

대부분의 이전 방법은 여러 문자가 가장 자주 나타날 때 하나의 문자 만 찾을 수 있습니다. 내 방법은이 문제를 잘 해결합니다. 말할 것도없이 코드로 이동하면됩니다.

let str = 'abbcccdddddeeeeeeefffffff';//特意给定字符e和f都出现了7次
function findCharMore(str){
	let charNum = {};
	/*遍历字符串,得到对象{字符:出现次数}*/
	for(let i=0;i < str.length;i++){
		let e = str.charAt(i);
		if(charNum[e]){
			charNum[e]++;
		}else{
			charNum[e] = 1;
		}
	}
	let {maxCharArr,count} = {maxCharArr:[],count:0};
	/*遍历对象,找出出现次数最多的元素*/
    for (let key in charNum) {
    	/*出现次数更多则需剔除先前的元素并添加当前元素*/
        if (count < charNum[key]) {
			count = charNum[key];
			maxCharArr.shift();
			maxCharArr.push(key);
        }
        /*出现次数相同则在数组添加元素*/
        if (count == charNum[key] && maxCharArr.indexOf(key) == -1) {
			maxCharArr.push(key);
        }
    }
    /*返回对象{高频字符数组,最大出现次数}*/
	return {maxCharArr,count}
}
console.log(findCharMore(str));
//打印结果:{ maxCharArr: [ 'e', 'f' ], count: 7 }

이 메서드의 반환 값은 object입니다 {高频字符数组,最大出现次数}. 대부분의 메서드가 동시에 여러 문자의 발생을 고려하지 않는 상황을 해결합니다.

 

7. js는 배열에서 특정 데이터의 최대 연속 발생 횟수를 어떻게 찾습니까?

var test=[1,2,3,3,2,2,2,3,3,3,3,5,3,3,3,3,3] ;
var j = 0 ;
var max = 0 ;
for(var i = 0;i<test.length;i++){
if(test[i] == 3){
      j++;
 }else{
if(j>max){
    max = j;
  }
    j = 0 ;
 }
}
if(j>max) max = j ;
alert(max);

8. 배열에서 중복 요소 제거

JavaScript中indexOf函数方法是返回String对象内第一次出现子字符串的字符位置。使用方法:

strObj.indexOf(subString[,  startIndex])
//其中strObj是必选项。String 对象或 文字。
//subString是必选项。要在 String  对象中查找 的子字符串。
//starIndex是 可选项。该 整数值指出在 String  对象内开始查找的 索引。如果省略,则从字符串的开始
JavaScript中indexOf()函数方法返回一个整数值,指出  String 对象内子字符串的开始位置。如果没有找到子字符串,则返回 -1。如果 startindex 是负数,则 startindex  被当作零。如果它比最大的字符位置索引还大,则它被当作最大的可能索引。
var arr1 =[1,2,2,2,3,3,3,4,5,6]
var arr2 = [];
for(var i = 0,len = arr1.length; i< len; i++){
if(arr2.indexOf(arr1[i]) === -1){
arr2.push(arr1[i]);
}
}
console.log(arr2);

 

9, js는 배열에서 중복 요소를 찾습니다.

1》for循环indexof()

var a=[1, 2, 2, 3, 4, 2, 2,5,36,4,78,3,3,3,3];

var b=[];

for (var i =0; i <a.length; i++) {
if(b.indexOf(a[i])==-1 && a.indexOf(a[i])!==a.lastIndexOf(a[i])){
b.push(a[i]);

}

}

console.log(b);

10. 먼저 정렬 한 다음 두 개를 비교하고 같고 아직 b 배열이 없으면 b 배열에 넣습니다.

var a=[1, 2, 2, 3, 2,3,3,3,3];

var b =[];

a.sort(function(a,b){
return a-b;

});

 

for (var i = 0; i <a.length; i++) {
if(a[i]==a[i-1] && b.indexOf(a[i])==-1){
b.push(a[i]);

}

}

console.log(b);

 

코드를 스캔하여 1000 개 이상의 프런트 엔드 인터뷰 질문 모음을 가져와 나중에 시도해보세요.

여기에 사진 설명 삽입

추천

출처blog.csdn.net/weixin_42981560/article/details/109047956