티스토리 뷰
728x90
CS 지식
- 학습 목적
- 효율적인 코드를 작성할 수 있습니다! CS 지식을 통해 알고리즘과 자료구조를 이해하고 최적화된 코드를 작성하는데 도움이 됩니다!
- 문제 해결 능력을 강화 시킬 수 있습니다! CS 지식은 문제 해결에 대한 다양한 접근법을 제공하고, 이로 인해 저희가 개발자로서 겪을 다양한 문제들을 효과적으로 해결할 수 있습니다!
- 기술적 도전과 성장에 도움이 됩니다! CS 지식을 통해서 새로운 기술에 대한 이해와 적응력을 향상 시킬 수 있습니다! 매일 매일 새로운 기술이 나오는 시장에서 발전하는 경쟁력있는 개발자가 되는 열쇠가 됩니다!
- 커뮤니케이션 및 협업에도 도움이 됩니다! CS 지식을 알고 있음으로 인해 효과적인 팀 작업에 도움이 됩니다!
- 실제 현업에서도 CS 지식은 중요합니다! 현업에서는 기술적 지식과 역량을 요구하며, CS 지식은 이러한 요구사항들을 충족시키는 데 중요한 역할을 합니다!!
- 학습 목표
- CPU의 구성, 동작, 성능에 대해 설명할 수 있습니다.
- 메모리에 대해 설명할 수 있고, 캐시 메모리가 무엇인지 알고 있습니다.
- CPU와 메모리의 동작과 구조에 대해 이해하고 있습니다.
- 프로세스와 쓰레드의 차이를 알고 있습니다.
- 프로세스 생명주기에 대해 설명할 수 있습니다.
- 쓰레드 풀에 대해 설명 할 수 있습니다 (장단점, 이유, 쓰레드 풀이란..등등)
- 동시성과 병렬성을 알고 있습니다.
- 데이터베이스(DB)에 대해 이해하고 있습니다.
- 데이터베이스(DB)의 유형들에 대해 설명할 수 있습니다 (SQL, NoSQL)
- 이진수, 비트, 바이트의 개념을 이해하고 있습니다.
- 자료구조의 종류를 모두 알고 설명할 수 있습니다.
- 네트워크의 기본구조에 대해 알고 설명할 수 있습니다.
- OSI 7계층에 대해 알고 설명할 수 있습니다. (계층별 설명 가능)
- TCP / IP에 대해 이해하고 있습니다
- HTTP / HTTPS가 무엇인지 알고 차이점을 설명할 수 있습니다.
- 컴퓨터 구조에서 공간 자원이 무엇인지 알고 설명할 수 있습니다.
- 공간 복잡도가 무엇인지 알고, 공간자원을 잘 사용하기 위해서 공간 복잡도를 어떻게 계산하는지 알고 있습니다.
- CPU, 메모리, 네트워크의 시간자원이 무엇인지 알고 설명할 수 있습니다.
- 시간 복잡도가 무엇인지 알고, 자료구조와 알고리즘을 기준으로 시간 복잡도를 계산하는 법을 알고 있습니다.
오늘의 개념
1-4~1-6강
1-4
- 프로세스와 스레드
- 프로그램을 실행하면 프로세스
- 프로세스는 1개 이상의 스레드로 이루어짐
- 스레드가 작업을 처리하는 주체
- 멀티 프로세스 vs 멀티 스레드 차이점
- 멀티 프로세스 : 서로 독립된 주소공간 가짐
- 멀티 스레드 : 스택을 제외하고 주소공간(데이터, 힙, 코드 영역) 공유
- 동기화나 교착상태(Deadlock) 발생 가능
- 동기화나 교착상태 등의 문제가 일어나는데 멀티 스레드를 사용하는 이유?
- context switching에 드는 비용(시간)이 적기 때문에 효율적→ 자원 효율성 증대, 처리 비용 감소, 응답 시간 단축
- (stack 영역만 처리해주면 됨)
- 동기화 문제
- 해결방법- 상호배제
- 뮤텍스, 세마포어, 락 이용
- critical section, mutex, semaphore, lock 개념에 대해서 공부한다면 좋을듯! (여유가 된다면)
- 뮤텍스, 세마포어, 락 이용
- 해결방법- 상호배제
- 교착상태(데드락)
- 두개 이상의 프로세스(스레드)가 서로가 가진 자원을 무한히 기다리게 되는 현상t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음
- t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림
- 프로세스1과 2가 자원1, 2를 모두 얻어야 한다고 가정해보자
- 해결 방법(여유가 된다면)
1-5
- 데이터베이스
- 관계형 데이터베이스 vs 비관계형 데이터베이스(NoSQL)
- 관계형 데이터베이스
- 테이블로 이루어져있으며 테이블 사이의 연관관계를 규정
- 연관관계 종류
- 1:N
- M:N
- 1:1
- NoSQL
- ex) MongoDB , Redis, DynamoDB .. 등
- 종류마다 특화된 기능이 다름
- 대용량 데이터 처리에 적합
- 구조가 명확하지 않은 경우 사용
- 데이터의 구조가 변경되거나 확장될 것이 예상되는 경우
- 관계형 데이터베이스
- SQL
- 관계형 데이터베이스에서 사용되는 질의형 언어
- SQL문 종류
- DDL(Data definition Language)
- CREATE - 테이블 생성
- ALTER - 테이블 변경
- DROP - 테이블 삭제
- DML
- SELECT - 데이터 조회
- INSERT - 데이터 삽입
- UPDATE - 데이터 수정
- DELETE - 데이터 삭제
- DCL
- GRANT - 권한 부여
- REVOKE - 권한 회수
- COMMIT - 트랜잭션 적용
- ROLLBACK - 트랜잭션 취소
- DDL(Data definition Language)
- 요즘은 ORM 많이 사용
- ORM을 사용한다해도 SQL 기본원리는 알아야!
- 객체의 개념으로 코드에서 SQL문을 구현하는 것
- 복잡한 쿼리에서는 사용할 수 없다.
1-6
- DBMS란?
- 데이터베이스를 조작하고 관리하기 위한 별도의 소프트웨어
- ex) MySQL, Oracle, MariaDB 등..
- 키(key)
- 관계형 데이터베이스에서 나오는 개념
- 주키(Primary Key-PK) - 1,2,3,4 or UUID(보안상)
- 외래키(Foreign Key-FK) - 관계를 가진 테이블의 PK
- ERD
- 트랜잭션(Transaction)
- 하나의 논리적 기능을 수행하기 위한 작업 단위
- 필요한 이유
- 특성 - ACID
- Atomicity(원자성)
- Consistency(일관성)
- Isolation(독립성)
- Durability(지속성)
- → 각 특성 설명할 수 있을 정도로 외우기
- SQL 관련 자격증
- 5.25(토)에 다가옴
- 합격한다면 내배캠측에서 응시료 지원
- 준비해보는것도 추천!오늘의 개념1-4
- 프로세스와 스레드
- 프로그램을 실행하면 프로세스
- 프로세스는 1개 이상의 스레드로 이루어짐
- 스레드가 작업을 처리하는 주체
- 멀티 프로세스 vs 멀티 스레드 차이점
- 멀티 프로세스 : 서로 독립된 주소공간 가짐
- 멀티 스레드 : 스택을 제외하고 주소공간(데이터, 힙, 코드 영역) 공유
- 동기화나 교착상태(Deadlock) 발생 가능
- 동기화나 교착상태 등의 문제가 일어나는데 멀티 스레드를 사용하는 이유?
- context switching에 드는 비용(시간)이 적기 때문에 효율적→ 자원 효율성 증대, 처리 비용 감소, 응답 시간 단축
- (stack 영역만 처리해주면 됨)
- 동기화 문제
- 해결방법- 상호배제
- 뮤텍스, 세마포어, 락 이용
- critical section, mutex, semaphore, lock 개념에 대해서 공부한다면 좋을듯! (여유가 된다면)
- 뮤텍스, 세마포어, 락 이용
- 해결방법- 상호배제
- 교착상태(데드락)
- 두개 이상의 프로세스(스레드)가 서로가 가진 자원을 무한히 기다리게 되는 현상t1 : 프로세스1이 자원1을 얻음 / 프로세스2가 자원2를 얻음
- t2 : 프로세스1은 자원2를 기다림 / 프로세스2는 자원1을 기다림
- 프로세스1과 2가 자원1, 2를 모두 얻어야 한다고 가정해보자
- 해결 방법(여유가 된다면)
- 데이터베이스
- 관계형 데이터베이스 vs 비관계형 데이터베이스(NoSQL)
- 관계형 데이터베이스
- 테이블로 이루어져있으며 테이블 사이의 연관관계를 규정
- 연관관계 종류
- 1:N
- M:N
- 1:1
- NoSQL
- ex) MongoDB , Redis, DynamoDB .. 등
- 종류마다 특화된 기능이 다름
- 대용량 데이터 처리에 적합
- 구조가 명확하지 않은 경우 사용
- 데이터의 구조가 변경되거나 확장될 것이 예상되는 경우
- 관계형 데이터베이스
- SQL
- 관계형 데이터베이스에서 사용되는 질의형 언어
- SQL문 종류
- DDL(Data definition Language)
- CREATE - 테이블 생성
- ALTER - 테이블 변경
- DROP - 테이블 삭제
- DML
- SELECT - 데이터 조회
- INSERT - 데이터 삽입
- UPDATE - 데이터 수정
- DELETE - 데이터 삭제
- DCL
- GRANT - 권한 부여
- REVOKE - 권한 회수
- COMMIT - 트랜잭션 적용
- ROLLBACK - 트랜잭션 취소
- DDL(Data definition Language)
- 요즘은 ORM 많이 사용
- ORM을 사용한다해도 SQL 기본원리는 알아야!
- 객체의 개념으로 코드에서 SQL문을 구현하는 것
- 복잡한 쿼리에서는 사용할 수 없다.
- DBMS란?
- 데이터베이스를 조작하고 관리하기 위한 별도의 소프트웨어
- ex) MySQL, Oracle, MariaDB 등..
- 키(key)
- 관계형 데이터베이스에서 나오는 개념
- 주키(Primary Key-PK) - 1,2,3,4 or UUID(보안상)
- 외래키(Foreign Key-FK) - 관계를 가진 테이블의 PK
- ERD
- CS 지식
- 학습 목적
- 효율적인 코드를 작성할 수 있습니다! CS 지식을 통해 알고리즘과 자료구조를 이해하고 최적화된 코드를 작성하는데 도움이 됩니다!
- 문제 해결 능력을 강화 시킬 수 있습니다! CS 지식은 문제 해결에 대한 다양한 접근법을 제공하고, 이로 인해 저희가 개발자로서 겪을 다양한 문제들을 효과적으로 해결할 수 있습니다!
- 기술적 도전과 성장에 도움이 됩니다! CS 지식을 통해서 새로운 기술에 대한 이해와 적응력을 향상 시킬 수 있습니다! 매일 매일 새로운 기술이 나오는 시장에서 발전하는 경쟁력있는 개발자가 되는 열쇠가 됩니다!
- 커뮤니케이션 및 협업에도 도움이 됩니다! CS 지식을 알고 있음으로 인해 효과적인 팀 작업에 도움이 됩니다!
- 실제 현업에서도 CS 지식은 중요합니다! 현업에서는 기술적 지식과 역량을 요구하며, CS 지식은 이러한 요구사항들을 충족시키는 데 중요한 역할을 합니다!!
- 학습 목표
- CPU의 구성, 동작, 성능에 대해 설명할 수 있습니다.
- 메모리에 대해 설명할 수 있고, 캐시 메모리가 무엇인지 알고 있습니다.
- CPU와 메모리의 동작과 구조에 대해 이해하고 있습니다.
- 프로세스와 쓰레드의 차이를 알고 있습니다.
- 프로세스 생명주기에 대해 설명할 수 있습니다.
- 쓰레드 풀에 대해 설명 할 수 있습니다 (장단점, 이유, 쓰레드 풀이란..등등)
- 동시성과 병렬성을 알고 있습니다.
- 데이터베이스(DB)에 대해 이해하고 있습니다.
- 데이터베이스(DB)의 유형들에 대해 설명할 수 있습니다 (SQL, NoSQL)
- 이진수, 비트, 바이트의 개념을 이해하고 있습니다.
- 자료구조의 종류를 모두 알고 설명할 수 있습니다.
- 네트워크의 기본구조에 대해 알고 설명할 수 있습니다.
- OSI 7계층에 대해 알고 설명할 수 있습니다. (계층별 설명 가능)
- TCP / IP에 대해 이해하고 있습니다
- HTTP / HTTPS가 무엇인지 알고 차이점을 설명할 수 있습니다.
- 컴퓨터 구조에서 공간 자원이 무엇인지 알고 설명할 수 있습니다.
- 공간 복잡도가 무엇인지 알고, 공간자원을 잘 사용하기 위해서 공간 복잡도를 어떻게 계산하는지 알고 있습니다.
- CPU, 메모리, 네트워크의 시간자원이 무엇인지 알고 설명할 수 있습니다.
- 시간 복잡도가 무엇인지 알고, 자료구조와 알고리즘을 기준으로 시간 복잡도를 계산하는 법을 알고 있습니다.
- 학습 목적
- 트랜잭션(Transaction)
- 하나의 논리적 기능을 수행하기 위한 작업 단위
- 필요한 이유
- 특성 - ACID
- Atomicity(원자성)
- Consistency(일관성)
- Isolation(독립성)
- Durability(지속성)
- → 각 특성 설명할 수 있을 정도로 외우기
- SQL 관련 자격증
- 5.25(토)에 다가옴
- 합격한다면 내배캠측에서 응시료 지원
- 준비해보는것도 추천!
- 프로세스와 스레드
오늘의 개념
1-7~1-8강
Hash Table(맵)
- 키와 값의 쌍의 형태로 저장하는 자료구조
- 해쉬 함수 : 키에 대해 산술 연산을 이용해 데이터 위치를 찾아낼 수 있는 함수
- 연산의 평균 시간복잡도가 O(1)로 데이터 저장 및 읽기 처리 속도가 매우 빠르다.
- 해쉬 테이블 충돌 → 여러 개의 키 값이 해시 함수를 통해 같은 해시 값을 갖는 경우
- 해결법
- chaining : 충돌이 발생할 시 연결리스트 자료구조를 이용해서 충돌을 해결하는 방법
- open addressing : 충돌이 발생하면 빈 버킷을 찾아서 데이터를 저장하는 방법.
- 선형 탐색 (linear probing) : 충돌이 발생하면 해당위치부터 순차적으로 버킷을 하나하나씩 탐색
- 제곱 탐색(Quadratic probing) : 충돌이 발생하면 해당 위치부터 제곱만큼 떨어진 다음 버킷을 탐색
- 이중 해시 (Double hashing) - 충돌이 발생하면 다른 해시 함수를 한번 더 적용
- 파이썬에서는 딕셔너리 자료형 사용
- 파이썬에서는 충돌 발생시 체이닝이 아닌 오픈 어드레싱 방식 사용
- hash table 자료구조 시간복잡도
- 탐색, 저장, 삭제 O(1) → 매우 효율적
Set
- 가장 중요한 특성 : 중복을 허용하지 않는다.
- ex)
print(set([1,2,2])) #{1, 2}
- 데이터를 비순차적으로 저장한다(삽입 순서대로 저장되지 않는다)
- 연산 (mutable)
-
my_set=set() my_set.add(1) my_set.add(2) my_set.add(3) my_set.remove(2) print(my_set) #{1,3}
- +) 파이썬에서 immutable한 자료구조
- 튜플
- 변하지 않는 값을 묶을 때 사용
my_tuple = (1, 2, 3, 4) print(my_tuple) # 출력: (1, 2, 3, 4) # 튜플은 값을 변경할 수 없기 때문에 다음과 같이 작업을 시도하면 에러가 발생합니다. my_tuple[0] = 5 # TypeError: 'tuple' object does not support item assignment
- 문자열
-
my_string = "Hello" print(my_string) # 출력: Hello # 문자열은 값을 변경할 수 없기 때문에 다음과 같이 작업을 시도하면 에러가 발생합니다. my_string[0] = 'J' # TypeError: 'str' object does not support item assignment
-
- 튜플
- set의 집합 연산
-
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} # 합집합 union_set = set1 | set2 print(union_set) # 출력: {1, 2, 3, 4, 5, 6} # 교집합 intersection_set = set1 & set2 print(intersection_set) # 출력: {3, 4} # 차집합 difference_set = set1 - set2 print(difference_set) # 출력: {1, 2}
- set 자료구조 시간복잡도
- 파이썬에서는 세트가 hash table로 구현되어 있어서 x in s 연산을 수행할 시 O(1)의 시간복잡도를 가짐
- (리스트에서는 O(n)
- 추가,삭제 연산 O(1)
알고리즘 문제
https://www.acmicpc.net/problem/2579
백준 계단오르기 (dp)
https://www.acmicpc.net/problem/11722
가장 긴 감소하는 부분 수열(dp)
스키마란?
스키마(Schema)는 데이터베이스에서 데이터 구조, 데이터베이스의 구조, 데이터베이스 테이블의 필드와 타입 등을 정의하는 것을 말합니다. 스키마는 데이터베이스의 설계도와 같은 역할을 합니다. 스키마는 데이터베이스 내의 테이블들이 가질 수 있는 컬럼(열)과 해당 컬럼의 데이터 타입, 제약 조건 등을 정의합니다. 스키마를 통해 데이터베이스의 구조와 제약 조건을 명확히 정의할 수 있으며, 이를 통해 데이터의 일관성과 무결성을 유지할 수 있습니다. 데이터베이스의 스키마는 데이터베이스 관리 시스템(DBMS)에 따라서 다르게 정의될 수 있습니다.
[20240321]
예상 질문
- DNS란 무엇인가요?
- TCP와 UDP의 차이점이 무엇인가요?
- HTTP와 HTTPS의 차이점이 무엇인가요?
- HTTP의 각 메소드에 대해 설명해주세요.
- IP주소와 MAC주소에 대해서 설명해주세요.
문제 풀이(dp)
- 계단 오르기
-
N=int(input()) #계단의 개수 arr=[] for i in range(N): arr.append(int(input())) #[1] dp=[0 for i in range(N)] #dp[i] : i번째 까지 고려했을 때 얻을 수 있는 점수의 최댓값 if N<3: #계단이 1개또는 2개 print(sum(arr)) quit() dp[0] = arr[0] dp[1] = arr[0] + arr[1] dp[2] = max(arr[2]+arr[1],arr[2]+arr[0]) for i in range(3,N): #0부터 N-1 #현재 계단을 밟는다면 #1) 전계단 + 전전전계단 #2) 전전계단 dp[i]=max(dp[i-3]+arr[i-1]+arr[i],dp[i-2]+arr[i]) #두 가지 경우를 비교해서 i번째 경우 갱신 print(dp[N-1]) #dp[-1]
- 가장 긴 감소하는 수열
N=int(input()) #수열의 크기
arr=list(map(int,input().split()))
dp=[1 for i in range(N)] #dp[i] : i번째까지 고려했을 때 가장 긴 (감소하는 부분)수열의 길이
for i in range(N): #비교의 시작점
for j in range(i+1,N):
if arr[i]>arr[j]: #감소한다면
dp[j] = max(dp[i]+1,dp[j]) #최대 길이를 갱신 시켜줌
print(dp)
print(max(dp))
반응형
'AI웹 개발자 과정 공부 (팀스파르타) > CS (Computer Science)' 카테고리의 다른 글
24.03.18_TIL (1강 - CPU와 메모리) (0) | 2024.03.19 |
---|