>  기사  >  백엔드 개발  >  주요 PHP 면접 질문 요약 공유 (2)

주요 PHP 면접 질문 요약 공유 (2)

小云云
小云云원래의
2018-03-22 13:41:293802검색

앞서 주요 PHP 인터뷰 질문(1)을 공유했습니다. 이 기사에서는 주로 주요 PHP 인터뷰 질문(2)을 요약하여 공유했습니다.

1. 이론 지식

1.1 PHP는 대소문자를 구분하나요?

PHP는 시스템 함수, 사용자 정의 함수, 클래스 이름 등에 대해 대소문자를 구분하지 않습니다.

PHP의 변수와 상수는 대소문자를 구분합니다.

파일 이름의 경우 서버 운영 체제는 Linux에서는 구별하지만 Win에서는

1.2, $_POST, $HTTP_RAW_POST_DATA 및 php://input의 차이를 구별하지 않습니까?

$_POST:

은 POST 데이터 형식을 가져오는 것이며 미디어 유형은 "application/x-www-form-urlencoded"입니다.

필드 이름과 값이 인코딩된다는 의미입니다. 각 키-값 쌍은 '&' 문자로 구분되고, 키와 값은 '='로 구분되며, 기타 특수 문자는 urlencode 방식을 사용하여 인코딩됩니다.

$HTTP_RAW_POST_DATA:

원본 POST 데이터를 얻을 수 있지만 php.ini에서 활성화해야 하며 enctype="multipart/form-data"

php에 의해 전달된 데이터를 지원하지 않습니다. : //입력:

은 원본 POST 데이터를 가져올 수 있고 $HTTP_RAW_POST_DATA보다 적은 메모리를 소비하며 "multipart/form-data"를 지원하지 않습니다.

는 file_get_contents() 함수를 사용하여 가져올 수 있습니다. content

1.3. 정적으로 정의되지 않은 메소드를 "객체 이름::메서드 이름" 형식으로 호출할 수 있나요?

에서는 엄격한 오류가 발생하지만 코드 실행은 계속됩니다. "정적으로 비정적 메서드를 호출하는 PHP"를 참조하세요. 이 문서에서는 "호출 범위" 개념에 대해서도 설명합니다.
정적 호출은 다음이 있다는 의미가 아닙니다. 정적 호출을 의미하지만 호출 범위에 따라 다릅니다. $this 포인터가 가리키는 개체는 이 메서드가 호출될 때 호출 범위입니다.

자세한 내용은 http://www.cnblogs.com/whoamme/p/3728052.html

1.4에서 가장 자랑스러운 개발 작업을 간략하게 설명해주세요

1.5. 트래픽이 많은 웹사이트, 페이지 방문 통계 문제를 해결하기 위해 어떤 방법을 사용하시나요?

a. 서버가 현재 방문 수를 지원할 수 있는지 확인하세요.

b. 데이터베이스 액세스를 최적화합니다. (참고 3.5)

c. 사진의 핫링크 등 링크(핫링크)에 대한 외부 접근을 금지합니다.

d. 파일 다운로드를 제어합니다.

e. 다른 호스트를 사용하여 트래픽을 분산하세요.

f. 검색 통계 소프트웨어를 사용하여 방문 횟수를 파악하고 타겟 최적화를 수행합니다.

1.6. 세션의 원리를 소개해주세요

HTTP는 Stateless이기 때문에 요청이 완료된 후에는 클라이언트와 서버가 더 이상 관계가 없으며, 누구도 서로 알지 못합니다.

그러나 몇 가지 요구 사항(예: 로그인 상태 유지 등)으로 인해 서버와 클라이언트는 계속 연락을 유지해야 하며 세션 ID가 이 연락의 매개체가 됩니다.

사용자가 처음으로 사이트를 방문하면 PHP는 session_start() 함수를 사용하여 사용자의 세션 ID를 생성합니다. 이는 해당 사용자의 고유 ID입니다. 사용자의 고유 ID. 일부 세션 ID는 응답 헤더의 쿠키에 저장된 다음 클라이언트로 전송됩니다.

이 방법으로 클라이언트는 사이트에서 제공한 세션 ID를 갖게 됩니다.

사용자가 사이트를 두 번째 방문하면 브라우저는 로컬에 저장된 쿠키(지난번에 얻은 세션 ID 포함)를 가져와 요청과 함께 서버로 보냅니다. 요청을 받은 후 세션 ID가 있는지 확인하고, 있으면 응답 세션 파일을 찾고, 없으면 처음과 마찬가지로 새 세션 파일을 생성합니다. .

1.7, 세션 공유 문제 해결

a. 클라이언트 쿠키는 클라이언트에 세션 정보가 기록될 때마다 클라이언트에 저장되고 서버에 제출됩니다. 다시 브라우저를 통해.

b. 서버 간 세션 동기화는 마스터-슬레이브 서버 아키텍처를 사용합니다. 사용자가 마스터 서버에 로그인하면 세션 정보가 스크립트 또는 데몬 프로세스를 통해 각 슬레이브 서버로 전송됩니다. 애플리케이션 시스템이 세션 정보를 필요로 할 때 세션 클러스터 서버에서 직접 읽어와 세션을 저장하는 경우가 대부분이다.

d. 이 솔루션을 사용할 때 현재 사용되는 데이터베이스는 일반적으로 mysql입니다.

"세션 공유 구현 솔루션 설문 조사"

1.8, PHP 성능 테스트 도구 및 병목 현상을 찾는 방법을 참조하세요.

XHProf(Windows 설치 방법은 여기 참조)는 계층형 PHP 성능 분석 도구입니다. 차단 시간, CPU 시간, 메모리 사용량을 포함하여 기능 수준에서 요청 수와 다양한 측정항목을 보고합니다.

간단한 HTML 사용자 인터페이스를 갖추고 있어 브라우저 기반 성능 분석 사용자 인터페이스를 통해 보기가 더 쉽고 호출 다이어그램도 그릴 수 있습니다. 매개변수 값을 봅니다.

1.9 SSO(Single Sign-On)의 공통 원칙을 소개합니다.

SSO는 하나의 애플리케이션에서 보안 확인을 통과한 후 다른 애플리케이션에서 보호된 리소스에 액세스할 때 더 이상 확인을 위해 다시 로그인할 필요가 없는 통합 인증 및 권한 부여 메커니즘입니다.

는 사용자가 반복적으로 로그인할 필요 없이 한 번만 로그인하면 상호 신뢰할 수 있는 모든 응용 프로그램 시스템에 액세스할 수 있는 문제를 해결합니다.

통합 인증 시스템은 SSO의 전제 조건 중 하나입니다. 인증 시스템의 주요 기능은 사용자의 로그인 정보를 사용자 정보 데이터베이스와 비교하여 사용자의 로그인을 인증하는 것입니다. 사용자. 또한 인증 시스템은 티켓의 유효성을 확인하기 위해 티켓도 확인해야 합니다.

