파이썬 인터뷰 2

1, 큰 데이터 파일을 읽고

 

 

  1.  사용 발전기 발전기
  2. 반복자의 반복을 통해 : 파일의 라인

2 반복자 발전기 차이점

 

  1. 그 다음 클래스는 자신의 방법을 가지고 있으며 방법은 ITER를 반환하는 경우 반복자는 좀 더 추상적 인 개념, 어떤 개체입니다. 등 컨테이너 개체의 문자열 목록, 딕셔너리, 튜플, 이러한 유형의 경우, 편리 루프 반복에 사용됩니다. 문에 대한 배경 () 함수, ITER를 호출에서 컨테이너 개체에 ITER ()는 파이썬의 내장 함수이다. ITER ()는 () 함수 파이썬 옆 내장 개별적 컨테이너의 컨테이너 엘리먼트 내의 액세스 반복자 오브젝트의 정의 다음 () 메소드를 반환한다. 후속 요소가 없을 경우, 다음 ()는 StopIterration의 예외를 발생한다.
  2. 발전기 (제너레이터) 반복자를 생성하기위한 간단하고 강력한 도구입니다. 그들은 일반 기능과 같은 기록하지만 데이터를 반환하는 데 필요한 시간에 항복 문을 사용하고 있습니다. 다음마다 ()가 호출되고, 발전기에서 (이 명령문이 실행될 마지막으로 모든 데이터 값을 기억 위치) 위치로 돌아갑니다

차이가 : 반복자가 할 수있는 모든 일을 할 수 빌더뿐만 아니라, 발전기 특히 간단하지만 매우 효율적 생성기입니다 __ ()와 () 메서드 다음 __iter 자동으로 생성하는 대신 목록 발전기 식을 사용 이해는 동시에 메모리를 절약 할 수 있습니다. 생성 발전기가 종료 될 때 자동으로 생성되는 프로그램의 상태를 유지하는 것 외에도, 자동 StopIterration 예외 달렸다.

 

3. 역할과 기능의 장식

 

  • 로그의 도입
  • 기능 실행 시간 통계
  • 돈 준비 과정의 기능의 실행
  • 함수가 실행 된 후 기능을 청소
  • 권한을 확인하고 다른 장면
  • 캐시

다음 GIL 약 4, 간단한 이야기

글로벌 통역 잠금 (글로벌 통역 잠금)

    가상 머신에 의해 실행 파이썬 파이썬 코드 (또한 인터프리터 메인 루프로 알려진이 CPython의 버전)의 제어는, 파이썬은, 즉, 통역자의 메인 루프로 고려 언제든지 실행에서 하나 개의 스레드 설계된 인터프리터에서 실행되는 하나 개의 스레드. 파이썬 가상 머신에 대한 액세스가 글로벌 통역 잠금 (GIL)에 의해 제어되고,이 잠금은 하나의 스레드가 실행되는 것을 보장합니다.

 

다중 스레드 환경에서, 파이썬 가상 머신은 다음과 같은 방법을 실행한다 :

1. 설정 GIL

스레드 2. 전환 실행

3. 실행 :

    가. 바이트 코드 명령의 수를 지정하거나

    나. 컨트롤에 스레드 이니셔티브 (당신은 time.sleep 호출 할 수 있습니다 (0))

4. 잠을 스레드를 넣어

5. 잠금 해제 GIL

6. 위의 모든 단계를 다시 반복

그런 다음 외부 코드를 호출 (예 : C / C ++ 확장 기능) GIL은 (어떤 파이썬 바이트 코드가이 시간 동안 실행하지가 있기 때문에, 그래서 전환 스레드하지 않음) 기능이 끝날 때까지 잠 깁니다 말한다.

 

5 찾아 그렙

grep 명령은 텍스트 파일 조회 모드 수 있도록 정규 표현식을 될 수있는 모든 콘텐츠 문자열을 grep으로 강력한 텍스트 검색 도구입니다. 일치하는 패턴이 발견되면, 그렙 지문 패턴을 포함하는 모든 라인.

일반적으로 특정 디렉토리에 적합한 파일을 검색하는 데 사용 찾을 수 있습니다, 또한 파일의 특정 사용자 소유자를 검색 할 수 있습니다.

 

