반응형

<알고리즘>

1. array,  linked list

배열 : 데이터를 물리적 주소에 순차적으로 저장, 인덱스를 가지고 있으며 특정 데이터에 바로 접근할 수 있어 속도가 빠르다

연결리스트 : 데이터를 저장할 때 데이터 + 다음 데이터 물리적 주소까지 같이 저장  / 첫 노드 부터 원하는 노드까지 링크를 따라가야 접근 가능하기에 접근 속도는 떨어짐 

 

  • 속도 : 데이터에 대한 접근 속도 (배열 > 연결리스트)
    • 배열 : index 만 있으면 O(1) 접근
    • 연결리스트 : 최소 한 번은 리스트를 순회하여야 하므로, O(n)에 접근
  • 데이터 삽입 속도 : 경우에 따라 다르지만(전체적으로 배열 < 연결리스트)
    • 배열에 공간이 많이 남아있고 맨 끝에 삽입 한다면 O(1)이 가능하지만 매우 드뭄
      • 배열은 중간, 맨 앞에 삽입 할 경우 데이터를 한 칸씩 미뤄야 하고
      • 데이터 삽입 시 모든 공간이 다 차버렸다면, realloc() 또는 새로이 할당하여 메모리 공간 확장 필요
    • 연결리스트 : 어느 곳에 삽입하던지 O(n) 시간 접근 
  • 데이터 삭제 속도 : 경우에 따라 다르지만(전체적으로 배열 < 연결리스트)
    • 위와 비슷하다
    • 연결리스트의 경우 예외 조건 처리를 꼼꼼히 필요로 함 
  • 삽입 삭제가 빈번하다면 연결리스트의 , 이미 만들어진 구조에서 데이터 접근만 필요로 하면 배열

2. 버블 정렬

서로 인접한 두 원소를 검사하여 정렬하는 알고리즘(인접한 2개의 레코드를 비교하여 크기가 순서대로 되어 있지 않으면 서로 교환)

  • 특징 
    • 장점 : 구현이 매우 간단
    • 단점 : 순서에 맞지 않은 요소를 인접한 요소와 교환 / 배열에서 모든 요소들과 교환해야 왼쪽 -> 오른쪽으로 이동 가능

3. 퀵 정렬

  • 리스트 안에 있는 한 요소(피벗) 를 가지고 이를 기준으로 삼아 분할하고 분할된 부분 리스트 정렬 후 
    두 개의 정렬된 부분 리스트를 합하여 전체 리스트 한다
  • 분할-> 정복 -> 결합 

4. 힙 정렬

  • 완전 이진 트리 이용해 내림차순 기준으로 정렬

5. 합병 정렬

  • 하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬 , 두 개의 정렬된 부분 리스트를 합하여 전체가 정렬된 리스트가 되게 하는 방법 
  • 분할 -> 정복 -> 결합

정렬 알고리즘 시간복잡도 비교 

6. ArrayList<>란

 : 배열의 확장판. 배열의 크기를 임의적으로 변화시킬 수 있음, list에 들어갈 데이터 타입 설정 가능

    (add, remove, isEmpty, size, get, indexOf 등의 메소드가 있음)

 

7. hash란?

 : 내부적으로 배열을 사용(HashTable)하여 데이터를 저장, 검색 속도가 빠름.

 데이터 삽입/삭제시 기존 데이터를 밀어내거나 채우지 않고, 데이터와 연관된 고유한 숫자를 생성해 이를 인덱스로 사용.

 

8. equals와 HashCode?

(equals) 동일한 내용을 가진 객체인지를 비교

(hashcode) 동일한 객체인지 구별하기 위해 고유한 정수 값으로 출력

 

9. 스택과 큐의 차이

: (stack) Last in First out

   -> 함수를 호출 할 때, 현재 함수에서 사용되는 값을 스택에 넣고, 작업이 끝나면 함수를 리턴하고 스택에 넣었던

       값을 꺼내는 방식으로 동작

 (Queue) First in First out 

   ->프로세스 처리, CPU 관리, 프린터 큐 등에 사용

반응형
반응형

<자바 문법 및 특징>

1. 자바 특징

