> 헤드라인 > PHP 면접 질문과 답변이 2018년 6월 3일 업데이트되었습니다.

PHP 면접 질문과 답변이 2018년 6월 3일 업데이트되었습니다.

PHP中文网
풀어 주다: 2018-06-04 20:20:20
원래의
6965명이 탐색했습니다.

PHP 기본 부분, 데이터베이스 부분, 객체 지향 부분, ThinkPHP 부분, 스마트 템플릿 엔진, 보조 개발 시스템(DEDE, ecshop), WeChat 공개 플랫폼 개발 등을 포함하여 2018년 6월 3일에 업데이트된 PHP 인터뷰 질문 및 답변 귀하가 습득한 기술에 대한 설명을 포함한 일부 PHP 인터뷰 질문입니다.

1. PHP 언어의 주요 장점 중 하나는 크로스 플랫폼입니다.

PHP 실행 환경의 최적 조합은 Apache+MySQL+PHP입니다. 이 실행 환경은 다양한 운영체제(예: Windows, Linux 등)에서 구성이 가능하고 운영체제에 의해 제한되지 않으므로 크로스라고 합니다. -platform

2. WEB 개발 시 데이터를 제출하는 방법은 몇 가지가 있나요? 차이점은 무엇입니까? Baidu는 어떤 방법을 사용하나요?

Get 및 post 방법
차이점:
1. Get은 서버에서 데이터를 얻고, post는 서버로 데이터를 전송합니다
2. Get으로 전달된 값은 URL에 표시되고, post로 전달된 값은 표시되지 않습니다. url
3. Get이 전달하는 값은 보통 2KB 이내이며, post 값 크기는 php.ini에서 설정할 수 있습니다.
4. Get 보안은 낮지 않고 post 보안은 높지만 실행 효율성은 Post
보다 높습니다. 권장 사항:
1. 기밀 정보가 포함된 경우 Get 형식이 더 안전합니다.
2 데이터 추가, 수정에는 Get 메서드를 사용하는 것이 좋습니다.
바이두에서 사용하는 get 방식은 URL에서 확인할 수 있기 때문입니다.

PHP 면접 문제은행 네트워크 디스크 다운로드

PHP 면접 문제은행 네트워크 디스크 다운로드

문제 은행 전체 다운로드: PHP 인터뷰 질문 요약 네트워크 디스크 다운로드

3. PHP의 프레임워크, 템플릿 엔진, 시스템 등이 무엇인지 마스터하세요

프레임워크: zendframe, CI, Yii 등과 같은 많은 프레임워크가 있습니다. 우리가 배운 것은 thinkphp입니다
템플릿 엔진 : 교과서에도 많이 있는데, 우리가 배운 것은 smarty
시스템 : Kangsheng의 제품(uchome, supersite, discuzX 등), Empire System 등 많이 있습니다. , DEDE(Dreamweaver), ecshop 등 우리가 배운 것은 DEDECMS, Ecshop

4. 어떤 웹 프런트엔드 기술을 마스터했는지 알려주세요.

DIV+CSS 웹페이지 레이아웃, JavaScript, jQuery 프레임워크, 포토샵 이미지 처리에 능숙

5. AJAX의 장점은 무엇인가요?

ajax는 부분 새로 고침을 달성하기 위해 javascript 또는 JQuery 프레임워크를 통해 구현할 수 있는 비동기 전송 기술로, 서버에 대한 부담을 줄이고 사용자 경험을 향상시킵니다.

6. 보안이 프로그램에 중요한 이유를 알려주세요. 개발 중에 보안 메커니즘에 주의를 기울여야 합니까?

①원격 제출 방지, ②SQL 주입 방지 및 특수 코드 필터링, ③등록 기계 플러딩 방지 및 인증 코드 사용

7. 프로그램 개발 중 프로그램 운영 효율성을 높이는 방법은 무엇입니까?

① SQL 문을 최적화하고, 어떤 필드를 사용하여 하위 쿼리를 덜 사용하고 퍼지 쿼리를 덜 사용하세요. 자주 사용하는 프로그램 수신된 데이터는 캐시됩니다.

8. PHP를 다른 데이터베이스와 함께 사용할 수 있나요?

PHP는 MYSQL 데이터베이스와의 최고의 조합입니다. 물론, PHP는 MSSQL 등 다른 데이터베이스와도 사용할 수 있습니다. PHP에는 MSSQL 운영을 위한 기능이 예약되어 있어 켜져 있는 동안만 사용할 수 있습니다.


9. 현재 MVC 3계층 구조는 인터넷에서 흔히 채택되고 있습니다. MVC는 어떤 3계층을 지칭하며 그 장점은 무엇인가요?

MVC의 세 가지 계층은 각각 비즈니스 모델, 뷰 및 컨트롤러를 의미합니다. 컨트롤러 계층은 모델을 호출하여 데이터를 처리한 다음 데이터를 뷰 계층에 매핑하여 표시합니다. 코드 재사용성 및 코드 중복 방지 ②M과 V의 구현 코드가 분리되어 동일한 프로그램에서 다른 형식의 표현을 사용할 수 있습니다

10. json 데이터 형식을 이해하십니까?

JSON(JavaScript Object Notation)은 경량 데이터 교환 형식입니다. json 데이터 형식은 고정되어 있으며 여러 언어로 데이터 전송에 사용할 수 있습니다.

json 형식을 처리하는 PHP의 함수는 json_decode( string $json [, bool )입니다. $assoc ] )는 JSON 형식의 문자열을 받아 PHP 변수로 변환합니다. 매개변수 json은 디코딩할 json 문자열 형식의 문자열입니다. 이 매개변수가 TRUE이면 assoc은 객체 대신 배열을 반환합니다.

Json_encode: PHP 변수를 json 형식으로 변환

11. Print, echo 및 print_r의 차이점은 무엇입니까?

① echo와 print 모두 출력이 가능하다는 차이점이 있는데, echo는 함수가 아니고 반환 값도 없는 반면, print는 반환 값이 있는 함수이므로 상대적으로 echo만 출력하면 더 빠르고, print_r은 일반적으로 디버깅에 사용되는 변수에 대한 정보를 인쇄하는 데 사용됩니다.

② print는 문자열을 인쇄하는 것입니다.

3 print_r은 배열 객체와 같은 복합 유형을 인쇄하는 것입니다.

12. 세션과 쿠키의 차이점은 무엇인가요?

①저장 위치: 세션은 서버에 저장되고, 쿠키는 브라우저에 저장됩니다.
②보안: 세션 보안은 쿠키보다 높습니다.

13 PHP에서 배열을 처리하는 데 일반적으로 사용되는 기능은 무엇입니까? (함수의 '매개변수'와 '반환값'에 집중하세요)

①array()는 배열을 생성합니다. ②count()는 배열의 요소 수를 반환합니다. ③array_push()는 하나 이상의 요소를 배열의 끝에 삽입합니다. array (push); ④array_column()은 입력 배열의 단일 열 값을 반환합니다. ⑤array_combine()은 두 배열을 병합하여 새 배열을 생성합니다. ⑥array_reverse()는 배열을 역순으로 반환합니다. 8in_array( ) 배열에 지정된 값이 있는지 확인합니다.

14. PHP에서 문자열을 처리하는 일반적인 함수는 무엇입니까? (함수의 '매개변수'와 '반환값'에 초점을 맞춥니다.)

①trim()은 문자열 양쪽의 공백 문자와 기타 문자를 제거합니다.

②substr_replace()는 문자열의 일부를 다른 문자열로 바꿉니다. ) 문자열에 하위 문자열이 나타나는 횟수를 셉니다.
⑤strtolower()는 문자열을 대문자로 변환합니다.
7strtr( ) 문자열에서 특정 문자를 변환합니다.
⑧strrchr()는 다른 문자열에서 마지막으로 나타나는 문자열을 찾습니다()는 다른 문자열에서 처음 나타나는 문자열을 찾습니다(대소문자 구분). strlen( ) 문자열의 길이를 반환합니다. str_replace()는 문자열의 일부 문자를 대체합니다(대소문자 구분). print()는 하나 이상의 문자열을 출력합니다. is_string()은 문자열이 배열로 분할되는지 여부를 감지합니다. string_tags()는 문자열에서 HTML 태그를 제거합니다. mb_substr()은 중국어 및 영어

