전체 글 258

Docker 정리 (1)

도커란 도커(Docker)는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. 특정 Application을 만들때 필요한 소프트웨어들이 여러개 있는데 이들을 설치하고 관리하는 과정은 순탄치 않다. (Ex. Web Server, DB ...) 이를 해결 할 수 있는 방법은 아래와 같다. 1. 특정 전문가가 OS에 직접 소프트웨어를 구축해서 제공 특정 전문가가 OS에 직접 소프트웨어를 구축해서 제공한 후 우리는 네트워크 통신 통해 이를 사용한다면 너무 수월 할 것이다. 하지만, 이는 컴퓨터가 3대나 필요하므로 많은 비용이 들어간다. 2. VM (Virtual Box) 사용 가상 운영체제인 VM 은 메인 운영체제 안에 가상의 운영체제를 설치하여 소프..

컨테이너/도커 2021.08.28

쉘(Shell) & 커널(Kernel)

커널 ㄴ 하드웨어를 직접적으로 제어한다. OS에서 가장 중심이 되는 코어이다. ㄴ 하드웨어를 제어해서 어떤 처리를 수행할 수 있도록 명령한다. 예를들면, 입출력을 관리하고 CPU, 메모리, 저장장치를 제어할 수 있다. 이 외에도 프로세스 등 시스템 자원을 제어하는 역할을 한다. ㄴ 하드웨어는 처리 후에 결과를 커널에게 알려주면 커널이 쉘에게 알려준다. 쉘 ㄴ User가 입력한 명령어가 쉘에게 전달되면 쉘은 이를 해석하여 커널이 이해할 수 있는 방식으로 커널에게 전달한다. ㄴ 명령어를 쉘에 해당되는 프로그램들이 해석해서 커널에게 전달한다. ㄴ 사용자가 입력한 명령을 해석하는 프로그램이 쉘이다. ㄴ 커널과 쉘을 분리한 이유 중 하나는 여러 쉘을 선택 가능하게 하기 위해서도 있다. ㄴ 우리는 우리가 선호하는 ..

리눅스 2021.08.24

[코딩인터뷰완전분석] 1.2_순열확인_풀이

