알고리즘

그리디 알고리즘의 대표적인 예가 활동 선택 문제???
Arrays.sort() // Counting Sort
Counting Sort은 시간복잡도가 O(n) -- 카운트 하는것
단점은 counting배열이라는 새로운 배열은 선언해주어야 한다는 점. 생각보다 이 단점이 꽤 클 수 있는데, array 안에 있는 max값의 범위에 따라 counting 배열의 길이가 달라지게 된다. 예로들어 10개의 원소를 정렬하고자 하는데, 수의 범위가 0~1억이라면 메모리가 매우 낭비가 된다.
즉, Counting Sort가 효율적인 상황에서 쓰려면 수열의 길이보다 수의 범위가 극단적으로 크면 메모리가 엄청 낭비 될 수 있다는 것.

그렇기 때문에 각기 상황에 맞게 정렬 알고리즘을 써야하는데, 퀵 정렬이나 병합정렬 등이 선호되는 이유도 이에 있다. (Quick 정렬의 경우 시간복잡도 평균값이 𝚶(nlogn) 으로 빠른편이면서 배열도 하나만 사용하기 때문에 공간복잡도는 𝚶(𝑛) 으로 시간과 메모리 둘 다 효율적이라는 점이다.)

퀵정렬, 힙정렬, 합병정렬은 O(nlogn)


자바 정렬 종류
1. Arrays.sort - 듀얼피봇 퀵정렬 / 퀵 정렬은 참조 인접성이 좋다
2. Collections.sort() - 레거시로 합병정렬과 Tim 정렬을 사용하고 / Collection은 참조 지역성이 안좋기 때문에 tim정렬을 이용해야 더 좋은 성능을 기대할 수 있다.


정처기

라우터는 최적의 경로를 찾아서 페킷을 전송 - 네트워크와 네트워크를 연결한다.
허브는 라우터를 통해 받아서 자신의 연결되어있는 컴퓨터에 데이터를 다 뿌리는거
스위치는 허브랑 비슷한데 mac주소를 가지고 있는 테이블을 통해 해당 주소가 맞는 컴퓨터에게만 데이터를 보내기때문에 더 효율적이다.
정처기 책 다읽었다ㅎㅎ 이제 문제만 풀면 된다!!!


스프링

파라미터의 수집을 다른 용어로는 '바인딩'이라고 한다. 화면에서 '2018-01-01'과 같이 문자열로 전달된 데이터를 Date타입으로 변환하는 작업이 그러하다. 스프링 Controller에서는 파라미터를 바인딩할 때 자동으로 호출되는 @InitBinder를 이용해서 이러한 변환을 처리할 수 있다.

Java Beans 규칙에 맞는 객체는 다시 화면으로 객체를 전달한다. Java Beans 규칙은 생성자가 없거나 빈 생성자를 가지며, getter/setter를 가진 클래스의 객체들을 의미
그러나 기본 자료형의 경우는 파라미터로 선언하더라도 기본적으로 화면까지 전달되지는 않는다.

@ModelAttribute("value") 강제로 전달받은 파라미터를 Model에 담아서 전달하도록 할 때 필요한 어노테이션

dependencies를 작성할 때는 특정버전을 명시하지 않아야 한다. 그래야 각 라이브러리들의 버전 관리가 한 곳에 집중되고, 버전 충동 문제도 해결되어 편하게 개발을 진행할 수 있다.

buildscript {
    ext {
        springBootVersion = '2.1.9.RELEASE'
    }

build.gradle에서 ext는 사용하는 전역변수를 설정하겠다는 의미인데, 여기서는 springBootVersion 전역변수를 생성하고 그 값을 2.1.9.RELEASE 로 하겠다는 의미이다.

ctrl + k --> 깃 커밋창 열기

그냥 프로젝트 먼저 간단하게 만들면서 익혀야겠다. 스프링 부트로 파일 올리는 게시판 만들고 @ Transaction어노테이션이이랑 안써본 어노테이션 써보고 aop도 익히고 배포까지 해보는게 목표다. 자바스크립트도 거의 모르기 때문에 자바스크립트도 익히기!!

profile
안녕하세요

0개의 댓글