blob 의 객체에 이미지 또는 동영상 등의 바이너리 데이터를 넣을수 있음.

그렇기 때문에 따로 파일을 보관 안해도됨.

 

장점은 데이터 정보 , url 등을 숨길수 있으며

createBlobUrl로 blob url을 생성시킨 후 쓸모가 없어진 url을

revokeObjectUrl로 삭제시킬수가 있음.

( createBlobUrl로 생성한 url은 자동으로 삭제되지 않으므로

revokeObjectUrl로 삭제시켜야함)

 

blob객체는 slice 해서 부분부분 가져올수 있으며

바이너리 데이터를 읽고 싶은 경우는 FileReader 객체를 사용하면 된다.

 

blob url은 src url처럼 사용하면 된다.

 

그리고 blob url은 생성한 window가 아닌 다른 widow에서 작동하지 않는다.

 

 

api정리 잘된곳

https://developer.mozilla.org/ko/docs/Web/API/Blob

 

Blob

Blob 객체는 파일류의 불변하는 미가공 데이터를 나타냅니다.

developer.mozilla.org

 

 

 

'개발 > etc' 카테고리의 다른 글

OAUTH - 1  (0) 2020.08.21
네트워크 복습 1  (0) 2020.08.14
JUnit5 에서 parameter 사용하기  (0) 2020.07.21
Lombok  (0) 2020.07.19
어플리케이션 아키텍처와 객체지향 영상 후기  (0) 2020.06.28

decimal : 정확성이 높아야할때 사용 주로 돈과 관련

 

double : 가장 많이 사용

 

float : 정확성이 낮지만 속도가 빠름

'개발 > db' 카테고리의 다른 글

h2 database  (0) 2020.03.12

2020년 4월 16일 

 

자바의정석 3.0

이펙티브 자바

오브젝트

리팩토링

클린코드

자바 병렬 프로그래밍

그림으로 배우는 HTTP & Network

HTTP 완벽 가이드
DevOps와 SE를 위한 리눅스 커널 이야기
자바 8 인 액션
테스트 주도 개발
자바 ORM 표준 JPA 프로그래밍
토비 스프링

나는 line 개발자

스프링부트와 AWS로 혼자 구현하는 웹서비스

객체지향의 사실과 오해

스프링 입문을 위한 자바 객체 지향의 원리와 이해

시작하세요! 도커/쿠버네티스
도커/쿠버네티스를 활용한 컨테이너 개발 실전 입문

 

클래스 변수의 초기화 시점
    * 클래스변수의 초기화시점 : 클래스가 처음 로딩될 때 단 한번 초기화 된다.
    * 인스턴스변수의 초기화시점 : 인스턴스가 생성될 때마다 각 인스턴스별로 초기화가 이루어진다.

클래스 변수의 초기화 순서
    * 클래스변수의 초기화순서 : 기본값 -> 명시적초기화 -> 클래스 초기화 블럭
    * 인스턴스변수의 초기화순서 : 기본값 -> 명시적초기화 -> 인스턴스 초기화 블럭 -> 생성자

'개발 > java' 카테고리의 다른 글

공변 불변 반공변  (0) 2021.04.26
TDD 와 리팩토링  (0) 2020.09.07
JVM 구조 복습 - 1  (0) 2020.08.03
enum 사용시 주의할점  (0) 2020.05.13

biginteger없이 factorial 100! 을 기본자료형으로 출력

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        int carry = 0;
        HashMap<Integer, Integer> q = new HashMap<Integer, Integer>();
        q.put(01);
        for (int j = 1; j <= 100; j++) {
            int size = q.size();
            for (int i = 0; i < size; i++) {
                int temp = q.get(i);
                temp = (temp * j) + carry;
                carry = temp / 10;
                q.put(i, (temp % 10));
                
            }
            while (carry != 0) {
            
                q.put(size, carry % 10);
                carry /= 10;
                size++;
            }
        }
 
        for (int i = q.size() - 1; i > -1; i--) {
            System.out.print(q.get(i));
        }
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

시간복잡도 O(n (log n)^2)

 

1. hashmap에 숫자를 연산한후 숫자 하나씩 집어넣음

2. 하위 for문의 연산이 끝난 후 carry에 값이 남아있으면 추가적으로 등록시킨다.

3. carry는 숫자 하나씩 집어넣기 위해 10으로 나눈 후 몫을 담고 있는 변수

4. 숫자가 역순으로 들어갔기 때문에 출력할땐 역순으로 뽑으면 된다.

문제와 예시는 주소에서 확인

https://leetcode.com/problems/median-of-two-sorted-arrays/

 

