당신이 작업한 프로젝트, 어떤 기술 스택을 사용했는지, 어떤 콘텐츠 개발을 담당했는지 알려주실 수 있나요? (프로젝트 경험)
8가지 기본 데이터 유형은 무엇입니까? (베이스)
long 유형을 직접 실행할 수 있는지 알려주실 수 있나요? 문제는 직접 계산할 수 있는지 여부입니다. (베이스)
싱글톤 패턴을 이해하시나요? 그것에 대해 이야기할 수 있나요? (디자인 패턴)
게으른 남자 모드와 배고픈 남자 모드의 차이점은 무엇입니까?
거래의 특징은 무엇입니까? (거래)
프로젝트를 진행하면서 겪었던 예외 사항에 대해 알려주세요. (이상)
일반적으로 사용되는 세 가지 시간 범주에 대해 이야기해 볼까요? (베이스)
달력을 작성하는 세 가지 방법에 대해 이야기해 보세요.
세션의 수명 주기에 대해 이야기해 보겠습니다. (세션)
프로젝트 작업 중에 부동 소수점 정밀도가 손실된 적이 있습니까? 어떻게 해결하셨나요?
그런 다음 부동 소수점을 사용하여 계산합니다. 어떤 데이터 유형을 선택하시겠습니까?
일반적으로 사용되는 주석을 알려주실 수 있나요? 봄? 또는 다른 것?
쓰레드(Thread)에 대해 알고 계시나요?
스레드와 프로세스의 차이점은 무엇입니까?
그렇다면 스레드 안전성이 무엇인지 말해 보세요.
==와 같음의 차이점을 알려주세요.
그럼 리눅스를 사용해 본 적이 있나요? 일반적으로 사용되는 몇 가지 명령에 대해 간략하게 말씀해 주시겠습니까?
문제 해결됨
- 我想问一下你这边有做过什么项目吗?
상대적으로 능숙한 프로젝트 한두 개만 골라서 이야기하면 될 것 같아요.
- 你方便讲一下你做过的那些项目吗,用了什么技术栈,包括你负责开发的内容是什么?
이야기할 가장 친숙한 프로젝트를 선택하세요.
- 八大基本数据类型是什么?
byte、short、int、long、float、double、char、boolean
- 你说一下long类型能直接运转吗(긴 타입의 데이터를 직접 연산할 수 있는지 묻는 것 같아요)
Long 유형의 데이터를 직접 연산할 수 있으며, 표현식에 int 유형 값과 long 유형 값을 혼합하면 전체 표현식의 결과가 long 유형이 되도록 자동으로 int 유형 값이 long 유형으로 승격됩니다.
- 你了解单例模式吗?你可以讲一下吗
싱글톤 패턴은 일반적으로 사용되는 소프트웨어 디자인 패턴입니다. 그 목적은 클래스에 인스턴스가 하나만 있는지 확인하고 이 고유한 인스턴스를 얻기 위한 전역 액세스 지점을 제공하는 것입니다. 이 패턴은 리소스에 대한 액세스를 제어해야 하는 경우, 개체 인스턴스화에 리소스 집약적이거나 시간이 많이 소요되고 이러한 리소스 또는 인스턴스 중 하나만 전역적으로 필요한 경우에 유용합니다. 싱글톤 모드의 일반적인 구현 방법에는 주로 게으른 모드와 배고픈 모드가 포함됩니다.
- 懒汉模式跟饿汉模式有什么区别?
에서 얻을 수 있습니다객체 초기화 타이밍, 스레드 안전성 및 리소스 활용도다른 측면에서 비교해보세요:
초기화 타이밍
게으른 모드: 레이지 모드는延迟加载 싱글턴 패턴.특징은第一次使用时创建实例对象 , 클래스가 로드될 때 생성하는 대신.이 패턴을 사용하면 인스턴스 객체가 필요하지 않습니다.资源浪费, 필요할 때만 생성됩니다.
배고픈 모드: 헝그리맨 모드는 일종의在类加载时就创建实例 싱글턴 패턴. 사용 여부와 상관없이 클래스가 로드되면 인스턴스 객체가 생성되는 것이 특징입니다.이 방법을 사용하면 어떤 상황에서도 동일한 인스턴스 개체를 얻을 수 있지만 일부 문제가 발생할 수 있습니다.性能和资源上的浪费, 특히 어떤 경우에는 인스턴스 개체가 사용되지 않습니다.
스레드 안전
게으른 모드: Lazy 모드 자체가非线程安全的 , 여러 스레드가 동시에 getInstance() 메서드를 호출하고 동시에 판단문을 입력하여 여러 인스턴스가 생성될 가능성이 있기 때문입니다.스레드 안전성을 달성하기 위해 getInstance() 메소드를 사용할 수 있습니다.添加synchronized关键字 하지만 이로 인해 성능 오버헤드가 발생합니다. 또한 이중 확인 잠금(Double-Checked Locking) 및 기타 방법을 사용하여 동기화 오버헤드를 줄일 수도 있습니다.
배고픈 모드: 배고픈 모드는线程安全예. 클래스가 로드될 때 인스턴스 개체가 생성되므로 멀티 스레드 환경에서는 경쟁 문제가 없습니다.
자원 활용도 및 성능
게으른 모드 : Lazy 모드는 인스턴스 객체가 필요하지 않을 때 리소스 낭비를 방지하므로 리소스를 절약할 수 있습니다. 단, 처음 사용할 때 초기화를 해야 하기 때문에 초기화 과정이 복잡하거나 시간이 오래 걸릴 경우 성능에 영향을 줄 수 있습니다.
배고픈 모드 : Hungry 모드는 사용 여부와 상관없이 인스턴스 객체를 생성하기 때문에 리소스 활용 측면에서 Lazy 모드만큼 유연하지 않을 수 있습니다. 그러나 클래스가 로드될 때 인스턴스 객체가 이미 생성되므로 초기화가 필요하지 않으므로 첫 번째 호출에서 더 빠릅니다.
적용 가능한 장면
게으른 모드: 적용 가능객체가 처음 사용될 때만 생성되고 인스턴스 객체의 초기화 과정에서 복잡한 스레드 안전 요구 사항이 없는 시나리오입니다. . 예를 들어,파일 관리자이는 애플리케이션이 시작될 때 즉시 파일을 읽고 쓸 필요가 없고 필요할 때만 관련 작업을 수행할 수 있기 때문에 일반적인 예입니다.
배고픈 모드 : 프로그램 시작 시 초기화가 필요한 리소스에 적합하며, 애플리케이션의 라이프사이클 전반에 걸쳐 사용된다. 예를 들어, 로거는 Hungry Pattern에 적합한 후보입니다. 일반적으로 로깅 기능은 애플리케이션 시작 시 준비되어 있어야 하고 애플리케이션 런타임 전체에 걸쳐 메시지를 기록해야 하기 때문입니다.
요약하면, 게으른 사람 모드와 배고픈 사람 모드는 각각 고유한 장점과 단점이 있으며 실제 적용에서는 특정 시나리오에 따라 포괄적으로 고려하고 설계해야 합니다.
- 说一下事务的几种特性?
거래에는 다음과 같은 네 가지 기본 특성이 있습니다.산구체적으로 다음과 같은 기능이 포함됩니다.
원자성 : 원자성은 트랜잭션의 모든 작업이 완료되거나 실행되지 않음을 의미합니다. 트랜잭션 실행 중에 오류나 실패가 발생하면 수행했던 작업이 취소(롤백)되고 전체 트랜잭션은 발생하지 않은 작업과 같습니다. 이 기능은 트랜잭션 무결성과 일관성을 보장합니다.
일관성 : 일관성은 트랜잭션이 데이터베이스를 하나의 일관성 상태에서 다른 일관성 상태로 변환해야 함을 의미합니다. 트랜잭션 시작 전과 트랜잭션 종료 후에도 데이터베이스의 무결성 제약 조건(기본 키 제약 조건, 외래 키 제약 조건 등)이 파괴되지 않으며, 모든 데이터는 논리적 일관성을 유지합니다. 트랜잭션 실행 중에 데이터베이스 무결성이 손상되면 트랜잭션이 중단되고 수행된 작업이 롤백됩니다.
격리 : 격리란 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션이 서로 격리되어 하나의 트랜잭션 실행이 다른 트랜잭션의 방해를 받을 수 없음을 의미합니다. 데이터베이스 시스템은 동시에 실행되는 트랜잭션이 서로 간섭하지 않도록 일정 수준의 격리를 제공하여 데이터의 정확성과 일관성을 보장합니다. 격리는 일반적으로 잠금(예: 행 잠금, 테이블 잠금 등) 또는 다중 버전 동시성 제어(MVCC)와 같은 메커니즘을 통해 달성됩니다.
내구성 : 영속성이라고도 하는 내구성은 일단 트랜잭션이 커밋되면 데이터베이스에 대한 수정 사항이 영구적이며 시스템이 실패하더라도 손실되지 않음을 의미합니다. 데이터베이스 시스템은 로그 및 복구 메커니즘을 통해 트랜잭션의 내구성을 보장합니다. 시스템 장애가 발생하더라도 시스템은 로그를 통해 커밋된 트랜잭션을 통해 데이터베이스에 대한 수정 사항을 복구할 수 있습니다.
- 说一下你在做项目的过程中都遇到过哪些异常吗?(일부만 나열하세요)
코드 예외:
NullPointer예외 : 초기화되지 않은 객체에 액세스하거나 조작하려고 할 때 발생합니다. 객체가 null인지 확인하고 직접 사용하는 것을 잊어버리는 경우가 많습니다.
범위를 벗어난 배열 예외(ArrayIndexOutOfBoundsException): 배열에 접근할 때 잘못된 인덱스가 사용되었습니다(인덱스가 0보다 작거나 배열 크기보다 크거나 같습니다).
유형 변환 예외(ClassCastException): 캐스팅 시 변환되는 개체는 대상 유형이나 해당 하위 클래스의 인스턴스가 아닙니다.
ArithmeticException // 0으로: 나눗셈 연산을 수행할 때 제수는 0입니다.
데이터 예외:
데이터 형식 오류: 예를 들어 JSON 또는 XML 데이터를 구문 분석할 때 데이터 형식이 기대에 미치지 못합니다.
데이터 무결성 예외: 데이터베이스의 외래 키 제약 조건이 실패하면 데이터를 삽입하거나 업데이트하려고 할 때 데이터 무결성 규칙을 위반합니다.
데이터를 찾을 수 없음 예외: 데이터베이스 쿼리 시 주어진 조건에 따라 해당 데이터를 찾을 수 없는 경우.
네트워크 예외:
연결 시간 초과(ConnectTimeoutException): 네트워크 연결을 시도하는 동안 응답을 기다리는 동안 연결 요청 시간이 초과되었습니다.
읽기 시간 초과(SocketTimeoutException): 연결에서 데이터를 읽는 동안 작업 시간이 초과되었습니다.
네트워크에 연결할 수 없습니다(UnknownHostException).:호스트 이름을 확인할 수 없습니다.
연결이 거부되었습니다(ConnectionRefusedError).: 대상 컴퓨터가 연결 요청을 거부했습니다.
시스템 자원 예외:
메모리 오버플로(OutOfMemoryError): 메모리를 할당하려고 할 때 JVM에 사용 가능한 메모리 공간이 부족합니다.
파일이 존재하지 않습니다(FileNotFoundException): 액세스하려는 파일이나 디렉터리가 존재하지 않습니다.
권한 부족(SecurityException/AccessDeniedException): 파일 읽기 및 쓰기, 네트워크 리소스 접근 등의 작업을 수행하기 위한 권한이 부족합니다.
제3자 서비스 예외:
서비스를 사용할 수 없습니다(ServiceUnavailableException): 종속된 타사 서비스를 일시적으로 사용할 수 없습니다.
API 제한(RateLimitException): 타사 API에 대한 요청이 해당 제한(예: 요청 빈도 제한)을 초과했습니다.
인증 실패(AuthenticationException): 타사 서비스 접속 시 인증정보가 유효하지 않거나 만료되었습니다.
논리적 예외:
비즈니스 로직 오류: 예를 들어, 주문 금액이 잘못 계산되었거나, 재고가 부족하지만 주문이 처리되는 경우 등이 있습니다.
일관되지 않은 상태: 시스템의 특정 상태가 예상과 일치하지 않아 후속 작업이 불가능합니다.
- 说一下时间常用的三个类?
LocalDate, LocalTime, LocalDateTime. (3개만 나열해주세요)
Java에서 처리 시간에 일반적으로 사용되는 클래스는 Java 8에 도입된 세 가지 패키지 java.util.Date, java.util.Calendar 및 java.time 아래의 클래스입니다(예:현지날짜、현지시간、현지날짜시간기다리다)
- 说一下日历的三个方法?
달력 관련 작업에 관해서 우리는 일반적으로 java.util.Calendar 클래스를 생각합니다. 왜냐하면 이 클래스는 달력 필드(예: 연도, 월, 일, 시간 등)를 작동하기 위한 메서드를 제공하는 추상 클래스이기 때문입니다.Java 8부터 새로운 날짜 및 시간 API(java.time 패키지에 위치)가 도입되어 더 나은 날짜 및 시간 처리 기능을 제공합니다.
LocalDateTime의 일반적인 메서드 소개:
LocalDateTime 객체 생성
now(): 현재 날짜와 시간을 나타내는 LocalDateTime 객체를 생성합니다.
of(): 지정된 연도, 월, 일, 시, 분, 초(및 선택적 나노초)를 사용하여 LocalDateTime 객체를 생성합니다. 예: LocalDateTime.of(2023, Month.JANUARY, 1, 12, 0, 0).
LocalDateTime 객체의 속성을 가져옵니다.
getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond() 등: LocalDateTime 개체에서 각각 연도, 월, 일, 시, 분 및 초 속성을 가져오는 데 사용됩니다.
LocalDateTime 객체의 속성 수정
withYear(), withMonth(), withDayOfMonth(), withHour(), withMinute(), withSecond() 등: LocalDateTime 객체의 속성을 지정된 값으로 설정하고 새로운 LocalDateTime 객체를 반환합니다. 원본 객체는 변경되지 않은 상태로 유지됩니다. . 변수입니다(LocalDateTime은 변경할 수 없기 때문입니다).
날짜와 시간의 덧셈과 뺄셈
plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds() 등: 지정된 기간을 LocalDateTime 객체에 추가하고 새 LocalDateTime 객체를 반환합니다. minusYears(), minusMonths(), minusDays(), minusHours(), minusMinutes(), minusSeconds() 등: LocalDateTime 객체에서 지정된 기간을 빼고 새 LocalDateTime 객체를 반환합니다.
LocalDateTime 객체 비교
isBefore(LocalDateTime other): 현재 객체가 지정된 LocalDateTime 객체보다 이전인지 여부를 확인합니다.
isAfter(LocalDateTime other): 현재 객체가 지정된 LocalDateTime 객체보다 이후인지 여부를 확인합니다.
LocalDateTime 객체 형식 지정
format(DateTimeFormatter formatter): LocalDateTime 객체를 지정된 날짜 및 시간 형식의 문자열로 형식화합니다. 예: DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); String formattedDateTime = dateTime.format(formatter);.
시간차 계산
LocalDateTime 자체에서는 시차를 직접 계산하는 방법을 제공하지 않지만 Duration 클래스 또는 ChronoUnit 클래스를 사용하여 두 LocalDateTime 개체 간의 시차를 계산할 수 있습니다.
Duration 클래스를 사용하십시오: Duration Duration = Duration.between(start, end); 그리고 나서 Duration 객체를 통해 초, 밀리초 등과 같은 시간 차이의 구체적인 값을 얻을 수 있습니다.
ChronoUnit 클래스 사용: 연, 월, 일, 시간 등 시차를 계산하는 단위를 지정할 수 있습니다. 예: 긴 날 = ChronoUnit.DAYS.between(start, end);.
- 说一下session的生命周期吧。
세션 생성
생성시간:Session은 사용자가 처음 서버에 접속하여 JSP, Servlet 등을 요청할 때 사용됩니다.动态资源 언제 생성되었습니다.HTML, 이미지 등에 액세스하세요.静态资源 세션 생성이 실행되지는 않습니다. 필요한 경우 request.getSession(true)을 호출하여 강제로 세션을 생성할 수 있습니다.
저장 위치: 세션은 서버 측에 저장되며 일반적으로 빠른 액세스를 위해 서버 메모리에 저장됩니다.
세션 유지 관리
마지막 액세스 시간 업데이트: 사용자가 서버에 계속 액세스하는 한 서버는 세션의 마지막 액세스 시간을 업데이트하고 세션 읽기 또는 쓰기 여부에 관계없이 각 요청에 대해 세션을 유지합니다. 이는 사용자의 세션이 "활성" 상태에 있음을 나타냅니다.
세션의 고유성 : 각 사용자는 세션 ID로 고유하게 식별되는 독립적인 세션을 갖게 됩니다. 세션 ID는 일반적으로 서버가 다른 사용자 세션을 식별할 수 있도록 쿠키(JSESSIONID라는 이름)를 통해 클라이언트에 전송됩니다.
세션 파괴
자동으로 파기 : 세션 수명 주기가 시간 초과되면(즉, 오랫동안 활동이 없으면) 서버는 자동으로 메모리에서 해당 세션을 지웁니다. 이 시간은 일반적으로 구성 가능하며 Tomcat에서 기본값은 30분입니다.
수동 파기 : 개발자는 세션의 무효화() 메서드를 호출하여 세션을 수동으로 삭제할 수 있습니다. 이는 일반적으로 로그아웃 및 시간 초과와 같은 시나리오에 사용됩니다.
세션 수명주기 설정
서블릿에 설정: session.setMaxInactiveInterval(int 간격) 메서드를 호출하여 세션 시간 초과를 초 단위로 설정합니다.