。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

CS

자바 면접 예상

quarrrter 2024. 1. 5. 00:37

준비했던 것들.

진짜 물어볼까? 했는데 정말 물어봤다.

 

 

 

  • 객체 지향 프로그래밍의 특징은 무엇인가요?

=> 객체 지향 프로그래밍은 객체 중심의 프로그래밍으로 상속, 캡슐화, 추상화, 다형성이라는 네 가지의 특징이 있습니다. 상속은 기존 클래스를 기반으로 새로운 클래스를 정의하는 것을 의미합니다. 캡슐화는 객체 내부에 직접 접근하지 않고 공개된 인터페이스를 통해서 객체에 접근해 조작하도록 하는 것입니다. 추상화는 객체의 공통적인 특성을 추출하는 것으로, 변수 또는 메서드를 하나로 묶어 단순화하는 것입니다. 마지막으로 다형성은 동일한 인터페이스에 대해 다른 기능을 제공하는 것을 의미합니다.

 

  • 오버라이딩과 오버로딩의 차이점

오버라이딩은 상속받은 부모 클래스의 메서드를 재정의 하는 것으로 자식 클래스에서 부모클래스에 있는 메서드와 동일한 이름의 메서드를 정의합니다. 반면에 오버로딩은 하나의 클래스에서 동일한 이름을 가지는 메서드를 중복해서 정의하는 것입니다. 메서드 이름은 같지만 매개변수가 달라서 메서드 호출 시 어떤 매개변수를 사용하는지에 따라 호출되는 메서드가 달라집니다.

 

  • 다중 상속이 무엇인지와 다중 상속을 사용할 경우 장단점을 설명해 주세요.

다중 상속이란 한 클래스가 여러 클래스를 상속받는 것을 의미합니다. 자식 클래스가 여러 부모 클래스를 가질 경우 중복되는 코드를 줄여 코드의 재사용성을 높일 수 있다는 장점이 있습니다. 하지만 어느 부모 클래스에서 상속받은 메서드와 속성인지 모호성이 발생할 수 있습니다. 또한, 클래스 간 결합도가 높아져 유지보수하는 데 어려움이 발생할 수 있다는 단점이 있습니다.

 

  • ArrayList와 LinkedList 차이

ArrayList와 LinkedList 는 모두 자바에서 리스트를 구현하는 데 사용하는 클래스입니다.

ArrayList는 배열을 이용해 리스트를 구현하므로 인덱스를 기반으로 리스트의 요소에 빠르게 접근할 . 수있습니다. 하지만 요소를 추가하거나 삭제하는 경우 배열 크기를 변경해야 해서 시간이 많이 소요됩니다. 반면, LinkedList는 연결 리스트로 구현해서 요소의 삽입과 삭제가 빠릅니다. 하지만 특정 요소에 접근할 . 때순차적으로 접근하므로 배열보다 시간이 많이 소요된다는 단점이 있습니다.

 

  • 자바에서 추상 클래스와 인터페이스의 차이점은 무엇인가요?

자바의 추상 클래스와 인터페이스는 추상화를 위한 개념입니다. 하지만 추상 클래스는 클래스의 일종이므로 단일 상속만 지원하며, 구현부가 없는 추상메서드 뿐만 아니라 일반 메서드와 변수도 가질 수 있습니다. 반면, 인터페이스는 모든 메서드가 추상 메서드이며 다중 상속을 지원합니다.

 

  • 자바의 가비지 컬렉터에 대해 설명해주세요

가비지 컬렉터는 동적 할당된 메모리 영역에서 사용하지 않는 메모리를 정리하는 역할을 합니다. 또한 자동으로 실행되기 때문에 메모리 관리에 대한 부담을 덜어 줍니다. 가비지 컬렉터는 참조되지 않는 객체들을 불필요하다고 판단하고 이를 제거하는 방법으로 메모리를 관리합니다.

 

  • 머신러닝과 딥러닝의 차이점

