본문 바로가기

카테고리 없음

기술면접 대비 [수정중]

  1. 자바의 데이터 타입인 기본형에 대해서 말하시오.
    정수형 - byte, short, int, long
    실수형 - double, float
    bool형 - boolean

    각 데이터 형간에는 형변환이 가능하며, 큰 값에서 작은 값으로 캐스팅 시에는 값 손실이 있으므로, 반드시 (데이터형)을 표기하고 형변환 하여야 함

  2. 자바의 데이터 타입인 reference Type에 대해서 설명하시오.
    기본형을 제외한 나머지 모두가 reference Type.
    데이터 타입과는 달리, 참조값을 통해 해당 객체에 직접적으로 접근할 수 있음.

  3. 접근 제어자의 종류와 특성에 대해 설명하시오.
    Public (어디서든 접근이 가능) 
    Default (같은 패키지 내 혹은 상속 받은 클래스 내에서 접근 가능)
    Protected (같은 패키지 내에서만 접근 가능)
    Private (같은 클래스 내에서만 접근 가능)

  4. 프로세스와 스레드란?
    • 프로세스 -  실행되고 있는 프로그램의 개체. CPU 시간이나 메모리 등 시스템 장원이 할당되는 독립적인 개체. 다른 프로세스와 상관 없이 독립적으로 자원을 할당 받음.프로세스 간의 통신을 위해선 파이프, 파일, 소켓 등을 사용하여 통신하여야 함
    • 쓰레드 - 프로세스 안에 존재하여, 프로세스의 자원을 공유하는 개체
      흔히 경량 프로세스라고 부름 
      각 쓰레드는 별도의 레지스터와 스택을 갖고, 힙 영역은 공유함

  5. 뮤텍스와 세마포어
    • 프로세스 혹은 쓰레드 간의 통신 시에 shared memory 등을 쓰는 경우 하나의 자원에 두 개 이상의 프로세스 혹은 쓰레드가 접근하는 경우에 문제가 발생.
      이를 제어하기 위해 쓰레드에서는 뮤텍스를 사용하며, 프로세스에서는 세마포어를 사용 함
    • 뮤텍스
      • 상호배제라고도 하며, Critical Section을 가진 스레드의 Running time이 서로 겹치지 않도록 각각 단독으로 실행하게 하는 기술 
        synchronized 또는 lock을 통해 해결
    • 세마포어
      • 리소스 상태를 나타내는 간단한 카운터
        공유 리소스에 접근할 수 있는 프로세스의 최대 허용치만큼 동시에 사용자가 접근하여 사용할 수 있음. 

  6. 쓰레드를 구현하기 위한 방법?
    • Runnable 인터페이스 구현 
      • run 함수를 반드시 구현해야 함.
      • Thread 생성자의 매개변수로 입력
    • Thread 클래스를 상속
      • Thread 클래스를 상속 받아서 구현.
      • 자바는 다중 상속이 안되므로 이외의 클래스를 상속 받을 수 없음

  7. synchronized에 대해 설명 하시오.
    • 쓰레드가 하나의 자원을 공유함에 따라 데이터 일관성의 문제가 생기는데, synchronized 처리를 해줌으로써, 하나의 쓰레드만 접근할 수 있도록 함

  8. Static 키워드
    • 인스턴스 변수 혹은 인스턴스 메소드를 클래스 변수 혹은 클래스 메소드로 변경시킴
      모든 인스턴스 간에 공유하는 변수 혹은 메소드가 됨

  9. 클래스와 인스턴스의 차이
    • 클래스는 빵을 찍어 내는 틀과 같고, 인스턴스는 빵
      클래스에서 정해진 기능과 모양에 맞추어 인스턴스가 생성됨

  10. 객체지향과 절차지향의 차이점
    • 절차지향 - 순차적인 처리가 중요시 됩니다. 프로그램 전체가 유기적으로 연결되어 있어 하나의 코드 변경이 전체에 영향을 미칠 수 있음. 코드 사이즈를 최소화하고, 가장 빠르게 동작하는게 우선이면 절차지향 프로그래밍 언어를 사용
    • 객체 지향
      개발하려는 기능을 묶어 모듈화, 모듈을 재활용하기 때문에 같은 기능을 반복적으로 연산하지 않고 재사용률이 높음. 업그레이드가 쉬위며, 디버깅이 쉬움
      절차 지향에 비해 상대적으로 느림

  11. 자바와 C의 차이점
    • 자바는 One Source, Multi use 소스 하나를 가지고, 자바를 설치할 수 있는 플랫폼이라면 어떤 플랫폼에서도 소스 변경없이 사용 가능
      메모리 관리를 JVM 내 GC를 통해 이루어지므로 시스템 안정성이 높음
      자동으로 해주는 만큼 성능이 떨어지는 단점이 있음

  12. JAVA에서의 OOP
    • 캡슐화 - 객체 외부에서 개채 내부 정보를 직접 접근하거나 조작할 수 없고, 외부에서 접근할 수 있도록 정의된 메소드를 통해서만 관련 데이터에 접근할 수 있음
      내부 정보가 은폐되어 변경이 발생할 때 오류 발생이 적으며, 재사용이 용이함
    • 상속 - 이미 작성된 클래스를 이어 받아, 새로운 클래스를 생성하는 기법
      코드의 재활용성이 커짐
    • 다형성 - 하나의 객체가 여러 개의 자료형 타입을 가질 수 있는 특성
      ex) Tiger tiger = new Tiger();
            Animal animal = new Tiger();
           Predator predator = new Tiger();
      Tiger 클래스, Animal 클래스에 선언된 함수에만 접근이 가능함
      다형성이 없다면 각 클래스 객체 별로 연산을 해주어야 하나, 다형성으로 인해 하나로 묶을 수 있으므로 편리해짐

  13. 추상클래스와 인터페이스에 대해 설명하시오.
    • 인터페이스 - 클래스가 아닌, 다른 구조체 사용(interface).
      다중 상속이 가능하며, 구현을 명시한 클래스에서는 반드시 구현해야 함
      껍데기만 표현되어 있음
    • 한 개 이상의 추상 메소드를 가진 클래스. 다중 상속이 불가능 
      클래스 앞에 abstract가 붙으며, 실제 메소드 추가도 가능
      상속 받은 클래스에서 구현을 강제하지 않음

  14. 인스턴스 변수, 전역 변수, 로컬 변수
    • 전역/클래스 변수
      • 모든 인스턴스가 공통된 영역을 공유함
      • 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 경우에 클래스 변수로 선언
    • 인스턴스 변수
      • 클래스 영역에 선언되며, 클래스의 인스턴스를 생성할 때 만들어짐
      • 인스턴스는 독립적인 저장공간을 가지므로 인스턴스 별로 서로 다른 값을 가질 수 있음
    • 지역 변수
      • 메서드 내에 선언되며, 메서드 내에서만 사용가능
      • 메서드가 종료되면 소멸되는 변수
    • 변수 초기화 순서
      • 클래스 변수 -> 인스턴스 변수 -> 지역 변수
    • 변수 저장 영역
      • Method Area - 클래스에 대한 데이터와 클래스 변수 저장
      • Heap - 인스턴스가 생성되는 공간, 인스턴스의 정보들을 저장
      • 호출 스택 - 메서드의 작업에 필요한 메모리 공간을 제공, 메소드가 종료되면 할당되었던 메모리 공간이 반환됨

  15. 오버로딩과 오버라이딩의 차이
    • 오버로딩 - 똑같은 함수에 매개변수를 변경하여 선언하는 법
    • 오버라이딩 - 부모 클래스로 부터 상속 받은 메소드의 내부 구현 로직을 변경하는 방법

  16. 자바 제너릭이란?
    • 프로그래머가 의도하지 않은 객체가 저장될 수 없더록 타입을 지정하는 것

  17. 인터프리터와 컴파일러



  18. 리팩토링이란?
    • 중복된 메서드를 하나로 합치고, 이동하는 것을 말함

  19. instanceOf 명령어
    • 특정 객체가 특정 클래스의 객체 인지 확인할 때 사용하는 내부 명령어


