========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. JPA 유의점과 V3.1 에 대한 질문입니다! 지금까지 수업을 들으며 제가 요약한 내용은 Repository 에서 Entity 를 조회한다. 해당 조회에서 N+1이 발생한다면 -> 회원목록을 조회한다면 N+1 이 발생하지 않지만, 회원목록 + 가장 최근에 주문한 상품1개 도 함께 조회를 한다면 N+1 문제가 발생한다. > 목록데이터를 조회하는데, 목록데이터 각각의 PK를 FK로 참조하는 다른 테이블의 데이터를 함께 조회하는데 Lazy 로딩일 경우 N+1 문제가 발생한다. N+1 이 발생할 경우 fetch join 으로 변경한다. 해당 fetch join 쿼리에 컬렉션(리스트 등) 타입이 존재할 경우 select 문에서 컬렉션을 조회하는 쿼리를 지우고, XtoOne 연관관계에 있는 엔티티 조회는 fetch join 을 유지한다. + hibernate.default_batch_fetch_size 설정한다. 이렇게 정리했습니다! 혹시 정정해야하는 부분이 있을까요?? V3.1 에 대한 질문은, 조회쿼리에서 OrderItem은 없지만, Controller 에서의 @Data static class OrderDto { private Long orderId; private String name; private LocalDateTime orderDate; private OrderStatus orderStatus; private Address address; private List<OrderItemDto> orderItems; public OrderDto(Order order) { orderId = order.getId(); name = order.getMember().getName(); orderDate = order.getOrderDate(); orderStatus = order.getStatus(); address = order.getDelivery().getAddress(); orderItems = order.getOrderItems().stream() .map(orderItem -> new OrderItemDto(orderItem)) .collect(toList()); } } @Data static class OrderItemDto { private String itemName; //상품명 private int orderPrice; //주문가격 private int count; //주문수량 public OrderItemDto(OrderItem orderItem) { itemName = orderItem.getItem().getName(); orderPrice = orderItem.getOrderPrice(); count = orderItem.getCount(); } } 여기서 List<OrderItemDto> orderItems 부분으로 인하여 proxy 로 들고 왔던 것을 실제 DB조회를 하여 orderItems 에 값을 채워넣는 게 맞나요?
안녕하세요, 14.22 강의를 듣다가 함수 포인터는 아니지만 예제 속 변수의 포인터에 관한 의문이 생겨 질문 남깁니다. 1. 해당 예제를 따라하다가 toupper, tolower함수의 사용과 변수들의 저장에 대해 궁금증이 생겨 아래 코드를 작성하고 실행을 시켜 보았는데요, void ToUpper(char* str1) { printf("Address of str(before toupper function operate) : %lld\n", (long long)str1); while (*str1) { *str1 = toupper(*str1); str1++; } printf("Address of str(after toupper function operate) : %lld\n", (long long)str1); } void ToLower(char* str2) { printf("Address of str(before tolower function operate) : %lld\n", (long long)str2); while (*str2) { *str2 = tolower(*str2); str2++; } printf("Address of str(after tolower function operate) : %lld\n", (long long)str2); } int main() { char str[] = "Hello World!"; void (*pf)(char*); pf = &ToUpper; printf("String literal: %lld\n", (long long)("Hello, World!")); printf("Function pointer: %lld\n", (long long)ToUpper); printf("Function pointer, pointer ver: %lld\n", (long long)pf); printf("Variable : %lld\n", (long long)str); printf("\n"); (*pf)(str); printf("\n"); printf("ToUpper ver: %s\n", str); printf("Address of str after function ToUpper Operate: %lld\n", (long long)str); pf = &ToLower; printf("\n"); (*pf)(str); printf("\n"); printf("ToLowerr ver: %s\n", str); printf("Address of str after function ToLower Operate: %lld\n", (long long)str); return 0; } 먼저 main 함수 내에서 str의 주소를 찍어 본 결과 "Variable : 803261380856"라는 주소값이 출력된 걸 볼 수 있고 이를 ToUpper 함수에 넣고 다시 주소를 찍어보니 "Address of str(before toupper function operate) : 803261380856"로, 같은 주소가 출력된 걸 볼 수 있었습니다. (char*로 받아줬으니 당연하겠지만요.) 이후 ToUpper 함수 내에서 toupper 함수가 포함된 while 문이 돌아간 후 다시 주소를 찍어보니 원래 값보다 12가 추가된 803261380868라는 값이 출력된 걸 볼 수 있었고, 이는 while문 내에서 str1++연산이 수행되며 *str의 각 characer를 대문자로 바꿔주는 과정이 있었기 때문에라고 생각했습니다. 의문이 생겼던 부분으로, ToUpper가 실행된 결과가 끝나고 "ToUpper ver: HELLO WORLD!"가 출력된 후, str의 주소를 다시 찍어봤는데 12가 추가된 값이 아닌 원래의 주소값이 출력이 된 걸 볼 수 있었는데요, 처음에는 ToUpper 함수의 매개변수의 데이터 타입이 char*이니, 막연하게 str의 주소도 당연히 바뀐 값이 나올 거라고 생각했었는데 생각해보니 위 경우는 포인터의 참조값을 사용한 것이 아닌 포인터 자체의 값을 연산한 것이니 call by value로 포인터 변수가 사용된 것이며, main 함수의 str과 ToUpper의 매개변수인 str1은 처음에는 가리키는 주소가 같았으나 str1의 경우 함수 내에서 가리키는 값이 증가한 후, 해당 함수가 끝날 때 같이 사라지는 지역변수로서 사용된 것이라는 결론이 나왔습니다. 제가 생각한 과정과 결과가 맞는지 궁금합니다. 2. main 함수에서 str의 타입이 char[]로 지정이 되어 있는데, 이를 char* str로 바꾸니 런타임 에러가 나더라구요. char* str로 문자열에 접근하는 것은 read only인 Text Segment의 주소를 가져온 것인데, ToUpper 함수 내에서 str = toupper( str)에서 값을 바꾸려는 시도 때문에 에러가 나는 것이 맞나요? 감사합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] 안녕하세요. 잘 듣고 있는 수강생입니다. 지금 스프링부트로 프로젝트를 하려고하는데 자바문법기본도 아직 익숙치 않은 상황입니다. 그래서 지금 강의를 자바 기본편부터 듣고 스프링부트강의를 듣는게 나을까요? 아니면 프로젝트를 위해서 스프링부트 강의를 먼저 듣는게 나을까요?
String tmpPath = "C:/Tmp"; mac은 예제에 있는 경로가 맞지 않아 아래 에러가 발생합니다. Caused by: java.io.IOException: No such file or directory 그래서 올바른 홈 경로를 변경해줘야 합니다. 아래의 경로로 변경 String tmpPath = System.getProperty("user.home") + "/Temp"; 이렇게 경로를 바꿔주시면 /Users/{username} 경로에 정상적으로 생성됩니다. 혹시 모르는 분이 계실까봐 작성해둡니다.
방금 예제를 여러번 실행하면 어떻게 되는지 궁금해서 몇번 실행해봤는데, 최초에 생성된 시간 그대로 파일이 유지돼있네요. 파일 생성만 하고 또 실행 -> 파일 바뀌지 않음 생성된 파일 수정하고 또 실행 -> 파일 바뀌지 않음(수정한 내용이 그대로 있음) 확인해보니 createNewFile() 는 true와 false를 반환하여 false일 때에는 생성을 하지 않고 있네요. 해당 함수는 멱등성을 보장한다고 해야되는지 아닌지 궁금합니다. 그런데 멱등성을 보장한다고 하기엔 안에 내용을 유지시켜주지는 않는거 같네요. 완전한 멱등성이라고 하면 수정된 내용도 없어지고 아무것도 없는 파일로 바뀌어야 되는거 아닐까 생각이 들어서 명확하게 확신이 없어서 질문 드립니다.
아래와 같이 똑같이 입력했는데 결과값이 아예 다른데 무엇이 문제일까요?ㅠㅠ import pandas as pd df=pd.read_csv("clam.csv") df #데이터분할에서 만들기 train = df.iloc[:210, : ] test=df.iloc[210: , : ] #로지스틱 회귀모델 만들기 #잔차이탈도는 로짓에서 볼수없고 glm에서 볼수있다. from statsmodels.formula.api import glm import statsmodels.api as sm model = glm("gender~ age + length + diameter + height + weight", data=train, familiy=sm.families.Binomial()).fit() print(model.summary())
스케일링도 데이터 프레임별 범위에 따라 fit() 할 프레임을 구분해줘야할까요? train['a'] 컬럼이 1~100 범위이고 test['a'] 컬럼은 1~200 범위라면 B먼저 fit하고 A는 transform 을 해줘야하나요? 아니면 각각 fit_transform 해야할까요? 범주형 컬럼 인코딩의 경우를 생각해보니 문득 위와 같은 상황에서 어떻게 해야하는지 궁금하네요.
설명을 들어서 a=10 static.b = a 니까 static.b++의 출력값은 10이고, 이후 11이 된다고 이해를 했는데, 그러면 그 아래 출력값 a가 10 이면 그대로 똑같이 10이 아니라 왜 st.a는 class Static의 20을 가져오나요? 두번째 출력값은 바로 위 출력값에서 계산된 걸 가져왔는데 네번째 출력값은 왜 가장 위의 클래스 거를 가지고 오는지 개념이 이해가 안됩니다
28분대에 있는 23년 1회 JAVA 문제인데요. 출력값 처음에 Static.b++는 a=10 static.b=a 때문에 출력값 10인 건 이해가 되고, st.b는 왜 0이 아니고, 11인지 이해가 안되고.. 마지막 출력값 st.a은 왜 10이 아니고 20인지 이해가 안되네요. 기출문제부터 따라가기 너무 힘든데 이거 강의를 다시 들어야하나요? 혼자서 문제를 풀면 문제 설명하는 흐름대로 생각이 잘 안나는 것 같아요
질문이 2개인데요... 문제 풀이영상을 보면 sum + (input[a][b]) * di ; input[a][b]에 %10을 넣으면 뭐 때문에 순차적으로 0 , 10, 100, 1000, 00000, 100000 이렇게 되는지 이해가 안되고, 2번째는 di가 1부터 시작을 하고 di*2면 2,4,6,8,10 이렇게 커지는거 아닌가요? 그렇다면 2의2승 2의3승 2의4승 2의5승 이렇게 커지지 않으니까 계산이 안되는 것 같은데 ㅠ.. 좀 어렵네요
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 3-6. 쿼리플랜이란? 여기까지 이해하신 내용은 무엇인가요? 옵티마이저가 스토리지 엔진으로부터 가장 효율적으로 데이터를 가져오기 위해 쿼리플랜을 작성한다는 것을 이해했습니다. 2. 어려움을 겪는 부분 어떤 개념이 헷갈리시나요? 이때 인덱스를 참고해서 데이터를 가져온다면 이 인덱스는 메모리에 올라와 있는 상태인가요?? 아니면 디스크에 있는 인덱스를 확인하고 디스크에서 데이터를 가져오는 건가요? 데이터를 가져오는 전체적인 흐름이 궁금합니다! 3. 시도해보신 내용 문제 해결을 위해 어떤 시도를 해보셨나요? 에러가 발생했다면 어떤 에러인가요? 현재 작성하신 코드를 공유해주세요 이렇게 구체적으로 알려주시면, 더 정확하고 도움이 되는 답변을 드릴 수 있습니다!
안녕하세요! 강의 너무 잘 들었습니다. 덕분에 데이터분석 학습 과정에 대한 로드맵을 설정할 수 있었습니다. 다름 아니라 독학으로 데이터분석 취업하기 파트에 질문이 있어 글 남겼는데요, 책을 통한 학습을 제시해주셨는데 책 대신 강의 (예를들면 인프런의 강의들) 로 교체해도 무방한지 아니면 책으로 하는게 더 좋을지 강의자님의 고견 구하고자 합니다. 저의 백그라운드 및 목적 및 목표 설명드리자면 비전공자로 현재 데이터분석 부트 캠프를 진행중이며 부트캠프 수업 과정과는 별개로 스스로의 커리큘럼을 추천해주신 강의 커리큘럼을 참고해서 진행하려고 합니다. 목적은 일련의 학습과정을 통해 포트폴리오를 작성할 만한 실력을 쌓는 것 이며, 이에 도달하는 과정을 최대 6개월 가능하면 3개월 이내로 줄이는 것이 목표 입니다.