현실 세계의 객체를 필드와 메서드로 정의한 Class 기반으로 실제 메모리가 잡혀 만들어진 부품과 같은 객체들을 조합해

전체 프로그램을 완성해 나가는 개발 기법

  • oop : 객체 지향 언어 
  • 가비지 컬렉션에 의해 메모리 자동 관리
    • 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원 회수하는 것
    • 시스템에서 가비지컬렉션을 수행하는 부분 : 가비지 컬렉터
  • 멀티 쓰레드 지원
  • JVM 위에서 동작하기 때문에 특정 OS에 종속적이지 않고 이식성이 좋으며 보안성이 좋다
  • 다양한 오픈 라이브러리들이 존재한
  • 추상화 :  객체의 공통적인 특징을 속성을 변수로 / 공통된 기능을 메소드로 만듬/일반메서드사용
    • 추상 메서드 : 메서드의 정의부만 있고, 구현부는 있지 않는 메서드
    • 추상 클래스 : 추상 메서드를 적어도 하나 이상 가지고 있는 클래스로 자식 클래스에서 오버라이딩(재정의)
                               필요한 추상메서드를 가지고 있기 때문에 객체화 할 수 없다.
  • 캡슐화 , 은닉화 : 외부 객체에서 구현 방식 알 수 없도록 숨기고 별도로 접근할 수 있는 getter/setter 메서드를 통해 접근하는 방식
  • 상속 : 부모 class를 자식이 접근할 수 있도록 물려 받는 방식
    • 변수와 메소드를 그대로 쓰므로 코드 중복을 줄이고
    • 객체 사용하는 클래스의 외부 관점으로 봤을 때, 묶어서 처리(upcasting)할 수 있으므로 효율적인 코드
  • 다형성 : 부모 class 타입으로 해당 부모를 상속받는 여러 자식 class를 대입하는 성질 
                  : 서로 다른 class로 부터 만들어진 객체이지만 같은 부모 class 타입으로 대입할 수 있는 성질
    • 오버로딩
      • 하나의 클래스 내에 이름이 같은 여러 개의 메서드 정의
      • parameter, return 타입 등이 다른데, 수행 내용이 본질적으로 동일 할 때 사용
    • 오버라이딩
      • 부모 클래스의 메소드를 자식 클래스에서 재정의

2. 객체와 클래스의 차이점

  • 클래스 : 현실 세계의 객체 속성과 동작을 추려내 필드와 메서드로 정의한 것 "아직 메모리가 할당되지 않은 상태"
  • 객체 : 클래스라는 설계도를 기반으로 실제 메모리가 잡힌 것을 의미,
                이런 객체를 조합해 전체 프로그램을 완성해나가는 방식 OOP

3. Servlet , JSP

  • Servlet : Container 가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것(html in java)
  • jsp : html 기반에 java코드를 블록화하여 삽입 (java in html)

4. GET, POST

  • GET : 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용 
    • 보안성이 떨어지고 , 길이 제한이 있다
    • POST 보다 상대적으로 전송 속도가 post보다 빠름
    • 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩 되어 URL에 붙는다
  • POST : 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용
    • HTTP 메시지로 넘어온 엔티티를 새로운 자원으로 등록 : 201 response
    • 보안성이 높고, 속도가 get 보다 느리다
    • 객체들의 값도 전송 가능 
    • PUT(식별자 포함하여 웹 서버에 데이터를 전달)과는 비슷하게 작동

5. Call by reference , Call by value

  • Call by reference : 매개 변수가 원래 주소에 값을 저장
  • Call by value : 주어진 값을 복사하여 처리 

6. interface?

모든 메서드가 구현부가 없는 추상메서드, abstract 키워드 붙이지 않아도 자동으로 모든 메서드는 추상 메서드로 정의

  • 인터페이스는 추상화와 다르게 메서드 선언만 가능
  • 변수도 자동으로 final static 키워드가 붙는다. 

7. 접근제한자

  • public(접근 제한자가 없다/ 같은 프로젝트 내 어디서든 사용 가능 )
  • protected(같은 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근)
  • default (같은 패키지 내에서만 접근 가능)
  • private (같은 클래스내에서만 접근 가능)

