기술나눔

첫 면접 경험 (Java 개발 인턴)

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

면접관 질문

  • 혹시 여기서 프로젝트를 하신 적이 있는지 묻고 싶습니다.
  • 당신이 작업한 프로젝트, 어떤 기술 스택을 사용했는지, 어떤 콘텐츠 개발을 담당했는지 알려주실 수 있나요? (프로젝트 경험)
  • 8가지 기본 데이터 유형은 무엇입니까? (베이스)
  • long 유형을 직접 실행할 수 있는지 알려주실 수 있나요? 문제는 직접 계산할 수 있는지 여부입니다. (베이스)
  • 싱글톤 패턴을 이해하시나요? 그것에 대해 이야기할 수 있나요? (디자인 패턴)
  • 게으른 남자 모드와 배고픈 남자 모드의 차이점은 무엇입니까?
  • 거래의 특징은 무엇입니까? (거래)
  • 프로젝트를 진행하면서 겪었던 예외 사항에 대해 알려주세요. (이상)
  • 일반적으로 사용되는 세 가지 시간 범주에 대해 이야기해 볼까요? (베이스)
  • 달력을 작성하는 세 가지 방법에 대해 이야기해 보세요.
  • 세션의 수명 주기에 대해 이야기해 보겠습니다. (세션)
  • 프로젝트 작업 중에 부동 소수점 정밀도가 손실된 적이 있습니까? 어떻게 해결하셨나요?
  • 그런 다음 부동 소수점을 사용하여 계산합니다. 어떤 데이터 유형을 선택하시겠습니까?
  • 일반적으로 사용되는 주석을 알려주실 수 있나요? 봄? 또는 다른 것?
  • 쓰레드(Thread)에 대해 알고 계시나요?
    • 스레드와 프로세스의 차이점은 무엇입니까?
  • 그렇다면 스레드 안전성이 무엇인지 말해 보세요.
  • ==와 같음의 차이점을 알려주세요.
  • 그럼 리눅스를 사용해 본 적이 있나요? 일반적으로 사용되는 몇 가지 명령에 대해 간략하게 말씀해 주시겠습니까?

문제 해결됨

- 我想问一下你这边有做过什么项目吗?

상대적으로 능숙한 프로젝트 한두 개만 골라서 이야기하면 될 것 같아요.

- 你方便讲一下你做过的那些项目吗,用了什么技术栈,包括你负责开发的内容是什么?

이야기할 가장 친숙한 프로젝트를 선택하세요.

- 八大基本数据类型是什么?

byte、short、int、long、float、double、char、boolean

- 你说一下long类型能直接运转吗(긴 타입의 데이터를 직접 연산할 수 있는지 묻는 것 같아요)

Long 유형의 데이터를 직접 연산할 수 있으며, 표현식에 int 유형 값과 long 유형 값을 혼합하면 전체 표현식의 결과가 long 유형이 되도록 자동으로 int 유형 값이 long 유형으로 승격됩니다.

- 你了解单例模式吗?你可以讲一下吗

싱글톤 패턴은 일반적으로 사용되는 소프트웨어 디자인 패턴입니다. 그 목적은 클래스에 인스턴스가 하나만 있는지 확인하고 이 고유한 인스턴스를 얻기 위한 전역 액세스 지점을 제공하는 것입니다. 이 패턴은 리소스에 대한 액세스를 제어해야 하는 경우, 개체 인스턴스화에 리소스 집약적이거나 시간이 많이 소요되고 이러한 리소스 또는 인스턴스 중 하나만 전역적으로 필요한 경우에 유용합니다. 싱글톤 모드의 일반적인 구현 방법에는 주로 게으른 모드와 배고픈 모드가 포함됩니다.