여러 가지 원인이 방법을 수행하는 정지에 의한 6, 온라인 서비스가 될 수있다?

리눅스 관리 툴 관리자의 백그라운드 프로세스

각각의 파일은 리눅스에서 다시 시작 supervisord 서비스를 수행하도록 수정 한 후

 

7, 어떻게 파이썬의 운영 효율성을 개선하기 위해

    생성기를 사용하여 상기 키 코드 (사이 썬, pylnlne, pypy 파이렉스)를 사용하여 외부 함수 패키지, 루프 최적화 - 사이클에서 가변 속성에 액세스를 방지 할

 

8, 일반적으로 사용되는 리눅스 명령

    LS, 도움, CD, 더 명확하고, MKDIR, PWD, RM, 그렙 발견, MV, SU, 날짜

 

수율 9, 파이썬 사용

    이 함수가 반환하는 마지막 시간을 기억할 수있는 위치에 기능 있도록 수율은 단순히 생성기입니다. 제 (또는 n 회)에 대한 함수 호출 점프를 생성한다.

 

10, 파이썬에서는 메모리 관리입니다

첫째, 가비지 컬렉션 :

    C ++, 그리고 다른 언어와는 달리 파이썬, 자바처럼, 그들은 사전에 직접 변수 할당의 유형을 변수를 선언 할 수 없습니다. 실행 시간과 메모리에서 언어, 객체 유형의 측면에서 파이썬은 결정된다. 우리가 (여기서 우리가 동적으로 입력 된 언어는 단순히 자동 변수 유형 및 변수 할당을 결정 런타임에 메모리 주소의 변수 할당에 기인 할 수있다) 파이썬 언어를 동적으로 이유를 입력 할 때 부르는 이유입니다.

두 번째로, 레퍼런스 카운트 :

    같은 윈도우 커널을 사용하여 파이썬은 메모리를 관리 할 수있는 유사한 방법으로 객체. 객체 참조를 가리키는의 카운트를 유지하고 각 개체. 변수가 개체에 결합 될 때, 변수 참조 카운트는 자동 태그를 유지할 수있어서, 주사의 타이밍 때 라벨 1 (그리고 다른 경우에는 증가 된 카운트 변수 참조가 발생할 것이다) 기준 카운트가 0이되면, 대상물을 회수한다.

셋째, 메모리 풀 메커니즘

    피라미드로 파이썬 메모리기구 :

    -1, -2 주 운영체제 층 동작;

    레이어 0에서는 C의 malloc 자유롭고 다른 메모리 할당 및 해제 기능 동작이다;

    제 1 층과 제 2 층은 메모리 풀이며, 파이썬이 층의 목적은 직접 할당 된 메모리의 256 바이트 인 경우에 구현되는 인터페이스 함수 PyMem_Malloc 기능을 갖고;

    제 3 층, 즉, 우리가 파이썬 객체의 조작 지시 최상부 층이고;

는 C의 malloc 및 빈번한 경우 무료 통화가 빈번한 메모리 할당과 결합 성능 문제를 생성하고 메모리를 생산한다 파편의 작은 조각을 방출 할 경우.

파이썬은 여기에 주요 아르에서 일을 :

자신의 메모리 관리 시스템의 사용에 1, 256 바이트 사이의 메모리의 요청 할당, 또는 직접의 malloc를 사용하는 경우.

여기에 여전히 메모리를 할당하는 malloc을 호출하지만 때마다 그는 메모리의 256 바이트의 청크 크기를 할당 반환합니다.

 

메모리 풀 메모리를 통해 등록 결국 메모리 풀을 재활용하고, 다음 사용을 위해, 무료 C 안심 호출하지 않습니다. 그러한 다른 변수 B 말하기 값 문자열 튜플 (튜플이 변경 될 수 없음) 이중화 방식 (딥 부)에 사용되는, 즉, 단순 객체 파이썬은 변수 (A)에 할당하는 동안 및 B의 메모리 공간은 동일하지만 A, A와 B의 주소 공간의 변경, 재 할당의 값은 더 이상 동일한 경우.

 

11, 배열 간의 차이를 기술의 연결리스트, 큐 스택?

