코딩 개념 Story

코딩 인터뷰에 관한 공부 [1장]

WhiteDuck 2015. 12. 1. 22:57

1. 변수 (Variables)

 수학에서의 x^2 +y = 3 과 같이 데이터를 저장하기 위한 데이터를 나타내는 이름을 의미합니다.

 

2. 자료형 (Data Type)

미리 특정지어진 값들을 가지는 데이터의 집합으로 크게 시스템정의형과 사용자정의형으로 구분됩니다

컴퓨터는 01로 채워지는 2진수를 사용하기 때문에 프로그램 언어를 사용하는 개발자들을 위해서 여러 바이트를 조합하여 제공되는 자료형을 시스템정의형 자료형이라고 합니다.

사용자 정의형은 프로그램을 하다보면 시스템에서 정의하지 못한 자료형들을 사용자가 원할 경우 직접 사용자가 기존의 시스템정의형 자료형을 조합하여 만들어낸 자료형을 사용자 정의형 자료형이라고 합니다.

 

3. 자료구조 (Data Structure)

데이터를 처리할 변수를 조작할 매커니즘을 말합니다. 즉, 데이터를 저장하고 구조화하는 특별한 형태입니다,

구조화의 형태에 따라 선형, 비선형 자료구조로 구분되며 선형 자료구조는 큐, 스택, 연결리스트등이 있고, 비선형 자료구조는 트리, 그래프등이 있습니다.


4. 추상자료형 (Abstruct Data Type - ADTs)

추상 자료형은 자료구조와 연산을 합친 것을 말합니다. 예를 들어 스택은 자료구조에서 LIFO(Last In Fisrt Out) 매커니즘을 사용하고 연산자인 pop, push등이 추상자료형으로 사용됩니다.


5. 메모리와 변수

변수가 선언되면 컴파일러는 이미 확보해놓은 메모리에 변수의 크기만큼 블록을 할당합니다. 또한 변수이름과 할당된 바이트의 첫번째 주소를 연결짓는 태그를 유지합니다. 


6. 포인터(Pointer)

다른 변수의 주소를 보관할 수 있는 변수입니다.

포인터의 사용용도는 배열, 동적할당, 함수 포인터등이 있습니다.


7. 실제와 형식변수 (Actual and Formal Parameters) 

A가 B를 호출할때 A의 인자를 실제 매개변수라 하고, B의 파라미터를 형식매개변수라고 합니다.


8. 값에 의한 전달 (pass by value)

값을 복사하여 전달

저장공간 할당에 의한 비효율성, 값 복사에 의한 비효율성, 객체와 배열에 대한 복사는 비용이 많이 들어감


9. 결과에 의한 전달 (Pass By Result)

범위내의 지역변수로 사용, 그러므로 함수 내부에서 초기화후 사용을 해야하며, 결과는 해당 실제 매개변수로 복사하여 들어가게 됩니다.


10. 값과 결과에 의한 전달(Pass By Vaule-result)

값을 복사하여 전달받고 결과를 실제 매개변수에 복사합니다.


11. 참조에 의한 전달(Pass by Reference)

형식 매개변수는 실제 매개변수의 별칭으로 사용되며 할당공간과 시간에 있어 효율적입니다.

수많은 잠재적인 경우가 발생할 수 있으며 프로그램 가독성이 떨어집니다.


12. 이름에 의한 전달(Pass by Name)

형식 파라미터가 사용될 때마다 인자의 명칭이 전달되는 파라미더의 명칭으로 덮어 써집니다.


13. 바인딩(Binding)

이름을 그걸 포함하는 것에 연결하는 작업입니다.


14. 스코프(Scope)

변수의 바인딩 변경이 없거나 최소한 변수의 재선언이 허락되지 않는 최대 범위를 말합니다. 어떻게 변수와 관련된 이름을 참조할 지 결정합니다.


15. 기억영역 분류

변수 혹은 객체에 할당된 기억영역과 이러한 할당이 얼마나 지속되어야 하는지 결정합니다.

1) 자동기억영역 auto

함수가 호출될때 할당하고 함수가 종료될 때 해체합니다. C언어의 기본변수는 자동변수입니다.