"Single Sign-On SSO"를 참조하세요.

1.10. 지금까지 연구한 PHP 프레임워크의 특징, 주로 해결하는 문제, 다른 프레임워크와의 차이점.

1.11 쿠키를 비활성화하는 세션 사용 계획

a. URL을 통해 값을 전달하고 URL에 세션 ID를 추가합니다. (단점: 순전히 정적이기 때문에 전체 사이트에 순전히 정적 페이지가 있을 수 없습니다. 페이지 세션 ID는 다음 페이지로 계속 진행할 수 없습니다)

b. 양식을 숨긴 후 양식의 숨겨진 텍스트 상자에 세션 ID를 입력하고 양식과 함께 제출합니다. (단점: <와 같은 직접 점프) ;a> 태그 적용 불가 비형식 상황)

c. php.ini 파일을 직접 구성하고 php.ini 파일에서 session.use_trans_sid= 0을 1로 설정하세요(Win에서는 지원되지 않는 것 같습니다)

d. 파일을 사용하고 세션 ID를 데이터베이스 또는 다른 형식으로 저장하고 페이지 간 프로세스 중에 수동으로 호출하세요

1.12 PHP 캐싱 기술이란 무엇입니까?

1. 전체 페이지 정적 캐싱, 즉 모든 페이지는 PHP 서버 구문 분석 과정을 거치지 않고 사용자가 방문할 때 직접 액세스됩니다.

2. 페이지에서 자주 변경되지 않는 부분은 정적으로 캐시되고, 자주 변경되는 블록은 캐시되지 않고 최종적으로 모아서 표시됩니다.

3. 데이터 캐싱, ID를 통해 요청한 데이터는 php 파일에 캐시됩니다. id와 파일이 일치하므로 다음에 이 id를 통해 요청할 때 php 파일을 직접 읽어보세요

4. 데이터 캐싱과 유사한 쿼리 캐싱, 쿼리문에 따라 캐싱;

5. 메모리 캐싱, redis 및 memcache

"PHP의 9가지 주요 캐싱 기술 요약"

1.13을 참조하세요. JSON 형식 데이터의 특징은 무엇인가요

a. 체재. ECMAScript의 하위 집합을 기반으로 합니다.

