왜?
면접 준비를 차근차근하자.
이제 2021년 8월까지 취업하자
회사에 백엔드 개발자로 취업한다면 더 많은 것을 배울수있고, 좋은 사람도 많이 만난 것을 믿어 의심하지 않으니까!
20가지 질문 답해보기
1바이트는 몇 비트인가요?
*) 참고로 “옛날에는…” 이렇게 대답 시작하면 무조건 통과다. 그런 수준의 체크를 하고자 하는 것이 아니다.답변:
바이트는 데이터 파일의 크기, 디스크 또는 그 외 저장 매체의 공간, 그리고 네트워크를 통하여 전송되는 데이터의 양을 표현하느넫 사용되는 ㅡㄱ정 단위
1byte는 8bit
컴퓨터는 일반적으로 8비트를 하나의 그룹으로 사용하고 이를 byte라 한다.
1byte는 결국 8개의 bit를 가지고 표현할수있는 조합의 갯수가 2^8개이므로 0부터 255까지의 조합
1픽셀은 몇바이트인가요?
*) 마찬가지로 채널이 몇개냐에 따라서… 이렇게 대답하면 통과다. 이하 모든 질문 마찬가지답변:
2^10은 얼마인가요?
답변:
Stack과 Queue의 차이가 뭔가요?
답변:
Binary Tree의 시간 복잡도가 어떻게 되나요?
답변:
DNS의 역할이 무엇인가요?
답변:
HTTPS와 HTTP의 차이는 뭔가요
답변:
스마트폰 카메라 해상도가 (대강) 어떻게 되나요?
답변:
왜 사진에는 JPG를 쓸까요?
답변:
칼라값 ffffff는 무슨 색인가요?
답변:
-
답변:
call by reference가 무슨 말인가요?
답변:
Event Listener가 무슨 말인가요?
답변:
OOP에서 상속이 무슨 말인가요?
답변:
non-blocking call이 뭔가요?
답변:
버전관리에서 commit이 뭔가요?
답변:
try/catch는 무슨 뜻인가요?
답변:
디버깅 할때 breakpoint가 뭔가요?
답변:
패스워드는 서버에 어떻게 보관되나요?
답변:
SSD가 HDD보다 빠른 이유가 뭔가요?
답변:
Development common sense
객체지향 프로그래밍이란?
OOP(Object Oriented Programming)
프로그램을 단순히 데이터와 처리 방법으로 나누는 것이 아니라(과거방식), 프로그램을 수많은 ‘객체’라는 기본 단위로 나누고 이 객체들의 상호작용으로 서술하는 방식이다. 객체란 하나의 역할을 수행하는 ‘메소드와 변수(데이터)’의 묶음으로 봐야 한다.
객체(Object)란 물리적으로 존재하거나 추상적으로 생각할 수 있는 것 중에서 자신의 속성을 가지고 있고 다른것과 식별 가능한 것을 말합니다.
객체는 속성과 동작으로 구성되어 있다고 보면 되는데 자바에서는 이 속성과 동작을 각각 필드(field) 와 메소드(method) 라 부릅니다.
즉, 그냥 변수를 지정하면 그값은 메모리 주소를 가르키는 단순한 것이지만(쓰고난후 필요없으면 가비지 컬렉터로인해 삭제가능)
객체 지향 프로그래밍 이전의 프로그래밍 패러다임을 살펴보면, 중심이 컴퓨터에 있었다. 컴퓨터가 사고하는대로 프로그래밍을 하는 것이다. 하지만 객체지향 프로그래밍이란 인간 중심적 프로그래밍 패러다임이라고 할 수 있다. 즉, 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것을 말한다. 현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 애플리케이션에 필요한 특징들을 뽑아와 프로그래밍 하는 것이다. 이것을 추상화라한다.
OOP로 코드를 작성하면 이미 작성한 코드에 대한 재사용성이 높다. 자주 사용되는 로직을 라이브러리로 만들어두면 계속해서 사용할 수 있으며 그 신뢰성을 확보 할 수 있다. 또한 라이브러리를 각종 예외상황에 맞게 잘 만들어두면 개발자가 사소한 실수를 하더라도 그 에러를 컴파일 단계에서 잡아낼 수 있으므로 버그 발생이 줄어든다. 또한 내부적으로 어떻게 동작하는지 몰라도 개발자는 라이브러리가 제공하는 기능들을 사용할 수 있기 때문에 생산성이 높아지게 된다. 객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다. 또한 데이터 모델링을 할 때 객체와 매핑하는 것이 수월하기 때문에 요구사항을 보다 명확하게 파악하여 프로그래밍 할 수 있다.
객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 overhead 가 발생하게 된다. 하지만 이것은 하드웨어의 발전으로 많은 부분 보완되었다. 객체 지향 프로그래밍의 치명적인 단점은 함수형 프로그래밍 패러다임의 등장 배경을 통해서 알 수 있다. 바로 객체가 상태를 갖는다는 것이다. 변수가 존재하고 이 변수를 통해 객체가 예측할 수 없는 상태를 갖게 되어 애플리케이션 내부에서 버그를 발생시킨다는 것이다. 이러한 이유로 함수형 패러다임이 주목받고 있다.
객체 지향적 설계 원칙
- SRP(Single Responsibility Principle) : 단일 책임 원칙
클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다. - OCP(Open-Closed Principle) : 개방-폐쇄 원칙
확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다. - LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다. - ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. - DIP(Dependency Inversion Principle) : 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
도메인으로 사이트 접속 과정
구글 접속시 일어나는 과정
구글을 도메인 주소를 주소창에 치면, 해당 루트 네임 서버로 요청이 들어가 요청된 도메인의 최상위 레벨 영역(com, kr)의 권한을 갖는 네임서버들의 이름, 주소 정보를 제공하고 네임서버에서 domain name에 해당하는 IP주소 반환
받은 IP 주소로 요청하면 먼저 해당 기기의 routing-table을 보고 라우터까지 요청이 감. 라우터에서 NAT을 통해 자신의 IP를 source IP로 바꾼후, 외부네트워크로 요청 보낸다. 외부 라우터들은 routing-table에 따라 요청을 전달하고 구글서버에 도착하며 구글서버에서 응답한다.(3-hand-shaking먼저, 후에 세션발급되고 소켓연결된다.)
- 사용자의 PC는 DHCP서버에서 사용자 자신의 IP주소, 가장 가까운 라우터의 IP주소, 가장 가까운 DNS서버의 IP주소를 받는다.
- 이후, ARP를 이용하여 IP주소를 기반으로 가장 가까운 라우터의 MAC주소를 알아낸다.
- 외부와 통신할 준비를 마쳤으므로, DNS Query를 DNS서버에 송신한다. DNS서버는 이에대한 결과로 웹 서버의 IP주소를 사용자 PC에 돌려준다.
- 이제 IP를 알았으므로, HTTP Request를 위해 TCP Socket을 개방하고 연결한다.(이 과정에서 3-hand-shaking이 일어난다)
- TCP연결에 성공하면 HTTP Request가 TCP Socket을 통해 보내지고, 응답으로 웹페이지의 정보가 사용자의 PC로 들어온다.
DHCP(Dynamic Host Configuration Protocol)
- 호스트의 IP주소 및 TCP/IP 설정을 클라이언트에 자동으로 제공하는 프로토콜.
DNS(Domain Name System)
- IP주소와 도메인의 매핑정보를 관리하면서 도메인 혹은 IP주소를 묻는 요청이 오면 이에 응답.
- DNS에도 캐시가 있기 때문에, 자주 요청을 받는 정보는 캐시로 관리한다.
ARP(Address Resolution Protocal)
- 네트워크 상에서 IP주소를 물리적 네트워크 주소로 대응시키기 위해 사용되는 프로토콜
3 Way-Handshake
- TCP/IP를 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에, 먼저 정확한 전송을 보장하기 위해 사전에 세션을 수립하는 과정.