[F-lab] 멘토링 5주차 회고

devdo·2022년 5월 21일
0

회고록

목록 보기
5/23
post-thumbnail

📌 4주차 이후 질문 및 정리

  • 쓰레드를 사용하는 이유
    : 하나의 프로세스 내에서 여러 개의 실행 흐름(단일, 동시적, 병렬적)을 두어 작업을 효율적으로 처리하기 위한 모델이다. 프로세스보다 context swithcing 비용이 적다.
    프로그램 실행하면 JVM이 시작되고 JVM이 시작되면 자바 프로세스가 시작된다. 이때 프로세스 안에 스레드가 있다.
    여러 프로세스가 공유하는 하나의 스레드가 수행되는 일은 없다.
    어떤 프로세스든 하나 이상의 스레드가 수행된다.
    두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스라고 한다.
    멀티스레드는 주어진 자원을 극한으로 사용하기 위한 모델이다.
  • 스레드 풀이 WAS에 사용되는 이유
    : WAS는 웹서블릿컨테이너라고 불린다.
    서블릿 컨테이너는 사용자로부터 요청을 받을 때 마다 요청을 처리할 스레드를 생성한다.
    사용자가 무수히 많거나 무수히 많은 request 요청이 오면 스레드를 무제한으로 생성해 메모리 리소스를 너무 많이 사용할 수 있다. 그래서 컨테이너 내부에 스레드풀(Thread pool)을 만들고 스레드를 미리 할당하여 요청할 때 꺼내 재사용하는 것이다.
  • double와 float의 장단점(정확도의 차이) - 업데이트
    : 코드적으로 같은지 알아보기 내용 추가
    => 알아놓았던 내용
    고정 소수점 방식은 정확도는 높지만 큰 수를 표현하기 위해서는 많은 양의 메모리가 사용된다는 단점이 존재. 따라서 이 문제를 해결하기 위해 부동(float)소수점 방식이 도입되었습니다.
    부동소수점 방식은 값 자체를 저장하는 것이 아니라, 값을 도출할 수 있는 수식에 대한 정보를 저장하는 방식. 현대 컴퓨터는 IEEE의 부동소수점 방식을 이용 자바는 부동소수점 방식!
// code식으로 double float 비굑 방법 정리
1) == 는 절대 안되고

2)
Float.compare(f1, f2) == 0
Double.compare(d1, d2)
3)
double과 float값을 비교 할때에는 모두 float로 형변환 하거나 정수로 변환하여 비교해야 한다.
4)
통화 계산에는 BigDecimal
// 해쉬충돌 알고리즘
1) Separate Chaining 기법 : 각 인덱스에 할당된 것이 값이 아니라 연결리스트로 추가적인 공간을 활용하는 것(LinkedList방식)
-> 상대적으로 적은 메모리를 사용한다. 미리 공간을 잡아 놓을 필요가 없다
2) Open Addressing 기법 : 인접한 다른 비어있는 해시 버킷(배열)을 찾아 삽입하는 방법 (Array방식)
-> 데이터의 길이가 늘어나면 그에 해당하는 저장소를 마련해 두어야 한다.

자바 hashMap에 충돌해결기법 => Separate Chaining 기법


자바 8부터는 Seperate Chaining에서 데이터 개수가 많아지면 LinkedList대신 Tree(red black tree)를 사용해 성능적으로 더 좋아지게 하였다.


📌 전주 공부한 내용들

  • <오브젝트> 책 300페이지. 하지만 내가 제대로 이해했다고 생각되지 않는다.
    다시 재독이 필요할 것이라 본다.

  • 스프링 입문, 개구리 책 1회독 (AOP, 자바 람다 제외) 객체 지향원칙(캡.상.추.다, SOLID원칙 등)을 이해하는 데도 정말 도움을 많이 받았다.

  • 김영한 강의 기본원리 강의 마무리. 바로 JPA 강의로 들어간다.

  • 알고리즘, 자료구조 이것도 좋지만 코딩테스트 문제 정리

  • 인프런의 코딩테스트로 맛보기 좀 하고 백준 문제 풀이가 시급.



📌 멘토링

  • hashMap 시간 복잡도 그 외 해쉬 충돌 알고리즘 다시 정리

  • Tree(그래프의 일종)의 시간복잡도 그외 장점

  • 연결형 리스트 vs Tree

  • DB에 인덱스당 B트리가 만들어지는 것. 이게 이진트리보다 더 빠르다.

  • 파이썬 딕셔너리와의 차이점 // 상관없는 내용이었음. ㅋ

  • Array 메모리 관리 다시 한번 정리

  • 객.사.오(객체지향의 사실과 오해) 이야기
    중요한 키워드 : 책임, 디커플링, 캡슐화

  • 디자인 패턴(김영한 AOP 고급 강의에서 발췌하기)

자바 컬렉션(자료구조)의 시간복잡도 이야기를 많이 이야기 해주었다. 알고리즘의 핵심은 시간복잡도라고 한다. 거기서 파생된 장단점에 대해 이해하면 더 쉽게 와닿는다고 한다.

점점 자바 이야기는 끝이 가고 있다는 게 느껴진다. 책들(객사오, 엘리스책, 스프링 개구리책)을 가지고 이야기하자고 한다.



📌 느낀점

멘토님과의 자바 이야기는 괜찮지만 역시 알고리즘, 코딩 테스트가 너무 어렵다..
해당 내용을 하자니 시간이 부족하다는 걸 너무 많이 느끼게 된다.

해야겠다고 하는데 상당히 부담이 느껴진다. 다른 공부가 약하다고 느껴지니 CS, 자료구조, 알고리즘, 코딩테스트 풀기가 어느정도 되야겠다고 생각된다.

그래서 인프런 강의로 조금 채워야 겠다. 하나씩 하나씩 풀어나가보자.



📌 해야 할 것

  • 운영체제+알고리즘 책 50%
  • 김영한 기본원리 강의 완료 -> JPA 인강으로 가기
  • 코딩 테스트 - 파이선 언어로 정하고 강의 듣기 => 자바로!
  • 스프링 MVC 패턴 코드 구현 연습
  • 멘토님께서 질문하셨던 내용들 블로그 정리
  • 운동(PT - 어깨운동 + 가슴운동)
profile
배운 것을 기록합니다.

0개의 댓글