기술면접

기술면접준비(4)_100선-1

개발자 배찌 2021. 6. 9. 10:45
728x90

1. 객체지향언어(Java, C++)와 구조적 언어(C)의 차이점 3가지만 든다면?

1) 클래스 & 구조체

공통점 : 멤버 필드 가짐.

차이점 : 멤버 메소드(함수) 존재 여부(클래스 有, 구조체 無)

2) 자료구조(컬렉션, STL)

C : 자료구조 미완. -> 사용자 작성

C++, Java : 자료구조 완비.

3) 예외처리, 추상클래스/인터페이스 존재 여부

-----------------------------------------------------------------------------------------------

객체지향의 3~5가지 속성

1) 상속성(계승성) : 오버라이딩, 기존 코드 재활용 등

2) 캡슐화 : 보안, 접근 제어자 등

3) 다형성 : 메소드 오버로딩, 연산자 (메소드) 오버로딩(C++) 등

2. 자바의 문자열 비교와 C언어의 문자열 비교는 어떤 차이가 있는가?

Java 문자열 : 자료형 있음(String). 자료형이면서 클래스이기 때문에 멤버 메소드.

                  문자열 동등 비교의 경우 단순 대입시는 == 연산자 사용가능.

                  복합적인 대입 형태의 경우 equals 메소드 사용(추천).

C 문자열 : 관련 함수 다량 보유. 문자열 자료형이 없이 char 배열이나 포인터(가변 배열)을 문자열 처리에 사용.

              직접 대입 불가.

              반드시 strcpy, sprinf 같은 문자열 함수 사용.

              C언어는 비교 함수사용/일일이 비교.

C : char = 1byte, Java : char = 2byte

"함수 보유량 유사. 문자열 자료형(클래스) 유무. 대입 용이"

3. 자바의 클래스와 C언어의 구조체의 차이점?

1) 번 참조. 멤버 메소드의 유무.

4. C언어 구조체와 공용체의 차이점 ?

메모리 "공유" 할당의 차이

ex) 구조체의 필드 2개가 있다고 가정.

구조체 -> 2개가 별도의 메모리 할당.

공용체 -> 1개의 변수분량으로 메모리 공유.

참고) C : 32비트(4바이트) 단위로 메모리 할당.

5. 자바의 배열과 List 컬렉션 간의 차이점 ?

배열 : 클래스 객체가 아님. 멤버들(변수, 메소드) 보유(X)

List : 배열처럼 순차적인 구조(순번, index 있음).

인터페이스/클래스 객체 멤버 메소드(다양한 기능).

6. Vector, ArrayList의 차이점 ?

1차원 배열 구조(공통점). 둘다 List 인터페이스 구현(공통).

스레드 동기화 지원(Vector). 미지원(ArrayList)

일반적으로 스레드 사용빈도가 낮기 때문에 스레드 동기화 지원이 성능 저하의 원인-> ArrayList에서는 성능향상/현실화(스레드 동기화 배제) -> 대부분이 ArrayList를 많이 사용 !

스레드 사용시 -> Vector가 우세.

스레드 미사용시 -> ArrayList가 우세.

7. Hashtable 과 HashMap의 차이점 ?

6) 풀이와 유사. 스레드 지원 -> Hashtable,

스레드 미지원 ->HashMap

스레드 사용시 -> Hashtable가 우세.

스레드 미사용시 -> HashMap가 우세.

8. toString 메소드를 DTO(VO)에서 overrding 하였을 때의 장점은 ?

toString : Object 소속의 메소드. 객체 고유값(클래스명@해쉬코드) 리턴.

1) 객체지향의 "재사용성(상속성)" -> getters의 역할 메소드 toString하도록 유도.

2) 메소드의 "의미"적으로도 변환(casting) 의미 -> 객체 ---> 문자열(객체의 내용을 문자열화)

조쉬아 블로크 (세계적인 권위자) effetive java 에서 인용됨.

"toString은 반드시 항상 재정의하여 사용하라"

9. DTO 모델에서 오버로딩된 생성자를 사용할 때의 장점은?

오버로딩된 생성자에서 인자(인수)를 받아서 멤버필드들에 대입.

(인스턴스 생성시) 멤버 필드 "초기화" 일부/한꺼번에 할 수 있다.

그렇지 않게 되면 필드별로 한개씩있는 setter(set 메소드)를 일일이

사용해야 된다 -> 코드량이 증가 !

10. 싱글턴 패턴이란 무엇인가?

상속(계승)받지도 상속하지 않는 독자적인 클래스.

보안성 강조. ex) 시험 출제자, 조폐공사, 은행 근무자 비유.

ex) DAO 객체의 싱글턴화

-> 데이터베이스 조작(DML)의 보안성 유지.

1) 기본 생성자 -> private화

2) 대체 생성자 getInstance() 정적(staitc)/final 메소드

ex) Calendar cal = Calendar.getInstance(); // 날짜 -> 보안성

11. DTO getter/setter 의 역할

멤버 필드 -> private화 --> 멤버 필드 접근 메소드(getter/setter)

