정리233

Program이란?

어떤 작업을 수행할 수 있는 지시사항(코드)가 저장된 데이터 형태

internet.exe라는 게임 실행파일이 있을  이것을 프로그램이라고 부릅니다.

 

Program을 실행시키면 프로그램의 실행을 위해 메모리 할당이 이뤄지고,  메모리 공간으로 바이너리 코드가 올라가게 됩니다.

 순간부터 프로그램은 프로세스라고 불리게 됩니다.

 

Process란?

실행중인 프로그램

운영체제 관점에서 Program이 메모리와 같은 자원을 할당받아 실행하는 작업 단위

내부적으로 code, data, stack, heap 과 같은 메모리 영역을 가지며, 최소 1개 이상의 main thread 를 가진다.

 

Thread란?

CPU 관점에서 작업의 실행 처리 흐름 단위

Stack만 독립적이고, Code, Data, Heap을 전역 메모리를 공유한다.

 

Multi Process 보다 Multi Thread 를 사용하는 이유

프로세스 간의 통신(IPC)을 구현하는 것보다 스레드 간의 통신이 빠르고 자원 효율이 좋다.

Stack 영역을 제외하고 공유하기에 전환 속도도 빠르다.

Code 세그먼트를 공유하기 때문에 Code 영역의 함수를 호출 해 각각의 스레드의 스택에서 독립적으로 사용 가능하다.

Data 세그먼트를 공유하기 때문에 전역 변수와 동적 할당된 메모리 공간을 공유해 쓰레드 간의 통신에 사용 할 수 있다. 


객체 지향과 절차 지향 비교

PP    절차 지향 : 커다란 문제를, 작은 기능의 함수로 쪼개서 top-down 방식으로 기능의 순서에 중점

OOP 객체 지향 : 커다란 문제를, 프로그래밍 대상을 추상화하여 객체로 정의하고 bottom-up  방식으로 관계를 정의하는 방식


OOP의 5가지 설계 원칙

  • SRP(Single Responsibility Principle, 단일 책임 원칙): 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
  • OCP(Open-Closed Principle, 개방 폐쇠 원칙): 클래스는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.
  • LSP(Liskov Substitution Principle, 리스코프 치환 원칙): 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다.
  • ISP(Interface Segregation Principle, 인터페이스 분리 원칙): 클라이언트는 이용하지 않는 메소드에 의존하지 않도록 인터페이스를 분리해야 한다.
  • DIP(Dependency Inversion Principle, 의존 역전 법칙): 클라이언트는 추상화(인터페이스)에 의존해야 하며, 구체화(구현된 클래스)에 의존해선 안된다.

객체 지향의 특징

추상화(Abstarction) 

프로그래밍 대상 객체의 속성 중 필요하고 공통적인 특징 정보만 모델화 하는 것이다.

행위를 일반화해 기능으로 동작하도록

 

캡슐화(Encapsulation) 

객체에 필요한 데이터, 기능(메서드)를 그룹화

 

정보은닉(Information Hiding)

캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이다.

 

상속성(Inheritance) 

이미 정의된 상위 클래스(부모 클래스)의 모든 속성솨 연산을 하위 클래스가 물려받는 것이다. 상속성을 이용하면 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 자신의 속성으로 사용할 수 있다. ex) extends 

 

다형성(Polymorphism) 

메시지에 의해 개체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체(클래스)가 가지고 있는 고유한 방법(특성)으로 응답할 수 있는 능력을 의미한다. 객체(클래스)들은 동일한 메소드명을 사용하며 같은 의미의 응답을 한다. ex) 1+2=3 / A+B=AB

 

장점

- 재사용 용이

- 생산성 향상

- 유지보수 용이

 

단점

- 실행속도 느림

- 대용량

- 설계 시간 더 소요


컴파일 언어와 스크립트 언어의 차이

 

스크립트 언어 : JavaScript, Python, Ruby... 

- 실행될 때 라인별로 해석하므로 코드 변경시 실행 할 때마다 결과가 바뀌게 된다.

 

컴파일 언어 : C, C++, C#, Java... 

-  실행시, 코드 수정 후 재 컴파일을 하기 전까지는 같은 결과

차이점 : 컴파일러의 존재 여부 컴파일 언어의 경우 컴파일러를 통해서 한번 컴파일 된 후에는를 나타내지만, 스크립트 언어의 경우 실행될 때 바로 해석하므로 코드 변경시 실행 할 때마다 결과가 바뀌게 된다.

 


