>  기사  >  백엔드 개발  >  PHP 면접 질문 39개 요약 정리 (요약 공유)

PHP 면접 질문 39개 요약 정리 (요약 공유)

WBOY
WBOY앞으로
2022-03-23 19:27:248668검색

이 기사는 PHP에 대한 관련 지식을 제공합니다. 주로 PHP 인터뷰 질문을 소개하고 39가지 일반적인 인터뷰 질문을 요약합니다. PHP 인터뷰 질문에는 여러 가지 유형이 있지만 모두 기본과 분리될 수 없습니다. 일반적인 PHP 면접 질문이 모두에게 도움이 되기를 바랍니다.

PHP 면접 질문 39개 요약 정리 (요약 공유)

추천 학습: "PHP 튜토리얼"

PHP 일반적인 인터뷰 질문

1. 문제의 핵심은 도메인 이름 확인과 서버(nginx) 확인, 기본적으로 이 두 부분을 자세히 설명할 수 있습니다. 1단계. URL 구문 분석

브라우저는 현재 URL 데이터를 구문 분석하여 해당 URL이 합법적인 링크인지 확인합니다. 합법적인 링크라면 정상적으로 다음 단계로 진행하세요. 합법적인 링크가 아닐 경우 바이두, 360, 구글 검색 등 검색 기능이 실행됩니다.

2단계, 도메인 이름 확인

서버는 IP 형태로 존재합니다. 도메인 이름을 IP로 확인해야 합니다. IP를 확인하는 세 가지 작은 단계가 있습니다.

1) 브라우저 자체 캐시에서 도메인 이름 데이터를 구문 분석하고

2) 로컬의 HOST 파일에서 도메인 이름을 확인합니다. 컴퓨터

3 ), DNS 서버를 통해 도메인 이름을 확인합니다

3단계, 정보 가져오기

이 단계에서는 주로 IP 및 포트 정보와 같은 URL 정보를 가져옵니다.

4단계. 패킷을 전송하고 3방향 핸드셰이크를 수행합니다

브라우저는 요청 정보를 패키징하고 TCP의 3방향 핸드셰이크를 통해 서버에 데이터를 전송합니다.

5단계: 서버가 데이터를 구문 분석, 처리 및 반환합니다

서버는 전달된 데이터를 다양한 수준과 방법을 통해 가져와 분석 및 처리한 후 최종적으로 응답 MIME 유형 데이터를 반환합니다. 정상적인 상태 코드는 200이고, 비정상적인 오류 코드는 404, 500, 501 등입니다.

6단계. 브라우저가 데이터를 가져오고, 렌더링하고, 표시합니다.

브라우저는 서버에서 데이터를 가져오고, 리소스를 로드하고, 페이지 등을 렌더링하고 사용자에게 페이지를 표시합니다.

2. SESSION과 COOKIE의 차이점은 무엇인가요? 프로토콜의 이유와 기능을 설명해 주세요.

1) http stateless 프로토콜은 사용자가 동일한 웹사이트에서 왔는지, 동일한 사용자가 다른 것을 요청하는지를 구분할 수 없습니다. 페이지는 동일한 사용자로 간주될 수 없습니다. 2) 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 압축된 패키지를 생성하고 Linux

Tar.gz:Packaging: tar czf file.tar.gz file.txt

압축 해제: tar xzf file.tar.gz

Bz2:

패키지: bzip2 [-k] 파일

압축해제: bunzip2 [-k] 파일

Gzip(파일만, 원본 파일은 보관하지 않음)

패키지: gzip file1.txt

압축해제: gunzip file1.txt.gz

Zip: -r 디렉토리 압축

: zip file1.zip file1.txt

압축 해제: unzip file1.zip

5. 데이터 유형(int char varchar datetime text)의 의미를 적어주세요. varchar와 char의 차이점은 무엇인가요?

