바이두 면접, 특히 첫 면접은 전체적으로 어렵지 않습니다. 처음 두 차례의 기술 인터뷰에는 손으로 작성한 코드가 필요하며, 관련된 주요 범주에는 언어 기초, 디자인 패턴, 알고리즘 기초 및 데이터베이스가 포함됩니다. 가장 중요한 것은 기초, 기초, 기초입니다. 광범위한 주제를 다루지만 모두 프로그래머가 알아야 하고 알아야 하는 것들입니다. 답변은 참고용입니다. (인터넷에서 발췌한 글입니다)
이제 다음과 같은 10가지 질문을 정리했습니다.
1. PHP의 정수 오버플로 문제는 무엇인가요?
2. OOP를 이해하기
3. 디자인 패턴과 MVC에 대한 이해
4. HTTP 프로토콜 1.0과 1.1의 차이점과 HTTP 프로토콜에 대해 간략히 설명
5. Apache의 재작성 메커니즘과 PHP 프레임워크의 URI 라우팅 메커니즘에 대해 간략하게 설명합니다
6. MySQL 인덱스 메커니즘, 복합 인덱스 사용 원칙
7. MySQL 테이블 유형과 MyISAM과의 차이점 InnoDB
8. Quick Sort 알고리즘에 대해 간단히 설명
9. awk, sed, sort 기본 사용법(예제 살펴보기)
10. 그리고 redis
= ======================================== ======
【1】PHP의 정수 오버플로 문제는 무엇입니까?
PHP 정수의 단어 길이는 32비트 운영 체제의 경우 플랫폼과 관련이 있습니다. 가장 큰 정수 유형은 20억 이상입니다. 실제로는 2의 31제곱이고 최소값은 -2의 31제곱입니다. PHP는 부호 없는 정수를 지원하지 않습니다. 숫자가 정수 범위를 초과하면 자동으로 부동 소수점으로 해석됩니다. 수행된 작업의 결과가 정수 범위를 초과하는 경우 float도 반환됩니다. (Java와 C의 정수 오버플로는 어떻습니까)
[2] OOP를 이해하는 방법
객체 지향 프로그래밍인 OOP에는 가장 기본적인 것인 상속과 캡슐화, 다형성이라는 세 가지 측면이 포함됩니다. 추상화입니다.
상속성, 즉 확장성은 하위 클래스를 통해 기존 상위 클래스의 기능을 확장합니다.
캡슐화를 위해서는 외부가 객체의 내부 데이터에 마음대로 접근할 수 없어야 합니다. 즉, 클래스의 특정 구현이 캡슐화되어야 합니다. 그것이 무엇을 하고 어떻게 사용하는지.
다형성은 클래스의 추상화이자 인터페이스이며, 동일한 클래스가 여러 유형의 객체를 처리하는 능력입니다.
실제로 우리가 보는 모든 것은 객체로 간주될 수 있으며, 클래스로의 추상화를 통해 클래스는 유사한 여러 객체로 진화할 수 있습니다. 간단한 예를 들기 위해 기본 문, 창문, 테이블 및 기타 개체와 사람의 출입과 같은 기능을 포함하여 우리가 보는 집을 ROOM 클래스로 추상화합니다. 이제 우리는 ROOM 클래스를 교실로 상속합니다. 여기에는 문, 큰 창문, 테이블과 의자, 교사와 급우가 수업에 참여할 수 있는 흑백 및 연단만 포함되어 있습니다. 이제 우리는 문 2개, 큰 창문 4개, 테이블과 의자 30세트를 포함하여 이 Classroom 클래스를 Classroom_621 개체로 인스턴스화하고 일부 학생은 Mao Zedong 수업을 듣고 있습니다.
【3】디자인 패턴과 MVC에 대한 이해
Model-View-Controller, 모델, 뷰, 컨트롤러 MVC를 생각하면 JAVA를 떠올리게 됩니다. 완전 지향 객체 언어인 MVC는 Smalltalk에서 처음 등장했습니다. 그 핵심은 뷰를 데이터 모델과 분리하여 서로 다른 프로그램이 서로 다른 디스플레이를 가질 수 있도록 하는 것입니다.
모델은 프로그래머가 작성한 함수, 알고리즘, 데이터 모델을 말하며, 이를 시스템 비즈니스 로직 레이어라고 합니다.
뷰, 즉 프런트 엔드, 그래픽 인터페이스입니다. 사용자에게 표시됩니다.
요청 처리, 전달 및 뷰 로드를 주로 담당하는 컨트롤러입니다.
직설적으로 말하면 디자인 패턴은 코드 디자인 경험을 요약하고 분류한 것입니다. 디자인 패턴은 건설 산업에서 처음으로 사용되었습니다. 프로그래밍 디자인 패턴은 주로 23가지 디자인 패턴을 포함하여 초기 GoF에 설명되어 있습니다. 객체 지향 절차 프로그래밍에 사용됩니다. 열기 및 닫기 원칙, 단일 책임 원칙, Liskov 대체 원칙, 종속성 주입, 인터페이스 분리, Dimit 원칙, 상속보다 구성 선호 등 여러 디자인 원칙을 따르세요. 여기에는 생성 모델, 구조 모델, 행동 모델의 세 가지 범주가 포함됩니다.
【4】HTTP 프로토콜 1.0과 1.1의 차이점과 HTTP 프로토콜
HTTP, Hypertext Transfer Protocol에 대해 간략하게 설명합니다. 브라우저와 서버 간의 통신 규칙을 정의합니다. HTTP 프로토콜은 TCP/IP의 TCP 프로토콜을 기반으로 합니다. 이제 World Wide Web은 C/S 모드, 단순 요청(GET/POST/HEAD) 및 유연성(모든 전송 가능)을 포함합니다. 데이터 유형 HTML , XML, JSON, custom 등), 연결 없음(연결당 하나의 요청만 처리되며 요청이 발행된 시점부터 200 상태를 수신할 때까지 연결이 끊어짐), 상태 비저장입니다.
HTTP 프로토콜 조사에는 주로 응답 메시지 형식, 요청 메시지 형식, 상태 코드 등과 같은 지식 항목이 포함됩니다.
일반적으로 HTTP 프로토콜은 시작줄, 헤더, 본문의 세 부분으로 구성됩니다.
[응답 메시지 형식]
HTTP/1.1 200 0K
Connectlon:close
날짜: 2005년 10월 13일 목요일 03:17:33 GMT
서버: Apache/2.0.54(Unix)
마지막—수정:월, 1998년 6월 22일 09;23;24 GMT
콘텐츠—길이:682l
콘텐츠—유형: text/html
이 응답 메시지는 초기 상태 줄(상태 줄), 헤더, 요청된 개체 자체를 포함하는 종속성 등 세 부분으로 나뉩니다. 상태 줄에는 프로토콜 버전 필드, 상태 코드 필드, 이유 문구 필드의 세 가지 필드가 있습니다.
[요청 메시지 형식]
GET /somedir/page.html HTTP/1.1
호스트:www.chinaitlab.com
연결:닫기
User-agent:Mozilla/4.0
Accept-언어:zh-cn
(추가 캐리지 리턴 및 줄 바꿈 문자)
요청 메시지 한 줄은 다음과 같습니다. 요청 라인이라고 하며, 후속 라인을 헤더 라인이라고 합니다. 요청 라인에는 메소드 필드, URL 필드, HTTP 버전 필드라는 3개의 필드가 있습니다.
[상태 코드] http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html 참조
1xx 메시지
2xx 성공
3xx 리디렉션
4xx 요청 오류
5xx 서버 오류
[공통 상태 코드]
200 OK. 요청이 성공했으며 요청에서 예상하는 응답 헤더 또는 데이터 본문이 이 응답과 함께 반환됩니다.
300개의 객관식. 프랑스어, 영어 등으로 텍스트를 요청하는 등 리소스를 요청하는 데는 여러 가지 옵션이 있습니다.
301 영구 이전했습니다. 요청한 웹페이지가 새 위치
로 영구적으로 이동되었음을 나타냅니다. 302 찾았습니다. 임시 점프를 할 때 페이지가 돌아가는 상태를 나타냅니다.
304 수정되지 않았습니다. 클라이언트의 캐시된 리소스는 최신이므로 클라이언트가 캐시를 사용해야 합니다.
400개의 잘못된 요청입니다. 잘못된 요청.
403 금지. 서버에서 요청을 거부했습니다.
404 찾을 수 없습니다. 이는 서버가 요청한 웹페이지를 찾을 수 없다는 의미입니다. 서버에 존재하지 않는 웹페이지는 종종 HTTP 상태 코드를 반환합니다.
500 내부 서버 오류.
503 서비스를 이용할 수 없습니다. 서버는 현재 요청을 처리할 수 없지만 적절한 시기에 서비스가 복원될 것입니다.
504 게이트웨이 시간 초과. 상태 408과 유사하지만 다른 서버의 응답을 기다리는 동안 시간이 초과된 게이트웨이 또는 프록시에서 응답이 제공됩니다.
505 HTTP 버전은 지원되지 않습니다. HTTP 프로토콜 버전은 지원되지 않습니다.
[5] Apache의 rewrite 메커니즘과 PHP 프레임워크의 URI 라우팅 메커니즘에 대해 간단히 설명하겠습니다.
1) URL rewriting은 실제로 사용자가 브라우저를 통해 요청한 URL을 전송하는 것입니다. 백그라운드에서 Apache는 미리 구성된 재작성 규칙에 따라 요청을 실제 리소스 경로로 지정합니다. 직설적으로 말하면 이는 실제 경로를 재구성하고 사용자가 이에 액세스할 수 있도록 허용하는 엉성한 트릭입니다. 그렇게 하는 용도.
1. SEO. 검색 엔진의 욕구를 충족하려면 동적 URL을 정적으로 만드세요.
2. 접근통제. 예를 들어, 규칙을 다시 작성한 후에는 클라이언트가 백그라운드 프로그램 유형을 결정하기가 어렵습니다.
3. URL 리디렉션. 웹사이트가 도메인 이름을 변경하거나 별칭 URL을 추가하면 규칙을 통해 액세스할 URL을 쉽게 가리킬 수 있습니다.
mod_rewrite는 정규식을 사용하여 수신 요청의 URL을 동적으로 수정합니다. URL을 파일 시스템 경로에 매핑하거나 한 URL을 다른 URL에 매핑할 수 있습니다. URL을 조작하기 위해 무제한의 규칙을 사용하며 각 규칙에는 무제한의 추가 조건이 포함될 수 있습니다. 서버 변수, 환경 변수, HTTP 헤더, 타임스탬프 등 다양한 방법으로 이를 감지할 수 있습니다.
mod_rewrite는 경로 정보 부분을 포함한 전체 URL 경로를 작동합니다. 재작성 규칙은 http.conf 또는 .htaccess에서 설정할 수 있습니다. 재작성 규칙에 의해 생성된 경로에는 요청 문자열, 내부 서브루틴 처리, 외부 요청 리디렉션 또는 내부 프록시 침투가 포함될 수 있습니다.
2) PHP 프레임워크의 URI 라우팅 메커니즘은 일반적으로 와일드카드와 일반 규칙을 포함하여 Apache 재작성과 유사합니다. 사용자가 URI 처리기를 리디렉션(재매핑)할 수 있도록 허용합니다.
[6] MySQL의 인덱싱 메커니즘, 복합 인덱스 사용 원칙
(MySQL in a Simple Way 책에서 인덱스 사용에 대해 자세히 설명합니다.)
일반적으로 책에서는 책의 목차에는 색인 메커니즘이 소개되어 있으며 일부 책에는 데이터베이스 색인과 매우 유사한 특별한 빠른 검색 부록이 포함되어 있습니다.
MySQL의 인덱스에는 기본 키 인덱스(primary key), 고유 인덱스(unique), 일반 인덱스(index), 전체 텍스트 인덱스(fullindex)의 4가지 범주가 있습니다.
테이블 이름의 인덱스 표시; - 테이블의 인덱스 보기
'Handler_read%'와 같은 상태 표시 - 인덱스 사용량 보기
복합 인덱스, 일반적으로 다음을 따릅니다. 가장 왼쪽 접두사 원리, 예: table_a의 3개 열 a b c 복합 인덱스 생성
table_a(a,b,c)에 ind_table_a 인덱스 생성;
그런 다음 a 또는 a, b만 사용됩니다. 조건이나 a, b, c 등의 경우 새로 생성된 복합 인덱스가 사용됩니다.
【7】MySQL 테이블 유형 및 MyISAM과 InnoDB의 차이점
MySQL 일반 테이블 유형(예: 스토리지 엔진)
지원되는 테이블 유형 구성을 보려면 엔진을 표시하세요. 일반적인 테이블 유형은 다음과 같습니다: MyISAM/Innodb/Memory/Merge/NDB
그 중 MyISAM과 Innodb는 가장 일반적으로 사용되는 두 가지 테이블 유형으로, 각각 고유한 장점을 가지고 있습니다. 우리의 필요에.
[MyISAM]
1) 각 데이터베이스 저장소에는 3개의 파일이 포함됩니다: .frm(테이블 정의), MYD(데이터 파일), MYI(인덱스 파일)
2) 데이터 파일이나 인덱스 파일은 여러 디스크를 가리킬 수 있습니다
3) Linux의 기본 엔진인 win은 기본적으로 InnoDB를 사용합니다
4) 비트랜잭션 유형의 경우 트랜잭션 유형의 추가 오버헤드를 피하세요
5) 선택 및 삽입 집약적 테이블에 적합
6) MyISAM의 기본 잠금 예약 메커니즘은 쓰기 우선순위이며, 이는 LOW_PRIORITY_UPDATES를 통해 설정할 수 있습니다.
7) MyISAM 유형 데이터 파일을 다른 운영 체제에서 복사할 수 있다는 것은 매우 중요하며 배포 중에 더 편리해집니다.
[Innodb]
1) 트랜잭션 애플리케이션용
2) 업데이트 및 삭제가 많은 작업에 적합합니다. 테이블에서 select count(*)를 실행할 때 InnoDB는 테이블 전체를 스캔하여 행 수를 계산해야 하지만 MyISAM은 저장된 행 수만 읽습니다. count(*) 문에 where 조건이 포함된 경우 두 테이블의 작업은 동일합니다. DELETE FROM 테이블을 실행하면 InnoDB는 테이블을 다시 생성하지 않고 행 단위로 삭제합니다.
3) 행 수준 잠금 및 외래 키 제약 조건 소개
4) InnoDB는 FULLTEXT 유형 인덱스를 지원하지 않습니다
[8] 빠른 정렬 알고리즘을 간략하게 설명
기본 아이디어: 정렬할 시퀀스를 한 번의 정렬 과정을 통해 두 부분으로 나누고, 그 중 한 부분은 다른 부분보다 기록이 더 적습니다. 그런 다음 계속해서 두 부분을 별도로 빠르게 정렬하여 순서를 얻습니다.
알고리즘 구현: low와 high 두 개의 포인터가 있으며 초기 값은 low=1, high=n이고 기본 값은 키(보통 첫 번째 값이 선택됨)이고 먼저 시작합니다. 높은 위치에서 앞으로 이동하여 키보다 작은 첫 번째 레코드를 찾아 키와 교환한 다음 낮은 위치에서 뒤로 검색하여 키보다 큰 첫 번째 레코드를 찾아 기본 값과 교환하고 낮음=높음이 될 때까지 반복합니다. .
첫 번째 정렬 결과에서 키 앞의 레코드 값이 키 뒤의 레코드 값보다 작습니다.
11 25 9 3 16 2 //11을 키로 선택
2 25 9 3 16 11
2 11 9 3 16 25
2 3 9 11 16 25
【9】awk, sed, sort의 기본 사용법(예제를 통해 살펴봅니다.)
[예]: 다음 파일 테스트가 있습니다. 각 URL을 달성하려면 쉘을 사용하십시오.
a www.baidu.com 20:00
b www.qq.com 19:30
c www.baidu.com 14:00
d www.baidu.com 23:00
e www.qq.com 20:30
f www.360.com 20:30
cat test| -F' '{print $2}' |sort | uniq -c | sort -rn
【10】Memcached와 redis의 사용 및 이해
Memcached와 redis는 모두 동일합니다. key-Value의 인메모리 스토리지 시스템은 검색 결과를 해시 테이블을 통해 저장하여 강력한 캐싱 메커니즘을 구현합니다. 시나의 웨이보, 타오바오 등 트래픽이 많은 사이트에서는 이런 것들을 꼭 활용해야 합니다.
다음은 백과사전에서 발췌한 소개문입니다. 구체적인 실천과 사용법은 나중에 자세히 소개하겠습니다.
Memcache는 고성능 분산 메모리 개체 캐싱 시스템으로, 메모리에 통일된 거대한 해시 테이블을 유지하여 이미지, 동영상, 파일 등 다양한 형식의 데이터를 저장하는 데 사용할 수 있습니다. 검색결과 등 간단히 말하면, 데이터가 메모리로 호출된 다음 메모리에서 읽혀지므로 읽기 속도가 크게 향상됩니다.
Redis는 키-값 저장 시스템입니다. Memcached와 마찬가지로 문자열(문자열), 목록(연결된 목록), 집합(집합) 및 zset(순서가 지정된 집합)을 포함하여 상대적으로 더 많은 저장 값 유형을 지원합니다.
주제외:
면접 진행과정 전체가 너무 좋았고, 면접관 분들도 꽤 캐주얼한 편이라는 느낌이 들었습니다. 다른 사람들이 말한 것처럼 오만하지는 않습니다. 바이두의 인터뷰는 개방형으로 진행되며, 인터뷰 과정 전반에 걸쳐 문제점과 계획을 논의하는 주변 사람들이 있습니다.