15를 줄이는 데 사용되는 함수입니다. (함수의 '매개변수'와 '반환값'에 집중하세요)

date_default_timezone_get()은 기본 시간대를 반환합니다.
date_default_timezone_set()는 기본 시간대를 설정합니다.

date()는 현지 시간/날짜 형식을 지정합니다.

getdate()는 날짜/시간 정보를 반환합니다.

gettimeofday()는 현재 시간 정보를 반환합니다.

microtime()은 현재 시간의 마이크로초 수를 반환합니다.
mktime()은 날짜의 Unix 타임스탬프를 반환합니다.
strtotime()은 영어 텍스트 날짜 또는 시간 설명을 Unix 타임스탬프로 구문 분석합니다.
time()은 현재 시간의 Unix 타임스탬프를 반환합니다.

16. PHP에서 데이터베이스를 처리하는 데 일반적으로 사용되는 함수는 무엇입니까? (함수의 '매개변수'와 '반환값'에 집중하세요)

PHP 매뉴얼을 참고해서 주의 깊게 읽어주세요. 이것은 매우 중요합니다

17. PHP에서 파일을 조작하는데 일반적으로 사용되는 함수는 무엇인가요? (함수의 '매개변수'와 '반환값'에 초점을 맞춥니다.)

①파일 열기, ③파일 읽기, ⑤파일 수정, ⑦파일 만들기 등. 직장에서 캐시나 정적 파일을 생성하는 데 자주 사용됩니다. PHP 설명서를 참조하여 주의 깊게 확인하세요

18. PHP 운영 디렉터리(폴더)의 일반적인 기능은 무엇인가요? (함수의 '매개변수'와 '반환값'에 초점을 맞춥니다.)

①디렉터리 열기, ②디렉토리 삭제, ③디렉터리 읽기, ⑤디렉터리 수정, 등등. 업로드된 파일을 생성하거나 삭제하는 데 자주 사용되는 디렉터리 작업 시, 캐시된 페이지와 정적 페이지에 대한 디렉터리를 생성하거나 삭제하는 경우에는 PHP 매뉴얼을 참조하여 주의 깊게 읽어보세요.

II: 데이터베이스 부분

맨 위로

1. 데이터베이스 관리 시스템 제품이 있습니까?

답변: Oracle, SQL Server, MySQL, Sybase, DB2, Access 등

2. SQL 언어에는 어떤 부분이 포함되나요? 각 섹션의 액션 키워드는 무엇입니까?

답변: SQL 언어는 데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL) 및 데이터 쿼리(DQL)의 네 부분으로 구성됩니다.

데이터 정의: 테이블 생성, 테이블 변경, 테이블 생성/삭제 등

데이터 조작: 선택, 삽입, 업데이트, 삭제,

데이터 제어: 부여, 취소

데이터 쿼리: 선택


3. 어떤 것을 포함합니까?

답변: 데이터 무결성은 데이터의 정확성과 신뢰성을 의미합니다.
다음 네 가지 범주로 나뉩니다.

1) 엔터티 무결성: 테이블의 각 행이 테이블의 고유한 엔터티임을 규정합니다.

2) 도메인 무결성: 테이블의 열이 값 범위, 정밀도 및 기타 규정을 포함하는 특정 데이터 유형 제약 조건을 충족해야 함을 의미합니다.

3) 참조 무결성: 두 테이블의 기본 키와 외래 키의 데이터가 일치해야 테이블 간의 데이터 일관성을 보장하고 데이터 손실이나 의미 없는 데이터가 데이터베이스에 퍼지는 것을 방지한다는 의미입니다.

4) 사용자 정의 무결성: 다양한 관계형 데이터베이스 시스템에는 애플리케이션 환경에 따라 특별한 제약 조건이 필요한 경우가 많습니다. 사용자 정의 무결성은 특정 관계형 데이터베이스에 대한 제약 조건으로, 특정 응용 프로그램이 충족해야 하는 의미론적 요구 사항을 반영합니다.
테이블 관련 제약 조건: 열 제약 조건(NOT NULL(null이 아닌 제약 조건)) 및 테이블 제약 조건(PRIMARY KEY, 외래 키, 검사, UNIQUE)을 포함합니다.

4. 거래란 무엇인가요? 그리고 그 특징은?

답변: 트랜잭션: 일련의 데이터베이스 작업이자 데이터베이스 애플리케이션의 기본 논리 단위입니다.
트랜잭션 특성:
(1) 원자성: 즉, 모든 트랜잭션이 실행되거나 전혀 실행되지 않습니다.
(2) 일관성 또는 문자열 가능성. 트랜잭션을 실행하면 데이터베이스가 하나의 올바른 상태에서 다른 올바른 상태로 변환됩니다.
(3) 격리. 트랜잭션이 올바르게 커밋되기 전에는 트랜잭션에 의한 데이터 변경 사항이 다른 트랜잭션에 제공될 수 없습니다.
(4) 내구성. 트랜잭션이 올바르게 제출되면 그 결과는 데이터베이스에 영구적으로 저장됩니다. 트랜잭션 제출 후 다른 실패가 발생하더라도 해당 트랜잭션의 처리 결과는 저장됩니다.
또는 다음과 같이 이해하십시오.
트랜잭션은 논리적 작업 단위로 함께 바인딩된 SQL 문 그룹입니다. 문 작업이 실패하면 전체 작업이 실패하고 이후 작업은 이전 상태로 롤백됩니다. 작업 또는 이전 상태로 이동합니다. 무언가가 실행되거나 실행되지 않도록 하기 위해 트랜잭션을 사용할 수 있습니다. 그룹화된 문이 트랜잭션으로 간주되려면 ACID 테스트, 즉 원자성, 일관성, 격리성 및 내구성을 통과해야 합니다.

5. 자물쇠란 무엇인가요?

답변: 데이터베이스는 여러 사용자가 사용하는 공유 리소스입니다. 여러 사용자가 동시에 데이터에 액세스하면 여러 트랜잭션이 동시에 데이터베이스의 동일한 데이터에 액세스합니다. 동시 작업을 제어하지 않으면 잘못된 데이터를 읽고 저장하여 데이터베이스의 일관성이 손상될 수 있습니다.
잠금은 데이터베이스 동시성 제어를 달성하는 데 매우 중요한 기술입니다. 트랜잭션이 데이터 개체에 대해 작동하기 전에 먼저 시스템에 잠금 요청을 보냅니다. 잠금 후 트랜잭션은 데이터 개체에 대한 특정 제어권을 갖게 됩니다. 트랜잭션이 잠금을 해제하기 전에는 다른 트랜잭션이 데이터 개체를 업데이트할 수 없습니다.
기본 잠금 유형: 잠금에는 행 수준 잠금과 테이블 수준 잠금이 포함됩니다.

6. 커서란 무엇입니까?

답변: 뷰는 물리적 테이블과 동일한 기능을 가진 가상 테이블입니다. 뷰는 일반적으로 하나의 테이블 또는 여러 테이블의 행이나 열의 하위 집합을 추가, 수정, 확인 및 작동할 수 있습니다. 뷰를 수정해도 기본 테이블에는 영향을 주지 않습니다. 다중 테이블 쿼리에 비해 데이터를 더 쉽게 얻을 수 있습니다.
커서: 쿼리 결과 집합을 단위로 효과적으로 처리합니다. 커서를 셀의 특정 행에 배치하여 결과 집합의 현재 행에서 하나 이상의 행을 검색할 수 있습니다. 결과 집합의 현재 행을 수정할 수 있습니다. 커서는 일반적으로 사용되지 않지만, 데이터를 하나씩 처리해야 할 때 커서는 매우 중요합니다.

7. 저장 프로시저란 무엇인가요? 무엇을 부르나요?

답변: 저장 프로시저는 미리 컴파일된 SQL 문입니다. 장점은 모듈식 설계를 허용한다는 것입니다. 즉, 한 번만 생성하면 나중에 프로그램에서 여러 번 호출할 수 있습니다. 특정 작업에 SQL을 여러 번 실행해야 하는 경우 저장 프로시저를 사용하는 것이 간단한 SQL 문을 실행하는 것보다 빠릅니다. 명령 개체를 사용하여 저장 프로시저를 호출할 수 있습니다.

8. 인덱스의 역할은 무엇인가요? 그리고 장점과 단점은 무엇입니까?