Int Integer char 고정 길이 문자 Varchar 가변 길이 문자 Datetime Datetime 유형 Text 텍스트 유형 Varchar와 char char의 차이점은 고정 길이 문자 유형이 얼마나 많은 공간을 차지하느냐 하는 것입니다. Varchar는 가변 길이 문자 유형으로, 내용만큼 공간을 차지하므로 공간을 효과적으로 절약할 수 있습니다. varchar 타입은 가변형이므로 데이터 길이가 변경되면 서버에서 추가 작업을 수행해야 하므로 char 타입에 비해 효율성이 떨어집니다.

6. MyISAM과 InnoDB의 기본 차이점은 무엇인가요? 인덱스 구조는 어떻게 구현되나요?

MyISAM 유형은 트랜잭션 및 테이블 잠금을 지원하지 않으며 조각화되기 쉽습니다. 자주 최적화해야 하며 읽기 및 쓰기 속도가 더 빠른 반면, InnoDB 유형은 트랜잭션, 행 잠금을 지원하고 충돌 복구 기능을 제공합니다. 읽기 및 쓰기 속도는 MyISAM보다 느립니다.

인덱스 생성: 경고 테이블 테이블 이름 추가 인덱스(`필드 이름`)

7. 쿠키를 사용하지 않고 클라이언트에 쿠키를 보냅니다.

이해: session_start()가 켜져 있으면 상수 SID가 생성됩니다. COOKIE가 켜져 있으면 이 상수는 비어 있습니다. COOKIE가 닫히면 PHPSESSID 값이 이 상수에 저장됩니다. SESSIONID 값을 전달하기 위해 URL 뒤에 SID 매개변수를 추가하면 클라이언트 페이지가 SESSION의 값을 사용할 수 있습니다. 클라이언트가 COOKIE를 열고 서버가 SESSION을 열 때. 브라우저가 첫 번째 요청을 하면 서버는 SESSIONID를 저장하기 위해 브라우저에 쿠키를 보냅니다. 브라우저가 두 번째 요청을 하면 기존

8을 저장합니다.

Isset 변수가 존재하는지 확인하려면 여러 변수를 전달할 수 있습니다. 변수 중 하나가 존재하지 않으면 false를 반환합니다. 변수가 비어 있는지 확인하면 변수 하나만 false가 됩니다. 비어 있으면 true를 반환합니다.

9. Redis를 유지하는 방법은 몇 가지가 있나요?

답변: 두 가지 주요 방법이 있습니다.

1) 스냅샷 지속성

은 Redis 구성 파일에서 자동으로 설정되었습니다.

형식은 다음과 같습니다. save N M

은 N 초 내에 Redis가 최소한 M 발생 수정되면 redis는 디스크에 스냅샷을 생성합니다.

물론 save 또는 bgsave(비동기) 명령을 수동으로 실행하여 스냅샷을 만들 수도 있습니다

2) 파일만 추가 AOF 지속성

appendfsync Everysec과 같은 총 세 가지 모드가 있습니다. 기본값은 강제로 실행하는 것입니다. 1초에 한 번 디스크에 쓰기

appendfsync는 쓰기 작업이 수행될 때마다 항상 강제로 디스크에 쓰기를 수행합니다.

appendfsync 아니요 완전히 OS에 따라 다르므로 성능은 최고이지만 지속성은 보장할 수 없습니다

세 번째 모드가 최고입니다 . Redis는 기본적으로 세 번째 모드도 채택합니다.

10.mysql 스토리지 엔진

답변: 일반적으로 사용되는 것은 크게 두 가지 유형으로 나뉘는데, 하나는 innodb이고 다른 하나는 myisam입니다. 둘 사이의 주요 차이점은

1) myisam은 트랜잭션 처리를 지원하지 않습니다. , innoDB는 트랜잭션 처리를 수행하지만

2) myisam은 외래 키를 지원하지 않고 innoDB는 외래 키를 지원합니다

3) myisam은 전체 텍스트 검색을 지원하지만 innoDB는 MySQL5.6 버전 이후에만 전체 텍스트 검색을 지원합니다

4) 데이터의 저장 형태가 다릅니다. mysiam 테이블 구조, 인덱스, 데이터, innoDB 세 가지 파일에 저장됩니다. 저장소는 구조를 하나의 파일로 저장하고 인덱스와 데이터는 하나의 파일로 저장됩니다

