전체 글 132

[항해 취업코스] 개발자 취준 기록 3일차

Q. JVM의 스택과 힙메모리 영역에 대해 아는 만큼 설명해주실 수 있을까요? A. Java Virtual Machine(JVM)의 스택과 힙 메모리 영역에 대해 설명하겠습니다. 먼저, JVM 내부에는 'Runtime Data Areas'라는 바이트코드를 실행시키기 위해 필요한 메모리 공간이 존재합니다. Runtime Data Areas에 Heap과 Stack이 있고 Method area, PC registers, Native method stacks 등의 다른 메모리 공간도 존재합니다. 힙(Heap)은 프로그램이 실행되는 동안 생성되는 객체를 저장하는 메모리 영역으로, 모든 스레드가 공유하는 공간입니다. 객체는 힙에 생성되고, 객체에 대한 참조는 스택에 저장됩니다. 힙에 저장된 객체는 JVM의 가비지 ..

CS 2024.03.08

Java 버전 특징 이해하기

※ 추후 지속적으로 내용을 추가할 예정입니다. 개요 (2014) 자바 8에서 stream api가 추가되었음 (2017) 자바 9에서는 모듈화를 지원하게 됨 (2018) 자바 10, 11(LTS) 출시함 6개월 주기로 메이저 버전을 출시한다고 했음 3년 주기로 LTS 버전을 출시한다고 함 17 버전 이후로 2년으로 수정 LTS(Long Term Service) : 새로운 버전이 나와도 지속적인 지원을 해주는 버전. (2021) 자바 17 LTS 버전 출시 이후 2년 주기로 LTS 버전을 출시하기로 함 매년 자바 11의 사용률이 증가하고 있다. 추가된 기능 정리 Java 9 + 모듈화 기능 + 인터페이스에도 private 접근 제한자 사용 가능 + 불변 컬렉션 생성 : List.of() / Set.of()..

CS/Java 2024.03.07

JDBC의 이해

※ 글의 목적 : JDBC가 어떻게 탄생했는지, 흐름을 알아보자! 초기 개발에는 데이터베이스 벤더(회사)마다 서버와의 통신 방식이 모두 제각각이었다. 1. DB와 커넥션 연결하는 방법 2. DB에 SQL을 전달하는 방법 3. DB의 결과를 응답받는 방법 이 세가지가 모두 벤더마다 달라 사용하는 DB에 맞게 코드를 짜야했다. 이러한 문제를 해결하기 위해 JDBC 표준 인터페이스를 만들어 모든 데이터베이스에 대한 규격을 일치시키고, 각각의 DB 벤더는 해당 라이브러리를 상속받아 인터페이스에 맞게 코드를 구현하여 라이브러리로 제공한다. 예를 들어, MySQL DB에 접근할 수 있는 MySQL JDBC 드라이버를 구현하여 라이브러리로 제공한다. 대표적으로, JDBC는 세 가지를 표준 인터페이스로 정의하여 제공한..

CS 2024.03.07

[항해 취업코스] 개발자 취준 기록 2일차

Q. JPA의 더티 체킹이란 무엇인가요? A. 영속성 컨텍스트에 저장된 엔티티의 상태를 스냅샷과 비교하여 변경 여부를 체크하는 기능을 의미합니다. 처음 영속성 컨텍스트에 엔티티가 저장될 때, 해당 엔티티의 스냅샷이 1차 캐시에 함께 저장됩니다. 그리고 트랜잭션이 종료되는 시점에, 영속성 컨텍스트는 1차 캐시의 스냅샷과 엔티티의 현재 상태를 비교합니다. 이때 엔티티의 상태가 변경되었다면, JPA는 자동으로 해당 엔티티에 대한 UPDATE SQL을 데이터베이스에 전송합니다. 이를 통해 개발자는 직접 변경 감지에 신경 쓰지 않아도 되며, 객체 지향적인 프로그래밍을 할 수 있습니다. + 영속성 컨텍스트에 엔티티가 저장되는 경우는 어떤 경우인가요? A. 1. 엔티티 매니저의 persist 메서드가 호출될 때 - ..

CS 2024.03.06

[항해 취업코스] 개발자 취준 기록 1일차

