java 16

데블스플랜2 기사의 여정, 근데 코딩테스트 곁들인..

넷플릭스에서 데블스플랜2를 보다가 내용에 집중 못하고 잡념만 떠오른 게임이 있다바로 기사의 여정(여행) 기사의 여행 - 위키백과, 우리 모두의 백과사전위키백과, 우리 모두의 백과사전. 체스판 위에서의 경로의 예 5x5 기사의 여행을 나타낸 애니메이션 기사의 여행은 체스보드의 나이트에 대한 수학적인 알고리즘 문제의 일종이다. 체스 피스를ko.wikipedia.org 이거 코테 문제로 있을 것 같은데? DP를.. 아니 백트래킹을..LeetCode에서 제공하는 문제가 있다! (프로그래머스 점수 올리고 싶다)다만 경로의 유효성 검증이라서 게임을 진행하는 느낌이 안든다다른 사이트에서도 유사한 문제를 제공하기는 하나, 실행 검증하는 기능이 없거나, 풀이를 줘버려서 화들짝 꺼버렸다 LeetCode https://..

Java 키워드 모음: static, final, synchronized, abstract, transient

1. static개념클래스 단위 변수나 메서드를 의미합니다. 객체 생성 없이도 클래스 이름으로 바로 접근할 수 있으며, JVM의 클래스 영역에 저장되어 모든 인스턴스가 공유합니다.샘플 코드public class Counter { public static int count = 0; public static void increment() { count++; }}Counter.increment();System.out.println(Counter.count); // 출력: 1활용 방안공통으로 사용해야 하는 값이나 메서드를 관리할 때 유용합니다. 예를 들어, 전체 객체 수 카운트, 유틸리티 메서드 등에 많이 사용합니다. 2. final 개념값 변경이 불가능한 상수를 선언하거나, 메서..

CS 정리 2025.05.28

JAVA 문자열 처리

자주 나오는 유형회문 검사 (Palindrome)아나그램 비교중복 문자 제거문자열 압축, 슬라이딩 윈도우문자 빈도 수 세기Java 핵심 포인트StringBuilder, String.charAt(i), toCharArray()Map, Set, Arrays.sort()substring, split, replace, equals, charAt문제 풀이문자열 압축https://school.programmers.co.kr/learn/courses/30/lessons/60057 문제 키포인트1) 압축 가능한 자릿수까지 모두 압축해보고 길이 비교하기 (s.length /2 까지 압축 가능)2) 압축된 문자열 StringBuilder 에 담기3) 시작지점부터 압축이 가능한 조건이어야 하며, 압축이 불가능한 뒷부분은 그..

Java 대용량 데이터 처리 (6) - 멀티 쓰래드/병렬 처리