5) myisam은 innoDB보다 성능이 더 좋습니다. 데이터 쿼리 및 추가, innoDB는 일괄 삭제 성능이 더 높습니다.

6) myisam은 테이블 잠금을 지원하고, innoDB는 행 잠금을 지원합니다

11. SQL 주입이란 무엇이며 SQL 주입을 방지하는 방법은 무엇인가요?

답변: SQL 주입 공격은 사용자나 해커가 특수 입력을 구성하고 이를 웹 애플리케이션에 매개변수로 전달하는 것을 의미합니다. 이러한 입력의 대부분은 SQL 구문의 일부 조합으로 이루어진 후 SQL 문을 실행하여 공격자를 실행합니다. 필요한 작업의 경우 프로그래머가 사용자가 입력한 데이터를 주의 깊게 필터링하지 않아 불법 데이터가 시스템에 침입했다는 것입니다. 따라서 개발 과정에서 sql 주입을 방지해야 하는 이유는 주로 두 가지 측면에서입니다.

1) 자리 표시자 방법은 sql 문을 전처리한 후 sql 문을 실행하는 것입니다.

2) addlashes 또는 mysql_real_escape_string을 통해 두 함수가 값을 이스케이프합니다. ​​사용자가 입력하고 일부 특수 문자를 이스케이프합니다.

12. 전처리를 사용해 보셨나요?

PDO 클래스에는 전처리를 구현할 수 있는 prepare 메소드가 있습니다. PDOStament 클래스의 excute 메소드는 두 가지 유형의 전처리 매개변수가 있습니다. , 다른 하나는 ? 자리 표시자입니다. 문자열 자리 표시자는 전처리를 수행하고 매개 변수를 전달할 때 연관 배열을 전달하고, ? 자리 표시자는 인덱스 배열을 전달합니다. 두 가지를 혼합할 수는 없지만 일반적으로 문자열 자리 표시자를 사용하는 것이 좋습니다.

13. 프레임워크를 사용할 때 여전히 자체 처리를 사용해야 합니까? 답변: 일반적으로 성숙한 오픈 소스 프레임워크는 데이터 보안을 고려하지만 때로는 일부 기본 SQL 문을 사용할 경우 전처리를 고려해야 합니다. SQL 문을 직접 작성해 보세요. 물론 때로는 프레임워크에서 필터링 방법을 사용하고 싶지 않을 수도 있습니다. 예를 들어 텍스트 편집기를 사용할 때 자체 필터링 방법을 사용할 수 있습니다.

14. mysql을 최적화하는 방법은 무엇입니까?

답변: MySQL 최적화는 주로 다음과 같은 측면에서 이루어집니다.

1) 설계 관점: 스토리지 엔진 선택, 필드 유형 선택, 패러다임

2) 기능적 관점: 인덱스, 인덱스 등 MySQL 고유의 특성을 사용할 수 있습니다. 쿼리 캐싱, 조각 모음, 파티셔닝, 테이블 분할 등

3) SQL 문 최적화: 쿼리 문을 최대한 단순화하고 쿼리 필드를 가능한 한 적게 사용하며 페이징 문, 그룹화 문 등을 최적화합니다.

4) 대규모 로드 아키텍처 시스템 배포: 데이터베이스 서버를 분리합니다. 로드가 많은 경우 마스터-슬레이브 복제 및 읽기-쓰기 분리 메커니즘을 설계에 사용할 수 있습니다.

5) 하드웨어에서 데이터베이스 서버를 업그레이드합니다.

15. PHP에서 값 전달과 참조 전달의 차이점을 설명해주세요. 언제 값으로 전달하고 언제 참조로 전달합니까?

값으로 전달: 함수 범위 내에서 값을 변경하면 함수 외부에서 무시됩니다.

참조로 전달: 함수 범위 내에서 값을 변경하면 함수 외부에서도 이러한 수정 사항이 반영됩니다.

장점 및 단점 : 누르기 값이 전달되면 PHP는 값을 복사해야 합니다. 특히 큰 문자열과 개체의 경우 비용이 많이 드는 작업이 될 수 있습니다. 참조로 전달하면 값을 복사할 필요가 없으므로 성능 향상에 좋습니다.