8. 소켓 통신 (tcp/udp)

  • tcp (transmission control protocol)
    • 연결형 서비스 제공
    • 높은 신뢰성 보장
    • 데이터 흐름 , 호잡 제어
    • 3,4 -way handshaking(데이터 수신 여부 확인)
    • 전이중, 점대점 서비스
  • udp (user datagram protocol)
    • 비연결형 서비스 제공
    • 신뢰성 낮음
    • 데이터 전송 순서 바뀜
    • 데이터 수신 여부 확인 과정 없음
    • tcp 보다 전송 속도가 빠름

9. Primitive type , Reference type

  • Primitive type : 변수에 값 자체 저장
    • 정수 / 실수 / 문자 / 논리형
    • wrapper class (간단한 데이터를 객체로 만들어야 할 경우)를
      통해 객체로 변형 가능 (int, char 제외하고 다른 자료형들은 맨 앞 알파벳을 대문자로 바꿔준다)
  • Reference type : 메모리상에 객체가 있는 위치 저장
    • class , interface , array

10. 세션, 쿠키 사용 

  • Session : 웹 브라우저의 캐시에 저장(서버에 저장)되어 브라우저가 닫히거나 서버에 삭제 시 사라진다
                      쿠키에 비해 보안성이 좋다
  • Cookie : http 한계를 극복 / 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트를 매개 
                               아이디 , 비밀번호 / Client PC에 저장, 다른 사용자에 의해 임의 변경 가능 
  • 쿠키 대신 세션 사용하면 되는데 안하는 이유?
     -> 세션에 저장하면 서버의 메모리가 과도하게 사용되어 서버에 무리가 감

11. 해쉬, 암호화

  • 해쉬 : 단방향 암호화 / 복호화 불가능 / 데이터 보안에 중점
  • 암호화 : 양방향 암호화 / 복호화 가능 / 통신 보안 중점
    • Symmetric key (비밀키 : des / aes) / Asymmetric key(공개키 : dsa , rsa) 

12. HTTP (Hyper Text Transfer Protocol)

  • 웹브라우저와 웹서버가 서로 데이터를 주고 받을 때, 사용하는 규약
  • 도메인 + URL(자원 위치) , 도메인 + URI(자원 식별자) 통해 요청, 서버가 요청에 따른 응답(.html) 해줌
  • 특징
    • Connectless + stateless : 클라이언트 이전 상태 알 수 없으므로(쿠키와 세션 필요)
    • keep-alive : 지정된 시간 동안 연결 끊지 않고 연결된 상태 유지
      웹 서버 연결 -> html 문서 다운로드 -> 필요한 img , js, css 다운 -> 연결 끊음
  • http method 
    • GET : 정보를 요청하기 위해 사용 (READ)
    • POST : 정보를 입력하기 위해 사용(CREATE)
    • PUT : 정보를 업데이트 하기 위해 사용 (UPDATE)
    • DELETE : 정보를 삭제하기 위해 사용 (DELETE)
  • Request Header : 웹 브라우저가 웹 서버에 요청할 때 작성
    • 유저가 서버 측에 요청한 정보
  • Response Header : 웹 서버가 작성해서 웹 브라우저에 응답할 때 작성
    • 유저의 요청(request)에 서버 측의 응답(response)정보
  • https : http는 데이터 key와 , value 가 모두 표시되기 때문에 중요한 데이터 일 때 감춰야 함(HTTPS) 

13. REST API 

  • 서버에 리퀘스트 할 때, 자원의 ID와 자원에 대한 처리(HTTP 메소드)를 포함하여 리퀘스트 되도록 하는 것
  • 고유 자원에 대한 처리 URI로 나타낸 것
  • 라우터 상에서 HTTP 메소드 (GET, POST, PUT, DELEE) 와 실제 자원에 대한 처리 (CRUD)를 맵핑 시켜야함
  • HTTP method + 모든 개체 리소스화
    + URL 디자인(라우팅 :
    클라이언트 요청에 대한 응답을 어떻게 이어줄 것인가 처리 / 자원에 대한 처리를 주소에 나타내지 않는다. )

