관련 추천 : "2019 PHP 면접 질문 요약(모음) "
1. PHP 기본 부분
1. PHP 언어의 주요 장점 중 하나는 크로스 플랫폼입니다.
PHP의 최적의 운영 환경 조합은 Apache+MySQL+PHP입니다. 이 운영 환경은 다양한 운영 체제(예: Windows, Linux 등)에서 구성할 수 있으며 운영 체제에 의해 제한되지 않습니다. , 그래서 크로스 플랫폼이라고 합니다. Platform
2. WEB 개발에서 데이터 제출 방법은 몇 가지가 있나요? 차이점은 무엇입니까? Baidu는 어떤 방법을 사용하나요?
두 가지 메서드 가져오기 및 게시하기
차이:
(1) URL 가시성: 메서드 가져오기 URL 매개변수는 표시되고 게시물은 표시되지 않음#🎜 🎜 #
(2) 캐시 가능성: get 메소드는 캐시할 수 있지만 post 메소드는 캐시할 수 없습니다. (3) 전송 데이터 크기: get의 일반적인 전송 데이터 크기는 2k~4k를 초과하지 않습니다(브라우저에 따라 한도가 다르지만 크기는 크지 않습니다). 사후 요청 전송 데이터는 php.ini 구성 파일 설정을 기반으로 하며 용량이 무한할 수도 있습니다. (4) 데이터 전송: get 메소드는 url 주소 표시줄 스플라이싱을 통해 매개변수를 전송하는 데 사용되며, post 메소드는 본문을 통해 데이터를 전송하는 데 사용됩니다. 제안: 1. get 유형은 기밀 정보를 포함하므로 Post 데이터 제출 유형을 사용하는 것이 좋습니다. #2 데이터 쿼리에는 Get 메소드를 사용하는 것이 좋습니다. 데이터 추가, 수정 또는 삭제에는 Post 메소드를 사용하는 것이 좋습니다.
바이두에서 사용하는 get 메소드. URL
#🎜🎜에서 볼 수 있기 때문입니다. #3. PHP의 프레임워크, 템플릿 엔진, 시스템 등을 마스터하세요Framework: CI와 같은 많은 프레임워크가 있습니다. Yii, Laravel 등 우리가 배운 것은 thinkphp#🎜🎜 #TEMPLATE ENGINE: 교과서에도 포함되어 많이 있습니다. 우리가 배운 것은 smarty
시스템: 있습니다. Kangsheng의 제품(uchome, supesite, discuzX 등), Empire system, DEDE(Dreamweaver), ecshop 등 많은 것들이 있습니다. 우리가 배운 것은 DEDECMS, Ecshop
4 입니다. 웹 프론트엔드 기술을 마스터했습니까?
DIV+CSS 웹페이지 레이아웃, JavaScript, jQuery 프레임워크, 포토샵 이미지 처리에 능숙함
5 AJAX의 장점은 무엇인가요?
ajax는 부분 새로 고침을 달성하기 위해 javascript 또는 JQuery 프레임워크를 통해 구현할 수 있는 비동기 전송 기술로, 서버에 대한 부담을 줄이고 사용자 경험을 향상시킵니다.
6. 보안은 프로그램에 있어 매우 중요합니다. 개발 중에 주의해야 할 보안 메커니즘이 무엇인지 알려주십시오.
(1) 인증번호를 사용하여 등록기 침수를 방지하세요.
(2) 전처리, 바인딩 매개변수, 매개변수 필터링 및 이스케이프를 사용하여 SQL 삽입 방지
(3) 토큰을 사용하여 원격 제출 방지, 토큰을 사용하여 로그인 상태 확인 .
7. 프로그램 개발 과정에서 프로그램의 운영 효율성을 높이는 방법은 무엇인가요?
(1) SQL 문을 최적화하고, 쿼리 문에서 select *를 사용하지 말고, 어떤 필드를 사용하여 하위 쿼리를 덜 사용하고 테이블 연결로 대체할 수 있는지 확인하세요.
(2) 데이터 테이블에 인덱스를 생성합니다.
(3) 프로그램에서 자주 사용되는 데이터에 대한 캐시를 생성합니다(예: redis를 사용하여 데이터를 캐시하는 것, ob를 사용하여 동적 페이지를 정적화하는 등).
(4) mysql의 마스터-슬레이브 복제, 읽기와 쓰기의 분리. (mysq 실행 효율성 및 쿼리 속도 향상)
(5) 로드 밸런싱에는 nginx를 사용합니다. (다형성 서버에 대한 접근 압력을 균등하게 분산)
8. PHP를 다른 데이터베이스와 함께 사용할 수 있나요?
PHP는 MYSQL 데이터베이스와 가장 잘 결합됩니다. 물론 PHP는 PostgreSql, SqlServer, Oracle, SqlLite 등과 같은 다른 데이터베이스와도 사용할 수 있습니다.
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입니다. 문자열 형식의 문자열입니다. assoc 이 매개변수가 TRUE이면 객체 대신 배열을 반환합니다. Json_encode: PHP 변수를 json 형식으로 변환합니다. 11. Print, echo, print_r의 차이점은 무엇인가요? (1) echo와 print는 모두 출력을 할 수 있습니다. 차이점은 echo는 함수가 아니고 반환 값이 없는 반면 print는 반환 값이 있는 함수이므로 상대적으로 말하면 됩니다. echo를 빠르게 출력하는 것이 더 편리하며, print_r은 일반적으로 디버깅에 사용되는 변수에 대한 정보를 인쇄하는 데 사용됩니다. (2) print는 문자열을 인쇄하는 것 (3) print_r은 배열 객체 12, SESSION 및 쿠키의 차이점은 무엇인가요? (1) 저장 위치: 세션은 서버에 저장, 쿠키는 브라우저에 저장 (2) 보안: 쿠키보다 세션 보안이 높습니다#🎜 🎜# (3) 세션은 '세션 서비스'이므로 사용 시에는 쿠키를 켜두셔야 합니다.
을 직접 켜실 필요는 없습니다.13. PHP에서 배열을 처리하는 데 일반적으로 사용되는 함수는 무엇입니까? (함수의 '매개변수'와 '반환값'에 집중하세요)
(1) array()는 배열을 생성합니다
(2) in_array()는 요소가 배열에 있습니다
(3) count()는 배열의 요소 수를 반환합니다
(4) array_merge()는 여러 배열을 하나의 배열로 병합합니다 #🎜🎜 #
(5) array_diff() 둘 이상의 배열 간의 차이를 비교합니다 (6) array_intersect() 둘 이상의 배열의 교집합을 가져옵니다 ( 7 ) array_keys() 배열의 키 목록을 가져옵니다 (8) array_values() 배열의 값 목록을 가져옵니다 (9) array_unique() 중복된 값 삭제 배열에서 #🎜 🎜#(10) array_push()는 배열의 끝에 하나 이상의 요소를 삽입합니다(push)
(11) array_pop()이 팝업되어 반환됩니다. 배열의 마지막 요소 array ( Pop)
(12) array_walk() 사용자 정의 함수를 사용하여 배열의 각 요소에 대해 콜백 처리를 수행합니다
14. 문자열을 처리하는 PHP의 일반적인 함수는 무엇입니까? (함수의 '매개변수'와 '반환값'에 집중하세요)
(1) Trim()은 문자열 양쪽의 공백 문자와 기타 문자를 제거합니다.
#🎜🎜 # ( 2) strlen()은 문자열의 길이를 가져옵니다 (3) mb_strlen()은 문자열의 길이를 가져옵니다(문자 인코딩을 지정할 수 있으며 길이는 중국어 문자열에 대해 계산됩니다) # 🎜🎜#( 4) substr()은 문자열의 일부를 반환합니다.
(5) str_replace() 하위 문자열 교체
(6) str_repeat () 문자열 반복 #🎜🎜 #
(7) is_string()은 변수가 문자열인지 감지합니다. (8) str_shuffle()은 문자열을 무작위로 섞습니다.#🎜🎜 # (9) sprintf () 형식화된 문자열을 기반으로 생성된 문자열을 반환합니다. (일반적으로 테이블을 분할한 후 데이터 테이블 이름을 얻는 데 사용됩니다.)
(10) strstr()은 다음과 같은 첫 번째 항목을 찾습니다. string
# 🎜🎜#(11) addlashes 백슬래시를 사용하여 문자열15을 인용하는 데 PHP가 시간을 처리하는 일반적인 기능은 무엇입니까? (함수의 '매개변수'와 '반환값'에 집중하세요) (1) date()는 현지 시간/날짜 형식을 지정합니다. (2) getdate() 날짜/시간 정보를 가져옵니다. (3) date_default_timezone_set() 기본 시간대를 설정합니다. (4) date_default_timezone_get()은 기본 시간대를 반환합니다. (5) mktime()은 날짜의 Unix 타임스탬프를 반환합니다. (6) strtotime() 문자열의 날짜 시간 설명을 Unix 타임스탬프로 구문 분석합니다. (7) strftime() 지역 설정에 따라 현지 시간/날짜 형식을 지정합니다. # 🎜🎜#16. 데이터베이스 처리를 위한 PHP의 일반적인 기능은 무엇입니까? (함수의 '매개변수'와 '반환값'을 주목하세요)
PHP 매뉴얼을 참고해서 주의 깊게 읽어주세요. 이 항목은 매우 중요합니다
17. PHP에서 파일을 조작하기 위해 일반적으로 사용되는 함수는 무엇입니까? (함수의 '매개변수'와 '반환값'에 주목)
(1) fopen() 파일 열기
(2) fgets() 파일 읽기 ; 참고: file_get_contents()는 파일도 읽습니다
(3) 파일을 씁니다 fwrite() 참고: file_put_contents()는 파일을 쓸 수도 있습니다
(4) 파일 핸들을 닫습니다 ()
(5) 파일 이동/이름 바꾸기 rename()
(6) 파일 복사 copy()
(7) 파일 vim 생성 또는 touch
(8) 파일 삭제 unlink()
(9) 파일에 마지막으로 액세스한 시간 가져오기 fileatime()
(10 ) 파일이 마지막으로 수정된 시간을 가져옵니다. filemtime()
(11) 파일 크기를 가져옵니다. filesize()
(12) 파일 형식을 가져옵니다. filetype( )
# 🎜🎜#(13) 파일 세부 정보 가져오기 state()(14) 디렉토리인지 확인 is_dir()18, PHP는 일반적으로 디렉토리(폴더) 기능을 작동하는 데 사용됩니까? (함수의 '매개변수'와 '반환값'에 집중하세요) (1) opendir() 디렉터리를 엽니다 (2) readdir() 디렉터리를 읽습니다. #🎜🎜 #(3) 디렉터리 삭제 rmdir()
(4) 디렉터리 핸들을 닫습니다. Closedir()
(5) 디렉터리 mkdir 생성 ()
(6) 경로 dirname의 디렉터리 부분을 반환합니다()
(7) 현재 작업 디렉터리 가져오기 getcwd()
(8) 지정된 경로 파일 및 디렉터리 나열 scandir()
2. 데이터베이스 부분일반적인 관계형 데이터베이스 관리 시스템은 무엇입니까 제품?
답변: Oracle, SQL Server, MySQL, Sybase, DB2, Access 등
SQL 언어에는 어떤 부분이 포함되나요? 각 섹션의 액션 키워드는 무엇입니까?
답변: SQL 언어는 데이터 정의(DDL), 데이터 조작(DML), 데이터 제어(DCL) 및 데이터 쿼리(DQL)의 네 부분으로 구성됩니다. 데이터 정의: 테이블 생성, 테이블 변경, 테이블 삭제, 인덱스 생성/삭제 등
데이터 조작: 선택, 삽입, 업데이트, 삭제,
#🎜 🎜#데이터 제어: 부여,취소데이터 쿼리: 선택무결성 제약 조건은 무엇인가요? 데이터 무결성은 데이터의 정확성과 신뢰성을 의미합니다. Includes: (1) 엔터티 무결성: 테이블의 각 행이 테이블의 고유한 엔터티임을 규정합니다. (2) 도메인 무결성: 테이블의 열이 값 범위, 정밀도 및 기타 규정을 포함하는 특정 데이터 유형 제약 조건을 충족해야 함을 의미합니다. (3) 참조 무결성: 두 테이블의 기본 키와 외래 키의 데이터가 일관되어야 한다는 의미로, 테이블 간 데이터의 일관성을 보장하고 데이터 손실이나 부정확한 데이터의 확산을 방지합니다. 데이터베이스에서.(4) 사용자 정의 무결성: 다양한 관계형 데이터베이스 시스템에는 애플리케이션 환경에 따라 특별한 제약 조건이 필요한 경우가 많습니다. 사용자 정의 무결성은 특정 관계형 데이터베이스에 대한 제약 조건으로, 특정 응용 프로그램이 충족해야 하는 의미론적 요구 사항을 반영합니다.
거래란 무엇인가요? 그리고 그 특징은?
트랜잭션: 일련의 데이터베이스 작업이자 데이터베이스 애플리케이션의 기본 논리 단위입니다.
특징:
(1) 원자성: 즉, 모든 트랜잭션이 실행되거나 전혀 실행되지 않는 불가분성입니다.
(2) 일관성 또는 문자열 가능성. 트랜잭션을 실행하면 데이터베이스가 하나의 올바른 상태에서 다른 올바른 상태로 변환됩니다.
(3) 격리. 트랜잭션이 올바르게 커밋되기 전에는 트랜잭션으로 인해 발생한 데이터 변경 사항이 다른 트랜잭션에 제공될 수 없습니다.
(4) 내구성. 트랜잭션이 올바르게 제출되면 그 결과는 데이터베이스에 영구적으로 저장됩니다. 트랜잭션 제출 후 다른 오류가 발생하더라도 해당 트랜잭션의 처리 결과는 저장됩니다.
간단한 이해: 트랜잭션의 모든 작업은 성공하거나 실패합니다.
자물쇠란 무엇인가요?
데이터베이스는 여러 사용자가 사용하는 공유 리소스입니다. 여러 사용자가 동시에 데이터에 액세스하면 여러 트랜잭션이 동시에 데이터베이스의 동일한 데이터에 액세스합니다. 동시 작업을 제어하지 않으면 잘못된 데이터를 읽고 저장하여 데이터베이스의 일관성이 손상될 수 있습니다.
잠금은 데이터베이스 동시성 제어를 달성하는 데 매우 중요한 기술입니다. 트랜잭션이 데이터 개체에 대해 작동하기 전에 먼저 시스템에 잠금 요청을 보냅니다. 잠금 후 트랜잭션은 데이터 개체에 대한 특정 제어권을 갖게 됩니다. 트랜잭션이 잠금을 해제하기 전에는 다른 트랜잭션이 데이터 개체를 업데이트할 수 없습니다.
기본 잠금 유형: 잠금에는 행 수준 잠금과 테이블 수준 잠금이 포함됩니다.
뷰란 무엇인가요? 커서란 무엇입니까?
뷰는 물리적 테이블과 동일한 기능을 가진 가상 테이블입니다. 뷰는 일반적으로 하나의 테이블 또는 여러 테이블의 행이나 열의 하위 집합을 추가, 수정, 확인 및 작동할 수 있습니다. 뷰를 수정해도 기본 테이블에는 영향을 주지 않습니다. 다중 테이블 쿼리보다 데이터를 더 쉽게 얻을 수 있습니다.
Cursor: 쿼리 결과 집합을 단위로 효과적으로 처리합니다. 커서를 셀의 특정 행에 배치하여 결과 집합의 현재 행에서 하나 이상의 행을 검색할 수 있습니다. 결과 세트의 현재 행을 변경할 수 있습니다. 커서는 일반적으로 사용되지 않지만, 데이터를 하나씩 처리해야 할 때 커서는 매우 중요합니다.
저장 프로시저란 무엇인가요? 무엇을 부르나요?
저장 프로시저는 미리 컴파일된 SQL 문이라는 장점이 있습니다. 즉, 한 번만 생성하면 나중에 프로그램에서 여러 번 호출할 수 있다는 의미입니다. 특정 작업에 SQL을 여러 번 실행해야 하는 경우 저장 프로시저를 사용하는 것이 간단한 SQL 문을 실행하는 것보다 빠릅니다. 명령 개체를 사용하여 저장 프로시저를 호출할 수 있습니다.
지수의 역할은 무엇인가요? 그리고 장점과 단점은 무엇입니까?
인덱스는 데이터베이스 검색 엔진이 데이터 검색 속도를 높이기 위해 사용할 수 있는 특수 쿼리 테이블입니다. 실생활에서 책의 목차와 매우 유사합니다. 책 전체를 조회하지 않고도 원하는 데이터를 찾을 수 있습니다. 인덱스는 고유할 수 있으며 인덱스를 생성하면 단일 열 또는 여러 열을 지정할 수 있습니다.
단점은 데이터 입력 속도가 느려지고 데이터베이스 크기도 커진다는 것입니다.
세 가지 패러다임을 대중적인 방식으로 이해하는 방법은 무엇입니까?
첫 번째 정규형: 1NF는 속성에 대한 원자성 제약 조건으로, 속성은 원자성이고 분해될 수 없습니다.
두 번째 정규 형식: 2NF는 레코드에 대한 고유성 제약 조건으로, 레코드에 고유 식별자가 있어야 합니다. 고유 엔터티
세 번째 정규형: 3NF는 필드 중복성에 대한 제약 조건입니다. 즉, 어떤 필드도 다른 필드에서 파생될 수 없으며 필드가 중복되지 않아야 합니다. .
기본 테이블이란 무엇인가요? 뷰란 무엇입니까?
기본 테이블은 독립적으로 존재하는 테이블입니다. SQL에서는 관계가 테이블에 해당합니다.
뷰는 하나 이상의 기본 테이블에서 파생된 테이블입니다. 뷰 자체는 데이터베이스에 독립적으로 저장되지 않고 가상 테이블입니다
뷰의 장점을 어떻게 설명할까요?
(1) 뷰는 사용자 작업을 단순화할 수 있습니다.
(2) 뷰를 사용하면 사용자가 여러 각도에서 동일한 데이터를 볼 수 있습니다.
(3) 뷰는 데이터베이스에 대해 어느 정도 논리적 독립성을 제공합니다. 기밀 데이터에 대한 보안 보호를 제공합니다.
NULL은 무엇을 의미하나요?
NULL 값은 UNKNOWN(알 수 없음)을 나타내며 ""(빈 문자열)을 나타내지 않습니다.
NULL 값과 비교하면 NULL 값이 생성됩니다.
어떤 값도 NULL 값과 비교할 수 없으며 논리적으로 답변을 기대할 수 없습니다.
NULL 판단에는 IS NULL을 사용하세요
기본 키, 외래 키, 인덱스의 차이점은 무엇인가요?
기본 키, 외래 키 및 인덱스의 차이점
정의:
기본 키 – 레코드를 고유하게 식별하고, 중복될 수 없으며, 비워 둘 수 없습니다.
외래 키 – 테이블의 외래 키는 다른 테이블의 기본 키, 외래 키 중복 및 null 값이 있을 수 있음
Index - 이 필드에는 중복 값이 없지만 null 값을 가질 수 있음
기능:
기본 키 - 데이터 무결성을 보장하는 데 사용됨
외래 키 – 다른 테이블과 설정하는 데 사용됩니다. 연락처에 사용되는
인덱스는 쿼리 정렬 속도를 향상시키기 위한 것입니다.
번호:
기본 키 – 기본 키는 하나만 있을 수 있습니다.
외래 키 – 테이블은 여러 개의 외래 키를 가질 수 있습니다.
인덱스 – 테이블은 여러 개의 고유 인덱스를 가질 수 있습니다.
테이블의 필드가 특정 범위의 값만 허용하도록 하려면 무엇을 사용할 수 있습니까?
제한 사항을 확인하세요. , 이 열에 입력된 값을 제한하기 위해 데이터베이스 테이블에 정의됩니다.
SQL 문을 최적화하는 방법에는 어떤 것이 있나요? (몇개 선택)
(1) Where 절에서 : Where 테이블 간의 연결은 다른 Where 조건보다 먼저 작성해야 하며, 최대 레코드 수를 필터링할 수 있는 조건은 Where 절 끝에 작성해야 합니다. . HAVING이 마지막입니다.
(2) IN을 EXISTS로 바꾸고 NOT IN을 NOT EXISTS로 바꿉니다.
(3) 인덱스 열에 계산을 사용하지 마세요
(4) 인덱스 열에 IS NULL 및 IS NOT NULL을 사용하지 마세요
(5) 쿼리를 최적화하려면 전체 테이블 스캔을 최대한 피해야 합니다. 먼저 고려해야 할 사항은 다음과 같습니다. where 및 order by와 관련된 열에 대한 인덱스를 만듭니다.
(6) where 절의 필드에 대해 null 값 판단을 피하십시오. 그렇지 않으면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행합니다.
(7) where 절의 필드에 표현식을 작성하지 마십시오. 이렇게 하면 엔진이 인덱스 사용을 포기하고 전체 테이블 스캔을 수행하게 됩니다.
SQL 문에서 '상관 하위 쿼리'와 '비상관 하위 쿼리'의 차이점은 무엇인가요?
(1) 비상관 하위 쿼리는 외부 쿼리와 독립적인 하위 쿼리로, 하위 쿼리는 총 한 번 실행되며, 실행 후 해당 값이 외부 쿼리로 전달됩니다.
(2) 해당 하위 쿼리의 실행은 외부 쿼리의 데이터에 따라 달라집니다. 외부 쿼리가 한 행을 실행할 때 하위 쿼리는 한 번만 실행됩니다.
상관되지 않은 하위 쿼리가 상관된 하위 쿼리보다 더 효율적입니다.
char와 varchar의 차이점은 무엇인가요?
Char는 고정 길이 유형이고 varchar는 가변 길이 유형입니다.
차이점:
char(M) 유형의 데이터 열에서는 각 값이 M바이트를 차지합니다. 특정 길이가 M보다 작으면 MySQL은 공백 문자를 사용하여 오른쪽에 보충합니다. (채워진 공백 문자는 검색 작업 중에 제거됩니다.)
varchar(M) 유형 데이터 열에서 각 값은 해당 길이를 기록할 수 있는 만큼의 바이트와 1바이트만 차지합니다(즉, 전체 길이는 L+1바이트입니다).
Mysql 스토리지 엔진, myisam과 innodb의 차이점.
MyISAM은 테이블 잠금이 자주 발생하는 애플리케이션에 적합하며 교착 상태가 지원되지 않습니다. 작은 데이터 및 작은 동시성에 적합
innodb는 트랜잭션을 지원하는 스토리지 엔진입니다. 삽입 및 업데이트 작업이 많은 애플리케이션에 적합합니다. 디자인이 합리적이라면 행 잠금입니다. 잠금) 빅데이터 및 대규모 동시성에 적합합니다.
데이터 테이블 유형은 무엇입니까?
MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV 등
MyISAM: 성숙하고 안정적이며 관리하기 쉽고 읽기 빠릅니다. 일부 기능(트랜잭션 등)은 테이블 수준 잠금을 지원하지 않습니다.
InnoDB: 트랜잭션, 외래 키 및 기타 기능, 데이터 행 잠금을 지원합니다. 많은 공간을 차지하고 전체 텍스트 색인 생성 등을 지원하지 않습니다.
MySQL 데이터베이스는 퍼블리싱 시스템의 스토리지로 사용됩니다. 하루에 50,000개 이상의 항목이 증가하는데 3년의 운영 및 유지 관리가 필요할 것으로 예상됩니다.
(1) 데이터베이스 구조를 잘 설계하고, 부분적인 데이터 중복을 허용하고, 조인 쿼리를 피하여 효율성을 높이세요.
(2) 적절한 테이블 필드 데이터 유형과 스토리지 엔진을 선택하고 적절하게 인덱스를 추가합니다.
(3) mysql 마스터-슬레이브 복제 읽기-쓰기 분리를 수행합니다.
(4) 데이터 테이블을 테이블로 나누어 단일 테이블의 데이터 양을 줄이고 쿼리 속도를 향상시킵니다.
(5) redis, memcached 등과 같은 캐싱 메커니즘을 추가합니다.
(6) 자주 변경되지 않는 페이지에 대해 정적 페이지를 생성합니다(예: ob 캐싱).
(7) 효율적인 SQL을 작성합니다. 예를 들어 SELECT * FROM TABEL은 SELECT field_1, field_2, field_3 FROM TABLE로 변경됩니다.
트래픽이 많은 웹사이트의 경우, 페이지 방문 통계 문제를 해결하기 위해 어떤 방법을 사용하시나요?
(1) 서버가 현재 트래픽을 지원할 수 있는지 확인합니다.
(2) 데이터베이스 액세스를 최적화합니다.
(3) 사진의 핫링크 등 링크(핫링크)에 대한 외부 접근을 금지합니다.
(4) 제어 파일 다운로드.
(5) 로드 밸런싱을 수행하고 다른 호스트를 사용하여 오프로드합니다.
(6) 검색 통계 소프트웨어를 사용하여 방문 횟수를 파악하고 타겟 최적화를 수행합니다.
3. 객체지향 부분
1. 객체지향이란 무엇인가요?(이해하면서 대답하세요)
객체지향은 프로세스 지향, 즉 객체지향을 기반으로 하는 개념입니다. 객체를 통해 함수를 전달하는 것입니다. 이를 달성하려면 함수를 객체로 캡슐화하고 객체가 특정 세부 사항을 구현하도록 하세요.
객체 지향에는 캡슐화, 상속, 다형성이라는 세 가지 주요 특성이 있습니다.
현재 순수 OO 언어는 주로 Java와 C#입니다. PHP와 C++도 OO를 지원합니다.
2. 비공개, 보호 및 공개 수정자의 액세스 권한을 간략하게 설명합니다.
private: Private 멤버는 클래스 내부에서만 접근할 수 있습니다.
protected: 보호된 멤버이며 클래스 및 상속된 클래스 내에서 액세스할 수 있습니다.
public: 공개 회원, 완전 공개, 접근 제한 없음.
3. 힙과 스택의 차이점은 무엇인가요?
스택은 컴파일 중에 할당되는 메모리 공간이므로 코드에서 스택의 크기를 명확하게 정의해야 합니다.
힙은 프로그램 실행 중에 동적으로 할당되는 메모리 공간입니다. 프로그램의 실행 상태에 따른 스택 할당된 힙 메모리의 크기입니다.
4. XML과 HTML의 주요 차이점
다양한 문법 요구 사항:
(1) html에서는 대소문자를 구분하지 않고 xml에서는 엄격하게 구분합니다.
(2) HTML에서는 때로는 엄격하지 않은 경우 문맥에 단락이나 목록 키가 끝나는 위치가 명확하게 표시되면
또는 이와 유사한 종료 태그를 생략할 수 있습니다. . XML에서는 엄격한 트리 구조이므로 닫는 태그를 생략하면 안 됩니다.
(3) XML에서 일치하는 닫는 태그 없이 단일 태그가 있는 요소는 / 문자로 끝나야 합니다. 이렇게 하면 파서는 닫는 태그를 찾지 않는다는 것을 알게 됩니다.
(4) XML에서는 속성값을 따옴표로 묶어야 합니다. HTML에서 따옴표는 선택 사항입니다.
(5) HTML에서는 값 없이 속성 이름을 가질 수 있습니다. XML에서는 모든 속성에 해당 값이 있어야 합니다.
(6) XML 문서에서 빈 부분은 파서에 의해 자동으로 삭제되지 않지만 html은 빈 공간을 필터링합니다.
다양한 태그:
(1) html은 고유 태그를 사용하지만 xml에는 고유 태그가 없습니다.
(2) HTML 태그는 사전 정의되어 있으며 XML 태그는 무료이며 사용자 정의 및 확장이 가능합니다.
에는 다양한 기능이 있습니다.
(1) HTML은 데이터를 표시하는 데 사용되며 xml은 데이터를 설명하고 저장하는 데 사용되므로 지속성 매체로 사용할 수 있습니다! HTML은 데이터와 디스플레이를 결합하고 페이지에 데이터를 표시합니다. xml은 데이터와 디스플레이를 분리합니다. XML은 데이터의 내용에 중점을 두고 데이터를 설명하도록 설계되었습니다. HTML은 데이터의 모양에 중점을 두고 데이터를 표시하도록 설계되었습니다.
(2) XML은 HTML을 대체하지 않습니다. XML과 HTML은 용도가 다른 두 언어입니다. XML은 HTML을 대체하기 위한 것이 아닙니다. 실제로 XML은 HTML을 보완하는 것으로 볼 수 있습니다. XML과 HTML의 목표는 서로 다릅니다. HTML의 디자인 목표는 데이터를 표시하고 데이터의 모양에 중점을 두는 반면, XML의 디자인 목표는 데이터를 설명하고 데이터의 내용에 중점을 두는 것입니다.
(3) XML에 대한 가장 좋은 설명은 다음과 같습니다. XML은 정보를 처리하고 전송하기 위한 크로스 플랫폼, 소프트웨어 및 하드웨어 독립적인 도구입니다.
(4) XML은 미래에는 어디에나 존재하게 될 것입니다. XML은 데이터 처리 및 데이터 전송을 위한 가장 일반적인 도구가 될 것입니다.
5. 객체지향의 특징은 무엇인가요?
주로 캡슐화, 상속, 다형성이 있습니다. 4가지 측면인 경우 추상화를 추가합니다.
캡슐화:
캡슐화는 소프트웨어 구성 요소가 뛰어난 모듈성을 갖도록 보장하는 기반입니다. 패키징의 목표는 소프트웨어 구성 요소의 높은 응집력과 낮은 결합을 달성하고 프로그램이 종속성으로 인한 변경의 영향.
상속:
클래스를 정의하고 구현할 때 기존 클래스를 기반으로 할 수 있습니다. 이 기존 클래스에 의해 정의된 콘텐츠는 자체 콘텐츠로 간주되며 일부 새로운 콘텐츠가 추가되거나 원래 메서드를 수정하여 특별한 요구에 더 적합하게 만들 수 있습니다. 상속은 하위 클래스가 상위 클래스 데이터와 메서드를 자동으로 공유하는 메커니즘입니다. 이는 소프트웨어의 재사용성과 확장성을 향상시키는 클래스 간의 관계입니다.
다형성:
다형성은 프로그램에서 정의된 참조 변수가 가리키는 특정 유형과 참조 변수를 통해 발행된 메소드 호출이 프로그래밍 중에 결정되지 않음을 의미합니다. 즉, 참조 변수가 어떤 클래스 인스턴스 객체를 가리킬 것인지는 프로그램 실행 중에 결정되며, 참조 변수에 의해 실행되는 메서드 호출은 프로그램 실행 중에 결정되어야 하는 클래스가 어떤 클래스에 구현되어 있는지입니다. .
Abstract:
추상이란 어떤 것의 유사점과 공통점을 찾아 클래스로 분류하는 것입니다. 이 수업에서는 이들의 유사점과 공통점만 고려합니다. 현재 주제 및 목표와 관련 없는 측면을 무시하고 현재 목표와 관련된 측면에 중점을 둡니다. 예를 들어, 개미와 코끼리를 보고 그들이 얼마나 비슷한지 상상할 수 있다면 그것이 추상입니다.
6. 추상 클래스와 인터페이스의 개념과 차이점은 무엇인가요?
추상 클래스: 인스턴스화할 수 없고 다른 클래스의 상위 클래스로만 사용할 수 있는 특수 클래스입니다. abstract 키워드를 사용하여 선언했습니다.
Interface: 특수 추상 클래스이며 인터페이스를 사용하여 선언된 특수 클래스입니다.
Difference:
(1) 추상 클래스의 작업은 상속 키워드인 Extensions를 통해 구현되고, 인터페이스 사용은 Implements 키워드를 통해 구현됩니다.
(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()은 serialize를 사용하여 직렬화할 때 호출됩니다.
__wakeup()은 unserialize를 사용하여 deserialize할 때 호출됩니다.
__call()은 존재하지 않는 메서드를 호출할 때 호출됩니다.
__callStatic()이 존재하지 않는 정적 메서드를 호출합니다.
__toString()은 객체를 문자열로 변환할 때 호출됩니다. 에코와 같은.
__invoke() 객체를 메서드로 호출하려고 할 때 호출됩니다.
__set_state() var_export() 함수를 사용할 때 호출됩니다. 배열 매개변수를 허용합니다.
__clone()은 객체를 복사하기 위해 clone을 사용할 때 호출됩니다.
10. $this와 self, parent 세 개의 키워드는 각각 무엇을 의미하나요? 어떤 상황에서 사용되나요?
$현재 객체
자체 현재 클래스
현재 클래스의 상위 상위 클래스
$이것은 현재 클래스에서 사용됩니다. 속성과 메서드를 호출하려면 ->를 사용하세요.
self는 현재 클래스에서도 사용되는데 ::를 사용해 호출해야 합니다.
부모님은 수업에 사용됩니다.
11. 클래스에서 상수를 정의하는 방법, 클래스에서 상수를 호출하는 방법, 클래스 외부에서 상수를 호출하는 방법.
클래스에 포함된 상수도 멤버 상수입니다. 상수는 변하지 않는 수량이며 상수 값입니다.
const 키워드를 사용하여 상수를 정의하세요.
예: const PI = 3.1415326;
클래스 내부에 있든 클래스 외부에 있든 상수에 대한 액세스는 변수의 액세스와 다릅니다. ,
access 상수 형식은 클래스 이름에 호출할 범위 연산 기호(이중 콜론)를 더한 것입니다.
즉: 클래스 이름:: 클래스 상수 이름;
12. 범위 연산자::를 사용하는 방법은 무엇입니까? 어떤 상황에서 사용되나요?
(1) 클래스 상수 호출
(2) 정적 메서드 호출(정적으로 수정된 클래스 메서드)
13. __autoload() 메서드의 작동 원리는 무엇입니까?
이 마법 기능을 사용하기 위한 기본 조건은 클래스 파일의 파일 이름이 클래스 이름과 일치해야 한다는 것입니다.
특정 클래스를 인스턴스화하기 위해 프로그램을 실행할 때 인스턴스화 전에 클래스 파일이 도입되지 않으면 __autoload() 함수가 자동으로 실행됩니다.
이 함수는 인스턴스화된 클래스의 이름을 기반으로 클래스 파일의 경로를 검색합니다. 클래스 파일이 클래스 파일의 경로에 존재한다고 판단되면
는 클래스를 로드하기 위해 include 또는 require를 실행합니다. , 프로그램은 계속 실행됩니다. 이 경로에 파일이 없으면 오류 메시지가 표시됩니다.
자동 로딩 마법 기능을 사용하면 포함 또는 요구 기능을 많이 작성할 필요가 없습니다.
4. THINKPHP 부분1. 일반적인 PHP 프레임워크
답변: thinkPHP, laravel, yii, ci 등
2. TP의 단일 항목 파일을 이해하는 방법은 무엇입니까?
ThinkPHP는 프로젝트 배포 및 액세스를 위해 단일 입구 모드를 채택합니다. 어떤 기능이 완료되든 프로젝트에는 통일된(그러나 반드시 유일한 것은 아님) 입구가 있습니다. 모든 프로젝트는 엔트리 파일에서 시작되며, 모든 프로젝트의 엔트리 파일은 유사하다고 해야 할까요.
항목 파일에는 주로 다음이 포함됩니다.
(1) 프레임워크 경로, 프로젝트 경로 및 프로젝트 이름 정의(선택 사항)
(2) 디버깅 모드 및 실행 모드에 대한 관련 상수 정의(선택 사항)
(3) 로드 Enter 프레임워크 항목 파일(필수)
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은 많은 수의 쿼리가 필요한 일부 응용 프로그램에 적합하지만 그렇지 않습니다. 쓰기가 많은 것은 좋지 않습니다. 필드만 업데이트해도 테이블 전체가 잠기며 읽기 작업이 완료될 때까지 다른 프로세스, 심지어 읽기 프로세스도 작동할 수 없습니다. 또한 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 아키텍처(코어 + 동작 + 드라이버)의 동작을 어떻게 이해합니까?
(1) Core: 프레임워크의 핵심 코드이며, 없어서는 안되는 것입니다. TP 자체는 MVC 아이디어를 기반으로 개발된 프레임워크입니다.
(2) 동작: 동작은 ThinkPHP 새 버전의 아키텍처에서 결정적인 역할을 합니다. 시스템의 핵심에는 많은 태그 확장 비트가 설정되어 있으며 각 태그 위치는 차례로 자체 독립적인 동작을 실행할 수 있습니다. 이것이 행동 확장이 탄생한 방식이며, 많은 시스템 기능도 내장된 행동 확장을 통해 완성되며, 모든 행동 확장은 교체 가능하고 추가되어 기본 프레임워크 조립의 기반을 형성합니다.
(3) 드라이버: 데이터베이스 드라이버, 캐시 드라이버, 태그 라이브러리 드라이버, 템플릿 엔진 드라이버 및 외부 클래스 확장.
6. 기존 구성은 무엇인가요?
소위 기존 구성은 프레임워크와 함께 제공되는 구성 파일입니다. 이 파일은 핵심 프레임워크 디렉터리의 Convention.php에 있으며, 구성 내용은 다음과 같습니다. 이 파일은 프레임워크와 함께 제공되는 구성 파일이므로 실제 개발 프로세스에서 주로 참조 예제로 사용됩니다. 이 파일의 구성 내용을 거의 수정하지 않으며 필요에 따라 필드를 구성하는 경우가 더 많습니다. 규칙에 따라 모듈 또는 공통의 구성 내용을 사용자 정의하기 위한 정의 및 주석.
7. SQL 인젝션이란? (이해)
SQL 주입 공격은 해커가 데이터베이스를 공격하기 위해 사용하는 일반적인 수단 중 하나입니다.
일부 프로그래머는 코드를 작성할 때 사용자 입력 데이터의 적법성을 판단하지 않습니다. 인젝터는 양식에 데이터베이스 쿼리 코드를 입력하고 이를 제출할 수 있습니다. 프로그램은 제출된 정보를 종합하여 완전한 SQL 문을 생성하고 서버는 악의적인 SQL 명령을 실행하도록 속일 것입니다. 인젝터는 프로그램이 반환한 결과를 바탕으로 일부 민감한 데이터를 성공적으로 획득하고 심지어 전체 서버를 제어합니다. 이것이 바로 SQL 인젝션입니다.
8. ThinkPHP는 SQL 주입을 어떻게 방지하나요? (이해)
(1) 쿼리 조건에 배열을 사용하는 것이 더 안전한 방법입니다.
(2) 문자열 쿼리 조건을 최후의 수단으로 사용해야 하는 경우 전처리 메커니즘을 사용하세요.
(3) 바인딩을 사용하세요. 매개변수
(4) 숫자 데이터 유형을 강제로 변환할 수 있는 데이터 필드 유형 확인을 활성화합니다. (필드 유형 확인은 버전 3.1부터 필수입니다.)
(5) 자동 확인 및 자동 완성 메커니즘을 사용하여 애플리케이션에 대한 자동 확인을 수행합니다. 필터링 정의
(6) 필드 유형 확인, 자동 유효성 검사 및 자동 완성 메커니즘을 사용하여 악의적인 데이터 입력을 방지합니다.
9. 디버깅 모드를 활성화하는 방법은 무엇입니까? 디버그 모드의 이점은 무엇입니까?
디버깅 모드를 활성화하는 것은 매우 간단합니다. 항목 파일에 상수 정의 코드 한 줄만 추가하면 됩니다.
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define(‘APP_DEBUG’, true);
디버깅 모드의 장점은 다음과 같습니다. 로깅을 켜면 모든 오류 정보와 디버깅 정보가 자세히 기록됩니다. 간편한 디버깅을 위해 템플릿 수정 사항이 즉시 적용됩니다. SQL 로그를 기록하여 필드 캐싱을 끄고 파일 대소문자를 엄격하게 확인합니다(Windows 플랫폼에서도). Linux 배포 문제를 사전에 발견하는 데 도움이 됩니다. 개발, 테스트, 데모 및 기타 필요한 상황을 포함하여 개발 프로세스의 다양한 단계에서 다양한 애플리케이션 모드에 대해 독립적인 프로젝트 구성 파일을 구성할 수 있습니다.
10. TP에서는 어떤 구성 모드가 지원되나요? 우선 사항?
기존 구성->애플리케이션 구성->모드 구성->디버그 구성->상태 구성->모듈 구성->확장 구성->동적 구성
위는 구성 로딩 순서입니다. 후속 구성은 동일한 이름으로 이전 구성을 덮어쓰므로(효과적이지 않은 경우) 우선 순위는 오른쪽에서 왼쪽입니다.
11. TP의 URL 패턴은 무엇인가요? 기본값은 무엇입니까?
ThinkPHP는 일반 모드, PATHINFO, REWRITE 및 호환성 모드를 포함하여 URL_MODEL 매개변수를 설정하여 정의할 수 있는 네 가지 URL 모드를 지원합니다.
기본 모드는 PATHINFO 모드입니다. URL_MODEL을 1
12로 설정하세요. TP의 시스템 변수는 무엇인가요? 시스템 변수를 얻는 방법은 무엇입니까?
(1) 시스템 변수: SERVER, _SERVER, SERVER, _ENV, $_POST, $_GET, REQUEST, _REQUEST, REQUEST, _SESSION 및 $_COOKIE 변수
(2) 시스템 변수 가져오기:
{KaTeX parse error: Expected 'EOF', got '}' at position 25: …ver.script_name}̲ // 输出_SERVER[‘SCRIPT_NAME’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 22: …session.user_id}̲ // 输出_SESSION[‘user_id’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 21: ….get.pageNumber}̲ // 输出_GET[‘pageNumber’]变量 {KaTeX parse error: Expected 'EOF', got '}' at position 18: …ink.cookie.name}̲ // 输出_COOKIE[‘name’]变量
13. D 기능과 M 기능의 차이점은 무엇입니까?
M 메소드는 사용자가 각 데이터 테이블에 대한 모델 클래스를 정의하지 않고도 모델을 인스턴스화합니다. D 메소드는 사용자 정의 모델 클래스가 존재하는 경우 사용자 정의 모델 클래스를 인스턴스화합니다. , Model 기본 클래스를 인스턴스화하기 위해 M 메서드가 자동으로 호출됩니다. 동시에 인스턴스화된 모델은 반복적으로 인스턴스화되지 않습니다(단일 사례 모드).
5. 똑똑한 템플릿 엔진
1. 컴파일과 캐싱의 차이점은 무엇인가요?
Smarty의 컴파일 과정은 템플릿을 가져와 내부의 태그를 해당 PHP 코드로 바꾸는 것입니다. 실제로는 php와 html을 혼합하는 과정입니다. Smarty의 캐시는 컴파일된 파일이 실행된 후 동시에 정적 html 페이지가 생성되므로 다시 액세스하면 html 파일에 액세스하게 되므로 효율성이 더 높습니다.
2. Smarty란 무엇인가요?
Smarty는 PHP로 작성된 PHP 템플릿 엔진으로, 프로그래머가 PHP의 논리적인 내용을 변경하지 않도록 하는 것이 목적입니다. 프로그램 아티스트가 페이지를 다시 수정하는 경우 이는 프로그램의 프로그램 로직에 영향을 미치지 않습니다. 이는 다중 사용자 협력 프로젝트에서 특히 중요합니다. (멀티스타일 프로그램 개발도 쉽습니다.)
Smarty의 장점
(1) 빠르다: 다른 템플릿 엔진에 비해 빠릅니다.
(2) 컴파일 방식: smarty로 작성된 프로그램은 런타임 시 비템플릿 기술 PHP 파일로 컴파일해야 함
(3) 캐싱 기술: 사용자가 최종적으로 보는 HTML 파일을 정적 HTML 페이지로 캐시할 수 있음
(4) 플러그인 기술: smarty는 플러그인을 맞춤 설정할 수 있습니다.
smarty 사용에는 적합하지 않습니다
(1) 실시간 업데이트가 필요한 콘텐츠입니다. 예를 들어 주식 표시처럼 데이터를 자주 업데이트해야 합니다
(2)小项目。小项目因为项目简单而美工与程序员兼于一人的项目
3、在模板中使用{$smarty}保留变量
{KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.get.page}̲ //类似在php脚本中访问_GET[page] {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.cookies.}̲ {smarty.post.} {KaTeX parse error: Expected 'EOF', got '}' at position 16: smarty.session.}̲ {smarty.server.}
在模板中访问php中的变量
5、变量调解器
2018PHP经典面试题大全汇总(更新)-PHP面试题
6、php查询mysql数据库时,查询中文结果时出现的乱码。怎么解决?
(1)文件meta(设置浏览器解析的时候)
(2)连接数据库时编码设定
(3)PHP文件中使用header函数确定编码
7、缓存机制
如果开启了缓存,smarty同时生成一份静态的html页面,如果在设定的时间没有过期,再次访问的时候,你访问的就是是html文件了,减少了读取数据库,所以就效率来说,要高一些。
8、smarty的赋值和载入模板
$Smarty->assign(name,value) $Smarty->display(‘index.html’)
9、marty模板技术的用途是什么?
为了php与html分开,美工和程序员各司其职,互不干扰。
10、smarty配置主要有哪几项?
(1)引入smarty.class.php;
(2) 实例化smarty对象;
(3)重新修改默认的模板路径;
(4)重新修改默认的编译后文件的路径;
(5)重新修改默认的配置文件的路径;
(6)重新修改默认的cache的路径。
(7) 可以设置是否开启cache。
(8)可以设置左侧和右侧定界符。
11、smarty在使用过程中需要注意哪些细节?
Smarty是基于MVC概念的一种模板引擎,它将一个页面程序分成了两部分来实现:即视图层和控制层,
也就是说smarty技术将用户UI与php代码分离开。
这样程序员和美工各司其职,互不干扰。
12、smarty运用过程中要注意以下几个问题:
(1)正确配置smarty。主要要实例化smarty对象,配置smarty模板文件的路径;
(2)php页面中使用assign赋值 和display显示页面;
(3)smarty模板文件中不允许出现php代码段,所有的注释,变量,函数都要包含在定界符内。
六、二次开发系统(DEDE、ecshop)
1、对二次开发的理解
二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能,一般来说都不会改变原有系统的内核。
2、MVC
Model(模型)数据处理。
View(视图) 模板显示。
Controller(控制器) 控制流程。
MVC的概念是什么?各层主要做什么工作?
MVC(即模型-视图-控制器)是一种软件设计模式或者说编程思想。
M指Model模型层,V是View视图层(显示层或者用户界面),C是Controller控制器层。
使用mvc的目的是实现M和V分离,从而使得一个程序可以轻松使用不同的用户界面。
在网站开发中,
模型层一般负责对数据库表信息进行增删改查,
视图层负责显示页面内容,
控制器层在M和V之间起到调节作用,控制器层决定调用哪个model类的哪个方法,
执行完毕后由控制器层决定将结果assign到哪个view层。
3、二次开发程序安装后访问时候出现一些警告以及错误
根据错误,来修改服务器配置参数以及百度
4、功能,模板的更换,功能的添加修改
其实也就是面向对象的应用 用,以及模板的更换类似smarty的使用
5、用过哪些二次开发的东西?
Dedecms phpcms ecshop,基本这些的东西如果基础好了 学习起来都是没问题的。
6、像php做一次开发好,还是二次开发好?
一般中小企业都用cms系统二次开发,都是为了效率。当然如果想一次开发也行,会用框架而且时间充足的话就可以了,大企业都是团队来开发的,杜绝版权问题。
7、二次开发过程中很多类与类之间进行之间的方法访问,是通过什么方式传递的?
不是类继承而是对象组合,把实例化好的对象通过global传递进去
8、dedecms如果更换目录,后台某项就进不去了如何解决?
后台核心设置中修改成现在的 项目目录名称
9、dedecms中自定义模型的理解?
在织梦系统中有内容模型这个概念,不同内容模型可以用来构建不同内容形式的站点,在系统中自带了以下几种模型:普通文章、图集、软件、商品、分类信息、专题。通过系统自带的模型,我们可以用来构建不同类型的站点,例如:使用图集可以做一个图片站,用软件模型构建一个软件下载站点。
当然以上随系统附带的模型被称为系统模型,用户可以自己定义一些模型,比如图书、音乐专辑等,自定义了这些模型才可以构建更多内容形式的站点。
相当于我们自动添加了表结构,适应现在当前需求的变化
10、dede中概念,设计和使用模板,必须要理解下面几个概念
(1)板块(封面)模板:
指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。
(2)列表模板:
指网站某个栏目的所有文章列表的模板,一般用 “list_识别ID.htm” 命名。
(3) 档案模板:
表示文档查看页的模板,如文章模板,一般用 “article_识别ID.htm” 命名。
(4) 其它模板:
一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。
11、dede中几种标签的使用?
列表 内容 等标签 只能在其本范围内使用,列表标签只能在列表中使用,内容标签只能在内容标签中使用。
全局标签能在所有页面中使用
12、熟悉常用类库
(例如:dedesql.class.php);熟悉系统函数库(common.func.php);熟悉自定义函数库(extend.func.php);熟悉前台入口文件(common.inc.php)
七、微信公众平台开发
1、微信运行机制
公众号与php之间用什么语言通信:Xml
Weixin.php中是如何接收公众号数据的:
$postStr = $GLOBALS[“HTTP_RAW_POST_DATA”];//接收数据 XML数据
2、消息类型
微信目前提供了7种基本消息类型,分别为:
(1)文本消息(text);
(2)图片消息(image);
(3)语音(voice)
(4)视频(video)
(5)地理位置(location);
(6)链接消息(link);
(7)事件推送(event)
类型。掌握不同的消息类型发送时的数据传递格式
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( txt ="aaaaaaaaaa";fwrite(txt="aaaaaaaaaa";fwrite(myfile, txt);fclose( txt);fclose(txt);fclose(myfile);
7、自定义菜单的事件推送
单击
单击跳转链接
扫码推事件
扫码推且弹出
弹出系统拍照发图的事件
弹出微信相册发图器的事件
弹出地理位置选择器的事件
8、token的作用
安全机制验证,用于微信服务器与PHP服务器之间的安全验证
9、Appid与secrect的作用
请求api接口(例如菜单的操作)时需要传appid与secrect两个值,用来获取应用的授权码
laravle面试题
PHP7 和 PHP5 的区别,具体多了哪些新特性?
性能提升了两倍
结合比较运算符 (<=>)
标量类型声明
返回类型声明
try…catch 增加多条件判断,更多 Error 错误可以进行异常处理
匿名类,现在支持通过new class 来实例化一个匿名类,这可以用来替代一些“用后即焚”的完整类定义
…… 了解更多查看文章底部链接 PHP7 新特性
为什么 PHP7 比 PHP5 性能提升了?
变量存储字节减小,减少内存占用,提升变量操作速度
改善数组结构,数组元素和 hash 映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
laravel 模块
服务提供者是什么?
服务提供者是所有 Laravel 应用程序引导启动的中心, Laravel 的核心服务器、注册服务容器绑定、事件监听、中间件、路由注册以及我们的应用程序都是由服务提供者引导启动的。
IoC 容器是什么?
IoC(Inversion of Control)译为 「控制反转」,也被叫做「依赖注入」(DI)。什么是「控制反转」?对象 A 功能依赖于对象 B,但是控制权由对象 A 来控制,控制权被颠倒,所以叫做「控制反转」,而「依赖注入」是实现 IoC 的方法,就是由 IoC 容器在运行期间,动态地将某种依赖关系注入到对象之中。
간단히 말하면, 그 기능은 종속성 주입을 사용하여 복잡한 애플리케이션을 협력 개체로 분해함으로써 문제 해결의 복잡성을 줄이고 애플리케이션 코드의 낮은 결합도와 높은 확장성을 달성하는 것입니다.
Laravel의 서비스 컨테이너는 클래스 종속성을 관리하고 종속성 주입을 수행하는 데 사용되는 도구입니다.
파사드란 무엇인가요?
Facades(일반적으로 모양 모드로 번역되는 디자인 패턴)는 IoC 컨테이너에 등록된 클래스에 액세스하기 위한 "정적"(정적) 인터페이스를 제공합니다. 수동으로 삽입하거나 구성해야 하는 긴 클래스 이름을 기억할 필요 없이 간단하고 기억하기 쉬운 구문을 제공합니다. 또한, PHP의 동적 메소드를 독특하게 사용하므로 테스트가 매우 쉽습니다.
계약이란 무엇인가요?
Contract는 프레임워크에서 제공하는 핵심 서비스를 정의하기 위한 laravel의 인터페이스입니다. Contract와 Facade 사이에는 본질적인 차이가 없습니다. 그들의 기능은 인터페이스를 덜 결합되고 단순하게 만드는 것입니다.
의존성 주입의 원리?
이것은 IoC 컨테이너를 이해하기 위한 전제 조건입니다.
Composer란 무엇이며 어떻게 작동하나요?
Composer는 PHP용 종속성 관리 도구입니다. 작동 원리는 packagist.org 작곡가 저장소에서 개발된 확장 패키지를 애플리케이션에 다운로드하고 종속성과 버전 제어를 선언하는 것입니다.
Caching
Redis와 Memecached 둘의 차이점은 무엇인가요?
Redis는 문자열, 해시, 목록, 집합 및 정렬 집합 등 더욱 풍부한 데이터 저장 유형을 지원합니다. Memcached는 단순한 키-값 구조만 지원합니다.
Memcached 키-값 저장소는 키-값 저장소에 해시 구조를 사용하는 Redis보다 메모리 활용도가 더 높습니다.
Redis는 일련의 명령의 원자성을 보장하기 위해 트랜잭션 기능을 제공합니다.
Redis는 데이터 지속성을 지원하고 디스크의 메모리에 데이터를 보관할 수 있습니다.
Redis는 단일 코어만 사용하는 반면 Memcached는 여러 코어를 사용할 수 있습니다. Redis는 각 코어에 작은 데이터를 저장할 때 Memcached보다 성능이 더 높습니다.
Redis는 어떻게 지속성을 달성하나요?
RDB 지속성은 메모리의 Redis 상태를 하드 디스크에 저장합니다. 이는 데이터베이스 상태를 백업하는 것과 같습니다.
AOF 지속성(Append-Only-File), AOF 지속성은 Redis 서버 잠금 실행의 쓰기 상태를 저장하여 데이터베이스를 기록합니다. 백업 데이터베이스에서 수신한 명령과 동일하게 AOF에 작성된 모든 명령은 redis 프로토콜 형식으로 저장됩니다.
Database
인덱스란 무엇이며 그 역할은 무엇인가요? 일반적인 인덱스 유형은 무엇입니까? MySQL 인덱싱 원칙?
색인은 책의 목차와 동일한 데이터 테이블의 모든 레코드에 대한 참조 포인터를 포함하는 특별한 종류의 파일입니다. 그 기능은 데이터 검색 효율성을 높이는 것입니다. 일반적인 인덱스 유형에는 기본 키, 고유 인덱스, 복합 인덱스 및 전체 텍스트 인덱스가 포함됩니다.
인덱스 생성 원칙
가장 왼쪽 접두사의 원칙
차별성이 높은 열을 인덱스로 선택
인덱스를 최대한 확장하고, 새 인덱스를 만들지 마세요
높은 동시성을 어떻게 처리하나요?
캐싱 사용
데이터베이스 최적화 및 데이터베이스 사용 효율성 향상
로드 밸런싱
PHP 디자인 패턴에 대해 많이 이야기하지는 않겠지만 SOLID 디자인 원칙은 모든 PHPer가 반드시 숙달해야 하는 것입니다.
위 내용은 PHP 인터뷰 질문 전체 모음(수집할 가치가 있음)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!