16. PHP에서 error_reporting 기능은 무엇인가요?

PHP의 오류 수준을 설정하고 현재 수준을 반환합니다.

17. PHP를 사용하여 빠른 정렬 알고리즘을 설명합니다. 객체가 배열일 수 있습니까?

원리: 빠른 정렬은 분할 및 정복 전략을 사용하여 정렬할 데이터 시퀀스를 두 개의 하위 시퀀스로 나눕니다. :

(1) 시퀀스에서 요소를 선택하고 해당 요소를 "데이텀"이라고 부릅니다.

(2) 배열을 한 번 스캔하고 "베이스"보다 작은 모든 요소를 ​​베이스 앞에 배치하고 "베이스"보다 큰 모든 요소를 ​​베이스 뒤에 배열합니다.

(3) 기준 값보다 작은 요소의 하위 배열과 기준 값보다 큰 요소의 하위 배열이 정렬될 때까지 재귀를 통해 각 하위 시퀀스를 더 작은 시퀀스로 나눕니다.

//快速排序(数组排序)
function QuickSort($arr){
 $num = count($arr);
 $l=$r=0;
 for($i=1;$i<$num;$i++){
  if($arr[$i] < $arr[0]){
   $left[] = $arr[$i];
   $l++;
  }else{
   $right[] = $arr[$i];
   $r++;
  }
 }
 if($l > 1){
  $left = QuickSort($left);
 }
 $new_arr = $left;
 $new_arr[] = $arr[0];
 if($r > 1){
  $right = QuickSort($right);
 }
 for($i=0;$i<$r;$i++){
  $new_arr[] = $right[$i];
 }
 return $new_arr;
}

18 순차 검색 및 이진 검색(이진 검색이라고도 함) 알고리즘을 설명하려면 개체가 순서 배열일 수 있습니다.

//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
 if ($low <= $high){
  $mid = intval(($low+$high)/2);
  if ($array[$mid] == $k){
   return $mid;
  }elseif ($k < $array[$mid]){
   return bin_sch($array, $low, $mid-1, $k);
  }else{
   return bin_sch($array, $mid+1, $high, $k);
  }
 }
 return -1;
}
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
 $array[$n] = $k;
 for($i=0; $i<$n; $i++){
  if($array[$i]==$k){
   break;
  }
 }
 if ($i<$n){
  return $i;
 }else{
  return -1;
 }
}

19. 알고리즘 함수는 보편적일 수 있으며, PHP 내장 함수(array_multisort())

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
 if (!is_array($arr)) {
  return false;
 }
 $keysvalue = array();
 foreach($arr as $key => $val) {
  $keysvalue[$key] = $val[$keys];
 }
 if($order == 0){
  asort($keysvalue);
 }else {
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach($keysvalue as $key => $vals) {
  $keysort[$key] = $key;
 }
 $new_array = array();
 foreach($keysort as $key => $val) {
  $new_array[$key] = $arr[$val];
 }
 return $new_array;
}

20를 호출할 수 있습니다. 사용자가 $string 문자열을 입력하려면 $string에 다음보다 큰 숫자만 포함될 수 있습니다. 0 및 영어 쉼표를 사용하려면 정규식 확인을 사용하세요. 요구 사항

class regx { 
 public static function check($str) { 
 if(preg_match("/^([1-9,])+$/",$str)) { 
  return true; 
 } 
 return false; 
 } 
} 
$str="12345,6"; 
if(regx::check($str)) { 
echo "suc"; 
} else { 
echo "fail"; 
}

21을 충족하지 않는 $string에 대한 오류 메시지를 반환합니다. 싱글톤 모드는 mysqli 데이터베이스

class Db { 
 private static $instance; 
 public $handle; 
 Private function __construct($host,$username,$password,$dbname) { 
  $this->handle=NULL; 
  $this->getcon($host,$username,$password,$dbname); 
 } 
 public static function getBb() { 
  self::$instance=new Db(); 
  return self::$instance; 
 } 
 private function getcon($host,$username,$password,$dbname) { 
  if($this->handle!=NULL){ 
   return true; 
  } 
  $this->handle=mysqli_connect($host,$username,$password,$dbname); 
 } 
}

