- 프레임워크 vs 라이브러리 프레임워크: 개발할 때 필수적인 코드나 알고리즘 등의 큰 틀을 제공하는 것. 프레임워크가 흐름을 제어함. 라이브러리: 특정 기능을 모아둔 코드들의 집합. 사용자가 흐름을 제어함. - call by value vs call by reference 값에 의한 호출: 인자로 받은 값을 복사하여 처리 참조에 의한 호출: 인자로 받은 값의 주소를 참조하여 값에 직접 저장. * 자바는 값에 의한 호출이다. 배열, 클래스와 같은 참조형 타입은 그 자체로 주소를 갖고 있기 때문에 값을 복사하여 인자로 전달해도, 값이 변경되는 것. - TDD 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스. 테스트가 코드 작성을 주도하는 개발방식. 새로운 기능에 대한 테스트케이스 작성 -..
- HTTP 데이터를 주고 받기 위한 웹 프로토콜으로, 서버/클라이언트 모델을 따른다. 무상태성 - 서버는 이전의 클라이언트 상태 정보를 저장하지 않음 비연결성 - 서버가 클라이언트의 요청에 대한 응답을 하면 연결을 끊는 것 --> 쿠키, 세션 필요 - 세션/쿠키 차이 쿠키: 클라이언트의 상태 정보를 키-값 형태로 클라이언트 로컬 브라우저에 저장 세션: 클라이언트에게 고유한 ID를 부여하여 서버에 저장 세션은 서버의 처리가 필요하기 때문에 보안측면에서 더 우수하지만, 요청 속도는 쿠기가 더 빠름 - 세션/쿠키 동작 방식 클라이언트가 서버에 접속시 서버에서 세션 ID를 발급 서버는 세션 ID를 기반으로 쿠키를 포함시켜 클라이언트에게 응답 클라이언트는 서버에 요청할 때 이 쿠키를 같이 전달 서버는 쿠키의 세..
- thread vs process 프로세스: 일반적으로 실행 중인 프로그램을 뜻하며 메모리에 적재되어 cpu의 할당을 받을 수 있는 것. 운영체제로부터 메모리 주소 공간, 메모리 등을 할당 받으며 프로세스는 독립적이기 때문에 이를 다른 프로세스와 공유하지 않음. 스레드: 프로세스 내의 실행 단위. 프로세스의 주소 공간이나 자원을 다른 스레드와 공유할 수 있다. - 멀티 스레드 하나의 프로세스에 여러개의 스레드가 존재하는 것. 각각의 스레드는 독립적인 작업 수행을 위해 각자의 스택과 PC 레지스터를 갖는다. - 멀티 프로세스 vs 멀티 스레드 멀티 프로세스: 하나의 프로세스가 죽더라도 다른 프로세스에 영향을 미치지 않는다. 메모리 공간, cpu 시간 차지. 멀티 스레드: 오류로 하나의 스레드가 종료되면 ..
- 자바 객체지향 프로그래밍 언어. JVM 위에서 동작하기 때문에 운영체제에 독립적이지만 실행 속도가 상대적으로 느리다. 가비지 콜렉션을 통해 메모리 관리가 간편하다. - 객체지향이란 (캡상추다) 현실세계의 사물들을 객체라고 보고, 객체를 중심으로 프로그래밍하는 것. 코드의 재사용성이 높고 유지보수 용이 캡슐화 정보은닉. 접근제어자에 따라 접근할수있는 대상을 결정 상속 상위 클래스의 변수와 메서드를 하위 클래스에서 재사용하고, 더 확장할 수 있는것. 추상화 클래스를 통해 객체의 공통적인 속성과 기능을 추출하여 정의하는 것. 다형성 오버라이딩과 오버로딩을 통해 하나의 객체가 여러 타입을 가지는 것. - 객체지향 설계 원칙 (SOLID) SRP(Single Responsibility Principle) : ..
배열 논리적 저장순서와 물리적 저장 순서가 같음. 인덱스로 원소에 접근할 수 있으므로 O(1)의 시간으로 접근가능. 삽입, 삭제의 경우 원소를 한칸씩 이동시켜야 하므로 O(n). linkedlist 자기 자신다음에 어떤 원소인지만 저장하기 때문에 삭제와 삽입을 O(1)에 해결. 탐색하기 위해 모든 원소를 다 돌아야 하기 때문에 O(n) 스택 vs 큐 스택은 LIFO의 특성을 갖는 선형 자료구조. 먼저 들어간 원소가 나중에 나온다. 큐는 FIFO의 특성을 갖는 선형 자료구조. 먼저 들어간 원소가 먼저 나온다. 트리 계층적 관계를 표현하는 비선형 자료구조. 노드와 간선으로 구성. 이진 트리 각 노드가 2개 이하의 자식노드만 가지는 트리. 이진탐색 트리 노드에 저장된 키가 유일한 값을 가짐. 왼쪽 자식노드의 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/blxCui/btr1Vc6izSC/8NItQydE7M7BY5qCpHh1QK/img.png)
https://school.programmers.co.kr/learn/courses/30/lessons/77486 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr seller/amount의 최대 길이는 100,000이기 때문에 판매한 금액마다 부모의 끝까지 올라간다면 시간 측면에서 비효율적이라고 생각했다. 그래서 판매한 금액들을 ArrayList에 저장하고, 리프 노드의 금액 */ 10을 자신의 한 단계 부모에게만 전달하는 방식으로 구현해봤다. 그리고 리프 노드에서 처리가 끝나면 그 노드와 부모의 연결을 끊어주면, 또 다른 리프노드가 생겨나고, 모든 노드가..
https://school.programmers.co.kr/learn/courses/30/lessons/131129 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 브루트포스 -> 시간 초과 그리디 -> target이 50이 넘어도, 불을 맞추지 않는 것이 정답인 경우가 존재함. 여러 시도 끝에 .... dp를 사용해서 문제를 풀었다! dp = new int[target + 1][2]; // 0: 다트 수 1: 싱글/불 횟수 for(int i=1;i= 50) { // 불 맞추기 int[] temp = throwDart(n - 50); if((temp[0] ..
https://school.programmers.co.kr/learn/courses/30/lessons/136797 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr dp와 BFS를 이용해 풀었다. 처음엔 숫자를 하나씩 DFS로 탐색하고, 현재 손가락 위치에서 왼쪽, 오른쪽을 사용해 해당 depth의 숫자로 갈 수 있는 최소 시간을 BFS로 풀었었다. numbers의 길이가 100000이라 시간 초과가 났었고, 왼쪽 손가락과 오른쪽 손가락 중 더 가까이에 있는 손가락으로 숫자를 누르는 그리디 방식으로 풀었는데 몇몇 테케를 틀렸었다. 그래서 먼저 1~10에서 ..