Giter Site home page Giter Site logo

teach_wanted-preonboarding-backend-challenge's Introduction

원티드 프리온보딩 백엔드 챌린지 6월

원티드 플랫폼에서 진행되는 2023년 06월 교육 과정입니다.
Java 꽉 잡아! : JVM부터 GC, 스레드 동기화까지!

  • 단순히 Java의 문법만 사용하는 것이 아닌 Java에 대해 더 깊게 알아보고, 이를 통해 무지성 코딩을 지양하고 한 번 더 생각하는 습관을 들여봅니다!
  • 클래스 로딩 과정, 바이트코드, JIT 컴파일러 등을 이해하며 자바가 동작하는 방식에 대해 알아봅니다.
  • JVM 메모리 구조와 GC, 스레드 동기화 등 Java 프로그래밍에 필요한 개념들에 대해 알아봅니다.

커리큘럼

1-1 Java의 정의와 동작 방식에 대해 살펴봅니다.

[ 키워드 ] Java, JRE, JDK, JVM, AOT, JIT, Java Bytecode, Code Cache, ByteBuddy

  • Java의 구성 요소와 동작 방식
  • 클래스 로더와 클래스 로딩
  • Java 바이트코드와 코드 캐시
  • 바이트코드를 컴파일하는 AOT, JIT 컴파일러
  • [ 아하! 모먼트 ] '내가' 수행 업무와 성과를 따로 기록하는 이유는?

1-2 JVM의 정의와 구조, 메모리에 대해 살펴봅니다.

[ 키워드 ] JVM, JMM(Java Memory Model), Memory Leak, Thread dump, Heap dump

  • JVM과 메모리 구조
  • Java 메모리 모델과 메모리 누수
  • 스레드덤프를 통한 스레드의 상태 정보 확인
  • 힙덤프를 통한 힙 메모리 확인
  • [ 아하! 모먼트 ] '내가' 채용 공고를 볼 때 중요하게 보는 항목은?

1-3 GC(Garbage Collection)의 정의와 Java GC 알고리즘에 대해 살펴봅니다.

[ 키워드 ] SerialGC, Parallel GC, CMS GC, G1 GC, Shenandoah GC, ZGC, Epsilon GC

  • 가비지 컬렉션의 정의와 가비지 컬렉터가 처리하는 Heap 영역
  • Heap 영역을 제외한 GC 처리 영역
  • Java에서 지원하는 GC 알고리즘
  • [ 아하! 모먼트 ] '내가' 생각하는 스터디의 핵심 요소와 선호하는 진행 방식은?

1-4 동시성 처리를 위한 스레드 동기화에 대해 살펴봅니다.

[ 키워드 ] Thread Synchronization, Semaphore, Mutex, volatile, synchronized, CAS, java.util.concurrent package, Virtual Thread

  • 스레드 동기화와 동시성
  • 멀티 스레드 환경에서 발생하는 스레드 동기화 문제
  • Java에서 스레드 동기화를 위해 제공하는 기능
  • JDK 19에 추가된 가상 스레드
  • [ 아하! 모먼트 ] '내가' 코드 리뷰 문화 도입과 개선을 위해 시도한 방법

사전 과제 제출하는 법

(1) Issues 버튼을 눌러 이슈 페이지로 이동

Issues

(2) New issue 버튼을 눌러 이슈 생성 페이지로 이동

New issue

(3) 과제 제출용 템플릿에 있는 Get started 버튼을 눌러 이슈 작성 페이지로 이동

Get started

(4) 1번 질문 영역에 답안 작성 후 2번 Submit new issue 버튼을 눌러 과제 제출

Submit new issue


사전 과제

  • Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!
  • Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?
  • 인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.
  • 프로세스와 스레드의 차이점을 서술해 주세요.
  • JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.
  • Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.
  • 세마포어에 대해서 아는 대로 서술해 주세요.
  • Java의 synchronized에 대해서 아는 대로 서술해 주세요.
  • 강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?
  • 회사 생활 또는 개발자로서 궁금한 질문이나 고민이 있나요?
  • 이외에 추가로 바라는 점이나 하고 싶은 말씀을 남겨주세요!

teach_wanted-preonboarding-backend-challenge's People

Contributors

jaenyeong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

teach_wanted-preonboarding-backend-challenge's Issues

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

메모리 사용 영역에 관한 내용이 기억에 남습니다. 메모리 영역은 메소드 영역, 힙 영역, JVM 스택 영역이 존재하는데 프로그램을 실행할때 메소드와 힙 영역은 메모리를 공유하는 반면 스택 영역은 스레드당 하나씩 스레드 독립적으로 사용된다는 것이 기억에 남습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

프로그램을 하는 동안 자주 보였던 Serializable에 관한 내용을 본적이 있습니다. Serializability 라는 말뜻을 잘 몰랐는데 Serializable 인터페이스를 상속받은 클래스는 Serializability를 구현할 수 있다는 의미에 자바의 객체지향 세계가 좀더 실감났습니다.
그전 까지는 Serializable이 특별한 인터페이스인줄 알았는데 이때 문서를 보면서 Serializable에는 어떤 메소드나 필드를 가지고 있지 않은 단지 그 자체로 serializable이라는 개념을 객체가 가지게 된다는 것을 보았는데 인터페이스를 정의할때 설계상 의미를 가지기 위해 정의된다는 것을 알게되었습니다.
문서를 보면서 serialization 이라는 개념도 좀더 보게 되었는데 직렬화는 Object → BInary 형태 변환 역직렬화는 Binary → Object 형태 변환이라는 개념을 알게 되었으며, serialiable 이라는 개념에 Object 를 Binary로 바꿀 수 있는 객체가 되는 것을 명시하는데 사용되는 인터페이스라는 것을 깨닫게 되었습니다.
이후 좀더 찾아보면서 OutputStream 에서 Serialization을 하면 Object를 Binary로 변환하여 출력을 할 수 있게 되는 것을 알게 되었고 InputStream을 사용해서 사용자가 입력한 Binary값을 Java 객체로 변환하는 것이 DeSerialization이라는 개념도 알게 되었습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

  • 인터프리터
    - 코드를 한줄씩 읽어나가면서 바로 컴파일하고 실행하는 방식으로 사용되는 컴파일 하는 방식을 의미합니다.
    - 인터프리터를 사용하면 빠른 컴파일이 가능하고 결과를 즉각적으로 볼 수 있다는 장점이 있지만 런타임시 컴파일이 일어나기 때문에 컴파일 언어보다는 다소 성능에 영향이 있을 수 있습니다.
  • 컴파일러
    - 컴파일을 해주는 도구이며 인터프리터와는 다르게 코드를 실행하기 전에 모든 코드를 컴파일하여 하나의 바이너리 형태로 변환을 해주는 컴파일 방식을 사용합니다.
    - 컴파일러를 사용할 경우 인터프리터를 실행할 때보다 빠른 실행 속도를 낼 수 있다는 장점이 있지만 컴파일하는데 일정 시간이 소모된다는 단점이 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 프로그램 실행 단위를 의미합니다. 일반적으로 앱으르 하나 실행시키면 하나의 프로세스가 실행된다고 할 수 있습니다.
스레드는 프로세스 안에서 명령을 동작시키는 실행 단위 입니다. 이는 마치 하나의 큰 컨테이너 안에 작은 여러개의 동작을 수행하는 실행 단위들이 있다고 생각하면 됩니다.

  • 프로세스와 스레드 간의 차이
    - 프로세스는 메모리 영역을 서로간 공유하지 않고 하나의 실행 컨텍스트 안에서 독립적으로 프로그램을 실행시키며 다른 프로세스를 실행하기 위해 컨텍스트 스위칭을 통해 프로세스 실행에 사용되는 데이터를 메모리에 적재해야 합니다.
    - 반면 스레드는 하나의 프로세스 안에서 실행되는 실행 단위이므로 메소드(코드), 힙 영역등은 스레드간 공유를 하며 스택영역은 스레드 독립적으로 스코프를 가짐으로써 메모리를 공유하지 않는 특성이 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

  • JVM 정의
    - JVM은 자바를 실행할 수 있는 가상 환경이며 운영체제에 종속되지 않는다는 특성을 가짐으로써 한번 코드를 작성하고 어디에서든 사용하자는 아이디어로부터 비롯된 설계 구조입니다.
    - 어떤 운영체제에서든지 동일한 메모리 구조로 프로그램을 작성할 수 있다는 장점이 있습니다.
  • Method 영역
    - 클래스, 전역변수, static으로 선언된 변수들이 저장되며 프로그램이 컴파일 되는 순간부터 프로그램이 실행되는 순간 메모리에 올라가 종료될때까지 메모리에 적재되어 있습니다.
  • Heap 영역
    - new를 이용하여 동적으로 생성되는 클래스 인스턴스들이 저장됩니다. 클래스 인스턴스는 주소값에 의해 포인터로 참조되는데 참조가 해제되는 순간 CG에 의해 메모리에서 수거됩니다.
  • Stack 영역
    - 스레드별로 생성되는 영역이며 지역변수 파라미터 리턴값 등 연산에 사용되는 임시 값등이 생성되는 영역이다.
  • PC 레지스터
    - PC는 Program Counter 라는 뜻으로 현재 스레드가 실행될때 참조하는 주소와 명령들을 저장하고 있는 영역입니다.
  • 네이티브 메서드 스택
    - Java 가 아닌 C, C++로 작성된 메서드의 실행 스택입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Serial GC
싱글 스레드 기반일때 사용되는 가장 기본적인 알고리즘으로 GC를 할때 다른 스레드들이 모든 작업을 멈추며 이를 stop the world 라고 부른다. 이 방식을 사용하게되면 성능이 많이 떨어지게 되므로 최대한 기피할 수록 좋은 현상이라고 알고있으며 다른 GC알고리즘이 바로 이 목적을 달성하기 위해 멀티스레드를 병렬로 처리하는 등으로 GC를 구현한다.

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어는 멀티 스레드 환경에서 임계영역에 들어가기 위한 핸들값입니다.
멀티 프로세스가 동작하는 환경에서 데이터 무결성을 유지하기 위해 동기화가 매우 중요합니다. 프로세스가 하나의 주소 값에 들어있는 데이터를 Write할 때 다른 프로세스가 접근해서 Write를 동시에 하게되면 데이터 무결성이 깨지게되고 프로그램상 치명적인 버그를 만들어 낼 수 있기 때문입니다.
따라서 임계 영역에 프로세스 하나가 들어갔다, 나왔다 라는 의미를 가지는 변수를 사용하게 되는데 이 변수를 세마포어라고 부릅니다.
세마포어의 본 뜻은 기차가 지나갈 때 사람이 통과하지 못하도록 막아주는 역할을 하는 신호기를 뜻하는 단어라고 합니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

synchronized 라는 개념은 Java에서 스레드 세이프한 프로그램을 구현할 때 사용되는 키워드이며, 동기화 시 사용되는 개념입니다.
멀티스레드 환경인 자바는 스레드 하나가 자원을 사용하고 있을 때 다른 스레드가 접근하지 못하도록 막아주어야 하는 상황이 존재한다고 합니다. 이를 위해 메소드 정의시 synchronized를 사용하면 하나의 메소드를 어떤 스레드가 실행할 때 다른 스레드가 자원을 사용하지 않도록 제어하는 역할을 한다고 합니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

JVM의 내부적인 구조를 실제 프로그램에서 활용할 수 있는 사례에 대한 내용과 JVM 설정값을 실제 현업에서 어떻게 설정하여 사용하는게 보편적인지 활용 사례가 있는지 다뤘으면 좋겠습니다.
또한 JVM 로그를 분석해 트러블 슈팅을 할 수 있는 예시들도 함께 포함되어 JVM에 대한 이해를 높일 수 있었으면 합니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

  1. JVM이라고 하면 현업에서 항시 사용하면서도 그 존재감을 잊어버리고 사용할 때가 많이 있습니다. JVM에 대한 감각을 좀더 향상시키면서 프로그램 하는 방법에 대해 고민이 되는 부분이 있습니다.
  2. Java의 객체지향 세계가 너무 복잡하다고 느껴질 때가 있습니다. 그 양이 너무나 방대해서 어디까지 외우고 어디까지 찾아보며 사용해야할지 고민에 빠질때가 있습니다.
    이런 고민들을 강사님들도 해보셨는지 고민을 해소할 수 있는 방법을 공유해주실 수 있는지 궁금합니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

완독하지 못 하였습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

람다식 부분을 살펴 보았습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터


  1. 코드를 한줄씩 읽어나가면서 바로 컴파일하고 실행하는 방식으로 사용되는 컴파일 하는 방식을 의미

컴파일러


  1. 컴파일을 해주는 도구이며 인터프리터와는 다르게 코드를 실행하기 전에 모든 코드를 컴파일하여 하나의 바이너리 형태로 변환을 해주는 컴파일 방식을 사용

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 프로그램 실행 단위
스레드는 프로세스 안에서 명령을 동작시키는 실행 단위

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바를 실행할 수 있는 가상 환경이며 운영체제에 종속되지 않는다는 특성을 가짐으로써 한번 코드를 작성하고 어디에서든 사용하자는 아이디어로부터 비롯된 설계 구조입니다.


Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

synchronized 라는 개념은 Java에서 스레드 세이프한 프로그램을 구현할 때 사용되는 키워드이며, 동기화 시 사용되는 개념

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

JVM의 내부적인 구조를 실제 프로그램에서 활용할 수 있는 사례에 대한 내용과 JVM 설정값을 실제 현업에서 어떻게 설정하여 사용하는게 보편적인지 활용 사례가 있는지 다뤘으면 좋겠습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

Java의 객체지향 세계가 너무 복잡하다고 느껴질 때가 있습니다. 그 양이 너무나 방대해서 어디까지 외우고 어디까지 찾아보며 사용해야할지 고민에 빠질때가 있습니다

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

학교 다닐떄 읽었는데 쓰레드 부분부터 안읽었던것 같습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

보통 도큐먼테이션볼 때에는 라이브러리에 무슨 메소드들이 있고 파라미터랑 리턴값 정도만 보는것 같습니다

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 한줄씩 순서대로 해석, 실행하는 것이고 컴파일은 일단 모든소스를 메모리에 올려 해석한 뒤에 수행하는 것입니다

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 독립적인 하나의 실행중인 프로그램의 단위 쓰레드는 프로세스 안에 독립적인 여러개의 작업자들 입니다

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상머신의 경우 플랫폼 OS에 관계없이 자바가 실행되게 하기위해 존재하는 것으로 내부적으로 컴파일러를 가지고있습니다.
JVM의 메모리는 클래스, 힙, 스택 영역으로 되어있는데 클래스 영역엔 클래스, 인터페이스, static 글로벌변수 와같은 값들을 가지고있습니다.
힙영역은 동적으로 생성되는 모든값들이 들어가는 곳으로 GC가 일어나는 곳이기도 합니다. 보통 OOM이 발생하면 이부분에서 발생합니다
스택영역은 메서드 안에서 사용되는 값들을 저장하고, 호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장합니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

GC알고리즘들의 세부적인 건 모르지만 일반적인 GC가 일어나는 알고리즘은 알고있습니다. 객체가 처음 생성되면 young영역에 Eden에 생성되었다가 참조가 끊어진 도달불가능한 상태면 mark를 하고 sweep으로 삭제되는것입니다. 여기서 아직 참조가 남아있어 도달가능한 상태일때에는 young영역에 survivor 로 이동합니다. 이동하면서 age를 1씩 증가시킵니다. 특정 age에 도달한 객체는 old로 옮겨져 mark를 당하지않습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

동시성 프로그래밍에서 공유자원을 나타내기 위한 방법으로 데드락을 해결하기위함

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