답변: 인덱스는 데이터베이스 검색 엔진이 데이터 검색 속도를 높이기 위해 사용할 수 있는 특수 쿼리 테이블입니다. 실생활에서 책의 목차와 매우 유사합니다. 책 전체를 조회하지 않고도 원하는 데이터를 찾을 수 있습니다. 인덱스는 고유할 수 있습니다. 인덱스를 생성하면 단일 열 또는 여러 열을 지정할 수 있습니다. 단점은 데이터 입력 속도가 느려지고 데이터베이스 크기가 증가한다는 것입니다.

9. 세 가지 패러다임을 대중적인 방식으로 이해하는 방법은 무엇입니까?

답변: 첫 번째 정규형: 1NF는 속성에 대한 원자성 제약 조건으로, 속성이 원자적이어야 하고 분해할 수 없습니다.
두 번째 정규 형식: 2NF는 레코드에 고유 식별자가 있어야 한다는 것입니다. , 엔터티 고유성; 세 번째 정규형: 3NF는 필드 중복성에 대한 제약입니다. 즉, 어떤 필드도 다른 필드에서 파생될 수 없으며 필드가 중복되지 않아야 합니다. .

10. 기본 테이블이란? 뷰란 무엇입니까?

답변: 기본 테이블은 독립적으로 존재하는 테이블입니다. SQL에서는 관계가 테이블에 해당합니다. 뷰는 하나 이상의 기본 테이블에서 파생된 테이블입니다. 뷰 자체는 데이터베이스에 독립적으로 저장되지 않고 가상 테이블입니다

11. 뷰의 장점을 설명해주세요.

답변: (1) 뷰는 사용자 작업을 단순화할 수 있습니다. (2) 뷰는 사용자가 여러 관점에서 동일한 데이터를 볼 수 있도록 합니다. (3) 뷰는 데이터베이스에 대해 어느 정도 논리적 독립성을 제공합니다. 보안 보호 기능이 제공됩니다.

12. NULL은 무엇을 의미하나요?

답변: NULL 값은 UNKNOWN(알 수 없음)을 나타내며 ""(빈 문자열)을 나타내지 않습니다. NULL 값과 비교하면 NULL 값이 생성됩니다. 어떤 값도 NULL 값과 비교할 수 없으며 논리적으로 답변을 얻을 것으로 기대할 수 없습니다.
NULL 판단에는 IS NULL을 사용하세요

13. 기본 키, 외래 키, 인덱스의 차이점은 무엇인가요?

기본 키, 외래 키 및 인덱스의 차이점
정의:
기본 키 - 레코드를 고유하게 식별하고, 중복될 수 없으며, 비워둘 수 없습니다.
외래 키 - 테이블의 외래 키는 다른 테이블의 기본 키입니다. 테이블, 외래 키는 중복될 수 있으며 null 값일 수 있습니다.
Index--이 필드에는 중복 값이 ​​없지만 null 값이 있을 수 있습니다.
기능:
기본 키--데이터 무결성을 보장하는 데 사용됨
외래 키-- 다른 테이블과의 연결을 설정하는 데 사용됩니다.
색인--쿼리 정렬 속도를 향상시키기 위한 것입니다.
번호:
기본 키--기본 키는 하나만 있을 수 있습니다.
외래 키--테이블에는 여러 개의 외래 키가 있을 수 있습니다.
색인-- 테이블에는 여러 개의 고유 인덱스가 있을 수 있습니다

14. 테이블의 필드가 특정 범위의 값만 허용하도록 하려면 무엇을 사용할 수 있습니까?

답변: 데이터베이스 테이블에 정의된 제한 사항을 확인하세요. 열에 입력된 값입니다.
트리거를 사용하여 데이터베이스 테이블의 필드가 허용할 수 있는 값을 제한할 수도 있지만 이 방법을 사용하려면 테이블에 트리거를 정의해야 하므로 경우에 따라 성능에 영향을 미칠 수 있습니다.

15. SQL 문을 최적화하는 방법은 무엇입니까? (몇개 선택)

(1) Where 절에서 : Where 테이블 간의 연결은 다른 Where 조건보다 먼저 작성해야 하며, 최대 레코드 수를 필터링할 수 있는 조건은 Where 절 끝에 작성해야 합니다. . HAVING이 마지막입니다.
(2) IN을 EXISTS로 바꾸고 NOT IN을 NOT EXISTS로 바꿉니다.
(3) 인덱스 열에 계산을 사용하지 마세요
(4) 인덱스 열에 IS NULL 및 IS NOT NULL을 사용하지 마세요
(5) 쿼리를 최적화하려면 전체 테이블 스캔을 피하고 먼저 위치와 순서를 고려하세요. by에 관련된 열입니다.
(6) where 절의 필드에 대해 null 값 판단을 하지 않도록 해야 합니다. 그렇지 않으면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행합니다.
(7) where 절의 필드에 대해 표현식 작업을 수행하지 마십시오. where 절을 사용하면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행하게 됩니다

16. SQL 문에서 '상관 하위 쿼리'와 '비상관 하위 쿼리'의 차이점은 무엇인가요?

답변: 하위 쿼리: 다른 쿼리에 중첩된 쿼리라고 합니다.
하위 쿼리를 내부 쿼리라고도 하며, 하위 쿼리가 포함된 문을 외부 쿼리(메인 쿼리라고도 함)라고 합니다.
모든 서브쿼리는 상관 서브쿼리와 비상관 서브쿼리, 두 가지 범주로 나눌 수 있습니다.
(1) 비상관 서브쿼리는 외부 쿼리와 독립적인 서브쿼리로서 실행 후 총 1회 실행되는 값입니다. 외부 쿼리로 전달되었습니다.
(2) 해당 하위 쿼리의 실행은 외부 쿼리의 데이터에 따라 달라집니다. 외부 쿼리가 한 행을 실행할 때 하위 쿼리는 한 번만 실행됩니다.
상관되지 않은 하위 쿼리가 상관된 하위 쿼리보다 효율적입니다

17. char와 varchar의 차이점은 무엇인가요?

답변: 고정 길이 유형이고, varchar는 가변 길이 유형입니다. 차이점은 다음과 같습니다.
char(M) 유형의 데이터 열, 특정 길이가 다음보다 작은 경우 각 값은 M 바이트를 차지합니다. M, MySQL은 오른쪽에 공백 문자를 채웁니다. (패딩 공백 문자는 검색 작업 중에 제거됩니다.) varchar(M) 유형 데이터 열에서 각 값은 해당 길이를 기록하는 데 충분한 바이트와 1바이트만 차지합니다. 즉, 총 길이는 L+1바이트입니다. ).

18. MySQL 스토리지 엔진, myisam과 innodb의 차이점.

답변:
MyISAM은 쿼리가 빈번하고 교착 상태가 없는 애플리케이션에 적합합니다. 소규모 데이터, 소규모 동시성에 적합합니다.
innodb는 애플리케이션에 적합한 스토리지 엔진입니다. 삽입 및 업데이트 작업이 많을 경우 적절하게 설계된 경우 행 잠금이 가능합니다(가장 큰 차이점은 잠금 수준에 있음).

19. 데이터 테이블 유형은 무엇입니까?

답변: MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV 등
MyISAM: 성숙하고 안정적이며 관리하기 쉽고 읽기 빠릅니다. 일부 기능(트랜잭션 등)은 테이블 수준 잠금을 지원하지 않습니다.
InnoDB: 트랜잭션, 외래 키 및 기타 기능, 데이터 행 잠금을 지원합니다. 많은 공간을 차지하고 전체 텍스트 색인 생성 등을 지원하지 않습니다.

20. MySQL 데이터베이스는 출판 시스템의 저장 공간으로 사용됩니다. 하루에 50,000개 이상의 항목이 증가하며 이를 최적화하는 방법은 3년입니다.

a. 데이터베이스 구조를 잘 설계하고, 부분적인 데이터 중복을 허용하고, 조인 쿼리를 피하여 효율성을 높이세요.
b. 적절한 테이블 필드 데이터 유형과 스토리지 엔진을 선택하고 적절하게 인덱스를 추가합니다.
c. mysql 라이브러리는 마스터-슬레이브 읽기와 쓰기를 분리합니다.
d. 일반 테이블을 찾아 단일 테이블의 데이터 양을 줄여 쿼리 속도를 높입니다.
e. memcached, apc 등과 같은 캐싱 메커니즘을 추가합니다.
f. 자주 변경되지 않는 페이지에 대해 정적 페이지를 생성합니다.
g. 효율적인 SQL을 작성하세요. 예를 들어 SELECT * FROM TABEL은 SELECT field_1, field_2, field_3 FROM TABLE로 변경됩니다.

