기포 문제에 관한 종합 지침서

4518 단어 interviewcareer
경전의 거품 문제를 탐색해 봅시다.무슨 문제라도 있습니까?무엇이 잠재적인 해결 방안입니까?당신은 면접에서 그것을 사용해야 합니까?

문제.


Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “FizzBuzz”.


이것은 수학 문제다.핵심 문제는 3과 5로 나눌 수 있는 숫자를 찾는 것이다.
당신은 다음과 같은 주제에 대한 이해를 보여줄 것입니다.
  • 모산자
  • 회로
  • 선택한 언어로 콘솔에 출력하는 방법
  • 함수를 어떻게 작성하고 변수를 어떻게 사용하는가
  • FizzBuzz 솔루션


    지금은 이 문제를 해결하기 위해 많은 다른 방법이 있다.몇 가지 솔루션을 소개하겠습니다.

    공통 솔루션


    const fizzBuzz = (): string[] => {
        const result: string[] = [];
        for (let i = 1; i <= 100; i++) {
            if (i % 3 === 0 && i % 5 === 0) {
                result.push('FizzBuzz');
            } else if (i % 3 === 0) {
                result.push('Fizz');
            } else if (i % 5 === 0) {
                result.push('Buzz');
            } else {
                result.push(i.toString());
            }
        }
        return result;
    };
    
    이 해결 방안은 어떤 좋은 점이 있습니까?
  • 그것이 이 문제를 해결했다.
  • 이 해결 방안은 어떤 나쁜 점이 있습니까?
  • 신기한 숫자가 있어요100
  • 모드 연산자 복사
  • 테스트하기 어려워
  • 최우해


    const fizzBuzz = (n: number = 100): string[] => {
        const result = []
        for(let i = 1; i <= n; i++) {
            const divBy3 = i % 3 === 0;
            const divBy5 = i % 5 === 0;
            const str = `${divBy3 ? 'Fizz' : ''}${divBy5 ? 'Buzz' : ''}`;
            result.push(str || i.toString())
        }
        return result;
    }
    
    이 해결 방안은 어떤 좋은 점이 있습니까?
  • 매우 효율적입니다.
  • 이것은 모드 연산의 값을 변수에 저장한다.
  • 이 해결 방안은 어떤 나쁜 점이 있습니까?
  • 테스트하기 어려워
  • 더 많은 숫자로 확장하기 어렵다.
  • 변수 이름의 줄임말.
  • 내가 보고 싶은 솔루션


    이 해결 방안은 나의 개인 가치관을 대표한다.코드가 실행되어야 합니다.그 밖에 나는 해결 방안을 가능한 한 읽을 수 있기를 바란다.나는 성능도 상관없고 해결 방안이 가장 좋은지도 상관없다.
    대다수의 사람들과 달리 나는 두 가지 다른 함수를 사용하여 이 문제를 해결한다.테스트를 최적화하고 있습니다.두 함수를 작성함으로써 논리를 더욱 쉽게 테스트할 수 있다.사실 면접을 볼 때 저는 지원자에게 논리적으로 테스트 용례를 작성하도록 요구할 것입니다.
    const fizzBuzz = (n: number = 100): string[] => {
        const output: string[] = [];
        for (let i = 1; i <= n; i++) {
            output.push(convertToFizzBuzz(i));
        }
        return output;
    };
    
    const convertToFizzBuzz = (n: number): string => {
        const divisibleBy3 = n % 3 === 0;
        const divisibleBy5 = n % 5 === 0;
        if (divisibleBy3 && divisibleBy5) {
            return 'FizzBuzz';
        } else if (divisibleBy3) {
            return 'Fizz';
        } else if (divisibleBy5) {
            return 'Buzz';
        } else {
            return n.toString();
        }
    };
    
    이 해결 방안은 어떤 좋은 점이 있습니까?
  • 읽을 수 있습니다.
  • 그것은 테스트 가능한 것이다.
  • 이 해결 방안은 어떤 나쁜 점이 있습니까?
  • 그것은 효율적이지 않다.
  • 업무 면접에서의 쉬쉬하는 소리 문제


    흔히 볼 수 있는 것은 업무 면접에서 완전한 기술 면접을 보지 않고 종이 한 장에 문제를 해결하라는 것이다.그것은 후보자가 기본적인 인코딩 기능을 갖추고 있는지 확인하기 위해 스모그 테스트로 사용된다.

    Fizz Buzz의 근본적인 문제


    너는 수학 문제를 해결할 수 있는 개발자가 그리 필요하지 않을 것이다.많은 개발자들이 좋은 수학 기술을 가지고 있지만, 이것은 보통 당신이 매일 해결해야 할 문제가 아니다.
    네가 갓 졸업한 학생을 면접할 때, 문제의 중점은 무엇입니까?만약 그가 인코딩을 할 줄 모른다면, 그는 아마 학위를 받지 못할 것이다.최악의 경우, 너는 반드시 업무상 그를 훈련시켜야 한다.하지만 이것이 바로 학생을 고용하는 위험이다.
    다른 한편, 경험이 있는 개발자에게 물어보면 아무것도 증명할 수 없다.너는 그가 최근에 수학 문제를 풀지 않았다는 것을 발견할 수 있을 것이다.그것은 그의 사고 과정이나 문제를 해결하는 능력을 폭로하지 않을 것이다.개발자를 일반적인 도구에서 분리합니다.

    후보자가 문제를 해결할 수 없을 때, 이것은 무엇을 의미하는가?


    내가 이 문제를 물었을 때, 나는 인터뷰에서 한 가지 일을 알아차렸다.대다수 상황에서 후보자는 모형 연산자에 익숙하지 않다.
    그리고 후보자가 모산자 없이 이 문제를 해결할 수 있을 것이라고 말할 수 있다.후보자는 Math.floor(n / 3) === n/3Math.floor(n / 5) === n/5 같은 숫자로 3과 5로 나눌 수 있는 숫자를 찾을 수 있다.
    이런 사고방식은 결함이 있다.이 후보자는 수학 문제를 해결한 경험이 많지 않다.따라서 그가 모형을 알고 있는지, 아니면 모형을 해결할 수 있는지의 문제는 중요하지 않다.

    당신은 후보자의 해결 방안에서 무엇을 배울 수 있습니까?


    가장 중요한 것은 해결 방안이 일회용 코드로 작성될 수 있도록 확보하는 것이다.프로젝트를 위한 코드의 요구를 충족시킬 필요가 없습니다.따라서 후보들이 내놓은 해결책은 사실상 중요하지 않다.
    더 나아가 후보가 쓴 코드에서 어쨌든 많은 것을 배울 수는 없다.이 문제는 현재 면접 준비 자료에서 매우 보편적이기 때문에 지원자에게 이 문제를 해결하라고 요구할 가치가 없다.후보가 그것을 기억했을 가능성이 높다.
    만약 후보가 이 문제에 익숙하지 않다면, 그는 스트레스와 압력 속에서 코드를 썼을 것이다. 이것은 아마도 그의 가장 좋은 작품을 만들지 못했을 것이다.

    결론


    만약 당신이 면접에서 이 문제를 묻고 싶다면, 정말 자신에게 "당신은 이 문제에서 무엇을 배울 수 있다고 생각합니까?"면접 시간이 제한되어 있으니 시간을 낭비하지 마라.
    이것은 생각할 만한 재미있는 작은 연습이다.특히 서로 다른 버전의 Fizz Buzz를 써서 다른 해결 방안을 찾을 수 있는지 살펴보자.(언젠가는 균형이 있을 것이다)
    Fizz Buzz는 고전적인 면접 문제입니다.그러나 이 문제는 역사서에 남겨 두어야 할지도 모른다.

    좋은 웹페이지 즐겨찾기