여러개의 쓰레드가 하나의 자원을 공유할때 하나가 사용중일때 나머지는 대기상태로 만드는 것

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

개발을 하면서 아키텍처나 소프트웨어 생명주기를 보면서 이게 아닌거같은데 라는 느낌을 받을때가 많습니다. 근데 현재의 구조가 된 히스토리가 분명히 있을건데 현재 구조를 만든 전임자가 없어서 물어볼데도 없고 제가 공부해왔던 것들은 보통 이론적은 best practice이고 회사의 상황에따라 분명히 다르게 적용되는게 맞는데 지금 보고 있는 구조가 일반적인 상황에선 worst case라고 느껴지는데 이게 현재 상황에서 최선의 구조인지 아니면 고쳐야될 레거시인지 구별이 안가네요. 이런것들을 전임자없이 스스로 판단할 근거를 어떻게 찾을 수 있을까요?

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

모던 자바 인 액션 책을 주제로 스터디 진행 중입니다. 내부 반복을 통한 루프 퓨전과 쇼트 서킷 최적화가 인상적이었습니다. 파이썬에서는 비슷한 기능을 하는 코드를 짜려면 3rd Party 라이브러리를 사용해야 한다는 점이 안타까웠습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

최근에 살펴 본 내용으로는 스트림 Collector와 Reducer 문서가 있습니다. 생성자 인자로 무엇을 받는지, 어떻게 구현되어 있을 지를 알고자 했습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

https://byjus.com/gate/difference-between-compiler-and-interpreter/
둘 다 소스 코드를 기계어로 변환하지만, 컴파일러는 통째로 한 번에 변환하고, 인터프리터는 한 줄 한 줄 변환합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

https://www.javatpoint.com/what-is-the-context-switching-in-the-operating-system#:~:text=The%20Context%20switching%20is%20a,using%20CPUs%20in%20the%20system.
https://stackoverflow.com/questions/5440128/thread-context-switch-vs-process-context-switch
저장공간에 있는 프로그램이 메모리에 올라와 CPU가 실행하면 프로세스가 됩니다.
프로세스끼리 컨텍스트 스위칭이 일어날 때는 CPU는 프로세스의 PC와 Register정보를 PCB에 담고 상태를 running에서 waiting으로 바꿉니다. 가상 메모리 공간, 프로세서의 TLB, 캐시 등이 모두 쓸모 없어집니다. 반면 쓰레드는 스택만 다르고 메모리를 공유하기 때문에 컨텍스트 스위칭이 상대적으로 가볍고 빠릅니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 프로그램이 어떤 플랫폼에서든 동작할 수 있도록 가상화된 공간을 만들고 관리하는 프로그래밍 실행 환경입니다.
https://www.digitalocean.com/community/tutorials/java-jvm-memory-model-memory-management-in-java
https://en.wikipedia.org/wiki/Java_virtual_machine#/media/File:JvmSpec7.png
https://www.geeksforgeeks.org/java-memory-management/
JVM 메모리는 메서드 영역, 힙, JVM 스택, PC레지스터, 네이티브 메서드 스택으로 이루어져 있습니다.
힙: 각 JVM 프로세스마다 단 1개의 힙이 할당됩니다. GC로 관리됩니다.
메서드 영역: 클래스, 메서드 데이터, 생성자 필드 데이터, 인터페이스 등이 위치합니다.
스택: 쓰레드가 생성될 때마다 하나씩 생성됩니다. 로컬 변수나 함수 리턴 값 등이 쌓입니다.
PC 레지스터: 각 쓰레드마다 하나씩 존재합니다. 실행하는 연산의 주소를 저장합니다.
네이티브 메서드 영역: C 언어 함수 따위를 실행할 때 스택으로 사용됩니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.
https://d2.naver.com/helloworld/1329

마크 앤 스윕: 처리해야 할 메모리를 순차적으로 표시하고 한꺼번에 처리해버립니다.
https://www.baeldung.com/java-choosing-gc-algorithm

  • Serial GC: 싱글 스레드 (기본)
  • Parallel GC: 멀티 스레드, long pause times during stop-the-world
  • Concurrent Mark and Sweep (Java 14에서 사라짐)
  • Garbage First GC: 서버 클래스 기계들의 default
  • ZGC: pause time이 낮음.

세마포어에 대해서 아는 대로 서술해 주세요.

두 개의 원자적 함수로 조작되는 정수 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용됩니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

두 가지 쓰레드가 동시에 접근하는 것을 막습니다. 함수로 선언할 수도 있고 블록을 만들 수도 있습니다. 특정 쓰레드가 synchronized 영역에 접근하면 우선 선점하고 락을 걸어서 다른 쓰레드의 접근을 막습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

필요하다면 레디스나 카프카에 대한 특강

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

잘 부탁드립니다!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

따로 읽어본 것은 없고 학교 전공 서적 정도만 챙겨봤었습니다. 자바 기초 입출력부터 별찍기 했던게 생각나네요.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

자바 설치 외에 따로 본 적은 없었던 거 같은데, 가끔 라이브러리 찾아볼 때 들어갔었네요.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

컴파일 방식 - 코드를 컴파일러를 통해서 다른 형태(기계어, .class 파일 같은)로 바꿔준다. 이후 바꿔준 다른 형태 파일을 실행한다. (정적 타입) 자료형의 컴파일 오류를 찾아낼 수 있다.
인터프리터 방식 - 코드가 그대로 실행 환경으로 옮겨져서 바로 기계어로 해석되어 실행된다.
(동적 타입) 자동으로 변수타입 지정하므로써 코딩을 보다 빠르게 할 수 있음.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스 - 실행된 프로그램의 인스턴스
스레드 - 프로세스 내 실행되는 흐름의 단위
특징) 1개 프로세스에 1개 이상의 스레드가 있음

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

Java Virtual Machine의 줄임말.
메모리구조 - 가비지컬렉터, 실행엔진, 클래스로더, 런타임 데이터 영역

  1. 가비지 컬렉터 : 힙 영역에 생성된 객체 관리
  2. 실행엔진 : 각 명령어 단위로 실행함
  3. 클래스 로더 : 클래스 파일을 가져옴
  4. 런타임 데이터 영역 : 실행되는 데이터들을 저장하는 영역 (힙, 스택, 메소드, PC레지스터 등)

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

불필요한 메모리를 식별하여 메모리를 해제하는 방식의 알고리즘 (young old)

세마포어에 대해서 아는 대로 서술해 주세요.

프로세스/스레드 의 수를 공통으로 관리해서 허용된 값만 공유자원에 접근하는 방식

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

데이터의 thread-safe 기능을 제공하는 자바의 동기화 방법

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

강의를 통해서 자바에 대한 기술면접 대비를 완벽히 하고 실무 역량에 대해서 궁금했던 점들을 채워 나갔으면 좋겠습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

선배 개발자들의 자바를 활용한 프로젝트 중 현업에서 사용되고있는 방식의 코딩 노하우나 웹/백엔드 개발자의 전망과 관련된 내용에 대해서 궁금합니다.
회사에 들어갔을 때 회사 규모와 상관없이 (구별되었으면 더 좋습니다) 어떤 일을 하게되는가에 대해서 궁금합니다.
최근 주니어 개발자 시장이 복잡하다고 알고 있는데, 어떤 것을 준비하면 보다 더 경쟁력을 갖출 수 있을지 궁금합니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

완독못했습니다. 인상적인 내용은 GC (Garbage Collection) 입니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

locale 를 접하면서 국가 별 표현 및 관련 매서드를 살펴보았습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 소스 코드를 한줄 씩 해석하며, 컴파일 방식은 프로그램 전체를 스캔 후 실행시킵니다.
인터프리터보다 컴파일 방식이 실행 시간이 더 빠릅니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램이며, 쓰레드는 프로세스 내부의 작업의 흐름 단위입니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

컴파일된 java class 파일을 실행하여 CPU가 인식할 수 있도록 하는 가상머신입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

모르겠습니다

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

공유되는 데이터 A가 있을 때에 A 쓰레드가 해당 A 데이터를 점유할 경우 A 쓰레드의
작업이 완료될 때 까지 다른 쓰레드가 데이터 A 에 접근하지 못하도록 block 처리합니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

개발자로서 공식문서를 어떻게 보면서 실제 개발에 적용해 나가는지 에 대한 예시를
조금만 짚어주시는 내용을 다뤄주신다면.. 개인이 스스로 성장하는 과정에서
많은 도움이 되지 않을까 생각됩니다. ㅠㅠ 노하우좀 알려주세요

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

화..이팅..

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

없습니다 현재 doitjava 공부중입니다

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

아니요

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

컴파일러 모든 코드를 한번에 변환해서 사용/ 인터프리터 한줄씩

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 하나의 처리해야할 업무 스레드는 병렬식으로 프로세스를 해결하는 것

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상머신은 os에 영향받지 않고 컴파일하면 컴파일 하는 대로 여러 부분에서 사용가능하다

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

예전에 유닉스 수업에서 들은것 같은데 기억이 안납니다

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

기대하는 내용은 병렬 처리 관련해서 많이 궁금합니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

강의 내용 따라가면서 자바도 빠르고 확실하고 기억에 남게 끝내도록 하겠습니다

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석을 읽긴했지만 필요한 부분만 공부하여 완독하지는 않았습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

가장 최근 Reference 에 대해 공부하느라 본적이 있습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 1줄씩 읽고 수행된다.
컴파일 방식은 컴파일러가 바이트 코드, 기계어 로 변환 한 뒤 컴파일하여 실행하는 방식으로, 빠르다.

프로세스와 스레드의 차이점을 서술해 주세요.

작업의 단위 <-> 실행 흐름의 단

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신으로 컴퓨터의 메모리를 할당받아 프로그램을 수행한다.
method area, heap area, stack area, pc register, native method area로 구성된다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

세마포어에 대해서 아는 대로 서술해 주세요.

공유 자원에 대해 여러 쓰레드의 접근을 막

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화에 사용된다.
함수에 synchronized키워드를 붙이면 그 인스턴스에 lock이 걸린다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

gc가 객체를 수집하여 처리하게 될 때, 객체가 수집대상인지 어떻게 판별하는지에 대해서와 WeakReference 인 경우 gc가 이를 어떤식으로 판단하여 수집하는지에 대해 자세히 알고 싶습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

없습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

자바 그룹핑 관련 메소드를 파악하려고 열심히 찾아본 경험 등 주로 많이 찾아보는 편입니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

자바 바이트코드로 되어있는것을 인터프리터가 코드를 읽으면서 컴퓨터에게 알아들을 수 있게 만들어 주는 역할이고, 컴파일러는 자바 실행을 할 때 먼저 잘못된 구분이 있는지를 확인을 하여 '컴파일시점에' 잘못된 구분을 알 수 있으며 주 역할은 바이트 코드로 변경합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

주 차이점은 여러 작업을 할 때 , 컨텍스트 스위칭 비용이 크다 라고 생각합니다. 스레드는 코드, 데이터, 힙 영역을 공유하기 때문에 비용이 낮지만, 프로세스는 전체 다 바꿔가며 일을 합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신은 컴파일러로 부터 자바 언어를 바이트코드로 변경하고, 클래스코드로 변경 되는대, 클래스 로드로 부터 JVM이 실행됩니다. 실행엔진은 변경된 바이트 코드들을 명령어 단위로 읽어서 실행합니다. 런타임 데이터 영역은 힙, 스택, 메소드, Pc register가 있고, 힙 영역은 동적으로 생성된 데이터들을 관리하고 가비지 컬렉터에 의해 메모리 관리가 됩니다. 스택 영역은 메소드 호출 시마다 지역변수, 리턴 값 등을 임시로 저장하고 메소드 수행이 끝나면 삭제합니다. 메소드 영역은 모든 스레드가 공유하는 영역으로서 static, 클래스, 인터페이스 등을 바이트코드로 가지고 있고 PC register는 현재 수행중인 JVM 명령의 주소를 가지고 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

G1GC는 힙 영역을 일정 크기로 나누어 논리적으로 구분하고 있습니다. eden, survivor, old 영역으로 구분되지만, 3개 다 region이 될 수 있습니다. 수행과정은 3가지로 나눌 수 있습니다.Evacuation Pause, Concurrent Cycle, Mixed GC가 있습니다. Evacuation Pause 단계 에서는 eden과 survivor에 있는 유효 객체를 적절한 region으로 카피합니다. Concurrent Cycle에서는 Old 영역을 GC하기 위한 전초 작업이 진행됩니다. MixedGC 단계는 Young영역과 Old 영역을 mix합니다. Old영역을 구분하기 위해서 liveness 로 판단되며, 주로 liveness가 값이 작은것을 GC를 진행하는대, 이유는 GC 과정에서 살아남은 객체는 그대로 사용할 확률이 높아서입니다.

세마포어에 대해서 아는 대로 서술해 주세요.

멀티 프로세스에서 한 자원에 접근을 해야할 떄, 여러 프로세스가 접근하게 되면 문제가 생길 수 있으므로, 여러 프로세스 또는 스레드가 접근하지 못하게 막는것을 세마포어라고 합니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

synchronized로 지정된 임계영역은 한 스레드가 접근하면 lock이 걸림으로서 다른 스레드가 접근할 수 없습니다. 해당 로직이 끝남으로써 lock이 해제됩니다. 여러 접근에 대해 안전하지만, 해당 로직이 빠르게 처리가 되지 않을 시 시스템 성능에 문제가 있을 수 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

GC에 대해 사실 이론적으로만 알지 진짜 어떻게 작동하는지에 대해서 알면 좋을 것 같습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

회사에 문제가 생겼을 때 항상 준비가 되어있어야할 것 같은대, 그런 준비는 어떻게 해야할지 잘 모르겠고, 어려운 것 같은대 부록처럼 강의 끝에 알려주시며 감사 할 것 같습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석에서 가장 흥미로웠던 부분은 다형성과 Collections와 관련된 내용이었습니다. 다형성 덕분에 여러 객체를 하나의 타입으로 관리가 가능해지고 차후에 코드를 보았을 때도 수정 및 관리가 편했습니다. Collections는 특히 람다 및 stream과 같이 사용할 경우 간결하고 직독직해가 편한 코드로 여러 자료구조를 사용 및 변경(map 함수 덕)이 좋았습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

스프링 원서는 자주 보았으나, java 공식 문서를 본 적은 없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식과 컴파일 방식의 차이는 빌드(build) 방식에서 차이가 있습니다. 컴파일 방식은 코드를 먼저 "미리" 다 읽고 변환하여 CPU에 명령을 내립니다. 그래서 컴파일 과정 시간을 제외하고 두 방식의 속도를 비교한다면 컴파일 방식의 실행 속도가 빠르다는 장점을 확인할 수 있습니다.
반면, 인터프리터 언어는 한 줄마다 기계어를 번역하는 과정과 실행이 동시에 이루어 집니다. 그래서 컴파일 방식보다 속도는 느리지만, 수정과 디버깅에 유리합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스와 스레드는 모두 OS의 실행 단위 입니다.
프로세스는 프로그램을 CPU가 실행하는 것을 의미하며, 각각의 프로세스의 접근은 OS의 역할이기에 서로의 메모리를 공유하지 않습니다(ICP는 예외).
쓰레드는 프로세스 내에서 실행되는 것을 의미하며, 프로세스 내에 자원을 공유합니다. 프로세스 내에서 코드 및 자원을 공유함으로써 지연 시간이 최소화되고 처리량이 향상됩니다. 다만 공유 자원을 사용하기에 동기화 문제가 발생합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM 은 Java Virtual Machine 의 약자로 Java 로 작성된 프로그램이 돌아가도록 만들어주는 프로그램입니다. Java 로 작성된 프로그램은 운영체제에 맞는 실행 파일로 컴파일되는 것이 아니라 ".class" 파일로 변환이 됩니다. 변환된 ".class" 파일이 클래스로더에 의해 JVM 메모리에 탑재되어 작동이 됩니다.
JVM 메모리 구조는 메소드, 힙, 스택, PC이 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

