일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- GraphQL
- #크랙미3번
- #크랙미 9번
- #보안이슈
- 리버싱
- #고클린
- #파밍
- #심플즈 크랙미
- Easy
- #크랙미4번
- #심플즈
- #abex
- #abex크랙미
- java
- java8
- #abex크랙미4번
- #보안뉴스
- #크랙미 10번
- Spring
- #크랙미2번
- #크랙미 5번
- leetcode
- #리버싱
- #크랙미
- springframework
- Today
- Total
목록전체 글 (120)
Halo World
SOLID는 OOP설계의 다섯가지 기본 원칙으로 객체지향 설계를 할때 지켜야 하는 원칙으로 알려져 있다. SRP (Single Responsibility Principle) 단일 책임 원칙 : 하나의 클래스는 하나의 책임만 갖는다. 한 클래스가 여러 책임을 갖고 있는 경우 혼재된 책임을 개별 클래스로 분할하여 한 클래스당 하나의 책임만 맡도록 한다. 자식 클래스끼리 유사한 책임을 중복으로 정의한다면, 부모 클래스로 공통되는 책임을 위임한다. 여러 클래스에 동일한 책임이 분리된 경우 중복되는 책임을 특정 클래스로 분리한다. (응집성 증가) 장점 : 기능의 책임 영역이 확실해져 한 책임의 변화가 다른 책임에게 side effect를 미치지 않도록 방지할 수 있고, 코드의 가독성과 유지보수성이 향상된다. 클래..
* 인터뷰시 인터뷰어는 원하는 방향으로 면접자를 가이드하면서 면접자의 property를 검증하려고 한다. 따라서, 인터뷰어가 가이드 할 수 있게 놔둘 것 * "트위터는 어떻게 설계되어있을까요?"라고 질문한다면, 바로 답을 도출하지 말고 답을 풀어가는 과정을 보여줄 것 (~~ 기능들을 수행해야하니 어떤 것이 필요하고, 또 그것을 위해서는 어떤 것이 필요하고,, 이런식) Core Features 1. Tweeting 2. TimeLine User TimeLine : 본인 트윗 + 리트윗한 트윗 (More easy too design! => 자신의 트윗과, 리트윗한 액션을 리스트업하면 됨) Home TimeLine : 팔로우한 사람들의 트윗 3. Following 다른 기능들은 비교적 단순하니 Home Tim..
- 자바 비동기 처리의 방법 / 장점 - Async 처리시 주의사항, 고려사항, Pool 설정이유, 단점 - Async 예외처리 - Future와 CompletableFuture의 차이점 Java 비동기 처리 방법 1. @Async annotation 으로 간단하게 처리 가능. 클래스에 @EnableAsnyc를 추가하고, 비동기로 제공하고자 하는 메소드에 @Async 어노테이션을 추가하는 방식으로 가능함. @Async의 기본 설정은 SimpleAsyncTaskExecutor 이기 때문에 thread 관리를 위해서는 별도로 구성해주어야 함 2. Async thread pool 설정을 위한 별도의 @Configuration 클래스를 만들고, 해당 클래스에 @EnableAsync 어노테이션 추가. (기존 클래..
1. SQS Fully managed message queuing service 메시지 손실이나 다른 서비스를 별도로 요구하지 않고, 모든 처리량 수준에서 모든 크기의 데이터 전송 가능 고 가용성 메시지 클러스터를 운영하고 스케일링하는 관리 부담이 적음 (workload에 맞게 자동 확장) 사용하는 만큼만 가격 지불 사용하기 쉽고, 신뢰할 수 있음 (Easy to use, reliable) Medium, Lyft, Coursera 등에서 사용 2. Kafka 분산, 내결함성, 높은 처리량을 지원하는 pus-sub 메시징 시스템 Kafka는 distributed, partitioned, replicated 된 커밋 로그 서비스 메시징 시스템의 기능을 제공하긴하지만, 독특한 디자인임 높은 처리량 (High-..
Spring 3.2.x Java 5 기능 @Async annotation을 활용한 비동기 메서드 호출 지원 하나의 Spring.jar 로 지원하던 것을 spring-core, sprint-web 등으로 나눔 Java 클래스로부터 @Configuration @Bean 등 annotation을 통해 DI 지원 받기 가능 RestTemplate 이용 가능 16.12.31 지원 종료 Spring 4.3.x (Spring boot 1.5) Java 8 지원 @Autowired 지원 custom-annotation 가능 Bean 관리 용이(@Order, @Lazy annotation) Framework 레벨에서 테스트 유틸리티 지원 (AopTestUtils, ReflectionTestUtils 개선) 20.12.3..
Java 7 개선점 다이아몬드 연산자 switch문에 String 자료형 사용 가능 try-with-resources 등장 AutoCloseable 인터페이스로 자원의 자동 회수가 가능하다. (대부분의 자원이 AutoCloseable을 구현하고 있음) muti exception catch 가능 참고 - johanneslee.github.io/articles/page7/ Java 8 개선점 Lamda 표현식 사용 가능 : 함수형 프로그래밍이 가능해짐 함수형 프로그래밍의 장점은? -> 높은 수준의 추상화 가능 / 함수 단위의 코드 재사용 수월 / 불변성 지향 (프로그래밍의 동작을 예측하기 수월함) / 직관적임 Stream (https://jeong-pro.tistory.com/165) 스트림이란? 컬렉션, ..
분할 정복 패러다임을 차용한 알고리즘들은 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제로 나눈 뒤 각 문제에 대한 답을 재귀 호출을 이용해 계산하고, 각 부분 문제의 답으로부터 전체 문제의 답을 계산해 낸다. 분할 정복을 사용하는 알고리즘의 세 가지 구성요소 - 문제를 더 작은 문제로 분할하는 과정(divide) - 각 문제에 대해 구한 답을 원래 문제에 대한 답으로 병합하는 과정(merge) - 더이상 답을 분할하지 않고 곧장 풀 수 있는 매우 작은 문제(base case) 분할 정복을 적용해 문제를 해결하기 위해서는 1. 문제를 둘 이상의 부분 문제로 나누는 자연스러운 방법이 있어야 하며, 2. 부분 문제의 답을 조합해 원래 문제의 답..
leetcode.com/problems/divisor-game/ Divisor Game - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 해당 문제는 DP로 풀수 있는 문제. 알고리즘을 안한지 오래되어 차근차근 공부하는 중 DP 관련하여 잘 정리되어있는 블로그가 있어 참고해서 개념 잡았다. velog.io/@nninnnin7?tag=DP nninnnin7 (justindglee) - velog velog.io [풀이] 핵심은 dp[N-x]가 false 이면 dp..
멀티 프로세스 vs 멀티 쓰레드 멀티 프로세스는 한 대의 컴퓨터에 서비스를 여러개 띄워 사용하는 방식으로, 프로세스는 하나의 애플리케이션이라고 보면 된다. 각 프로세스는 독립적인 메모리를 할당받기 때문에, 메모리를 공유할 수 없고 공유하기 위해서는 IPC(프로세스간 통신)을 이용해야 한다. 멀티 쓰레드는 한 프로세스 안에 쓰레드를 여러개 실행시키는 방식으로 각 쓰레드는 별도의 stack 영역을 갖지만 heap 영역이나, data 영역, code영역은 공유해서 사용한다. 어떤 것이 더 효율적일까? 일반적으로 하나의 프로세스에서 여러 작업을 동시에 실행하는 멀티 쓰레드 방식이 더 효율적이고 멀티 쓰레드 방식은 아래 두 가지의 이점을 갖는다. 1) 메모리 자원 공유 : 멀티 쓰레드 방식은 stack을 제외한 ..
[자바 Stack과 Heap 영역] 새로운 변수와 객체를 선언하거나, 새로운 메소드를 호출하거나, 문자열 선언 또는 유사한 작업을 수행할 때, JVM은 stack 또는 heap 메모리 영역에 필요한 메모리를 할당한다. Stack 메모리 영역 정적 메모리 할당 및 쓰레드 실행을 위해 사용되는 영역으로 메서드에 고유한 기본 값과 메서드에서 참조하는 힙 개체에 대한 참조 값을 포함하고 있다. LIFO(Last-In-First-Out) 순서로 동작하며, 새 메소드가 호출될 때마다 스택 상단에 해당 메소드에 대한 새 블록이 생성된다. 메서드 실행이 완료되면, 해당 스택에서 pop되고, 호출한 메서드로 흐름이 돌아가게 된다. 특징 스택 내부의 변수는 변수를 생성한 메서드가 실행되는 동안만 존재한다. 메서드 실행에 ..