: "멤버 필드의 값 설정/획득", 코드 변환, 암호화/복호화 등

-> eclipse의 자동화 기능으로 (자동) 생성.

12. equals 메소드를 오버라이딩해서 쓸 때의 장점 ?

VO에서 equals를 오버라이딩 -> 객체 내부의 필드별로 일일 값을 비교, 객체 생성 여부, 객체 해당 클래스에서 비롯된 여부 확인(instanceof 사용) -> eclipse의 자동화 기능으로 (자동) 생성.

참고) hashCode() 재정의(오버라이딩)의 경우 : 객체가 동일한 필드값을 가질 경우 동일한 hashcode 생성 -> 필드값 동등 비교

: "멤버 필드들의 값의 동등 여부 점검".

원래의 hashcode는 객체마다 차이 있음(고유값).

ex) 주민번호, 사원번호 등

13. 문자열을 분리하는 split 과 StringTokenizer의 공통점과 차이점 ?

1) 공통점 : 문자열 분리 기능.

2) 차이점 : split -> 분리 -> 문자열 배열

StringTokenizer -> 분리 -> 반복자(Iterator) 패턴 방식 분리

: 속도 빠르다. 전문화된 클래스로써의 장점.

14. Iterator를 사용하는 것과 연번(index)을 사용한 반복문의 차이점 ?

반복자(Iterator) 패턴 -> 순번(index) 쓰지 않고, "다음(혹은 이전)" 요소로 검색하는 방식 -> 순번 검색 방식 보다는 다량 검색시 성능이 빠르다.

순번 검색(index) 상대적으로 느리지만, 순번을 꼭 사용할 경우

적합.

참고) ListIterator : Iterator의 서브 인터페이스로써 "이전"으로의 검색기능이 있음. "다음" 검색 기능 기본 포함.

15. 리스트의 내용을 역순으로 정렬을 하기 위해서는 어떤 컬렉션을 사용하는 것이 유리한가?

TreeSet -> 자동 오름차순 정렬

1) descendingIterator 역순정렬 반복자 지원 -> 인쇄

2) descendingSet : Set 자체를 역순정렬로 치환

-> Iterator 반복자 -> 인쇄

- Collections.sort(컬렉션 객체, Comparator.reverseOrder()), ArrayList ==> sort(Comparator.reverseOrder())

16. DAO를 싱글턴 패턴으로 사용하는 사유 ?

10번과 유사 문제. DB 조작은 중요한 작업 -> 보안

---------------------------------------------------------------------------------------------------------------

17. JDBC 커넥션 부분을 생성자에 기입하는 것과 CRUD 메소드별로 기입하는 방식의 차이점?

1) 생성자 기입 : DAO (싱글턴) 객체 생성시 연결

---> 객체 소멸(연결 해제)

: DB 연결성 "유지(선점)" : 장점

: 작업하지 않을 경우 자원 낭비 : 단점

2) CRUD 메소드별로 연결 -> 메소드 사용후 연결 해제

: 사용시만 연결 -> 해제 : 자원 효율적 사용 : 장점

: DB 연결 유지/선점 불이익 : 단점

18. ORM 이란 무엇인가?

Object Relational(Relationship) Mapping.

데이터베이스 (사용) 전문 프레임웍(framework)

데이터베이스(JDBC) 프로그래밍을 보다 쉽고 전문적으로 할 수 있도록 도와줌.

ex) iBatis, MyBatis, JPA, Hibernate 등등

19. form validation 할수 있는 방법을 아는 대로 3가지 이상 언급하시오.

폼 (컴포넌트 유효성) 점검 : form validation

1) javascript/jQuery 등의 client script를 이용하는 법

: 웹브라우저 이외의 별도의 서버 불필요(비동적 방법 제외).

타방법 보다는 신속.

: 소스가 노출(보안 취약) : 단점.

: 웹브라우저별 호환성 문제 고려 ! : 단점

2) Spring이나 Struts 등의 프레임웍에 내장된 폼점검 툴을 이용

: Spring validator, Struts validator 사용

: 코드 은닉 (보안 강화) : 장점

: javascript 방법 보다는 서버/라이브러리 의존도 높고,

상대적으로 느림.

: 폼점검 메소드(validate)에 오버라이딩 하는 방식 사용.

3) JPA 프레임웍의 폼점검 사용

: VO(DTO)에 폼점검 사항을 "annotation"으로 표기

: 상대적으로 2) 방법 보다는 코드가 단순.

4) 자체적으로 제작한 Java code 사용

: 사용자 제작의 어려움.

: 속도는 상대적으로 javascript보다 느림. 보안적으로 안전.

20. oracle 11g에서는 level 이라는 필드를 만들 수 없다. 이유는 ?

키워드나 키워드 연관어는 사용자 필드로 사용 불가.

21. 제네릭스를 왜 사용하는가? 사용시 장점을 컬렉션 입장에서 설명해보세요.

컬렉션에서 많이 사용. 컬렉션의 (유입) 요소를 제한 -> 성능 강화.

if 만약 모든 요소가 다 유입되면(가정) ---? 성능 저하 !