"Mark And Sweep Algorithm"
가장 기본적인 알고리즘입니다. root set 으로부터 출발하여, 참조되는 객체들을 마크를 하게 됩니다. 이 단계를 Mark Phase 라고 합니다. 이후에는 마크되지 않은 객체들을 추적하여 삭제를 합니다. 삭제하는 단계를 Sweep Phase 라고 합니다. 메모리가 Fragmentation(단편화)되는 단점이 있습니다. 메모리에서의 단편화는 정렬되지 않은 조각으로 나뉘어져, 절대적인 크기에 단편화들이 섞여 있어 충분한 메모리 할당이 이루어지지 않습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어는 여러개의 스레드가 공유 자원에 접근할 수 있도록 제어하는 동기화 방식입니다. 정수형 변수 S(세마포) 값을 가용한 자원의 수로 초기화하고, 자원에 접근할 때는 S-- 연산을 수행하여 세마포 값을 감소시키고, 자원을 방출할 때는 S++ 연산을 수행하여 세마포 값을 증가시킵니다. 세마포 값이 0이라는 것은 모든 자원이 사용 중임을 의미하고, 이후 자원을 사용하려는 프로세스는 세마포 값이 0보다 커질 때까지 block 됩니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

자바에서 특정 코드(블록)에 대한 동기화를 지원해줍니다. 그 때 사용하는 것이 "synchronized"입니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

자바에 대한 깊은 이해를 할 수 있는 계기를 마련해주면 좋겠습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

백엔드 개발자로서 어느 정도의 이해가 필요한지, 신입임에도 어떠한 것을 공부하고 설명한다면 현직 선배들이 좋아할지 알려주시면 감사합니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

'자바의 정석' 완독한 적 없습니다. 컬렉션 프레임워크에서 LIST와 MAP이 제일 기억에 남습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

10분 이상 살펴본 적은 없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 한줄씩 변환, 컴파일 방식은 한번에 모두 변환합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램이고, 스레드는 프로세스에서 실행됩니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바가상머신. 어디서든 자바를 실행할 수 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

세마포어에 대해서 아는 대로 서술해 주세요.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

어떻게 공부를 해야하는지, 공식문서를 어떻게 찾아서 응용해야 하는지 알고싶어요.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

신입 개발자로서 꼭 알아야하는 내용들이 어떤 것인지 알고싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 신을 완독 했었어요. 별 생각없이 작성하던 메서드들... '시그니처'라는 명칭을 몰랐던 것이 가장 충격이었어요. 항상 지칭할때마다 'xxx 메서드~' 라고만 말했는데 찾아볼 생각도 안했다는 것도 한몫 했었어요. 이런 사소한 것도 기억에 남지만, 가장 재밌게 봤던 부분은 String에 대한 파트였어요. 이전에 봤던 많은 블로그의 글들에서는 String의 '+'은 비효율적이라고만 봤는데, 실제로는 JDK 5 이상 환경에서는 컴파일 시에 StringBuilder로 변환해준다는 내용이었어요.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

String '+' 연산에 대해서 공식 문서에서 확인해보고 싶어서 한참 헤맸던 적이 있어요. JDK 각 버전별 문서를 찾아보니 JDK 5뿐만 아니라, JDK 9, JDK 15에서도 String '+' 연산에 대한 개선점이 계속 발견할 수 있었어요. 공식 문서의 내용을 비교하면서, 실제로 IntelliJ 환경에서 컴파일 / 디컴파일을 해보며 확인해본 경험이 재미있었어요.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 소스 코드를 한 줄씩 해석 후 실행하는 방식이에요. 초기 방식으로 컴파일 방식에 비해 실행 속도가 느리다는 단점이 있어요. 하지만 한 줄씩 해석하다가 에러가 발생하면 바로 코드 수정이 가능해서 편의성은 좋아요.
컴파일 방식은 소스 코드 전체를 해석 후 다른 프로그래밍 언어로 옮기는 방식이에요. 그래서 인터프리터 방식과는 상반되는 점들이 있어요. 한번에 컴파일 하기 때문에 컴파일 시간은 좀 걸리지만 실행 속도는 이미 기계어로 변환되어 있기에 인터프리터 방식에 비해서 빨라요. 그리고 한번에 해석하니 컴파일 후에 알려주기 때문에 수정할 사항이 생기면 시간이 한참 더 걸릴 수 있어서 비교적 편의성이 떨어진다고 해요.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 운영체제로부터 자원을 할당 받아서 프로그램당 1개씩 배정받은 것이고, 스레드는 그 프로세스 내부에서 여러 개가 생성된 것이에요. 프로세스 간에는 컴퓨터 메모리에 각각의 공간을 차지하여 사용하는 것이기에 통신을 위한 별도의 공간을 만들어주지 않는 한 프로세스 간의 자원을 공유하기 힘들지만, 스레드는 프로세스 내부 메모리 공간과 자원을 공유하기에 스레드 간의 통신 부담도 적고 시스템 자원의 소모도 적은 편이에요. 이러한 특징 때문에 여러 자식 프로세스 중 하나가 문제가 발생하더라도 다른 프로세스에 전파가 안되지만, 스레드의 경우에는 하나의 스레드에서 문제가 발생하면 그 스레드가 속한 프로세스가 영향을 받게 되어요.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

간단하게는 자바 소스 코드로 작성된 애플리케이션을 실행하기 위한 가상 머신이에요. 자바는 플랫폼(운영 체제)에 종속적이지 않지만, JVM은 플랫폼에 종속적이라는 특징을 가지고 있어요.
JVM은 Class Loader, Runtime Data Area, Execution Engine, Garbage Collector로 이루어져 있어요.
Class Loader은 컴파일된 .class 파일을 Runtime Data Area의 Method area로 적재시켜요. 로딩된 파일들은 Execution Engine을 통해 명령어 단위로 읽어서 실행되어요. JIT Compiler가 여기에 포함이 되는데, 초기 JVM의 소스 읽는 방식은 Interpreter 방식이었어요. 한 줄씩 해석 후 실행하다보니 느리다는 단점이 있었는데 그것을 해결하기 위한 방식이 JIT Compiler 방식이에요. 모든 코드가 JIT Compiler 방식으로 실행되는 것은 아니고, Interpreter 방식을 사용하다가 일정 기준을 넘어서면 적용되는 식이에요. 그 일정 기준은 '얼마나 같은 코드가 자주 반복되는가'라고 할 수 있어요. 같은 코드가 계속해서 나온다면 기준에 의한 단계가 점차 올라가는데 1~4단계가 있는 것으로 알고 있어요. 4단계에 도달해야 JIT Compiler 방식이 적용된다고 해요.
이렇게 소스 코드가 해석되어서 애플리케이션이 실행된다면 그 때 사용되는 데이터들은 Runtime Data Area 내부에 적재되어요. 이 영역 내부에는 각각 Heap Area, Method Area, Stack Area, PC Register, Native Method Stack이 존재해요. 크게 2개로 구분할 수 있어요. 모든 Thread가 공유해서 사용하는 Heap Area, Method Area와 Thread마다 하나씩 생성되는 Stack Area, PC Register, Native Method Stack으로 공유 여부를 기준으로 나뉘어져요.
전자의 Heap Area의 경우에는 객체들이 올라가기 때문에 GC의 대상이 되어요. 단순히 더 이상 참조되지 않는 객체가 아니라 GC root로부터 도달할 수 없는 객체가 대상이 되어서 메모리를 수거해가요. Method Area는 클래스 필드에 대한 정보, String Contant Pool, final class 등과 같은 정보가 생성되는 영역이에요.
후자의 Stack Area는 지역 변수, 파라미터, 연산에 사용되는 임시 값 등이 생성되는 영역이고, PC Register는 현재 Thread가 실행되는 부분의 주소와 명령을 저장하는 영역이에요. 그리고 Native Method Stack은 자바 이외의 언어로 작성된 소스 코드를 실행할 때 사용되는 영역이에요.
마지막으로 Garbage Collector은 위에서 말한 Heap 영역을 휩쓰는 것으로 GC라고도 불려요. JDK 버전이 올라가면서 여러가지 GC 종류가 생겼고, 아직까지는 default GC로 G1GC가 사용되는 것으로 알고 있어요.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

JDK 9 이후의 default GC인 G1GC는 기존과는 다르게 작동되어요. 기존에는 Heap Area 전체를 훑었다면 G1GC에서는 Region이라는 개념이 도입되었어요. Heap Area를 나누어서 한 칸 한 칸 따로 영역을 나누어 취급하는데 그 단위를 나타내요. 그 중에서 메모리가 가득 찬 Region을 청소하는 식으로 되어서 기존보다 더 효율적으로 신속하게 동작이 가능해졌어요. 그리고 기존의 Mark And Sweep 방식에서 Compaction이라는 작업이 추가로 이루어지는데, 메모리 공간에서 사용되지 않고 있는 공간을 없애기 위해 한 곳으로 몰아서 분산을 제거하는 방식이에요. 그래서 메모리 공간을 더 효율적으로 활용할 수 있게 도와줘요.

세마포어에 대해서 아는 대로 서술해 주세요.

공유 자원에 대한 키워드인데, 그 공유 자원에 대한 접근할 수 있는 프로세스 혹은 스레드의 수를 나타내어 관리하는 기법으로 알고 있어요.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

멀티 쓰레드 환경에서 동시 접근에 대한 안정성을 보장하기 위한 키워드에요. sychronized는 인스턴스 메서드, 코드 블록 각각 적용이 가능해요. 그런데 인스턴스 메서드에 적용할 시에는 그 메서드의 로직 전체 수행 시간동안 락이 걸리게 되므로 성능 저하 문제를 겪을 수 있어요. 그래서 메서드 내부의 특정 코드 블록에만 적용이 가능해요. 이 경우에는 메서드 진입은 여러 스레드들이 진입 가능하지만, 해당 블록을 실행은 하나의 스레드만 가능해요. synchronized와 자바 동시성 예약어에 대해 검색을 해보면 volatile 예약어와 volatile의 문제점에 대한 해결책 중 하나인 Atomic class도 찾아볼 수 있어요. 그리고 Atomic class의 동작 방식인 CAS도 알아볼 수 있어요.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

JVM에 대해서 공부하긴 했지만, 좀 더 상세한 깊은 내용을 공부해보고 싶었어요. 그런데 막상 다른 길로 새어나가서 아직 공부하지 못했어요. 그래서 JVM 내부 동작과 메모리 구조에 대해서 많이 기대되네요. 그리고 스레드는 너무 막연했어서 다른 분들의 생각이 항상 궁금했는데 좋은 기회가 왔는데 잡을 수 있으면 좋겠어요.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

독학을 하다보니 항상 제가 고민한 문제에 대해 다른 사람의 생각이 궁금했는데, 어떻게든 실천 못해본 것이 잘못이었어요. 다른 개발자와의 교류를 늘리고 싶다면 어떠한 방식들이 있는지 궁금해요.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

아뇨

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

java stream 관련 내용이요

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

정확히 모르겟네요

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 프로그램이 운영체제로부터 메모리를 할당받은 인스턴스로 이해하고 있고, 스레드는 그러한 프로세스의 실행단위로 이해하고 있습니다. 프로세스 같은 경우 자원을 프로세스 간 공유 하지 않지만, 스레드 공유하고 있어서 context switching 비용 상대적으로 적게든다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 Java virtual machine으로 java가 OS에 상관없이 실행시켜주는 주체이다. 구조로는 Heap, Stack, Data, Code로 구조가 있고,

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

잘모르겠습니다

세마포어에 대해서 아는 대로 서술해 주세요.

잘모르겠네요!

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

스레드 간의 데이터를 동기화하는 것으로 알고 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

최대한 jvm, gc에 대해 이번 기회에 master 하고 싶습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

잘부탁드립니다!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

아쉽게도 아직 없습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Java를 실행시킬 때 뜨는 문구밖에 본 적이 없습니다...

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 명령어 한 줄을 입력하면 곧바로 실행이 되는 방식으로 알고 있습니다, 컴파일 방식은 잘 모르겠습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

잘 모르겠습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

잘 모르겠습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

잘 모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

Java에 대해서 1도 모르는데.. 조금이라도 알고 싶어서 신청하게 되었습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

강의가 끝난 뒤 '자바 할 줄은 안다.'라고 말하고 싶습니다. 감사합니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

'자바의 정석'을 완독했습니다. 자바의 기본 문법, 예외 처리, 객체지향에 대한 내용이 기억에 남습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Java 공식 문서는 알고리즘을 학습하거나 스프링으로 프로젝트 할 때 자주 살펴봅니다. 특히 자료구조의 상속 구조, 메소드 등에 대해 많이 살펴봅니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 소스코드를 한 줄 씩 읽어가며 바이트코드로 변환합니다. 이는 디버깅이 쉽다는 장점이 있지만 느립니다.
컴파일 방식은 소스 파일을 한번에 컴파일해 프로세서에서 실행될 수 있게 합니다. 이는 속도가 빠르지만 빌드하는데 시간이 오래걸릴 수 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행 중인 프로그램을 의미합니다. 스레드는 프로세스 내에서 실행되는 작은 실행 단위입니다.
프로세스는 각각 독립적으로 실행되고 스레드는 프로세스 내에서 공유되는 자원을 사용합니다.
프로세스는 각각 독립적인 메모리 영역을 가지고 스레드는 스택 메모리를 제외한 영역은 공유합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

VM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신으로, 자바 프로그램을 실행하기 위한 런타임 환경을 제공합니다. JVM은 다음과 같은 메모리 구조를 가집니다.

  • Heap 영역: JVM이 동적으로 할당하는 메모리 영역으로, 객체 인스턴스와 배열 등이 저장됩니다. Heap 영역은 크게 Young, Old, Permanent 영역으로 나뉘며, 각각의 영역은 다른 목적을 가집니다.
  • Non-Heap 영역: JVM이 사용하는 메모리 영역으로, Heap 이외의 메모리 영역입니다. Non-Heap 영역은 Method Area, Native Method Stack, Direct Memory 등으로 나뉩니다.
  • Method Area: 클래스 정보와 static 변수 등이 저장되는 영역입니다.
  • Native Method Stack: 자바 외부에서 실행되는 네이티브 코드의 스택 정보가 저장되는 영역입니다.
  • Direct Memory: NIO(Non-blocking I/O) 기능에서 사용하는 메모리 영역입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어(Semaphore)는 프로세스 동기화를 위한 도구로, 다수의 프로세스 또는 스레드가 공유하는 공유 자원에 대한 접근을 제어하기 위해 사용됩니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

  • 스레드 동기화 기능 중 하나입니다.
  • 메서드에 사용하면, 해당 메서드가 속한 객체의 모든 스레드에서 동기화가 수행됩니다.
  • 스레드 간의 데드락(deadlock) 상황을 방지할 수 있습니다.
  • 성능 저하가 발생할 수 있으므로, 필요한 경우에만 사용해야 합니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

신입 수준에서 java의 내부 구조(gc, jvm 등)에 대해 어디까지 알고있어야 하나요??

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석을 완독한 적 있습니다. 기억에 남는 내용은 어떤 특정부분이 기억에 남는다기 보다 전체적으로 기본적인 내용에 대해 정리해 볼 수 있어 그런 부분들이 기억에 남습니다. 자바라는 언어 대한 기본적인 이론과 돌아가는 구조 같은 기초적인 내용을 알게 되었고 비정공자로써 코드짜는 법만 배웠던 것에 비해 언어 자체에 집중해서 배울 수 있었던 느낌입니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 소스를 한번에 읽는 것이 아니고 바로바로 읽고 실행하고, 컴파일 언어는 한번에 빌드 후에 실행된다.