어레이 및 데이터 저장의 개념, 연속적인 공간에 저장된 데이터의 배열과 연결리스트 데이터의리스트는 비 연속 공간에 저장 될 수있다;

스택 큐는 데이터 액세스 모드, FIFO 큐의 개념적인 설명이며, 스택은 LIFO이다 스택 큐 배열로 구현 될 수있는 연결리스트 구현이 또한 사용될 수있다.

 

12, 당신은 어떤 종류를 알고, 당신은 가장 친숙한 종류에 대해 이야기?

 

웹 프레임 부

1.django에서 사용자가 로그인하는 응용 프로그램 서버 (로그인 상태가)를 선택한 다음, 다음 요청의 nginx 프록시는 애플리케이션 서버 B가 어떤 영향을 나타납니다 할 때?

사용자 로그인 세션 데이터가 그 전에, 응용 프로그램 서버 B에 공유되지 않은 경우 서버 응용 프로그램에 로그인 한 사용자가 없습니다.

2. 크로스 도메인 요청은 (원칙)의 문제를 해결하는 방법을 장고

사용 미들웨어

포스트 요청

확인 코드

형태로 추가 {% csrf_token %} 태그

 

3. 설명하거나 장고 프레임 워크를 적어주세요

MVC의 디자인을 다음과 독점 기간을 가지고 장고 프레임 워크 : MVT

M은 철자 모델이며, M은 동일한 기능 MVC의 데이터 처리를 담당하는 임베디드 ORM 프레임 워크

동일한 MVC의 HttpRequest를 수신에서보기 V 철자 및 C 기능, 서비스 처리, 반환 HttpReponse

HTML 패키지 구조에 대한 책임 MVC 같은 기능에 T 템플릿으로 맞춤법, V는 반환되는, 내장 템플릿 엔진

 

4.django 데이터 쿼리를 수행하는 방법 결과 정렬 내림차순으로 그것을 수행하는 방법, 쿼리를 수행하는 방법에 필드보다 큰