Median of Two Sorted Arrays - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

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
32
33
34
35
36
37
38
39
40
41
class Solution {
    public double findMedianSortedArrays(int[] a, int[] b) {
        
       int allSize = (a.length + b.length);
 
        int chkSize = (allSize / 2)+1;
        int[] c = new int[chkSize];
        int chkNum = 0;
        int chkNum2 = 0;
        while (chkSize > 0) {
 
            if (a.length - 1 < chkNum) {
                c[chkSize - 1= b[chkNum2];
                chkNum2++;
                chkSize--;
                continue;
            }
            if (b.length - 1 < chkNum2) {
                c[chkSize - 1]= a[chkNum];
                chkNum++;
                chkSize--;
                continue;
            }
 
            if (a[chkNum] < b[chkNum2]) {
                c[chkSize - 1= a[chkNum];
                chkNum++;
            } else {
                c[chkSize - 1= b[chkNum2];
                chkNum2++;
            }
            chkSize--;
        }
        
        if (allSize % 2 == 0) {
            return ((double)(c[0+ c[1])/2);
        }
        
        return (double)c[0];
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

https://it-and-life.tistory.com/48

이 블로그글의 마지막 줄에 등록된 링크에서 힌트를 얻음

 

시간복잡도 O(log n+m)

 

1 .매개배열 2개의 사이즈값을 구해 더한후 반으로 나눠서 1을 더함

   1을 더한 이유는 배열은 0부터 시작하기때문에 숫자 맞춰줄려고 더함

2. 반을 나눈 이유는 두개의 배열을 합친 후 그 중간의 값을 알아야할때 

   합친후 반을 나눈것이랑 같기 때문

3. 그 후 반으로 나눈 숫자와 같아질때까지 숫자를 더해준다.

4. 정렬로 작은 값부터 등록하므로 배열의 인덱스는 따로 관리

 

 

 

 

문제 Given a string, find the length of the longest substring without repeating characters.

 

예시는 https://leetcode.com/problems/longest-substring-without-repeating-characters/

 

Longest Substring Without Repeating Characters - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

링크에서 확인

 

 

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
class Solution {
    public int lengthOfLongestSubstring(String s) {
        int resCnt = 0;
        if (s.length() > 0) {
            
            char[] a = s.toCharArray();
            
            for (int i = 0; i < a.length; i++) {
                int tempCnt = 0;
                HashMap<Character, Integer> strArr = new HashMap<Character, Integer>();
                tempCnt++;
                strArr.put(a[i],i);
                for (int j = i + 1; j < a.length; j++) {
                    if (strArr.containsKey(a[j])) {
                        break;
                    } else {
                        tempCnt++;
                    }
                    strArr.put(a[j],i);
                }
                resCnt = (tempCnt > resCnt) ? tempCnt : resCnt;
            }
        }
        return resCnt;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시간복잡도 O(n^2)

 

1.hashmap에 담았을때가 두번째로 빠르다.

2.첫번째로 빠른것은 int형 배열

3.list방식은 가장 느리다.

 

 

 

문제

add two numbers의 문제와 같지만 이번엔 역순으로 저장되어있지 않다.

 

Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 8 -> 0 -> 7

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
       int checkNum = 0;
        Stack<Integer> stackL1 = new Stack<Integer>();
        Stack<Integer> stackL2 = new Stack<Integer>();
        
        while (l1 != null) {
            stackL1.add(l1.val);
            l1 = l1.next;
        }
        
        while (l2 != null) {
            stackL2.add(l2.val);
            l2 = l2.next;
        }
        
        ListNode dummy,result = new ListNode(0);
        
        dummy = result;
        
        while (stackL1.size() != 0 || stackL2.size() != 0 || checkNum != 0) {
            
            if (stackL1.size() != 0) {
                checkNum += stackL1.pop();
            }
            
            if (stackL2.size() != 0) {
                checkNum += stackL2.pop();
            }
            
            dummy.val = checkNum % 10;
            
            dummy = new ListNode(0);
            dummy.next = result;
            result = dummy;
            
            checkNum /= 10;        
            
        }
 
        return result.next;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시간복잡도 O (n log n)

 

1.각각의 스택에 매개변수로받은 l1,l2를 집어넣는다.

2. 1번문제와 같이 담을 listnode 생성

3. stack은 pop을 사용할경우 마지막에 넣엇던 값을 출력하며 스택에 담긴 값을 지운다.

4. 39번줄 dummy.val에 stack에서 뽑아낸값을 저장한후 10으로 나눈 나머지를 저장

5. 45번 checkNum에는 10으로 나눈 몫을 저장

6. dummy에 새 listnode인스턴스를 생성한 후 dummy.next dummy의 하위에 result 주소를 담는다.

7. 다시 result에는 dummy주소를 담는다.

8. 이렇게되면 result는 0이 생성되어있고 하위노드는 아까 checkNum으로 나눈 나머지가 저장되어있다.

9. 이런식으로 하위부터 상위를 만들어나간다.

10. 스택에서 뽑아낸값을 썼으므로 하위부터 상위로 만들면 똑바로 나옴

11. 스택을 사용한 이유는 노드는 앞자리 숫자부터 등록되어있기 떄문에 자릿수 연산에 불편함이 있으므로

    스택을 사용하여 편하게 일의 자리숫자부터 연산을 함 

12. while 조건이 끝나면 return

 

 

+ Recent posts