프로세스와 스레드의 차이점을 서술해 주세요.

모르겠습니다..

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 JAVA를 실행할 수 있도록 만들어주는 가상머신 정도로만 알고 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화시키는 것으로 알고있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

실제적으로 업무를 수행할 때, 이번 교육을 통해 배운 점을 기반으로 업무에 활용할 수 있는 실용적인 부분도 많았으면 좋겠습니다! 업무환경에서 쓰이는 예시를 같이 접할 수 있다면 이해에 큰 도움이 될 것 같습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

비전공자로 학원에서 배운 지식으로 백엔드 개발자로 입사하였는데, 부족한 점을 많이 느끼게 되어 어려움이 많았습니다. 이번 교육을 통해 기본기도 다지고 업무에도 도움이 되고 향후 백엔드 개발자로서 나아가는 커리어에도 도움을 받고 싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 신 이라는 책을 완독했던 기억이 있습니다. 해당 책을 읽으면서, 다른 기본 서적과 달리 jvm에 관해 설명해주시는 부분이 인상깊었습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

java tutorial 문서의 generic 관련 부분을 살펴본 적이 있습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 실행 파일을 생성하지 않고 코드를 한 줄씩 실행하는 반면 컴파일러는 실행 전에 전체 코드를 번역하여 실행 파일을 생성합니다. 인터프리터 방식은 한 줄씩 번역하는 과정에서 오버헤드가 발생해 컴파일 방식보다 느리다는 단점이 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 각각 개별적인 메모리 공간을 사용하는 반면, 스레드는 프로세스 내부에 여러개의 스레드가 존재할 수 있으며, 해당 프로세스에서 동일한 메모리 공간과 리소스를 공유할 수 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 Java 소스 코드를 컴파일 한 형태인 바이트 코드를 실행하는 역할과, 메모리를 동적으로 할당하고, 해제하는 역할을 합니다.
JVM의 메모리 구조는 힙, 스택, 메서드 영역이 있습니다. 힙 영역은 Object가 동적으로 할당되는 메모리 영역입니다. 메소드 영역은 static 변수나 static 메서드, 클래스들을 저장하는 영역입니다. 해당 영역에 저장된 코드들은 Java 프로그램에서 사용되는 모든 쓰레드간에 공유가 가능합니다. 스택 영역은 메서드 호출 시, 각각의 메서드의 호출과 메서드 내부의 지역 변수를 저장하는 영역입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Mark and Sweep 알고리즘에 대해 설명하겠습니다. 해당 알고리즘은 먼저 아직 사용중인 모든 객체를 표시합니다. 그리고, sweep 단계에서 표시되지 않은 객체들을 메모리에서 회수합니다. 그 후, 회수된 메모리들로 인해 메모리에 생긴 빈 공간을 압축하는 과정을 거칩니다.

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어는 공유 자원에 대한 동시 접근으로 인한 문제를 해결하기 위해 사용되는 방법 입니다. 스레드가 공유 자원에 접근하려 할 때 세마포어 획득을 시도합니다. 세마포어의 카운터가 0보다 크면 스레드가 계속 진행되고 스레드의 작업이 계속 진행됩니다. 반면에 카운터가 0이면 해당 공유 자원이 현재 다른 스레드에 의해 사용중이니, 세마포어 획득을 시도하려는 스레드는 세마포어가 사용가능해질 때까지 대기 상태가 됩니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

자바의 synchronized 키워드는 자바에서 제공하는 공유 자원에 대해 여러 쓰레드가 동시에 접근하지 못하도록 도와주는 키워드 입니다. synchronized 키워드를 메서드에 선언하게 되면 해당 메서드를 한번에 한 쓰레드만 접근해 실행할 수 있게 됩니다. synchronized 키워드를 잠금 객체에 선언하게 되면 메서드에서 race condition이 발생할만한 부분에만, 한번에 한 쓰레드가 접근할 수 있게 함으로서, 좀 더 세밀하게 동기화할 부분을 제어할 수 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

동시성 상황이나 JVM 메모리 구조를 개인 프로젝트에 적용하는 법이나 실제 case study를 통해 학습해보고 싶습니다

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석을 읽고 있는 중입니다. stream연산에 지연된 연산이라는 내용 중에 stream에서distinct()같은 중간 연산은
최종 연산이 수행 되어야 중간 연산이 가능하다는 내용이 기억납니다.
Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?
처음 자바 공부 할 때 잠깐 둘러본 이후로 없습니다..

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 코드를 한줄한줄 컴파일 하여 즉시 실행하는 방식입니다.
컴파일 방식은 프로그램 전체를 컴파일 하여 실행 가능한 프로그램으로 만듭니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 메모리에서 실제로 실행되어 작업 중인 프로그램입니다. 프로세스는 하나 이상의 스레드를 가지게 되는데 이 프로세스에서 작업 되는 여러 갈래의 흐름을 스레드라고 할 수 있습니다. 하나의 프로세스 안에서는 여러개의 작업들이 동시에 진행되는데 이를 멀티 스레드라고 합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JavaVirtualMachine의 줄임말로 os에 상관없이 CPU가 java를 인식 할 수 있게 하는 가상의 컴퓨터 입니다.
.java 파일은 java compiler가 jvm이 읽을 수 있는 .class 파일로 변환하고 .class 파일을 jit compiler 를 거쳐 기계어로 변환됩니다.
jvm 에서 가비지 콜렉터는 사용되지 않는 객체를 찾아 메모리에서 삭제합니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

jvm의 heap 영역에서 할당된 메모리 중 사용되지 않는 객체를 찾아 주기적으로 제거하는 프로세스입니다.

세마포어에 대해서 아는 대로 서술해 주세요.

다중 프로세스 환경에서 스레드의 동기화. 싱크로나이즈드의 lock과 비슷하나, 카운트 하는 방식은 반대입니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

멀티 스레드 환경에서 스레드가 동작할 때 스레드가 각각의 메서드를 실행 하면 lock을 얻고 해당 메서드가 종료되면 다시 lock을 반환하여 현재 데이터를 사용하고 있는 해당 스레드를 제외하고 나머지 스레드들은 데이터에 접근 할 수 없도록 막습니다. synchronized를 남발하면 병목 현상이 일어나 성능에 좋지 않은 영향을 미치기 때문에 적재적소에 synchronized를 사용 할 수 있다면 빠르고 안전한 서비스가 될 수 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

잘 부탁 드립니다 :)

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

완독한 적은 없고 너무 오래 전에 읽었어서 책 내용이 기억 나지 않습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

가장 최근에 살펴본 내용은 Spring Security 관련 하여 살펴보았습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 한줄씩 읽어가면서 실행하는 방식이고 컴파일 방식은 컴퓨터가 이해할 수 있는 언어로 바꾸고 나서 실행하는 방식입니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 프로그램이 실행되어 메모리에 올라온 것이고 스레드는 프로세스가 프로그램을 구동하기 위해 필요한 메모리 영역입니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바 가상 머신이고 메모리 구조는 스택영역, 힙영역 등이 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

GC 알고리즘은 잘 모르지만 자주 사용되지 않는 메모리부터 비우는 것으로 알고 있습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동시성 문제가 발생할 경우 문제가 생기는 것을 대비하여 한번에 한 스레드에서 접근할 수 있도록 하는 키워드입니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

강의 커리큘럼이 전부 다 제가 알아야 하고 알고 싶은 내용들이어서 신청하게 되었습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

SI회사거나 온보딩이 없는 중소기업을 다니는 경우 이렇다할 교육을 받지 못하고 개발 다운 개발을 하지 못하는 느낌을 받는데 서비스 플랫폼 회사를 가려면 어느 정도 알아야하고 할 수 있어야 하는지 고민이고 궁금합니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

'윤성우의 열혈 Java 프로그래밍' 를 완독했었습니다. 파이썬을 사용하다가 자바로 넘어와서 제네릭, 와일드카드 등 타입을 통해 개발 생산성을 높히는 것과 상속, 다형성의 내용이 흥미로웠습니다. 또 다양한 컬렉션의 지원이 인상깊었습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

자세히 들여다본적은 없으나, 간혹 자바에서 제공하는 api에 대한 설명을 보기위해 살펴보곤 합니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

컴파일 방식은 컴파일러에 의해 소스 코드 전체가 컴퓨터가 실행하기 좋은 저급 언어로 변환시키는 방식입니다. 대표적으로는 C, C++ 이 있습니다. 인터프리터 방식은 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 방식입니다. 현대의 많은 프로그래밍 언어 중에는 컴파일 방식과 인터프리터 방식의 경계가 모호한 경우가 많은데, Java 의 경우 저급 언어가 되는 과정에서 컴파일과 인터프리트 방식을 함께 수행합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 보조기억장치에 저장된 프로그램을 메모리에 적재해 실행한 것 입니다. 스레드는 프로세스를 구성하는 실행의 흐름단위입니다. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며 하나의 프로세스에서 여러 부분을 동시에 실행할 수 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

  • JVM 정의: Java Virtual Machine 의 줄임말로 OS에 종속받지 않고 Java 를 실행시켜줍니다. Java 소스코드 (.java) 는 CPU가 인식하지 못 하기 때문에 저급언어로 컴파일 해주어야 하는데 Java 는 JVM 을 거쳐서 OS에 도달하기 때문에 바로 저급언어로 컴파일되지 않고 JVM이 인식할 수 있는 Java bytecode(.class) 로 변환됩니다.
  • Method(Static) 영역
    • JVM이 실행되면서 생성
    • Class 정보, Static 변수 정보 등이 저장
    • 모든 스레드에서 공유
  • Heap 영역
    • new 연산자로 생성된 객체, Array 등 동적으로 생성된 데이터가 저장
    • Garbage Collector 가 관리
    • 모든 스레드가 공유
  • Stack 영역
    • 지역변수, 메소드의 매개변수 등이 저장되는 공간
    • 각각 스레드마다 존재
  • PC Register: 스레드가 실행하는 위치를 저장하는 역할
  • Native Method Stack: Java 가 아닌 다른 언어 (C, C++) 로 구성된 메소드 실행이 필요할 때 사용되는 공간

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Java GC 알고리즘은 이전에 훑어보듯 공부했어서 자세히는 기억나지 않고 가장 간단한 'Serial GC' 만 조금 기억납니다. Old 영역에서 mark-sweep-compact 알고리즘을 통해 살아 있는 객체를 식별(mark)하고 살아있는 객체만 남깁니다(sweep). 이후 각 객체들이 연속되게 쌓이도록 힙을 앞 부분부터 채웁니다.

세마포어에 대해서 아는 대로 서술해 주세요.

동기화를 이루기 위한 도구로 동기화란 임계 구현에 특정 개수의 프로세스만 진입하게 하고, 올바른 실행순서를 보장하는 것입니다. 뮤텍스락, 이진 세마포어와 다르게 카운팅 세마포어는 여러 공유 자원이 있는 상황에서도 적용이 가능합니다. busy waiting 문제가 발생하지 않도록 사용할 수 있는 자원이 없을 경우 해당 프로세스는 대기 상태가 되도록 합니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

  • 멀티스레드 환경에서 동기화를 제공하기 위한 기능
  • 여러 스레드가 공유하는 데이터 또는 코드 영역에 동시 엑세스 제어
  • 상호 베제 매커니즘을 사용하기 때문에 성능저하의 원인이 될 수 있음
  • 모니터 방식을 사용

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

그저 자바를 사용할 때는 보지 못 했던 자바의 내부 동작 방식 등을 이해하고 싶었기 때문에 전반적인 내용이 모두 기대 됩니다. 특히 Spring Batch 의 AbstractPagingItemReader 를 사용하기 위해서 살펴볼 때 synchronized 와 volatile 을 통해서 동기화를 구현한 것을 보았었는데, 동시성 처리와 스레드 동기화에 대해서 더 깊이 있기 이해하고 싶다고 생각했어서 해당 내용이 더욱 기대됩니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

사실 개발을 하면서 자바 내부적인 깊이있는 이해나 고민을 해본 적은 없었습니다. 특정 기술을 사용할 때 얼마나 깊이 있게 이해해야 하는지, 이런 깊이 있는 이해가 개발할 때 얼마나 사용되어야 하는지 아직 잘 모르겠습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

완독한적은 없으며 부분적으로 필요한 부분만 찾아서 습득했습니다.
챕터가끝나면 확인문제가 개념이해가 도움이 됐던걸로기억합니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 소스 코드를 한 줄씩 읽어 직접 실행시키는 방식으로 예시로는 Python 있습니다.
컴파일 방식은 소스 코드를 일괄적으로 기계어로 변환하여 실행하는 방식입니다
.java > .class

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 운영체제로부터 할당받아 실행되는 프로그램의 인스턴스이며 스레드는 프로세스안에서 실행되는 작은 실행 단위입니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM(Java Virtual Machine)은 Java 언어로 작성된 코드(.class 파일)를 실행하기 위한 가상 머신입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

잘모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

멀티스레드환경에서 동기화 문제를 해결하기위한 키워드로 알고 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

무지성코드로인하여 발생할수있는 문제와 좋은 코드를 비교하여 더 쉽게 이해할수있으면 좋을것같습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

SI 프리랜서로 일을하고있다보니 제한적인 환경에서만 근무하는경우가 대부분입니다.
개인적으로 공부하는걸로도 서비스 회사가 요구하는것만큼 지식을 갖출 수 있을까요?

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

없습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 코드 한 줄씩 기계어로 바꾸며 실행하고, 컴파일 방식은 모든 코드를 미리 기계어로 바꾸며 실행합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스 내에서 스레드가 실행해되는 것으로 알고 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신으로만 알고 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화 하는 작업으로 알고 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

GC와 동시성 처리 부분을 거의 모르는 상태라 이 부분이 기대됩니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

이제 곧 학교를 졸업해 신입 개발자를 준비해야 하는데, 준비 과정에서 많은 조언들과 꿀팁을 얻고 싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

이것이 자바다
동기화와 비동기화 처리에 대한 부분에 대해서 배운 부분이있음. 기존 대학교에서 배우던 C언어와 C++는 자바와 성격이 다르다는 것을 책을 보면서 많이 느낌.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 소스를 바로 실행, 컴파일은 사용하는 언어를 바꿔서 소스를 실행

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램, 스레드는 프로세스 안에서 실행됨.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 버츄얼 머신, 즉 자바 가상 기계이다. 자바를 실행하기 위해서는 자바 가상 기계를 사용하여지 컴파일이 가능함.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

가비지 콜렉터, 즉 자바에서는 유효하지 않는 메모리를 자동적으로 처리해주는 알고리즘이라고 생각함.

세마포어에 대해서 아는 대로 서술해 주세요.

문맥 교환이 이루어지면서 데이터의 수정이 이상하게 이뤄질 수 있는데, 이를 막는 방법중 하나라고 알고있음. 임계구역에는 하나의 데이터만 들어가게 만드는 방법이라고 봄.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

현재 쓰는 스레드만 사용하고 다른 스레드의 사용을 막는 것

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

기대하는 내용은 배웠던 자바를 상기시키는 계기가 되지 않을까 생각이든다.
'이것이 자바다'를 완독했지만 아직까지 부족한 점이 너무 많다고 생각이 들었다.
강의를 듣고 나혼자 프로젝트를 만들어 배포까지 해보면 어떨까? 라는 생각이 든다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

