전체 글323 java.lang.Character - java.lang 패키지로 문자 데이터(char)를 다루기 위한 다양한 메소드 제공 ※ Character = char의 래퍼 클래스 ※ Java에서 ''(작은 따옴표) = char, ""(큰 따옴표) = String - Character 클래스를 사용하여 ArrayList 같은 콜렉션 객체에 char 타입을 나타내는 값을 저장할 수 있음 - char 타입의 변수에 .을 통해 메소드를 입력하는 것이 아닌 Character를 참조하여 해당 변수를 () 안에 입력하여 실행 판별 메소드 - Character.isDigit() = 해당 문자가 숫자인지 판별 - Character.isLetter() = 해당 문자가 문자인지 판별 - Character.isWhitespace() = 해당 문자가 공백인지 판별 - .. 2023. 2. 23. java.util.Arrays - java.util 패키지로 배열을 다루기 위한 다양한 메소드들이 포함되어 있음 사칙연산 관련 메소드 - double Arrays.stream(arr).sum() = 배열 안에 있는 숫자 원소들의 총합 반환 ※ Arrays.stream()을 통해 sum 이외에도 max,min,count,average,findFirst 등의 수학 메소드 호출 가능 정렬 관련 메소드 - Arrays.sort(arr) = 배열 원소 오름차순 정렬 - Arrays.sort(arr, Collections.reverseOrder()) = 배열 원소 내림차순 정렬 - Arrays.binarySearch(arr, 원소) = 해당 원소의 지정 배열에서의 인덱스 반환 ※ Arrays는 indexOf이 없음 복사 메소드 - Arrays... 2023. 2. 23. WITH RECURSIVE 문 (MySQL 재귀) WITH RECURSIVE 컬럼명 AS (SELECT문) = 재귀 쿼리를 이용하여 가상의 테이블 생성 ex) WITH RECURSIVE time AS (SELECT 0 AS hour UNION ALL SELECT hour+1 FROM time WHERE hour hour 컬럼에 0~23이 들어있는 time 테이블 생성 관련 문제 https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2023. 2. 17. Map - Python의 딕셔너리({key:value})와 같은 Java의 자료구조 - 제너릭()을 이용하여 key와 value의 타입을 지정할 때 primitive type이 아닌 wrapper class로 정의 주요 메서드 - clear() = Map 원소들 모두 지움 (초기화) - isEmpty() = Map에 원소가 한 개라도 있는지 조회 => 있으면 true, 없으면 false - size() = 원소의 개수 조회 - containsKey() = 해당 Key를 가지는 원소가 있는지 조회 - containsValue() = 해당 Value를 가지는 원소가 있는지 조회 - get(key) = 해당 key와 매핑되는 value 반환 - put(key, value) = 해당 key:value 원소 추가 - r.. 2023. 2. 16. java.util.PriorityQueue - Python의 Heapq과 같은 Java의 자료구조 - size가 가변적 - 최소 힙으로 정렬한 뒤 데이터를 출력하는 구조 (원소 추가 시 자동으로 오름차순 재정렬) 함수 종류 - add() = 원소 추가 - poll() = 맨 앞 원소 반환 및 제거 - peek() = 맨 앞 원소 반환 (제거 X) - clear() = 원소 모두 제거 (초기화) - contains() = 특정 원소 포함 유무(true/false) 반환 - size() = 원소 개수 반환 예시 https://school.programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁.. 2023. 2. 15. CS 관련 면접 질문 정리 (Spring) 1. Spring이란?- Java 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 중 하나 (자바 기반의 가볍고 유지 보수가 간편한 장점) 2. Spring의 특징- IOC(Inversion Of Control, 제어의 역전) - 개발자가 직접 제어하는 것이 아닌 다른 주체(Spring)에게 제어권을 위임 - DI(Dependency Injection, 의존성 주입) - 객체를 개발자가 직접 생성하는 것이 아니라 외부(Spring IOC container)에서 생성해서 사용하려는 주체에 객체를 주입시켜주는 방식 (생성자, 필드, setter 주입이 있음)=> 객체 간의 종속성 감소, 코드 단순화, 코드의 재사용성과 유지보수성을 높여줌=> 한 클래스를 수정하였을 때, 다른 클래스도 수정할 필요가 없어짐- .. 2023. 2. 5. Dockerfile 기본 문법 - FROM = 어떤 이미지 파일을 기반으로 도커 이미지를 생성할 것인지 정의 ex) FROM openjdk:8 = jdk1.8(Java 8)을 base 이미지로 사용 - WORKDIR = 작업 디렉터리 설정 (리눅스 cd 명령어와 같은 역할) - LABEL maintainer = 관리자 정보 입력 - ENV = 컨테이너 내의 환경변수 설정 ※ docker 이미지 파일 생성 시 .env 파일도 포함시키는 방법 = COPY .env /app/.env - RUN = 이미지 생성 시 필요한 명령 실행 ex) RUN npm install - ADD(COPY) [복사할 파일이 위치한 경로] [복사한 파일이 위치할 경로] = 로컬에 있는 파일을 복사하여 Docker 이미지에 추가 - EXPOSE = Docker c.. 2023. 2. 3. Tree - 노드 간 부모-자식 관계와 루트 노드를 가지는 그래프 => 계층 관계를 표현하기에 적합 ※ 그래프 = 노드와 노드 간을 연결하는 간선(branch)으로 구성된 자료구조 - 자식 노드는 단 하나의 부모 노드만을 가질 수 있고 부모 노드는 여러 개의 자식 노드를 가질 수 있음 - 비선형 구조, 방향성 존재, 비순환 그래프 - 루트 노드(맨 위), 내부 노드(중간), 리프 노드(맨 밑, 자식이 없는 노드) 이진 트리(Binary Tree) - 자식 노드의 개수가 2개 이하인 트리 - 탐색 속도 = O(logN) - 이진 탐색 트리(BST, Binary Search Tree) = 이진 탐색 + LinkedList가 결합된 구조로 왼쪽 자식 노드에는 부모 노드 보다 작은 값이 오른쪽 자식 노드에는 부모 노드 .. 2023. 2. 2. HashMap과 HashTable Hash - 임의의 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한 값 HashMap과 HashTable 비교 HashMap HashTable key와 value null 허용 O X Thread-safe X O Enumeration X O 멀티 스레드 부적합(비동기) 적합(동기화 지원) 해시 충돌 상대적으로 적게 발생 (보조 해시 함수 사용) 상대적으로 많이 발생 (보조 해시 함수 사용 X) key 중복 X value 중복 O 저장 방식 key:value 형태로 저장 (Map 인터페이스를 상속받아 구현) 탐색 속도 O(1)로 빠름 => 해시 함수에 키를 넣으면 값이 저장된 해시 값(인덱스)를 돌려주기 때문 정의 키(key)에 대한 해시 값을 사용하여 값(value)을 저장하는 자료구조 2023. 2. 2. ArrayList vs LinkedList LinkedList - 노드를 포인터로 서로 연결하여 만든 리스트 - 데이터의 수정, 삭제가 빈번할 경우 빠른 속도를 보장함 => O(1)의 속도 - 인덱스 X => 조회 시 첫번째 노드부터 순차적으로 탐색 => O(N)의 속도 ※ ArrayList의 경우 반대로 수정과 삭제 = O(N)의 속도지만 조회 = O(1)의 속도 => 조회는 인덱스를 이용하여 빠르지만 수정/삭제의 경우 해당 명령 수행 후 뒷 순서 원소들의 인덱스를 조정하기 때문 ArrayList와 비교 ArrayList LinkedList 크기 제한 O X 접근 방식 무작위(랜덤) 접근 가능 (인덱스 O) 순차 접근만 가능 (인덱스 X) 조회 속도 O(1) O(N) 수정/삭제 속도 O(N) O(1) 조회 시에는 ArrayList를 수정/삭제 .. 2023. 2. 2. CS 관련 면접 질문 정리 (DB) 1. 인덱스(Index)- 테이블에서 데이터의 검색 속도를 향상시키기 위한 DB의 자료구조 - SELECT를 통한 검색 속도가 크게 향상됨- 데이터가 정렬된 상태로 값이 삽입됨- B+Tree 구조 => MySQL에서 노드 = 페이지 개념- 데이터 변경 쿼리(INSERT, UPDATE, DELETE)가 잦을 경우 성능이 악화될 수 있음 => 데이터 수정 시 오버플로우로 인한 페이지 분할로 여러 개의 페이지가 추가적으로 생성될 수 있기 때문 - DB 크기의 약 10% 정도의 추가 공간을 필요로 함B-Tree- 루트로부터 리프까지의 거리가 일정한 형태의 트리이며 이진 트리의 확장 개념- 루트 노드(최상위), 브랜치 노드(중간), 리프 노드(맨 밑)- 하나의 노드에 여러 개의 Key:Data를 배치할 수 있음 .. 2023. 1. 30. GCP 배포 기본 (With Docker) GCP 세팅 1. 구글 클라우드 로고 옆 탐색 메뉴에서 Compute Engine - vm 인스턴스 - 실행 - 인스턴스 만들기 (리전:asia-northeast3 서울, 머신 유형: e2-small, 방화벽: HHTP 트래픽 허용 => 나머지들은 기본값 그대로 적용) => 인스턴스 생성 완료 2. 탐색 메뉴에서 VPC 네트워크 - IP 주소 - 외부 고정 주소 예약 - 서비스 계층(표준), 리전(asia-northeast3 서울) - 리전 설정을 해야 연결 대상에 인스턴스 목록이 뜸 - 연결대상에서 인스턴스 선택 - 예약 클릭 => 배포할 웹 애플리케이션의 IP 주소 생성 완료 3. VPC 네트워크 메뉴에서 방화벽 - 방화벽 규칙 만들기 - 로그(사용 안 함), 우선순위(0), 프로토콜 및 포트(모두 .. 2023. 1. 26. 탐색 알고리즘 (Search Algorithm) 선형 탐색(Linear Search) - 리스트 안에 있는 데이터들을 맨 앞이나 맨 뒤에서부터 순서대로 탐색하는 알고리즘 - 시간 복잡도 O(N) 이진 탐색(Binary Search) - 리스트 안에 있는 데이터들을 중간 지점을 기준으로 데이터를 반씩 나눠서 탐색하는 알고리즘 - 원하는 값을 찾을 때까지 반을 나눈 후 탐색하는 과정을 반복함 - 시간 복잡도 O(logN) 이진 탐색 트리(BST, Binary Search Tree) - 각 노드가 최대 두개의 자식을 갖는 탐색 트리이며 왼쪽 자식 트리에는 부모의 키 보다 작은 값을 오른쪽 자식 트리에는 부모의 키 보다 큰 값을 포함하는 속성을 가짐 - 시간 복잡도 O(H) (H = 트리의 높이) 2023. 1. 24. 동기화 동기화(Synchronization) - 프로세스/스레드들이 실행되는 시점을 조절하여 서로가 알고 있는 데이터를 일치시킴으로써 공유 자원의 일관성을 유지하는 것 - 실행 순서 제어를 위한 동기화 = 프로세스/스레드를 올바른 순서대로 실행하게 하는 것 - 상호 배제를 위한 동기화 = 동시에 접근하면 안되는 자원에 접근할 때 한 개의 프로세스/스레드만 접근하도록 하는 것 임계 구역(Critical Section) - 동시에 실행하면 문제가 발생하는 공유 자원에 접근하는 코드 영역 - 임계 구역에 진입한 프로세스/스레드가 있다면 다른 프로세스/스레드는 임계 구역 밖에서 대기해야 함 - 레이스 컨디션(Race Condition) = 잘못된 실행으로 인하여 여러 프로세스/스레드가 동시에 임계 구역에 접근하는 상황.. 2023. 1. 23. Python 코테, Java 코테 비교 ※ 파이썬에서 for문에서 in을 사용하는 방법처럼 자바에서는 for(String a : array) 같은 형태로 사용가능 ex) for i in array = for(String i : array) - 데이터.getClass().getName() = 해당 데이터의 데이터 타입 확인 (파이썬의 type()과 동일) - 데이터타입.valueOf(데이터) : 데이터의 타입을 지정한 데이터 타입(앞에 입력한 것)으로 변환 (형 변환) - (데이터타입)데이터 = 데이터의 타입을 지정한 데이터 타입(앞에 입력한 것)으로 변환 (형 변환) - Python에서의 list를 Java에서는 ArrayList로 사용 Python => li = [] Java => ArrayList answer = new ArrayList(.. 2023. 1. 21. 이전 1 ··· 8 9 10 11 12 13 14 ··· 22 다음