분류 전체보기 54

[개발상식] IT 기술면접 준비 - 3(운영체제)

Q1. 캐시를 사용하는 이유와 캐시 적중률을 높이기 위한 방법 ? - 캐시는 메모리와 cpu간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와서 저장해두는 임시 장소입니다. 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 cpu가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓습니다. 이러한 캐시의 적중률을 높이기 위한 방법으로 캐시의 크기를 늘리는 방법이 있지만 이는 가격이 비싸다는 한계가 있습니다. 다른 방법으로는 앞으로 사용될 데이터를 가져오는데 지역성 이론에 따르면 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 더 높다는 것이 있습니다. Q2. 프로세스와 스레드의 차이 ? - 프로세스란 프로그램을 실행했을 때 디스크에서 메모리에 올라와 cpu자원의..

OS 2022.10.23

[개발상식] IT 기술면접 준비 - 2 (컴퓨터 네트워크)

Q1. HTTP의 GET vs POST ? - get과 post 모두 http 프로토콜을 이용하여 서버에 무엇을 요청할 때 사용하는 방식입니다. 1) GET: 요청하는 데이터가 HTTP request message 의 header 부분의 url에 담겨서 전송되기 때문에 데이터의 크기가 제한적이며 오청하는 뎅터가 url에 고스란히 보이므로 보안이 중요시되는 요청은 자제하는 것이 좋습니다. 2) POST: 요청하는 데이터가 HTTP request message 의 body 부분에 담겨서 전송되는 방식이기 때문에 데이터의 크기가 get보다 크지만 보안 면에서 좋습니다. Q2 . OSI 7 계층은 무엇이고 존재 이유? - OSI 7 계층은 통신 접속에서 완료까지의 과정을 7단계로 정의한 국제 통신 표준 규약입니..

OS 2022.10.22

[개발상식] IT 기술면접 준비 - 1(개발 상식)

Q1. 좋은 코드 란? - 프로그램 개발은 많은 사람이 협업하는 경우가 많습니다 여러 사람이 읽기 쉬운 가독성이 좋은코드, 코드가 중복되는 부분은 함수화해 둔 코드, 테스트하기 용이한 코드가 좋은 코드라고 생각합니다. Q2. 절차지향 프로그램 vs 객체지향 프로그램 란? - 절차지향 프로그래밍은 코드가 위에서 아래로 한 줄씩 순차적으로 실행되는 프로그래밍이며 이는 컴퓨터의 처리구조와 유사하여 실행속도가 빠르지만 디버깅이 어렵다는 단점이 있습니다. - 객체 지향 프로그래밍은 데이터나 절차를 한 덩어리로 처리하는 프로그래밍 기법을 말합니다. 코드를 재사용하기 용이하며 디버깅이 쉽다는 장점이 있습니다. 반면 처리속도가 절차지향에 비하여 느리고 설계가 비교적 어렵다는 특징이 있습니다. 💡 객체 지향 프로그래밍 ..

OS 2022.10.21

[Python] 백준 2630 "색종이만들기_분할정복" 문제풀이

💡풀이과정 분할 단계 하얀색과 파란색 종이의 수를 구하기 위해 (0~n/2,0~n/2), (n/2~n, 0~n/2), (0~n/2, n/2~n), (n/2~n, n/2~n) 구역을 4구역으로 나눠준다. 정복 단계 해당구역의 종이가 모두 같은 색이면 합병단계로 넘어가고 해당구역의 종이가 모두 같은 색이 아니라면 다시 분할 단계로 넘어간다. 합병 단계 해당 색깔의 종이의 수를 1씩 더해준다. import sys input = sys.stdin.readline n = int(input()) paper= [list(map(int,input())) for _ in range(n)] white, blue = 0 def divideAndConquer(x,y,n): global white,blue sameColor =..

[안드로이드] StateFlow 알아보기