b. JSON은 완전히 언어 독립적인 텍스트 형식을 채택하지만 C 언어 계열(C, C++, C#, Java, JavaScript, Perl, Python 등 포함)과 유사한 규칙도 사용합니다.

c 이러한 속성은 JSON을 이상적인 데이터 교환 언어로 만듭니다. 사람이 읽고 쓰기 쉽고, 기계가 구문 분석하고 생성하기 쉽습니다(네트워크 전송 속도).

d. "이름/값" 쌍의 모음입니다. 다른 언어에서는 객체, 레코드, 구조, 해시 테이블, 키 목록 등으로 이해됩니다.

e. 대부분의 언어에서 배열로 이해되는 값 ​​​​

"JSON 소개"를 참조하세요

1.14, isset(),empty ()와 is_null

isset( ): null 및 정의되지 않은 경우에만 false를 반환합니다

empty(): "", 0, "0", NULL, FALSE, array(), undefine, 모두 true를 반환

is_null(): 결정만 null 여부, 정의되지 않은 경고

1.15, MVC

장점:

주의 분산, 느슨한 결합, 논리적 복잡성 사용, 표준 정의

a. 전체 구조의 한 레이어에 배치하여 여러 개발자의 작업 분담을 용이하게 합니다

b. 원래 레이어를 새로운 구현으로 쉽게 대체할 수 있습니다. 구현

c. 레이어 간 종속성을 줄입니다. d. 각 계층에서 로직을 재사용하는 데 도움이 되며 표준화에 도움이 됩니다

e. 단위 테스트에 대한 지원이 더욱 좋습니다

단점:

a.

b. 예를 들어, 데이터베이스에 대한 비즈니스 액세스는 이제 중간 계층을 거쳐야 합니다. c. 때로는 컨트롤 레이어와 프리젠테이션 레이어가 너무 가까워서 실제 분리 및 재사용이 불가능합니다.

d. 때로는 준수를 보장하기 위해 프리젠테이션 레이어에 기능이 추가되는 경우도 있습니다. 계층화된 구조로 분류되므로 해당 제어 계층과 모델 계층에 해당 코드를 추가해야 할 수도 있습니다.

MVC에 대한 이해:

MVC는 개발 프로젝트의 아이디어입니다. 데이터 부분(모델 모델), 비즈니스 로직 부분(컨트롤러 컨트롤러), 데이터의 외부 표현(뷰 보기),

의 세 부분으로 나뉩니다.

클라이언트가 프로젝트의 컨트롤러에 요청합니다. 실행 중에 데이터가 필요한 경우 컨트롤러는 모델에서 데이터를 얻은 후 뷰를 통해 얻은 데이터를 표시합니다.

1.16. PHP에서 작은따옴표와 큰따옴표의 차이점은 무엇인가요? 어느 것이 더 빠르나요?

작은따옴표가 더 빠릅니다

작은따옴표 안의 데이터는 구문 분석되지 않으므로(모든 변수 및 특수 이스케이프 문자) 더 빠릅니다.

큰따옴표는 먼저 명령문에 변수가 있는지 확인해야 합니다. , 큰따옴표 안의 데이터가 구문 분석됩니다. 예를 들어 변수($var) 값은 문자열로 대체되고 특수 이스케이프 문자도 특정 단일 단어로 구문 분석됩니다. "<<<",

의 기능은 개행 형식 등을 포함하여 내부 내용을 그대로 출력하는 것입니다. 대체

1.17, GBK에 대한 간략한 설명, GBK2312, BIG5, GB18030

GB2312는 더 적은 수의 한자를 지원하며 GBK는 모든 중국어, 일본어 및 한국어 중국어를 포함하여 GB2312 한자보다 풍부합니다. 문자

GB18030 단계 GBK에 비해 일부 소수민족 한자가 추가되어 일반 사람들이 거의 사용하지 않는 한자 라이브러리가 일반적으로 GBK를 사용하고 중국어 번체는 BIG5를 사용합니다. 인터페이스와 추상 클래스의 차이점은 무엇입니까?

추상 클래스:

추상 클래스는 인스턴스화할 수 없고 다른 클래스의 상위 클래스로만 사용할 수 있는 클래스입니다. 추상 클래스는 abstract

추상 클래스와 일반 클래스를 통해 선언됩니다. 둘 다 멤버 변수와 멤버 메서드를 포함합니다. 둘 사이의 차이점은 추상 클래스에 하나 이상의 추상 메서드가 포함되어 있다는 것입니다.

추상 메서드에는 메서드 본문이 없습니다. 이 메서드는 본질적으로 하위 클래스에 의해 재정의됩니다. 형식은 다음과 같습니다. 추상 함수 abstractMethod()

하위 클래스는 추상 클래스를 상속하고 확장을 사용합니다

인터페이스:

인터페이스는 인터페이스 키워드를 통해 선언되며 인터페이스의 멤버 상수 및 메서드 모두 public이므로 메서드에 public이라는 키워드를 쓸 필요가 없습니다

인터페이스의 메서드에도 메서드 본문이 없습니다. 인터페이스의 메서드도 하위 클래스에 의해 구현되도록 탄생했습니다

인터페이스는 여러 개를 구현할 수 있습니다. 상속

하위 클래스는 인터페이스를 구현합니다. 구현

1.20을 사용하면 PHP에서 값으로 전달과 참조로 전달의 차이

값으로 전달: 함수 범위 내의 값에 대한 모든 변경 사항은 외부에서 무시됩니다. 함수

참조로 전달: 함수 범위 내에서 값을 변경하면 함수

1.21, php5 생성자 및 소멸자

__construct 외부의 수정 사항도 반영됩니다. 이 함수는 다음과 같이 처리됩니다.

__destruct 실행: PHP는 객체가 소멸되기 전에 이 함수를 호출합니다.

1.22 PHP의 가비지 수집 메커니즘은 무엇입니까?

PHP는 관리되는 언어입니다. PHP 프로그래밍에서 프로그래머는 메모리 리소스 할당 및 해제를 수동으로 처리할 필요가 없습니다. 즉, PHP 자체가 가비지 수집 메커니즘(가비지 수집)을 구현합니다.

PHP 사용법 재활용 알고리즘은 참조 계산 방법이며 각 PHP 변수는 "zval"이라는 변수 컨테이너에 저장됩니다.

zval 변수 컨테이너에는 변수의 유형과 값을 포함하는 것 외에도 2바이트의 추가 정보도 포함됩니다. 첫 번째는 "is_ref"로, 이 변수가 참조 세트에 속하는지 여부를 식별하는 데 사용되는 부울 값입니다.

두 번째 추가 바이트는 "refcount"로, 이 zval 변수 컨테이너를 가리키는 변수(기호라고도 함)의 수를 나타내는 데 사용됩니다.

한 변수를 다른 변수에 할당하면 참조 횟수(refcount)가 늘어납니다.

변수 컨테이너와 연결된 변수가 해당 범위를 벗어나거나(예: 함수 실행 종료) 변수 unset() 함수가 호출되면 "refcount"는 1

"refcount"가 0

1.23이 되면 변수 컨테이너가 소멸됩니다.

싱글톤 패턴: 클래스에 하나의 인스턴스만 있는지 확인하고 프레임워크의 데이터베이스 연결과 같은 인스턴스에 액세스할 수 있는 전역 액세스 지점을 제공합니다.

간단한 팩토리 패턴: 다음과 같은 개체를 생성할 수 있는 특정 메서드가 있습니다. 팩토리 클래스는 new를 직접 사용하지 않고 객체를 생성합니다. 예를 들어 MySQL, MSSQL

과 같은 데이터베이스를 초기화할 때 사용됩니다. 전략 모드: 일련의 알고리즘의 경우 각 알고리즘은 공통 인터페이스를 사용하여 독립적인 클래스로 캡슐화됩니다. 예를 들어 개인 홈페이지에 들어갈 때입니다. , 브라우저의 차이에 따라 다른 표시 및 작업 제공

등록 모드: ZF 프레임워크의 Zend_Registry::set과 같은 프로그램의 전역 개체(개체) 집합에 대한 질서 있는 저장 및 관리를 제공합니다

어댑터 모드: mysql, mysqli, pdo 등과 같은 데이터 작업과 같은 다양한 인터페이스를 통합 API 인터페이스에 적용합니다. 어댑터 모드를 사용하여 인터페이스를 통합할 수 있습니다.

관찰자 모드: 객체가 스스로를 관찰 가능하게 만듭니다. 메소드를 추가하여 관찰 가능한 객체가 변경되면 등록된 관찰자에게 메시지를 보냅니다. 예를 들어 push

Decorator 모드를 구현하려면 원래 클래스 코드와 상속을 수정하지 않고 클래스의 기능을 동적으로 확장합니다. 예를 들어 프레임워크의 각 컨트롤러 파일은 전후 메서드

Iterator를 제공합니다. 모드: 집계 개체의 각 요소에 순차적으로 액세스하는 방법을 제공합니다. PHP에서는 Iterator 클래스가 상속됩니다.

프로토타입 패턴: 현재 개체의 복제본을 만드는 데 사용되는 프로토타입 인터페이스를 구현합니다. 이 모드는 객체를 직접 생성하는 비용이 상대적으로 높을 때 사용됩니다. 예를 들어, 비용이 많이 드는 데이터베이스 작업 후에 개체를 생성해야 합니다.

2. PHP 코딩

2.1. mysqli_real_connect()와 mysqli_connect()의 차이점은 무엇인가요? ㅋㅋㅋ 플래그 매개변수가 있습니다

2.2 디렉터리 및 하위 디렉터리의 파일을 탐색합니다

여기서는 scandir() 또는 glob() 함수를 사용할 수 있습니다. 여기에서는 온라인 코드인 "4가지 방법"을 소개하는 기사가 있습니다. 안에 .

2.3. URL이 주어지면 URL에 포함된 확장자를 추출합니다. 예를 들어, "http://www.pwstrick.com/test.php?somevar"는 pathinfo(),Explode(), basename(), strpos() 및 The 5가지 메소드를 사용하여 .php 또는 php

을 반환합니다. substr(),

의 조합은 정규식(이전 기사 "JavaScript 및 PHP의 정규식" 참조)과parse_url()을 사용합니다. 온라인으로 코드를 확인해 보세요.

2.4. PHP에서 SQL 주입을 방지하는 방법은 무엇입니까?

준비된 문과 매개변수화된 쿼리를 사용하세요. 준비된 구문과 매개변수는 각각 데이터베이스 서버로 전송되어 구문 분석되며, 매개변수는 일반 문자로 처리됩니다.

이 방법을 사용하면 공격자가 악성 SQL을 주입하는 것이 불가능해집니다. 이 방법을 구현하는 데는 PDO와 MySQLI의 두 가지 옵션이 있습니다. 온라인에서 코드를 참조하세요. "PHP에서 SQL 주입을 방지하는 방법"

2.5을 참조하세요. include, require, include_once 및 require_once

a의 차이점은 둘 다 지정된 파일을 도입하는 것입니다. _once는 한 번만 소개된다는 의미입니다. 즉, 이전에 소개된 내용은 다시 소개되지 않습니다.

b. 로드 실패는 다르게 처리됩니다.

include는 존재하지 않는 파일을 도입할 때 경고를 생성하며 스크립트는 계속 실행되어 포함됩니다. 간단히 말하면, 그녀를 데리고 가세요!

require는 이 파일에 따라 치명적인 오류를 일으키고 스크립트 실행이 중지됩니다. 간단히 말해서: 나는 그녀를 원해요!

c.include는 조건부 포함 기능이고, require는 무조건 포함 기능입니다.

d.include()를 실행할 때 참조해야 하는 파일은 매번 읽어서 평가해야 하며, require()를 실행할 때 참조해야 하는 파일은 한 번만 처리됩니다(실제로는 실행 중에 참조해야 하는 파일은 require() 문을 대체합니다)

e.include에는 반환 값이 있지만 require에는 없습니다. "PHP에서 include require include_once require_once의 차이점"

2.6을 참조하세요. PHP 매직 메소드 작성

PHP는 __(밑줄 2개)로 시작하는 모든 클래스 메소드를 매직 메소드로 유지합니다. 따라서 클래스 메소드를 정의할 때 접두사로 __을 사용하지 않는 것이 좋습니다. PHP 매뉴얼을 확인하세요.

2.7. 쉘 명령을 사용하여 PHP에 매개변수를 전달하는 세 가지 방법

$argc 사용 $argv; 사용자에게 입력 메시지를 표시한 다음 입력 매개변수를 가져옵니다. "PHP 수신 매개변수"

2.8을 참조하세요. $a = "/a/b/c/d/e.php"; $b = "/와 같이 두 파일의 상대 경로를 계산하는 함수를 작성하세요. a /b/12/34/c.php";

$b에 대해 계산된 $a의 상대 경로는 "../../12/34/c.php"

첫번째 두 문자열을 "/"를 사용하여 배열로 분할한 다음 array_diff_assoc을 사용하여 먼저 $a 배열과 $b 배열의 차이를 확인합니다. 그런 다음 $b와 $a 사이의 차이 세트를 수행합니다. 온라인으로 코드를 확인하세요.

2.9 php를 사용하여 클라이언트 IP와 서버 IP를 표시하는 코드와 웹페이지 주소를 작성하세요.

클라이언트 IP: $_SERVER["REMOTE_ADDR"]

서버 IP: $_SERVER[" SERVER_ADDR "]

웹페이지 주소: $_SERVER["REQUEST_URI"]

현재 스크립트의 실행 경로: $_SERVER["SCRIPT_FILENAME"] 또는 __FILE__

현재 스크립트 이름: $ _SERVER[" PHP_SELF"] 또는 $_SERVER["SERIPT_NAME"]

이전 페이지에 대한 URL 링크: $_SERVER["HTTP_REFERER"]

2.10, error_reporting(2047)의 기능

error_reporting, settings 어떤 종류의 PHP 오류가 보고되어야 하는지, 여기서는 모든 오류를 표시하는 것을 의미합니다. E_ALL

2.11, echo, print(), print_r(), printf(), sprintf(), var_dump() 차이점은 무엇입니까

echo : 함수가 아닌 문장이고, 반환 값이 없으며, 여러 변수 값을 출력할 수 있고, 괄호가 필요하지 않습니다. 배열과 객체는 출력할 수 없으며 단순 유형(예: int, string)만 인쇄할 수 있습니다

print: 함수가 아닌 명령문입니다. 반환 값은 1이며 하나의 변수만 출력할 수 있습니다. 배열과 객체는 출력할 수 없으며 단순 유형(예: int, string)만 인쇄할 수 있습니다.

print_r: string, int, float, array, object 등의 복합형을 출력할 수 있는 함수입니다. 배열을 출력할 때

구조체로 표현되며 이를 출력할 수 있습니다. print_r($str,true)를 통해 인쇄합니다. print_r을 출력하지 않도록 하고 print_r 처리 후 값을 반환합니다

printf: 함수이며, 텍스트 형식을 지정하고 출력합니다(C 언어 참조)

sprintf: printf와 유사한 함수이지만 인쇄하지는 않지만 서식이 지정된 텍스트를 반환하고 그렇지 않으면 printf와 동일합니다.

var_dump: 함수, 변수의 내용, 유형 또는 문자열의 내용, 유형 및 길이를 출력합니다. 디버깅에 자주 사용됩니다.

2.12, $a =&$a; $b=$a++; $b 및 $x

$b=1, $x=2

2.13 , PHP에서 배열을 직렬화 및 역직렬화하는 함수, utf-8을 gbk

serialize, unserialize, iconv("utf-8","gbk",$strs)

로 변환하는 함수 2.14. strlen()과 mb_strlen의 기능은 무엇입니까?

strlen()은 중국어 문자열의 자리 표시자를 올바르게 처리할 수 없습니다. gb2312의 경우 결과는 중국어 문자 수의 2배이고, utf8의 경우 결과는 중국어 문자 수의 3배입니다. ()는 매우 좋습니다. 이 문제를 해결하기 위해 두 번째 매개변수는 문자 인코딩을

2.15로 설정하는 것입니다. PHP를 사용하여 다중 레벨 디렉토리를 생성하세요

mkdir($path, 0777, true);

2.16, mysql_num_rows ()와 mysql_affected_rows()

둘 다 결과 집합의 행 수를 반환하는 함수와 차이점은 전자는 선택 작업에만 유효하고 후자는 선택 작업에만 유효하다는 것입니다. 업데이트, 삽입, 삭제의 영향을 받는 행 수

2.17. 생각나는 문자열 검색 알고리즘을 모두 나열하고 댓글로 간략하게 설명해주세요

순차 검색, 이진 검색, 블록 검색, 해시 테이블 search

2.18에 따르면 코드는 결과를 작성합니다

$a = 2;$b = &$a;unset($a);echo$b;


주어진 변수를 해제하는 데 사용된 것은 단지 중단일 뿐입니다. 변수 이름과 변수 내용 사이의 바인딩을 열었다고 해서 변수 내용이 파기된다는 의미는 아닙니다. 따라서 출력 결과는 "2"입니다.

$a = 2;$b = 3;$c = &$a;$c = 2;if(($a=5)>0 || ($b=$a)>0 ) {

$a++;$b++;



}
echo$a.'-'.$b.'-'.$c;


여기서 "||" 기호에 주의하세요. =5 여기서 조건이 충족되었으므로 $b=$a를 실행할 필요가 없으며 $b는 여전히 3입니다.

$a++ 및 $b++ 이후에는 두 변수 모두 1씩 증가하여 6과 4가 됩니다. 그리고 $c는 이미 $a를 참조하므로 값도 6이 됩니다. 최종 출력 결과는 "6-4-6"입니다. "PHP 사용에 대한 자세한 설명(&)"

2.19을 참조하세요. 멀티 스레드가 동시에 파일을 읽고 쓰는 문제를 해결하는 함수를 작성하세요

먼저 fopen을 사용하여 파일을 엽니다. , Flock을 사용하여 잠근 다음 fwrite를 사용하여 내용을 작성한 다음 Flock이 잠금을 해제하고 마지막으로 fclose가 문서를 닫습니다. 온라인으로 코드를 확인하세요.

2.20. 세션 만료 설정 방법, 해당 기능

a.setcookie()는 session_id의 수명주기를 직접 설정합니다.

b. session_set_cookie_params() 및 session_regenerate_id(true)를 사용합니다. true인 경우 session_id 값을 변경하고 현재 세션 배열을 지웁니다.

온라인에서 코드를 확인하세요.

2.21, 파일 내용을 가져오는 PHP 방법, 해당 함수

a. file_get_contents는 파일의 내용을 가져오고(get 및 post를 통해 얻을 수 있음) 전체 파일을 문자열

으로 읽어옵니다. b. fopen을 사용하여 URL을 열고 get 메서드에서 콘텐츠를 가져옵니다(fgets() 함수 사용).

c. fsockopen 함수를 사용하여 URL을 엽니다(get 및 get에서 가져올 수 있음). post 메소드), 헤더 및 body