정렬) (order_by 사용

정렬 필드 이름을 내림차순하기 전에 필수 -

쿼리 필드는 특정 값보다 큰 : 필터를 사용합니다 (필드 이름 _gt = 값)

 

장고, 미들웨어 미들웨어의 역할에 대한 5 이야기?

미들웨어 글로벌 장고의 처리 요구 및 응답 과정, 입력 비교적 경량 변경과 출력 사이에 개재

 

6. 당신은 장고의 알고 계십니까?

장고는 가장 잘 완전 자동화 된 관리 배경 알려져 크고 갈 방향입니다 만 간단한 개체 정의를 수행 ORM을 사용해야 자동으로 데이터베이스 구조뿐만 아니라, 완전한 기능을 갖춘 관리 배경을 생성 할 수 있습니다.

프레임 워크 내에서 다른 모듈과 결합 장고 ORM에 내장 된 높은 수준의

이 응용 프로그램은 그렇지 않으면 프레임 워크 내에서 제공의 편의성을 기반 ORM의 모든 종류를 즐길 수 있으며, 내장 된 장고 ORM을 사용해야합니다. ORM 모듈을 전환 이론적으로 가능하지만, 시작을하는 것이 더 빈 공간이 새롭게 단장했습니다 것, 개조 된 집 철거가 개조 취할 동일합니다.

 

흐름이 일정 크기에 도달 한 후, 그들은 성능 요구 사항을 충족하기 위해 재구성 될 필요가 장고 프로젝트를 사용, 장고의 판매 포인트는 성능이 제한되어 확장, 초 고효율의 개발이다.

장고는 중소 사이트에 적합, 또는 대형 사이트는 빠르게 제품 프로토 타입 도구를 얻을 수 있습니다.

장고 템플릿 디자인 철학은 완전히 코드, 스타일의 분리이며, 장고는 기본적으로 데이터를 처리 할 수있다, 템플릿에 코드 제거.

 

7. 장고는 어떻게 달성 않았다 리디렉션? 코드와 상태는 무엇입니까?

HttpResponseRedirect를 사용

redire 및 역

상태 코드 : (302), (301)

 

8.ngnix 정방향 프록시 및 역방향 프록시?

정방향 프록시 서버 원 서버로부터 콘텐츠를 획득하기 위해, 클라이언트와 발신 서버 (원 서버) 사이에 위치하고, 클라이언트는 프록시에 요청을 송신하고, 상기 목적지 (원 서버)을 지정하고, 프록시 서버와 일본어로 요청을 전송할 내용을 클라이언트로 다시 얻을 것이다. 클라이언트는 앞으로 프록시를 사용하는 몇 가지 특별한 설정을해야합니다.

반대로 리버스 프록시, 그것은 원본 서버의 관점에서 클라이언트 같고, 클라이언트는 특별한 설정이 필요하지 않습니다. 자신의 원본 콘텐츠로 클라이언트는 곳 (원래 서버) 요청을 전송하는 결정하기 위해 역방향 프록시 다음에 역방향 프록시 네임 스페이스 일반 요청의 내용을 전송하고 클라이언트에 사용할 수있는 내용을 반환 동일의.

 

9. 토네이도의 핵심은 무엇입니까?

핵심은 후자의 소켓이 아닌 차단을 캡슐화 전자는 고효율 I / O 이벤트 사이클을 제공, 토네이도의 iostream의 ioloop이 두 모듈이다. ioloop하는 네트워크 I / O 이벤트를 추가함으로써, 비 블로킹 소켓의 사용은 다음 적절한 콜백 기능을 사용하면 효율적인 비동기 실행의 꿈을 달성 할 수있다.

 

10.Django 자체의 runserver, 왜 배포를 제공?

 

모드 디버깅 장고를 작동 할 때의 runserver 방법이 자주 사용됩니다, 그것은 장고와 함께 제공

WSGI 서버 실행은 주로 테스트 및 개발에 사용하고, 방법은 단일 프로세스의 runserver 열려 있습니다.

 uWSGI는 WSGI 프로토콜, uwsgi, HTTP 및 기타 프로토콜을 구현하는 웹 서버입니다. uwsgi는 통신 프로토콜 참고, 웹 서버 구현은 uWSGI uwsgi WSGI 프로토콜과 프로토콜입니다. 등 매우 빠른 성능, 낮은 메모리 풋 프린트 및 여러 응용 프로그램 관리를 uWSGI하고, Nginx에와

프로덕션 환경인가, 사용자가 요청을 액세스하고 응용 프로그램의 응용 프로그램 실제 배포를 분리 할 수 ​​있습니다. 비교를 말하기 높은 동시성 지원은 개선 된 성능의 이점을 재생 멀티 프로세스, 멀티 코어의 관리를 용이하게한다.

 

네트워크 프로그래밍 및 선단부

 

 

무엇 1.AJAX, 어떻게 AJAX를 사용 하는가?

전체 페이지를 재로드하지 않고 로컬 데이터 페이지를 새로 고침 할 수 AJAX (자바 스크립트 및 XML 비동기).

우선, XMLHttpRequest의 개체, VAR의 XMLHTTP = 새로운 XMLHttpRequest 객체 ()를 생성, XMLHttpRequest 객체는 서버와 데이터를 교환하기 위해 사용된다.

오브젝트 오픈 XMLHttpRequest 객체 ()를 이용하여 전송할 번째 단계는, () 메소드는 서버 자원 요청을 보낸다.

세 번째 단계에서는, XMLHttpRequest 객체에서 responseText responseXML에 속성을 사용하거나 응답을받는 개체.

서버에 요청을 보낼 때 네 번째 단계는 onreadystatechange의 기능은, 우리가 원하는 서버 응답은 당신을 onreadystatechange 함수는 readyState가 XMLHttpRequest 객체 변경을 onreadystatechange 기능을 트리거 할 때마다 사용하는 데 필요한 기능의 일부를 수행 할 수 있습니다.

2. 일반적인 HTTP 상태 코드 무엇입니까?

200 OK

301은 영구 이동

(302) 발견

(304)는 ​​수정되지

307 임시 리디렉션

400 잘못된 요청

무단 (401)

403 금지

404 찾을 수 없음

사라 (410)

500 내부 서버 오류

(501)는 구현되지 않음

3. 포스트와의 차이를 얻을?

도 1에서, GET 요청, 요구 된 데이터는 URL에 추가 할 필요가 없을? URL 및 분할 데이터, 복수의 파라미터를 전송 및 연결한다. URL 인코딩 형식 대신 유니 코드의 ASCII 인코딩을 사용하고, 그 모든 비 ASCII 문자를 인코딩 할 후에 말을하는 것입니다 전송합니다.

POST 요청 : 데이터 패킷을 요청할 POST 요청은 HTTP 요청 패킷의 본체에 배치된다. 상기 상품 = 띠톱 실제 데이터 전송이다.

따라서, 요청 GET 데이터는 주소 표시 줄에 노출되며, POST 요청하지 않습니다.

 

(2) 데이터 전송의 크기

HTTP 사양에서는, URL의 전송 데이터의 길이와 크기에는 제한이 없다. 그러나 실제 개발 과정에서 GET를 들어, 특정 브라우저와 서버는 URL의 길이에 제한이 있습니다. GET 요청을 사용하는 경우 이에 따라, 상기 송신 데이터는 URL의 길이에 의해 제한된다.

URL이 기존의 값이 아니기 때문에 POST를 들어, 이론적으로 한정되지 않고 있지만, 사실은 각 서버 IIS는 자신의 구성이는 POST, 아파치의 크기를 제한하는 데이터의 제출이 필요합니다.

 

3, 보안

보안은 GET의 POST보다 높다. 여기에 보안 실제 보안이며, 보안 방법은 상기 GET 보안 다르다, 안전 상기 수정 된 데이터 서버뿐만 아닙니다. 사용자 이름과 암호가 매우 쉽습니다이 경우 브라우저 기록을 볼 수있는 브라우저 캐시와 다른 사람에 대한 이유가 될 수 있기 때문에 예를 들어, GET 요청을 통해 로그인 작업 동안, 사용자 이름과 암호는 로그인 페이지를 더 이상 URL을 노출됩니다 다른 사람이되었다. 또한, 데이터 제출 요청은 크로스 사이트 요청 frogery 공격이 발생할 수 있습니다 GET.

 

4.cookie 세션과 차이점은 무엇입니까?

1, 쿠키 데이터는 고객의 브라우저, 서버에 세션 데이터에 저장됩니다.

2, 쿠키 사람들이 계정으로 세션의 사용을해야 로컬 COOKIE 쿠키 속임수과 안전을 저장 분석 할 수 있습니다, 매우 안전하지 않습니다.

3 세션은 일정 기간 내에 서버에 저장됩니다. 증가가 더 서버 성능을 완화 고려하여 서버의 성능을 차지할 것 액세스 할 때, 당신은 쿠키를 사용합니다.

(4)는, 데이터가 4K를 초과 할 수 없습니다 저장 한 쿠키는, 많은 브라우저가 쿠키를 저장 20 개 사이트의 최대 제한됩니다.

5, 추천 :
   로그인 정보 및 기타 중요한 정보가 세션으로 저장되어
   필요한 경우 추가 정보는, 그것은 쿠키에 배치 할 수 있습니다

 

5. 필요한 단순 TCP 서버 프로세스를 생성

소켓을 만들 1.socket

IP와 포트를 결합 2.bind

3.listen 소켓이 수동 링크 될 수 있습니다

4.accept WAIT 클라이언트

5.recv / 데이터 송신 및 수신을 보내

 

파충류와 데이터베이스의 일부

 

 

1.scrapy 및 scrapy - 레디 스의 차이점은 무엇입니까? 왜 레디 스 데이터베이스?

1) scrapy 높은 효율성, 사용자 정의의 높은 수준을 크롤링, 파이썬 프레임 워크 파충류이지만, 분산 지원하지 않습니다. scrapy 지원 분산 전략을 수 scrapy 프레임 워크에서 실행되는 데이터베이스 구성 요소의 설정을 기반으로 scrapy - 레디 스의 레디 스는 군침 측이 항목 큐, 요청 큐의 마스터 최종 레디 스 데이터베이스를 공유하고 지문의 집합을 요청합니다.