6. 싱글 쓰레드 → 멀티 쓰레드 / 병렬 처리 (10만 명에게 알림 발송)싱글 쓰레드 vs 멀티 쓰레드/병렬 처리싱글 쓰레드 방식은 하나의 작업 흐름으로 모든 알림을 순차적으로 처리.사용자는 많고, 각 알림 발송 시간이 지연되면 전체 처리 시간도 길어짐.멀티 쓰레드 / 병렬 처리는 여러 쓰레드를 활용해 동시에 알림을 전송.작업을 분산해 처리 속도를 높이고, 전체 처리 시간을 획기적으로 단축할 수 있음. 비동기 병렬 처리 예제 Bad case: 싱글 쓰레드public class NotificationService { public void sendNotifications(List users) { for (String user : users) { send(user); ..

CS 정리 2025.05.04

Java 대용량 데이터 처리 (5) - 캐시 계층 활용(L1, L2, DB)

5. DB만 사용 → DB + 캐시 + 계층 구조 활용 (상품 상세정보 조회)DB 단독 조회 vs 캐시 계층 활용DB 단독 조회는 사용자의 요청이 있을 때마다 매번 DB에 접근해서 데이터를 가져오는 방식.트래픽이 많거나 요청이 반복되는 경우, DB 부하 증가와 응답 지연이 발생할 수 있음.캐시 + 계층 구조 활용은 데이터 조회 시 우선적으로 메모리 캐시(L1),분산 캐시(L2) 등을 확인한 뒤, 없을 경우에만 DB 조회.조회 성능을 극적으로 향상시키고, DB 부하를 줄이는 효과가 있음. 캐시 계층 예시L1 Cache (로컬 메모리): 서버 JVM 내 ConcurrentHashMap 등L2 Cache (분산 캐시): Redis, Memcached 등DB: 최종 백엔드 데이터 소스계층 처리 흐름사용자 요청 ..

CS 정리 2025.05.02

Java 대용량 데이터 처리 (4) - 비동기 데이터 수집

4. 즉시저장 → 모아서 저장 (비동기 데이터 수집)즉시 저장 vs 모아서 저장 (비동기 처리)즉시 저장은 데이터가 들어올 때마다 매번 DB에 저장하는 방식.하지만 대량의 트래픽이 발생하면 DB 부하가 급격히 증가하고, 성능 저하 발생 가능.모아서 저장 (비동기 처리)는 데이터를 메모리 큐 등에 임시로 저장하고,일정 수 이상이 모이거나 일정 시간이 지나면 한꺼번에 DB에 저장.이를 통해 시스템 부하를 줄이고, 응답 속도를 빠르게 유지할 수 있음.비동기 처리 예제Bad case: 동기 처리public class SynchronousSave { public void saveData(Data data) { // 요청이 들어오자마자 즉시 DB 저장 saveToDatabase(dat..

CS 정리 2025.04.29

Java 대용량 데이터 처리 (3) - 비동기 처리

3. 즉시응답 -> 비동기 예약 (10만 건 엑셀 다운로드)즉시 응답 vs 비동기 예약 처리즉시 응답은 사용자가 요청을 보낸 후 즉시 결과를 반환하는 방식. 그래서 대용량 데이터 처리 시 서버에 큰 부담을 주고, 응답 속도가 지연.비동기 예약은 사용자가 요청을 보내면 즉시 예약을 하고, 실제 데이터 처리 작업은백그라운드에서 비동기적으로 처리. 이 방식은 서버 과부하를 방지하고, 사용자가 요청 상태를 기다리지 않아도 됨. (추후 알림 등 기능과 연계하여 요청완료)비동기 처리 예제Bad case: 동기 처리public class SynchronousProcessing { public void processData() { // 대용량 데이터 처리 processLargeData()..

CS 정리 2025.04.27

Java wrapper class and caching, boxing & unboxing

1. wrapper class기본 자료형(Primitive Type)을 객체(Reference Type) 로 감싸서 다룰 수 있는 클래스byte -> Byte, int -> Integer, char -> Character, boolean -> Boolean 등 왜 필요한가?기본 자료형을 객체로 사용해야하는 경우 필요함. 1. java의 많은 기능들은 객체(Object)를 통해 사용할 수 있도록 설계되어 있음. 그래서 Object의 자식이 아닌 기본 자료형을 사용할 수 없고 wrapper 를 통해 사용함.Collections, Generic, Reflection , Annotaion 등 2. wrapper 는 기본 제공 기능이 있어 유용함.equals(), parseInt(), toString(), com..

CS 정리 2025.04.24

Java 대용량 데이터 처리 (2) - Stream 메모리 효율 높이기

2. List -> Stream (장기간 저장된 로그 분석) Stream 처리 예제Bad case : 모두 조회, 모두 처리List logs = logRepository.findAll(); // 100만 건logs.forEach(this::analyze);OutOfMemoryError 발생 위험GC 부하응답속도 지연 Stream 처리란?데이터를 한 번에 다 불러오지 않고, 하나씩 처리하면서 다음 데이터를 읽는 방식List에 모두 올리지 않기Iterator처럼 지연(Lazy) 처리Good case : stream으로 하나씩 처리@QueryHints(value = @QueryHint(name = org.hibernate.jpa.QueryHints.HINT_FETCH_SIZE, value = "1000"))@..

CS 정리 2025.04.20

Java 대용량 데이터 처리(1) - Cursor 방식

1. 한 번에 처리하기 -> 작게 나눠서 천천히 처리하기Cursor-based 예제Bad case : 모두 조회, 모두 처리List allData = repository.findAll();processAll(allData);Good case : Cursor 방식으로, 배치 사이즈로 조회하여, 부분처리Long lastId = 0L;int batchSize = 1000;while (true) { List batch = repository.findBatch(lastId, batchSize); if (batch.isEmpty()) break; processAll(batch); lastId = batch.get(batch.size() - 1).getId();}@Query(value = "SE..

CS 정리 2025.04.20