OS(운영체제)
  1. 교착상태(데드락)
    데드락은 두 개 이상의 프로세스나 쓰레드가 서로 자원을 기다리면서 무한히 기다리게 되는 상태를 말합니다. 
    • 데드락을 피하는 방법
      • 상호 배제: 하나의 자원을 특정 시기에 하나의 프로세스/쓰레드만 소유할 수 있는 형태 
      • 자원 점유: 하나의 자원을 소유하고 다른 프로세스 혹은 쓰레드의 자원을 요청하는 상태
      • 선취 불가능: 하나의 프로세스/쓰레드에게 주어진 자원은 해당 프로세스/쓰레드가 스스로 놓기 전에는 놓게 만들 수 없는 상태
      • 순환 대기: 두 개의 프로세스/쓰레드의 경우, A->B, B->C, C->A에게 서로 자원을 요청하고 기다리는 상황으로 서로 꼬리를 물고 기다리는 상황
      • 4가지 중 하나라도 불충족하면 데드락이 발생하지 않음. 
        연간된 자원을 순차적으로 realese하는 방안과 전체를 제거하는 방안이 있음

  2. 멀티 프로세싱과 멀티 프로그래밍
    1. 멀티 프로세싱
      1. 여러 개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법
    2. 멀티 프로그래밍
      1. 한개의 CPU가 여러 개의 프로세스를 동시에 처리하는 방법


알고리즘

1. 숫자가 String 자료형으로 되어있을 때 각 자리에 있는 수 접근하는 방법 

   Tip ) str.charAt(index) - '0'

   영어로 된 String문자열이 있을 때, 각 자리에 있는 알파벳(a=0, b=1, ..., z=26)으로 계산하는 방법

   Tip ) str.charAt(index) - 'a'