머신러닝이란 데이터의 특징을 바탕으로 모델을 학습시키는 방식입니다. 여기서 학습은 데이터에서 추출한 특징을 바탕으로 일반화해 결과를 도출하는 것을 의미합니다. 딥러닝은 인공신경망을 기반으로 하는 머신러닝의 한 분야 입니다. 히든 레이어로 구성된 신경망을 이용해 데이터를 학습하고 결과를 도출하며, 이미지 인식, 음성 인식등 다양한 분야에서 활용되고 있습니다.

 

  • 머신러닝에서 정확도가 1이 되면

정확도가 1인 경우 모델이 학습 데이터에 대해 과적합일 수 있으므로 학습이 잘 되었다고 볼 수 없습니다. 학습데이터가 과적합되면 다른 테이터에 대해 원하는 결과를 얻지 못할 확률이 높습니다. 따라서 테스트용 데이터 세트를 이용한 모델 학습이 잘 되었는지 반드시 확인해야합니다. 추가로, 과적합되는 것을 예방하기 위해 . 더많은 데이터를 수집하거나 모델이 일정 성능에 도달할 때 학습을 조기 종료, 모델을 단순화하는 등의 방법이 있습니다.


mvc 패턴

MVC 는 Model, View, Controller의 약자 입니다.

하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴입니다.

사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게 됩니다.

모델 : 애플리케이션의 정보, 데이타를 나타냅니다. 데이타베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻합니다. 또한 이러한 DATA, 정보들의 가공을 책임지는 컴포넌트를 말합니다.

뷰: input 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내며 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다. 데이타를 기반으로 사용자들이 볼 수 있는 화면입니다.

컨트롤러: 데이터와 사용자인터페이스 요소들을 잇는 다리역할을 합니다. 즉, 사용자가 데이터를 클릭하고, 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻합니다.


자바 기반 영속성 프레임 워크

자바 기반의 영속성 프레임워크로 jpa는 애노테이션을 통해 엔티티 필드와 테이블의 컬럼 간 매핑을 설정하고 자동으로 테이블을 생성하거나 업데이트하는 등의 기능을 제공합니다.

자바 기반의 SQL매핑 프레임 워크로 개발자가 직접 SQL을 작성하고 이를 설정한 매핑 파일을 통해 db 쿼리와 매핑합니다. 개발자가 직접 작성하기 때문에 개발자가 db와의 상호작용을 더 세밀하게 제어하며 jpa와 같은 자동화 기능은 제공되지 않습니다.

영속성(Persistence)은 데이터의 상태를 영구적으로 저장하고 유지하는 특성을 나타냅니다. 주로 데이터베이스와 관련이 있으며, 객체 지향 프로그래밍에서는 객체의 상태를 영구적으로 저장하기 위해 사용됩니다.

개념적 차이:

JPA: 객체와 관계형 데이터베이스 간의 매핑을 중심으로 하는 ORM(Object-Relational Mapping) 프레임워크입니다. 엔터티 클래스와 데이터베이스 테이블 간의 매핑을 어노테이션을 통해 설정하고, JPA가 이를 기반으로 쿼리를 생성하고 실행합니다.

MyBatis: SQL 매핑 프레임워크로서, 개발자가 직접 SQL을 작성하고 이를 매핑 파일을 통해 데이터베이스 쿼리와 매핑합니다.

쿼리 작성 방법:

JPA: JPQL (Java Persistence Query Language)이라는 객체 지향 쿼리 언어를 사용하여 쿼리를 작성합니다. JPQL은 엔터티 객체를 대상으로 쿼리를 작성하며, 데이터베이스 벤더에 독립적입니다.

MyBatis: 개발자가 직접 SQL을 작성합니다. 따라서 데이터베이스 벤더에 따라 다른 SQL을 작성할 수 있습니다.

유연성:

JPA: 높은 수준의 추상화로 인해 데이터베이스와 상호 작용이 간단하고, 개발자는 대부분의 작업을 JPA에 위임할 수 있습니다.