지금 대학교 3학년 1학기를 다니고 있는데, 취업에 대해 너무 많은 고민을 가지고 있음. 여러가지 공모전 또는 이런 이벤트를 참여해 내 실력을 좀 더 올리고 싶은 마음이 있음. 아직은 내가 취업을 하기에는 많이 부끄러운 실력이라 점점 내 실력을 올리는게 중요하다고 생각함.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

이것이 자바다 서적을 완독했습니다.
멀티 스레드, 참조 타입 특성, 메모리 구조, 람다식 등 흥미로운 내용은 정말 많았지만 이중에서도 멀티 스레드 챕터 내용이 기억에 남습니다.
개발을 Javascript로 시작했기에 싱글 스레드 언어의 환경에서 개발하다 멀티 스레드 환경에서의 고려할 사항들은 더욱 프로페셔널하게 느껴져서 더 재미있게 공부했던 챕터라고 할 수 있습니다.
내용중에서 특히 스레드 풀에 관련된 내용이 더욱 기억에 남습니다. 병렬 작업 처리가 많아지면 스레드의 개수가 증가해서 메모리 사용량이 늘어나게 되는데, 이에 따라 애플리케이션의 성능 또한 급격히 떨어집니다.
이런 병렬 처리 작업을 제한하는 것이 스레드 풀인데 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐에 들어오는 작업들을 스레드가 맡아 처리하는 방식입니다. 제한된 스레드 개수로 애플리케이션에 부하를 방지할 수 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

공식 문서는 아직 살펴보지 못했습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 코드를 한 줄씩 읽고 해석하면서 동작합니다. 즉 런타임 환경에서 코드를 해석합니다. 그래서 디버깅과 테스트가 상대적으로 쉬우나 실행 속도가 느리다는 단점이 있습니다.
컴파일 방식은 컴파일러를 활용해 코드가 실행되기 이전 모든 코드를 해석합니다. 컴파일 과정에서 해석된 실행 파일은 원시 코드보다 빠르지만 디버깅과 테스트 과정에서 번거롭다는 단점이 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

컴퓨터에서 실행되는 작업의 단위입니다.
하나의 프로세스는 독립된 메모리 공간을 가지며, 이 메모리 공간에는 스택, 힙 등 다양한 영역이 존재합니다. 그리고 독립된다는 특성 때문에 프로세스가 죽더라도 다른 프로세스에 영향을 끼치지 않습니다.
스레드는 프로세스 내에서 실행되는 단위입니다. 프로세스의 자원을 공유하며, 프로세스 내에서 동시에 실행될 수 있습니다. 다만 멀티 스레드의 경우 동기화와 상호작용을 관리하는 측면에서 복잡도가 증가합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바를 실행하기 위한 가상 컴퓨터 정도로 정의할 수 있을 것 같습니다.
자바는 바이트코드로 컴파일되는데 이런 바이트 코드를 JVM을 통해 실행하고, 운영체제와 같이 다양한 환경에서도 프로그램이 동작할 수 있는 역할을 수행합니다.
JVM은 크게 메소드 영역, 힙 영역, 스택으로 분류됩니다.
메소드 영역은 클래스와 인터페이스의 상수, 메소드, 필드 등의 정보를 가지고 있습니다.
힙 영역은 객체들의 인스턴스나 배열 정보를 가지고 있습니다. GC에 의해 관리되는 여역입니다.
스택 영역은 메소드 호출, 지역 변수, 매개변수 등을 저장하며 메소드의 호출과 반환에 따라 동적으로 변합니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

GC 알고리즘까지 학습을 하지 못했습니다.
찾아보니 표시 삭제, 복사, 마크 앤 컴팩트 알고리즘이 있다고 하네요.

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어도 학습하지 못했습니다.
찾아보니 동기화 기법 중 하나로 정의되네요.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화는 멀티 스레드 환경에서 동시성을 유지시켜주는 역할을 수행합니다.
즉 synchronized가 적용된 메소드를 호출할 경우 해당 객체는 다른 스레드에서 접근을 하지 못하도록 잠근다 정도로 알고 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

자바를 공부하면서 제일 궁금했고, 또 알고 싶었던 내용이 GC의 동작과 동시성 처리 이슈인데 강의 커리큘럼에서 모든 내용을 제공해주기 때문에 현 커리큘럼도 매우 만족합니다. 만약 추가적인 내용이 들어간다면 JPA가 포함되면 좋겠습니다!

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

혼자 시작한 자바 언어이기에 학습 방법과 알아야 할 필수 지식들에 대한 방향성을 잡기 힘들었는데, 이번 프리온보딩 챌린지를 통해 자바에서 발생할 수 있는 이슈들과 확실하게 알고 넘어가야 하는 동작 원리 등을 체득하고 싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

개발을 시작할 때 학원에서 준 책을 통해 전체를 세세하게 읽지는 못했지만 모르는 부분은 그냥 읽으며 1회독 한적 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Lambda에 관해서 공식 문서를 본 적이 있습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 코드를 한 줄씩 읽어서 즉시 실행하는 방식입니다. 실행하기 전 실행에 필요한 작업을 수행하고 코드를 해석해 실행합니다. 실행 속도는 컴파일 방식에 비해 느릴 수 있습니다. 컴파일 방식은 코드를 전체적으로 컴파일하여 기계어로 변환하는 과정을 거친 후 실행 파일을 생성해 실행합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램을 의미합니다. 스레드는 실행 제어만 분리한 것을 의미합니다. 프로세스는 운영체제로부터 자원을 할당받지만, 스레드는 프로세스로부터 자원을 할당받고, 프로세스의 코드/데이터/힙영역을 공유하기 때문에 좀 더 효율적으로 통신할 수 있습니다. 또한 컨텍스트 스위칭도 캐시 메모리를 비우지 않아도 되는 스레드쪽이 빠릅니다. 그리고, 스레드는 자원 공유로 인해 문제가 발생할 수 있으니 이를 염두에 둔 프로그래밍을 해야합니다. 한 프로세스 안에 여러개의 스레드가 생성될 수 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신의 약자를 따서 줄여 부르는 용어로 JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것입니다. 메모리 관리(GC)을 수행하며 스택기반의 가상머신입니다. JVM의 구조는 Class Loader, Execution engine, Runtime Data Area, JNI, Native Method Library로 이루어져 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

GC는 힙 영역에서 사용하지 않는 객체들을 제거하는 작업을 총칭합니다. GC 알고리즘은 잘 모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

Java에서 synchronized는 멀티스레드 환경에서 동기화를 위해 사용되는 기능입니다. 스레드 간의 순차적인 실행을 보장하여 데이터의 일관성과 안정성을 유지하기 위함입니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

가장 기초적인 Java의 내부 원리와 기능들에 대해 알 기회가 없었는데 이번 기회를 통해 자세히 알고 싶습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

주니어 개발자들에게 하고 싶은 조언이 있으시다면 조언을 듣고 싶습니다. 방향성도 같이 제시해 주시면 좋겠습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바를 처음 시작하게 된 2022년에 자바의 정석을 읽으면서 시작하였는데 어렵게 느끼며 보았으며 객체지향의 의미를 공부하며 지식을 늘리고 좋아하던 기억이 납니다

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

공식문서를 자세히 살펴본 적은 없지만 가끔 메서드들의 파라미터, 결과값, 역할 등의 의미를 찾아본 적은 있습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 코드를 한줄씩 해석하고 컴파일은 컴파일러를 이용해서 전체 프로그램 코드를 스캔하고 코드 전체를 재구성하는 방식입니다

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램을 말하며, 스레드는 프로세스안에서 나뉘어 지는 흐름입니다. 프로세스는 자신만의 자원을 갖지만 스레드는 자원을 공유합니다

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바 가상머신으로서 자바 프로그램을 컴파일하고 바이트코드를 실행시켜주는 가상 머신이다. 자바 소스코드를 javac.exe 자바 컴파일러가 바이트코드로 컴파일하고 클래스로더가 클래스를 가져와서 Runtime Data Area에 올리고, 로딩된 바이트코드를 실행 엔진을 통해 해석됩니다

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

기본적인 serial gc는 mark-sweep-compaction 알고리즘으로서 객체들의 사용유무를 식별하고 압축하여서 쓰이지 않는 객체는 제거합니다

세마포어에 대해서 아는 대로 서술해 주세요.

자원들이 서로 충돌이 일어나는 문제를 해결하기 위해 생긴 해결방법으로 공유되는 자원에 제한된 개수의 프로세스와 스레드만 접근이 가능하게 한 방법으로 알고있습니다

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

자바의 synchronized는 멀티스레드 환경에서 여러 스레드가 하나의 공유자원에 동시에 접근하지 못하도록 막는것입니다

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

코틀린과 자바로 개발을 하고 있는데 자바의 지식을 기반부터 가르쳐주시면 잘 공부해서 백엔드 개발자로서 더 성장하고 싶습니다

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

신입 개발자가 알면 좋은 꿀팁같은 것을 알려주시면 도움이 많이 될것 같습니다

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석은 시간이 날때마다 읽고 있으며 두 번 정도 완독한 적이 있습니다. 자바와 스프링을 이용한 프로젝트를 여러 개 진행하면서 스트레스를 많이 받았던 부분은 다름 아닌 NPE 에러였습니다. null 개념의 창시자도 null 참조를 만든 것이 10억불 짜리 실수라고 인정한 이 부분을 저도 코드를 짜면서 체감할 수 있었습니다 . 이를 해결하기 위해서 java8 이후부터 Null이 아닌 값을 저장하는 컨테이너 클래스인 Optional이 추가되었는데 아주 유용하게 사용을 하고 있습니다. 처음에는 null이 나온 경우를 if문을 통해서 예외처리를 해주었기에 코드가 지저분해지고 유지보수성이 떨어지는 경우가 많았는데 자바의 정석에서 Optional을 알게 된 이후 훨씬 깔끔하게 NPE 문제를 처리할 수 있었습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

예전에는 자바에 대한 좀 더 깊은 내용을 다룰 때는 자바 공식 문서를 많이 살펴 보았으나 요즘은 ChatGPT에게 많이 물어보고 있습니다 ㅎㅎ

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식과 컴파일 방식의 차이점을 알기 위해서는 우선 빌드 과정을 먼저 이해 해야합니다. 빌드(build)는 컴퓨터가 이해할 수 있는 실행 가능한 파일로 내가 작성한 소스코드를 변환하는 과정입니다. 특정 언어로 작성한 소스 코드를 컴퓨터가 그대로 이해하는 것이 불가능하기 떄문에 CPU가 읽을 수 있는 기계어로 바꾸는 작업입니다. 여기 빌드를 하는 방식에서 인터프리터 방식과 컴파일 방식에서 차이점이 생깁니다. 컴파일 방식은 소스 코드 전체를 미리 읽고 변환하여 CPU에게 명령을 내리는 방식으로 미리 번역을 다 해두기 때문에 실행 속도가 빠르다는 장점이 있습니다. 한편, 인터프리터 방식은 한줄 한줄 번역과 실행이 동시에 이루어집니다. 그래서 컴파일 언어에 비해 속도가 좀 느린 편이지만 컴파일 과정 없이 바로 실행하기 때문에 수정, 디버깅에 유리한 측면이 있고 각 플랫폼에 지원하는 인터프리터만 있다면 실행 가능하기 때문에 플랫폼에 독립적입니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스와 쓰레드는 모두 운영 체제에서 실행되는 실행 단위입니다. 프로세스는 실행되는 프로그램의 인스턴스입니다. 각 프로세스는 운영 체제로부터 할당된 자체 메모리 공간과 자원(파일, 소켓 등)이 있습니다. 각 프로세스는 독립적인 메모리 공간을 가지고 있기 때문 프로세스 간에는 데이터를 공유할 수 없습니다.
쓰레드는 프로세스 내에서 실행되는 경량화된 프로세스입니다. 쓰레드는 프로세스와 달리 자체적인 메모리 공간을 가지지 않고, 프로세스의 자원을 공유합니다. 이 공유 메모리는 다수의 쓰레드가 동시에 접근할 수 있기 때문에 동기화 문제가 발생할 수 있습니다. 쓰레드는 경량화되어 있기 때문에 프로세스 내에서 코드 및 자원을 공유함으로써 지연 시간을 최소화하고 처리량을 향상시킵니다. 또한 이벤트 기반 프로그래밍을 지원하기 위해 병렬적으로 작동하는 여러 개의 쓰레드를 사용합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM(Java Virtual Machine)은 자바 프로그램을 실행하기 위한 가상 머신으로 컴파일러에 의해 변환된 바이트 코드를 실행합니다. JVM은 하드웨어와 운영체제 사이에서 동작하며, 하드웨어와 운영체제에 종속이지 않기 때문에 자바의 이식성을 높여주는 개념입니다. JVM은 메모리를 효율적으로 관리하기 위해서 메모리 구조를 크게 메소드 영역, 힙 영역, JVM 스택 영역, PC 네 가지 영역으로 나누어 관리합니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

java의 가장 대표적인 GC 알고리즘은 Generational Garbage Collection 입니다. 이 알고리즘은 객체들의 수명과 관련된 경험적인 가정에 기반하여 메모리를 효율적으로 관리하는 방법입니다. 이 가정의 핵심은 대부분의 객체가 생성된 직후에 곧 삭제되며(짧은 생존 기간), 이와 대조적으로 객체 중 일부는 오랫동안 메모리에 유지된다는 것입니다(긴 생존 기간). 그래서 이 알고리즘은 객체들의 생존 기간에 따라 메모리 영역을 크게 young generation 영역과 Old Generation 영역으로 나누어 관리하게 됩니다. 이론적으로 대부분의 객체들이 Young 영역에서 처리되고, Old 영역에서는 GC가 거의 발생하지 않도록 합니다.

세마포어에 대해서 아는 대로 서술해 주세요.

Java의 세마포어(Semaphore)는 동시성 제어를 위한 기본 동기화 프리미티브 중 하나로, 여러 스레드가 공유 자원에 접근하는 것을 제한하거나 제어하는 데 사용됩니다. 세마포어는 동시에 허용되는 스레드의 수를 한정하는 카운터 변수를 가지고 있으며, 이 카운터를 기반으로 작동합니다.세마포어는 상호배제(Mutual Exclusion)를 구현하기 위해 사용될 수 있으며, 동시에 진행되는 스레드의 수를 제어하는 데 효과적입니다. 분산 시스템 또는 스레드 환경에서의 비동기 프로그래밍과 같은 복잡한 자원 조정 문제를 해결하기 위한 간편한 방법을 제공합니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

java에서는 특정 코드 블록만 동기화를 적용하기 위해 synchronized 키워드를 사용합니다. 괄호 안에 동기화에 사용할 객체인 모니터 객체 또는 락을 명시하고, 해당 블록 안에 코드를 넣습니다. 락을 확보한 스레드만 해당 블록 안의 코드를 실행할 수 있습니다. synchronized를 사용하면 동시성 문제를 해결하여 데이터 왜곡을 방지하며 코드가 직관적이고 간결하여 보기가 편합니다. 그러나 synchronized 영역에서는 스레드의 우선순위와 관계없이 락이 해제되길 기다려야한다는 단점도 있습니다. 그래서 상황에 따라 Java의 synchronized를 적절하게 사용하여 동시성 문제를 해결하고, 복잡한 환경에서의 성능 저하를 최소화하는 방법을 고려해야 합니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

java에 대한 더욱 수준 높은 컨텐츠를 다뤘으면 좋겠습니다. 기본적인 문법 말고 java의 동작원리 등과 같은 언어에 대한 한 층 더 깊은 이해를 통해서 더 나은 개발자가 되고 싶습니다. 한발 더 나아가 면접에 자주 나오는 부분도 함께 준비하면 더 좋을 것 같습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

