210426-TIL

janeljs·2021년 4월 26일
0

TIL

목록 보기
23/33
post-thumbnail

오늘 한 일

느낀 점

🧩 자료구조

  • DOM 트리의 노드값을 읽어오는 크롤러를 통해 트리 순회를 설명하다니 너무너무 재밌다.
  • org.jsoup.select.Elements에 들어가보니 Elements 클래스는 List 인터페이스를 구현하고, 기본 생성자에서 ArrayList로 초기화되고 있었다. 신기하군...
public class Elements implements List<Element>, Cloneable {
    private List<Element> contents;

    public Elements() {
        contents = new ArrayList<Element>();
}
  • 서비스 약관 준수를 위해 크롤링 속도를 제한하는 메서드를 구현해보자!
    • minInterval(1000)에 마지막 요청 시간을 더한 값에서 현재 시간을 뺀 값이 0보다 크면(1초보다 더 짧은 간격으로 요청이 갔다면), 해당 시간만큼 쓰레드를 sleep하도록 설정한다.
    • 이 때 WikiFetcher 객체를 싱글톤 패턴으로 구현하고, 한 객체로 모든 요청을 처리해야 요청 사이의 최소 간격을 보장할 수 있다.
public class WikiFetcher {
    private long lastRequestTime = -1;
    private long minInterval = 1000;
    
    private void sleepIfNeeded() {
        if (lastRequestTime != -1) {
            long currentTime = System.currentTimeMillis();
            long nextRequestTime = lastRequestTime + minInterval;
            if (currentTime < nextRequestTime) {
                try {
                    Thread.sleep(nextRequestTime - currentTime);
                } catch (InterruptedException e) {
                    System.err.println("sleep interrupted!");
                }
            }
        }
        lastRequestTime = System.currentTimeMillis();
    }
}

📝 기타

  • 어떻게 코드를 짜든 "나만의 이유"가 있어야 한다. - 호눅스 말씀

  • 김영한 님 강의는 언제 들어도 재밌다.

  • 인프런 대표님이 페이스북 친추를 주셨다! 나도 언젠가 인프런같이 좋은 회사에서 일할 수 있을까...? 동욱 개발자님같은 분이 사수로 계신 회사.. 너무 가고싶다😭

  • 리모델링했다😆

profile
알고리즘 풀이는 👉 janeljs.github.io 👈에 올려요💓

6개의 댓글

comment-user-thumbnail
2021년 4월 27일

인프런 대표님이랑 친구하셨어요..?ㅋㅋㅋㅋㅋ대박ㅋㅋㅋㅋ그리고 제인방 어디로 가면되나요 ㅋㅋㅋ

2개의 답글