2) 왜 레디 스 데이터베이스 레디 스 마스터 - 슬레이브 동기화를 지원하며, 데이터가 메모리에 캐시되므로 레디 스 기반의 분산 크롤러, 요청 및 데이터의 높은 주파수 효율성을 읽는 것은 매우 높기 때문에.

2. 크롤러 모듈 프레임 또는 무엇을 사용? 그들은 차이점이나 장점과 단점에 대해 이야기?

URLLIB, urllib2가 : 파이썬은 함께 제공

타사 : 요청

프레임 워크 : Scrapy

URLLIB 및 urllib2가 모듈은 요청 URL에 관련 작업을 할 수 있지만 다른 기능을 제공합니다.

urllib2.:urllib2.urlopen 요청 개체 만 urllib.urlopen의 URL을 수신하고, URL을 수락하거나 (요청 객체를 수신 할 때, 그리고 따라서 URL의 헤더를 설정 가능)

이유는를 urlencode이 URLLIB, urllib2를 따라서 항상 URLLIB, urllib2가 종종 함께 사용하지

scrapy가 그 고정 된 단일 사이트 개발 크롤링 멀티 스레드 트위스트 방식 프로세스에 기초하여 다운, 파서 로깅 및 예외 처리를 포함하고, 프레임을 캡슐화하고,이 장점이 있지만, 멀티 - 사이트 (100)를 크롤링 웹 사이트, 동시 및 분산 처리, 유연성, 불편 조정 및 전시를 포함한다.

