[비전공, 개발자로 살아남기] 14. 신입 개발자 자주 묻는 기술면접 내용 요약

비전공, 개발자로 살아남기 #14. 신입 개발자 자주 묻는 기술면접 내용 [메인 메모리의 영역]– 코드 영역: 프로그램의 소스 코드가 저장되는 영역으로, CPU는 코드 영역에 저장된 명령어(소스, 함수, 제어문)를 가져와서 처리합니다. 예를 들어, C언어로 작성된 프로그램이 실행될 때, 코드 영역에는 이 프로그램의 소스 코드가 저장되어 있습니다.– 데이터 영역: 전역 변수와 정적 변수가 저장되는 영역으로, 프로그램 시작과 함께 할당되며, 프로그램이 종료될 때까지 소멸하지 않습니다. 예를 들어, C언어로 작성된 프로그램이 실행될 때, 데이터 영역에는 이 프로그램에서 선언한 전역 변수나 정적 변수가 저장됩니다.– 스택 영역: 프로그램이 사용하는 임시 메모리 영역으로, 함수의 호출과 관계되는 지역 변수와 매개 변수가 저장됩니다. 함수의 호출과 함께 할당되며, 함수가 종료되면 소멸합니다. 예를 들어, C언어로 작성된 함수를 호출할 때, 해당 함수에서 사용하는 지역 변수나 매개 변수가 스택 영역으로 할당됩니다.– 힙 영역: 사용자가 메모리 공간을 동적으로 할당하고 해제하는 영역입니다. 예를 들어, C언어에서 malloc() 함수를 사용하여 메모리를 동적으로 할당할 때, 할당된 메모리 영역이 힙 영역에 저장됩니다. [자료구조]– 스택: 후입선출(LIFO) 방식의 자료구조입니다. 예를 들어, 컴퓨터에서 ‘뒤로가기’ 버튼이 스택과 유사합니다. 이전에 방문한 페이지들이 스택에 저장되고, ‘뒤로가기’ 버튼을 누르면 가장 최근에 저장된 페이지가 꺼내져 나타나는 것과 같습니다.– 큐: 선입선출(FIFO) 방식의 자료구조입니다. 예를 들어, 은행에서 대기번호표를 받아 대기열에 들어가는 것이 큐와 유사합니다. 가장 먼저 도착한 사람이 가장 먼저 처리받고, 가장 나중에 들어온 사람이 가장 나중에 처리받는 것과 같습니다.– 트리: 데이터를 계층 구조로 표현하는 자료구조입니다. 예를 들어, HTML의 DOM 트리가 트리와 유사합니다. HTML 페이지의 구조가 트리로 표현되며, 루트 노드인 html 태그에서 시작하여 하위 노드들이 순차적으로 표현됩니다.– 힙: 이진 트리 구조 중 하나로, 최대 힙과 최소 힙으로 나뉩니다. 예를 들어, 우선순위 큐에서 가장 높은 우선순위를 가진 데이터가 힙의 루트 노드에 위치하고, 그 다음으로 높은 우선순위를 가진 데이터가 하위 노드로 위치한 것이 최대 힙의 예시입니다. [RDBMS와 NoSQL]– RDBMS: 엄격한 스키마로 데이터를 구조적으로 정의하고 관리하는 데이터베이스입니다. 데이터를 분산 저장할 수 있으며 수정이 용이합니다. 예를 들어, MySQL, Oracle, MS-SQL 등이 RDBMS의 대표적인 예시입니다.– NoSQL: 유연한 스키마로 데이터를 저장하고 관리하는 데이터베이스입니다. 대용량 데이터 처리 및 저장에 적합하며, 확장성도 높습니다. 예를 들어, MongoDB, Cassandra, HBase 등이 NoSQL의 대표적인 예시입니다. [절차 지향과 객체 지향]– 절차 지향 프로그래밍: 순차적인 처리가 중요시되는 프로그래밍 기법입니다. C, Pascal 등의 언어가 절차 지향적인 언어입니다.– 객체 지향 프로그래밍: 객체(Object)라는 개념을 기반으로 데이터와 절차를 논리적으로 묶어 처리하는 방법입니다. Java, C++, Python 등의 언어가 객체 지향적인 언어입니다. 예를 들어, 자동차 시뮬레이션 프로그램에서 자동차를 객체로 표현하여, 자동차가 가지는 속성(색상, 가속도 등)을 데이터로, 자동차가 수행하는 기능(달리기, 멈추기 등)을 메소드로 표현합니다. [Overriding과 Overloading]– Overriding: 부모 클래스가 가지고 있는 메소드를 자식 클래스에서 재정의해서 사용하는 것입니다. 자식 클래스에서 부모 클래스의 메소드를 호출하면 부모 클래스의 메소드보다 자식 클래스에서 재정의한 메소드가 실행됩니다. 예를 들어, Java에서의 toString() 메소드가 Overriding의 예시입니다.– Overloading: 같은 이름의 메소드를 여러개 정의하되, 매개 변수의 유형과 개수를 달리하여 다양한 유형의 호출에 응답하는 것입니다. 매개 변수가 다르지만 같은 이름을 가지는 여러 메소드들이 동작합니다. 예를 들어, Java에서 print() 메소드가 Overloading의 예시입니다. [페이지 교체 알고리즘]– FIFO: 물리 메모리에 적재된지 가장 오래된 페이지를 교체합니다. 컴퓨터에서 일어나는 ‘작업 표시줄에서 닫기’도 FIFO 알고리즘과 유사합니다. 가장 처음 실행한 프로그램이 가장 마지막에 표시되어 닫히는 것과 같습니다.– LRU: 가장 오랜 기간 사용되지 않은 페이지를 교체합니다. 자주 사용되지 않는 앱 중에 오래된 앱을 종료시키는 ‘앱 종료 어플’도 LRU 알고리즘과 유사합니다.– LFU: 가장 적은 참조 횟수를 갖는 페이지를 교체합니다. 예를 들어, 브라우저에서 새로 열린 탭 중에 사용이 가장 적은 탭을 닫는 ‘탭 닫기’ 기능도 LFU 알고리즘과 유사합니다.– MFU: 가장 많은 참조 횟수를 갖는 페이지를 교체합니다. MFU 알고리즘은 사용이 잘 이루어지지 않는 편입니다. [프로세스와 스레드]– 프로세스: 운영체제로부터 할당받은 실행 작업 단위로 프로그램을 의미합니다. 여러 개의 프로세스가 동시에 실행될 경우, 각각의 프로세스는 독립된 메모리 영역과 CPU를 할당받습니다.– 스레드: 프로세스 내에서 동작하는 실행 단위로, 프로세스가 할당받은 자원을 공유하면서 실행됩니다. 예를 들어, 웹 브라우저에서 각각의 탭은 프로세스가 아니라 스레드로 동작합니다. [OSI 7Layer]– Application layer: 사용자와 네트워크를 연결하는 계층으로, HTTP, FTP, SMTP 등의 프로토콜이 속합니다.– Presentation layer: 데이터의 표현 방식을 정의하는 계층으로, JPEG, MPEG, SSL 등의 프로토콜이 속합니다.– Session layer: 통신하는 두 시스템 사이에서 세션을 관리하는 계층입니다.– Transport layer: 데이터 전송을 담당하는 계층으로, TCP, UDP 등의 프로토콜이 속합니다.– Network layer: 데이터를 전송하기 위한 경로를 설정하는 계층으로, IP, ICMP 등의 프로토콜이 속합니다.– DataLink layer: 물리적인 주소(MAC 주소)에 의해 데이터를 전송하는 계층으로, Ethernet, Token Ring 등의 프로토콜이 속합니다.– Physical layer: 물리적인 연결 및 전송 매체에 대한 통신을 담당하는 계층입니다. [TCP와 UDP]– TCP: 연결형 서비스로 신뢰성있게 데이터를 전송하는 방식입니다. 3-way handshaking과 4-way handshaking 방식을 통해 연결을 설정하거나 해제합니다. 예를 들어, 웹사이트에서 로그인하거나 파일을 전송할 때, TCP 방식을 사용합니다.– UDP: 비연결형 서비스로 데이터 전송을 위한 신호 절차를 거치지 않으며, 데이터의 신뢰성은 낮지만 처리 속도가 빠르다는 특징이 있습니다. 예를 들어, 동영상 스트리밍이나 온라인 게임 같은 경우, 빠른 전송이 중요하므로 UDP 방식을 사용합니다.