Call by reference란 무엇이고 보통 어떻게 쓰이나요? First. 변수의 값을 인자로 사용할 때, 해당 변수 자체를 사용하고 싶은 경우 포인터를 통해 사용된다. Second. Call by reference는 메서드에 변수를 인자로 전달할 때, 그 변수의 원래 주소를 전달하는 방법을 의미합니다. 따라서, 메서드 내에서 이 변수를 조작하면 원래 변수의 값이 변경됩니다. 이 방식은 원래의 값을 변경하고 싶을 때, 또는 큰 데이터 구조를 복사하는 비용을 피하고 싶을 때 주로 사용됩니다. Override 와 Overload 를 설명해주실 수 있을까요? First. Overload는 메서드를 생성하는 생성자의 인자의 종류의 차이를 통해 여러 방식으로 객체를 생성할 수 있도록 하는 설정 방식이고, Ov..

CS 2024.03.06

[Error] 특정 엔티티 삭제 시, 연관관계 엔티티 함께 삭제하기

※ 외부 블로그를 참고하여 공부를 목적으로 작성한 글입니다. 진행중인 스프링 프로젝트에서 특정 엔티티를 삭제하려 했지만, 다음과 같은 에러가 나타났다. java.sql.SQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`news_feed`.`comment`, CONSTRAINT `FKs1slvnkuemjsq2kj4h3vhx7i1` FOREIGN KEY (`post_id`) REFERENCES `post` (`post_id`)) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java..

Error 2024.03.05

[LeetCode] 179. 가장 큰 수

https://leetcode.com/problems/largest-number/ 문제 이해 정수형의 요소를 가진 리스트가 입력으로 주어질 때, 이들을 붙여서 가장 큰 숫자가 되도록 이어 붙인 후 출력하라. 생각한 알고리즘 1. 리스트의 각 요소의 첫 번째 자리 기준으로 내림차순 정렬해야한다. 2. 첫 번째 자리끼리의 비교를 위해서 각 요소를 str으로 변환해야한다. 3. str[0]을 기준으로 내림차순 정렬한다. 4. str[i] 값이 동일한 경우 값이 동일한 요소들끼리 재정렬한다. 5. str[i+1] 값에 따라 내림차순 정렬한다. str[i+1] 값이 None인 경우 str[0] 값과 동일한 값으로 가정한다. 이렇게 각 자리마다 내림차순을 하고, 현재 자리의 값이 동일한 경우, 다음 자리 값을 내림..

[백준] 10814번: 나이순 정렬

문제 https://www.acmicpc.net/status?user_id=daum4572&problem_id=10814&from_mine=1 """ 온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어짐. 회원들의 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬. """ 수정 전 코드 import sys input = sys.stdin.readline class Solution(): def ageSort(self): N = int(input().rstrip()) judge = list() for i in range(N): age, name = input().rstrip().split(" ") judge.append((int(age), name)) judge..

알고리즘/백준 2024.01.17

[자료구조/알고리즘] 학습 2주차 회고

느낀 점 오늘 알고리즘 공부 2주차 공부가 끝이 났다.. 이번 주차에는 "심화 자료구조 학습" 주간이었다. 그래프 + DFS BFS + 백트래킹 트리 / 이진 트리 최소 신장 트리 Simpulation / Implementation 위와 같은 주제로 한 주간 알고리즘 문제를 풀었다. 백준 S3 ~ G4 범위의 문제가 다수였다.. 현재 파이썬으로 코드를 작성하고 있는데, 아직 문법에 자유롭지 못해서 알고리즘 구조를 만드는 것과 더불어 문법을 계속 검색해가며 적용되는지 검증을 거치는 시간이 필요해 시간이 많이 소요되었다.. 하지만 점점 파이썬에 적응되고 있어 알고리즘 문제를 푸는 데 있어 유리할 것 같다. 1. 그래프 + DFS 전화 번호 문자 조합(https://leetcode.com/problems/le..

알고리즘 2024.01.16

[백준] 17144번: 미세먼지 안녕!

문제 이해 R(행) × C(열)을 입력으로 받고, T(초)를 입력받는다. R × C 크기 만큼의 숫자를 입력 받는다. 이때, 1번 째 열에 공기청정기가 설치되고 -1로 나타낸다. 확산 순환 문제 풀기 from sys import stdin from typing import List ccw = globals() def rotate(A: List[List[int]]) -> List[List[int]]: for i in range(ccw-2, -1, -1): A[i+1][0] = A[i][0] for i in range(0,C,1): A[0][i] = A[0][i+1] for i in range(0,ccw): A[i][-1] = A[i+1][-1] for i in range(C,1,-1): A[ccw][i] ..

알고리즘/백준 2024.01.15