- 懒汉模式跟饿汉模式有什么区别?

  1. 에서 얻을 수 있습니다객체 초기화 타이밍, 스레드 안전성 및 리소스 활용도다른 측면에서 비교해보세요:

      1. 초기화 타이밍
      • 게으른 모드: 레이지 모드는延迟加载 싱글턴 패턴.특징은第一次使用时创建实例对象 , 클래스가 로드될 때 생성하는 대신.이 패턴을 사용하면 인스턴스 객체가 필요하지 않습니다.资源浪费, 필요할 때만 생성됩니다.
      • 배고픈 모드: 헝그리맨 모드는 일종의在类加载时就创建实例 싱글턴 패턴. 사용 여부와 상관없이 클래스가 로드되면 인스턴스 객체가 생성되는 것이 특징입니다.이 방법을 사용하면 어떤 상황에서도 동일한 인스턴스 개체를 얻을 수 있지만 일부 문제가 발생할 수 있습니다.性能和资源上的浪费, 특히 어떤 경우에는 인스턴스 개체가 사용되지 않습니다.
      1. 스레드 안전
      • 게으른 모드: Lazy 모드 자체가非线程安全的 , 여러 스레드가 동시에 getInstance() 메서드를 호출하고 동시에 판단문을 입력하여 여러 인스턴스가 생성될 가능성이 있기 때문입니다.스레드 안전성을 달성하기 위해 getInstance() 메소드를 사용할 수 있습니다.添加synchronized关键字 하지만 이로 인해 성능 오버헤드가 발생합니다. 또한 이중 확인 잠금(Double-Checked Locking) 및 기타 방법을 사용하여 동기화 오버헤드를 줄일 수도 있습니다.
      • 배고픈 모드: 배고픈 모드는线程安全예. 클래스가 로드될 때 인스턴스 개체가 생성되므로 멀티 스레드 환경에서는 경쟁 문제가 없습니다.
      1. 자원 활용도 및 성능
      • 게으른 모드 : Lazy 모드는 인스턴스 객체가 필요하지 않을 때 리소스 낭비를 방지하므로 리소스를 절약할 수 있습니다. 단, 처음 사용할 때 초기화를 해야 하기 때문에 초기화 과정이 복잡하거나 시간이 오래 걸릴 경우 성능에 영향을 줄 수 있습니다.
      • 배고픈 모드 : Hungry 모드는 사용 여부와 상관없이 인스턴스 객체를 생성하기 때문에 리소스 활용 측면에서 Lazy 모드만큼 유연하지 않을 수 있습니다. 그러나 클래스가 로드될 때 인스턴스 객체가 이미 생성되므로 초기화가 필요하지 않으므로 첫 번째 호출에서 더 빠릅니다.
  2. 적용 가능한 장면

    • 게으른 모드: 적용 가능객체가 처음 사용될 때만 생성되고 인스턴스 객체의 초기화 과정에서 복잡한 스레드 안전 요구 사항이 없는 시나리오입니다. . 예를 들어,파일 관리자이는 애플리케이션이 시작될 때 즉시 파일을 읽고 쓸 필요가 없고 필요할 때만 관련 작업을 수행할 수 있기 때문에 일반적인 예입니다.
    • 배고픈 모드 : 프로그램 시작 시 초기화가 필요한 리소스에 적합하며, 애플리케이션의 라이프사이클 전반에 걸쳐 사용된다. 예를 들어, 로거는 Hungry Pattern에 적합한 후보입니다. 일반적으로 로깅 기능은 애플리케이션 시작 시 준비되어 있어야 하고 애플리케이션 런타임 전체에 걸쳐 메시지를 기록해야 하기 때문입니다.
    • 요약하면, 게으른 사람 모드와 배고픈 사람 모드는 각각 고유한 장점과 단점이 있으며 실제 적용에서는 특정 시나리오에 따라 포괄적으로 고려하고 설계해야 합니다.

- 说一下事务的几种特性?

  1. 거래에는 다음과 같은 네 가지 기본 특성이 있습니다.구체적으로 다음과 같은 기능이 포함됩니다.
    • 원자성 : 원자성은 트랜잭션의 모든 작업이 완료되거나 실행되지 않음을 의미합니다. 트랜잭션 실행 중에 오류나 실패가 발생하면 수행했던 작업이 취소(롤백)되고 전체 트랜잭션은 발생하지 않은 작업과 같습니다. 이 기능은 트랜잭션 무결성과 일관성을 보장합니다.
    • 일관성 : 일관성은 트랜잭션이 데이터베이스를 하나의 일관성 상태에서 다른 일관성 상태로 변환해야 함을 의미합니다. 트랜잭션 시작 전과 트랜잭션 종료 후에도 데이터베이스의 무결성 제약 조건(기본 키 제약 조건, 외래 키 제약 조건 등)이 파괴되지 않으며, 모든 데이터는 논리적 일관성을 유지합니다. 트랜잭션 실행 중에 데이터베이스 무결성이 손상되면 트랜잭션이 중단되고 수행된 작업이 롤백됩니다.
    • 격리 : 격리란 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션이 서로 격리되어 하나의 트랜잭션 실행이 다른 트랜잭션의 방해를 받을 수 없음을 의미합니다. 데이터베이스 시스템은 동시에 실행되는 트랜잭션이 서로 간섭하지 않도록 일정 수준의 격리를 제공하여 데이터의 정확성과 일관성을 보장합니다. 격리는 일반적으로 잠금(예: 행 잠금, 테이블 잠금 등) 또는 다중 버전 동시성 제어(MVCC)와 같은 메커니즘을 통해 달성됩니다.
    • 내구성 : 영속성이라고도 하는 내구성은 일단 트랜잭션이 커밋되면 데이터베이스에 대한 수정 사항이 영구적이며 시스템이 실패하더라도 손실되지 않음을 의미합니다. 데이터베이스 시스템은 로그 및 복구 메커니즘을 통해 트랜잭션의 내구성을 보장합니다. 시스템 장애가 발생하더라도 시스템은 로그를 통해 커밋된 트랜잭션을 통해 데이터베이스에 대한 수정 사항을 복구할 수 있습니다.

