자바 실습-매일 카드 10 문제 면접!

1.만 이 진 트 리,완전 이 진 트 리,균형 이 진 트 리,붉 은 검 은 나무,이 진 트 리 의 차이 점 은?
나무,이 진 트 리(완전 이 진 트 리,만 이 진 트 리)개념 도해
① 이 진 트 리 가득
높이  h  2^h-1 개의 노드 로 구 성 된 이 진 트 리 를 만 이 진 트 리 라 고 부른다.

② 완전 이 진 트 리
완전 이 진 트 리 는 이 진 트 리 에 의 해 만들어 진 것 으로 이 진 트 리 의 깊이 는?  h, h  층 을 제외 하고 다른 각 층(1~h-1)의 결 점 수 는 모두 최대 개수(즉 1~h-1 층 은 만 이 진 트 리)에 달 했 고  h 번 째 층 의 모든 결점 이 연속 으로 가장 왼쪽 에 집중 되 는데 이것 이 바로 완전 이 진 트 리 이다.
무 더 기 는 일반적으로 완전 이 진 트 리 로 이 루어 진다.

③ 이 진 트 리 찾기
이 진 트 리 는 이 진 트 리 에서 가장 많이 사용 되 는 유형 으로 빠 른 검색 을 위해 서 입 니 다.한 개의 수 를 빠르게 찾 을 수 있 을 뿐만 아니 라 빠 른 삽입 과 삭제 도 지원 합 니 다.이 진 트 리 의 이러한 성능 은 이 진 트 리 의 특수 한 구조 에 의존 합 니 다.이 진 트 리 의 요 구 를 찾 습 니 다.나무 에 있 는 임의의 노드 는 왼쪽 트 리 의 모든 노드 의 값 이 이 노드 의 값 보다 작 아야 하고 오른쪽 트 리 노드 의 값 은 이 노드 의 값 보다 커 야 합 니 다.
④ 검 붉 은 나무
빨간색 과 검은색 나무의 장점 은 균형 이 잡 힌 이 진 트 리 를 찾 는 것 이다.일반적인 이 진 트 리(불 균형 이 진 트 리 찾기)는 극단 적 인 상황 에서 링크 의 구조 로 퇴화 할 수 있다.예 를 들 어 우리 가 3,4,5,6,7,8 등 데 이 터 를 순서대로 삽입 할 때 이 진 트 리 는 다음 과 같은 링크 구조 로 퇴화 할 수 있다.