힙, 스택

1. 메모리 구조에 대해 설명하시오

 

메모리는 일반적으로 세그먼트(Segment)라고하는 몇가지 영역으로 구분된다.

Code 세그먼트 : 컴파일된 프로그램이 저장되는 영역, 일반적으로 read-only 속성이다. 

Data 세그먼트 : 전역(Global), 정적(static), 배열(array), 구조체(struct)가 저장되는 영역 

Heap 세그먼트 : 동적으로 할당된 변수, new 연산자로 생성된 객체와 배열 (Runtime)

Stack 세그먼트 : 함수가 호출될 때 스택 프레임내에  매개 변수, 지역 변수 및 기타 함수 관련 정보가 저장되는 영역

 

 

2. 메모리의 할당되는 메커니즘에 대한

스택은 정적 메모리 구조를 가지고 힙 영역은 동적 메모리 구조를 가진다

 

 

힙(heap) : 낮은주소 -> 높은 주소

런타임에 결정 되는 컴퓨터 메모리 영역

동적 할당시 사용

함수 호출시 변수가 저장되는 영역

해제 필요(메모리 누수 관리 필요)

 

스택은 컴파일 타임에 결정된다. 높은 주소 -> 낮은 주소

후입선출(LIFO) 자료구조

 

 

스텍과 큐에대해서 설명

https://devuna.tistory.com/22

 

Stack Overflow - Stack이 Heap영역을 침범하는 경우 

Heap Overflow - heap이 주소값을 채워져 오다가 Stack 영역을 침범하는 경우


공유 자원 관리 문제

용어 설명
병행 프로세스
(Concurrent Process)
두 개 이상의 프로세스들이 동시에 존재하며 실행 상태에 있는 것을 의미한다. 여러 프로세스들이 독립적으로 실행되는 것을 독립적 병행 프로세서라 하고 서로 협력하며 동시에 실행되는 것을 협동적 병행 프로세스라고 한다.
임계구역
(Critical Section)
다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 시점에서는 하나의 프로세스만 자원 또는 데이터를 사용하도록 공유 자원을 의미한다. 임계구역은 특정 프로세스가 독점할 수 없다.
상호 배제
(Mutual Exclusion)
공유 자원을 어느 시점에서 단지 한 개의 프로세스만이 사용할 수 있도록 하며, 다른 프로세스가 공유자원에 대하여 접근하지 못하게 제어하고 각 프로세스가 번갈아 가며 공유 자원을 사용하도록 하는 것으로 임계 구역을 유지하는 기법이다.
동기화 기법
(Synchronization)
두 개 이상의 프로세스를 한 시점에서는 동시에 처리할 수 없으므로 각 프로세스에 대한 처리 순서를 결정하는 것으로 상호 배제의 한 형태이다. 대표적인 동기화 방법으로는 세마포어와 모니터 기법이 있다.
교착 상태
(Deadlock)
상호배제에 의해 나타나는 문제점으로 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상이다.
필요충분 조건 - 상호배제 , 점유대기, 비선점, 순환대기

 

세마포어(Semaphore) : 공유된 데이터를 여러 프로세스 접근을 막는 것

뮤텍스(Mutex) : 공유된 데이터를 여러 쓰레드 접근을 막는 것

뮤텍스는 동기화 대상이 오직 하나뿐일 때, 세마포어는 동기화 대상이 하나 이상일 때 사용한다.

https://worthpreading.tistory.com/90

 


오버플로, 언더플로 계산

char 1byte, 2^8 256가지 

오버플로 값 계산시 128(127+1)개이다. 양수는 0을 더해서 128개이다.

int a = 130

130 - 128(127+1) = -126 

 

unsigned int b = 260

260 - 256 = 4


IOCP


Library  Framework 의 차이점을 알려주세요.

Library 의 개요

단순하게 활용 가능한 도구들의 집합

  • 개발자가 필요에 의해 만든 클래스를 호출하여 사용하는 방식

Framework 의 개요

뼈대 또는 핵심 구조를 뜻하는 기술

  • 소프트웨어의 특정 문제를 해결하기 위해 상호간 의존하는 클래스와 인터페이스의 집합
  • 완성된 어플리케이션이 아니므로 개발자가 완성시켜야 한다.
  • 특정 개념의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다(재사용이 가능한 컴포넌트).

 

