분류 전체보기 284

[CS스터디]220728 운영체제 - 5

가상 메모리(Virtual Memory System)에 대해 설명해보세요. 메모리가 실제 메모리보다 많아 보이게 하는 기술로, 어떤 프로세스가 실행될 때 메모리에 해당 프로세스 전체가 올라가지 않더라도 실행이 가능하다는 점에 착안하여 고안되었음 메모리를 관리하는 방법의 하나로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식을 말한다. 이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용되며, 실제 주기억장치(RAM)보다 큰 메모리 영역을 제공하는 방법으로 사용된다. 이 가상 메모리의 핵심은 필요한 부분만 메모리에 적재(부분적재)하는 것! 프로세스를 실행할 때, 실행에 필요한 부분만 메모리에 올림(적재 여부를 페이지 테이블에 표시) 세마포어와 뮤텍스의 차이에 대해 설명해보세요. 세마포..

[CS스터디]220726 운영체제 - 4

교착 상태가 무엇인지 설명해주세요. 다중 프로그래밍 환경에서 여러 프로세스가 제한된 resource 를 두고 경쟁하는 경우 발생하고 프로세스가 결코 일어날 수 없는 특정 이벤트를 무한정으로 기다리는 상태 교착 상태에서 기아 상태의 해결 방법에 대해 설명해보세요. 교착 상태 교착 상태는 여러 프로세스가 동일 자원 점유를 요청할 때 발생 기아 상태 기아 상태는 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때, 특정 프로세스는 영원히 자원 할당이 안되는 경우를 주로 의미함 프로세스가 작업을 수행하지 못하고 무한히 기다리는 상태 현실적으로 수행할 수 있는 작업이지만, 무기한 연기로 인해 수행할 수 없는 상태에 빠지는 것. 프로세스의 우선순위에 따라 자원을 할당할 경우, 우선순위가 낮은 프로세스들은 기아 ..

[CS스터디]220725 운영체제 - 3

