您的位置:首页 > 编程语言 > PHP开发

高级php研发笔试题

2017-07-20 18:38 253 查看

一. mysql

1.mysql 索引(全文索引,聚簇索引)
http://www.cnblogs.com/yuan-shuai/p/3225417.html
2.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支持行锁。


3.mysql优化方式

MYSQL 优化常用方法(http://blog.csdn.net/jinxingfeng_cn/article/details/16878355)

mysql 性能优化方案(http://blog.csdn.net/jinxingfeng_cn/article/details/16878295)

4.如何分库分表

http://blog.sina.com.cn/s/blog_6e322ce70100zs9a.html
http://blog.51yip.com/mysql/949.html
5.Mysql+如何做双机热备和负载均衡
http://www.cnblogs.com/renxing123/p/6024391.html
6.数据表类型有哪些

MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等
MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。


7.索引应用

什么情况下考虑索引
什么情况不适合索引
一个语句是否用到索引如何判断
经常发生的用不到索引的场景:
like '%.....'
数据类型隐式转换
or 关键字加其它条件约束
全文索引:
只能用于MYIsAM表,在CHAR,VARCHAR,TEXT类型的列上创建


8.mysql把一个大表拆分多个表后,如何解决跨表查询效率问题
http://www.eduyo.com/doc/mysql/storage-engines.html#merge-storage-engine
9.mysql对于大表(千万级),要怎么优化呢?

http://www.zhihu.com/question/19719997

10.mysql的慢查询问题

其实通过慢查询日志来分析是一种比较简单的方式,如果不想看日志,可以借助工具来完成,
如mysqldumpslow, mysqlsla, myprofi, mysql-explain-slow-log, mysqllogfilter等,感觉自己来分析一个需要丰富的经验,一个浪费时间。


11.sql语言分4大类请列举

DDL--CREATE,DROP,ALTER
DML--INSERT,UPDATE,DELETE
DQL-SELECT
DCL--GRANT,REVOKE,COMMIT,ROLLBACK


12 (mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;

int : 数值类型
char : 固定长度字符串类型
varchar : 可变长度字符串类型
datetime : 时期时间类型
text : 文本类型

varchar和char有什么区别:
a. char 长度是固定的,不管你存储的数据是多少他都会是固定的长度。
而varchar则是可变长度但他要在总长度上加1字符,这个用来存储位置。

b. char 固定长度,所以在处理速度上要比varchar快速很多,但是浪费存储空间,
所以对存储不大,但在速度上有要求的可以使用char类型,反之可以用varchar类型来实例。


二. redis 和 memcache

1.redis 和 memcache 区别
http://blog.csdn.net/sunmenggmail/article/details/36176029 http://blog.csdn.net/tonysz126/article/details/8280696/ http://blog.csdn.net/u013474436/article/details/48632665 http://www.cnblogs.com/Hondsome/p/5962144.html

三. 如何建立集群

四.关于用户登录状态存session,cookie还是数据库或者memcache的优劣

五. HTTP协议

1.HTTP中几个状态码的含义:

503 500 401 403 404 200 301 302。。。

200 : 请求成功,请求的数据随之返回。
301 : 永久性重定向。
302 : 暂时行重定向。
401 : 当前请求需要用户验证。
403 : 服务器拒绝执行请求,即没有权限。
404 : 请求失败,请求的数据在服务器上未发现。
500 : 服务器错误。一般服务器端程序执行错误。
503 : 服务器临时维护或过载。这个状态时临时性的。


六.Nosql数据库

1.memcached、redis、mongodb的区别联系

3个场景完全不同的东西。
1.memcached:单一键值对内存缓存的,做对象缓存无可替代的分布式缓存;
2.redis:是算法和数据结构的集合,快速的数据结构操作是他最大的特点,支持数据持久化;
3.mongodb是bson结构、介于rdb和nosql之间的,更松散更灵活的,但是不支持事务,只用作非重要数据存储。


七.linux

1.常用linux命令

2.linux下查看当前系统负载信息的一些方法。

3.vim的基本快捷键。

4.ssh 安全增强方法;密码方式和rsa key 方式的配置。

5.rpm/apt/yum/ports 装包,查询,删除的基本命令。

6.Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。

7.gdb,strace,valgrind的基本使用.

八.架构相关

1.项目上线前的压力测试,单台服务器支持的并发数,pv数。

2.服务器资源合理分配问题

CPU:Apache
MySQL处在高负载环境下,磁盘IO读写过多,肯定会占用很多资源,必然会CPU占用过高。
内存:内存库,数据库软件
硬盘:文件
web2.0架构选择
MongoDB+redis 或者 MySQL+Memcached 比较好的组合,逻辑简单的就用NOSQL


3.当前流行主要网站架构

LAMP、LNMP、LLMP

现在网络上还有一种LNAMP构架,也就是综合了nginx和Apache的优点,使用Apache负载PHP,nginx负责解析其他Web请求,使用nginx的rewrite模块,但是Apache端口不对外开放,Apache的许多模块都可以不加载减少资源。

九.web 架构,安全,项目经验

1.介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。

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 文件,填写规则。


3.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
c. mysql库主从读写分离。
d. 找规律分表,减少单表中的数据量提高查询速度。
e。添加缓存机制,比如memcached,apc等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的SQL。比如 S
4000
ELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.


4.对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题

a. 确认服务器是否能支撑当前访问量。
b. 优化数据库访问。参考2.3
c. 禁止外部访问链接(盗链), 比如图片盗链。
d. 控制文件下载。
e. 使用不同主机分流。
f. 使用浏览统计软件,了解访问量,有针对性的进行优化。


5.写出一种排序算法(原理),并说出优化它的方法。

6.您是否用过模板引擎? 如果有您用的模板引擎的名字是?

Smarty


7.请介绍Session的原理,大型网站中Session方面应注意什么?

8.测试php性能和mysql数据库性能的工具,和找出瓶颈的方法

9.正则提出一个网页中的所有链接.

10.介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理

11.您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。

12.大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?

13.相册类应用:

要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。

14.一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。

十.php基础

1.session的跨域共享

2.php连接mysql数据库的几种方式及区别

mysql:面向过程
mysqli:面向对象
pdo:可移植性高


3.长连接和短连接的使用

4.socket的使用

5.支付安全问题

6.面向对象

7.lamp 和 lnmp 网站架构性能差异的原因分析

8.正则

email,html,js等匹配


9.进程和线程定义,区别和联系。

进程的状态:运行run、就绪ready、等待wait


10.Include require include_once require_once 的区别.

处理失败方式不同:
require 失败时会产生一个致命级别错误,并停止程序运行。
include 失败时只产生一个警告级别错误,程序继续运行。
include_once/require_once和include/require 处理错误方式一样,
唯一区别在于当所包含的文件代码已经存在时候,不在包含。


11.PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。

12.HEREDOC介绍

一种定义字符串的方法。

结构:
<<<。在该提示符后面,要定义个标识符(单独一行),
然后是一个新行。接下来是字符串 本身,
最后要用前面定义的标识符作为结束标志(单独一行)
注意:
标识符的命名也要像其它标签一样遵守PHP的规则:
只能包含字母、数字和下划线,并且必须以字母和下划线作为开头


13.写出一些php魔幻(术)方法:

__construct() 实例化类时自动调用。
__destruct() 类对象使用结束时自动调用。
__set() 在给未定义的属性赋值的时候调用。
__get() 调用未定义的属性时候调用。
__isset() 使用isset()或empty()函数时候会调用。
__unset() 使用unset()时候会调用。
__sleep() 使用serialize序列化时候调用。
__wakeup() 使用unserialize反序列化的时候调用。
__call() 调用一个不存在的方法的时候调用。
__callStatic()调用一个不存在的静态方法是调用。
__toString() 把对象转换成字符串的时候会调用。比如 echo。
__invoke() 当尝试把对象当方法调用时调用。
__set_state() 当使用var_export()函数时候调用。接受一个数组参数。
__clone() 当使用clone复制一个对象时候调用。


14.向php传入参数的三种方法。

方法一 使用$argc $argv

方法二 使用getopt函数()

方法三 提示用户输入,然后获取输入的参数。有点像C语言


15.error_reporting 等调试函数使用

error_reporting() 函数能够在运行时设置php.ini中 error_reporting 指令。
所以可以再程序中随时调节显示的错误级别。
使用此函数时 display_errors必须是打开状态。


16.您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?

17.posix和perl标准的正则表达式区别;

18.Safe_mode 打开后哪些地方受限.

启动safe_mode,会对许多PHP函数进行限制,特别是和系统相关的文件打开、命令执行等函数.
所有操作文件的函数将只能操作与脚本UID相同的文件.


19.写代码来解决多进程/线程同时读写一个文件的问题。

PHP是不支持多线程的,可以使用php的flock加锁函数实现。
$fp = fopen("/tmp/lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // 进行排它型锁定
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // 释放锁定
} else {
echo "Couldn't lock the file !";
}
fclose($fp);


10.写一段上传文件的代码。

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");
}
}


11.如何理解 ThinkPHP 3.0 架构三(核心 + 行为 + 驱动)中的行为?

核心 + 行为 + 驱动
TP官方简称为:CBD
这个问题,在TP手册中已经有委详细地阐述了。。
核心(Core):就是框架的核心代码,不可缺少的东西,TP本身是基于MVC思想开发的框架。
行为(Behavior) :行为在新版ThinkPHP的架构里面起着举足轻重的作用,在系统核心之上,设置了很多标签扩展位,而每个标签位置可以依次执行各自的独立行为。行为扩展就因此而诞生了,而且很多系统功能也是通过内置的行为扩展完成的,所有行为扩展都是可替换和增加的,由此形成了底层框架可组装的基础。
驱动( Driver ):数据库驱动、缓存驱动、标签库驱动和模板引擎驱动,以及外置的类扩展。
最好就是下载一份文档下来看,基本上TP里面所有的功能,都会有很详细的描述和范例讲解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔试题