2) 외부기억영역 extern

함수 외부에서 선언되기 때문에 프로그램 전체 생존주기 동안 살아있습니다. 초기화되지 않은 변수를 참조하면 에러가 발생합니다. 또한 초기화는 1번만 수행하여야 합니다. 외부변수는 초기화는 할 수 있으나 전역적으로 할당을 할 수 없습니다.

3) 레지스터 기억영역 register

레지스터에 저장되는 변수

4) 정적 기억영역 static

프로그램이 종료될 때까지 지속됩니다.


문제 1) 네임 맹글링이란 무엇인가요?

C에서는 변수에 심볼을 매칭하기 위해서 '_'를 붙이는 데 c++ 에서는 함수의 오버로딩으로 여러함수를 동시에 연결할 수 없게 됩니다.

그래서 C++의 링커는 네임맹글링을 사용하는데 C++컴파일러가 동일한 이름의 하수와 변수들을 라인 식별자, 인자 크기등의 확장된 정보들을 가진 어떤 명칭으로 변경하고 연결하기 위한 매커니즘입니다.


문제 2) C++과 Java의 닮은 점과 차이점은 무엇인가요?

 

 C++

Java 

 지원

 typedef 

 enum

 preprocessor

 구조체

 유니온

 모든 프로그램은 main이 필요

 다중 상속

 자동형변환

 포인터

 스코프 해석 연산자 ( :: )

 char 1바이트

 정적 메모리 -> 컴파일시, 동적 메모리 -> 실행시 인스턴스화

 초기화하지 않으면 쓰레기 값을 가짐

 소멸자

 다중 정의(오버로딩)의 default 제공

 템플릿

 제네릭

 virtual 제공 : 정적 바인딩

 연산자 다중 정의

 모든 클래스는 Object클래스를 상속

 함수나 메서드는 클래스 내에 생성

 interface(abstract base class) 지원 : 함수선언와 상수만으로 이루어진 클래스

 String 객체, StringBuffer 객체

 배열길이 메소드 length 제공

 boolean형 제공

 조건문 boolean형으로 판단

 char 2바이트

 모든 원시자료형 -> 컴파일시, 모든 객체 -> 실행시 인스턴스화, 실행시 객체를 인스턴스화 할 수 있도록 Wrapper class 제공

 생성자는 복사되는 것을 막기 위해서 참조에 의한 전달을 제공

 가비지콜렉터

 멀티쓰레딩

 final 제공 : 정적 바인딩

 공통

 클래스 객체를 인스턴스화 하지 않아도 호출할 수 있는 클래스(static) 메서드나 함수를 지원

 다중 정의(오버로딩) 생성자 지원

 다른 언어로 작성된 함수 호출 가능 : 네이티브 메소드, 애플릿 예외

* public, private, protect를 지원하나 의미 다름  _(조사 요망)

C++ 에서의 접근제한자

public : 어디서든 사용 가능

protected : 상속된 자식클래스까지만 사용 가능

private : 내부 접근만 사용 가능


JAVA 에서의 접근제한자

public : 클래스, 변수, 메소드 생성자 등의 모든 접근을 허용

protected : default 와 같으나 추가적으로, 다른 패키지의 하위클래스에서도 상속 가능

default : 같은 패키지에 있는 클래스, 변수, 메소드, 내부클래스에서 접근 가능, 기본 접근제한자 

private : 같은 클래스에서만 접근이 가능


* 예외처리 시스템의 상세한의 구현 기법 _(조사 요망)

JAVA http://www.nextree.co.kr/p3239/ 

- c++ 프로그램은 프로그램에서 정의되 또는 시스템에 의해서 정의된 임의의 자료형을 발생시킬 수 있다. java에서는 Throwable 또는 Throwable의 후손 클래싀 인스턴트인 객체만이 발생 될 수 잇다. 이것은 발생될 수 있는 객체와 프로그램에 있는 모든 다른 객체를 구분한다.

- throw 절을 포함하지 않는 c++ 프로그램 단위는 독자에게 알 수 없는 예외를 발생할 수 있다. 그러므로 java 메소드의 throws 머리로부터 발생 할 수 있지만 처리하지 않는 예외를 알 수 있다.