요청이 단지 HTTP 요청에 대한 요청, 그는 강력한 데이터베이스, 다운로드, 자신의 모든 처리, 유연성, 높은 동시성을 분석하고, 사용 및 분산 배포도 매우 유연하고 대한 기능을 할 수있다,하는 HTTP 라이브러리 더 나은 구현입니다.

Scrapy 장점과 단점 :

장점 : scrapy는 비동기

대신 더 일반 가독성을 복용 XPath는

강력한 통계 및 로그 시스템

다른 URL을 크롤링하는 동안

지원 쉘, 편리하고 독립적 인 시운전

쓰기 미들웨어, 쉬운 몇 가지 통합 필터를 작성하는

파이프 라인을 통해 데이터베이스에 저장된

단점 : 파이썬에 따라 크롤러 프레임, 가난한 확장 성

트위스트 프레임을 기반으로, 예외 동작 반응기 죽없고, 비동기 프레임 에러 다른 태스크, 검출하기 어려운 상기 데이터 에러를 중단하지 않는다.

3. 좋아하는 MySQL의 엔진은 무엇? 각 엔진의 차이점은 무엇입니까?

다음과 같이 두 가지 주요 엔진의 MyISAM과 InnoDB는, 주요 차이점은 다음과 같습니다 :

A, InnoDB는의 MyISAM 지원하지 않는, 트랜잭션을 지원하고, 이것은 매우 중요합니다. 거래는 높은

치료 동안의 MyISAM 스테이지 에러도 감소 롤백 수의 추가 및 삭제만큼 일련

그것은 아니다;

두 자주 수정에 대한 쿼리 기반 애플리케이션의 MyISAM뿐만 아니라 삽입, InnoDB의, 그리고 참여

높은 보안 응용 프로그램;

세, 이노 지원 외래 키,의 MyISAM은 지원하지 않습니다

네,의 MyISAM 기본 엔진, 이노 지정 될 필요가있다;

다섯, InnoDB의 FULLTEXT 인덱스 유형은 지원되지 않습니다;

요구, 여섯, 행의 수는 테이블, 이노 때부터 이노 스토리지 테이블로서 선택 수 (*) 아니다

전체 테이블에 스캔 행 수를 계산하지만,의 MyISAM은 단순히 저장 라인의 좋은 수를 읽어

수 있습니다. 개수 (*) 문은 조건이 전체 테이블을 스캔해야의 MyISAM 포함되어있는 경우, 그 참고;

세븐, 자기 성장 필드, InnoDB는하지만의 MyISAM에서 필드의 인덱스를 포함해야합니다

테이블은 공동 인덱스 및 기타 분야로 확립 될 수있다;

전체 테이블이 InnoDB하지만 라인으로 라인을 삭제하는 것입니다 때 분명 여덟, 효율이 매우 느립니다. 의 MyISAM 무거운 것