💡 StateFlow ? StateFlow와 SharedFlow는 흐름에서 최적으로 상태 업데이트를 내보내고 여러 소비자에게 값을 내보낼 수 있는 flow api - Flow는 일반적으로 cold stream이지만, StateFlow는 hot stream이다. 그러므로 일반 Flow는 마지막 값의 개념이 없고 collect 될 때만 활성화 되는 반면 StateFlow는 마지막 값의 개념이 있으며 생성하자마자 활성화 된다. class CounterModel { private val _counter = MutableStateFlow(0) // private mutable state flow val counter = _counter.asStateFlow() // publicly exposed as read-o..

안드로이드 2022.10.19

[알고리즘] python 그래프 (인접 행렬/인접 리스트)

💡 탐색 ? - 탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정. 💡 그래프 탐색 ? - 그래프 탐색 알고리즘이란 그래프의 모든 노드를 방문하는 알고리즘을 의미. - 트리 탐색은 그래프 탐색의 특수한 일종이며 방문한 노드는 다시 방문하지 않음. 인접 행렬 : 2차원 배열을 활용하여 그래프를 표현하는 방식 연결되어 있지 않은 노드끼리는 무한의 비용이라고 작성 불필요한 메모리가 소요되며 인접 리스트 보다 빠르다. # 인접 행렬 # 무한 비용선언 INF = 999999999 graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] print(graph) 👉🏽 [[0, 7, 5], [7, 0, 999999999], [5, 999999999, 0]] 인접 리스트 : 연결 ..

알고리즘 2022.10.18

[알고리즘] python heapq를 이용한 최대 힙, 최소 힙

💡 heapq ? - 파이썬에서 사용되는 최소 힙과 최대 힙을 구현할 수 있는 모듈 - 메소드는 heappush 와 heappop이 있다. - 삭제 : heapq.heappop(heap) // 가장 작은 원소 삭제 후 그 값 리턴 - 추가 : heapq.heappush(heap,4) // 원소 4 추가 - 변환 : heapq.heapify(heap) // 기존 리스트를 힙으로 변환 최소 힙 import heapq heap = [] for i in range(1,6): heapq.heappush(heap, i) # 작은 숫자 순서대로 1,2,3,4,5가 출력된다. for i in range(5): print(heapq.heappop(heap)) 최대 힙 ❗️ 힙 모듈은 최소 힙만 동작하기 때문에 최대 힙으..

[안드로이드] mvvm 패턴

💡 mvvm 패턴 ? - view/viewmodel/model 을 이용해 각각의 역할을 분리하여 가독성과 재사용성을 높인 디자인 패턴. 장점 livedata = observable패턴을 이요하기 때문에 데이터 베이스를 관찰하고 자동으로 ui 갱신 뷰모델이 데이터를 홀드하고 있기 때문에 생명주기로부터 안전하여 불필요한 메모리 사용을 줄임 ui, 비즈니스 로직, 데이터베이스가 기능별로 모듈화 되어있어 유닛 테스트가 용이 해짐. 💡 ACC ? - android architecture components = 안드로이드 아키텍쳐 컴포넌트는 앱 구조를 더 튼튼하고, 테스트에 용이하고, 유지보수성이 뛰어나게 만들어 주는 라이브러리 모음이다. - databing, livedata, viewmodel등의 유용한 라이브러..

안드로이드 2022.10.16

[안드로이드] Hilt - 2 (@Binds vs @Provides)

💡 constructor inject ? - 프로젝트 내에서 클래스의 인스턴스를 hilt에게 바로 제공할 수 있는 경우에는 constructor inject를 통해 종속성을 제공해줄 수 있음. ❗️room, retrofit과 같은 외부 라이브러리에서 제공되는 클래스처럼 프로젝트 내에서 소유할 수 없는 경우 hilt module을 추가하여 종속성을 제공할 수 있다. 💡 Binds ? - @Binds는 constructor를 가질 수 없는 인터페이스에 대한 종속성 삽입의 경우에 사용함. - 인터페이스 인스턴스를 제공한다.(인터페이스의 경우 바로 인스턴스를 생성할 수 없기 때문에) // 인터페이스 interface LogRepository { suspend fun add(msg: String) suspend ..

안드로이드 2022.10.14

[안드로이드] Hilt - 1

💡 Hilt ? jetpack 에서 권장하는 DI라이브러리로 dagger위에 구축되어 있고 컴포넌트를 만든다. 모든 안드로이드 클래스에 컨테이너를 제공하고 라이프사이클을 자동으로 관리해준다. 또한 실체 객체들과 그들의 의존성을 만들기 위해 클래스를 생성해준다. 💡 어노테이션 @HiltAndroidApp @AndroidEntryPoint @HiltViewModel @Inject @Inject constructor() @Module @Installin() @Binds @Provides @ApplicationContext @ActivityContext

안드로이드 2022.10.13