Q. 문자열 두 개가 주어졌을 때 이 둘이 서로 순열 관계에 있는지 확인하는 메서드를 작성하라. [체크] 대소문자는 구분해야 하는지 공백은 하나의 문자로 처리해야하는지 입력받은 두 문자열의 길이가 같은지 (널 체크도 하면 좋을것 같다.) 확인 후에 해당 문자열을 char배열로 만들어 정렬을 진행한다. 두 문자열을 모두 정렬했을시 값이 같으면 순열이므로 true 값을 반환하면 된다. public String sort (String s) { char[] content = s.toCharArray(); java.util.Arrays.sort(content); return new String(content); } public boolean permutation (String s, String t) { if (s..

알고리즘 2021.08.24

[leetcode] Height Checker

https://leetcode.com/explore/learn/card/fun-with-arrays/523/conclusion/3228/ Explore - LeetCode LeetCode Explore is the best place for everyone to start practicing and learning on LeetCode. No matter if you are a beginner or a master, there are always new topics waiting for you to explore. leetcode.com 특정 배열이 주어졌을때 해당 배열을 오름차순으로 정렬할 시 몇개의 원소를 이동해야 하는가에 대한 문제이다. 일단, 입력받은 배열만큼의 동일한 배열을 새로 생성한 후 값을..

알고리즘 2021.08.24

[코딩인터뷰완전분석] 1.1_중복이 없는가_풀이

Q. 문자열이 주어졌을 때, 이 문자열에 같은 문자가 중복되어 등장하는지 확인하는 알고리즘을 작성하라 [체크] 문제를 풀기 전 ASCII 코드인지, 유니 코드인지 확인하자. 이 가정이 없다면, 배열의 크기를 늘려야한다. boolean isUnique (String str) { // ASCII 코드라 가정 1byte -> 2의8승, // 1비트는 값 표현에 쓰이지 않으므로 2의7승 최대 128개의 문자열이 들어온다. if (str.length() > 128) return false; boolean charSet = new boolean[128]; // charAt 함수를 통해 아스키 코드 값을 가져온 후 해당 아스키 코드값을 인덱스값으로 설정한다. // 그 후 해당 인덱스의 값을 true 로 설정. // ..

알고리즘 2021.08.24

Interface

인터페이스는 약속된 행위를 하도록 정의 한 후 실제 내부를 어떻게 구현할지는 각 Implements 에 따라 따로따로 만들 수 있게 하는 것이 인터페이스이다. 실제 다형성을 구현할 때 인터페이스를 많이 사용하게 된다. Implements 가 많아서 그것을 인터페이스 하나로 정의하여 사용하고 싶거나, 해당 소스코드가 라이브러리가 되어 외부사람한테 제공할 때 유용하게 쓰일 수 있다. (* 다형성 : 실제 오브젝트의 형태는 하나인데, 거기서 함수를 호출했을때 각 구현에 따라 그 행태가 달라지는 것 ) 단점은 코드가 읽기 어려워지고, 디버깅이 어렵다. 비지니스 요구가 계속 바뀌는 업종일 경우 인터페이스를 무작위로 추가하게되면 Implements 와 인터페이스 두 개다 계속해서 바꿔야 하는 상황이 와서 불편하다...

StringBuilder

1. StringBuilder 란 StringBuilder Class represents a mutable string of characters. StringBuilder 클래스는 문자의 가변 문자열을 나타냅니다. 2. String vs StringBuilder 비교 String 의 경우 불변(immutable) 이기 때문에 문자열을 계속해서 추가할 경우 (이어 붙이는 경우) 기존의 문자열과 새로운 문자열을 합한 만큼의 새로운 크기의 문자열을 생성하고, 기존 문자열과 새로운 문자열들을 한자 한자 씩 가져다 복사하는 비효율적인 방법을 사용하고 있다. String joinWords (String[] words) { String sentence = ""; for (String w : words) { sente..

ArrayList & LinkedList 설명과 비교

ArrayList 란? ㄴ 데이터를 추가하는데로 사이즈가 늘어나는 자료구조 ㄴ 기본적으로 자바에서 제공되는 Array 의 경우에는 객체 생성시 배열의 크기를 지정해주어야한다. ㄴ ArrayList 를 이용하면 데이터를 추가하는데로 사이즈가 늘어나 크기를 지정해주지 않고도 사용가능하다. ArrayList 특징 ArrayList 는 배열 방이 다 차면, 배열의 크기를 2배로 늘려준다. 현재 배열보다 2배 큰 크기로 새로운 배열을 생성하고, 기존 배열에 있었던 데이터를 전부 복사하는 작업을 진행하는데 이를 더블링 이라 한다. 더블링 소요시간은 기존 가지고 있던 데이터 길이가 n 이라 할 때 O(n) 만큼이 소요된다. ArrayList 성능 검색시간은 고정된 배열에서 검색되기 때문에 O(1) 이다. 입력시간 또..

자료구조 2021.08.21

HashTable

1. HashTable 이란? ㄴ Key & Value 로 데이터를 저장하는 자료구조 ㄴ 데이터 검색이 빠르다는 장점을 가지고 있다. ㄴ 내부적으로는 고유한 인덱스를 가진 버킷과 해시함수를 이용하여 값을 저장한다. (대표 버킷은 배열) ㄴ 예를들어, 검색하고자 하는 Key 를 입력받으면, 해시함수를 이용하여 해시코드를 반환받고, 해시코드를 버킷의 인덱스로 환산해서 데이터에 접근하는 방식의 자료구조이다. ( * 해시를 이용하면 데이터 암호화, 간소화를 통하여 빠른비교가 가능하다. ) 2. HashTable 장점 Func(Key) → HashCode → Index → Value 검색속도가 빠르다. ㄴ 해시함수를 통해 만든 해시코드는 정수이다. ㄴ 버킷공간을 고정된 크기만큼 미리 만들어놓고, 해시코드를 배열의..

자료구조 2021.08.21

알고리즘 학습법

1. 알고리즘 관련 이론을 이해하는 것이 중요하다. ㄴ 자료구조, 알고리즘, 개념, 수학이론 등 ㄴ 모르겠으면 해당 이론은 패스한 후 다른 이론을 공부하자. 2. 1문제당 2시간 정도 고민하는 시간을 갖자. ㄴ 2시간이 넘으면 포기하고 답을 찾아본 후 분석해보자. ㄴ 정답을 구하기 힘들다면, 커뮤니티를 활용하여 질문하는것도 방법이다. 3. 중요한 것은 충분히 고민해보고, 노력해보고 포기하는 것이다. ㄴ 답을 봤어도 풀었다고 생각하자. ㄴ 3일 1문제보다, 1일 3문제가 좋다. ㄴ 사용할 수 있 수 있는 라이브러리를 익혀두자. TIP. 많이 생각해보자. ㄴ 생각하는 과정을 배워서 스스로 그러한 생각을 해내는것이 중요하다. ㄴ 풀이에 대한 회고와 더 좋은 풀이방법을 찾아보자.

알고리즘 2021.08.21