테이블을 작성하려면,

전체 테이블이 업데이트 테이블로 잠겨 경우 아홉, 열 이노 잠금 지원 (세트 = 1 곳

'% 리 %'와 같은 사용자

4. 아래의 메커니즘 scrapy 프레임 워크 실행을 설명?

요청 큐에 엔진에 의해 스케쥴러로 송신 요청에 start_urls에서 제 URL을 얻는다 수집은 스케줄러가 요청 자원에 대응하는 응답을 획득하는 다운로드 요청에 대한 요청을 대기, 완료 응답입니다 추출 처리를 수행하는 이들의 제조의 분석 방법 : (1) 상기 추출 된 데이터는 문서 처리 파이프 라인에 요구되는 경우, 추출 된 URL은 URL (전송 요청, 엔진에 의한 요청 이전 단계로 진행 두 경우. 요구 큐가 요청되지까지 스케쥴러 대기열 ...)에, 프로그램은 종료된다.

5. 관계형 쿼리는 무엇인가, 무엇을?

쿼리 여러 테이블 함께, 주로 관련, 왼쪽과 오른쪽 연결을 완전히 연결을 (외부 조인) 연결

다중 프로세스 6. 쓰기 파충류 더 나은? 또는 좋은 멀티 스레드? 이유는 무엇입니까?

IO 집중적 인 코드 (문서 처리, 웹 크롤러 등), 효과적으로 (IO 작업 효율성을 향상시킬 수있는 멀티 스레딩이 IO 될 것이다 때 시간이 불필요하게 낭비의 결과로, 단일 스레드를 기다릴 필요하고, 자동 스레드 A에서 대기 여러 스레드를 열 수 있습니다 당신이) 프로그램 실행의 효율성을 향상시킬 수있는 CPU 리소스를 낭비 할 수 스레드 B로 전환합니다. 실제 데이터 수집 과정에서, 우리는이 문제와 응답 속도를 고려뿐만 아니라, 멀티 프로세스 또는 멀티 스레드를 설정, 컴퓨터의 하드웨어 자체를 고려할 필요가

7. 데이터베이스 최적화?

1. 최적화 인덱스, SQL 문, 슬로우 쿼리 분석;

2. 데이터베이스를 설계 데이터베이스 설계 패러다임에 따라 엄격한 시간 테이블을 디자인;

3. 캐시는 자주 액세스하는 데이터가 될 수 있습니다 캐시에있는 데이터의 빈번한 변화를 필요로하지 않습니다

디스크 IO를 저장;

4. 하드웨어 최적화, 기술 디스크 큐 (RAID0, RAID1, RDID5) 등을 이용하여, SSD를 사용함;

내부 MySQL의 파티션 테이블, 다른 파일 계층 데이터를 사용하여 작성된, 상기 자성을 향상시킬 수있다

디스크 읽기의 효율성;

표 6. 수직, 일부는 항상 테이블에서 데이터를 읽을 디스크를 저장하지 않는 I / O;

7. 판독기는 마스터로부터 분리된다 마스터 카피가 판독 동작을 사용하여 상기 데이터베이스로부터 분리 작업 물품;

8. 서브 라이브러리 서브 서브 시스템 테이블 (데이터의 특히 다량), 기본 원리는 데이터 라우팅이고;

9. 적절한 엔진 최적화 매개 변수 테이블을 선택;

10 레벨의 캐시 아키텍처을 수행, 정적 및 분산;

(11) 전체 텍스트 인덱스가 사용되지 않습니다;

12. 빠른 스토리지의 사용, 예를 들어 NoSQL의 저장소가 자주 액세스하는 데이터

8. 일반적인 안티 파충류와 우리의 접근 방식?

헤더를 통해 1) 안티 파충류

사용자 헤더 방지 크롤러에서 요청하는 가장 일반적인 안티 파충류 전략이다. 헤더 (사이트의 자료 중 일부는 리퍼러 안티 - 핫 링크 감지하는 것입니다) 감지 감지뿐만 아니라 사이트 리퍼러의 일부 사용자 에이전트에 많은 사이트입니다. 또는 대상 도메인에 대한 리퍼러 값을 수정, 당신은 반 파충류 메커니즘의 유형을 발생하는 경우, 헤더 파충류의 브라우저의 사용자 에이전트를 복사, 헤더의 파충류에 직접 추가 할 수 있습니다. 헤더 방지 파충류을 검출, 수정하거나 좋은 이패스 크롤러 될 수 있습니다 헤더를 추가합니다.

