ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] CS 기술면접 (Feat. 밍글데이)
    Computer Science 2024. 8. 8. 06:59

     

    오늘 모의 기술면접을 봤다. 

     

    난 민준튜터님께 보게 되었다. 스윗한 민준튜터님이라 하더라도 걱정되는 건 마찬가지였다. 스윗한 분의 안 스윗한 표정을 보게 될까봐 무섭기도 했고, 무엇보다 CS 특강을 해주신 게 민준튜터님이기에 잘 못하면 실망하실까봐 걱정이 됐다.. 암튼 면접 시간 전까지 그냥 열심히 외우는 수밖에 없었다.  

     

    우리조는 파트를 나눠서 예상문제를 만들어 공유하기로 했었는데 내가 맡은게 소프트웨어 문서 파트였다. 근데 아무리 생각해도 여기서는 문제가 안 나올 것 같았다ㅠ 예상문제를 만들다 현타가 와서 급하게 매니저님께 여쭤보니, 예상대로.. 그 질문엔 답변해줄 수 없지만, 시간이 없으니 모르는 질문이 나오더라도 대처할 수 있도록 '말하는 연습'을 하는 게 면접을 위한 방법이 될 거라고 하셨다. 우사인볼트처럼 돌아와 마이크를 켰다. 이러이러해서 현타가 왔고.. 매니저님한테 갔었고 어쩌구저쩌구.. 성현님(조장님)이랑 율님 민승님 정민님은 웃으면서 들어주셨고, 성현님의 리드로 롤플레이하면서 지목해서 질문하고 대답하고 질문하고 대답하고, 대답 못한 건 아는 사람이 키워드 위주로 요약해서 설명해주면서 면접 준비를 했다. 같이 하니까 긴장도 풀리고, 이해도 잘 되고, 재밌고, 너무 좋았다. 우리조 분들 정말 너무 좋다ㅠㅠ 잊지 말아야지ㅠㅠ

     

    오늘 면접에 출제된 문제들 중 기억나는 문제들을 정리해보려 한다. 그리고 열심히 외웠는데 나오지 않은 문제들도 한두개 끼워넣었다..ㅎㅎ


     

    1. 배열(Array)와 연결리스트(Linked List)의 차이점이 무엇인가요?

     

    배열은 미리 크기를 정해놓는 정적 자료구조로서 연속된 메모리 주소를 할당받습니다. 인덱스가 존재하기 때문에 접근과 탐색이 용이합니다. 연결리스트는 크기를 정할 필요가 없는 동적 자료구조로서 연속된 메모리 주소를 할당받지 않습니다. 노드가 존재하며 추가나 삭제가 용이합니다. 

     

     

    2. UDP와 TCP에 대해 설명해보세요.

     

    UDP는 비연결형 데이터그램 방식의 프로토콜로 신뢰성을 보장하지 않습니다. 그리고 TCP에 비해 구조가 단순하고 빠릅니다. 

    TCP는 연결형 가상회선 방식의 프로토콜로 신뢰성을 보장합니다. UDP에 비해 구조가 복잡하고 느립니다.

     

     

    3. HTTP와 HTTPS의 차이점을 설명하세요.

     

    HTTP는 서버와 클라이언트가 웹상에서 정보를 주고받을 수 있도록 해주는 프로토콜입니다. 그런데 암호화를 하지 않는 프로토콜이다보니 보안성이 취약한 문제가 있었습니다. 해당문제를 극복하기 위해 암호화를 하는 HTTP프로토콜을 HTTPS라고 합니다. 100% 보안성이 확보된 것은 아니지만 그래도 기존의 HTTP보다는 보안성이 우수합니다.

     

     

    4. 클러스터링과 병렬컴퓨팅의 차이점이 뭔가요?

     

    클러스터링은 여러대의 컴퓨터가 하나의 시스템처럼 동작하는 걸 의미합니다. 예를들어 큰 기관에 여러 데이터를 담고 접수하는 시스템과 그 시스템들을 관리하는 시스템이 있다고 했을 때, 사용자는 마치 하나의 시스템에서 작업하는 것 같은 느낌을 받지만 실제로는 여러 컴퓨터가 하나의 시스템처럼 동작하는 것일 뿐입니다. 즉, 하나의 작업만 하기 위한 것이 아닌 여러 컴퓨터를 통해 신뢰성을 확보하기 위한 기술입니다.

    병렬컴퓨팅은 하나의 큰 문제를 여러 컴퓨터가 나누어 해결하는 방식을 의미합니다. 병렬컴퓨팅의 예시로는 슈퍼 컴퓨터를 통한 기상 예측을 들 수 있습니다. 병렬컴퓨팅을 한다고 반드시 모든 컴퓨터가 같은 시스템을 사용하는 것은 아닙니다. 뭐가 됐든 한가지 문제를 처리하기 위해 여러 컴퓨터가 붙어서 해결하는 방식을 의마합니다.

     

     

    5. 객체지향 프로그래밍(OOP, Object-Oriented Programming)에 대해 4가지 개념으로 설명하세요.

     

    객체 지향이란 추상화하고자 하는 객체의 모습을 가상의 공간에 구체화하며 설계해 나가는 것을 의미합니다.

     

    • 객체가 나오면 반드시 따라오는 개념이 클래스(Class)입니다. 클래스는 객체를 생성하기 위해 어떤 속성과 방법의 집합을 추상화하여 표현한 것을 의미합니다. 클래스 안에는 함수와 변수가 있고, 클래스 안에 클래스를 만들 수도 있습니다. 클래스 안에 있는 맴버함수와 변수에 접근하기 위해서는 반드시 객체를 이용해야 합니다.

     

    • 객체(Instance, 인스턴스)란 현실세계에 있는 어떤 대상을 추상화 한 것인데요, 동물이 될 수도 있고, 학생이나 선생님도 객체로 표현할 수 있고, 학교나 은행과 같은 기관, 또는 감정이나 생각들도 객체로 표현할 수 있는데, 클래스의 객체는 클래스 기반으로 생성된 실체. 즉, 클래스의 인스턴스입니다. 클래스에서 정의한 속성과 메소드를 갖고 있으며, 실제 프로그램에서 데이터와 행동을 표현하는 데 사용됩니다.

     

    • 상속(Inheritance)은 상속은 기존 클래스(부모 클래스)의 속성과 메소드를 새로운 클래스(자식 클래스)에서 재사용할 수 있게 해주는 메커니즘입니다. 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있습니다. 예를 들어 '고양이'라는 자식 클래스가 ‘동물’이라는 부모클래스 안에 있는 ‘걷기’함수, ‘숨쉬기’함수를 상속받으면 동물의 기본적인 기능을 다시 구현하지 않아도 되고, 그루밍 같은 고양의 특징들만 추가로 구현하면 됩니다.

     

    • 다형성(Polymorphism)은 동일한 메소드 이름이지만, 서로 다른 클래스에서 다르게 동작하도록 하는 걸 의미하는데요. 오버라이딩과 오버로딩이 있습니다. 오버라이딩은 상속받은 클래스에서 어떤 기능을 재정의하는것을 의미합니다. 예를 들어, 부모클래스에서 ‘get()’이라는 함수가 있을떄 자식 클래스에서 동일한 이름으로 ‘get()’이라는 함수를 만들고 그 기능을 다시 정의하면 다시 정의한 함수로 기능하게 됩니다. 그리고 일반적으로 오버로딩이라고 하면 함수의 이름은 같으나 매개변수를 다르게 설정하여 사용 목적에 따라 다르게 불러오는것을 의미합니다.

     

    지금 말씀드린 이 네 가지 개념이 객체지향 프로그래밍의 핵심 원칙으로, 소프트웨어 개발 시 코드의 조직화와 유지보수를 용이하게 해줍니다.

     

     

    근데 이거 맞나...ㅎㅎ 이 문제에 답변을 못했다... 답변을 하다가... 정리가 안될 것 같아 포기하고. 죄송합니다 공부하겠습니다...했다.🥲

     

     

     

    6. [파이썬] 자료형이 무엇인지 설명해보세요.

     

    데이터가 저장되는 형식을 의미합니다.

     

    자료형의 예로는 정수, 실수, 문자열, 리스트, 딕셔너리, 등이 있습니다.

     

     

    하 이것도.. 약간 버벅거렸다.... 바보같았다 정말🥲

     

     

    7. 중복을 허용하지 않는 자료형은 뭘까요?

     

    set 입니다.

     

     

     이건 씩씩하게 대답한듯..😂

     

     

    8. SQL 과 NOSQL 의 차이점은 뭘까요?

     

    데이터 구조:

    • SQL: SQL 데이터베이스는 관계형 데이터베이스 시스템(RDBMS)을 사용하며, 정해진 규칙에 따라 데이터를 표 형식으로 저장합니다. 예를 들어, 학교에서 학생 명부를 표로 작성하는 것과 같습니다.
    • NoSQL: NoSQL 데이터베이스는 비관계형 데이터베이스 (Non-Relational Database)를 사용하며, 자유롭게 데이터를 저장할 수 있습니다. 예를 들어, 일기장에 자유롭게 글을 쓰는 것과 같습니다.

     

    -확장성:

    • SQL: 더 강력한 컴퓨터로 바꿔서 성능을 높입니다. 예를 들어, 작은 컴퓨터를 큰 컴퓨터로 바꾸는 것과 같습니다.
      1. 대부분의 SQL 데이터베이스는 수직 확장에 의존합니다.
    • NoSQL: 여러 대의 컴퓨터를 추가해서 성능을 높입니다. 예를 들어, 여러 대의 컴퓨터를 같이 사용하는 것과 같습니다.
      1. NoSQL 데이터베이스는 설계상 수평 확장에 최적화되어 있습니다.

     

    트랜잭션:

    • SQL: 모든 작업이 완벽하게 끝나야 저장됩니다. 예를 들어, 은행에서 송금할 때 모든 절차가 완료되어야 돈이 이동하는 것과 같습니다.
    • NoSQL: 일부는 작업 중에 데이터가 조금씩 저장될 수도 있습니다. 예를 들어, 웹사이트에 댓글을 달 때, 댓글이 점차 저장되는 것과 비슷합니다.

     

    출처: https://easyjwork.tistory.com/60 [쉽게 쉽게 가자:티스토리]

     

     이건 공부한 잔상만 둥둥.. 해야할 답변은 한 글자도 떠오르지 않았다.. 죄송합니다.. 두세번..했다.ㅠㅠㅠ🥲

     

     

    9. 멀티 프로세싱과 멀티 스레드의 정의와 그 둘의 차이점을 설명하세요.


    멀티 프로세싱은 두 개 이상의 프로세스가 동시에 실행되는 것을 의미하고, 멀티 스레드는 하나의 프로세스가 여러 작업 단위를 가지며 실행되는 것을 의미합니다. 이 둘의 차이점으로는 멀티 프로세싱의 경우에는 각 프로세스마다 독립된 메모리 공간을 가지고 있지만 멀티 스레드는 스레드가 동일 프로세스 내의 메모리 공간을 공유합니다.

    안정성 차원에서도 멀티 프로세싱의 경우에는 하나의 프로세스에서 문제가 발생해도 다른 프로세스에 영향을 미치지 않지만 멀티 스레드의 경우에는 해당 프로세스 전체에 영향을 미칠 수 있습니다.
    둘의 예시로 저희가 카카오톡과 크롬을 동시에 실행하는 것은 두 개의 프로세스를 동시에 실행 중인 것이니 멀티 프로세싱, 크롬 내에서 여러 개의 탭을 켜두고 작업하는 것은 크롬이라는 하나의 프로세스 안에서 여러 작업을 하는 것이니 멀티 스레드라고 볼 수 있습니다.

     

     

    10. 사용자가 컴퓨터에게 명령을 할 수 있는 UI는 여러 종류가 있는데 그 중 대표적인 2가지에 대해서 간단히 설명해보세요.


    대표적으로 CUI와 GUI가 있습니다. CUI란 사용자가 텍스트를 기반으로 명령을 전달하는 인터페이스를 의미하며 주로 프로그래머 혹은 시스템 관리자와 같은 고급 사용자가 사용을 선호합니다.
    GUI란 사용자가 그래픽을 기반으로 명령을 전달하는 인터페이스를 의미하며 일반 사람들이 가장 흔하게 사용 중인 인터페이스입니다.
    간단한 예시로 폴더생성 작업을 실행할 때 CUI 방식은 폴더 생성 명령어를 터미널 혹은 콘솔 창에 입력하면 되는 것이고 GUI 방식은 우리가 흔히 볼 수 있는 바탕화면에서 마우스로 우클릭-폴더 생성을 하는 것이라고 할 수 있습니다.

     

     

    그리고 마지막 두 문제SQL 코드 문제 하나, Python 코드 문제 하나였다.

    실행했을때 출력되는 답이 뭔지를 맞추는 문제였는데 다행히 종이에 써서 풀어도 된다고 해주시고 기다려주셔서 종이에 써서 차근차근 풀었다.

     

    SQL은 서브쿼리문이 들어간 문제였고,

     

    python은.. 

     

    내 기억이 맞다면 이런 코드였다. 

    def func(n):
        if n <= 0:
            return
    
        else:
            print('*'*n)
            func(n-1)
    
    func(4)

     

    답은 이거

    ****
    ***
    **
    *

     

     

    긴장해서 민준튜터님 얼굴을 제대로 못보긴 했는데 눈살을 찌푸리진 않으셨던 것 같다.ㅎㅎ

    스윗한 민준튜터님은 피드백도 스윗하게 해주셨다ㅠㅠ 포인트는 자신감 있게 이야기하기, 앞으로도 계속해서 CS공부 열심히 하기

     

    우연찮게도 우리조는 거의 다 민준튜터님한테 면접을 봤다. 다녀와서 후기를 공유하는데, 율님은 답은 틀려놓고 씩씩하게 대답했더니 민준튜터님이 씩씩하건 좋다 하셨다고, 난 틀린 것도 맞는 것도 자신없게 얘기해서 자신감있게 얘기하면 좋을 것 같다 하셨다고, 민승님은 민준튜터님이 1부터 8중에 맘에 드는 숫자 하나 고르라고 하셨는데 다 마음에 안들었지만 하나를 골라야 했다고 하셔서 빵 터졌다. 그리고 우리 모두 다녀오자마자 밥을 먹으러 갔다ㅋㅋㅋㅋ 다들 점심을 안먹고 면접준비를 하느라 너무 배고팠기 때문이다. 암튼 같이 하니까 너무 즐거웠고 면접이 끝나고 나니 마냥 행복했다ㅋㅋ 근데 더 즐거운 밍글데이가 우리를 기다리고 있었다. 올해들어 가장 많이 웃은 것 같다.ㅋㅋ

     

    tmi도 재밌었고 게임도 재밌었지만ㅎㅎ 라디오가 원탑이었다. 일단 DJ청순님의 막힘없는 진행과 더불어 누가 썼는지..ㅋㅋ 기가막힌 사연들과 신청곡까지.. 너무 재밌었다ㅎㅎㅎ 또 했음 좋겠다 밍글데이💕 

     

     

    감사코드...

    def appreciate():
    
        after_cs_interview = input("오늘은 무슨 데이? ")
    
        if after_cs_interview == '밍글데이':
    
                message = """
                
                매니저님들, 튜터님들 바쁘신 와중에도 너무 즐거운 시간 선물해주셔서 정말 감사합니다!!
                오랜만에 너무 많이 웃었습니다ㅎㅎ 앞으로도 열심히 하겠습니다^^
                
                """
                print(message)
    
    appreciate()

     

    오늘은 무슨 데이? 밍글데이
    
                
                매니저님들, 튜터님들 바쁘신 와중에도 너무 즐거운 시간 선물해주셔서 정말 감사합니다!!
                오랜만에 너무 많이 웃었습니다ㅎㅎ 앞으로도 열심히 하겠습니다^^
                
                
    Process finished with exit code 0

     

     

Designed by Tistory.