현업에서의 개발은 어떤 식으로 이루어지고 있는지 더욱 알고 싶습니다. 백엔드 개발자가 현업에서 일할 때 어느 정도의 지식 수준까지 공부해야 하는지 공부에 대한 범위를 명시해주면 더욱 좋을 것 같습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

generic, wildcard, stream, thread, lambda expression, 등등 그때 당시에 뭔말인지 몰랐던것들이 많은데 이번 기회에 잘 알고 싶습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

있던것 같은데 어느 내용인지는 잘 모르겠어요.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

컴파일 방식은 정적 타임언어에 쓰이고 인터프리터는 동적 타임 언어에 쓰입니다.
컴파일을 하면 코드를 jvm이 읽을 수 있는 바이트코드로 문법상 오류가 없다면 translate해 줍니다.
이렇게 컴파일된 코드를 jvm이 인터프리터 방식으로 바이트코드를 메모리에 한줄한줄 올려서 실행하게 되는걸로 알고 있습니다.
즉 자바는 컴파일 방식이기도 하면서 인터프리터 방식이기도 하다고 알고 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 프로그램이 메모리에 올라와 있는 상태를 말하고, 메모리에는 코드 데이터 스택 등 여러 의미 단위로 나뉘어 있습니다.
자바의 경우에는 메소드 영역 (runtime constant pool), 힙 영역, 스택 영역, PC register, native method로 나뉘어 있습니다.
하나의 프로세스는 메소드 영역, 힙 영역, native method영역을 공유하고 하나 이상의 쓰레드를 가집니다.
쓰레드는 일의 흐름의 단위로써 독립적인 스택 영역과 PC register영역을 가집니다.
예를들어 워드프로세스라는 프로그램을 실행시켰을때 처음에는 하나의 프로세스와 하나의 스레드를 가지겠지만,
하나의 창을 더 띄우면 또 새로운 프로세스를 띄우기 보다는 하나의 쓰레드를 프로세스에 추가시켜서 효율적으로 메모리 관리를 하고,
스레드간 컨텍스트 스위칭에서 더욱 이점을 가집니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 java의 바이트코드를 읽고 실행하는, 운영체제 위에 올라가는 또다른 프로세스입니다.
컴파일된 .class 파일을 로더로 로드해서 runtime memory area에 올려놓고, JIT같은 interpreter로 한줄한줄 실행시켜나갑니다.
바이트코드를 실행시키기 위해서 운영체제와 소통을 하는 역할로 보면 될것 같습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다 ㅠㅠ

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어는 멀티프로세서(꼭 멀티일 필요는 없음)환경에서 race condition을 극복하려 하는 방법입니다.
가용자원의 갯수를 표현하여 그 갯수가 0이 되면 기다리게 하는 로직으로 이해하면 편합니다.
특히 가용갯수가 한개일 경우엔 binary semaphore 혹은 mutax라고 하고, 이 경우는 그 자원에 lock을 거는 것으로 생각하면 됩니다.
이 lock을 거는 방법은 하드웨어적으로 하는 방법이 있고 프로그래밍적으로 Peterson's algorithm이란 방법으로도 할 수 있습니다.
이렇게 해서 자원에 동시접근을 했을 때도 동시성 문제를 해결할 수 있습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

race condition때 lock을 거는 것으로 알고있습니다. 동시성을 가장 빡빡하게 보장하는 방법이기 때문에, 그만큼 속도 효율이 안좋은것으로 알고 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

위에서 나온것들만 다 배워도 좋을것 같습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

무료 강의 감사합니다. 잘 듣고 더 좋은 개발자가 되겠습니다!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석 1,2를 n회독 하며 공부했습니다. 객체 지향 프로그래밍의 특성인 다형성, 캡슐화, 추상화의 개념을 이해하는 데에 도움이 되었습니다. 비록 입문서이지만 n회독을 통해 자바 언어에 대한 이해가 더욱 깊어지는 것을 경험했습니다. 이후 를 읽으며, 객체 간의 결합도는 낮추고 유연하고 확장성있는 코드를 작성하기 위해 노력하고 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

최근에는 Java Concurrency 에 관련된 내용을 살펴봤습니다. Synchronized Collection 과 Concurrent Collection 의 특징에 대해서 살펴보았습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 소스 코드를 한 줄씩(one statement) 해석하지만, 컴파일러는 전체 프로그램 코드(entire program code)를 스캔하고 코드 전체를 통째로 목적코드로 한번에 변환 시킵니다.

자바는 컴파일과 인터프리터 방식 둘 다 병행하여 사용합니다. 자바 컴파일러가 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일하고, 자바 인터프리터는 바이트 코드를 기계어가 이해할 수 있는 기계코드로 변환(convert)하거나 번역(translate)합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스(process) 란 운영체제에서 실행 중인 하나의 어플리케이션을 의미합니다. 스레드(thread)란 프로세스(process) 내에서 실제로 작업을 수행하는 주체를 의미합니다. 모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행하고, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 합니다. 하나의 프로세스 내의 각각의 스레드는 데이터와 메모리 등의 자원을 공유한다는 특징이 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM 은 자바 프로그램이 어떠한 환경에서도 동작할 수 있도록 하는(platform-independent) Virtual Machine입니다. 즉, JVM 의 주요 기능은 1) 자바 프로그램이 어떤 환경에서도 잘 동작할 수 있도록 하는 것, 2) 자바 프로그램 실행을 위해 메모리를 관리하고 최적화하는 것(Automatic memory management)으로 정리할 수 있습니다.

JVM 메모리 구조는 크게 5가지로 나뉩니다.

  • Shared Data Areas : Method area, Heap area
  • Per-thread Data Areas (store specific data for each thread) : Stack area, PC Register, Native Method stack
  • JVM은 GC 를 통해 메모리를 자동적으로 관리하는데, 이 때 Heap 메모리 영역에서 참조(레퍼런스)가 없는 객체들은 GC 과정을 통해 Heap 메모리에서 제거하는 것입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

JVM이 GC 를 통해 메모리를 자동으로 관리해주는 것은 개발자 입장에서 상당한 메리트입니다. GC 의 동작 방식을 살펴보면, 기본적으로 2가지 단계, Stop The World 와 Mark and Sweep 단계를 따르게 됩니다. 여기서 문제가 발생하는데, Stop The World 과정에 의해 애플리케이션이 중지된다는 것입니다. Heap 의 사이즈가 커지면서 GC 과정에서 애플리케이션의 지연(suspend) 현상이 두드러지게 되었고, 이러한 문제를 해결하기 위해 다양한 GC 알고리즘이 등장하였습니다.

  • Serial GC : 서버의 CPU 코어가 1개일 때 사용하기 위해 개발되었으며, 모든 가비지 컬렉션 일을 처리하기 위해 1개의 쓰레드만을 이용한다.
  • Parallel GC: 여러개의 쓰레드를 통해 parallel하게 GC를 수행한다.
  • CMS GC : Parallel GC 와 마찬가지로 여러 개의 쓰레드를 이용한다. 그러나, 기존의 Serial GC, Parallel GC 와 다르게 Mark Sweep 알고리즘을 Concurrent 하게 수행한다.
  • Garbage First(G1) GC: 기존 다른 GC 알고리즘은 모든 Heap 영역에서 GC가 수행되었으며, 그에 따라 처리 시간이 상당히 오래 걸렸다. 그러나, G1 GC 의 핵심은 Heap 을 동일한 크기의 Region으로 나누고, 가비지가 많은 Region 에 대해 우선적으로 GC를 수행하는 것이다. 이러한 구조는 당연히 어떠한 GC 방식보다 처리속도가 빠르기 때문에 Java 9 부터는 이 방식을 기본 가비지 컬렉터(Default Garbage Collector)로 사용하게 되었다.

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어란, 멀티프로그래밍 환경에서 다수의 프로세스나 스레드가 n개의 공유자원에 대한 접근을 제한하는 방법으로 사용되는 동기화 방법입니다. Synchronized 의 경우 오직 하나의 스레드만 수행이 가능하다면, 세마포어는 동시에 실핼할 수 있는 스레드의 수를 제어할 수 있습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

Java 의 synchronized 키워드는 원자성을 보장하므로써 동시성 프로그래밍에서 생길 수 있는 문제를 해결하기 위해 나온 개념입니다. synchronized 키워드의 경우, Blocking 을 사용해 멀티 스레드 환경에서 여러개의 쓰레드가 동시에 접근하는 것을 막는다. 즉, Blocking을 통해 원자성을 보장해 동기화 문제를 해결하는 것입니다.
그러나, Blocking 에는 성능 이슈 등의 문제가 있습니다. 따라서, Non-blocking 을 하며 원자성을 보장하는 atomic 변수가 등장하였습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

자바 개념을 예제 코드와 함께 깊이 있게 다루고 싶습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

같은 꿈을 키워나가는 분들과 네트워킹 자리가 있었으면 좋겠습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

이것이 자바다를 완독한 적이 있습니다. 처음 입문할 때 읽었던 책이라 컴파일을 했을 때 나오는 값 자체에서 처음부터 기억에 남았던 거 같습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

IndexOutOfBoundsException 을 최근에는 살펴봤습니다. 이펙티브 자바를 읽으면서 그 부분의 구현을 매개변수 여럿으로 변경하여 더 가독성있게 바꾸는 게 좋을 것 같다라는 이야기가 나와 버전별로 어떻게 값을 받는지 살펴보는 시간을 가졌습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 한줄씩 코드를 읽는 것이고 컴파일 방식은 파일로 코드를 읽는 것입니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 운영 체제에서 실행 중인 프로그램 인스턴스이고 스레드는 하나의 프로세스 내에서 실행되는 독립적인 작업 단위로, 프로세스의 자원을 공유하면서 실행됩니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바 프로그램을 실행하기 위한 가상 머신입니다. Method Area, Heap, Stack으로 이루어져 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

세마포어에 대해서 아는 대로 서술해 주세요.

동기화 기법 중 하나로, 여러 프로세스 또는 스레드가 공유 자원에 접근하는 것을 조절하기 위해 사용됩니다. 세마포어는 정수 변수와 두 가지 주요한 연산으로 구성됩니다: P(Proberen)와 V(Verhogen)입니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

스레드 처리 할 때 사용되는 것으로 알고 있습니다. synchronized 키워드를 사용하면 특정 코드 블록 또는 메서드에 대해 동시에 하나의 스레드만 실행할 수 있도록 보장됩니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

GC에 대해 기대하고 있습니다. 공부한 적이 있지만 면접에서도 다루고 중요한 내용이라고 생각하기 때문입니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

원티드 강의 꾸준히 듣고, 여러 도서들 읽고 강의도 들으면서 개발 기초를 다지며 학습하고 있습니다. 물론 블로그랑 깃허브에 올리면서 정리하고 있습니다. 돈은 벌어야 해서 서비스 못 들어가고 SI에서 일하고 있는데 서비스로 가고 싶은 마음이 큰 편입니다. 단계 별로 올라가자는 생각으로 우선 일하고 있는데 연차가 쌓일수록 관련 도메인 지식도 중요하게 여겨지는데 개발을 길게 하기 위해서는 도메인 하나에 집중하는 게 좋을까요?

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석 1회 완독. 그전까지 클래스 내 데이터, static 변수/인스턴스, 객체가 memory 어떻게 저장이 되고 사용되는지 몰랐어요. 하지만 method area, heap memory, call stack에 나눠 관리된다는 점을 알고 static을 잘 활용할 수 있게 돼 기억에 남아요.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Deprecate된 API를 대체하기 위해 인터페이스와 구현 클래스의 메서드들을 살펴본 적있어요.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 언어를 머신 언어로 변경해줍니다. 실행 속도에 장점이 있어요. 하지만 OS별로 언어를 해석하는 방식이 다르다는 단점이 있어요. 이를 보완하기 위해 Java는 언어를 JVM이라는 가상 머신 위에서 바이트 코드로 변경해 어떤 OS를 사용하든 컴파일이 가능한 편리한 구조를 만들었어요.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행하는데 시간이 오래 걸리지만 스레드는 한 프로세스 내에서 가용된 스레드를 사용해 성능을 높일 수 있다는 차이가 있어요.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 Java 코드가 컴파일 되는 환경이에요. 메모리는 call stack, method area, heap memory로 나눠져 있어요. 각각 메서드 호출, 클래스 변수와 정적 인스턴스/변수, 그리고 객체를 담는 역할을 담당해요.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

G1GC가 현재 많이 쓰이고 사용해본 알고리즘이에요. 동작 원리는 잘 모르기 때문에 프리온보딩 강의를 통해 자세히 알아보고 싶어요.

세마포어에 대해서 아는 대로 서술해 주세요.

JVM 외 OS 레벨에서 동시성을 해결할 수 있는 방법이라고 알고 있어요.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

메서드에 synchronized를 붙이면 스레드가 처리를 마치지 전까지 다른 스레드가 들어갈 수 없도록 막을 수 있어요.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

동작 원리를 자세히 설명해주시면 감사하겠습니다 :)

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석을 공부했습니다. 기억에 남는 내용으로는 컬렉션 프레임워크와 다형성과 관련된 부분이 가장 흥미로웠으며,
다양하게 예제를 테스트한 경험이 재밌고 어려웠습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Java 공식 문서를 직접 열람한 기억은 없습니다 .

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 코드를 한 줄씩 이해해서 컴퓨터에게 통역해주는 방식이고 컴파일 방식은 처음부터 끝까지 작성후에 한번에 통역해주는 방법을 의미합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 일종의 공장에 비유할 수 있습니다. 그 내부에서 일꾼을 스레드에 비유해서 설명하면 이해할 수 있습니다. 공장(프로세스)에서는 여러명의 일꾼(멀티 스레드)으로 작업이 가능하고 한명의 일꾼(싱글 스레드)으로도 일할 수 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신이라고 불리며 자바와 운영체제 사이에서 중개자의 역할을 수행합니다. 이는 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와줍니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

정확한 알고리즘은 알지못하나 메모리상에서 사용하지 않거나 변경되어 사용할 수 없게된 데이터를 처리해주는 알고리즘으로 알고 있습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

교착상태에 대해서 정수 변수로 멀티프로그래밍 환경에서 공유자원에 대한 접근 제어방식 정도로만 알고있습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화라는 의미이면서 멀티 스레드 환경에서 하나의 공유자원에 동시에 접근되는것을 막기위해 사용되는 정도로 알고 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

현업에서 사용되는 자바의 기술과 필수적으로 더 공부하면 좋을 내용들을 알 수 있으면 좋을것 같습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

최근 자바에 대한 고민보다는 스프링과 새로운 기술스텍에 대한 고민과 시험을 준비한것 같습니다. 어떤 점을 강조해서 공부하면 좋을지 또 어떤 예시코드가 있는지 이런점이 있으면 좋겠습니다. 신입개발자가 가지면 좋을 생각과 추천기술도 알 수 있으면 좋을것 같습니다.
감사합니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

이것이 자바다, 자바의 정석, 자바의 정석 기초편, 자바 완전 정복 책을 완독했습니다. 책마다 기억에 남는 내용이 다르지만, 그 중에서 가장 기억에 남는 책과 내용은 자바 완전 정복 책에서 자바 입출력입니다. 자바는 크게 byte 단위 입출력과 char 단위 입출력을 가지는데, byte 단위는 텍스트, 영상, 이미지 등 모든 파일에 해당하며 char 단위는 단위 그대로 텍스트를 전송하는 경우에 특화된 방법입니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

