안녕하세요 쿠케님 강의 잘 보고 있습니다! 강의를 보다가 갑자기 궁금한 점이 생겨서 질문 드립니다. 샤딩의 기준이 현재는 article_id로 되어 있는데, 특정 샤드에 댓글 데이터가 엄청 생성되어서 불균형하게 저장이 되는 경우도 있을까요?? 있다면 샤딩의 기준을 다시 정의하는 일도 있는지 궁금합니다. 항상 잘 보고 있습니다. 감사합니다.
이전까지 업캐스팅에서 부모의 기본생성자를 먼저 출력하고 다음에 자식의 생성자를 실행한다고 배웠는데 여기선 빼고 바로 B의 생성자로 가는 이유가 무엇인가요 앞 문제와 파라미터가 들어간 메인함수는 똑같은데 오버로딩과 무슨 관련이 있나요 B의 기본생성자에서 명시적으로 파라미터가 들어간 부모 생성자를 호출하기에 부모 기본생성자를 생략해도 되는건가요
29:27 삼항 연산자 한 줄로 되어있는 부분 해석해주실 때, if level % 2 != 0: 위 부분이 이해가 안됩니다. if node else 0 이 부분은 "if 부분이 참이면 return을 하고"라고 해석을 해주셨는데요 왜 if level % 2 != 0: 이 부분 해석해주실 때에는 != 같지 않다라고 해석을 해주시는지 궁금합니다.
안녕하세요! 강의 잘 듣고 있습니다. 좋은 강의 감사합니다. 실습하다가 오류가 생겨 문의 드립니다. void like(Long articleId, Long userId, String lockType) { restClient.post() .uri("/v1/article-likes/articles/{articleId}/users/{userId}/" + lockType, articleId, userId) .retrieve(); } @Test void likePerformanceTest() throws InterruptedException { ExecutorService executorService = Executors.newFixedThreadPool(100); // 100개의 스레드 풀 생성 // 각 lock type별로 테스트 likePerformanceTest(executorService, 1111L, "pessimistic-lock-1"); likePerformanceTest(executorService, 2222L, "pessimistic-lock-2"); likePerformanceTest(executorService, 3333L, "optimistic-lock"); } void likePerformanceTest(ExecutorService executorService, Long articleId, String lockType) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3000); System.out.println(lockType = " start"); like(articleId, 1L, lockType); long start = System.nanoTime(); for (int i = 0; i < 3000; i++) { long userId = i + 2; // String finalLockType = lockType; executorService.submit(() -> { like(articleId, userId, lockType); latch.countDown(); }); } latch.await(); long end = System.nanoTime(); System.out.println("lockType = " + lockType + ", time = " + (end - start) / 1_000_000 + " ms"); System.out.println(lockType + " end"); Long count = restClient.get() .uri("/v1/article-likes/articles/{articleId}/count", articleId) .retrieve() .body(Long.class); System.out.println("count = " + count); } 여기서 '람다 식에 사용되는 변수는 final 또는 유사 final이어야 합니다' 라는 오류가 뜨더라고요. // String finalLockType = lockType; 부분 주석 해제하고 람다 내부에 like(articleId, userId, finalLockType); 으로 하면 start lockType = start, time = 914 ms start end count = 0 start lockType = start, time = 589 ms start end count = 0 start lockType = start, time = 567 ms start end count = 0 으로 출력도 잘 안 나옵니다. 애플리케이션 콘솔에는 아래 로고만 찍히고 나머지는 안 나옵니다. Hibernate: select alc1_0.article_id,alc1_ 0.like _count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? Hibernate: select alc1_0.article_id,alc1_ 0.like _count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? Hibernate: select alc1_0.article_id,alc1_ 0.like _count,alc1_0.version from article_like_count alc1_0 where alc1_0.article_id=? 어느 부분이 문제일까요? ArticleLikeController에서 count 경로는 테스트처럼 뒤에 /count 추가했습니다.
arr+1의 값이 22가 나오는 이유가 arr의 배열은 4번까지 진행됐을때 {21, 31, 40, 50, 60}이고, 1번, 3번, 4번까지는 ptr의 포인터 변수의 값을 물어보는 의미이기 때문에 5번의 *arr+1은 arr배열의 초기값인 21에서 1을 더한것을 출력하기 때문에 22가 맞는건가요?
반복문과 range 강의 챕터 4:51 for i in range(3): j=0 while j<3: print("*", end=" ") j+=1 print() 위 구문에 대해서 range 의미를 잘 모르겠습니다. range(3)이니까 0~2까지 해서 3개가 된다는 것은 이해가 됐고, 개행이 2번 되어 행이 3개가 된다는 것은 이해가 됐습니다. 하지만 왜 각 행마다 개수가 range의 어떤 역할 때문에 *이 3개씩 있는지 이해가 되지 않습니다.
안녕하세요. 직전 강의인 구조체 강의에서 구조체 선언 방법에 대해 알려주셨는데, 거기서는 typedef 없이도 구조체 선언, 멤버 선언, 구조체 변수 선언을 한번에 다 할 수 있다고 하셨습니다.(구조체 강의 약 1:20) 예1: struct{ int year; float price; }Bag1; 그런데 이번 강의에서는 typedef 없이 struct만 쓰는 경우에는 타입으로 사용할 수 없다고 설명해 주셨습니다. 이 부분이 잘 이해되지 않는데요. 예2: typedef struct Bag{ int year; float price; }Bag1; 위에 예1과 예2의 차이점이 뭔가요? 예2는 struct Bag 자료형(타입)의 변수인 Bag1을 선언하는 것이라고 확실하게 이해했는데, 예시1번도 동일한가요?
안녕하세요. 동시성 검증 코드 관련하여 궁금한 점이 있어 문의드립니다. 강의에서 ExecutorService 를 사용하여 동시성 검증을 수행하신 것으로 보았는데, 이 방식만으로 실제 동시성 문제를 충분히 검증할 수 있을지 궁금합니다. 컨텍스트 스위칭 타이밍에 따라 경합이 발생하지 않을 가능성도 있을 것 같습니다. 예전에 면접에서 비슷한 질문을 받았는데, ExecutorService 기반 테스트만으로는 실제 운영 환경(수십만 건의 요청)에서 발생할 수 있는 동시성 이슈를 완전히 검증하기 어렵다는 지적을 받은 적이 있습니다. 혹시 이러한 한계를 보완할 수 있는 다른 검증 방법이나 접근 방식이 있을까요?
안녕하세요. 이번에 처음으로 3회차 11월 8일 시험을 준비하는 비전공자 학생입니다. 현재 지금 파이썬까지 섹션 5 강의까지 수강을 진행 완료한 상황입니다. 2주도 안남은 빠듯한 기간에 [한주는 4시간 공부, 막주는 계속 공부 전념] 합격을 최선을 다해서 해야하는 상황인데 아직 이론 공부도 시작을 못한 상황이여서 남은 기간안에 남은 섹션들의 강의를 수강해서 기출문제를 풀어야 하는지가 궁금한 상황입니다. 각각 남은 기간에 실기 준비와 이론 준비를 어떻게 준비를 하면 좋을지를 조언을 주시면 정말 감사하겠습니다.
안녕하세요. char myString[]="Hello, World!"; 인 경우 printf("문자열\"%s\"의 길이는 %d입니다.\n", myString, strLen(myString)); 의 출력 결과 관련하여 문의드립니다. (strLen(myString) 값은 13임) 출력 결과값을 문자열 "Hello, World!"의 길이는 13입니다. 로 적어주셨는데, 명령어 내의 \" \" 이건 왜 생략되나요? 문자열 \"Hello, World!\"의 길이는 13입니다. 이렇게 출력돼야 하는거 아닌가요?
업캐스팅(부묘 형태, 자식 생성자) 강의 챕터 업캐스팅 관련하여 단순히 출력 부분만 본다면 부모 형태 = new 자식(업캐스팅 O) 자식 형태 = new 자식(업캐스팅 X) 출력 구하는 부분에 있어서는 1번 이든 2번 이든 둘 다 new 자식에 해당하는 클래스로 이동해서 출력 값을 구하는게 아닌가 싶은데 1, 2번 차이가 저렇게 저는 인식하고 있어서 해당 내용이 맞는지와 뭐가 다른지 문의드립니다.
Java: 상속을 정리하는 문제 10개 22:59 자식 기본 생성자에 대한 출력을 하여야 하는 경우에, 부모 기본 생성자 출력 값을 먼저 출력하고 난 뒤에 자식 기본 생성자 출력을 하는 것으로 알고 있는데 맞나요? 맞다면 자식 기본 생성자는 있고 부모 기본 생성자는 없고 파라미터를 가진 생성자가 있는 상황에서 자식 기본 생성자를 호출하여야 하는 경우면 무조건 이 상황에서는 에러인가요?
Java: 상속을 정리하는 문제 10개 21:38 자식 클래스에는 자식 기본 생성자가 있지만 부모 클래스에는 부모 기본 생성자가 없을 경우, 부모 클래스에 있는 super(매개변수)로 표현하면 정상 실행이 된다고 하는데 자식 클래스에 기본 생성자가 있으면 부모 클래스에도 기본 생성자가 있어야만 정상 실행이 되는게 아닌건가 싶어서요