빨간색 과 검은색 나 무 는 약 한 균형 이 진 트 리(검은색 노드 만 완벽 하 게 균형 을 이 루 고 빨간색 노드 가 일정한 균형 을 이 루 지 않 음)로 특수 한 이 진 트 리(균형 이 진 트 리 찾기)이다.
⑤ 밸 런 스 이 진 트 리
AVL 트 리 는 밸 런 스 조건 이 있 는 이 진 트 리 로 밸 런 스 인자 차이 로 밸 런 스 여 부 를 판단 하고 회전 을 통 해 밸 런 스 를 이룬다.좌우 트 리 는 높이 가 1 을 넘 지 않 고 레 드 블랙 트 리 에 비해 AVL 트 리 는 엄격 한 밸 런 스 이 진 트 리 로 밸 런 스 조건 이 충족 되 어야 한다(모든 노드 의 좌우 트 리 높이 차 의 절대 치 는 1 을 넘 지 않 는 다).
우리 가 삽입 을 하 든 삭제 작업 을 하 든 위의 조건 을 만족 시 키 지 않 으 면 회전 을 통 해 균형 을 유지 해 야 한다.회전 은 매우 오래 걸 리 기 때문에 AVL 트 리 가 삽입 과 삭제 에 적합 하 다 는 것 을 알 수 있 지만 많은 상황 을 찾 을 수 있다.
2.IP 주소 분류
ABCDE 5 종 류 는 A,B,C 가 기본 클래스 이 고 D,E 는 멀티캐스트 와 보류 용 으로 특수 주소 이다.
  • A 류 주소:0 으로 시작 하 는
  • B 류 주소:10 으로 시작 하 는
  • C 류 주소:110 으로 시작 하 는
  • D 클래스 주소:1110 으로 시작 하 는
  • E 류 주소:1111 로 시작 하여 보존 주소
  • 3.악 수 를 세 번 하 는 과정 에서 데 이 터 를 휴대 할 수 있 습 니까?
    세 번 째 악 수 는 데 이 터 를 휴대 할 수 있 지만 첫 번 째,두 번 째 는 안 된다.
    원인:이런 장면 을 상상 해 보 자.첫 번 째 악 수 는 데 이 터 를 휴대 할 수 있 고 누군가가 서버 를 악의 적 으로 공격 하려 고 한다 면 그 는 매번 첫 번 째 악수 에 있 는 SYN 메시지 에 대량의 데 이 터 를 넣 어 서버 로 하여 금 많은 시간 과 공간 을 들 여 메 시 지 를 처리 하 게 할 것 이다.
    첫 악 수 는 데 이 터 를 넣 지 못 해 서버 의 안전성 을 확보 한 것 이다.세 번 째 악 수 를 할 때 연결 이 성공 적 으로 이 루어 졌 고 클 라 이언 트 가 데 이 터 를 가지 고 서버 에 도착 하 는 것 도 이해 된다.
    4,SYN 공격 은 무엇 입 니까?
    개념:Client 는 짧 은 시간 에 존재 하지 않 는 ip 주 소 를 대량으로 위조 하여 서버 에 SYN 패 키 지 를 계속 보 내 고 서버 는 확인 패 키 지 를 답장 하 며 Client 확인 을 기다 리 고 있 습 니 다.이 패 키 지 는 연결 되 지 않 은 대기 열 을 장시간 점용 하여 다른 정상 적 인 SYN 요청 이 대기 열 이 가득 차 서 네트워크 가 막 히 거나 시스템 이 마비 되 었 습 니 다(Dos/DDoS 공격).
    어떻게 검사 합 니까?대량의 반 연결 상 태 를 보고 원본 주소 IP 가 무 작위 일 때 SYN 공격(Linux 의 netstat 명령)으로 단정 할 수 있 습 니 다.
    해결 방법:SYN 가방 의 만 료 시간 을 단축 하고 게 이 트 웨 이 보호,방화벽 등 을 걸 러 냅 니 다.
    5.스 레 드 스케줄 링 전략?
    시간 대별 스케줄 링 모델,선점 식 스케줄 링 모델.
    선점 식 스케줄 링 모든 스 레 드 가 실 행 된 시간,스 레 드 의 전환 을 말 합 니 다.시스템 통 제 는 시스템 의 특정한 운영 체제 에서 모든 스 레 드 는 이 고 일부 스 레 드 가 실 행 된 일 수도 있 습 니 다.심지어 일부 스 레 드 는 일 수도 있 습 니 다.이런 메커니즘 하에 서 .
    **협동 식 스케줄 링**은 특정한 스 레 드 을 말 합 니 다.이런 모델 은 입 니 다.한 사람 이 자신의 거 리 를 뛰 고 나 면 바통 을 다음 사람 에 게 넘 기 고 다음 사람 은 계속 내 려 갑 니 다.스 레 드 의 실행 시간 은 , , 이지 만 치 명 적 인 약점 이 있 습 니 다.스 레 드 작성 에 문제 가 있 으 면 절반 까지   을 실행 하면 시스템 전체 가 무 너 질 수 있 습 니 다.
    JVM 은 선점 식 스케줄 링 모델 을 채택 한다.
    6.왜 wait,notify 는 Object 에 정의 되 어 있 습 니까?
    ① JAVA 가 제공 하 는 자 물 쇠 는 대상 급(대상 마다 Monitor 모니터 라 고 불 리 는 자물쇠 가 있 음)이 며,스 레 드 급 이 아 닌 대상 마다 자물쇠 가 있 으 며,스 레 드 를 통 해 자 물 쇠 를 얻 을 수 있 으 며,하나의 스 레 드 로 여러 개의 자 물 쇠 를 얻 을 수 있 습 니 다.Object 모든 대상 의 최상 위 부모 클래스 이기 때문에 대상 자 물 쇠 를 통일 적 으로 설정 합 니 다. Object 이렇게 Jvm 은 어떤 대상 이 잠 긴 대기 탱크 에서 스 레 드 를 깨 워 야 하 는 지 쉽게 알 수 있 을 것 이다.그렇지 않 으 면 그것 은 어떤 것 을 조작 해 야 할 지 전혀 모른다.
     wait/notify/notifyAll  하면,만약,만약...  wait/notify/notifyAll  방법 정의 Thread 클래스 에서 매우 큰 한계점 을 가 져 올 수 있다.
  •  예 를 들 어 하나의 라인 은 서로 협조 하 는 복잡 한 논 리 를 실현 하기 위해 여러 개의 자 물 쇠 를 가지 고 있 을 수 있다.이때  wait()  방법 이 Thread 클래스 에서 이것 은 다음 과 같은 두 가지 문 제 를 만 날 수 있다.
  • 은 어떻게 한 라인 에 여러 개의 자 물 쇠 를 가지 게 합 니까?
  • 은 어떻게 라인 이 그 자 물 쇠 를 기다 리 고 있 는 지 명확 하 게 합 니까?
  • 쉽게 말 하면 wait,notify notifyAll 은 모두 잠 금 단계 의 조작 이기 때문에 그들 을 Object 클래스 중 자 물 쇠 는 대상 에 속 하기 때문이다.
    7.왜 wait,notify 는 동기 화 방법 이나 동기 화 블록 에서 호출 되 어야 합 니까?
    왜냐하면 방법 호출 시 대상 자 물 쇠 를 풀 어 줍 니 다.스 레 드 호출  wait() 의 전제 조건 은 이 대상 의 자 물 쇠 를 가 져 야 한 다 는 것 이다.그 다음 에 풀 어 주 고 기 다 려 야 한다.만약 에 달성 하면  wait() 후 자물쇠 에 들 어 갑 니 다.
    8.yield()와 sleep()의 차이 점 은?
    (1)  notify() 방법 은 다른 스 레 드 운행 기 회 를 줄 때 스 레 드 의 우선 순 위 를 고려 하지 않 기 때문에 낮은 우선 순위 의 스 레 드 를 운행 할 기 회 를 줄 수 있 습 니 다.sleep() 방법 은 같은 우선 순위 나 더 높 은 우선 순위 의 스 레 드 만 운행 할 수 있 는 기 회 를 줄 수 있 습 니 다.
    (2)스 레 드 는 yield() 방법 을 실행 한 후 차단(blocked)상태 로 전환 하고  sleep()  방법 을 실행 한 후 준비(ready)상태 로 전환 합 니 다.
    (3) yield()  방법 을 사용 할 때 성명 을 제출 해 야 한다. 중단 예외,그리고  sleep()  방법 은 어떠한 이상 도 성명 할 필요 가 없다.
    9.제출 할 때 스 레 드 탱크 대기 열 이 가득 차 면 무슨 일이 발생 합 니까?
    (1)무한 대기 열 을 사용한다 면 링크 드 BlockingQueue,차단 대기 열 에 작업 을 계속 추가 하여 실행 을 기다 릴 수 있 습 니 다.왜냐하면 LinkedBlockingQueue 무한대 의 대열 이 라 고 생각 할 수 있 고 임 무 를 무한 저장 할 수 있다.
    (2)경계 대기 열 을 사용한다 면 예 를 들 면 Array BlockingQueue,작업 이 먼저 추 가 됩 니 다. ArrayBlockingQueue 중,Array BlockingQueue 차다  yield()   의 값 은 스 레 드 수량 을 증가 시 킵 니 다.스 레 드 수량 이 증가 하면 처리 할 수 없습니다.Array BlockingQueue 계속 가득 차 면 거부 정책 을 사용 합 니 다. RejectedExecutionHandler 가득 찬 작업 을 처리 합 니 다.기본 값 은 중지 정책 입 니 다. AbortPolicy。
    10.JVM 변조 파라미터 참조
    주:이 두 가 지 는 간단 한 참고 로 나중에 이 지식 구 를 연구 하고 글 을 써 서 여러분 께 공유 하 겠 습 니 다.
    ① 쌓 인 매개 변수 조정
  • 통과  maximumPoolSize  더미 의 최소 값,최대 값 을 제한 하고 쓰레기 수집 기 가 최소,최대 사이 에 쌓 이 는 것 을 방지 하기 위해 추가 시간 이 발생 하 며 보통 최대,최소 값 을 같은 값 으로 설정 합 니 다.
  • 젊 은 세대 와 늙 은 세대 들 은 기본 적 인 비율(1:2)에 따라 메모리 더 미 를 분배 할 것 이다.젊 은 세대 들 이 쓰레기 회수(더 미 를 쌓 는 공간 비율 이 계속 변화 하면 서 더 미 를 쌓 는 크기 의 수치 가 계속 조정 되 고 트리거 한도 값 은 40%,70%)를 우리 들 은 보통  -Xms -Xmx 을 같은 크기 로 설정 합 니 다.
  • 젊 은 세대 와 늙 은 세대 가 얼마나 설치 해 야 합 리 적 입 니까?
    1)더 큰 젊 은 세 대 는 반드시 더 작은 늙 은 세 대 를 초래 하고 큰 젊 은 세 대 는 일반 GC 의 주 기 를 연장 하지만 매번 GC 의 시간 을 늘린다.어린 연 로 는 더 잦 은 Full GC 로 이 어 질 수 있다.
    2)더 작은 젊 은 세 대 는 반드시 더 많은 늙 은 세 대 를 초래 하고 작은 젊 은 세 대 는 일반 GC 가 빈번 하지만 매번 GC 시간 이 더 짧다.큰 연 로 는 풀 GC 의 주파 수 를 줄 일 수 있다.
    응용 프로그램 대상 의 생명주기 에 의존 해 야 하 는 분포 상황 을 어떻게 선택 합 니까?만약 에 응용 에 대량의 임시 대상 이 존재 한다 면 더욱 큰 젊 은 세 대 를 선택해 야 합 니 다.상대 적 으로 많은 지구 대상 이 존재 한다 면,나이 든 세대 가 적당히 커 져 야 한다.그러나 많은 응용 프로그램 들 이 이런 뚜렷 한 특성 을 가지 고 있 지 않다.
    선택 할 때 다음 과 같은 두 가 지 를 근거 로 해 야 한다.
  • 은 Full GC 를 최대한 적 게 하 는 원칙 에 따라 나이 든 세대 가 상용 대상 을 최대한 캐 시 하도록 하 는 것 이 며,JVM 의 기본 비율 1:2 도 이와 같다.
  • 관찰 을 통 해 한 동안 응용 한 결과 다른 피크 시대 에 나이 든 세대 가 얼마나 많은 메모 리 를 차지 하 는 지 살 펴 보고 Full GC 에 영향 을 주지 않 는 전제 에서 실제 상황 에 따라 젊 은 세 대 를 확대 할 수 있다.예 를 들 어 비례 를 1:1 로 조절 할 수 있다.그러나 나이 든 세대 에 게 적어도 1/3 의 성장 공간 을 남 겨 야 한다.
  •  ② 스 택 의 매개 변수 조정
    모든 스 레 드 는 기본적으로 1M 의 스 택 을 엽 니 다.스 택 프레임,호출 매개 변수,부분 변수 등 을 저장 하 는 데 사 용 됩 니 다.대부분의 응용 에 있어 서 이 기본 값 은 너무 크 고 보통 256 K 만 사용 하면 됩 니 다.
    이론 적 으로 메모리 가 변 하지 않 는 상황 에서 모든 스 레 드 의 스 택 을 줄 이면 더 많은 스 레 드 를 만 들 수 있 지만 이것 은 실제 적 으로 운영 체제 에 제한 을 받는다.
    총결산
    이 글 은 여기까지 입 니 다.당신 에 게 도움 을 줄 수 있 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 기 를 바 랍 니 다!

    좋은 웹페이지 즐겨찾기