- 说一下你在做项目的过程中都遇到过哪些异常吗?(일부만 나열하세요)

  1. 코드 예외
    • NullPointer예외 : 초기화되지 않은 객체에 액세스하거나 조작하려고 할 때 발생합니다. 객체가 null인지 확인하고 직접 사용하는 것을 잊어버리는 경우가 많습니다.
    • 범위를 벗어난 배열 예외(ArrayIndexOutOfBoundsException): 배열에 접근할 때 잘못된 인덱스가 사용되었습니다(인덱스가 0보다 작거나 배열 크기보다 크거나 같습니다).
    • 유형 변환 예외(ClassCastException): 캐스팅 시 변환되는 개체는 대상 유형이나 해당 하위 클래스의 인스턴스가 아닙니다.
    • ArithmeticException // 0으로: 나눗셈 연산을 수행할 때 제수는 0입니다.
  2. 데이터 예외
    • 데이터 형식 오류: 예를 들어 JSON 또는 XML 데이터를 구문 분석할 때 데이터 형식이 기대에 미치지 못합니다.
    • 데이터 무결성 예외: 데이터베이스의 외래 키 제약 조건이 실패하면 데이터를 삽입하거나 업데이트하려고 할 때 데이터 무결성 규칙을 위반합니다.
    • 데이터를 찾을 수 없음 예외: 데이터베이스 쿼리 시 주어진 조건에 따라 해당 데이터를 찾을 수 없는 경우.
  3. 네트워크 예외
    • 연결 시간 초과(ConnectTimeoutException): 네트워크 연결을 시도하는 동안 응답을 기다리는 동안 연결 요청 시간이 초과되었습니다.
    • 읽기 시간 초과(SocketTimeoutException): 연결에서 데이터를 읽는 동안 작업 시간이 초과되었습니다.
    • 네트워크에 연결할 수 없습니다(UnknownHostException).:호스트 이름을 확인할 수 없습니다.
    • 연결이 거부되었습니다(ConnectionRefusedError).: 대상 컴퓨터가 연결 요청을 거부했습니다.
  4. 시스템 자원 예외
    • 메모리 오버플로(OutOfMemoryError): 메모리를 할당하려고 할 때 JVM에 사용 가능한 메모리 공간이 부족합니다.
    • 파일이 존재하지 않습니다(FileNotFoundException): 액세스하려는 파일이나 디렉터리가 존재하지 않습니다.
    • 권한 부족(SecurityException/AccessDeniedException): 파일 읽기 및 쓰기, 네트워크 리소스 접근 등의 작업을 수행하기 위한 권한이 부족합니다.
  5. 제3자 서비스 예외
    • 서비스를 사용할 수 없습니다(ServiceUnavailableException): 종속된 타사 서비스를 일시적으로 사용할 수 없습니다.
    • API 제한(RateLimitException): 타사 API에 대한 요청이 해당 제한(예: 요청 빈도 제한)을 초과했습니다.
    • 인증 실패(AuthenticationException): 타사 서비스 접속 시 인증정보가 유효하지 않거나 만료되었습니다.
  6. 논리적 예외
    • 비즈니스 로직 오류: 예를 들어, 주문 금액이 잘못 계산되었거나, 재고가 부족하지만 주문이 처리되는 경우 등이 있습니다.
    • 일관되지 않은 상태: 시스템의 특정 상태가 예상과 일치하지 않아 후속 작업이 불가능합니다.

- 说一下时间常用的三个类?

LocalDate, LocalTime, LocalDateTime. (3개만 나열해주세요)

  • Java에서 처리 시간에 일반적으로 사용되는 클래스는 Java 8에 도입된 세 가지 패키지 java.util.Date, java.util.Calendar 및 java.time 아래의 클래스입니다(예:현지날짜、현지시간、현지날짜시간기다리다)

- 说一下日历的三个方法?

