최근 여러 회사와 인터뷰를 하면서 스스로 배우고 발전할 것을 다짐하기 위해 몇 가지 중요한 질문을 녹음했습니다. 내용이 많아서 조금씩 개선하고 차근차근 배워나가겠습니다. 저도 친구들에게 조금이나마 도움이 되었으면 좋겠습니다. 1.
MySQL 관련 지식 1. MySQL 최적화 방법 MYSQL 최적화 일반적인 방법
2. 데이터베이스와 테이블 분할 방법 3. MySQL+로 듀얼 머신을 수행하는 방법 핫 스탠바이 및 로드 밸런싱
4. MySQL이란 무엇입니까? 데이터 테이블 유형은 MyISAM,
InnoDB, H
EAP, BOB, ARCHIVE, CSV 등입니다.
MyISAM: 성숙하고 안정적이며 관리하기 쉽고 읽기 빠릅니다. 일부 기능(트랜잭션 등)은 테이블 수준 잠금을 지원하지 않습니다.
InnoDB: 트랜잭션, 외래 키, 데이터 행 잠금과 같은 기능을 지원합니다. 많은 공간을 차지하고 전체 텍스트 색인 생성 등을 지원하지 않습니다. myisam과 Innodb 엔진의 주요 기능
MySQL의 스토리지 엔진인 MyISAM과 InnoDB의 차이점은 무엇인가요?
5. SQL 인젝션 방법 방지 mysql_escape_string
(
strip_tags
(
$arr["$val"]));
/**
* 函数名称:post_check()
* 函数作用:对提交的编辑内容进行处理
* 参 数:$post: 要提交的内容
* 返 回 值:$post: 返回过滤后的内容
*/
function post_check($post){
if(!get_magic_quotes_gpc()){// 判断magic_quotes_gpc是否为打开
$post =addslashes($post);// 进行magic_quotes_gpc没有打开的情况对提交数据的过滤
}
$post =str_replace("_","\_",$post);// 把 '_'过滤掉
$post =str_replace("%","\%",$post);// 把 '%'过滤掉
$post = nl2br($post);// 回车转换
$post =htmlspecialchars($post);// html标记转换
return $post;
}
자주 사용할지 여부 색인 시나리오:
using using ‐ ‐ ‐ ‐ ‐ ‐ 시나리오:
다음을 사용하여 ‐ ‐ to ‐‐‐‐‐‐ MYIsAM 테이블의 ' s ‐ ‐ 사용 ‐ ‐‐ ‐ 인덱싱할 , CHAR, VARCHAR, TEXT 유형의 열 생성 날짜.
8. 대용량 테이블(수천만개)에 대해 mysql을 최적화하는 방법은 무엇입니까?
9. mysql의 느린 쿼리 문제
사실 읽기 싫은 경우에는 느린 쿼리 로그를 통해 분석하는 것이 비교적 간단한 방법입니다. mysqldumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilter 등과 같은
도구를 사용하여 로그를 완료할 수 있습니다. 직접 분석하려면 풍부한 경험이 필요하고 낭비라고 생각합니다. 시간.
10. 사용자 로그인 상태에서 세션, 쿠키 또는 데이터베이스 또는 Memcache 저장의 장단점에 대해 http://www.dewen.org/q/11504/
세션%2Cookie 또는 데이터베이스 저장의 장단점에 대해 또는 사용자 로그인 상태에서 memcache
11. 트랜잭션 애플리케이션 극한 상황 처리
DDL--CREATE, DROP, ALTER
DML-- INSERT, UPDATE, DELETE취소, 커밋 ,롤백
2. PHP 기본
세션 간 도메인 공유
mysql 데이터베이스에 연결하는 PHP의 여러 가지 방법과 차이점
mysql: 프로세스 지향
mysqli: 객체 지향
pdo: 높은 이식성
을 참조하세요. php 기본 시리즈: PHP가 MySQL 데이터베이스에 연결하는 데 사용하는 세 가지 API
3. PHP 고급
길고 짧은 연결 사용
소켓 사용
결제 보안 문제
객체 지향
세 가지 주요 기능: 캡슐화, 상속, 다형성(메서드 재작성).
추상 클래스: 추상, 적어도 하나의 메서드는 추상 메서드이고 인스턴스화할 수 없으며 하위 클래스에 대한 공용 인터페이스를 정의합니다.
인터페이스: 인터페이스는 PHP의 단일 상속 문제를 해결합니다. 모든 메소드는 공개 액세스 권한이 있는 추상 메소드입니다. 변수는 선언할 수 없으며 상수만 가능합니다.
클래스를 상속하고 동시에 여러 인터페이스를 구현
클래스 A는 B를 확장하여 인터페이스 1, 인터페이스 2..., 인터페이스 n()을 구현합니다.{
성능 차이의 원인 분석
Memcached, Redis, Mongodb, 연결
7. 일반적으로 사용되는 Linux 명령
소프트 링크 8. 출시 전 아키텍처 관련 압력 테스트
, 단일에서 지원하는 동시성 수 서버, PV 수.配 서버 리소스의 합리적인 분배
하드 디스크: 파일
web2.0 아키텍처 선택
MongoDB+Redis 또는 MySQL+Memcached를 결합하는 것이 더 좋습니다. Nosql데이터 마이닝 경험, hadoop/lucene/mahout에 익숙함
저는 할 일이 없었고 답변을 찾았습니다. . . 포괄적이지 않을 수 있으므로 나중에 저장하겠습니다.
1. 기본 지식 포인트1.1 HTTP 프로토콜의 여러 상태 코드 의미: 503 500 401 403 404 200 301 302. . .
200: 요청이 성공했으며 요청한 데이터가 반환되었습니다.301 : 영구 리디렉션.
302: 임시 리디렉션.
401 : 현재 요청에는 사용자 확인이 필요합니다.
403: 서버가 요청 실행을 거부합니다. 즉, 권한이 없습니다.
404: 요청이 실패했습니다. 요청한 데이터를 서버에서 찾을 수 없습니다.
500 : 서버 오류입니다. 일반적인 서버측 프로그램 실행 오류입니다.
503: 서버가 일시적으로 점검 중이거나 과부하 상태입니다. 이 상태는 일시적입니다.
1.2 포함 require include_once require_once의 차이점
실패 처리가 다릅니다:
Include는 실패할 때만 경고 수준 오류를 생성하고 프로그램은 계속 실행됩니다.
include_once/require_once 및 include/require 오류는 동일한 방식으로 처리됩니다.
유일한 차이점은 포함된 파일 코드가 이미 존재하는 경우 더 이상 포함되지 않는다는 것입니다.
1.3 mysql4.0에서 4.1로, PHP 4.x에서 5.1로의 주요 개선 등 PHP/Mysql의 여러 버전의 진화 역사
문자열을 정의하는 방법을 소개합니다.
구조:<<<. 프롬프트 다음에 식별자(별도의 줄)를 정의하고
다음에 새 줄을 입력합니다. 다음은 문자열 자체입니다.
마지막으로 이전에 정의한 식별자를 끝 표시(별도의 줄)로 사용합니다.
참고:
식별자의 이름 지정은 다른 태그와 마찬가지로 PHP 규칙을 따라야 합니다.
문자, 숫자만 포함할 수 있습니다. 및 밑줄은 문자와 밑줄로 시작해야 합니다.
1.5 일부 PHP 마법(주문) 메서드 작성
__construct()는 클래스를 인스턴스화할 때 자동으로 호출됩니다.
__set()은 정의되지 않은 속성에 값을 할당할 때 호출됩니다.
__get()은 정의되지 않은 속성이 호출될 때 호출됩니다.
__isset()은 isset() 또는 empty() 함수를 사용할 때 호출됩니다.
__unset()은 unset()을 사용할 때 호출됩니다.
__sleep()은 직렬화를 사용하여 직렬화할 때 호출됩니다.
__wakeup()은 unserialize를 사용하여 deserialize할 때 호출됩니다.
__call()은 존재하지 않는 메서드를 호출할 때 호출됩니다.
__callStatic()이 존재하지 않는 정적 메서드를 호출합니다.
__toString()은 객체를 문자열로 변환할 때 호출됩니다. 에코와 같은.
__invoke() 객체를 메서드로 호출하려고 할 때 호출됩니다.
__set_state()는 var_export() 함수를 사용할 때 호출됩니다. 배열 매개변수를 허용합니다.
__clone() 객체를 복사하기 위해 clone을 사용할 때 호출됩니다.
1.6 PHP 컴파일 시 일부 구성 매개변수
–prefix=/usr/local/php PHP 설치 디렉터리
–with-config-file-path=/usr/local/php/etc php.ini 위치 지정
–with-mysql =/usr/local/mysql mysql 설치 디렉터리, mysql 지원
–with-mysqli=/usr/local/mysql/bin/mysql_config mysqli 파일 디렉터리, 최적화 지원
–enable-safe-mode 안전 모드 켜기
–활성화 -ftp FTP 지원 켜기
–enable-zip zip 지원 켜기
–with-bz2 bz2 파일 지원 켜기
–with-jpeg-dir jpeg 이미지 지원 켜기
–with-png-dir png 이미지 지원 켜기
–with-freetype-dir은 자유 유형 글꼴 라이브러리에 대한 지원을 엽니다.
–without-iconv는 iconv 기능을 닫고 문자 집합 간 변환을 시작합니다.
–with-libxml-dir은 libxml2 라이브러리에 대한 지원을 엽니다.
–with-xmlrpc는 다음의 c 언어를 엽니다. xml-rpc
–with-zlib-dir은 zlib 라이브러리 지원을 켭니다.
–with-gd는 gd 라이브러리 지원을 켭니다.
./configure help를 사용하여 볼 수 있습니다.
1.7 매개 변수를 전달하는 세 가지 방법 php 메소드로.
방법 1 $argc 사용 $argv
방법 2 getopt function() 사용
방법 3 사용자에게 입력하라는 메시지를 표시한 다음 입력 매개변수를 가져옵니다. C 언어와 약간 비슷합니다
1.8(mysql) 데이터 유형의 의미를 적어주세요(int char varchar datetime text) varchar와 char의 차이점은 무엇인가요?
int: 숫자 유형
char: 고정 길이 문자열 유형
varchar: 가변 길이 문자열 유형
datetime: 기간 시간 유형
text: 텍스트 유형
varchar과 char의 차이점은 무엇입니까:
a char의 길이는 저장한 데이터 양에 관계없이 고정됩니다. 고정 길이.
Varchar에는 가변 길이가 있지만 전체 길이에 1자를 추가해야 합니다. 이는 위치를 저장하는 데 사용됩니다.
b.char는 길이가 고정되어 있어 처리 속도 면에서는 훨씬 빠르지만 저장 공간을 낭비합니다.
그래서 저장 공간은 크지 않지만 속도 요구 사항이 있는 경우 char 유형을 사용할 수 있습니다. 그렇지 않으면 varchar 유형을 사용하여 인스턴스화할 수 있습니다.
1.9 error_reporting과 같은 디버깅 함수는
error_reporting() 함수를 사용하여 런타임 시 php.ini에 error_reporting 지시어를 설정합니다.
따라서 프로그램에서 언제든지 표시되는 오류 수준을 조정할 수 있습니다.
이 기능을 사용할 때는 display_errors가 켜져 있어야 합니다.
1.10 버전 관리 소프트웨어를 사용해 본 적이 있나요? 그렇다면 사용하는 버전 관리 소프트웨어의 이름은 무엇입니까?
1.11 posix와 perl 표준 정규식의 차이점
1.12 Safe_mode를 설정한 후 제한 사항은 무엇입니까?
start safe_mode는 많은 PHP 기능, 특히 시스템 관련 파일 열기, 명령 실행 및 기타 기능을 제한합니다.
파일을 작동하는 모든 기능은 스크립트와 동일한 UID를 가진 파일만 작동합니다. multi-process/ 스레드가 동시에 파일을 읽고 쓰는 문제입니다.
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // 배타적 잠금 수행
fwrite($fp, "Write Something heren" );
flock($fp, LOCK_UN); // 잠금 해제
} else {
echo "파일을 잠글 수 없습니다!";
}
fclose($fp);
1.14 写一段上传文件的代码。
upload.html
<form enctype="multipart/form-data" method="POST" action="upload.php"> Send this file: <input name="name" type="file" /> <input type="submit" value="Send File" /> </form> upload.php $uploads_dir = '/uploads'; foreach ($_FILES["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["tmp_name"][$key]; $name = $_FILES["name"][$key]; move_uploaded_file($tmp_name, "$uploads_dir/$name"); } }
1.15 Mysql 的存储引擎,myisam和innodb的区别。
a. MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.
b. MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快.
c. InnoDB不支持FULLTEXT类型的索引.
d. InnoDB 中不保存表的具体行数,也就是说,
执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,
但是MyISAM只要简单的读出保存好的行数即可.
e. 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
f. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
g. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,
但是对于使用的额外的InnoDB特性(例如外键)的表不适用.
h. MyISAM支持表锁,InnoDB支持行锁。
二. web 架构,安全,项目经验
2.1 介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。
2.2 使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
首先,打开mod_rewrite模块。
其次,http.conf找到以下代码段:
<Directory /> Options FollowSymLinks AllowOverride None </Directory>
将其中的:AllowOverride None 改为 AllowOverride All ,重启httpd服务即可。
然后,在项目根目录下简历 .htaccess 文件,填写规则。
2.3 MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
c. mysql库主从读写分离。
d. 找规律分表,减少单表中的数据量提高查询速度。
e。添加缓存机制,比如memcached,apc等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
2.4 写出一种排序算法(原理),并说出优化它的方法。
2.5 请简单阐述您最得意的开发之作
2.6 对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
a. 确认服务器是否能支撑当前访问量。
b. 优化数据库访问。参考2.3
c. 禁止外部访问链接(盗链), 比如图片盗链。
d. 控制文件下载。
e. 使用不同主机分流。
f. 使用浏览统计软件,了解访问量,有针对性的进行优化。
2.7 您是否用过模板引擎? 如果有您用的模板引擎的名字是?
Smarty
2.8 请介绍Session的原理,大型网站中Session方面应注意什么?
2.9 测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
2.10 웹페이지의 모든 링크를 정기적으로 제안합니다.
2.11 일반적인 SSO(Single Sign-On) 솔루션의 원칙을 소개합니다(예: discuz 여권을 통합하는 Dedecms).
2.12 당신이 작성한 PHP 프레임워크의 특징은 무엇이며, 주로 어떤 문제를 해결하며, 다른 프레임워크와의 차이점은 무엇입니까?
2.13 대규모 포럼/뉴스 기사 시스템/SNS 웹 사이트 간의 성능 최적화 차이점은 무엇입니까?
2.14 사진 앨범 응용 프로그램: 여러 파일을 브라우저에서 동시에 선택하여 업로드해야 하며, 이미지를 잘라내고 압축해야 합니다. 측면 감압. 최대 50M까지 단일 파일을 업로드할 수 있습니다. 업로드 프로세스 중에는 진행률 표시줄이 표시됩니다. 사진마다 4가지 크기의 썸네일이 생성될 수 있으며, 플래시 재생을 위해서는 비디오 파일을 flv로 변환해야 합니다. 다룰 다양한 유형의 오픈 소스 소프트웨어와 그 간단한 사용법을 설명합니다.
원숭이 무리가 원을 그리며 줄을 서고 1, 2,...,n에 따라 번호가 매겨져 있습니다. 그런 다음 첫 번째부터 세기 시작하고, m 번째까지 세고, 원 밖으로 쫓아내고, 뒤에서 세기 시작하고, m 번째까지 세고, 쫓아내고... 끝까지 이런 식으로 계속합니다. 이제 원숭이는 한 마리밖에 남지 않았는데, 그 원숭이를 왕이라고 부릅니다. 이 과정을 시뮬레이션하여 m, n을 입력하고 마지막 왕의 수를 출력하는 프로그래밍이 필요합니다. 프로그램을 사용하여 이 프로세스를 시뮬레이션합니다.
3. unix/linux의 기본 사용법
3.1 Linux에서 현재 시스템 로드 정보를 보는 몇 가지 방법.
3.2 vim의 기본 단축키.
3.3 SSH 보안 강화 방법, 비밀번호 모드 및 RSA 키 모드 구성.
3.4 rpm/apt/yum/ports 패키지 설치, 쿼리, 삭제를 위한 기본 명령입니다.
3.5 Makefile의 기본 형식, gcc 컴파일 및 연결 명령, -O0과 -O3의 차이점.
3.6 gdb, strace, valgrind의 기본 사용.
4. 프런트엔드, HTML, JS
css 박스 모델.
자바스크립트의 프로토타입.
자바스크립트에서 이 개체의 범위입니다.
IE와 Firefox의 이벤트 버블링 차이.
이상한 모드, 표준 모드, 준표준 모드는 무엇인가요?
DTD의 정의
IE/firefox에서 일반적으로 사용되는 해킹
firefox, IE의 프런트엔드 js/css 디버깅 도구입니다.
5. ThinkPHP 3.0 아키텍처 3(코어 + 동작 + 드라이버)의 동작을 어떻게 이해합니까?
Core + Behavior + Driver
TP의 공식 약어는 CBD입니다.
이 문제는 TP 매뉴얼에 자세히 설명되어 있습니다. .
Core: 프레임워크의 핵심 코드이며 없어서는 안 될 요소입니다. TP 자체가 MVC 아이디어를 기반으로 개발된 프레임워크입니다.
동작: 동작은 ThinkPHP 새 버전의 아키텍처에서 결정적인 역할을 합니다. 시스템 코어 위에는 많은 태그 확장 비트가 있으며, 각 태그 위치는 차례로 고유한 동작을 실행할 수 있습니다. 이것이 행동 확장이 탄생한 방식이며, 많은 시스템 기능도 내장된 행동 확장을 통해 완성되며, 모든 행동 확장은 교체 가능하고 추가되어 기본 프레임워크 조립의 기반을 형성합니다.
드라이버: 데이터베이스 드라이버, 캐시 드라이버, 태그 라이브러리 드라이버, 템플릿 엔진 드라이버 및 외부 클래스 확장.
가장 좋은 점은 문서를 다운로드하여 읽어보는 것입니다. 기본적으로 TP의 모든 기능에는 매우 자세한 설명과 예제가 포함되어 있습니다.
프레임워크. 실제로 이는 특정 응용 프로그램의 반제품이며, 자신의 시스템을 완성하기 위해 선택하고 사용할 수 있는 구성 요소 집합입니다. 쉽게 말하면 남들이 만들어 놓은 무대를 이용해서 퍼포먼스를 하는 거죠. 게다가 프레임워크는 일반적으로 성숙하고 지속적으로 업그레이드되는 소프트웨어입니다.
프레임을 사용하는 이유는 무엇인가요?
오늘날 소프트웨어 시스템의 개발이 매우 복잡해졌기 때문입니다. 특히 서버 측 소프트웨어의 경우 설계에 너무 많은 지식, 콘텐츠 및 문제가 필요합니다. 다른 사람의 성숙한 프레임워크를 사용하는 것은 일부 기본 작업을 완료하는 데 다른 사람에게 도움을 요청하는 것과 같습니다. 시스템의 비즈니스 로직 설계를 완료하는 데만 집중하면 됩니다. 더욱이 프레임워크는 일반적으로 성숙하고 강력하며 트랜잭션 처리, 보안, 데이터 흐름 제어 및 기타 문제와 같은 시스템의 많은 세부 문제를 처리할 수 있습니다. 또한, 프레임워크는 일반적으로 많은 사람들이 사용하기 때문에 구조가 매우 좋아 확장성도 매우 좋고, 지속적으로 업그레이드되어 다른 사람들이 업그레이드한 코드의 혜택을 직접 누릴 수 있습니다.
프레임워크는 일반적으로 낮은 수준의 애플리케이션 플랫폼(예: Java의 J2EE)과 높은 수준의 비즈니스 로직 사이의 중간 계층입니다.
ThinkPHP는 엔터프라이즈급 애플리케이션 개발과 민첩한 WEB 애플리케이션 개발을 단순화하기 위해 탄생한 오픈 소스 PHP 프레임워크입니다.
원래 FCS로 알려졌으나 2007년 새해 첫날 공식적으로 ThinkPHP로 이름이 바뀌었습니다. Apache2 오픈 소스 계약. 초기 이념적 아키텍처는 Struts에서 시작되었습니다. 이후 지속적인 개선과 개선을 거쳐 객체 지향 개발 구조와 MVC 모델을 사용하고 Struts의 Action 및 Dao 아이디어와 JSP의 TagLib(Tag 라이브러리)을 통합하여 많은 우수한 외국 프레임워크 및 모델로부터 배웠습니다. ), CURD 및 일부 일반적인 작업, 단일 입력 모드 등을 캡슐화하는 RoR의 ORM 매핑 및 ActiveRecord 모드는 템플릿 엔진, 캐싱 메커니즘, 인증 메커니즘 및 확장성에서 고유한 성능을 제공합니다
ThinkPHP를 사용하면 보다 편리하고 빠른 개발이 가능합니다. 물론 엔터프라이즈급 애플리케이션뿐만 아니라 모든 PHP 애플리케이션 개발은 ThinkPHP의 단순성, 호환성 및 속도의 이점을 누릴 수 있습니다. 단순성, 속도 및 실용성은 ThinkPHP 개발의 원칙입니다. 이를 위해 ThinkPHP는 더 나은 기술을 흡수하고 통합하여 신선함과 활력을 보장하고 WEB 애플리케이션 개발을 위한 모범 사례를 제공할 것입니다!
전체 개발 솔루션인 ThinkPHP는 기본 아키텍처, 호환성 처리, 기본 클래스 라이브러리, 데이터베이스 액세스 계층, 템플릿 엔진, 캐싱 메커니즘, 플러그인 메커니즘 및 역할 인증을 포함하므로 애플리케이션 개발의 대부분의 요구 사항을 해결할 수 있습니다. 양식 처리 및 기타 일반적으로 사용되는 구성 요소이며 버전 간, 플랫폼 간 및 데이터베이스 간 이식에 더 편리합니다. 그리고 각 구성 요소는 신중하게 설계되고 완벽해졌으며 애플리케이션 개발 프로세스는 비즈니스 로직에만 집중하면 됩니다.
관련 추천:
php 면접 질문 3 - PHP 언어 기초(기본 부분) php 고급 면접 질문 php 주니어 면접 질문 php mysql 면접 질문
PHP에 대한 지식을 반영하는 8가지 PHP 인터뷰 질문
위 내용은 PHP 고급 면접 질문 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!