MyBatis: 직접 SQL을 작성하기 때문에 개발자가 데이터베이스와의 상호 작용을 더 세밀하게 제어할 수 있습니다.

자동화된 기능:

JPA: 자동으로 데이터베이스 테이블을 생성하거나 업데이트하는 등의 기능을 제공합니다.

MyBatis: 주로 SQL을 직접 작성하므로 이러한 자동화 기능이 제공되지 않습니다.


JSP(Jakarta Server Pages)와 Thymeleaf는 모두 웹 개발에서 사용되는 뷰 템플릿 엔진입니다.

JSP (Jakarta Server Pages):

Java 기반 템플릿 엔진: JSP 파일은 서블릿으로 변환되어 실행되며, 동적인 웹 페이지를 생성하는 데 사용됩니다.

스크립트 기반 문법: JSP 페이지 안에서 Java 코드를 포함할 수 있는데, 이는 주로 스크립트릿(<% %>), 표현식(<%= %>), 디렉티브(<%@ %> 등의 태그를 사용하여 수행됩니다.

Java 코드와의 결합: Java 개발자들이 비교적 쉽게 채택할 수 있습니다. 그러나 코드와 디자인의 분리가 어렵고 가독성이 떨어질 수 있습니다.

컴파일 단계: JSP는 서버에서 처음 요청이 들어올 때 컴파일되고, 그 후에는 컴파일된 코드가 실행되어 페이지를 생성합니다.

Thymeleaf:

HTML 기반 템플릿 엔진: HTML 문서 안에서 Thymeleaf 속성을 사용하여 동적 데이터를 처리합니다.

자연스러운 문법: HTML 문서 자체가 거의 변경되지 않은 채로 템플릿을 작성할 수 있습니다. Thymeleaf 속성은 일반 HTML 속성처럼 보이기 때문에 템플릿을 이해하기 쉽습니다.

스프링과의 통합: Thymeleaf는 스프링 프레임워크와 강력한 통합을 제공하며, 스프링 기반 웹 애플리케이션에서 주로 사용됩니다.

실시간 템플릿 업데이트: Thymeleaf는 실시간으로 템플릿을 수정하고 업데이트할 수 있어 개발자가 더 효과적으로 작업할 수 있습니다.

서버 및 클라이언트 사이드 렌더링:

Thymeleaf는 서버 사이드 렌더링 뿐만 아니라, 클라이언트 사이드 렌더링도 지원하여 다양한 사용 사례에 적용할 수 있습니다.

결론:

JSP는 Java 기반의 템플릿 엔진으로 전통적이고 스크립트릿이나 표현식 태그를 통해 JSP 페이지 안에서 Java 코드를 포함할 수 있습니다. Thymeleaf는 HTML 기반의 템플릿 엔진으로 문법이 간결하며, 스프링과의 통합이 용이합니다. 각각의 특성과 프로젝트 요구사항에 따라 선택할 수 있습니다. JSP는 여전히 많은 프로젝트에서 사용되지만, 최근에는 Thymeleaf와 같은 현대적인 템플릿 엔진이 더 많이 사용되고 있습니다.

 

 

REST API

 HTTP 통신을 Rest 설계 규칙을 잘 지켜서 개발한 API

rest 특징으로는 모든 것을 자원으로 보고,

어떤 자원에 대해 CRUD(Create, Read, Update, Delete) 연산을 수행하기 위해 URI(Resource)로GET, POST 등의 방식(Method)을 사용하여 요청을 보내며, 요청을 위한 자원은 특정한 형태(Representation of Resource)로 표현됩니다.

'CS' 카테고리의 다른 글

Exception 예외  (0) 2024.01.23
JRE, JDK 차이  (2) 2024.01.17
합병정렬  (0) 2023.12.30
삽입 정렬  (0) 2023.12.29
선택 정렬  (0) 2023.12.27