21. 트래픽이 많은 웹사이트의 경우 페이지 방문 통계 문제를 해결하기 위해 어떤 방법을 사용합니까?

답변:
a. 서버가 현재 트래픽을 지원할 수 있는지 확인하세요.
b. 데이터베이스 액세스를 최적화합니다.
c. 사진의 핫링크 등 링크(핫링크)에 대한 외부 접근을 금지합니다.
d. 파일 다운로드를 제어합니다.
e. 다른 호스트를 사용하여 트래픽을 분산합니다.
f. 탐색 통계 소프트웨어를 사용하여 방문 횟수를 파악하고 타겟 최적화를 수행합니다.

셋: 객체지향 부분

Back to top

1. 객체지향이란 무엇인가요? (이해해서 대답하세요)

답변: 객체지향 OO = 객체지향 분석 OOA + 객체지향 설계 OOD + 객체지향 프로그래밍 OOP라는 일반적인 설명이 있는데, 모든 것은 독립적인 객체(단위)로 간주됩니다. , C처럼 기능별로 나누어져 있지 않고, 스스로 기능을 완성할 수 있습니다.

현재 순수 OO 언어는 주로 Java와 C#입니다. PHP와 C++도 OO를 지원합니다.

2. 비공개, 보호 및 공개 수정자의 액세스 권한을 간략하게 설명합니다.

답변: private: Private 멤버는 클래스 내부에서만 접근할 수 있습니다.

protected: 보호된 멤버이며 클래스 및 상속된 클래스 내에서 액세스할 수 있습니다.

public: 공개 회원, 완전 공개, 접근 제한 없음.

3. 힙과 스택의 차이점은 무엇인가요?

답변: 스택은 컴파일 중에 할당되는 메모리 공간이므로 코드에서 스택 크기를 명확하게 정의해야 합니다.

힙은 프로그램 실행 중에 동적으로 할당되는 메모리 공간입니다. 프로그램의 실행 상태에 따라 할당할 힙 메모리의 크기를 결정합니다.

4. XML과 HTML의 주요 차이점

답변: (1) XML은 대문자와 소문자를 구분하지만 HTML은 그렇지 않습니다.
(2) HTML에서 문맥에 단락이나 목록 키가 끝나는 위치가 명확하게 표시되는 경우
또는
와 같은 닫는 태그를 생략할 수 있습니다. XML에서는 닫는 태그를 생략하면 안 됩니다.
(3) XML에서 일치하는 닫는 태그 없이 단일 태그가 있는 요소는 / 문자로 끝나야 합니다. 이런 식으로 파서는 닫는 태그를 찾지 않는다는 것을 알게 됩니다.
(4) XML에서는 속성 값을 따옴표로 묶어야 합니다. HTML에서 따옴표는 선택 사항입니다.
(5) HTML에서는 값 없이 속성 이름을 가질 수 있습니다. XML에서는 모든 속성에 해당 값이 있어야 합니다.

5. 객체지향의 특징은 무엇인가요?

답변: 주로 캡슐화, 상속, 다형성이 있습니다. 4개 측면인 경우 추상화를 추가합니다.
다음 설명은 이해를 돕기 위한 것입니다.
캡슐화:
캡슐화는 소프트웨어 구성 요소가 우수한 모듈성을 갖도록 보장하는 기반입니다. 캡슐화의 목표는 소프트웨어 구성 요소의 높은 응집력과 낮은 결합을 달성하고 프로그램 상호 의존성 영향으로 인한 변경을 방지하는 것입니다.
상속:
클래스를 정의하고 구현할 때 기존 클래스를 기반으로 할 수 있으며, 이 기존 클래스에서 정의한 콘텐츠를 자신의 콘텐츠로 사용할 수 있으며, 새로운 콘텐츠를 추가하거나 수정할 수 있습니다. 특별한 요구에 더 적합하게 만드는 독창적인 방법이 바로 상속입니다. 상속은 하위 클래스가 상위 클래스 데이터와 메서드를 자동으로 공유하는 메커니즘입니다. 이는 소프트웨어의 재사용성과 확장성을 향상시키는 클래스 간의 관계입니다.
다형성:
다형성은 프로그램에서 정의된 참조 변수가 가리키는 특정 유형과 참조 변수를 통해 발행되는 메소드 호출이 프로그래밍 중에 결정되는 것이 아니라 프로그램 실행 중에 결정되는 것, 즉 참조를 의미합니다. 어떤 클래스 인스턴스 객체가 가리키는지, 참조 변수에 의해 실행된 메서드 호출이 어떤 클래스에서 구현될지는 프로그램 실행 중에 결정되어야 합니다.
추상화:
추상화는 어떤 사물의 유사성과 공통점을 찾아 클래스로 분류하는 것입니다. 이 수업은 이러한 사물의 유사성과 공통점만 고려하고 현재 주제 및 목표와 관련 없는 것은 무시합니다. . 측면, 현재 목표와 관련된 측면에 중점을 둡니다. 예를 들어, 개미와 코끼리를 보고 그들이 얼마나 비슷한지 상상할 수 있다면 그것이 추상입니다.

6. 추상 클래스와 인터페이스의 개념과 차이점은 무엇인가요?

답변: 추상 클래스: 인스턴스화할 수 없고 다른 클래스의 상위 클래스로만 사용할 수 있는 특수 클래스입니다. abstract 키워드를 사용하여 선언했습니다.
특수 추상 클래스이자 인터페이스를 사용하여 선언한 특수 클래스입니다.
(1) 추상 클래스의 작업은 상속 키워드 확장을 통해 구현되고, 인터페이스 사용은 구현 키워드를 통해 구현됩니다.
(2) 추상 클래스에는 데이터 캡슐화를 실현할 수 있는 데이터 멤버가 있지만 인터페이스에는 데이터 멤버가 없습니다.
(3) 추상 클래스에는 생성자가 있을 수 있지만 인터페이스에는 생성자가 없습니다.
(4) 추상 클래스의 메서드는 private, protected 및 public 키워드를 사용하여 수정할 수 있지만(추상 메서드는 private일 수 없음), 인터페이스의 메서드는 public 키워드로만 수정할 수 있습니다.
(5) 클래스는 하나의 추상 클래스에서만 상속할 수 있으며 클래스는 동시에 여러 인터페이스를 구현할 수 있습니다.
(6) 추상 클래스에는 멤버 메서드에 대한 구현 코드가 있을 수 있지만 인터페이스에는 멤버 메서드에 대한 구현 코드가 있을 수 없습니다.

7. 생성자란 무엇이며 소멸자는 무엇이며 그 기능은 무엇인가요?

답변: 생성자(메서드)는 객체가 생성된 후 객체가 자동으로 호출하는 첫 번째 메소드입니다. 이는 선언된 모든 클래스에 존재하며 특별한 멤버 메서드입니다. 그 기능은 일부 초기화 작업을 수행하는 것입니다. Php에서는 __construct()를 사용하여 생성자 메서드를 선언하는데 하나만 선언할 수 있습니다.
소멸자(메서드)는 생성자와 정반대입니다. 객체가 소멸되기 전에 자동으로 호출되는 마지막 메소드입니다. 파일 닫기 및 메모리 해제와 같은 객체를 파괴하기 전에 일부 특정 작업을 수행하는 데 사용되는 PHP5에 새로 추가된 콘텐츠입니다.

8. 상위 클래스의 메서드를 오버로드하는 방법, 예를 들어보세요

답변: 오버로딩이란 상위 클래스의 메서드를 재정의하는 것을 의미합니다. 즉, 하위 클래스의 메서드를 사용하여 상위 클래스에서 상속받은 메서드를 대체하는 것을 메서드 재작성이라고도 합니다.
상위 클래스 메소드를 재정의하는 핵심은 메소드 이름, 매개변수 및 반환 값 유형을 포함하여 하위 클래스의 상위 클래스에 동일한 메소드를 생성하는 것입니다. PHP에서는 메소드 이름이 동일하면 됩니다.

9. 일반적으로 사용되는 마술 방법은 무엇입니까? 예를 들어