22에 연결된 싱글톤 개체를 생성합니다. PHP 세션 확장은 기본적으로 D

A) SQLite Database

B) MySQL Database

C) 공유 메모리

D) 파일 시스템

E) 세션 서버

23. PHP의 strtolower() 및 strtoupper() 중국어가 아닌 시스템으로 서버를 설치할 때 이 함수로 인해 중국어 문자가 잘못된 문자로 변환될 수 있습니다. 유니코드 텍스트와 호환되는 문자열 대소문자 변환을 달성하려면 두 가지 대체 함수를 작성하십시오. 그 이유는 중국어는 멀티바이트로 구성되어 있고, 영어 시스템만 영문자 1바이트에 대해 1바이트만 가지고 있기 때문에 시스템은 중국어의 각 바이트에 대해 strtolower() 처리를 수행하고, 변경된 한자는 이어붙일 때 깨져서 발생하기 때문입니다. ​​함께 (새로 생성된 인코딩 매핑에 해당하는 문자는 중국어가 아닐 수 있음)

수동 해결 방법: str_split(string string, intstring, intsplit_length = 1)을 사용하여 중국어처럼 바이트 단위로 잘라서 3개로 잘라낼 수 있습니다. 바이트. 인식된 바이트가 영문자인 경우 변환됩니다.

<?php  
function mystrtoupper($a){  
    $b = str_split($a, 1);  
    $r = &#39;&#39;;  
    foreach($b as $v){  
        $v = ord($v);  
        if($v >= 97 && $v<= 122){  
            $v -= 32;  
        }  
        $r .= chr($v);  
    }  
    return $r;  
}  
 
 
$a = &#39;a中你继续F@#$%^&*(BMDJFDoalsdkfjasl&#39;;  
echo &#39;origin string:&#39;.$a."\n";  
echo &#39;result string:&#39;;  
$r = mystrtoupper($a);  
var_dump($r);

24. PHP의 is_writeable() 함수에는 버그가 있어 디렉터리/파일이 쓰기 가능한지 여부를 정확하게 확인할 수 없습니다. 디렉터리/파일이 완전히 쓰기 가능한지 확인하는 함수를 작성하세요.

답변: 두 가지 측면이 있습니다. 버그. 1) Windows에서 파일에 읽기 전용 속성만 있는 경우 is_writeable() 함수가 false를 반환합니다. true가 반환되면 파일에 반드시 쓰기가 가능한 것은 아닙니다.

디렉터리인 경우 해당 디렉터리에 새 파일을 생성하고 파일을 열어 확인합니다.

파일인 경우 파일을 열어(fopen) 파일에 쓰기 가능한지 테스트할 수 있습니다.

2) Unix에서는 PHP 구성 파일에서 safe_mode가 켜져 있으면(safe_mode=on) is_writeable()도 사용할 수 없습니다.
safe_mode가 켜져 있는지 확인하려면 구성 파일을 읽어보세요.