d를 포함하여 get 메소드에서 전체 데이터를 가져옵니다. 컬 라이브러리를 사용하여 컨텐츠를 얻으려면 컬이 있는지 확인하기 위해 php.ini를 확인해야 합니다. 확장 기능이 켜졌습니다

2.22. 일반적인 PHP 배열 함수는 무엇인가요?

a 배열 작업을 위한 기본 함수(array_values, array_keys, array_flip, array_search, array_reverse, in_array, array_key_exists, array_count_values)

b 배열 분할 및 채우기(array_slice, array_splice, array_chunk)

c . 배열 및 스택, 큐(array_push, array_pop, array_shift, array_unshift)

d. 배열 정렬(sort, asort, ksort)

e 배열 계산(array_sum, array_merge, array_diff, array_intersect )

f. 기타 배열 함수(array_unique, shuffle)

2.23. 파일 업로드를 위한 코드 작성

POST 메소드 업로드, 이를 통해 사용자는 텍스트 및 바이너리 파일을 업로드할 수 있습니다. PHP의 인증 및 파일 작업 기능을 사용하면 업로드가 허용된 사람과 파일 업로드 후 파일 처리 방법을 완전히 제어할 수 있습니다.

$_FILES를 통해 HTTP를 통해 서버에 업로드된 파일을 받습니다. 업로드된 콘텐츠는 $_FILES['xx']['tmp_name']에 저장되며, move_uploaded_file을 통해 업로드된 파일을 새 위치로 이동합니다.