14. 아파치, 아파치 톰캣

  • 아파치 : HTTP 웹 서버(클라이언트의 요청을 기다리고 요청에 대한 데이터(정적 데이터)를 만들어서 응답하는 역할)
  • 톰캣 : WAS(Web Application Server/ 서블릿 컨테이너) : 웹 서버와 웹 컨테이너 결합
    • 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행
    • 웹 컨테이너 : 클라이언트의 요청이 있을 때, 내부 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에게 돌려줌
      • JSP, 서블릿 처리 / 서블릿 수명 주기 관리 / 요청 URL을 서블릿 코드로 매핑 / HTTP 요청 수신 및 응답 / 필터 체인
  • 둘의 차이 : 웹 서버와 웹 어플리케이션 차이-> 단순 정적 데이터 (이미지나 단순 HTML)를 처리하는 서버라면 아파치 
    -> 동적 데이터 (DB 연결, 데이터 조작) 등 과 같은 처리 는 WAS

15. 동기, 비동기 

  • 동기 (synchronous) 
    • 요청과 그 결과가 한 자리에서 동시에 일어남
    • A노드와 B 노드 사이의 작업 처리 단위(transcation)을 동시에 맞추겠다
    • 장점 : 설계가 매우 간단, 직관적 / 단점 : 결과가 주어질 때 까지 아무것도 못하고 대기해야한다.
  • 비동기 (asynchronous)
    • 요청한 그 자리에서 결과가 주어지지 않음
    • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
    • 장점 : 결과가 주어지는 데 시간이 걸리더라도 그 시간 동안 다른 작업할 수 있으므로 자원을 효율적으로 사용
      단점 : 동기보다 복잡

16. 쓰레드 , 프로세스

  • Process : 운영체제에서 실행 중인 하나의 프로그램(하나 이상의 쓰레드 포함)
  • Thread : 프로세스 내에서 동시에 실행되는 독립적인 실행 단위 (stack메모리)
    • 장점 
      • 빠른 프로세스 생성
      • 적은 메모리 사용
      • 쉬운 정보 공유
    • 단점
      • 교착상태(다중 프로그래밍 체제에서 하나 , 그 이상의 프로세스가 수행 할 수 없는 어떤 특정 시간 /
                           하나의 메서드를 여러 개의 쓰레드가 한번에 사용하게 되면 데드락 발생)
  • Thread 와 Process 차이
    • 이 프로세스 내에서 실행되는 각각의 일을 스레드 
    • 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 됨
    • 자바에서 main()메서드를 수행하기 위한 목적으로 제공된다 하여 main 쓰레드라 불린다 
    • 서로 메모리 공간을 공유하지 못해, IPC(Inter process communication) 방식이 필요

17.자바의 메모리 영역(간단하게 설명)

  • 메서드 영역 : static 변수, 전역변수, 코드에서 사용되는 Class 정보 등.
    • 코드에서 사용되는 class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장
  • 스택(Stack) : 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리
  • 힙(Heap) : new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리

 

18. 컬렉션 프레임워크 

다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화 된 방법을 제공하는 클래스 집합

즉, 데이터를 저장하는 자료 구조, 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현

인터페이스를 사용해 구현

  • List 인터페이스
    • 순서가 있는 데이터 집합, 데이터 중복 허용
    • vector , arraylist , linkedlist , stack , queue
  • Set 인터페이스
    • 순서가 없는 데이터 집합, 데이터 중복 허용 x
    • hashSet, TreeSet
  • Map 인터페이스
    • 키와 값의 한 쌍으로 이루어지는 데이터 집합, 순서가 없음
    • 키는 중복 허용 x, 값은 중복 가능
    • haspmap , treemap, hashtable, properties

19. 제네릭

코드 블럭 내부에서 쓸 자료형을 외부에서 지정하는 기법

하지 않으면, 원하지 않는 자료형이 입력되었을 때 오류를 컴파일 시점에 잡아낼 수 없다

클래스<사용할 타입>

 

20. 자바 재귀함수

자기 자신을 호출하는 함수 

원래 범위의 문제에서 더 작은 범위의 하위 문제를 먼저 해결함으로 원래 문제 해결 

꼭 재귀호출이 끝나는 종료 조건이 있어야 한다

 

반응형

+ Recent posts