Thread-safe 하다는 의미와 설계하는 법을 설명해보세요. Thread-safe란? 위키에서 Thread-Safe는 스레드 안전(thread 安全, 영어: thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다. 라고 나와있다. 앞선 스터디에서 알게 되었듯이 스레드는 프로세스와 다르게 하나의 프로세스 안에서 여러 스레드가 같은 자원에 접근할 수 있고, 그 자원을 공유하며 작업(Ta..

[프로그래머스]쿼드압축 후 개수 세기 - Java

문제 https://school.programmers.co.kr/learn/courses/30/lessons/68936 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 분할 정복의 아주 대표적인 문제임! 백준에도 엄청 비슷하거나 완전 똑같은 문제가 있었던 걸로 기억하는데 맞을걸??? 암튼 지금 범위의 배열을 압축할 수 있는지 없는지 판단하는 check() 함수 - x좌표, y좌표, 현재 단계의 배열 length를 이용해서 검사 check()를 통과했으면 압축할 수 있다는 뜻이므로 return, 그렇지 않으면 4분할해서 다시 재귀로 검사!(마찬가지로 x..

[프로그래머스]방금 그 곡 - Java

문제 https://school.programmers.co.kr/learn/courses/30/lessons/17683 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 String.replace() 메서드 사용 - A#과 A, C#과 C 등을 구별하기 위해 A#을 다른 문자열로 교체해야 함! 음악 재생 시간(분) 계산 자세한건 주석으로 ! 코드 // 코딩테스트 연습 - 2018 KAKAO BLIND RECRUITMENT - 방금그곡 // https://programmers.co.kr/learn/courses/30/lessons/17683 package..

[CS스터디]220722 운영체제 - 2

동기와 비동기의 차이(블로킹, 넌블로킹) / 장단점에 대해 설명해보세요. 동기 Synchronous 순차적, 직렬적으로 작업(task)을 수행 어떤 작업이 수행 중이면 다음 작업은 그 작업이 끝날 때까지 대기해야 함! 요청에 대한 결과가 동시에 일어남! 장점 설계가 매우 간단하고 직관적 단점 결과가 주어질 때까지 아무것도 못하고 대기해야 함 비동기 Asynchronous 병렬적으로 작업(task)를 수행 요청을 한 후 응답을 기다리지 않고 바로 다음 작업을 수행 요청에 대한 결과가 나중에 일어난다 ! 장점 요청에 따른 결과가 반환되는 시간동안 다른 작업 수행 가능 단점 동기식보다 설계가 복잡함 멀티스레드 프로그래밍에 대해 설명해보세요. 하나의 프로세스 내에서 여러 쓰레드가 동시에 작업을 수행하는 것 CP..

[CS스터디]220718 운영체제 - 1

프로세스와 스레드의 차이를 설명해보세요. Process(프로세스) 컴퓨터에서 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 운영체제로부터 시스템 자원을 할당받는 작업의 단위 프로세스끼리는 자원을 공유할 수 없음 Thread(스레드) 스레드는 프로세스 내에서 실행되는 여러 흐름의 단위 같은 프로세스 안에 있는 여러 스레드들은 같은 힙 공간을 공유함 자원을 공유할 수 있음 컨텍스트 스위칭에 대해 설명해보세요. CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 데 이 과정을 Context Switching라 한다. 구체적으로, 동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태(Context)를 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하면..

[CS스터디]220707 자료구조 - 3

BST의 최악의 경우의 예와 시간복잡도에 대해서 설명해주세요. 한쪽으로 몰리는 경우(계속해서 작은 수가 들어오는 경우, 계속해서 큰 수가 들어오는 경우)가 최악의 경우 평균적으로는 O(logN)인 시간 복잡도가 이 경우엔 O(N)으로 증가함! 피보나치 수열을 코드로 구현하는 방법에 대해서 설명해주세요. 재귀 or 동적 계획법(탑다운, 바텀업 방식이 있음) 재귀 단순한 재귀로 구현할 경우, 시간 복잡도가 너무 크게 나올 수 있기 때문에 동적 계획법을 활용하여 구현하는게 좋음 ! 동적 계획법 Top-Down 말 그대로 위에서 아래로 진행하면서 답을 구하는 방식, 흔히 재귀 호출을 이용해 구현. 100번째 피보나치 수를 찾기 위해 99번째, 98번째 수를 찾고, 그들을 찾기 위해 97번쨰, 96번째 수를 찾는..

[프로그래머스]H-Index - Java

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 처음엔 주어진 배열을 오름차순으로 정렬을 한 후에 이중 for문을 돌면서 h보다 높으면 count를 하나씩 해주는 방식으로 풀었는데, 그렇게 하면 정렬을 할 필요도 없이 그냥 완전 탐색을 하는 느낌?? 그래서 틀렸음 처음엔 근데 정렬을 제대로 이용한 풀이는 반복문을 한번만 돌면서 h-index를 뽑아낼 수가 있었음 정렬을 한 후에 h를 1씩 감소시키면서 배열의 값과 비교해나가면 h보다 ..

[프로그래머스]짝지어 제거하기 - Java

문제 https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 반복문 안에서 문자 하나하나 앞뒤를 비교해가면서 문제를 풀 수도 있지만 자료구조를 잘 활용하면 반복문으로 한번 더 안감싸고 더 쉽게 풀 수 있음 !!! 여기서 말한 자료구조는 Stack임 ! Stack을 이용하면 반복문을 여러번 돌 필요가 없이, Stack에 데이터를 넣을 때마다 비교를 통해서 문자열을 짝지어서 제거할지 안할지 정할 수 있음 코드를 보면 무슨 말인지 알 수 있을거임 ! ..

[JPA]JPA를 왜 사용해야 하는가?

JPA를 왜 사용해야 하는가? SQL 중심적인 개발에서 객체 중심으로 개발 생산성 유지보수 패러다임의 불일치 해결 성능 데이터 접근 추상화와 벤더 독립성 표준 생산성 저장 jpa.persist(member) 조회 Member member = jpa.find(memberId) 수정 -> 개꿀 member.setName("변경할 이름") 삭제 jpa.remove(member) 유지보수 기존 필드 변경 시 모든 SQL 수정 JPA 필드만 추가하면 됨, SQL은 JPA가 처리 JPA와 패러다임의 불일치 해결 (관계형 데이터베이스(RDBMS)와 객체의 패러다임의 불일치 해결) JPA와 상속 저장 개발자가 할 일 jpa.persist(album); 나머진 JPA가 처리 INSERT INTO ITEM ... INSE..

Backend/JPA 2022.07.22

[JPA]JPA란?

JPA Java Persistence API 자바 진영의 ORM 기술 표준 ORM Object-relational mapping(객체 관계 매핑) 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑 대중적인 언어에는 대부분 ORM 기술이 존재 JPA는 어플리케이션과 JDBC 사이에서 동작 JPA 동작 - 저장, 조회, 쿼리를 개발자가 만드는게 아니고 JPA가 만들어주는 거임 여기서 중요한건 패러다임의 불일치 해결! JPA는 표준 명세 JPA는 인터페이스의 모음 JPA 2.1 표준 명세를 구현한 3가지 구현체 하이버네이트(대부분 이거 씀), EclipseLink, DataNucleus

Backend/JPA 2022.07.21

[JPA]SQL 중심적인 개발의 문제점

1. 무한 반복, 지루한 코드 CRUD 맨날 하는거 맨날 반복,,, 2. 설계 다 했는데 기획자가 마지막에 연락처 추가해달라 했을 경우 그럼 객체에 연락처 칼럼 넣고, 쿼리들을 한땀한땀 다 수정해야 함 3. 개발자 = SQL 매퍼 4. 객체의 상속 관계를 DB에 밀어 넣을 때 슈퍼타입/서브타입 이라는 관계를 이용해서 어렵게 어렵게 DB에 넣음 여기까진 ㅇㅋ 어떻게든 했어 근데? DB에 데이터를 넣을 때는 쿼리를 2번 작성해야 함. 부모 테이블 한번, 자식 테이블 한번 여기까지도 ㅇㅋ 근데 조회할 때는? 조인 쿼리를 만들고 결과를 생성해서 조회해야 함 -> 점점 복잡함... 하지만 자바 컬렉션을 조회한다고 생각하면 그냥 부모 타입으로도 조회할 수 있고, 그냥 id로 조회할 수 있고 암튼 쉬워짐 ! 5. 객..

Backend/JPA 2022.07.21

[프로그래머스]위장 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 어디서 풀어본 문제 같다 싶었는데,,, https://seokmimmmmmmmm.tistory.com/138 [백준]9375번 패션왕 신해빈 - Java 문제 https://www.acmicpc.net/problem/9375 9375번: 패션왕 신해빈 첫 번째 테스트 케이스는 headgear에 해당하는 의상이 hat, turban이며 eyewear에 해당하는 의상이 sunglasses이므로 (hat..

[CS스터디]220705 자료구조 - 2

Stack, Queue에 대해서 설명해주세요. Stack LIFO(Last In First Out, 후입선출) push(), pop() 활용 예시 웹 브라우저 방문 기록 역순 문자열 만들기 실행 취소 후위 표기법 수식의 괄호 검사 등 Queue FIFO(First In First Out, 선입선출) offer(), poll() 활용 예시 우선순위가 같은 작업 예약(프린터의 인쇄 대기열) 은행 업무 콜센터 고객 대기시간 프로세스 관리 등 Heap, Priority Queue에 대해서 설명해주세요. Heap 완전 이진 트리(Complete Binary Tree)로 구성된 자료구조 모든 노드에 저장된 값들은 자식 노드들의 것보다 크거나 같다. 부모는 자식보다 항상 우선순위가 높다 그렇기 때문에 루트 노드가 항..

[CS스터디]220704 자료구조 - 1

시간 복잡도란? 반복문을 몇 번 사용했는지 등을 통해 알고리즘이 문제를 해결하기 위한 시간(연산)의 횟수. 즉, 우리는 입력값과 연산 수행 시간의 상관관계를 나타내는 척도를 시간 복잡도라고 한다. 배열과 링크드 리스트의 차이를 설명해주세요. LinkedList와 ArrayList는 모두 Java에서 제공하는 List 인터페이스를 구현한 Collection 구현체. ArrayList 내부적으로 데이터를 배열로 관리하고 데이터 추가/삭제 시 임시 배열을 생성해 데이터를 복사함 데이터별 인덱스가 있어 검색에는 유리O(1) 임시 배열을 사용하기 때문에 데이터 추가/삭제의 경우에는 불리O(n) LinkedList 내부적으로 노드 단위로 데이터를 관리합니다. 자신의 앞 뒤 노드만 인지하는 상태임. 인덱스가 따로 없..

[프로그래머스]신규 아이디 추천 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 풀이 쉬운 문제임 그냥 문제에서 하라는 대로 하면 됨! 문자열 다루기에 익숙해지고 싶다면 좋은 문제일 것 같음! subString(), toLowerCase(), replace(), valueOf(), contains() 등의 문자열 관련 메서드를 알아두자! 자세한건 주석으로! 코드 // 코딩 테스트 연습 - 2021 KAKAO BLIND RECRU..

[Java]char 배열 String으로 만들기

char 배열을 String으로 바꾸는데 3가지 방법이 있음! String 생성자 String.valueOf() String.copyValueOf() 1. String 생성자 public class CharArrToString { public static void main(String[] args) { char[] charArr = { 'H', 'e', 'l', 'l', 'o' }; // String 생성자를 이용한 변환 String str = new String(charArr); System.out.println(str); // Hello } } 2. String.valueOf() public class CharArrToString { public static void main(String[] args..

언어/Java 2022.07.01

[프로그래머스]메뉴 리뉴얼 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/72411 코딩테스트 연습 - 메뉴 리뉴얼 레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서 programmers.co.kr 풀이 https://www.youtube.com/watch?v=Jb34jY91450 못 풀어서 이 영상을 참고해서 풀었음 ㅠㅠ 다음에 한번 더 풀어봐야 겠음 ! combination을 해야함 combination하기 전에 정렬 필수 자세한건 주석으로! 코드 // 코딩테스트 연습 - 2021 KAKAO BLIND RECRUITMENT - 메뉴 리뉴얼 // ht..

[프로그래머스]다리를 지나는 트럭 - Java

문제 https://programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr 풀이 트럭의 무게와 트럭이 다리 위에 올라간 후 경과한 시간(초)를 멤버 변수로 갖는Truck이라는 클래스를 만들고, Queue bridge = new LinkedList(); Queue trucks = new LinkedList(); Truck 객체를 갖는 큐를 2개 만들어서 필요한 애들을 꺼내서 쓰고 비교하고 암튼 그렇게 하려..