/**
* Tests for file writability
*
* is_writable() returns TRUE on Windows servers when you really can&#39;t write to
* the file, based on the read-only attribute. is_writable() is also unreliable
* on Unix servers if safe_mode is on.
*
* @access   private
* @return   void
*/
if ( ! function_exists(&#39;is_really_writable&#39;))
{
    function is_really_writable($file)
    {
    // If we&#39;re on a Unix server with safe_mode off we call is_writable
    if (DIRECTORY_SEPARATOR == &#39;/&#39; AND @ini_get("safe_mode") == FALSE)
    {
        return is_writable($file);
    }
 
    // For windows servers and safe_mode "on" installations we&#39;ll actually
    // write a file then read it. Bah...
    if (is_dir($file))
    {
        $file = rtrim($file, &#39;/&#39;).&#39;/&#39;.md5(mt_rand(1,100).mt_rand(1,100));
 
        if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
        {
            return FALSE;
        }
 
        fclose($fp);
        @chmod($file, DIR_WRITE_MODE);
        @unlink($file);
        return TRUE;
    } elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE) {
        return FALSE;
    }
 
    fclose($fp);
    return TRUE;
    }
}

25.PHP处理上传文件信息数组中的文件类型$_FILES[‘type’]由客户端浏览器提供,有可能是黑客伪造的信息,请写一个函数来确保用户上传的图像文件类型真实可靠

答:用getimagesize来判断上传图片的类型比$_FILES函数的type更可靠
同一个文件,使用不同的浏览器php返回的type类型是不一样的,由浏览器提供type类型的话,
就有可能被黑客利用向服务器提交一个伪装撑图片后缀的可执行文件。
可以通过getimagesize()函数来判断上传的文件类型,如果是头像文件 会返回这样的一个数组

Array
(
    [0] => 331
    [1] => 234
    [2] => 3
    [3] => width="331" height="234"
    [bits] => 8
    [mime] => image/png
);

26.如何实现PHP的安全最大化?怎样避免SQL注入漏洞和XSS跨站脚本攻击漏洞?

答:基本原则:不对外界展示服务器或程序设计细节(屏蔽错误),不相信任何用户提交的数据(过滤用户提交) 

1)屏蔽错误,将display_errors 设置为off 
2)过滤用户提交参数,这里需要注意的是不能仅仅通过浏览器端的验证,还需要经过服务器端的过滤

这里是需要注意最多的地方,因为所有用户提交的数据入口都在这里,这是过滤数据的第一步。
      1 考虑是否过滤select,insert,update,delete,drop,create等直接操作数据的命令语句
      2 使用addslashes 将所有特殊字符过滤
      3 打开magic_quotes_gpc,开启该参数数后自动将sql语句转换,将 ' 转换成  \'

3)可以考虑设置统一入口,只允许用户通过指定的入口访问,不能访问未经许可的文件等内容 
4)可以考虑对安全性要求高的文件进行来源验证,比如要想执行b.php必须先执行a.php,可以在b.php中判断来自a.php的referer,避免用户直接执行b.php

27.请写出让PHP能够在命令行下以脚本方式执行时安装PHP所必须指定的configure参数,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

答:由于 –enable-cli 和 –enable-cgi 同时默认有效,因此,不必再配置行中加上 –enable-cli 来使得 CLI 在 make install 过程中被拷贝到 {PREFIX}/bin/php

php -f “index.php” 
php -r “print_r(get_defined_constants());”

28.PHP的垃圾收集机制是怎样的?

说明: 
1)如果,你熟悉PHP源码,那么请从源码入手,回答些问题,会获得额外加分 
2)如果,你不熟悉PHP源码,那么尽你所能,多写点东西,包括利用自己的编程直觉得到的信息,都可以。 
3)对,则有分,错误不扣,不写无分。

答:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数(referencecounting)这种单纯的垃圾回收(garbagecollection)机制。每个对象都内含一个引用计数器,每个reference连接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将不再需要使用这个对象,释放其所占的内存空间。

29.get和post的区别?

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
4. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

30.如何修改会话的生存时间?

一:在php.ini中设置session.gc_maxlifetime = 1440 //默认时间
二:代码实现      $ lifeTime = 24 * 3600; //保存一天
    session_set_cookie_params($ lifeTime); 
    在session_start();

31.微信支付回调失败该如何处理?

他问的是已经支付成功后,但是回调失败了。

自己可以创建定时任务在每天的凌晨执行,去微信那边对账,然后更新数据库订单状态。

32.调用区块链接口的安全措施,有那些实现方法?

来自PHP技术交流群 群友分享

  1. 使用MD5实现对接口加签,目的是为了防止篡改数据。
  2. 基于网关实现黑明单与白名单拦截
  3. 可以使用rsa非对称加密 公钥和私钥互换
  4. 如果是开放接口的话,可以采用oath2.0协议
  5. 使用Https协议加密传输,但是传输速度慢
  6. 对一些特殊字符实现过滤 防止xss、sql注入的攻击
  7. 定期使用第三方安全扫描插件
  8. 接口采用dto、do实现参数转化 ,达到敏感信息脱敏效果
  9. 使用token+图形验证码方法实现防止模拟请求
  10. 使用对ip访问实现接口的限流,对短时间内同一个请求(ip)一直访问接口 进行限制。