최상위 클래스인 Object 클래스의 하위 클래스를 확인하기 위해서 본 적이 있습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 한 줄 씩 코드를 실행하는 반면, 컴파일 방식은 전체 프로그램의 실행 전에 모든 코드를 기계어로 변환합니다. 즉, 실행 방식에 차이점이 있습니다. 실행 방식의 차이점으로 인해 파생된 차이점이 더욱 많이 있습니다. 잘 알려진 이식성, 디버깅, 속도, 배포 등 다양한 면에서 차이점을 드러내고 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 컴퓨터에서 실행 중인 프로그램을 의미합니다. 스레드는 실행되는 프로세스 내에서 실행되는 흐름의 단위를 의미합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM 은 각 플랫폼마다 자바 실행 파일인 .class 실행할 수 있도록 각 플랫폼마다 종속성을 부여할 수 있도록 지원하는 도구입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다..

세마포어에 대해서 아는 대로 서술해 주세요.

모르겠습니다..

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

모르겠습니다..

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

지금까지 사전 과제 제출의 문항과 커리큘럼에 작성된 주제를 깊이 있게 학습한 경험이 없었습니다. 따라서 별도로 더 바라는 점은 전혀 없습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

스프링 배치, 시큐리티, 카프카, 레디스, 리액트 등 너무 알아야 할 것들이 많은 백엔드 취업 시장에서 포트폴리오는 어떻게 만들어야 할 지 고민입니다. 이 모든 것들을 담아낸 포트폴리오를 만들어 낼 자신이 없어요...

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

완독까진 아니고 학교 수업에서 자바의 정석을 사용해서 보면서 공부한 적이 있습니다. 오버라이딩 부분이 헷갈려서 좀 어려웠던 기억이 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

공식 문서는 찾아본 적이 없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 한줄한줄 해석하는 것이고 컴파일 방식은 통으로 해석하는 것입니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행되는 프로그램을 말하고 스레드는 그 프로세스 내에서 실행되고 있는 여러 것들을 나눈 단위입니다.
즉 프로세스 안에 스레드가 존재합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

Java Virtual Machine
메모리 구조는 잘 모르겠습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

가비지 컬렉션.. 자세히는 잘 모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

여러 스레드가 동시에 접근하는 것을 막아 안정성을 높이는 키워드입니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

어떤 상황에서 어떤 방식으로 코드를 짜야 효율적인지 배우고 새로운 트렌드와 그에 맞는 기술들을 배우고 싶습니다. 또한 실습 뿐만 아니라 이론 면에서도 개념을 확실하게 이해하고 싶습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

취업 준비를 어떻게 해야 할지 고민입니다. 프로그래밍 실력도 중요하지만 그 외에 고려해야 하는 것들에 대해서, 또 자소서나 면접 준비에 있어서도 조언을 듣고 싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

'이것이 자바다' 책을 가지고 있지만 완독하지는 않았고 필요한 부분 부분을 펼쳐가면서 읽었습니다.
최근에는 코딩테스트를 준비하기 위해 StringBuilder 부분을 다시 읽어보고 학습한 부분이 기억에 남습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Java 공식 문서를 확인해본적이 없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 소스 코드를 한줄씩 읽어서 실행하는 방식이고 컴파일 방식은 소스 코드 전체를 한번에 기계어로 변환하는
방식으로 알고 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 메모리에서 실행되고 있는 프로그램 단위를 말하고 스레드는 하나의 프로세스에서 분할되어 실행되는 단위로
알고 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

Java Virtual Machine의 약자로 소스 코드가 여러 운영체제에서 실행 되기 위해 개발된걸로 알고 있습니다.
소스 코드 .java 파일이 .class 파일로 변환되고 다시 기계어로 변환되는걸로 알고 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

잘 모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

잘 모르겠습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

알고리즘과 동시성 처리를 위한 스레드 동기화 부분이 기대됩니다!

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

백엔드 개발자로서 성장하고 싶은데 백엔드에 대해서 공부해야 하는 우선 순위가 스스로 잘 정립되지 않아서 고민이 됩니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석 을 읽었습니다. 아무래도 람다식이 아닐까 싶습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

없습니다. 어지간한 설명은 구글에서 풀어서 해주는 편이 많아서.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

한줄씩읽거나 언어를 컴퓨터에 맞게 설계 후 실행되거나의 차이정도로 알고 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램, 프로그램을 실행 시에 메모리를 할당 받으면 그것이 프로세스, 쓰레드는 프로세스의 자원을 이용해서 작업을 수행하는 것

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바와 운영체제 사이의 실행기? 역할을 한다. 힙과 스택 마지막으로 메소드 영역으로 나뉜다. 힙은 동적 메모스드는 정적 메서드가 들어가고 스택은 휘발성 메모리? 정도로 알고 있다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

가비지 콜레션이라는 개념은 알겠지만, 이것을 처리하는 알고리즘은 잘모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘모르겠습니다. 하지만 검색을 통해 이해한 결과는 동기와 비동기 문제와 관련된 것으로 이해됩니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

멀티쓰레드 환경에서 공유된 리소스에 대해 동시접근을 제어하고, 스레드간의 상호작용을 조정하는데 사용합니다. 이것은 제가 프로젝트를 짜면서 트래픽이 몰릴경우에 대해 고민을 해봤었고, 자바의 정석에서 이걸보고 헤맸었던 기억이 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

아무래도, 시간은 한정적이고 모든걸 다 진행할 수 없다는 것을 안다. 하지만 TDD 에 대한 것을 원하기는 한다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

좀 더 성장할 수 있는 기회가 되면 좋겠다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

인터넷 강의를 통해 Java를 학습하여서 Java 입문서를 제대로 완독하지는 못하였습니다.
그러나 Java에서의 추상 클래스 사용과 제너릭에 관한 부분을 책으로 읽고 공부한 적은 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

StringBuffer와 StringBuilder의 메소드에 대해 살펴본 적이 있습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 사용자가 작성한 프로그래밍 언어를 한 줄마다 실행하며, 파이썬이 예시입니다.
컴파일 방식은 인터프리터와 다르게 작성한 코드를 하나의 실행 파일로 한 번에 기계어로 해석합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 컴퓨터 메모리에 올라와 연속적으로 실행되는 프로그램이고
스레드는 한 프로세스 내에서 실행되는 작업의 단위입니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바 가상 머신으로 자바 코드를 실행할 수 있게 해주는 소프트웨어입니다.
자바 코드는 자바 컴파일러에 의해 자바 바이트코드 변환됩니다. 이러한 바이트코드를 JVM에서 읽어들여 각 운영체제 환경에
맞게 프로그램이 실행됩니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Serial GC는 싱글 스레드로 동작하며 GC가 수행되는 동안 다른 스레드들은 모두 작업을 중지합니다.
시간이 많이 소요된다는 단점이 있습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

멀티 프로그래밍 환경에서 공유하는 데이터에 여러 프로세스나 스레드가 접근하는 것을 막아줍니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

데이터를 사용하는 스레드를 제외한 나머지 스레드들이 접근할 수 없도록 막는 키워드이다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

일반 자바 입문 강의에서 다루지 않는 딥한 부분까지 배울 기회가 생겨 기대가 됩니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

주니어 개발자로서 어떻게 공부해야 하나 막막할 때가 많았는데 이번 강의를 통해 더욱 성장할 수 있으면 좋겠습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

이것이 자바다 책 완독을 두 번하였는데, 처음 완독할 때 이해 되지않던 내용들이 두번 째 완독할 때 조금씩 이해가 되던 신기한 기억이 있습니다.
특히 예외 처리를 하는 방법과 진행 과정, 컬렉션 프레임워크 사용하는 부분이 기억에 남습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

Java를 활용해서 코딩 테스트 문제를 풀때, 사용되는 컬렉션 프레임 워크들의 매개변수로 받는 값과, 반환값이 무엇인지 파악하기 위해
공식문서를 살펴보았었습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

컴파일 방식은 작성된 코드를 전체적으로 기계어로 변경하는 것으로 알고 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

실행 중인 작업들을 프로세스라고 하며, 스레드는 프로세스 내에서 여러 개의 작업 흐름을 의미한다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

Java Virtual Machine의 약어로 자바 프로그램의 실행 환경을 만들어주는 역할을 하며,
내부 구조는 GC, CL, 등이 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Garbage Collector라는 것만 알고있습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

공유 자원에 접근할 수 있는 정수 변수로 원자적 연산으로만 접근 가능한 것을 의미하는 것으로 알고있습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화하는 약어로써, 여러개의 스레드에서 사용하려는 데이터에 공동으로 접근하는 것을 방지하기 위해 사용되는 것으로 알고있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

Java라는 것을 잘 아는가? 에대한 질문에 아직은 모른다고 대답하는 수준인 것 같습니다.
이번 강의를 통해서 그럼 Java라는 무엇인가?의 질문에 답을 찾아가며,
자바의 기초적인 지식들을 알아가고 배워갈 수 있는 기회로 활용하겠습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

좋은 강의 감사드립니다 :)

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

객체지향 부분을 읽었습니다. 캡슐화, 다형성, 추상화 같은 키워드들이 떠오르는데 딱 하나만 꼽자면 다형성은 인터페이스로 객체간의 약결합을 통해 상황에 따라 다양한 콘크리트 객체들을 만들어낼 수 있고 확장성있는 설계가 가능하다는 특징이 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

읽지않았습니다. 넥스트 스텝의 자바 플레이그라운드 with TDD 강의를 실습하면서 List, Map와 같은 인터페이스가 필요한 순간에 찾아봤습니다. 자바를 사용할때 알아야하는 핵심요소로 Thread, GC, Future/Sync 있다고 생각이 드는데 구글링, 네이버 엔지니어링 블로그 그리고 chatGPT를 활용해서 지식습득 했습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 프로그램에 대해 한줄을 읽는 즉시 컴퓨터가 읽을 수 있는 기계어로 변환됩니다. 사용되는 언어로는 javascript가 있습니다. 컴파일 방식은 자바의 경우 자바 컴파일러에 의해 변환된 바이트코드를 JVM 위에서 실행하면서 기계어로 변환됩니다. 즉 차이점은 인터프리터 방식은 소스코드를 읽을때마다 기계어로 즉각적인 변환이 되고 컴파일 방식은 실행하기위해 컴파일 과정을 거친후 컴파일된 코드를 바탕으로 기계어로 변환되어 실행됩니다. 이 차이점으로 인터프리터는 컴파일 과정이 축소되어 빠른 실행이 가능하다는 점이 있지만 코드마다 기계어로 변환되는 과정이 필요하다보니 처리 속도가 비교적 느린 부분이 있습니다. 컴파일 방식은 인터프리터와 반대로 실행하기위해 컴파일 과정이 필요하지만 처리속도가 비교적 빠릅니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 프로그램을 사용하기위해 메모리에 적재하고 CPU에 할당한 상태입니다. 스레드는 프로세스 위에 어떤 일을 수행하기위한 하나의 흐름입니다. 개별적인 메모리할당이 되고 다른 job을 수행하기위해 컨텍스트 스위칭해야하는 경우 잠깐의 시간동안 CPU가 Job을 수행할 수 없는 대기 시간이 존재하게 되는데 프로세스의 컨텍스트 스위칭의 경우 쓰레드 컨텍스트 스위칭에 비해 조금 더 긴 대기시간이 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 Java Virtual Machine의 약자로 실행되는 OS에 의존적이지않기위해 개별적인 자바 가상 실행 공간이라고 정의할 수 있습니다.
JVM에서는 순수 자바 코드를 위에 설명한 바와 같이 바이트 코드로 변환하여 실행됩니다.
메모리 구조로는 Stack 영역, Heap 영역, Method 영역, Native Method Stack 영역, PC register 이 있습니다.
Stack 영역은 쓰레드 별로 개별적인 Stack 영역을 할당받고 주로 변수를 저장하는 공간으로 사용됩니다.
Heap 영역은 쓰레드간 공유되는 공간으로 오브젝트 혹은 배열 주소의 저장 공간으로 사용됩니다. GC에 의해 관리되는 영역입니다.
Method 영역은 힙영역의 일부로 JVM이 실행될때 Static class, Method 같이 절대 변경되지않는 요소들이 저장되는 공간으로 사용됩니다.
Native Method Stack 영역은 내부적으로 Java 언어 외의 C++ 과 같이 다른 언어로 작성된 코드가 저장된 공간으로 사용됩니다.
PC register 영역은 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역이다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

G1 GC 알고리즘은 자바 7에 나온 알고리즘으로 사용되는 데이터에 활용에 따라 Young영역에서 Old 영역으로 이동하는 방식이 사라지고 각 영역별 분리되어있던 공간을 분리하지않고 공간을 유동적으로 할당하여 재배치하는 시간을 최소화한 알고리즘입니다.

세마포어에 대해서 아는 대로 서술해 주세요.

모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

MySQL의 락을 사용하는 것과 동일하다고 할 수 있습니다. Java의 경우 멀티쓰레드로 구성되어있다보니 힙영역에 사용되는 오브젝트 혹은 배열 공간에 대해 쓰레드 별로 중첩참조하여 수정하는 경우에 데이터에 일관성이 깨지는 경우가 있습니다. 이런 경우에 synchronized 키워드를 사용하는 경우 해당 참조를 종료하기 전까지 다른 쓰레드는 대기하게 됩니다. class와 method에 대해서 해당 키워드를 사용할 수 있습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

자바 기본 지식에 대해서 학습을 한 적이 있었는데 다시 한번 복습하고 몰랐던 내용이나 잘못 알고 있었던 내용을 알아가는 계기가 되었으면 합니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

커리어 패스를 어떻게 설계해야하는지에 대해서 함께 고민하는 시간이 있었으면 좋겠습니다. 저연차 이직을 위해서 어떻게 해야 서류합격을 높일 수 있을지와 실무자의 입장에서 뽑고 싶은 이력서가 궁금합니다. 이번 챌린지를 통해 많은걸 얻어가는 시간이 되었으면 좋겠습니다. 잘 부탁 드립니다!!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

없습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 소스 코드를 한 줄 씩 번역하여 실행하고, 컴파일 방식은 프로그램 실행시 소스코드를 전체 스캔하여 한번에 번역하여 실행한다.

프로세스와 스레드의 차이점을 서술해 주세요.

모르겠습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

  • JVM : 자바 프로그램을 실행할 수 있도록 만들어 주는 가상의 환경.
  • Method 영역 : 클래스, 전역변수, static으로 선언된 변수 등이 저장되며 프로그램이 시작할 때 부터 종료될 때까지 메모리에 상주한다.
  • Heap 영역 : new를 이용하여 동적으로 생성된 인스턴스 객체가 저장되는 영역. 객체가 소멸되거나 GC에 의해서 정리되기 전까지는 영역에 남아있다.
  • Stack 영역 : 지역 변수, 메소드의 매개변수 등 임시적인 데이터가 저장되는 영역

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

모르겠습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

모든 커리큘럼이 더 나은 성능의 프로그램을 만드는데 꼭 필요한 내용이라 기대가 됩니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

비전공자 개발자로서 그 동안 많이 부족하다고 느꼈던 이론적인 부분을 많이 보완해 갈 수 있었으면 좋겠습니다!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석을 완독한 경험이 있습니다. 상속 및 인터페이스에 대한 내용이 가장 기억에 남습니다. 학습 당시에는 단순히 설계도 정도의 개념으로 알고 넘어갔었는데 실제로 스프링을 사용하다보니 다형성을 인터페이스와 상속을 통해 활용하고, 이것이 코드의 유지보수성과 확장성을 얻게 해준다는 점이 매우 인상깊었습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