일부 패키지 업로드 클래스를 보다가 문자열에서 지정된 문자가 마지막으로 나타나는 것을 검색하는 strrchr 함수를 보았습니다. 이 함수를 사용하여 접미사를 가져옵니다.

2.24. 웹 페이지의 모든 JS/VBS 스크립트를 필터링하는 정규식을 작성합니다(즉, 태그와 해당 내용을 제거합니다)

/<[^>].*?>. *?/si. 미리 만들어진 정규식 지침을 보려면 정규식 온라인 도구를 확인하세요.

2.25. PHP를 사용하여 2006-5-10 22:21:21

echo date('Y-m-d H:i:s', strtotime(') 형식으로 전날의 시간을 출력합니다. -1일')) ;더 많은 날짜/시간 기능을 확인하세요.

2.26. foo()와 @foo()의 차이점은 무엇인가요?

foo()는 이 함수를 실행하며 모든 해석 오류, 구문 오류 및 실행 오류가 페이지에 표시됩니다.

@foo()는 이 함수를 실행할 때 위의 오류 메시지를 숨깁니다

2.27. sort(), asort(), ksort(), rsort()의 차이점은 무엇인가요?

sort: 함수가 끝나면 배열 셀이 재정렬됩니다. 가장 낮은 것부터 높은 것까지 정렬

rsort: 배열을 역순으로 정렬

asort: 배열을 정렬하고 인덱스 관계 유지

arsort: 배열을 역순으로 정렬하고 인덱스 관계 유지

ksort: 키 이름으로 배열을 정렬하고 키 이름과 데이터 간의 연관성을 유지합니다. 주로 배열을 연결하는 데 사용됩니다.

2.28. 다음 프로그램의 입력값은 무엇입니까?

변수 변수는 일반 변수의 값을 이 변수 ​​변수의 변수 이름으로 가져오는 것입니다. 출력 값은 "ok"입니다.

$str = 'cd';

$$str = '핫도그';

$$str = 'ok';echo$cd;

2.29, echo count("abc ") 무엇이 출력될까요?

count() 함수는 배열의 셀 수 또는 객체의 속성 수를 계산합니다. 일반적으로 array()

객체의 경우 SPL이 설치된 경우 count()를 구현하여 호출할 수 있습니다. Countable 인터페이스. 이 인터페이스에는 count() 함수의 반환 값을 반환하는 메서드 count()가 하나만 있습니다.

매개변수가 배열 유형이 아니거나 계산 가능한 인터페이스를 구현하는 객체가 아닌 경우 1이 반환됩니다. 매개변수가 NULL인 경우 결과는 0입니다.

2.30.GD 라이브러리의 기능은 무엇인가요?

GD 라이브러리는 이미지 처리를 위한 일련의 API를 제공합니다. GD 라이브러리를 사용하여 이미지를 처리하거나 생성할 수 있습니다.

웹사이트에서 GD 라이브러리는 일반적으로 썸네일을 생성하거나 이미지에 워터마크를 추가하거나 웹사이트 데이터에 대한 보고서를 생성하는 데 사용됩니다.

3. 데이터베이스

3.1. 수천만 개의 데이터가 있는 데이터베이스가 있다고 가정해 보겠습니다. 모니터링을 통해 쿼리 요청의 90%가 동일한 데이터로 전달되는 것으로 나타났습니다. 데이터의 일부는 전체 데이터베이스 용량의 1%만 차지합니다.

a. 이 1% 데이터는 쿼리 작업의 90%를 지원합니다. 이 편리한 데이터는 쿼리 효율성을 높이기 위해 데이터 버퍼에 있습니다.

b. 하위 라이브러리: 성능이 빠르게 향상됩니다. 여전히 효율성이 향상되지 않으면 데이터의 1%에 대해 nosql 캐싱을 수행하는 것을 고려할 수 있습니다.

c. 분할 테이블: 데이터베이스에 클러스터 솔루션이 없을 때 특정 수평 확장 기능을 얻을 수 있으며 동시에 여러 물리적 장치 간에 로드를 공유할 수도 있습니다. 병목 현상.

d. 조건이 허락한다면 이 애플리케이션은 memcached 및 redis를 통해 결과 집합의 1%를 캐싱하는 등 캐싱 솔루션을 통해 해결할 수도 있습니다.

"ChinaUnix Q&A 토론" 및 "Dewen 토론"을 참조하세요

3.2 MySQL은 데이터베이스와 테이블을 어떻게 구분합니까?