달력 관련 작업에 관해서 우리는 일반적으로 java.util.Calendar 클래스를 생각합니다. 왜냐하면 이 클래스는 달력 필드(예: 연도, 월, 일, 시간 등)를 작동하기 위한 메서드를 제공하는 추상 클래스이기 때문입니다.Java 8부터 새로운 날짜 및 시간 API(java.time 패키지에 위치)가 도입되어 더 나은 날짜 및 시간 처리 기능을 제공합니다.

  • LocalDateTime의 일반적인 메서드 소개:
      1. LocalDateTime 객체 생성
      • now(): 현재 날짜와 시간을 나타내는 LocalDateTime 객체를 생성합니다.
      • of(): 지정된 연도, 월, 일, 시, 분, 초(및 선택적 나노초)를 사용하여 LocalDateTime 객체를 생성합니다. 예: LocalDateTime.of(2023, Month.JANUARY, 1, 12, 0, 0).
      1. LocalDateTime 객체의 속성을 가져옵니다.
      • getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond() 등: LocalDateTime 개체에서 각각 연도, 월, 일, 시, 분 및 초 속성을 가져오는 데 사용됩니다.
      1. LocalDateTime 객체의 속성 수정
      • withYear(), withMonth(), withDayOfMonth(), withHour(), withMinute(), withSecond() 등: LocalDateTime 객체의 속성을 지정된 값으로 설정하고 새로운 LocalDateTime 객체를 반환합니다. 원본 객체는 변경되지 않은 상태로 유지됩니다. . 변수입니다(LocalDateTime은 변경할 수 없기 때문입니다).
      1. 날짜와 시간의 덧셈과 뺄셈
      • plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds() 등: 지정된 기간을 LocalDateTime 객체에 추가하고 새 LocalDateTime 객체를 반환합니다. minusYears(), minusMonths(), minusDays(), minusHours(), minusMinutes(), minusSeconds() 등: LocalDateTime 객체에서 지정된 기간을 빼고 새 LocalDateTime 객체를 반환합니다.
      1. LocalDateTime 객체 비교
      • isBefore(LocalDateTime other): 현재 객체가 지정된 LocalDateTime 객체보다 이전인지 여부를 확인합니다.
      • isAfter(LocalDateTime other): 현재 객체가 지정된 LocalDateTime 객체보다 이후인지 여부를 확인합니다.
      1. LocalDateTime 객체 형식 지정
      • format(DateTimeFormatter formatter): LocalDateTime 객체를 지정된 날짜 및 시간 형식의 문자열로 형식화합니다. 예: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = dateTime.format(formatter);.
      1. 시간차 계산
      • LocalDateTime 자체에서는 시차를 직접 계산하는 방법을 제공하지 않지만 Duration 클래스 또는 ChronoUnit 클래스를 사용하여 두 LocalDateTime 개체 간의 시차를 계산할 수 있습니다.
      • Duration 클래스를 사용하십시오: Duration Duration = Duration.between(start, end); 그리고 나서 Duration 객체를 통해 초, 밀리초 등과 같은 시간 차이의 구체적인 값을 얻을 수 있습니다.
      • ChronoUnit 클래스 사용: 연, 월, 일, 시간 등 시차를 계산하는 단위를 지정할 수 있습니다. 예: 긴 날 = ChronoUnit.DAYS.between(start, end);.

- 说一下session的生命周期吧。

  1. 세션 생성
    • 생성시간:Session은 사용자가 처음 서버에 접속하여 JSP, Servlet 등을 요청할 때 사용됩니다.动态资源 언제 생성되었습니다.HTML, 이미지 등에 액세스하세요.静态资源 세션 생성이 실행되지는 않습니다. 필요한 경우 request.getSession(true)을 호출하여 강제로 세션을 생성할 수 있습니다.
    • 저장 위치: 세션은 서버 측에 저장되며 일반적으로 빠른 액세스를 위해 서버 메모리에 저장됩니다.
  2. 세션 유지 관리
    • 마지막 액세스 시간 업데이트: 사용자가 서버에 계속 액세스하는 한 서버는 세션의 마지막 액세스 시간을 업데이트하고 세션 읽기 또는 쓰기 여부에 관계없이 각 요청에 대해 세션을 유지합니다. 이는 사용자의 세션이 "활성" 상태에 있음을 나타냅니다.
    • 세션의 고유성 : 각 사용자는 세션 ID로 고유하게 식별되는 독립적인 세션을 갖게 됩니다. 세션 ID는 일반적으로 서버가 다른 사용자 세션을 식별할 수 있도록 쿠키(JSESSIONID라는 이름)를 통해 클라이언트에 전송됩니다.
  3. 세션 파괴
    • 자동으로 파기 : 세션 수명 주기가 시간 초과되면(즉, 오랫동안 활동이 없으면) 서버는 자동으로 메모리에서 해당 세션을 지웁니다. 이 시간은 일반적으로 구성 가능하며 Tomcat에서 기본값은 30분입니다.
    • 수동 파기 : 개발자는 세션의 무효화() 메서드를 호출하여 세션을 수동으로 삭제할 수 있습니다. 이는 일반적으로 로그아웃 및 시간 초과와 같은 시나리오에 사용됩니다.
  4. 세션 수명주기 설정
    • 서블릿에 설정: session.setMaxInactiveInterval(int 간격) 메서드를 호출하여 세션 시간 초과를 초 단위로 설정합니다.
    • web.xml에 설정: 웹 애플리케이션의 web.xml 파일에서通过