결론 : Library 와 Framework 의 차이점

개발 주도성이 어디에 있는가?

  • 프레임워크는 프로세스를 가지고 있으며 개발자(사용자)는 프레임워크 안에서 필요한 코드를 작성
    • 라이브러리는 개발자가 프로세스를 작성하면서 필요한 코드를 가져다 사용
즉, 라이브러리는 개발자에게 주도성이 있으며 프레임워크는 개발자가 아닌 핵심 구조 안에 프로세스에 대한 주도성이 담겨 있다.

 


API에 대해서 아는지, 무엇의 약자인가?

API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)

외부 데이터와 구현된 기능에 접속하고 사용할 수 있게 해주는 인터페이스

기상청 API, 네이버 로그인 API, 지도 API


OSI 7 Layer 설명 하시오

OSI 7 계층은 네트워크에서 통신이 일어나는 과정을 7단계로 정의한 국제 통신 표준 규약이다.

TCP는 4계층 전송

IP는 3계층 네트워크

 

​TCP, UDP 

공통점은 4계층 전송 계층,

차이점은 TCP는 3-way handshaking 과정을 통해 신뢰성 있는 통신을 보장하고,

UDP는 수신 여부를 확인하지 않으므로, 실시간 스트리밍과 같은 작업에 사용

 

DMS Database Migration Service

각종 데이터베이스를 DMS를 사용하여 AWS Cloud 환경으로 이동 혹은 반대로


멀티쓰레드를 사용했다고 하는데 어떻게 관리를 했는지

벡터로 포인터를 담아서


GPIO

GPIO마이크로 프로세서가 주변장치와 통신하기 위해 범용으로 사용되는 입출력 포트이다.

입력과 출력 2가지 모드의 핀상태가 존재한다. 물론 동시에 존재하지는 않는다. 입력이냐 출력이냐를 프로그래머가 설정하는게 일반적이다.


db 테이블

테이블 설계 방식

간단한 쿼리


TCP/IP 에서 사용하는 함수들에 관한것들 (socket, bind, listen, accept 등) 의 역할 과 사용되는 함수

 

32bit 와 64bit의 차이, 64비트로 넘어온 이유

 

프로젝트를 진행하면서 가장 기억남거나 재미있었던 프로젝트와 그 이유

 

파일 입출력 코드를 설명

 

DB 중복 제거 + 조회


싱글톤 패턴

- 자바, 스프링의 thread-safe 구현 방법

 

싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다.

 

추상 클래스

- 객체 생성이 불가능하다

- 상속 후 추상 메서드 부분이 구현되어야 사용 가능하다


 

MVC (Model - View - Controller)

GET POST

https://medium.com/@lghaske/%EC%A0%95%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EC%A0%95%EB%A6%AC-with-big-o-82391afd20a2

 

정렬 알고리즘 정리(With Big O)

늘.. 남이 정리해둔 것만 보던 생활을 접고 정리도 할겸 미디엄을 시작하기로 한 2019년

medium.com

 

인터페이스

 

 

디버깅

코드레버리지

 

스택, 큐가 뭔지

정적배열과 동적배열 차이

EWOULDBLOCK

https://sthyun.tistory.com/entry/EWOULDBLOCKEAGAIN

 

블로킹, 논블로킹 차이 설명

DDS는 아는지

공부하면서 봤던 서적

 

C++ 프리미어 플러스

 

[ 자기소개 및 지원동기 ]

[ 주요 기술스택 및 역할 ]

[ 자기소개서 기반의 프로젝트 질문 ]

  • 어떤 역할을 담당하였는가?
  • 서버는 어떻게 구성하였는가?
  • 어떤 언어와 프레임워크, 라이브러리?
  • 몇명의 사용자, 어느 정도의 트래픽
  • 해당 기술 스택을 사용한 이유
  • 구조에 대한 설명 및 설계 관련 내용
  • 어떠한 알고리즘, 자료구조 혹은 디자인패턴을 사용하였는가?
  • 개선점은 무엇이였나?
  • 어떻게 프로젝트를 관리했고(스케줄, 소통 등) 어떻게 기여했는가?(문서화, 구조 설계, 개발 등)
  • 자신의 프로젝트에서 다양한 상황을 가정해보자. (이런 경우 혹은 저런 경우엔 어떻게 하실 건가요? 같은 질문을 자주 함)