답변: PHP에서는 두 개의 밑줄(__)로 시작하는 메소드가 매직 메소드로 예약되어 있다고 규정하고 있으므로 기존 매직 메소드를 오버로드하지 않는 한 함수 이름이 __로 시작하지 않는 것이 좋습니다.
__construct()는 클래스를 인스턴스화할 때 자동으로 호출됩니다.
__destruct()는 클래스 객체가 사용될 때 자동으로 호출됩니다.
__set()은 정의되지 않은 속성에 값을 할당할 때 호출됩니다.
__get()은 정의되지 않은 속성이 호출될 때 호출됩니다.
__isset()은 isset() 또는 empty() 함수를 사용할 때 호출됩니다.
__unset()은 unset()을 사용할 때 호출됩니다.
__sleep()은 직렬화를 사용하여 직렬화할 때 호출됩니다.
__wakeup()은 unserialize를 사용하여 deserialize할 때 호출됩니다.
__call()은 존재하지 않는 메서드를 호출할 때 호출됩니다.
__callStatic()이 존재하지 않는 정적 메서드를 호출합니다.
__toString()은 객체를 문자열로 변환할 때 호출됩니다. 에코와 같은.
__invoke() 객체를 메서드로 호출하려고 할 때 호출됩니다.
__set_state()는 var_export() 함수를 사용할 때 호출됩니다. 배열 매개변수를 허용합니다.
__clone() 객체를 복사하기 위해 clone을 사용할 때 호출됩니다.

10. $this와 self, parent 세 개의 키워드는 각각 무엇을 의미하나요? 어떤 상황에서 사용되나요?

답변: $this 현재 객체
자체 현재 클래스
현재 클래스의 상위 부모 클래스
$this는 현재 클래스에서 사용됩니다. 속성과 메서드를 호출하려면 ->를 사용하세요.
self는 현재 클래스에서도 사용되는데 ::를 사용해 호출해야 합니다.
부모님은 수업에 사용됩니다.

11. 클래스에서 상수를 정의하는 방법, 클래스에서 상수를 호출하는 방법, 클래스 외부에서 상수를 호출하는 방법.

답변: 클래스의 상수도 멤버 상수입니다. 상수는 변하지 않는 수량이며 상수 값입니다.
const 키워드를 사용하여 상수를 정의하세요.
예: const PI = 3.1415326;
클래스 내부에 있든 클래스 외부에 있든 상수에 대한 액세스는 변수의 액세스와 다릅니다.
상수에 액세스하는 형식은 클래스 이름에 호출할 범위 연산자 기호(이중 콜론)를 더한 것입니다.
즉: 클래스 이름:: 클래스 상수 이름;

12. 범위 연산자::를 사용하는 방법은 무엇입니까? 어떤 상황에서 사용되나요?

답변: 클래스 상수 호출
정적 메서드 호출

13. __autoload() 메서드의 작동 원리는 무엇입니까?

답변: 이 마법 기능을 사용하기 위한 기본 조건은 클래스 파일의 파일 이름이 클래스 이름과 일치해야 한다는 것입니다.
특정 클래스를 인스턴스화하기 위해 프로그램을 실행할 때 인스턴스화 전에 클래스 파일이 도입되지 않으면 __autoload() 함수가 자동으로 실행됩니다.
이 함수는 인스턴스화된 클래스 이름을 기준으로 클래스 파일의 경로를 검색합니다. 클래스 파일이 존재하는 경로에 클래스 파일이 있다고 판단되면
include 또는 require를 실행하여 클래스를 로드합니다. 프로그램은 계속 실행됩니다. 이 경로에 파일이 없으면 오류 메시지가 표시됩니다.
자동 로딩 마법 기능을 사용하면 포함 또는 요구 기능을 많이 작성할 필요가 없습니다.

Four: ThinkPHP 부분

맨 위로

1. 일반적인 PHP 프레임워크

답변: thinkPHP, yii, ZendFramework, CakePhp, sy

2.

답변: ThinkPHP는 프로젝트 배포 및 액세스를 위해 단일 입구 모드를 채택합니다. 어떤 기능이 완료되든 프로젝트에는 통일된(그러나 반드시 유일한 것은 아님) 입구가 있습니다. 모든 프로젝트는 엔트리 파일에서 시작하고 모든 프로젝트의 엔트리 파일은 유사하다고 해야 합니다. 엔트리 파일에는 주로 다음이 포함됩니다.
프레임워크 경로, 프로젝트 경로 및 프로젝트 이름 정의(선택 사항)
디버그 모드 정의 및 실행 모드 관련 상수(선택)
프레임워크 항목 파일 로드(필수)

3. ThinkPHP의 MVC 레이어링이란 무엇인가요? (이해)

답변: MVC는 애플리케이션의 논리 계층과 프레젠테이션 계층을 분리하는 방법입니다. ThinkPHP도 MVC 디자인 패턴을 기반으로 합니다. MVC는 특별히 명확한 규정이 없는 추상적인 개념일 뿐입니다. ThinkPHP의 MVC 계층화는 대략적으로 다음과 같이 반영됩니다.
Model(M): 모델 정의는 Model 클래스로 완성됩니다.
컨트롤러(C): 애플리케이션 컨트롤러(핵심 컨트롤러 앱 클래스)와 액션 컨트롤러는 모두 컨트롤러의 역할을 맡고, 애플리케이션 컨트롤러는 스케줄링 제어를 담당합니다.
View(V): View 클래스와 템플릿 파일로 구성되어 있으며 템플릿이 100% 분리되어 독립적으로 미리보기 및 제작이 가능합니다.
그러나 사실 ThinkPHP는 M이나 V에 의존하지 않습니다. 즉, 모델이나 뷰 없이도 작동할 수 있다는 뜻입니다. 심지어 C에도 의존하지 않습니다. 이는 ThinkPHP에도 애플리케이션의 전체 일정을 담당하는 앱 컨트롤러인 Action 위에 마스터 컨트롤러가 있기 때문입니다. C가 없으면 뷰 V가 존재해야 합니다. 그렇지 않으면 더 이상 완전한 애플리케이션이 아닙니다.
간단히 말하면 ThinkPHP의 MVC 모델은 MVC 자체를 고수하기보다는 민첩한 개발 수단만을 제공합니다.

4. SQL을 최적화하는 방법은 무엇입니까? (학생들은 다음 설명을 이해한 후 자신이 이해한 대로 일반적인 의미를 말할 수 있습니다.)

