이 기사에는 40개 이상의 PHP 인터뷰 질문과 답변이 요약되어 있습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
1. 객체지향이란 무엇인가요? 주요 기능은 무엇입니까?
객체 지향은 프로그램의 재사용성을 향상시키고 프로그램 구조를 보다 명확하게 만드는 프로그램 설계 방법입니다. 주요 기능: 캡슐화, 상속, 다형성.
2. SESSION과 COOKIE의 차이점은 무엇인가요? 프로토콜의 이유와 기능을 설명해 주세요.
A. http 무상태 프로토콜은 사용자가 동일한 웹사이트에서 왔는지, 동일한 사용자가 다른 것을 요청하는지 구분할 수 없습니다. 페이지는 동일한 사용자로 간주될 수 없습니다.
B. SESSION은 서버측에 저장되고 COOKIE는 클라이언트측에 저장됩니다. 세션은 상대적으로 안전합니다. 쿠키는 특정 수단으로 수정될 수 있으며 안전하지 않습니다. 세션은 전달을 위해 쿠키를 사용합니다.
쿠키를 비활성화하면 세션을 정상적으로 이용하실 수 없습니다. 세션의 단점: 서버 측에 저장되며, 각 읽기는 서버에서 읽혀지므로 서버의 리소스가 소모됩니다. 세션은 서버 측의 파일이나 데이터베이스에 저장되며, 기본적으로 파일 경로는 PHP 구성 파일의 session.save_path에 지정됩니다. 세션 파일은 공개됩니다.
3. HTTP 상태의 302, 403, 500 코드는 무엇을 의미하나요?
1, 2, 3, 4, 5가지 원칙: (예: 1: 메시지 시리즈, 2: 성공 시리즈, 3: 리디렉션 시리즈, 4: 요청 오류 시리즈, 5: 서버 측 오류 시리즈.)
302: 임시 전송이 성공했으며 요청한 콘텐츠가 새 위치로 이동되었습니다.
403: 금지됨
500: 내부 서버 오류
401: 무단 액세스를 나타냅니다.
4. 데이터 유형(int char varchar datetime text)의 의미를 적어주세요. varchar와 char의 차이점은 무엇인가요?
Integer char 고정 길이 문자 Varchar 가변 길이 문자 Datetime Datetime 유형 Text Text 유형 Varchar와 char char의 차이점은 고정 길이 문자 유형이 얼마나 많은 공간을 할당하는지에 따라 결정됩니다. Varchar는 가변 길이 문자 유형으로, 내용만큼 공간을 차지하므로 공간을 효과적으로 절약할 수 있습니다. varchar 타입은 가변형이므로 데이터 길이가 변경되면 서버에서 추가 작업을 수행해야 하므로 char 타입에 비해 효율성이 떨어집니다.
5. MyISAM과 InnoDB의 기본 차이점은 무엇인가요? 인덱스 구조는 어떻게 구현되나요?
A. MyISAM 유형은 트랜잭션 및 테이블 잠금을 지원하지 않으며 자주 최적화되어야 하며 쿼리가 자주 발생하는 애플리케이션에 적합합니다. InnoDB 유형은 트랜잭션 및 행 잠금을 지원하고 충돌 복구 기능이 있으며 읽기 및 쓰기 속도가 MyISAM보다 느리고 삽입 및 업데이트 작업이 많은 애플리케이션에 적합하며 많은 공간을 차지하며 전체 텍스트 인덱싱을 지원하지 않습니다. .
인덱스 생성: 경고 테이블 테이블 이름 인덱스 인덱스 이름 추가(`필드 이름`)6. isset()과 empty()의 차이점 sset은 변수가 여러 개 있는지 여부를 결정합니다. in. 변수가 존재하지 않으면 false를 반환하고, 비어 있으면 변수가 비어 있는지 여부를 판단하여 false를 반환하며, 비어 있으면 true를 반환합니다.
https://jq.qq.com/?_wv=1027&k=55dPDrC
7 PHP에서 값 전달과 참조 전달의 차이점을 설명해주세요. 언제 값으로 전달하고 언제 참조로 전달합니까?
8. PHP에서 error_reporting의 기능은 무엇인가요? PHP 오류 수준을 설정하고 현재 수준을 반환합니다.
9. 캐싱 기술에 대한 이해도를 알려주세요. 캐싱 기술은 동적 콘텐츠를 파일로 캐시하고, 일정 시간 내에 동적 페이지에 액세스하여 데이터베이스를 다시 방문할 필요 없이 캐시된 파일을 직접 호출하는 기술입니다.
10. 요즘 프로그래밍에서는 MVC 3계층 구조를 자주 채택합니다. MVC는 어떤 3계층을 지칭하나요? MVC의 세 가지 레이어는 각각 비즈니스 모델, 뷰, 컨트롤러를 참조합니다. 컨트롤러 레이어는 모델을 호출하여 데이터를 처리한 다음 데이터를 뷰 레이어에 매핑하여 표시합니다. ① 코드를 구현할 수 있습니다. 재사용성 및 생성 방지 코드 중복성 ②M과 V의 구현 코드가 분리되어 동일한 프로그램에서 다양한 표현을 사용할 수 있습니다
11. ajax는 부분 새로 고침을 달성하기 위해 javascript 또는 JQuery 프레임워크를 통해 구현할 수 있는 비동기 전송 기술로, 서버에 대한 부담을 줄이고 사용자 경험을 향상시킵니다. 12. 프로그램 개발 과정에서 프로그램의 운영 효율성을 어떻게 향상시킬 수 있나요? A. 쿼리 문에서 select *를 사용하지 마세요. 테이블 연결 대신 하위 쿼리를 덜 사용하세요. B. ; C. 프로그램에서 자주 사용되는 데이터에 대한 캐시를 생성합니다. 13. 트래픽 문제를 해결하기 위해 어떤 방법을 사용하나요? A. 캐시 적중률을 높이려면 캐시를 효과적으로 사용하세요 C. 파일은 cdn D를 사용하여 저장되고 가속화됩니다. 데이터베이스 사용을 줄이는 아이디어 E. 역방향 프록시 14. 동일한 파일을 여러 번 포함하지 않으려면 어떤 명령문을 사용하여 대체할 수 있나요? 차이: 실패할 경우: include는 경고를 생성하고 require는 오류 인터럽트를 직접 생성합니다. require가 프런트로딩을 실행 중입니다. include가 런타임에 로드됩니다. 대신: require_once include_once @의 차이점은 모든 경고를 나타내고 무시합니다 16. PHP의 가비지 수집 메커니즘을 간략하게 설명합니다. 답변: PHP의 변수는 변수 컨테이너 zval에 저장됩니다. 변수 유형과 값을 저장하는 것 외에도 zval에는 is_ref 및 refcount 필드도 있습니다. refcount는 변수를 가리키는 요소의 수를 나타내고, is_ref는 변수에 별칭이 있는지 여부를 나타냅니다. refcount가 0이면 변수 컨테이너가 재활용됩니다. zval의 참조 횟수가 1만큼 감소한 후 0보다 크면 가비지 버퍼에 들어갑니다. 버퍼가 최대값에 도달하면 재활용 알고리즘은 zval을 반복하여 가비지인지 확인하고 해제합니다. 17. PHP의 보안을 극대화하는 방법은 무엇입니까? SQL 주입 취약점과 XSS 크로스 사이트 스크립팅 취약점을 방지하는 방법은 무엇입니까? 답변: 기본 원칙: 서버 또는 프로그램 설계 세부 사항을 외부 세계에 표시하지 말고(오류 차단) 사용자가 제출한 데이터를 신뢰하지 마십시오(사용자 제출 필터링). 18, echo, print_r, print, var_dump echo의 차이점: 명령문 구조 print: 반환 값이 있는 함수 print_r: 배열과 객체를 인쇄할 수 있습니다. var_dump: 객체 배열을 인쇄할 수 있고 데이터 유형이 있습니다 빠른 속도, 컴파일, 캐싱 기술, 플러그인 메커니즘, 강력한 성능 로직 20. PHP에서 페이지 점프를 구현하는 방법 방법 1: PHP 함수 점프 단점: 점프 후 프로그램이 계속 실행되며 종료를 사용하여 실행을 중단할 수 있습니다. 후속 프로그램의. 21을 사용하여 GB2312 형식의 문자열을 UTF-8 형식으로 변환하는 방법은 무엇인가요? htmlspecialchars 또는 htmlentities 23. CSRF 공격이란 무엇입니까? XSS 공격? 그것을 예방하는 방법은 무엇입니까? CSRF, 공격자가 사용자인 것처럼 가장하여 정보를 훔치거나 시스템을 손상시키기 위한 요청을 보내는 크로스 사이트 요청 위조입니다. 기본 원리에 대해 이야기해 보겠습니다. 사용자는 웹 사이트 A를 방문하여 로그인하고 쿠키를 생성한 다음 웹 사이트 B를 방문합니다. 웹 사이트 A에 CSRF 취약점이 있는 경우 웹 사이트 B가 이때 웹 사이트 A에 요청하는 것은 다음과 같습니다. 사용자 방문), 웹 사이트 A는 사용자가 보낸 요청이라고 생각하므로 웹 사이트 B는 성공적으로 귀하의 신원을 위장하므로 이를 크로스 사이트 스크립팅 공격이라고 합니다. CSRF 방지: A. API 요청 방법인 GET, POST B를 합리적으로 표준화하고, POST 요청에 토큰 확인을 추가하고, 임의의 코드를 생성하여 세션에 저장하고, 이 임의의 코드를 형식으로 가져옵니다. 이때 서버는 랜덤코드가 동일한지 확인합니다. XSS, 크로스 사이트 스크립팅 공격. 예방: 입력을 신뢰하지 말고 입력을 필터링하세요. A. 원격 제출 방지 B. SQL 삽입 방지 및 특수 코드 필터링 C. 등록 기계 침수 방지 및 인증 코드 사용. JSON(javascript object Notation)은 경량 데이터 교환 형식입니다. json 데이터 형식은 고정되어 있으며 여러 언어로 데이터를 전송하는 데 사용할 수 있습니다. 26. 거래란 무엇인가요? 그리고 그 특징은? 답변: 트랜잭션: 일련의 데이터베이스 작업이자 데이터베이스 애플리케이션의 기본 논리 단위입니다. 트랜잭션 특성: A. 원자성: 즉, 모든 트랜잭션이 실행되거나 전혀 실행되지 않습니다. 또는 다음과 같이 이해하십시오. 트랜잭션은 논리적 작업 단위로 함께 바인딩된 SQL 문 그룹입니다. 문 작업이 실패하면 전체 작업이 실패하고 향후 작업은 해당 작업으로 롤백됩니다. 작업 전 상태 또는 노드가 있습니다. 무언가가 실행되거나 실행되지 않도록 하기 위해 트랜잭션을 사용할 수 있습니다. 그룹화된 문이 트랜잭션으로 간주되려면 ACID 테스트, 즉 원자성, 일관성, 격리성 및 내구성을 통과해야 합니다. 27. 자물쇠란 무엇인가요? 답변: 데이터베이스는 여러 사용자가 사용하는 공유 리소스입니다. 여러 사용자가 동시에 데이터에 액세스하면 여러 트랜잭션이 동시에 데이터베이스의 동일한 데이터에 액세스합니다. 동시 작업을 제어하지 않으면 잘못된 데이터를 읽고 저장하여 데이터베이스의 일관성이 손상될 수 있습니다. 잠금은 데이터베이스 동시성 제어를 달성하는 데 매우 중요한 기술입니다. 트랜잭션이 데이터 개체에 대해 작동하기 전에 먼저 시스템에 잠금 요청을 보냅니다. 잠금 후 트랜잭션은 데이터 개체에 대한 특정 제어권을 갖게 됩니다. 트랜잭션이 잠금을 해제하기 전에는 다른 트랜잭션이 데이터 개체를 업데이트할 수 없습니다. 기본 잠금 유형: 잠금에는 행 수준 잠금과 테이블 수준 잠금이 포함됩니다. 28. 인덱스의 역할은 무엇인가요? 그리고 장점과 단점은 무엇입니까? 답변: 인덱스는 데이터베이스 검색 엔진이 데이터 검색 속도를 높이기 위해 사용할 수 있는 특수 쿼리 테이블입니다. 실생활에서 책의 목차와 매우 유사합니다. 책 전체를 조회하지 않고도 원하는 데이터를 찾을 수 있습니다. 인덱스는 고유할 수 있으며 인덱스를 생성하면 단일 열 또는 여러 열을 지정할 수 있습니다. 단점은 데이터 입력 속도가 느려지고 데이터베이스 크기가 증가한다는 것입니다. 29. 세 가지 패러다임을 대중적인 방식으로 이해하는 방법은 무엇입니까? 첫 번째 정규형: 1NF는 속성에 대한 원자 제약 조건으로, 속성이 원자적이어야 하고 분해할 수 없습니다. 30. 기본 키, 외래 키, 인덱스의 차이점은 무엇인가요? 정의: 기능: 번호: 31. 비공개, 보호 및 공개 수정자의 액세스 권한을 간략하게 설명합니다. private: 클래스 내부에서만 접근할 수 있는 비공개 멤버입니다. 32. 힙과 스택의 차이점은 무엇인가요? A. 힙은 프로그램 실행 중에 동적으로 할당되는 메모리 공간입니다. 프로그램의 실행 조건에 따라 할당되는 힙 메모리의 크기를 결정할 수 있습니다. B. 스택은 메모리입니다. 컴파일 중에 공간이 할당되므로 스택 크기는 코드에서 명확하게 정의되어야 합니다. 33. 흔히 사용되는 매직 메소드는 무엇인가요? 예를 들어 __construct() 实例化类时自动调用。 34、$this和self、parent这三个关键词分别代表什么?在哪些场合下使用? $this 当前对象 $this在当前类中使用,使用->调用属性和方法 35、作用域操作符::如何使用?都在哪些场合下使用? 调用类常量 36、__autoload()方法的工作原理是什么? 答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。 当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。 这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后 就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。 使用自动载入的魔术函数可以不必要写很多个include或者require函数。 37、简述高并发网站解决方案。 A、前端优化(CND加速、建立独立图片服务器) 39、在命令行中运行php程序 php indx.php A、从命令行运行php非常简单。但有些注意事项需要各位了解下,诸如$_SESSION之类的服务器变量是无法在命令行中使用的,其他代码的运行则和web服务器中完全一样; 延伸1: 延伸2:向php脚本传递参数: A、使用$argv or $argc参数接收 B、使用getopt函数 C、提示用户输入 40、你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在? A、PHP脚本的执行效率 a、代码脚本里计时; b、xdebug统计函数执行次数和具体时间进行分析,最好使用工具winCacheGrind分析; c、在线系统用strace跟踪相关进程的具体系统调用。 B、数据库SQL的效率 a、sql的explain(mysql),启用slow query log记录慢查询; b、通常还要看数据库设计是否合理,需求是否合理等。 41、对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题。 A. 서버가 현재 트래픽을 지원할 수 있는지 확인합니다. 42. MySQL 데이터베이스는 출판 시스템의 저장 공간으로 사용됩니다. 하루에 50,000개 이상의 항목이 증가하며 이를 최적화하는 방법은 3년입니다. A. 부분적인 데이터 중복을 허용하고 효율성을 높이기 위해 조인 쿼리를 피하는 잘 설계된 데이터베이스 구조 D. 일반 테이블 찾기, 단일 테이블의 데이터 양 감소 및 쿼리 속도 향상 A. MyISAM 유형은 트랜잭션 처리와 같은 고급 처리를 지원하지 않지만 B MyISAM 유형 테이블은 InnoDB 유형보다 실행 속도가 빠릅니다. . InnoDB는 FULLTEXT 유형 인덱스를 지원하지 않습니다. D. InnoDB는 테이블에서 특정 행 수를 저장하지 않습니다. 즉, InnoDB는 테이블에서 전체 테이블을 스캔하여 계산해야 합니다. 행 수는 몇 개나 있지만 MyISAM에는 저장된 행 수만 읽으면 됩니다. E. AUTO_INCREMENT 유형의 필드의 경우 InnoDB는 이 필드만 포함하는 인덱스를 포함해야 하지만 MyISAM 테이블에는 공동 인덱스가 있습니다. F, DELETE FROM 테이블에서는 테이블을 다시 생성하지 않지만 행별로 삭제합니다. G 및 LOAD TABLE FROM MASTER 작업은 InnoDB에서 작동하지 않습니다. 먼저 InnoDB 테이블을 MyISAM 테이블로 변경한 다음 데이터를 가져오는 것입니다. 그런 다음 InnoDB 테이블로 변경하지만 추가 InnoDB 기능(예: 외래 키)을 사용하는 테이블에는 적용되지 않습니다. H, MyISAM은 지원합니다. 테이블 잠금, InnoDB는 행 잠금을 지원합니다. MyISAM: 성숙하고 안정적이며 관리하기 쉽고 읽기 빠릅니다. 일부 기능(트랜잭션 등)은 테이블 수준 잠금을 지원하지 않습니다. 기타, 주로 면접 후 개인적인 의견과 형이상학: 1. 많은 직장인 학생들이 면접을 위해 휴가를 요청하는 것을 번거롭게 생각합니다. 실제로 많은 회사에서 저녁 면접과 특별 주말 면접을 준비합니다. 의사소통만 잘되면 하루에 3개 회사 면접을 위해 시간을 내도 문제가 되지 않습니다. 2. 배송업체 추천순서는 먼저 한두개 업체와 워밍업을 하고, 자신 있는 업체를 비교한 다음, 관심이 많은 업체를 비교하고, 마지막으로 선별면접을 하는 것이 좋습니다. 이 순서를 정한 가장 큰 이유는 비록 당신의 사업이 매우 훌륭할지라도 면접 상태에 들어가기 위해서는 면접 준비가 필요하다는 점을 강조하고 싶습니다. 면접 질문을 읽고 기술 서적을 검토하는 등 사전 면접은 매우 유용합니다. 마음에 드는 믿을 수 있는 회사를 미리 선택하는 가장 큰 이유는 제안을 받기 위해서인데, 첫째는 자신의 가치를 확인하고, 둘째는 자신감을 갖기 위해서입니다. 3. 사고방식을 조정하세요. 사실 일부 제안은 운에 따라 결정됩니다. 결국 일부 대기업의 경우 면접은 흔하지만 채용은 흔하지 않으므로 제안을 받지 못한다고 낙심하지 마세요. 추천 학습: " "
header("Location:网址");//直接跳转
header("refresh:3;url=http://www.jsdaima.com");//三秒后跳转
방법 2: 메타echo"";
iconv('GB2312','UTF-8','js代码(http://www.jsdaima.com)是IT资源下载与IT技能学习平台。');
22. 사용자가 입력한 내용을 그대로 출력해야 하는 경우, 데이터를 데이터베이스에 입력하기 전에 처리하려면 어떤 기능을 사용해야 합니까?
24. 프로그램 개발 시 주의해야 할 보안 메커니즘이 무엇인지 알려주세요.
25. json 데이터 형식을 이해하시나요?
B. 일관성 또는 문자열 가능성. 트랜잭션을 실행하면 데이터베이스가 올바른 상태에서 다른 올바른 상태로 변환됩니다.
C. 격리. 트랜잭션이 올바르게 커밋되기 전에는 트랜잭션에 의한 데이터 변경 사항이 다른 트랜잭션에 제공될 수 없습니다.
D. 내구성. 트랜잭션이 올바르게 제출되면 그 결과는 데이터베이스에 영구적으로 저장됩니다. 트랜잭션 제출 후 다른 실패가 발생하더라도 해당 트랜잭션의 처리 결과는 저장됩니다.
두 번째 정규 형식: 2NF는 레코드에 대한 고유 제약 조건으로, 레코드에 고유 식별자가 있어야 합니다. , 엔터티 고유성
세 번째 정규형: 3NF는 필드 중복성에 대한 제약입니다. 즉, 어떤 필드도 다른 필드에서 파생될 수 없습니다.
기본 키--레코드를 고유하게 식별하고, 중복될 수 없으며, 비워둘 수 없습니다.
외래 키--테이블의 외래 키는 다른 테이블의 기본 키이며, 외래 키는 값
인덱스 - 이 필드에는 중복 값이 없지만 null 값이 있을 수 있습니다.
기본 키 - 데이터 무결성을 보장하는 데 사용됩니다.
외래 키 - 다른 테이블과의 관계를 설정하는 데 사용됩니다.
인덱스 - 예 쿼리 정렬 속도 향상
기본 키--기본 키는 하나만 있을 수 있습니다.
외래 키--테이블은 여러 개의 외래 키를 가질 수 있습니다.
인덱스--테이블은 여러 개의 고유 인덱스를 가질 수 있습니다
protected: 클래스 및 상속된 클래스 내에서 액세스할 수 있는 보호된 멤버입니다.
공개: 공개 회원, 완전 공개, 접근 제한 없음.
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。
self 当前类
parent 当前类的父类
self也在当前类中使用,不过需要使用::调用
parent在类中使用
调用静态方法
B、服务端优化(页面静态化、并发处理[异步|多线程]、队列处理)
C、数据库优化(数据库缓存[Memcachaed|Redis]、读写分离、分库分表、分区)
D、Web服务器优化(负载均衡、反向代理)
38、PHP遍历文件夹下所有文件e4ef26a3c0542c88b61633ff44decbe4';
read_all($temp);
}else{
if($fl !='.' && $fl != '..'){
echo '文件:'.$temp.'0c6dc11e160d3b678d68754cc175188a';
}
}
}
}
}
read_all("./dir/");
?>
B、在命令行中执行php文件的好处之一就是可以通过脚本实现一些计划任务(crontab)的执行,而无须通过web服务器。
php -v 显示当前PHP版本
php -m 显示当前php加载的有效模块
php -i 输出无html格式的phpinfo
php --rf function
提示:命令行下执行php,是不走Apache/Nginx等这类东西的,没有什么http协议,所以get,post传参数根本不起作用,并且还会报错。有些时候需要在shell命令下把PHP当作脚本执行,比如定时任务。这就涉及到在shell命令下如何给php传参的问题,通常有三种方式传参。echo "接收到{$argc}个参数";
print_r($argv);
$param_arr = getopt('a:b:');
print_r($param_arr);
fwrite(STDOUT,'Please enter your name:');
echo 'Your name is:'.fgets(STDIN);
C. 이미지 안티 핫링크와 같은 외부 액세스 링크(핫링크)를 금지합니다.
E, 다른 호스트를 사용하여 트래픽을 오프로드합니다(로드 밸런싱).
F. 검색 통계 소프트웨어를 사용하여 방문 횟수를 파악하고 목표 최적화를 수행합니다.
E. memcached, redis 등과 같은 캐싱 메커니즘 추가; 자주 변경되지 않는 페이지에 대해 정적 페이지 생성 ;
G. 효율적인 SQL 작성. 예를 들어 SELECT * FROM TABEL은 SELECT field_1, field_2, field_3 FROM TABLE로 변경됩니다.
43. MySQL 스토리지 엔진, myisam과 innodb의 차이점.
위 내용은 [토혈편] PHP 면접 질문 40개 이상 답변(실습 경험)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!