[ 프로젝트에 있어서 가장 중요한 것은 무엇이라 생각하나요? ]

[ 테스트 코드의 장점 및 어떤 생각을 하면서 작성하는가? ]

[ 코드 리뷰는 어떻게 진행하는가? ]

[ 이미 진행했던 코드를 개선한 경험 ]

[ 새로운 정보의 습득 방법 ]

[ 학부 시절 기억나는 과목 ]

[ 인상 깊었던 개발자 세미나 ]

[ 해당 개발자가 되려는 이유(웹 or 앱 등) ]

[ 어떤 개발자가 되고 싶은가? ]

[ 개발을 좋아하는가? ]

블로그 or 깃 허브로 보여주면 좋습니다.

[ 협업 스타일 ]

[ 협업 할 때 일을 나누는 방법 ]

[ 협업 시 생긴 갈등의 해결 방법 ]

[ AWS VPC 설정 여부 ]

[ 최근에 읽은 개발 서적은? ]

[ 최근에 관심을 갖게 된 기술은? ]

[ 개발자가 되기 위해 어떻게 공부하는가? ]

[ 성격의 장/단점과 어떻게 평가받는지(단점을 고치려고 노력한 부분도) ]

[ 주로 이용하는 페이지 or 동영상 ]

[ 실천하고 있는 열정 프로젝트가 있는가? ]

[ IT 비전공자에게 효과적인 소통을 하고 있는가? ]

[ 업무 스트레스를 해결하는 방법 ]

[ 가장 힘들었던 일과 해결한 경험 ]

 

댓글

공지사항
업데이트
인기 글
최근댓글
태그
M1 dock 오류 C2011 'timespec': 'struct' 형식 재정의 스트림과 버퍼 맥북 독 반응 listen() 빅엔디안 MariaDB 방화벽 인터넷 속도 단위 m1 윈도우 단축키 window mysql C2027 정의되지 않은 형식 'timespec' 실제 인터넷 속도 if(false) stream buffer m1 Shift space if 가독성 m1 매직 키보드 mariadb 외부접속 네이버 제휴 카드 적립 MariaDB Connector 우분투 디스코드 littem endian socket programming c언어 스트림 네이버 맴버쉽 적립 io stream M1 독 바로 보기 2진수 실수 표현 네이버 맴버쉽 계산 C# 메서드 네이버 적립 이진수 음수표현 M1 Parallels Ubuntu QT mysql 방화벽 A2449 몬트레이 Shift Space 2진법과 기수 ubuntu MK293KH/A if(0) m1 페러렐즈 단축키 우분투 qt 2진수 음수 표현 c# 클래스 mariadb 삭제 MariaDB Connector/C++ if 코드 구조 C++ connector How to show/hide the macOS Dock instantly socket fgets( ) 개행('\0')과 NULL 처리 버퍼란 소켓 pointer reference 고정 소수점 M1 Parallels Ubuntu QT install MK293KE/A 리턴 0 이유 db 외부접속 fputc( ) 네이버 페이 결제 우분투 독 비활성화 Visual Studio에서 inet_ntoa( ) 경고 포인터와 참조 우분투 독 에러 db 방화벽 fputs( ) 네이퍼 적립 계산 c 알고리즘 윈도우 db socket networking 스트림 버퍼 리틀 엔디안과 빅 엔디안 Apple Silicon Mac용 터치아이디 탑재형 매직 키보드 - 미국 영어 (MK293KE/A) c언어 버퍼 네이버 제휴 통장 적립 몬트레이 한영 전환 return 0 성공 이유 윈도우 timespecs 네이버 포인트 적립 계산 알고리즘이란 M1 dock speed Magic Keyboard with Touch ID 독 속도 조절 connect() 2진수와 Byte mariaDB 외부 접속 맥 독 반응 속도 2진법과 서수 mariadb 재설치 윤성우의 열렬 TCP/IP 소켓 프로그래밍 표준 입출력 스트림 효과적인 if 코드 puts( ) 이진수 실수표현 #define HAVE_STRUCT_TIMESPEC m1 페러렐즈 윈도우 맥 단축키 mysql 외부 Ip 실제 저장 용량 C networking
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31