"MySQL 하위 데이터베이스 및 테이블 하위 환경의 글로벌 ID 생성 방식", "처음으로 데이터베이스 하위 테이블에 대한 교훈 및 경험", "MySQL 하위 데이터베이스 및 테이블에 대한 몇 가지 팁"을 참조하세요.

3.3, MySQL 데이터베이스 스토리지 엔진이란 무엇입니까?

MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV 등

3.4 MyISAM과 InnoDB의 차이점

a. MyISAM은 디스크에 세 개의 파일로 저장됩니다. InnoDB의 모든 테이블은 동일한 데이터 파일(일반적으로 2GB

)에 저장됩니다. 저장 공간: MyISAM은 압축이 가능하며 저장 공간이 더 작습니다. InnoDB는 더 많은 메모리와 스토리지를 필요로 하며 데이터와 인덱스 캐싱을 위해 메인 메모리에 전용 버퍼 풀을 구축합니다.

c. 거래 지원: MyISAM은 거래 지원을 제공하지 않습니다. InnoDB는 트랜잭션, 외래 키 및 기타 고급 데이터베이스 기능에 대한 트랜잭션 지원을 제공합니다.

d.AUTO_INCREMENT: MyISAM은 다른 필드와 공동 인덱스를 생성할 수 있습니다. InnoDB에는 이 필드만 있는 인덱스가 포함되어야 합니다.

e. 테이블 잠금 차이점: MyISAM은 테이블 수준 잠금만 지원합니다. InnoDB는 트랜잭션과 행 수준 잠금을 지원합니다.

f. 전체 텍스트 인덱스: MyISAM은 FULLTEXT 유형의 전체 텍스트 인덱스를 지원합니다. InnoDB는 이를 지원하지 않습니다.

g. 테이블 기본 키: MyISAM을 사용하면 인덱스와 기본 키 없이 테이블이 존재할 수 있습니다. InnoDB가 기본 키나 비어 있지 않은 고유 인덱스를 설정하지 않으면 자동으로 6바이트 기본 키(사용자에게 표시되지 않음)를 생성합니다. 데이터는 기본 인덱스의 일부이며 추가 인덱스는 값을 저장합니다. 기본 인덱스의

h. 테이블의 특정 행 수: MyISAM은 테이블의 총 행 수를 저장합니다. InnoDB는 테이블의 총 행 수를 저장하지 않습니다. 그러나 wehre 조건을 추가한 후 myisam과 innodb는 이를 동일한 방식으로 처리합니다.

i. 외래 키: MyISAM은 이를 지원하지 않습니다. InnoDB는

j CURD 작업을 지원합니다: MyISAM 많은 수의 SELECT를 수행하는 경우 MyISAM이 더 나은 선택입니다. 데이터가 INSERT 또는 UPDATE를 많이 수행하는 경우 성능상의 이유로 InnoDB 테이블을 사용해야 합니다.

"MySQL 스토리지 엔진의 MyISAM 및 InnoDB"를 참조하세요.

3.5 MySQL 데이터 유형은 무엇인가요?

"SQL 데이터 유형"을 참조하세요.

3.6. MySQL 데이터베이스는 하루 50,000개 이상의 항목 증가가 3년 동안 지속될 것으로 예상됩니다.

a. 데이터베이스 구조를 잘 설계하고, 부분적인 데이터 중복을 허용하고, 조인 쿼리를 피하여 효율성을 높이세요.

b. 적절한 테이블 필드 데이터 유형과 스토리지 엔진을 선택하고 적절하게 인덱스를 추가합니다.

c. mysql 라이브러리의 마스터-슬레이브 읽기 및 쓰기가 분리되어 있습니다.

d. 일반 테이블을 찾아 단일 테이블의 데이터 양을 줄여 쿼리 속도를 높입니다.

e. memcached, apc 등과 같은 캐싱 메커니즘을 추가합니다.

f. 자주 변경되지 않는 페이지에 대해 정적 페이지를 생성합니다.

g. 효율적인 SQL 작성

3.7. SQL 문에서는 어떤 보안을 고려해야 합니까?

주로 삽입 방지를 위해 ' " /와 같은 특수 문자 이스케이프, 데이터 제출 시 HTML 필터링에 주의, --, #과 같은 주석에 주의, 하위 쿼리 및 일부 mysql 함수 sleep, load_file 등에 주의

3.8. MYSQL이 현재 시간을 가져오는 데 사용하는 함수는 무엇인가요?

now(); 더 많은 MySQL 내장 함수 보기

3.9. 데이터베이스

Memcached+MySQL

방문객이 증가하면서 MySQL 아키텍처를 사용하는 대부분의 웹사이트는 데이터베이스에 대한 성능 문제를 겪기 시작했습니다. 프로그래머들은 데이터베이스에 대한 부담을 완화하기 위해 캐싱 기술을 광범위하게 사용하기 시작했습니다. 데이터베이스 구조 및 인덱스를 최적화합니다. Memcached는 여러 웹 서버에 공유되는 고성능 캐시 서비스를 제공합니다. Memcached 서버에서는 해시 확장 및 일관된 해싱을 기반으로 여러 Memcached 캐시 서비스가 개발됩니다.

MySQL 마스터-슬레이브 읽기 및 쓰기 분리

Memcached는 데이터베이스 읽기 집중만 완화할 수 있습니다. 하나의 데이터베이스에서 읽고 쓰는 작업으로 인해 데이터베이스가 압도됩니다. 대부분의 웹 사이트는 읽기-쓰기 성능과 읽기 데이터베이스 확장성을 향상시키기 위해 마스터-슬레이브 복제 기술을 사용하기 시작했습니다.

web2.0이 계속해서 빠른 속도로 발전하면서 MySQL 메인 데이터베이스의 쓰기 압력이 병목 현상을 일으키기 시작하고, MyISAM이 테이블 잠금을 사용하기 때문에 높은 동시성에서는 심각한 잠금 문제가 발생할 것입니다. , 그리고 다수의 동시성 MySQL 애플리케이션이 MyISAM 대신 InnoDB 엔진을 사용하기 시작했습니다. 동시에 쓰기 부담과 데이터 증가로 인한 확장 문제를 완화하기 위해 하위 테이블과 하위 데이터베이스를 사용하는 것이 대중화되었습니다.

MySQL의 확장성 병목 현상

대용량 데이터와 높은 동시성 환경에서 MySQL 애플리케이션 개발은 점점 더 복잡해지고 기술적으로 어려워지고 있습니다. 하위 테이블과 하위 데이터베이스의 규칙을 익히려면 경험이 필요합니다. 하위 데이터베이스와 테이블이 있는 하위 데이터베이스는 특정 단계에서 확장 문제에 직면하게 됩니다. 새로운 하위 라이브러리 방법이 필요할 수 있는 요구 사항도 변경되었습니다. 또한 MySQL 데이터베이스는 일부 대형 텍스트 필드를 저장하는 경우가 많아 데이터베이스 테이블이 매우 커지므로 데이터베이스 복구 속도가 매우 느려지고 데이터베이스를 신속하게 복원하기가 어렵습니다. 빅데이터에서는 IO 부담이 높고 테이블 구조를 변경하기가 어렵습니다. 이는 현재 MySQL을 사용하는 개발자가 직면한 문제입니다.