자바 Stream에 대해 공부하기 위해 공식문서를 살펴본 적이 있습니다. 공식문서를 통해 functional-style operation을 지원하기 위해 자바가 Stream을 도입하였음을 알게 되었고, Collection을 순회하는 것과 Stream의 동작 방식 차이에 대해 알게 되었습니다. 많은 내용이 있었는데 그 중에서도 Parallelism 개념이 쉽지 않았던 기억이 있습니다. 이번 프리온보딩 백엔드 챌린지 과정에서 동시성 처리에 대한 내용을 배우고 난 뒤 다시 한 번 살펴볼 예정입니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 프로그래밍 언어의 소스 코드를 바로 실행하는 방식을 말합니다. 즉, 컴파일을 하지 않고 소스코드를 한 줄 씩 읽어들여 실행합니다. 컴파일하는 과정이 없기 때문에 별도의 실행파일이 없지만 실행시마다 인터프리트 과정이 반복 수행되어 실행속도가 느리다는 단점이 있습니다. 대표적인 예로 Python, JavaScript가 있습니다.
컴파일 방식은 컴파일러를 사용하여 고급 언어로 작성된 소스코드를 저급 언어로 번역하는 과정을 거칩니다. 컴파일 타임에 전체 소스코드를 저급 언어로 변환하여 실행파일을 만듭니다. 이 실행파일을 실행하면 되므로 코드 실행 속도가 빠릅니다. 대표적인 언어로 C와 C++이 있습니다.
Java의 경우 컴파일 과정을 통해 바이트코드를 만들고 이를 JVM에서 인터프리트 방식으로 동작시키는 것으로 알고 있습니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행 중인 프로그램을 말하며 스레드는 프로세스 내부에 존재하는 최소 흐름의 단위입니다. 프로스세는 Code, Data, Stack, Heap 영역으로 되어있으며 각각의 프로세스는 독립된 메모리 공간을 지닙니다. 하지만 스레드는 Stack, PC를 제외한 나머지 메모리 공간을 공유합니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 Java Virtual Machine의 약자로 Java Byte Code를 OS에 맞게 해석해주는 역할을 하고 Garbage Collection을 통해 자동적으로 Heap 메모리 공간을 관리해줍니다. 메모리 구조는 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 이루어져있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Serial GC : mark-sweep-compact 알고리즘을 사용합니다. Old영역에서 살아있는 객체를 식별(Mark)하고, 살아있는 객체만을 남깁니다.(Sweep) 그리고 난 후에 객체들을 앞부분부터 채워 객체가 존재하는 부분과 존재하지 않는 부분으로 나눕니다.(Compaction)

세마포어에 대해서 아는 대로 서술해 주세요.

공유 자원�에 여러 프로세스가 동시에 접근하는 것을 막는 역할을 합니다. 세마포어는 사용자가 지정한 개수만큼 보호하는 자원에 접근 권한을 줍니다. 이 중 지정한 개수가 1일 때 이를 뮤텍스라고 부르기도 합니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

synchronized 키워드는 메서드나 블록을 한 번에 한 스레드만 수행하도록 보장해주는 역할을 합니다. 동기화의 대표적인 기능인 배타적 실행과 스레드 간의 통신 및 가시성을 보장해줍니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

실무에서 자바를 사용할 때 중요한 키워드들에는 무엇이 있는지 궁금합니다. 또한 그러한 키워드들에 대해서 어떻게 학습하면 좋은지 궁금합니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

회사 생활을 하면서 개발 관련 지식들을 어떻게 쌓아가는지, 회사 생활을 하면서 새로운 기술이나 모르는 내용들은 어떻게 학습하는지에 대해 알고 싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

컴퓨터학을 전공으로 하여 Java 입문서(객체지향 관련)를 완독한 경험이 있습니다.
Method overloading과 Method overriding이 가장 기억에 남습니다. 두 개념이 혼동되었어서 확실하게 기억에 남아있는 것 같아요.
Method overloading은 메소드 중복 정의를 뜻합니다. 메소드명이 같아도 매개변수를 다르게하여 중복 정의를 하는 것입니다. 이때 매개변수의 개수, 자료형, 순서를 다르게 하는 것이 '매개변수를 다르게'의 조건입니다. (signature)
Method overriding은 상속받은 부모 클래스의 메소드를 재정의하여 사용하는 것을 뜻합니다. 메소드의 선언부는 기존 메소드와 같아야 합니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

공식 문서를 살펴본 적은 없습니다. 이번 기회를 통해 친해지겠습니다 ㅎㅎ

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

compiler는 전체 소스코드를 보고 명령어를 수집하여 기계어로 변환하는 방식이고, interpreter는 각 행을 연속적으로 분석하며 중간 코드로 변환하고 실행시키는 방싱입니다.
java는 compiler와 interpreter가 합쳐진 언어입니다. 자바 컴파일러를 활용해 전체 코드를 변환시키지만 그 중간에 JVM이 실행 시킬 수 있는 자바 byte 코드(.class)로 번역해줍니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 메모리에서 실행중인 프로그램이고, 스레드는 프로세스 안에서 실행되는 흐름 단위입니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 Java가 OS에 상관없이 프로그램을 실행할 수 있도록 도와주는 역할을 합니다.
JVM 메모리 구조는 자세히 모르겠습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

semaphore는 공유 자원에 여러 프로세스나 스레드가 동시 접근하는 것을 막고 한 번에 하나의 프로세스만 접근할 수 있도록 제한을 두는 동기화 방식입니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

모르겠습니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

모든 커리큘럼을 마친다면 사전 과제 항목에 대해 완벽하게 이해하는 자신의 모습이 기대됩니다 ㅎㅎ

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

완독한 적은 없으나, 필요한 부분을 찾아본 적은 있습니다.
처음 자바를 배울 떄, 객체, 클래스, 메소드 부분을 이해하는 게 어려워서 기억에 남습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

몇 번 들어가 본 적은 있으나, 10분 이상 본 적은 없는 것 같습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 코드를 한 줄 씩 실행하는 것이고 대표적인 예로는 파이썬이 해당 방식을 사용합니다. 컴파일은 파일 전체를 한 번에 실행하는 방식이며 c가 해당 방식을 사용하는 대표적인 언어입니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로그램을 실행하면 프로세스가 발생하고, 프로세스 내에서 실행되는 단위가 스레드이다.
가장 큰 차이점으로는 메모리 공유 여부이다. 프로세스 내 메모리를 공유하는 스레드와 달리 프로세스는 독립적이다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신으로 자바가 os와 관계 없이 실행될 수 있도록 환경을 제공하는 소프트웨어이다.
Garbage Collector, Execution Engine, Class Loader, Runtime Data Area 로 구성 되어 있다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

mark and sweep 알고리즘. root 가 참조하는 객체, 그 객체를 참조하는 객체를 탐색해 내려가며 할당 받은 메모리 영역에 1 비트씩 남겨 mark 한다. mark 가 완료 되면, gc는 heap 내부를 돌면서 mark 되지 않은 메모리들을 해제한다.

세마포어에 대해서 아는 대로 서술해 주세요.

멀티 프로그래밍 환경에서 공유 자원에 대한 접근 제한을 위해 사용한다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

메소드를 호출하기 전에 스레드 간 동기화 락을 건다. 무결성을 보장하나 느리다는 단점이 있다. HashTable 의 데이터를 다루는 메소드 get() set() 등에 해당 키워드가 붙어 있다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

자바에 대한 기초적인 학습 없이 실무를 통해 자바를 배워서 기본기가 부족하다고 느낍니다. 이번 기회를 통해 그 부분을 보충하고 싶습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

잘 부탁드립니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

stream 관련된 내용을 살펴보았습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식은 소스코드를 한 줄씩 읽어서 해석하는 방식입니다. 컴파일 방식은 컴파일러가 소스코드 전체를 기계어로 변환하여 목적코드로 만들어 저장하고 실행하는 방식입니다. 컴파일 방식은 실행속도와 성능이 중요한 경우 적합하며, 인터프리터 언어는 개발과 디버깅의 편의성이 요구되는 경우에 적합합니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 운영체제로부터 자원을 할당받아 실행중인 프로그램의 인스턴스입니다. 스레드는 프로세스 내에서 실행되는 작업의 단위로 프로세스의 자원을 공유합니다. 하나의 프로세스에 여러 스레드가 동시에 실행될 수 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

JVM은 자바언어로 작성된 프로그램을 실행하기 위한 가상머신입니다. 자바코드를 기계어로 변환하고, 메모리 관리, 스레드관리 등의 작업을 수행합니다. JVM의 메모리 구조로는 heap, stack, class등이 있습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Mark and Sweep 알고리즘 : 도달 가능한 객체들을 찾아 메모리를 해제하는 방식입니다. 메모리 조각화 문제가 발생할 수 있습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

동기화 기법 중 하나입니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

인스턴스 단위로 thread-safe가 보장되기 때문에 여러 대의 서버를 사용하는 환경이라면 동시성 이슈를 해결하기 어렵다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

이번 강의를 토대로 좀 더 효율적으로 자바를 사용할 수 있게 되었으면 좋겠습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

대학 수업으로 Power Java 2판을 읽은 적이 있습니다. 그리고 이펙티브 자바를 읽은 경험이 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터는 컴파일이 필요없이 코드를 한줄씩 실행하는 방식이고 컴파일 방식은 코드를 컴파일 후 실행하는 방식이다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 실행중인 프로그램을 의미하고 스레드는 프로세스에서 실행 가능한 흐름의 단위입니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바 가상 머신, 메모리 구조는 잘 모르겠습니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

잘 모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

임계 영역에 여러 프로세스나 스레드가 동시에 접근할 수 없도록 하는 동기화 기법이다. wait와 signal 함수를 이용한다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

임계 영역에 스레드들이 동시에 접근할 수 없도록 하는 기법이다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

강의 커리큘럼에 대한 전반적인 내용에 무지합니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

cs 지식이 많이 부족하다보니, 언어를 공부할 때 단순히 언어의 사용법만을 익힌 것 같습니다. 이 챌린지를 통해 언어의 깊은 부분까지 학습해보겠습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석을 1번 완독하고 다시 보고 있습니다.
지금 두번째 보는데, 이제 다형성의 개념을 이해할 수 있었습니다. 이전에 왜 사용하는지 이해가 잘 안갔는데, 공부하면서 데이터 관점으로 볼 수 있었고 서로 다른 객체를 같이 처리하기 위해 사용한다고 이해하게 되었습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

10분 이상은 아니고 필요할때마다 찾아서 봅니다.
주로 쓸수 있는 메서드를 살펴 봅니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터 프리터 방법은 한줄씩 읽고 실행해 주는 것이고, 컴파일러는 전체를 분석하여 실행해주는 것입니다.

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 하나의 독릭적인 작업단위로 알고 있습니다. 보통 지금 실행중인 프로그램을 프로세스라고 불렀습니다.
스레드는 프로세스 내에서 실행되며, 자원을 공유하면서 동시에 실행된다고 알고 있습니다.

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

자바를 실행시키는 가상머신입니다. jvm 때문에 다른 언어와 다르게 운영체제에 독립적이게 프로그램을 실행할 수 있습니다.
메모리 구조는 힙, 쓰택, 메서드 영역이 있습니다. 힙은 객체와 배열등이 저장되는 공간입니다. 스택은 지역변수, 매개변수 등이 저장되는 공간입니다. 메서드 영역은 정적변수나 상수, 메서드 코드등을 저장하는 공간입니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

잘 모르겠습니다.

세마포어에 대해서 아는 대로 서술해 주세요.

잘모르겠습니다.

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화라고만 알고 있고 구체적인 쓰임이 등은 잘 모릅니다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

프로젝트를 완수하고 그것을 추후에 더 확장할 수 있었으면 좋겠습니다.

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

이전에 다른 일을 했어서, 책으로 공부하고 있습니다. 프로그램을 혼자 짜보기도 하지만, 좀 더 효과적인 공부법과 취업으로 가는 길을 알고 싶습니다. 만약 이 과정을 들을 수 있게 된다면, 코드 리뷰를 많이 받고 싶습니다.

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 신 완독한적 있습니다.

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

살펴본적 없습니다.

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

인터프리터 방식과 컴파일 방식 모두 코드를 실행 하는방식인데 인터프리터 언어는 코드를 그때그때 실행하며 해석히고 컴파일 방식은 컴파일러라는 장치를 이용해 코드를 통으로 가져와서 해석을 합니다 예를 들어 Java에 jvm이 컴파일러를 가져와 해석합니다

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 스레드를 포함하고 있는 큰 틀이고 스레드는 실제로 행동하는 일꾼 정도로만 알고 있습니다

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

jvm은 자바에서 제공하는 프로그램을 실행하기 위한 가상 머신입니다 첫질문에 답을 했듯이 컴파일러를 실행하는 역할도 하고 가비지 컬렉션을 관장합니다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

아는게 없습니다

세마포어에 대해서 아는 대로 서술해 주세요.

아는게 없습니다

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

java에서 멀티 쓰레드 환경에서 여러 스레드가 공유하고 있는 자원 및 구역을 침범없이 안전하게 사용하려고 사용합니다

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

커리큘럼이 다 저에게 필요해서 신청했습니다 기존에코드만 작성하기 급급했는데 일을 하면 할수록 내부동작원리에 대한 지식이 절실했습니다

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

이직을 고민하고 있는데 이력서는 어떤식으로 작성해야하는지 감이 오질 않네요..

[사전 과제 제출]

원티드 프리온보딩 백엔드 챌린지 6월 과정 사전 과제 제출

답안을 모두 작성하지 못해도 괜찮습니다 :)
부담 갖지 마시고 편안하게 푸시길 바랍니다

Question

Java 입문서('이것이 자바다', '자바의 정석' 등)를 완독한 적이 있나요? 기억에 남는 내용을 설명해 주세요!

자바의 정석 deep copy와 clone

Java 공식 문서를 10분 이상 살펴본 적이 있나요? 있다면 어떤 내용을 살펴보셨나요?

@annotation 관련 docs api

인터프리터 방식과 컴파일 방식의 차이점을 서술해 주세요.

컴파일 : java의 경우 jvm을 통해 코드가 해석하고 해석된걸가지고 코드를 돌림
인터프리터 : javascript의 경우 코드가 한줄한줄 바로바로 해석되고 코드가 돌아감

프로세스와 스레드의 차이점을 서술해 주세요.

프로세스는 운영체제로부터 할당받은 프로그램 실행단위
스레드는 프로세스 안에서 최소한의 실행단위

JVM의 정의와 메모리 구조를 아는 대로 서술해 주세요.

jvm은 자바언어로 만들어진 코드를 바이트코드로 컴파일해주고 그밖에 gc등의 메모리관리등 환경을 제공한다.
여러가지의 cpu에서 코드가 돌아갈 수 있게 해주는 전처리 기능에 도움을주는 단계의 역할도 동반한다.

Java의 GC 알고리즘 중 하나만 선택해 아는 대로 서술해 주세요.

Mark and Sweep 객체들이 사용중인지 사용중이 아닌지 표시하는 알고리즘

세마포어에 대해서 아는 대로 서술해 주세요.

세마포어는 다중 스레드 환경에서 자원의 동기화에서 사용됨
하나의 방만 있는 스레드가아닌 여러개의 방이있는 환경이지만 한 방이 사용이 끝날 때까지 독립적임

Java의 synchronized에 대해서 아는 대로 서술해 주세요.

동기화는 프로그램 자원 공유에있어서 결과값이 뒤섞이는걸 방지하기위하여 사용된다.

강의 커리큘럼과 관련하여 기대하는 내용이나 다뤘으면 하는 내용이 있나요?

collection , Optional

회사 생활 또는 개발자로서 고민과 질문, 강의에서 바라는 점 등 하고 싶은 말씀을 편하게 남겨주세요!

개발은 재미있다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.