1. 일반적인 PHP 프레임워크
답변: thinkPHP, yii, ZendFramework, CakePhp, sy
관련 주제 권장 사항: 2020 thinkphp 인터뷰 질문 및 답변(전체)
2. TP의 단일 항목 파일을 이해하는 방법은 무엇입니까?
답변: ThinkPHP는 프로젝트 배포 및 액세스를 위해 단일 입구 모드를 사용합니다. 어떤 기능이 완료되든 프로젝트에는 통일된(그러나 반드시 유일한 것은 아님) 입구가 있습니다. 모든 프로젝트는 항목 파일에서 시작되며 모든 프로젝트의 항목 파일은 유사하다고 해야 합니다. 항목 파일에는 주로 다음이 포함됩니다.
프레임워크 경로, 프로젝트 경로 및 프로젝트 이름 정의(선택 사항)
디버깅 모드 정의 그리고 실행 모드 관련 상수(선택 사항)
프레임워크 항목 파일 로드(필수)
3. ThinkPHP의 MVC 레이어링이란 무엇인가요? (이해)
답변: MVC는 애플리케이션의 논리 계층과 프레젠테이션 계층을 분리하는 방법입니다. ThinkPHP도 MVC 디자인 패턴을 기반으로 합니다. MVC는 특별히 명확한 규정이 없는 추상적인 개념일 뿐입니다. ThinkPHP의 MVC 계층화는 대략적으로 다음과 같이 반영됩니다.
모델(M): 모델의 정의는 Model 클래스로 완성됩니다. : 컨트롤러(C): 애플리케이션 컨트롤러(핵심 컨트롤러 APP 클래스)와 ACTION 컨트롤러는 모두 컨트롤러의 역할을 수행하며, 액션 컨트롤러는 비즈니스 프로세스 제어를 완료하고 애플리케이션 컨트롤러는 스케줄링 제어를 담당합니다.
뷰(V) : 뷰 클래스와 템플릿 파일로 구성되어 있으며 템플릿이 100% 분리되어 독립적으로 미리보기 및 제작이 가능합니다.
하지만 사실 ThinkPHP는 M이나 V에 의존하지 않습니다. 즉, 모델이나 뷰 없이도 작동할 수 있다는 뜻입니다. 심지어 C에도 의존하지 않습니다. 이는 ThinkPHP에도 애플리케이션의 전체 일정을 담당하는 앱 컨트롤러인 Action 위에 마스터 컨트롤러가 있기 때문입니다. C가 없으면 뷰 V가 존재해야 합니다. 그렇지 않으면 더 이상 완전한 애플리케이션이 아닙니다.
간단히 말해서 ThinkPHP의 MVC 모델은 MVC 자체를 고수하기보다는 민첩한 개발 수단만을 제공합니다.
4. SQL을 최적화하는 방법은 무엇입니까?(학생들은 다음 설명을 이해한 후 자신의 이해에 따라 일반적인 의미를 진술할 수 있습니다.) 답변: (1) 올바른 스토리지 엔진을 선택하십시오.
MyISAM 및 InnoDB라는 두 스토리지 엔진을 포함하여 MySQL을 예로 들어 보겠습니다. 각 엔진에는 장단점이 있습니다.
MyISAM은 많은 쿼리가 필요한 애플리케이션에는 적합하지만 쓰기 작업이 많은 애플리케이션에는 적합하지 않습니다. 필드만 업데이트해도 테이블 전체가 잠기며 읽기 작업이 완료될 때까지 다른 프로세스, 심지어 읽기 프로세스도 작동할 수 없습니다. 또한 MyISAM은 SELECT COUNT(*)와 같은 계산 속도가 매우 빠릅니다.
InnoDB의 추세는 매우 복잡한 스토리지 엔진이 될 것이며 일부 소규모 애플리케이션의 경우 MyISAM보다 느릴 것입니다. 그러나 "행 잠금"을 지원하므로 쓰기 작업이 많을 때 더 좋습니다. 또한 트랜잭션과 같은 고급 애플리케이션도 지원합니다. ㅋㅋㅋ > 테이블에 몇 개의 열(예: 사전 테이블, 구성 테이블)만 있는 경우 INT를 기본 키로 사용할 이유가 없습니다. MEDIUMINT, SMALLINT 또는 더 작은 TINYINT를 사용하는 것이 더 경제적입니다. 시간을 추적할 필요가 없다면 DATETIME보다 DATE를 사용하는 것이 훨씬 좋습니다. 물론 확장을 위한 충분한 공간도 확보해야 합니다. ㅋㅋㅋ > out out out out of 검색 테이블에 항상 검색에 사용할 필드가 있는 경우 해당 필드를 인덱싱하는 것이 가장 좋습니다. 검색하려는 필드가 큰 텍스트 필드가 아닌 경우 전체 텍스트 인덱스를 만들어야 합니다.
(4) Select *를 사용하지 마십시오. 데이터베이스에서 더 많은 데이터를 읽을수록 쿼리 속도가 느려집니다. 또한 데이터베이스 서버와 웹 서버가 두 개의 독립된 서버인 경우 네트워크 전송 부하도 증가합니다. 데이터 테이블의 모든 필드를 쿼리하려는 경우에도 * 와일드카드 문자를 사용하지 마십시오. 내장된 필드 제외 정의를 잘 활용하면 더 편리할 수 있습니다.
(5) VARCHAR
대신 ENUM을 사용하세요.ENUM 유형은 매우 빠르고 컴팩트합니다. 실제로는 TINYINT를 보유하지만 문자열로 나타납니다. 이런 식으로 이 필드를 사용하여 선택 목록을 만드는 것이 매우 완벽해집니다. 예를 들어 성별, 민족, 부서, 상태 등 필드의 값이 제한되어 고정되어 있는 경우 VARCHAR 대신 ENUM을 사용해야 합니다.的 (6) NULL 값을 사용해야 하는 특별한 이유가 없는 한 가능한 한 not 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부터 필드 유형 확인이 필수입니다)
ㅋㅋㅋ 함께하면 최고의 결과를 얻을 수 있습니다.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->Method name("Variable name",["Filter method"],["Default value"] )13. ThinkPHP 프레임워크에서 D 함수와 M 함수의 차이점은 무엇인가요?
답변: M 방법은 사용자가 모델을 인스턴스화할 때 각 데이터 테이블에 대해 모델 클래스를 정의할 것을 요구하지 않습니다. D 방법은 사용자 정의 모델 클래스가 존재하는 경우 자동으로 모델 클래스를 감지할 수 있습니다. 인스턴스화되지 않은 경우 M 메서드가 자동으로 호출되어 Model 기본 클래스를 인스턴스화합니다. 동시에 인스턴스화된 모델은 반복적으로 인스턴스화되지 않습니다(단일 사례 모드).
관련 학습 권장 사항:thinkphp
위 내용은 2018PHP 면접 질문: ThinkPHP의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!