- finally 절의 추가는 어떤 상황에서는 상당히 편리하다. 이것은 복합문이 어떻게 종료되는가에 상관없이 일종의 청소작업이 발생하는 것을 허용한다.

- java 실행-시간 시스템은 인덱스 범위 오류와 널(null) 참조 변수 접근과 같은 사용자 예외 처리기에서 처리될 수 있는 여러 가지 시스템 예외를 묵시적으로 발생시킨다. 한편 c++ 프로그램은 사용자가 명시적으로 발생시킨 예외만을 처리한다.

java 동작구조는 기초로 한 c++의 예외 처리보다 개선된 것으로 신뢰성이 높다.

출처 : 프로그래밍 언어론 연습문제 풀이


문제 3) 옅은 복사와 깊은 복사의 차이점?

포인터의 복사 차이


문제 4) c++에서 객체 잘림이란?

파생클래스를 베이스클래스에 할당하면 베이스 클래스에서 수용할 수 없는 값들이 잘릴때 발생


문제 5) c++에서 가상함수란?

동적바인딩(실제로 실행됬을때 함수호출의 함수정의를 바인딩)을 사용하기 위해 쓰이는 키워드


문제 6) 추상클래스와 인터페이스의 차이점?

추상클래스는 인스턴스화 할 수 없으며 하나 이상의 순수 가상함수를 가지는 클래스

순수 가상 함수만 가지는 클래스를 인터페이스 또는 순수 추상 클래스라 불립니다.

인터페이스는 모두 추상 메서드이며 추상클래스는 기본 동작을 구현한 인스턴스 메소드를 가질 수 있습니다.

인터페이스는 final 변수로 선언되며 public으로 선언됩니다.

인터페이스의 구현은 implements라는 키워드를 사용하고 추상클래스는 extends 키워드를 사용하여 확장

인터페이스는 인터페이스만 확장할 수 있습니다.

추상클래스에 main이 존재한다면 실행할 수 있습니다.


문제 7) c++에서의 가상테이블?

가상함수를 구현하기 위해서 가상테이블이라는 동적 바인딩을 사용하며 이렇게 호출되는 함수를 조회하는데 사용


문제 8) Java에서 HashMap은 어떻게 동작하는가?

해시원리로 동작하며 put, get 메소드로 데이터를저장하거나 조회합니다.

값을 저장할 때는 put을 사용하는데 HashMap은 킷값으로 hashcode()메소드를 호출하고 나온 해쉬코드를 자신의 해쉬함수에 적용하여서 값 객체를 저장하기 위한 버킷 위치를 식별합니다.


문제 9) Java에서 쓰레드와 동기화 동작을 설명하세요.

동기화는 synchronized, volatile이라는 키워드를 사용하여 구현합니다.


문제 10) C++과 Java에서 빈 클래스의 크기는?

각 객체는 유일한 주소를 가지므로 실제로 0일 수는 없습니다.


문제 11) c와 c++에서 i++ + i++의 값은?

정해져 있지 않습니다. 함수 인수의 값을 구하는 순서가 정해지지 않았기 때문입니다.


문제 12) 직렬화와 비상주변수?

직렬화는 객체를 읽고 쓰는 절차를 뜻합니다.

비상주 변수는 직렬화 할 수 없는 변수를 의미합니다. : 파일핸들, 시스템 스레드, 데이터베이스 연결


문제 13) JAVA의 가비지 콜렉터?

자바는 객체가 생성될 때마다 힙 메모리에 들어갑니다. 가비지 콜렉션은 이 힙메모리가 얼마 남지 않았을때 수행되는데 라이브 객체에 의해서 참조되지 않은 메모리를 제거합니다.


반응형

'코딩 개념 Story' 카테고리의 다른 글

MVI (Model-View-Intent) 패턴  (0) 2023.12.06
디자인 패턴(MVC, MVVM, MVP)  (1) 2023.12.04
[ GIT ] 초기 설정  (0) 2016.08.25
[ GIT ] git 설치  (0) 2016.08.24
Spring 1차 용어 정리  (0) 2016.04.02