[비전공, 개발자로 살아남기] 13. 신입 개발자 기술면접

비전공, 개발자로 살아남기 #13. 신입 개발자 기술면접 1. 자신이 개발한 프로그램의 주요 기능과 설계 방법에 대해 설명해보세요. 이 질문은 면접자가 직접 만든 프로그램의 기능과 구조를 설명할 수 있는 능력을 보는 것입니다. 면접자는 이에 대한 구체적인 설명과 함께 문제 해결 과정에서 마주한 어려움과 그것을 어떻게 극복했는지도 함께 언급하면 좋습니다. 2. 객체 지향 프로그래밍(OOP)에 대해 설명해보세요. OOP는 면접에서 가장 자주 물어보는 개념 중 하나입니다. 면접자는 OOP의 4대 원칙(SOLID)과 함께 OOP의 장단점 및 특징을 설명할 수 있는 능력을 보는 것입니다. 3. 데이터베이스에 대한 이해도를 묻는 질문 면접자는 데이터베이스 모델링, SQL 문법, 트랜잭션 처리 등에 대해 자세히 설명할 수 있는 능력을 보는 것입니다. 4. 네트워크에 대한 이해도를 묻는 질문 …

[비전공, 개발자로 살아남기] 11. 신입 개발자 나이는 관련 있을까?