33.服务器受到dos攻击,这个问题如何应付?

看看你的服务的访问日志,在防火墙中加过滤,或者在web服务器中加过滤吧。方法有以下几种。

  • 对于特定的IP访问的情况,限制IP访问
  • 限制同一IP在单位时间内的访问次数
  • 上级服务器,提高吞吐能力

是消耗服务器资源为主还是纯流量攻击?消耗资源的可以通过配置防火墙过滤规则防御中小规模的攻击。如果是纯流量攻击,考虑你用的是linode真心无解。即便你封了IP封了端口也没用,人家不管你接不接受他的请求,他都会塞满你的带宽。linode必然认为你是被流量攻击或者消耗过多资源然后给你挂起。

34.简述Linux下安装Mysql的过程?

Groupadd mysql 添加一个用户组mysql
Useradd -g mysql mysql 添加一个mysql用户指定分组为mysql
Cd /lamp/mysql 进入mysql目录
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make
Make all

35.对于大流量的网站,您采用什么样的方法来解决访问量问题?

优化程序,优化数据库,如果程序和数据库已经最优化,使用以下解决方法:

  • 确定当前服务器设备是否满足流量需求。
  • 使用Memcache缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。
  • 禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过refer来禁止外部盗链,或者使用apache来配置禁止盗链。
  • 控制大文件的下载,大文件的下载对于非SCSI硬盘来说会占用大量的资源,导致服务器的响应能力下降。
  • 使用不同的主机分流主要流量,使服务器均衡负载。
  • 使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。

36.对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:

1)索引的目的是什么?

  • 快速访问数据表中的特定信息,提高检索速度
  • 创建唯一性索引,保证数据库表中每一行数据的唯一性
  • 加速表和表之间的连接
  • 使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

2) 索引对数据库系统的负面影响是什么?

负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。

3) 为数据表建立索引的原则有哪些?

  • 在最频繁使用的、用以缩小查询范围的字段上建立索引
  • 在平频繁使用的、需要排序的字段上建立索引

4) 什么情况下不宜建立索引?

  • 对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引
  • 对于一些特殊的数据类型,不宜建立索引,比如文本字段(text),值范围较少的知道等。

37.PHP字符串中单引号与双引号的区别?

单引号不能解释变量,而双引号可以解释变量。

单引号不能转义字符,在双引号中可以转义字符。

38.求两个日期的差数,例如2021-2-5 ~ 2021-3-6 的日期差数

方法一:
<?php
class Dtime{
 function get_days($date1, $date2){
  $time1 = strtotime($date1);
  $time2 = strtotime($date2);
  return ($time2-$time1)/86400;
 }
}
$Dtime = new Dtime;
echo $Dtime->get_days(’2021-2-5′, ’2021-3-6′);
?>
方法二:
<?php
$temp = explode(‘-’, ’2021-2-5′);
$time1 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
$temp = explode(‘-’, ’2021-3-6′);
$time2 = mktime(0, 0, 0, $temp[1], $temp[2], $temp[0]);
echo ($time2-$time1)/86400;
方法三:echo abs(strtotime(“2021-2-5″)-strtotime(“2021-3-1″))/60/60/24 计算时间差

39.有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如何改善执行效率。(该函数必须自己实现,不能使用php函数)

<?php
function BubbleSort(&$arr){
 $cnt=count($arr);
 $flag=1;
 for($i=0;$i<$cnt;$i++){
 if($flag==0){
  return;
 }
 $flag=0;
 for($j=0;$j<$cnt-$i-1;$j++){
  if($arr[$j]>$arr[$j+1]){
   $tmp=$arr[$j];
   $arr[$j]=$arr[$j+1];
   $arr[$j+1]=$tmp;
   $flag=1;
  }
 }
 }
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);

推荐学习:《PHP视频教程

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

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제