단점. 미사용시 보다 상대적으로 코드량 길어짐.

ex) ArrayList list = new ArrayList();

ArrayList<Array<String>> list

= new ArrayList<ArrayList<String>>();

22. C++에서의 다중상속과 자바에서의 다중 상속의 차이점을 설명하세요.

C++ 식의 다중 계승 : 다이아몬드 상속(계승) : 조부모 클래스 같으면 부모/다른 조부모 계승(삼촌) 클래스에서 동시 상속 가능.

Java : 인터페이스는 다중 상속 가능.

(추상/일반)클래스는 다중 상속 불가 !

23. 인터페이스와 클래스의 차이점은 ?

인터페이스 :

1) 멤버 필드 : 상수(불변의 수, 초기값이 대입된 변수)만 허용.

final 키워드 사용하지 않아도 묵시적으로 final로 인식.

ex) String name; // (X), (final) String name = "abcd";

2) 생성자 :

인터페이스는 아예 생성자 없음. 추상 클래스는 생성자가 있지만 명시적으로 사용할 수는 없음. 상속된 클래스의 생성자를 사용시 자동적으로 호출.

3) 일반 멤버 메소드 :

인터페이스는 Java 모든 버전의 공통의 경우.

: 추상 메소드만 허용.

참고) Java 1.8 : static/main 메소드 허용(구현부가 있음) -> 테스트

24. 인터페이스를 써야 하는 이유는?

★ 이상적인 OOP(객체 지향 프로그래밍) 방법론 :

인터페이스 "지시, 명령" 에 관한 객체 ---> 클래스 구현

대외적 : 인터페이스 - 메뉴,

대내적 : 지시, 명령

25. 확장 for와 일반 for의 차이점은 ?

확장 for : enhanced for loop -> 순번이 아닌 반복자(Iterator) 패턴 방식의 검색 : 빠르다. 2개의 문장.

일반 for : 3개의 문장. 순번을 사용하여 검색. 상대적으로 느림.

26. while 과 do ~while의 차이점은 ?

조건문의 위치 -> 앞/뒤

27. 무한반복문을 for로 만들려면 어떻게 하면 되는가?

한계치 부분(조건문)을 생략 -> 무한 반복문

ex) for (int i=0; (생략) ;i++) {.....}

28. HashSet과 HashMap의 차이점은 ?

Set : 중복 불허. 1개의 키로만 구성.

Map : 키의 중복 불허. 2개씩(짝, pair)로 구성.

29. Vector에서의 size()와 capacity()의 차이점은?

size : 실제 요소의 수.

capacity : 벡터의 용량.

ex) 500 CC(용량:capacity) 그릇에 물 200CC(크기:size) 들어 있다.

30. C언어의 void와 Java에서의 void의 공통점과 차이점?

C void : 인자, 결과값(리턴)이 없음.

Java void : 결과값(리턴)이 없음.

31. 예외처리시 try~ catch 처리와 throws 처리의 차이점 ?

try ~ catch : 블럭 단위로 예외처리

throws : 메소드 단위로 예외처리

32. 예외처리에서 finally의 역할은 ?

예외처리에서 마무리 코드가 필요시 사용.

33. thread의 라이프 사이클에 대해서 언급하시오.

실행 사례)

스레드 생성(Runnable 인터페이스 구현법, Thread 클래스 상속)

-> Runnable 상태(대기 상태)

-> 실행

(-> 블럭(일시정지) : sleep

-> 일시정지

-> Runnable 상태(대기상태) : notify(All)

-> 실행 )

-> 종료(소멸)

34. thread의 동기화란 무엇인가?

스레드간의 경쟁이 심화될 때 스레드 실행 기회를 균등하게 조정하는 기능.

ex) 교통정리

35. thread에서 우선순위를 사용할 경우 주의할 사항은?

우선순위 : 기본 스레드의 우선순위(5).

우선순위 사용시 순위가 높은 스레드가 스레드 실행 시간 등의 점유율이 다소 증가 -> 잘못 심화되면

-> 교착 상태(deadlock) 유발 가능성 !

36. thread에서 비추천(deprecated) 항목이 적지 않은 이유는?

시행 착오 과정에서 교착 상태에 대한 대응이 제대로 이루어지 않음.

교착 유발하는 메소드 발생 -> 비추천.

ex) resume, stop, suspend 등

37. byte 스트림과 character 스트림의 차이점은?

전송 단위 : 1바이트(바이트 스트림), 2바이트(character 스트림)

38. 이중 필터 스트림을 사용할 경우의 장점은?

특정 부가 기능 사용 가능 !

ex) BufferedInputStream

: buffer라는 구조를 사용하여 "한꺼번"에 전송

39. 접근 제한자를 개방성과 폐쇄성의 입장에서 순서대로 언급하시오.

개방적<----                                   --> 폐쇄적

public > protected > default(package) > private

 

40. final 키워드를 클래스, 메소드, 변수 입장에서 설명하시오.

1) 클래스 : 상속 금지

2) 메소드 : 오버라이딩 금지

3) 변수 : 상수화