답변: (1) 올바른 스토리지 엔진을 선택하세요
MyISAM과 InnoDB라는 두 가지 스토리지 엔진을 포함하는 MySQL을 예로 들어보겠습니다. 장점과 단점이 있습니다.
MyISAM은 많은 수의 쿼리가 필요한 일부 애플리케이션에 적합하지만 많은 수의 쓰기 작업에는 적합하지 않습니다. 필드만 업데이트해도 테이블 전체가 잠기며 읽기 작업이 완료될 때까지 다른 프로세스, 심지어 읽기 프로세스도 작동할 수 없습니다. 또한 MyISAM은 SELECT COUNT(*)와 같은 계산 속도가 매우 빠릅니다.
InnoDB의 추세는 매우 복잡한 스토리지 엔진이 될 것이며 일부 소규모 애플리케이션의 경우 MyISAM보다 느릴 것입니다. 그러나 "행 잠금"을 지원하므로 쓰기 작업이 많을 때 더 좋습니다. 또한 트랜잭션과 같은 고급 애플리케이션도 지원합니다.
(2) 필드의 데이터 유형 최적화
한 가지 원칙을 기억하십시오. 열이 작을수록 속도가 빨라집니다. 테이블에 몇 개의 열(예: 사전 테이블, 구성 테이블)만 있는 경우 INT를 기본 키로 사용할 이유가 없습니다. MEDIUMINT, SMALLINT 또는 더 작은 TINYINT를 사용하는 것이 더 경제적입니다. 시간을 추적할 필요가 없다면 DATETIME보다 DATE를 사용하는 것이 훨씬 좋습니다. 물론 확장을 위한 충분한 공간도 확보해야 합니다.
(3) 검색 필드에 인덱스 추가
인덱스가 반드시 기본 키나 유일한 필드를 의미하는 것은 아닙니다. 테이블에 항상 검색에 사용할 필드가 있는 경우 해당 필드를 인덱싱하는 것이 가장 좋습니다. 검색하려는 필드가 큰 텍스트 필드가 아닌 이상 전체 텍스트 인덱스를 만들어야 합니다.
(4) Select *를 사용하지 마십시오. 데이터베이스에서 더 많은 데이터를 읽을수록 쿼리 속도가 느려집니다. 또한 데이터베이스 서버와 웹 서버가 두 개의 독립된 서버인 경우 네트워크 전송 부하도 증가합니다. 데이터 테이블의 모든 필드를 쿼리하려는 경우에도 * 와일드카드 문자를 사용하지 마십시오. 내장된 필드 제외 정의를 잘 활용하면 더 편리할 수 있습니다.
(5) VARCHAR 대신 ENUM을 사용하세요
ENUM 유형은 매우 빠르고 컴팩트합니다. 실제로는 TINYINT를 보유하지만 문자열로 나타납니다. 이런 식으로 이 필드를 사용하여 선택 목록을 만드는 것이 매우 완벽해집니다. 예를 들어 성별, 민족, 부서, 상태 등 필드의 값이 제한되어 고정되어 있는 경우 VARCHAR 대신 ENUM을 사용해야 합니다.
(6) 가능할 때마다 NOT NULL을 사용하세요.
NULL 값을 사용해야 하는 특별한 이유가 없는 한 필드를 항상 NOT NULL로 유지해야 합니다. NULL에는 실제로 추가 공간이 필요하며 비교를 수행하면 프로그램이 더 복잡해집니다. 물론 이것이 NULL을 사용할 수 없다는 의미는 아닙니다. 현실은 매우 복잡하며 여전히 NULL 값을 사용해야 하는 상황이 있을 것입니다.
(7) 고정 길이 테이블이 더 빨라집니다.
테이블의 모든 필드가 "고정 길이"인 경우 전체 테이블이 "정적" 또는 "고정 길이"로 간주됩니다. 예를 들어 테이블에는 VARCHAR, TEXT, BLOB 유형의 필드가 없습니다. 이러한 필드 중 하나를 포함하는 한 테이블은 더 이상 "고정 길이 정적 테이블"이 아니며 MySQL 엔진은 이를 다른 방식으로 처리합니다.
고정 길이 테이블은 MySQL이 더 빠르게 검색하므로 성능이 향상됩니다. 이러한 고정 길이를 사용하면 다음 데이터의 오프셋을 쉽게 계산할 수 있으므로 자연스럽게 읽는 속도도 빨라집니다. 그리고 필드의 길이가 고정되어 있지 않으면 다음 필드를 찾으려고 할 때마다 프로그램이 기본 키를 찾아야 합니다.
또한 고정 길이 테이블은 캐시하고 다시 작성하기가 더 쉽습니다. 그러나 유일한 부작용은 고정 길이 필드가 일부 공간을 낭비한다는 것입니다. 고정 길이 필드는 사용 여부에 관계없이 너무 많은 공간을 필요로 하기 때문입니다.

5. ThinkPHP 3.0 아키텍처 3(코어 + 동작 + 드라이버)의 동작을 어떻게 이해합니까?

답변: Core + Behavior + Driver
TP의 공식 약어는 CBD
Core: 프레임워크의 핵심 코드이며, 없어서는 안될 TP 자체가 MVC 아이디어를 기반으로 개발된 프레임워크입니다.
동작: 동작은 ThinkPHP 새 버전의 아키텍처에서 결정적인 역할을 합니다. 시스템 코어 위에는 많은 태그 확장 비트가 있으며, 각 태그 위치는 차례로 고유한 동작을 실행할 수 있습니다. 이것이 행동 확장이 탄생한 방식이며, 많은 시스템 기능도 내장된 행동 확장을 통해 완성되며, 모든 행동 확장은 교체 가능하고 추가되어 기본 프레임워크 조립의 기반을 형성합니다.
드라이버: 데이터베이스 드라이버, 캐시 드라이버, 태그 라이브러리 드라이버, 템플릿 엔진 드라이버 및 외부 클래스 확장.
프레임워크. 실제로 이는 특정 응용 프로그램의 반제품이며, 자신의 시스템을 완성하기 위해 선택하고 사용할 수 있는 구성 요소 집합입니다. 쉽게 말하면 남들이 만들어 놓은 무대를 이용해서 퍼포먼스를 하는 거죠. 게다가 프레임워크는 일반적으로 성숙하고 지속적으로 업그레이드되는 소프트웨어입니다.

6. 기존 구성은 무엇인가요?

답변: 기존 구성 이전 페이지 다음 페이지 규칙은 시스템이 따르는 중요한 아이디어입니다(시스템 디렉토리 아래에 있는 Confconvention.php). 대부분의 용도에 따라 구성됩니다. 따라서 애플리케이션 프로젝트의 구성 파일의 경우 기존 구성과 다르거나 새로운 구성 매개변수만 구성하면 되는 경우가 많습니다. 기본 구성을 완전히 채택하면 구성 파일을 정의할 필요도 없습니다.
기존 구성 파일은 시스템에 의해 자동으로 로드되므로 프로젝트에 로드할 필요가 없습니다.

7. SQL 인젝션이란? (이해)

답변: SQL 주입 공격은 해커가 데이터베이스를 공격하기 위해 사용하는 일반적인 수단 중 하나입니다. 일부 프로그래머는 코드를 작성할 때 사용자 입력 데이터의 적법성을 판단하지 않습니다. 인젝터는 양식에 데이터베이스 쿼리 코드를 입력하고 이를 제출할 수 있습니다. 프로그램은 제출된 정보를 모아 완전한 SQL 문을 생성하며 서버는 악성 SQL 명령을 실행합니다. 인젝터는 프로그램이 반환한 결과를 바탕으로 일부 민감한 데이터를 성공적으로 획득하고 심지어 전체 서버를 제어합니다. 이것이 바로 SQL 인젝션입니다.

8. ThinkPHP는 SQL 주입을 어떻게 방지하나요? (이해)

답변: (1) 쿼리 조건에 배열을 사용하는 것이 더 안전한 방법입니다.
(2) 문자열 쿼리 조건을 최후의 수단으로 사용해야 하는 경우 전처리 메커니즘을 사용하세요.
(3) 활성화; 데이터 필드 유형 확인, 숫자 데이터 유형을 강제로 변환할 수 있습니다. (필드 유형 확인은 버전 3.1부터 필수입니다.)
(4) 자동 확인 및 자동 완성 메커니즘을 사용하여 애플리케이션에 대한 사용자 정의 필터링을 수행합니다.
(5) 필드 유형을 사용합니다. 확인, 자동 검증 및 자동 완성 메커니즘을 통해 악성 데이터가 입력되는 것을 방지합니다.

9. 디버깅 모드를 활성화하는 방법은 무엇입니까? 디버그 모드의 이점은 무엇입니까?

답변: 디버깅 모드를 켜는 것은 매우 간단합니다. 항목 파일에 상수 정의 코드 한 줄만 추가하면 됩니다.

디버깅 모드 켜기

개발 단계를 완료하고 프로덕션 환경에 배포한 후, 디버깅 모드 정의 코드만 삭제하면 됩니다. 배포 모드로 전환하세요. 디버깅 모드가 켜진 후 시스템은 먼저 시스템의 기본 디버깅 구성 파일을 로드한 다음 프로젝트의 디버깅 구성 파일을 로드합니다. 디버깅 모드의 장점은 다음과 같습니다. 로깅을 켜면 오류 정보와 디버깅 정보가 기록됩니다. 디버깅을 용이하게 하는 세부 사항, 템플릿 수정 사항이 즉시 적용되어 SQL 분석을 용이하게 합니다. 데이터 테이블 필드 수정은 캐싱의 영향을 받지 않습니다(Windows 플랫폼에서도). , Linux 배포 문제를 미리 발견하는 데 도움이 됩니다. 개발, 테스트, 데모 등을 포함한 개발 프로세스의 다양한 단계에 사용되며 다양한 애플리케이션 모드에 맞게 독립적인 프로젝트 구성 파일을 구성할 수 있습니다.

10. TP에서는 어떤 구성 모드가 지원되나요? 우선 사항?

답변: ThinkPHP는 프로젝트 구성에서 고유한 계층적 구성 모드를 만들었습니다. 해당 구성 수준은 기존 구성->프로젝트 구성->디버그 구성->그룹 구성->확장 구성->동적에 반영됩니다. 구성
위는 구성 파일의 로드 순서입니다. 이후 구성은 동일한 이름의 이전 구성을 덮어쓰므로(효과적이지 않은 경우) 우선 순위는 오른쪽에서 왼쪽입니다.