비전공, 개발자로 살아남기 #11. 신입 개발자 나이는 관련 있을까? 요즘 개발자들은 군대로 인해 취업 나이가 늦어지는 경우가 많습니다.  그래서 ‘나이’가 취업에 있어 중요한 요소가 될 수 있습니다. 하지만 신입 개발자 취업 시 나이가 어느 정도까지인지, 또 나이가 많다면 신입으로 취업이 어렵다는 말이 사실일까요?  우선, 개발자 취업 시 나이에 따른 제한은 없습니다. 다만, 앞서 말한 것처럼 군대로 인한 연장으로 취업 나이가 늦어질 수 있고, 이에 따라 스펙을 강화하려고 휴학 등을 통해 학업을 계속할 수도 있습니다. 그러나 신입 개발자로 취업하기 위해서는 일정 기간 동안 학업을 하거나 자격증을 취득하는 등 스펙 쌓는 것이 필요합니다.  그 기간이 길어질 수록 일찍 일어날 수 있는 기회는 낮아집니다. 따라서 30대 초반까지는 신입 기준으로 적당하다고 할 수 있습니다. 하지만, 나이가 많다고 해서 신입으로 취업이 어렵다는 것은 절대 사실이 아닙니다.  개발자는 기술력과 창의성, 문제해결 능력 등이 중요한데 이러한 능력이 나이와 직접적으로 연관되는 것은 아닙니다. 따라서 늦게 시작하더라도, 열심히 노력하고 기술을 익힌다면 신입으로 취업하는 것은 충분히 가능합니다.  또한, 개발자는 경력이 쌓인다면 그 경력에 따라 보상을 받을 수 있습니다. 따라서 나이가 많아도 경력이 풍부하다면 높은 보상과 스펙을 갖춘 채 취업할 수 있습니다.  하지만, 단순히 스펙 쌓기만을 목적으로 하는 것은 좋지 않습니다. 개발자는 꾸준한 성장과 개발에 대한 열정이 필요합니다. 이러한 열정과 노력을 기반으로 개발 실력을 높이면, 나이가 많다고 하더라도 신입으로 취업하는 것은 큰 문제가 되지 않을 것입니다. 결론적으로, 개발자 취업은 나이와 연관이 없습니다.  다만 시장 상황 등의 요소로 인해 나이가 들어갈수록 경쟁이 더욱 치열해질 수 있습니다. 그러므로 최적의 타이밍에서 충분한 노력과 열정으로, 스펙과 경력을 모두 쌓아가며 개발자로서 자신감을 갖도록 하길 추천드립니다.