대륙의 대나무 부실공사가 떠오르는 면접 후기!!


오늘의 한줄 요약:

  • 마치 철골 대신 대나무를 사용했던 대륙의 부실공사가 떠오르는 면접후기 입니다.
  • 기초를 소홀히 한 대가를 이렇게 한방에 치룹니다!!

오늘 회사 면접을 보았습니다!!
문제를 푼다길래!!
알고리즘 테스트인 줄 알고 급하게 프로그래머스를 가입하고 스택문제만 겨우 풀고 갔습니다.

github : Interview_Question_for_Beginner

이걸 되게 열심히 보고 갔는데 관련 질문은 index하나 받았습니다.
제가 뭔가 뭔가 신경써서 보는건 다 피해가나봐요 적중률이..없습니다 ㅠ0ㅜ

==========면접 후기===========

  1. 나는 자바 문법에 대해 굉장히 소홀하게 재대로 하지 않았다.
    그리고 기억이 나지 않는다.
  2. 문제에서 와 긴가민가 멍청이라서 면접관의 “이것은 무엇인가요?” 질문에서 제대로 하지 못했다.
    왜냐하면 제대로 단어와 사전적 정의가 들어있지 않아서 모른다고 할 수 밖에 없었다.
    오늘의 면접에선 거의 정치인급으로 모른다를 많이 했던 것 같습니다.

==============결론=================
자바 문법과 객체지향에 관해 꼼꼼하고 튼튼하게 준비했더라면 오늘만큼 좋은 면접 기회는 없었던 것 같습니다.
그렇지만 기본에 충실하지 못했던 저는 이번 좋은 기회를 날려 먹은 것 같습니다.
그리고 평소에 잘해둬야겠다는 생각이 들었습니다.
어 면접이네라고 생각해서 지식을 습득하려니 집중도 잘 안되고 머릿속에 남질 않아요 읽자마자 날라가요..

앞으로는 자바문법을 꼼꼼히 보고…
사실 코틀린으로 하고싶은 심정!!!
그리고 코딩테스트를 위한 알고리즘도
하루에 꾸준히 꾸준히 심심풀이로 준비하고!!!!
CS는…!!
무료강의를 매일 시청하면서 체계적으로 정리해야겠습니다.

맨날 놀았더니 벌 받았네요!!
다음엔 좋은 소식으로..오겠습니다….


문항수 10문제

1. OOP 설명에 대해 틀린 것을 고르시오.

정보은닉이란 결합을 낮추고 외부 응집도를 올린다를 고름.
면접관 : 왜 이걸 고르셨나요?
나: 응집도때문에 틀렸다고 생각합니다. 그런데 잘 모르겠습니다.
면접관: 다형성에 관해 오버로딩 오버라이딩에 관해 설명해줄래요?
나: 오버라이딩은 클레스나 인터페이스를 상속 받아 메서드를 재정의 하는 것입니다.
오버로딩은 리턴타입은 같고 매개변수의 개수나 타입이 다른 경우입니다.

결론: OOP 개념 없음 저게 맞는 말인데 왜 저걸 골랐지…..결국 모른다는 소리!

2. 예상되는 결과를 고르시오

public class Main {

    static class Math {
        static int getSum(int n) {
            if (n == 1) {
                return 1;
            }
            return n + getSum(n - 1);
        }
    }
    public static void main(String[] args) {
        System.out.println("Math.getSum(10) = " + Math.getSum(10));
    }
}

정답 : 55
면접관 : 코드가 완벽해 보이나요?
나 : 잘 모르겠습니다.
면접관: 그럼 0을 넣으면 어떨까요?
나 : 0을 넘으면 기저조건에 걸리지 않아 스택오버플로우 발생 할 것 같습니다.

3 ~ 4번 문제

public class ObjectA {

    private String name;
    private String id;

    public ObjectA(String name) {
        this.name = name;
    }

    public ObjectA(String name) {
        this.id = name;
    }

    public ObjectA(String name, String id) {
        this.name = name;
        this.id = id;
    }
}

3. 여기에 사용된 코딩 기법이 무엇인가요?

객체지향(OOP)

여긴 그냥 넘어감 그냥 사실 클레스라고 해야했나 뭘 말해야 할지 몰랐다.

4. 여기서 오류는 무엇일까요? 그 이유를 기술하시오.

public ObjectA(String name) {
this.id = name;
}

이유 : this.id가를 초기화해야하는데 name이기때문에

면접관 : 매개변수는 하나인데 id, name을 다르게 식별해서 초기화 할 수 있을까요?
나 : 매개변수의 갯수나 타입이 달라야 하는데 잘모르겠습니다.

나는 사실 이런적이 없었다 분명 문법책에선 본적이 있는데 흑흑 (기본부족)

5. SQL 병행제어에서 Transaction 격리 레벨 순서대로 맞는걸 고르세요.

READ UNCOMMITTED -> READ COMMITTED -> REPEATABLE READ -> SERIALIZABLE

면접관 : 왜 이걸 고르셨나요?
나: 첫번째는 커밋에 관계없이 읽을수 있고 두번째는 커밋이 완료 된 것을 읽을 수 있고
세번째는 트랙잭션 ID를 부여해서 대소비교해서 읽을 수 있고 마지막은 쓰기가 끝내야 읽을 수 있습니다.
면접관 : 아 그럼 격리레벨을 설정하여 프로젝트를 해본적 있나요?
나: 기본 디폴트 설정으로 해서 따로 설정해 본 적 없습니다.