11. TP의 URL 패턴은 무엇인가요? 기본값은 무엇입니까?

답변: ThinkPHP는 일반 모드, PATHINFO, REWRITE 및 호환성 모드를 포함하여 URL_MODEL 매개변수를 설정하여 정의할 수 있는 4가지 URL 모드를 지원합니다.
기본 모드는 PATHINFO 모드입니다. URL_MODEL을 1

12로 설정하세요. TP의 시스템 변수는 무엇인가요? 시스템 변수를 얻는 방법은 무엇입니까?

답변: 시스템 변수를 얻는 방법:
Action에서 다음 메소드를 호출하면 됩니다:
$this->메서드 이름("변수 이름", ["필터 메소드"], ["기본값"])

13 . ThinkPHP 프레임워크에서 D 함수와 M 함수의 차이점은 무엇입니까?

답변: M 방법은 사용자가 모델을 인스턴스화할 때 각 데이터 테이블에 대해 모델 클래스를 정의할 것을 요구하지 않습니다. D 방법은 사용자 정의 모델 클래스가 존재하는 경우 자동으로 모델 클래스를 감지할 수 있습니다. 존재하지 않는 경우 사용자 정의 모델 클래스가 인스턴스화됩니다. M 메소드를 자동으로 호출하여 Model 기본 클래스를 인스턴스화합니다. 동시에 인스턴스화된 모델은 반복적으로 인스턴스화되지 않습니다(단일 사례 모드).

Five: 똑똑한 템플릿 엔진

맨 위로

1. 컴파일과 캐싱의 차이점은 무엇인가요?

smarty의 컴파일 과정은 템플릿을 가져와 내부의 태그를 해당 PHP 코드로 바꾸는 것입니다. 실제로는 php와 html을 혼합하는 과정입니다. smarty의 캐시는 good 파일이 실행된 후 동시에 정적 html 페이지가 생성되므로 다시 접근하면 html 파일에 접근하게 되므로 효율성 측면에서 더 높아요

2. 스마티의 장점은 무엇인가요?

Smarty는 PHP로 작성된 PHP 템플릿 엔진입니다. 목적은 PHP 프로그램을 아티스트와 분리하여 프로그래머가 프로그램의 논리적 내용을 변경해도 아티스트의 페이지 디자인에 영향을 미치지 않으며 아티스트가 다시 작업할 때 -페이지를 수정해도 프로그램의 프로그램 로직에는 영향을 미치지 않습니다. 이는 다중 사용자 협력 프로젝트에서 특히 중요합니다. (다중 스타일 프로그램 개발도 쉽습니다.)
Smarty의 장점
1. 속도가 빠릅니다. 다른 템플릿 엔진에 비해.
2. 컴파일형: smarty로 작성된 프로그램은 런타임 시 비템플릿 기술 PHP 파일로 컴파일되어야 합니다
3. 캐싱 기술: 사용자가 최종적으로 보는 HTML 파일을 정적 HTML 페이지로 캐시할 수 있습니다
4. - 기술: smarty는 플러그인을 사용자 정의할 수 있습니다.
스마티가 적합하지 않은 곳
1. 실시간 업데이트가 필요한 컨텐츠. 예를 들어 재고 표시와 마찬가지로 빈번한 데이터 업데이트가 필요합니다
2. 단순성으로 인해 아티스트와 프로그래머가 모두 필요한 소규모 프로젝트

3. 템플릿에 변수를 유지하려면 {$smarty}를 사용하세요

{$smarty.get.page} //$_GET[에 액세스하는 것과 유사합니다. php 스크립트 페이지]
{smarty.cookies.}
{smarty.post.}
{smarty.session.}
{smarty.server.}

4. php의 변수에 템플릿으로 접근

php에는 시스템이 있습니다. script 상수에는 두 가지 유형이 있으며, 이 두 상수는 Smarty 템플릿에서도 접근할 수 있으며 PHP에서 할당할 필요가 없습니다. 상수의 값은 변수가 {$를 통해 유지되는 한 직접 출력될 수 있습니다. 똑똑하다}. 템플릿에서 상수 출력의 예:
{$smarty.const.__FILE__}

5. Variable Mediator

Variable Mediator

6. 중국어 결과를 쿼리할 때 나타납니다. 어떻게 해결하나요?

1. 파일 속성(다른 이름으로 저장)

2. 파일 메타(브라우저 파싱 설정 시)
3. 데이터베이스 연결 시 인코딩 설정
4. PHP 파일의 헤더 기능을 사용하여 인코딩 결정

7. 캐싱이 켜져 있으면 smarty가 동시에 정적 사본 생성 html 페이지가 설정된 시간 내에 만료되지 않으면 다시 액세스할 때 html 파일에 액세스하게 되므로 데이터베이스를 읽을 필요성이 줄어들므로 효율성 측면에서 더 높은.

8. Smarty의 할당 및 로딩 템플릿

$Smarty->ass(name, value)

$Smarty->display('index.html')

9.marty 템플릿 기술의 용도는 무엇인가요?

php와 html을 분리하기 위해 아티스트와 프로그래머는 서로 간섭하지 않고 각자의 업무를 수행할 수 있습니다.

10. 스마티의 주요 구성은 무엇인가요?

1. smarty.class.php를 도입합니다.

3. 기본 템플릿 경로를 다시 수정합니다.

5. 구성 파일 경로

6. 기본 캐시 경로를 다시 수정합니다.
7. 캐시 활성화 여부를 설정할 수 있습니다.
8. 왼쪽 및 오른쪽 구분 기호를 설정할 수 있습니다.

11. 스마티 사용 시 주의할 점은 무엇인가요?

Smarty는 MVC 개념을 기반으로 하는 템플릿 엔진으로, 페이지 프로그램을 뷰 레이어와 컨트롤 레이어의 두 부분으로 나눕니다.
즉, smarty 기술은 사용자 UI를 PHP 코드와 분리합니다.

이렇게 하면 프로그래머와 아티스트가 서로 간섭하지 않고 각자의 업무를 수행할 수 있습니다.

12.smarty를 사용할 때 다음 사항에 주의하세요.


1.smarty를 올바르게 구성하세요. 주로 smarty 개체를 인스턴스화하고 smarty 템플릿 파일의 경로를 구성하는 데 필요합니다.
2. PHP 페이지에서 할당 할당 및 표시 페이지를 사용합니다.

3. PHP 코드 조각은 smarty 템플릿 파일에서 허용되지 않습니다. 모든 주석, 변수 및 함수는 구분 기호 내에 포함됩니다.

A.{}

B.C. if else

D.include
E.Literal

6. 보조 개발 시스템(DEDE, ecshop)

맨 위로

1. 간단히 말해서 개발은 기존 소프트웨어를 사용자 정의 및 수정하고 기능을 확장한 다음 원하는 기능을 달성하는 것입니다. 일반적으로 원래 시스템의 핵심은 변경되지 않습니다.

2.MVC

모델(모델) 데이터 처리.

템플릿 표시를 봅니다.

컨트롤러가 프로세스를 제어합니다.

MVC의 개념은 무엇인가요? 각 레벨의 주요 임무는 무엇인가요?

MVC(Model-View-Controller)는 소프트웨어 디자인 패턴 또는 프로그래밍 아이디어입니다.

M은 모델 모델 레이어를 나타내고, V는 뷰 레이어(디스플레이 레이어 또는 사용자 인터페이스), C는 컨트롤러 레이어를 나타냅니다.

mvc를 사용하는 목적은 M과 V를 분리하여 하나의 프로그램이 서로 다른 사용자 인터페이스를 쉽게 사용할 수 있도록 하는 것입니다.

웹사이트 개발에서

모델 레이어는 일반적으로 데이터베이스 테이블 정보를 추가, 삭제, 수정 및 확인하는 역할을 담당합니다.
뷰 레이어는 페이지 콘텐츠를 표시하는 역할을 담당합니다.
컨트롤러 레이어는 M과 V 사이를 조절하는 역할을 합니다. 컨트롤러 계층은 클래스의 어떤 메서드를 호출할지 결정합니다.
실행 후 컨트롤러 계층은 결과가 할당될 뷰 계층을 결정합니다.

