중국의 PHP 인터뷰 모범 사례
영어 버전(타사)
국내 PHP 면접에서 자주 물어보는 지식 포인트를 주로 정리한 웨어하우스입니다. 지식 포인트만 타겟 방식으로 지적하고, 스스로 관련 정보를 찾아 체계적으로 공부해야 합니다. 그것이 무엇인지뿐만 아니라 그 이유와 그 뒤에 숨은 원리도 이해할 수 있기를 바랍니다.
해당 지식 포인트에 대한 매우 체계적인 정보가 있다면 PR에 링크를 추가하는 것을 환영합니다. 포크를 사용하는 것은 권장되지 않습니다. 정보는 언제든지 업데이트됩니다.
귀하가 현재 다음과 같은 상황에 처해 있다면 이 정보는 귀하에게 매우 적합합니다.
- 직업을 바꾸려고 하는데 어디서부터 시작해야 할지 모르겠습니다.
- 기술에 병목 현상이 발생했는데 무엇을 배워야 할지 모르겠습니다.
- PHP를 배울 준비가 되었지만 해당 분야가 얼마나 깊은지 모르시나요?
기초
- 대부분의 배열 조작 기능 이해
- 문자열 처리 함수와 mb_시리즈 함수의 차이점
- 사례 분석과 결합된 인용문
- ==와 ===의 차이점
- isset과 공백의 차이점
- 모든 마법 기능 이해하기
- static, $this 및 self의 차이점
- 개인, 보호, 공개, 최종의 차이점
- OOP 생각
- 추상 클래스 및 인터페이스의 각 사용 시나리오
- 특성이란 무엇입니까?
- echo, print, print_r의 차이점(표현식과 명령문의 차이점 구분)
- __construct와 __destruct의 차이점
- 정적 함수(클래스와 함수 구별) 매뉴얼, SOF
- __toString() 함수
- 작은따옴표
'
와 큰따옴표 "
의 차이점 - 일반적인 HTTP 상태 코드는 무엇을 의미하나요?
- 301은 404를 의미합니까?
고급 장
- 자동 로드, 컴포저 원리 PSR-4, 원리
- 세션 공유, 생존 시간
- 예외 처리
- foreach 객체를 반복하는 방법
- 작업 개체를 배열하는 방법
$obj[key];
- 객체
$obj(123);
- Yield란 무엇인가요? Yield의 사용 시나리오에 대해 이야기해 보겠습니다.
- PSR, PSR-1, 2, 4, 7이란 무엇입니까?
- 클라이언트 IP 및 서버 IP 주소를 얻는 방법
- 클라이언트 IP
- 서버 IP
- 실제 IP의 프록시 투명 전송 개념 이해
- PHP 예외 프롬프트를 활성화하는 방법
- php.ini는
display_errors
켜고 error_reporting
수준을 설정합니다. - 런타임 시
ini_set(k, v);
- 301 리디렉션을 반환하는 방법
- [경고] 301을 설정한 후에도 스크립트가 계속 실행되므로 주의하세요. 다음이 실행되지 않을 것이라고 생각하지 마세요. 필요하다면
die
나 exit
사용하세요.
- 확장 프로그램 설치 경로를 얻는 방법
-
phpinfo();
페이지 검색 extension_dir
- 명령줄
php -i |grep extension_dir
- 런타임
echo ini_get('extension_dir');
- 문자열과 숫자의 비교 원리는 0으로 시작하는 8진수 체계와 0x로 시작하는 16진수 체계에 주목하세요.
- 문자열 비교 크기, 왼쪽(상위 비트)에서 오른쪽으로, 문자별 ASCII 비교
- BOM 헤더란 무엇이며 어떻게 제거하나요?
-
0xEF
, 0xBB
, 0xBF
- 감지, 제거
- MVC 란 무엇입니까?
- 의존성 주입 구현 원리
- 명령을 비동기적으로 실행하는 방법
- 템플릿 엔진이란 무엇이며, 어떤 문제를 해결하는지, 구현 원리는 무엇인지(Smarty, Twig, Blade)
- 체인 작업을 구현하는 방법
$obj->w()->m()->d();
- Xhprof 및 Xdebug 성능 디버깅 도구 사용
- 인덱스 배열
[1, 2]
와 연관 배열 ['k1'=>1, 'k2'=>2]
의 차이점은 무엇입니까 - 캐시 및 시나리오 사용 방법
관행
- 2차원 배열이 주어지면 특정 필드에 따라 정렬
- 업로드된 파일 형식을 확인하는 방법: jpg 업로드만 허용됩니다.
- 임시 변수를 사용하지 않고 두 변수의 값을 교환합니다
$a=1; $b=2;
$a=2; $b=1;
- 중국어를 변환할 때 strtoupper에 문자가 깨져 있습니다. 어떻게 해결하나요?
php echo strtoupper('ab你好c');
- Websocket, Long-Polling, Server-Sent Events(SSE)의 차이점
- "헤더가 이미 전송되었습니다" 오류는 무엇을 의미하며 이를 방지하는 방법
연산
- 퀵 정렬(손글씨)
- 버블 정렬(필기)
- 이진 검색(이해)
- 알고리즘 KMP 찾기(이해)
- 깊이와 너비 우선 검색(이해)
- LRU 캐시 제거 알고리즘(Memcached가 이 알고리즘을 사용한다는 점 이해)
데이터 구조(이해)
- 힙 및 스택 특성
- 대기줄
- 해시 테이블
- 연결리스트
비교
- 쿠키와 세션의 차이점
-
GET
과 POST
의 차이점 -
include
과 require
의 차이점 -
include_once
와 require_once
의 차이점 - Memcached와 Redis의 차이점
- MySQL 스토리지 엔진과 그 차이점(MyISAM과 Innodb의 차이점에 대해 확실히 물어보실 것입니다)
- HTTP와 HTTPS의 차이점
- 아파치와 Nginx의 차이점
- Define()과 const의 차이점
- 특성과 인터페이스의 차이점은 무엇이며 특성은 어떤 문제점을 해결합니까?
- Git과 SVN의 차이점
데이터 베이스
- MySQL
- 크루드
- 조인, 왼쪽 조인, 오른쪽 조인, 내부 조인
- 노동 조합
- GROUP BY + COUNT + WHERE 조합 사례
- now(), md5(), concat(), uuid() 등과 같이 일반적으로 사용되는 MySQL 함수입니다.
-
1:1
, 1:n
, n:n
각 시나리오에 적용 가능 - 트리거가 무엇인지 이해하고 사용 시나리오 설명
- 데이터베이스 최적화 방법
- 인덱스, 조인트 인덱스(히트조건)
- 하위 데이터베이스 및 하위 테이블(
水平分表
및垂直分表
) - 분할
-
explain
사용하여 SQL 성능 문제를 분석하고 각 매개 변수의 의미를 이해할 수 있습니다.-
type
, rows
, key
이해하는 데 중점을 둡니다.
- 느린 로그(무엇을 위해 사용되며 언제 필요합니까)
- MSSQL(이해)
- NOSQL
- 레디스, 멤캐시드, 몽고DB
- 비교 및 적용 시나리오(아래 차원에서 비교 가능)
- 고집
- 다양한 데이터 유형 지원
- CPU 멀티코어 사용 가능
- 메모리 제거 메커니즘
- 클러스터클러스터
- SQL 지원
- 성능 비교
- 지원 문제
- 애플리케이션 시나리오
- 이전에는 어떤 문제를 해결하기 위해 무엇을 사용했으며, 왜 그것을 선택했나요?
섬기는 사람
- CPU, 메모리, 시간, 시스템 버전 등의 정보를 봅니다.
- find, grep으로 파일 찾기
- awk는 텍스트를 처리합니다
- 명령이 위치한 디렉터리 보기
- PHP를 직접 컴파일해 본 적이 있나요? readline 기능을 켜는 방법
- PHP 프로세스의 메모리 및 CPU 사용량을 확인하는 방법
- PHP에 확장을 추가하는 방법
- PHP 세션 저장 위치 수정 및 INI 구성 매개변수 수정
- 로드 밸런싱의 유형은 무엇입니까? 익숙한 것을 선택하고 그 원리를 설명하십시오.
- 데이터베이스 마스터-슬레이브 복제 MS는 어떻게 동기화됩니까? 밀거나 당길까요? 동기화되지 않을까요? 무엇을 해야할지
- 데이터가 삭제되더라도 분 단위로 복원될 수 있도록 데이터의 가용성을 보장하는 방법. 당신은 무엇을 할 것입니까?
- 데이터베이스 연결이 너무 많아 최대값을 초과합니다. 아키텍처를 최적화하는 방법. 어떻게 하면 편리하게 처리할 수 있나요?
- 502 가능한 이유는 무엇입니까? 504 문제를 해결하는 방법은 무엇입니까?
건축학
- 부분적인 운영 및 유지 관리(이해):
- 로드 밸런싱(Nginx, HAProxy, DNS)
- 마스터-슬레이브 복제(MySQL, Redis)
- 데이터 중복 및 백업(MySQL 증분 및 전체 원칙)
- 모니터링 및 검사(생존 및 서비스 가용성의 두 가지 차원)
- MySQL, Redis, Memcached Proxy, 클러스터 목적 및 원칙
- 샤딩
- 고가용성 클러스터
- RAID
- 소스코드 컴파일, 메모리 튜닝
- 은닉처
- 직장에서 캐싱이 필요한 상황에 직면할 때마다 그 이유를 간략하게 설명하세요.
- 솔루션 검색
- 성능 튜닝
- 다양한 차원의 모니터링 솔루션
- 로그수집 중앙처리 솔루션
- 국제화
- 데이터베이스 설계
- 정적 솔루션
- 일반적인 PHP 애플리케이션 아키텍처 다이어그램 그리기
뼈대
- ThinkPHP(TP), CodeIgniter(CI), Zend(비OOP 시리즈)
- Yaf, Phalcon(C 확장)
- Yii, Laravel, Symfony(순수 OOP 시리즈)
- Swoole, Workerman(네트워크 프로그래밍 프레임워크)
- 비교 프레임은 여러 방향 지점을 구별합니다.
- 순수한 OOP인가요?
- 클래스 라이브러리 로딩 방법(자체 자동 로드 및 작성기 표준 작성)
- 사용성 방향 (CI 기본 프레임워크, Laravel은 개발 효율성이 높은 프레임워크이며 기본 구성 요소는 몇 개나 있는지)
- 블랙박스 (C 확장 시스템과 비교)
- 실행 속도(예: Laravel은 많은 것을 로드합니다)
- 메모리 사용량
디자인 패턴
- 싱글톤 패턴(강조)
- 팩토리 패턴(키)
- 관찰자 패턴(강조)
- 종속성 주입(강조)
- 데코레이터 패턴
- 프록시 모드
- 조합 모드
안전
- SQL 주입
- XSS와 CSRF
- 입력 필터링
- 쿠키 보안
-
mysql_
기능 비활성화 - 사용자 비밀번호를 데이터베이스에 저장할 때 보안을 보장하려면 어떻게 해야 합니까?
- 인증코드 세션 문제
- Session ID 보안(차단 후에도 시뮬레이션 및 사용할 수 없도록)
- 디렉토리 권한 보안
- 로컬 및 원격 파일을 포함합니다.
- 파일 업로드 PHP 스크립트
-
eval
함수는 스크립트를 실행합니다. -
disable_functions
고위험 기능을 끕니다. - FPM 독립 사용자 및 그룹은 각 디렉토리에 특정 권한을 부여합니다.
- 해시와 암호화의 차이점 이해
고급 수준
- PHP 배열 기본 구현(HashTable + Linked list)
- 쓰기 시 복사 원칙, GC 시점
- PHP 프로세스 모델, 프로세스 통신 방식, 프로세스 스레드 차이
- Yield의 핵심 원리는 무엇입니까?
- PDO 준비 원리
- PHP 7과 PHP 5의 차이점은 무엇입니까
- Swoole 적용 시나리오 및 코루틴 구현 방법
프런트엔드
- 기본적으로 DOM 노드 및 속성 얻기
- 박스 모델
- CSS 파일, 스타일 태그, 인라인 스타일 속성 우선순위
- HTML 및 JS 실행 순서(JS 페이지 위에서 아래로)
- JS 배열 작업
- 유형 판단
- 이 범위
- .map() 및 이 특정 사용 시나리오 분석
- 쿠키 읽기 및 쓰기
- JQuery 작업
- Ajax 요청(동기식과 비동기식의 차이) 난수로 인해 캐싱이 금지됩니다.
- 부트스트랩의 장점은 무엇입니까?
- 도메인 간 요청 N 솔루션
- 신기술(이해하다)
- ES6
- 모듈식
- 팩
- 빌드 도구
- 뷰, 리액트, 웹팩,
- 프론트엔드mvc
- 최적화
- 단일 도메인 이름에 대한 브라우저 동시 수 제한
- 정적 리소스 캐시 304(If-Modified-Since 및 Etag 원칙)
- 여러 개의 작은 아이콘을 결합하고 위치 위치 지정 기술을 사용하여 요청을 줄입니다.
- 정적 리소스는 단일 요청으로 결합되어 압축됩니다.
- CDN
- 정적자원 지연 로딩 기술 및 프리로딩 기술
- 연결 유지
- 머리 부분의 CSS와 꼬리 부분의 JS 최적화(원칙)
회로망
- INT에 대한 IP 주소
- 192.168.0.1/16은 무엇을 의미합니까?
- DNS의 주요 기능은 무엇입니까?
- IPv4와 v6의 차이점
네트워크 프로그래밍
- TCP 3방향 핸드셰이크 프로세스
- TCP와 UDP의 차이점, 각각 적용 가능한 시나리오
- UDP 고가용성을 보장할 수 있는 방법이 있습니까(이해)
- TCP 고정 패킷을 해결하는 방법은 무엇입니까?
- 심장 박동이 필요한 이유는 무엇입니까?
- 긴 연결이란 무엇입니까?
- HTTPS는 어떻게 안전합니까?
- 스트림과 데이터그램의 차이점
- 프로세스 간에 통신하는 방법에는 여러 가지가 있는데, 어떤 방법이 가장 빠른가요?
-
fork()
어떻게 되나요?
API 장
- RESTful이란 무엇인가
-
DELETE
요청을 지원하지 않는 브라우저와 호환되는 DELETE
요청을 만드는 방법 - 공통 API의
APP_ID
APP_SECRET
의 주요 기능은 무엇인가요? 프로세스를 설명하세요. - API 요청의 데이터가 변조되지 않았는지 확인하는 방법은 무엇입니까?
- JSON과 JSONP의 차이점
- 데이터 암호화와 서명 확인의 차이점
- RSA 란 무엇입니까?
- API 버전 호환성을 처리하는 방법
- 전류 제한(나무통, 토큰통)
- OAuth 2는 주로 어떤 시나리오에서 사용됩니까?
- JWT
- PHP에서
json_encode(['key'=>123]);
과 return json_encode([]);
의 차이점은 무엇입니까? 해결 방법
보너스 포인트
- 공통 언어 기능과 다양한 시나리오에 대한 적용 가능성을 이해합니다.
- PHP VS 골랭
- PHP 대 파이썬
- PHP 대 자바
- PHP 확장 개발에 대해 알아보기
- C에 능숙함
성명
이 정보는 특정 회사를 대상으로 하지 않으며, 이 정보가 귀하에게 미치는 영향에 대해 당사는 책임을 지지 않습니다.
행운을 빌어요
관련 참고자료
https://blog.csdn.net/l269798518/article/details/82428601