6. 틀린점과 이유를 말하시오

import java.util.*;



class LandAnimal { public void crying() { System.out.println("육지동물"); } }

class Cat extends LandAnimal { public void crying() { System.out.println("냐옹냐옹"); } }

class Dog extends LandAnimal { public void crying() { System.out.println("멍멍"); } }

class Sparrow { public void crying() { System.out.println("짹짹"); } }



class AnimalList<T> {

    ArrayList<T> al = new ArrayList<T>();



    void add(T animal) { al.add(animal); }

    T get(int index) { return al.get(index); }

    boolean remove(T animal) { return al.remove(animal); }

    int size() { return al.size(); }

}



public class Generic01 {

    public static void main(String[] args) {

        AnimalList<LandAnimal> landAnimal = new AnimalList<>();


        landAnimal.add(new LandAnimal());

        landAnimal.add(new Cat());

        landAnimal.add(new Dog());

        landAnimal.add(new Sparrow());



        for (int i = 0; i < landAnimal.size() ; i++) {

            landAnimal.get(i).crying();

        }

    }

}

landAnimal.add(new Sparrow()); 타입 일치하지 않아서 오류가 생깁니다.

면접관 : 제네릭이란 무엇인가요?
나 : 제네릭은 컴파일 시 타입을 지정하고 맞지 않으면 컴파일 에러가 납니다.
면접관 : 그럼 어떨때 사용하나요?
나 : 자바 컬렉션에서 어떤 자료형이 들어올지 모르는데 그때 제네릭을 사용해서 사용 할 수 있습니다.
만약 제네릭이 없다면 각 자료형마다 클레스를 따로 만들어줘야 합니다.

7 ~ 8번

public class ObjectA {

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public ObjectA(String name) {
        this.name = name;
    }

    public void print() {
        System.out.println(name);
    }
}

public class ObjectB extends ObjectA {

    public ObjectB(String name) {
        super(name);
    }

    public void printPrefix(String prefix) {
        System.out.println(prefix);
        System.out.println(name);
    }
}

7. 오류를 찾고 고치시오

name이 private속성이라 직접 접근 수 없습니다.
System.out.println(name) – > super.print()를 통해 인쇄 할 수 있습니다.
면접관 : 다른 방식으로는 해결 할 수 없나요?
나: 없을 것 같은데요?
면접관 : 그럼 코드를 추가해서 해결 한다면 어떻게 해야할까요?
나: super.name으로 하겠습니다.

위에 private이라 접근 못한다고 해놓고 밑에서 헛소리 했습니다. (자바 기초 부족)

8. 맞는 설명을 고르시오

문제 기억 안남 정답은 컴포지션 같았음.

(1) association
(2) dependency
(3) composition
(4) 기억안남

면접관: 하나하나 설명해줄래요?
(1)은 연관관계고
(2)는 디펜던시는 생성자주입 같은것들입니다
(3)은 지금처럼 A가 B를 갖고 있을때
(4)는 기억안남 모르겠습니다.

면접관: 그럼 컴포지션만 알고 있어서 컴포지션이라고 한건가요?
나: 음.. 이건 그래도 컴포지션관계가 맞는 것 같습니다.

9. 인덱스에 관해 맞는 모두 설명을 고르시오

(1) 기억안남
(2) 결합 인덱스를 사용 할때 칼럼의 순서는 중요하지 않다.
(3) 기억안남
(4)업데이트가 빈번하지 않은 칼럼을 선정한다.

정답 : 1, 4

면접관: 왜 이게 맞다고 생각하는지 설명해줄래요?
나: 결합 인덱스의 순서에 따라 찾을수 없을수도 있습니다.
그리고 3번이 틀렸지만 기억이 면접 내용 기억이..
업데이트가 빈번한 컬럼을 선정하면 인덱스를 계속 재구성해야되기 때문입니다.
면접관: 그럼 실제 프로젝트에서 인덱스를 사용해보셨나요??
나: DB에 데이터가 많은 적이 없어서 프라이머키만 주로 사용했고
index는 어노테이션으로 설정만 해봤습니다.

10. 학생 테이블 성적 테이블이 있는데, 시험 횟수 2회 이상를 치룬 학생 과목별 평균 SQL를 작성하세요

Selct from count average..이런거 적고 쿼리 작성하지 못함!! 손도못댐!!

면접관: 성적 테이블을 정규화하려면 어떻게 해야할까요?
나: 헛소리하다가 음 모르겠습니다로 마무리!!!

면접관: 그럼 쿼리를 사용해 본적이 있나요?
나: 주로 JPA만 사용했는데 sql 쿼리 작성은 4번 해봤습니다.
면접관 : 왜 작성하게 되었나요?
나: Spring 설정에 show-sql이란 항목이 있는데 조회할때 한번 조회했는데 4번 조회가 되서 이상하다
싶어서 찾아보니 1:N문제라서 쿼리 횟수를 줄이려고 했었습니다.
면접관: 아 그렇군요~ 그럼 JPQL까진 해보셨다는거네요.
나: JPQL로 작성했었습니다.

그 외 “우리회사에 궁금한점” 조금 이야기하고 끝났습니다!!