3. 설치 후 보조 개발 프로그램에 접속할 때 일부 경고 및 오류가 발생했습니다

오류에 따라 서버 구성 매개 변수 및 Baidu를 수정합니다

4. 기능, 템플릿 교체 및 기능 추가 및 수정

실제로는 객체지향입니다. 어플리케이션 사용, 템플릿 교체는 smarty

사용과 유사합니다. 5. 어떤 보조 개발 도구를 사용해 보셨나요?

Dedecms phpcms ecshop은 기본적으로 기초가 탄탄하다면 배우는 데 문제가 없을 것입니다.

6. PHP처럼 1차 개발을 하는 것이 좋을까요, 아니면 2차 개발을 하는 것이 좋을까요?

일반적으로 중소기업에서는 효율성을 위해 2차 개발에 cms 시스템을 사용합니다. 물론 한꺼번에 개발하고 싶다면 프레임워크 사용법을 알고 있고 시간이 충분하다면 괜찮습니다. 대기업에서는 저작권 문제를 피하기 위해 팀 단위로 개발합니다.

7. 2차 개발 과정에서 여러 클래스 간의 메소드 액세스는 어떻게 전송되나요?

클래스 상속이 아니라 객체 결합이고, 인스턴스화된 객체가 전역으로 전달됩니다

8. dedecs가 디렉토리를 변경하면 백그라운드에서 특정 항목을 입력할 수 없는 경우 어떻게 해결하나요?

백그라운드 코어 설정을 현재 프로젝트 디렉터리 이름으로 변경하세요

9. dedecs의 커스텀 모델을 이해하시나요?

DreamWeaver 시스템에는 콘텐츠 모델이라는 개념이 있습니다. 다양한 콘텐츠 모델을 사용하여 다양한 콘텐츠 형태의 사이트를 구축할 수 있습니다. 시스템에는 일반 기사, 사진 앨범, 소프트웨어, 제품, 분류된 정보, 주제 등의 모델이 제공됩니다. . 시스템 자체 모델을 통해 이를 사용하여 다양한 유형의 사이트를 구축할 수 있습니다. 예를 들어, 지도책을 사용하여 사진 사이트를 구축하고 소프트웨어 모델을 사용하여 소프트웨어 다운로드 사이트를 구축할 수 있습니다.
물론, 시스템과 함께 제공되는 위 모델을 시스템 모델이라고 합니다. 사용자는 책, 음악 앨범 등과 같은 일부 모델을 직접 정의할 수 있습니다. 이러한 모델을 사용자 정의해야만 더 많은 콘텐츠 형식을 갖춘 사이트를 구축할 수 있습니다.
현재 요구 사항의 변화에 ​​맞게 자동으로 테이블 구조를 추가하는 것과 같습니다

10. 템플릿 설계 및 사용 시 다음 개념을 이해해야 합니다.

1. 섹션(표지) 템플릿:
참조 웹 사이트 홈페이지 또는 더 중요한 열의 표지 채널에서 사용되는 템플릿은 일반적으로 "index_identification ID.htm"으로 명명됩니다. 또한 사용자가 정의한 단일 페이지 또는 사용자 정의 태그도 섹션 템플릿 태그를 지원할지 여부를 선택할 수 있습니다. 지원되는 경우 시스템은 섹션 템플릿 태그 엔진을 사용하여 콘텐츠를 출력하거나 특정 파일을 생성하기 전에 콘텐츠를 구문 분석합니다.
2. 목록 템플릿:
웹사이트의 특정 열에 있는 모든 기사 목록의 템플릿을 말하며 일반적으로 "list_identification ID.htm"으로 명명됩니다.
3. 아카이브 템플릿:
기사 템플릿과 같은 문서 보기 페이지의 템플릿을 나타내며 일반적으로 "article_identification ID.htm"으로 명명됩니다.
4. 기타 템플릿:
일반적으로 시스템에는 홈 페이지 템플릿, 검색 템플릿, RSS, JS 컴파일 기능 템플릿 등의 템플릿이 포함됩니다. 또한 사용자는 템플릿을 사용자 정의하여 파일을 만들 수도 있습니다.

11. 디데에는 몇 개의 태그가 사용되나요?

목록, 콘텐츠 및 기타 태그는 해당 범위 내에서만 사용할 수 있고, 목록 태그는 목록에서만 사용할 수 있으며, 콘텐츠 태그는 콘텐츠 태그에서만 사용할 수 있습니다.
전역 태그는 모든 페이지에서 사용할 수 있습니다

12. 일반적으로 사용되는 클래스 라이브러리에 익숙합니다.

(예: dedesql.class.php)에 익숙합니다. 사용자 정의 함수 라이브러리에 익숙합니다. (extend.func .php); 프론트 엔드 항목 파일(common.inc.php)에 익숙함

7. WeChat 공개 플랫폼 개발

맨 위로 가기

1. WeChat 운영 메커니즘

어떤 언어를 사용합니까? 공식 계정과 php 간 통신: Xml
Weixin .php에서 공개 계정 데이터를 받는 방법:
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//데이터 XML 데이터 받기

2 현재 WeChat에서 제공하는 메시지 유형 7가지 기본 메시지 유형:

(1) 문자 메시지(텍스트)

(2) 사진 메시지(이미지)
(3) 음성(음성)
(4) 비디오(비디오)
(5) 지리적 위치 (위치);
(6) 링크 메시지(링크)
(7) 이벤트 푸시(이벤트)
유형. 다양한 메시지 유형을 보낼 때 데이터 전송 형식을 마스터하세요

3. 전체 파일을 문자열로 읽어오는 함수는

File_get_contents

4입니다. 일반적으로 사용되는 함수는

xml 데이터를 개체로 구문 분석하는 함수는

simplexml_load_string(입니다. )

문자열을 배열로 변환하는 함수는 ___explode_________이고, 배열을 문자열로 변환하는 함수는 ____implode________입니다.
URL 문자열을 인코딩하는 문자열은 ____urlencode________입니다.

5 Sprintf 함수의 역할

이것이 전부입니다. 매뉴얼을 확인하시면 됩니다.

6. 위챗 공식 계정은 왜 서비스를 제공할 수 없나요?

(1) 네트워크 이유, 데이터 인터페이스 이유

(2) 코드 오류, 이유 추측 방법

수정 위치 확인, 코드가 올바른지 확인
데이터를 출력하여 살펴볼 수 있습니다. PHP를 사용하여 파일 조작
$myfile = fopen("newfile.txt", "w");
$txt ="aaaaaaaaaa";
fwrite($myfile, $txt);
fclose($myfile);

7 . 맞춤 메뉴의 이벤트 푸시

클릭

클릭하면 링크 이동

코드를 스캔하면 이벤트가 푸시됩니다
코드를 스캔하면 푸시되고 팝업됩니다
사진을 찍는 시스템의 이벤트를 팝업하고 사진을 보냅니다
의 이벤트를 팝업합니다. WeChat 앨범 발신자
지리적 위치 선택기 팝업 이벤트

8. 토큰의 역할

WeChat 서버와 PHP 서버 간의 보안 확인에 사용되는 보안 메커니즘 확인

9. Appid와 secret의 역할이 필요합니다. API 인터페이스 요청 시 전달(예: 메뉴 조작) appid와 secret 두 값은 해당 애플리케이션의 인증 코드를 얻는 데 사용됩니다

8 당신이 마스터한 기술에 대한 설명

1. PHP+MYSQL을 방향으로 삼아 스마트 템플릿 엔진, ThinkPHP 프레임워크, WeChat 공개 플랫폼 개발, DEDE, ecshop 및 기타 보조 개발 시스템에 능숙하며 데이터베이스 측면에서 특정 이해를 갖추고 있습니다. MYSQL, MSSQL 등 데이터베이스 능숙, Linux
2. 프론트엔드 기술: DIV+CSS 웹 페이지 레이아웃, javascript, JQuery 프레임워크, AJAX 기술, 포토샵 이미지 처리
3. 프로젝트 개발 경험, Smarty를 사용하여 'XXXXXXXX'를 개발한 ThinkPHP는 'XXXXXXXX'를 개발했으며 WeChat 공개 플랫폼을 사용하여 '고용 서비스 네트워크'의 공개 계정을 개발했으며 DreamWeaver 시스템을 사용하여 기업 웹 사이트 등을 개발했습니다.


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