2) 사용자 행동 안티 파충류에 따라

짧은 시간 내에 동일한 페이지를 여러 번 액세스 할 수와 같은 동일 IP로, 사용자의 동작을 감지하여 사이트의 일부, 또는 짧은 시간에 동일한 계정에 동일한 작업을 여러 번 있습니다.

대부분의 사이트는 전자의 경우이며,이 경우, IP 프록시를 사용하면 해결할 수 있습니다. 당신은 공용 인터넷 프록시 IP를 크롤링, 특별한 파충류 쓰기 모두가 그들을 시험 후 저장할 수 있습니다. 이러한 프록시 IP 크롤러는 종종 그것을 너 자신을 준비하는 것이 가장 좋습니다, 사용된다. 각 IP의 IP 요청이 몇 번을 대체 할 수있는 에이전트의 수가 많은 후에는 요청이나 urllib2가에서 할 매우 쉽습니다, 그래서 당신은 쉽게 최초의 안티 - 크롤러를 우회 할 수있다.

두 번째 경우에있어서, 하나의 랜덤 간격 후 각 요청 후 몇 초를 요청할 수있다. 일부 논리적 취약한 사이트, 당신은, 로그 아웃, 여러 번 요청에 다시 로그인과 동일한 요청을 여러 번 할 수없는 짧은 시간에 동일한 계정을 우회하는 요청을 제한하는 계속할 수 있습니다.

3) 동적 페이지 카운터 파충류

위의 상황의 대부분은뿐만 아니라 사이트의 일부로서, 우리가 얻은 또는 자바 스크립트에 의해 생성되는 아약스 요청 데이터를 크롤링 필요는 정적 페이지에서 발견된다. 첫째, 네트워크 피들러의 요청을 분석한다. 당신은 아약스 요청을 찾을 수 있다면, 특정 매개 변수 및 특정 응답의 의미를 분석 할 수 있습니다, 우리가 원하는 응답을 분석하여 얻은 JSON 데이터에 대한 위의 방법, 직접 또는 urllib2가 아날로그 아약스 요청 요청을 사용할 수 있습니다.

직접 과정은 우수의 데이터를 얻기 위해 아약스 요청을 시뮬레이션하지만, 일부 사이트는 모든 매개 변수 아약스 요청은 모두 암호화 할 수 있습니다. 우리는 단지 그들이 필요로하는 요청 된 데이터를 구성 할 수 없습니다. 셀레늄 + phantomJS의 사용에 대한이 경우, 브라우저 커널을 호출하고 인간의 행동과 트리거 JS 스크립트 페이지를 시뮬레이션 할 수 phantomJS JS 실행을 사용합니다. 양식을 작성하고 페이지를 스크롤 버튼을 클릭에서 특정 요청 및 응답 과정에 관계없이 모든 시뮬레이션, 그러나 다시 데이터 시뮬레이션을 검색에 대한 매뉴얼 페이지의 전체 계정 수 있습니다.

이 데이터에 액세스하는 브라우저로 위장하지 않기 때문에, 대부분의 항 파충류를 우회 거의 수이 틀 자체가 브라우저가 (어느 정도 헤더를 추가하여 상기하면 브라우저로 위장하는) phantomJS은 브라우저의 어떤 인터페이스,하지만 브라우저는이 사람을 처리하지 않습니다. 리 셀레늄 + phantomJS이 할 수 많은 일들이, 예를 들어, 터치 형 인식 (12306) 또는 슬라이드 타입 코드는 같은 페이지 짐승을 형성한다.

9. 분산 파충류 주로 문제를 해결?

1) IP

2) 대역폭

3) CPU

4) I

10. 파충류 프로세스는 어떻게 확인 코드를 다루는?

1.scrapy 온다

2. 지불 인터페이스

추천

출처www.cnblogs.com/xiaoxiaoxl/p/11110137.html