3.10. 관계형 데이터베이스란 무엇입니까?

관계형 데이터베이스는 관계형 모델을 지원하는 데이터베이스입니다. 간단히 말해서 관계형 모델은 2차원 테이블 모델을 말합니다.

관계형 데이터베이스는 사용자가 더 쉽게 이해할 수 있도록 데이터를 행과 열 형식으로 저장합니다. 이러한 일련의 행과 열을 테이블이라고 하며, 테이블 그룹이 데이터베이스를 구성합니다.

4. Linux 기본

4.1. Linux

에서 현재 시스템 로드 정보를 보는 방법은 "Linux에서 시스템 리소스 및 로드 보기 및 성능 모니터링"을 참조하세요. vim 기본 단축키

"역사상 가장 완벽한 Vim 단축키 비트맵 - 초급부터 고급까지"를 참조하세요.

4.3 다음 10가지 셸 명령 top, ps, mv, find, df, cat, chmod, chgrp, grep, wc

top 시스템 프로세스가 차지하는 리소스를 확인하세요. ps는 자세한 프로세스 정보를 표시합니다.

mv는 파일이나 디렉터리의 이름을 바꾸거나 한 디렉터리에서 다른 디렉터리로 파일을 이동하는 것입니다.

find 파일이나 디렉터리를 찾습니다.

df 파일 시스템의 디스크 공간 사용량을 확인하세요.

cat는 파일 내용을 표시하고, 새 파일을 만들고, 파일 내용을 병합합니다.

chmod는 파일이나 디렉터리의 액세스 권한을 변경합니다.

chgrp 파일이나 디렉터리가 속한 그룹을 변경합니다.

grep은 강력한 텍스트 검색 도구입니다.

wc는 라인 수, 바이트 수 등 지정된 파일의 데이터 정보를 계산합니다.

4.4 코어 파일은 무엇이며 어떤 용도로 사용됩니까?

core는 유닉스 시스템의 커널입니다. 프로그램의 메모리가 한계를 초과하면 운영 체제는 프로세스를 종료하고 추가 분석을 위해 현재 메모리 상태를 코어 파일에 덤프합니다.

프로그래머는 코어 파일을 통해 문제를 찾을 수 있습니다. 프로그램이 중단될 때 자세한 상태 설명을 기록합니다.

5. 네트워크 기본 사항

5.1 다음 서비스의 목적과 기본 포트를 기록합니다: ftp, ssh, http, telnet, https

ftp 파일 전송 프로토콜은 일반적인 파일 복사 방법입니다. 기본값은 데이터 연결의 경우 20이고 제어 연결 포트의 경우 21입니다.

Ssh는 서버에 연결하여 작업을 수행합니다. 기본 포트 번호는 22입니다.

HTTP 하이퍼텍스트 전송 프로토콜은 HTML 페이지를 게시하고 수신하는 방법을 제공하며 포트 번호는 80

입니다.

텔넷 프로토콜은 TCP/IP 프로토콜 계열에 속하며, 인터넷 원격 로그인 서비스의 표준 프로토콜이자 기본 포트는 23입니다.

HTTPS는 간단히 말해 보안을 위한 HTTP 채널입니다. , HTTP 보안 버전이며 기본 포트는 443

5.2입니다. 생각할 수 있는 모든 HTTP 반환 상태 값을 작성하고 목적을 설명합니다(예: 404 반환은 페이지를 찾을 수 없음을 의미함).

200 OK 요청이 성공했습니다. (그 후 GET 및 POST 요청에 대한 응답 문서입니까?)

301 영구 이동 요청한 페이지가 새 URL로 이동되었습니다.

302 발견 요청한 페이지가 되었습니다. 일시적으로 새 URL로 이동

304 수정되지 않음, 서버는 클라이언트에게 원래 버퍼링된 문서를 계속 사용할 수 있다고 알려줍니다

401 무단 요청한 페이지에 사용자 이름과 비밀번호가 필요합니다

403 액세스 금지 요청한 페이지에 대한 접근이 금지되어 있습니다

500 내부 서버 오류, 요청이 완료되지 않았습니다. 서버에 예측할 수 없는 상황이 발생했습니다.

502 잘못된 게이트웨이, 요청이 완료되지 않았습니다. 서버가 업스트림 서버

503 서비스를 사용할 수 없음으로부터 잘못된 응답을 받았습니다. 요청이 완료되지 않았습니다. 서버가 일시적으로 과부하되었거나 다운되었습니다

자세한 상태 코드는 "HTTP 상태 메시지"를 참조하세요

5.3 POST와 GET의 차이점은 무엇인가요?

a. GET은 서버에서 데이터를 가져오는 것이고, POST는 서버로 데이터를 전송하는 것입니다.

b는 URL 매개변수 전송을 통해 HTTP 프로토콜을 보내 수신하는 반면, POST는 제출된 엔터티 데이터입니다. 양식을 통해

c. GET으로 전송되는 데이터의 양은 적으며 2KB를 초과할 수 없습니다. POST로 전송되는 데이터의 양은 크며 일반적으로 기본적으로 제한이 없습니다. 하지만 이론적으로 IIS4의 최대 크기는 80KB이고 IIS5에서는 100KB

d입니다. GET 보안은 매우 낮고 POST 보안은 높습니다

5.4. 요구 사항:

1) 게시물 요청입니다

2) 대상: http://www.example.com:8080/test

3) POST 변수: 사용자 이름: test pwd: test2 intro : Hello world !

4)에는 다음 COOKIE 정보가 포함되어 있습니다. cur_query: you&me

POST http://www.example.com:8080/test HTTP/1.1

Cookie:cur_query=you&me

username =test&pwd:=test2&intro=Hello world!


자세한 속성은 "HTTP 헤더 상세 설명"을 참조하세요.

6. 서버 기본 사항

6.1. Apache 및 Nginx

a Apache에 비해 nginx의 장점:

가벼워서 Apache보다 메모리와 리소스를 덜 차지합니다. 고도로 모듈화된 설계, 모듈 작성이 상대적으로 간단함

동시성 방지, nginx는 요청을 비동기식 및 비차단 방식으로 처리하며, 여러 연결(10,000개 수준)이 하나의 프로세스에 해당할 수 있는 반면, Apache는 차단되고 동기식 다중 프로세스 모델입니다. , 하나의 연결은 하나의 프로세스에 해당합니다. nginx는 낮은 리소스 소비와 높은 성능을 유지할 수 있습니다.

nginx는 정적 파일을 잘 처리합니다.

b. . Apache는 nginx와 비교됩니다. 장점:

apache의 재작성은 nginx의 재작성보다 강력합니다. 기본적으로 생각할 수 있는 모든 것을 찾을 수 있습니다. nginx는 상대적으로 버그가 더 적습니다.

c.

Nginx 덕분에 최신 epoll(Linux 2.6 커널) 및 kqueue(freebsd) 네트워크 I/O 모델이 사용되는 반면 Apache는 기존 선택 모델을 사용합니다.

현재 Linux에서 높은 동시 액세스를 견딜 수 있는 Squid와 Memcached는 둘 다 epoll 네트워크 I/O 모델을 사용합니다.

많은 연결의 읽기 및 쓰기를 처리하기 위해 Apache에서 채택한 선택 네트워크 I/O 모델은 매우 비효율적입니다.

"Apache와 Nginx의 장단점 비교"를 참조하세요.

6.2 cgi와 fastcgi의 차이점

CGI: 과거에는 web이 더 많이 사용되었습니다. 일반적으로 서버는 처리만 수행됩니다. 정적 요청의 경우 웹 서버는 요청 내용을 기반으로 외부 C 프로그램(또는 Perl 스크립트...)을 실행하기 위해 새 프로세스를 분기합니다. 이 프로세스는 처리된 데이터를 웹 서버에 반환합니다. 그리고 마지막으로 웹 서버가 사용자에게 콘텐츠를 보내면 방금 분기된 프로세스도 종료됩니다. 사용자가 다음에 동적 스크립트를 변경하도록 요청하면 웹 서버는 새 프로세스를 다시 분기하고 주기가 계속됩니다.

웹 내장 모듈: 나중에 더 발전된 방식이 등장하여 웹 서버에 내장 Perl 인터프리터 또는 PHP 인터프리터가 있을 수 있습니다. 즉, 이러한 인터프리터는 모듈로 만들어지고 웹 서버가 시작될 때 이러한 인터프리터를 시작합니다. 새로운 동적 요청이 들어오면 웹 서버는 이러한 Perl 또는 PHP 스크립트를 자체적으로 구문 분석하므로 프로세스를 다시 포크할 필요가 없고 효율성이 향상됩니다.

fastcgi: 웹 서버가 요청을 받으면 프로세스를 다시 포크하지 않습니다(이 프로세스는 웹 서버가 시작될 때 시작되고 종료되지 않기 때문입니다). 웹 서버는 콘텐츠를 이 프로세스에 직접 전달합니다. (프로세스 간 통신이지만 fastcgi는 다른 방법인 tcp 통신을 사용합니다.) 이 프로세스는 요청을 받은 후 처리하고 결과를 웹 서버에 반환하며 마지막으로 종료하는 대신 다음 요청이 도착할 때까지 기다립니다.

"fastcgi와 cgi의 차이점은 무엇입니까?"를 참조하세요.


6.3 Memcached와 Redis의 차이점

a Redis에서는 모든 데이터가 항상 메모리에 저장되는 것은 아닙니다. Memcached의 가장 큰 차이점 중 하나와 비교됩니다.

b. Redis는 여러 측면에서 데이터베이스의 특성을 가지고 있거나 데이터베이스 시스템인 반면 Memcached는 단순한 K/V 캐시입니다.

c. 100,000개 이상의 데이터에서는 Memcached 성능이 Redis보다 높습니다.

d. 메모리 사용 효율성에 대해 이야기하자면, 단순 키-값 저장을 사용하면 Memcached가 키-값 저장을 위해 해시 구조를 사용하는 경우 결합 압축으로 인해 메모리 사용률이 더 높아집니다. 메모리 활용도는 Memcached보다 높습니다. 물론 이는 애플리케이션 시나리오와 데이터 특성에 따라 다릅니다.

e. 데이터 지속성과 데이터 동기화에 대한 요구 사항이 있는 경우 Memcached에는 이 두 가지 기능이 없으므로 Redis를 선택하는 것이 좋습니다. 시스템을 업그레이드하거나 다시 시작한 후 캐시된 데이터가 손실되지 않기를 바랄지라도 Redis를 선택하는 것이 현명합니다.

f. Redis와 Memcache는 쓰기 성능면에서 큰 차이가 없지만 읽기 성능, 특히 일괄 읽기 성능면에서는 Memcache가 더 좋습니다.

"Redis와 Memcached의 차이점"을 참조하세요

6.4 PHP의 장점과 단점은 무엇인가요?

장점:

a 구문이 간단하고 시작이 빠르며 Zend Studio, EclipsePHP Studio 등과 같은 매우 편리한 개발 도구가 많이 있습니다.

b. -플랫폼, 모두 무료입니다. LAMP(Linux Apache MYSQL, PHP)를 빠르게 구축할 수 있으며 MYSQL, Oracle, PostgreSQL 등과 같은 많은 주류 데이터베이스 시스템을 지원합니다.

c. WebService, XML, AJAX 등과 같은 현재 주류 기술을 지원합니다.

d. PHP는 이미 매우 성숙한 객체 지향 시스템을 갖추고 있으며 객체 지향 개발(PHP5)을 지원할 수 있습니다.

e 예 기존의 좋은 프레임워크, 오픈 소스 포럼, 블로그 등이 많이 있습니다. 지속적인 업데이트와 유지 관리, 커뮤니티 지원, 그리고 많은 기술 애호가들의 공동 노력으로 인해 PHP가 널리 사용되고 있으며 많은 유명 웹사이트가 있습니다. 또한 개발 언어로 PHP를 사용하고 있습니다.

단점:

a. 멀티 스레딩에 대한 지원은 그다지 좋지 않으며 일부 간단한 시뮬레이션 스레드만 수행할 수 있습니다.

b 구문은 그렇지 않습니다. C++ 이전에 해본 적이 있다면 Java에 매우 익숙할 것입니다. 예를 들어 변수가 정의되지 않은 경우

c를 직접 사용할 수 있습니다. 아마도 숙련된 PHP 프로그래머에게 가장 어려운 부분은 해석일 것입니다. PHP의 실행 메커니즘. 이 운영 메커니즘은 각 PHP 페이지가 해석되고 실행된 후 모든 관련 리소스가 재활용되도록 보장합니다. 즉, PHP는 언어 수준에서 객체를 메모리에 상주하게 만들 수 있는 방법이 없습니다. PHP에서 모든 변수는 페이지 수준입니다. 전역 변수이든 클래스의 정적 멤버이든 페이지가 실행된 후에는 지워집니다. JSP를 예로 들어 보겠습니다. JSP에서 Java Bean의 범위에는 페이지, 프로그램, 세션 및 요청의 네 가지 수명에 각각 해당하는 페이지, 애플리케이션, 세션 및 요청의 네 가지 유효한 값이 있습니다. 그러나 PHP에서는 페이지의 수명이 단 한 번뿐입니다.

관련 추천:

주요 PHP 면접 질문 공유 (1)

위 내용은 주요 PHP 면접 질문 요약 공유 (2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.