您的位置:首页 > 职场人生

面试涉及的技术点

2013-03-17 18:20 169 查看
1.类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是:serialize() /unserialize()

serialize() 返回字符串,此字符串包含了表示
value
的字节流,可以存储于任何地方。

这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。
2. 一个函数的参数不能是对变量的引用,除非在php.ini中的语句 allow_call_time_pass_reference设为on.
3.PHP打印出前一天的时间格式是2006-5-10 22:21:22
echo date('Y-m-d H:i:s', strtotime('-1 day'));

4.如何实现字符串翻转?
答:.用strrev函数呗,不准用PHP内置的就自己写:

strrev($str)

{

$len=strlen($str);
$newstr= '';
for($i=$len;$i>=0;$i--)
{
$newstr.= $str{$i};
}
return $newstr;
}
5.PHP中传值和传引用、传地址的区别是什么?
答:传值是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值
传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象
6.
如何通过javascript判断一个窗口是否已经被屏蔽
答:获取open()的返回值,如果是null,就是屏蔽了
7.防止SQL注射漏洞一般用__addslashes___函数
8.请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?
1)选择最有效率的表名顺序
(2)WHERE子句中的连接顺序
(3)SELECT子句中避免使用‘*’
(4)用Where子句替换HAVING子句
(5)通过内部函数提高SQL效率
(6)避免在索引列上使用计算。
(7)提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。

9. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
parse_url — 解析
URL,返回其组成部分
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出php 或.php

答案1:

function
getExt($url){

$arr
= parse_url($url);

$file
= basename($arr['path']);

$ext
= explode(".",$file);

return
$ext[1];

}

答案2:

function getExt($url) {

$url = basename($url);

$pos1 =strpos($url,".");

$pos2 =strpos($url,"?");

if(strstr($url,"?")){

return
substr($url,$pos1 + 1,$pos2 - $pos1 - 1);

} else {

returnsubstr($url,$pos1);

}

}

在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分)

答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串

例子:

$str = <<<SHOW

my name is Jiang Qihui!

SHOW;

a. 从php的学习过程、工作内容方面简单介绍下自己, 参与过的项目、工作内容 描述下具体工作,讲述所做系统

b. 是否使用过Smarty ,smarty原理,smarty怎么才能使用一个想用的变量

php的smarty是一个php开发的模版系统,根本目的是为了实现页面和逻辑的分离,同时可以辅助我们进行php系统的快速开发,其中集成插件技术,缓存系统等技术,对前端页面优化和速度优化有很大的帮助作用,其中的编译型系统可以做到只需编译一次模版就可以长久使用。

实现原理:

1.php端逻辑实现文件(php文件)

2.模版文件(html文件)

3.编译系统把php逻辑实现文件和模版文件结合编译成静态html文件,即生成缓存文件

4.显示

使用assign()函数导入php中的变量

c. 编程习惯、工作中编码是否遵守一套的编码规范,还是随性而为

编码规范

d. 是否使用过SVN, 日常使用的操作

使用过,1、从服务器下载项目组最新代码。2、进入自己的分支,进行工作,每隔一个小时向服务器自己的分支提交一次代码(很多人都有这个习惯。因为有时候自己对代码改来改去,最后又想还原到前一个小时的版本,或者看看前一个小时自己修改了哪些代码,就需要这样做了)。3、下班时间快到了,把自己的分支合并到服务器主分支上,一天的工作完成,并反映给服务器。

e. 表单提交方式、区别,讲述一个账号注册登陆流程(从表单输入数据到入库)

表单提交有POST和GET两种方式, get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. get传送的数据量较小,不能大于2KB。post传送的数据量较大。get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

f. 文件上传流程 , php接收上传文件的函数

$_FILES()

g. 序列化、反序列化、

h. ajax请求流程,成功默认返回值是多少,一个Html页面里的标签有哪些,例如 <html><head></head><body> ,越多越好

成功默认返回的是:4

i. HTTP请求状态码都有哪些,列出知道的

200:请求成功,401未授权、403请求被服务器拒绝、404请求的资源不存在、

500 服务器内部错误,无法完成请求

j. 购物车问题:某商品有最后一个,几个用户同时发现了,同一时刻下单,怎样保证被多次购买

k. 如何获取服务器端、客户端ip

获取服务器ip:gethostbyname(“www.baidu.com”)

获取客户端ip:$_SERVER[‘REMOTE_ADDR’];

l. 如何控制错误报告级别

//报告所有的错误

error_reporting(E_ALL);

m. 正则匹配邮件, 说说思路即可

Function checkvalue(){

Var reg = /^[_a-z 0-9]+@([_a-z 0-9]+\.)+[a-z][0-9]{2,3}$/;

If(!R eg.test(a_form.email.value)){

Echo “请输入正确的邮箱”;

}

}

n. 如何不用中间变量实现交换两个变量的值?

o. $_SERVER['HTTP_REFERER'] 的作用

链接到当前页面的前一页面的url地址

i. 数据库安全优化 ——

i. 数据入库前的处理

数据库之前需要使用assslashes()函数对特殊字符使用反斜线进行转义,取出数据时使用StripSlashes()函数再将反斜线转义,使用htmlspecialchars()函数将
一些预定义的字符转化为html实体取出数据时使用htmlspecialchars_decode()函数再将html实体转化为预定义字符

ii. 数据库表的优化:

创建表时的空值和非空值设置有什么讲究;

不用再检查字段属性是否为空,这么做的话,可以加快后续处理的速度

字段长短设置,如果所有字段都是int或者char类型的,这个表叫做什么表, 有什么优点;

varchar、char区别;

1.CHAR的长度是固定的,而VARCHAR的长度是可以变化的,
比如,存储字符串“abc",对于CHAR (10),表示你存储的字符将占10个字节(包括7个空字符),而同样的VARCHAR2 (10)则只占用3个字节的长度,10只是最大值,当你存储的字符小于10时,按实际长度存储。

2.CHAR的效率比VARCHAR2的效率稍高。

何时该用CHAR,何时该用varchar2?

CHAR与VARCHAR是一对矛盾的统一体,两者是互补的关系.

VARCHAR比CHAR节省空间,在效率上比CHAR会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。

VARCHAR虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR会更好一些。

是否了解联合索引,优缺点;

联合索引是由多个字段组成的索引。
iii. 常见数据库引擎,innodb和myisam区别

1、myisam支持全文检索、Innodb不支持全文检索

2、Myisam不支持事务处理、innodb支持事务处理

3、Mysql磁盘空间占用较少

4、Innodb 不保存表的具体行数,就是在执行“select * from table”时需要重新扫描一遍整个表来计算有多少行。在myisam中只需要简单的读出保存好的行数就可以

5、当执行delete * from table时innodb 是一行一行的进行删除

(当应用程序执行的大部分是读取操作时(大于95%)而对表的改写只是偶尔发 生时应该选择mysql,他在数据读取操作的工作负荷中运行速度比较快)

iv. insert 和 replace区别

NSERT和REPLACE语句的功能都是向表中插入新的数据。这两条语句的语法类似。它们的主要区别是如何处理重复的数据。我们在使用数据库时可能会经常遇到这种情况。如果一个表在一个字段上建立了唯一索引,当我们再向这个表中使用已经存在的键值插入一条记录,那将会抛出一个主键冲突的错误。当然,我们可能想用新记录的值来覆盖原来的记录值。如果使用传统的做法,必须先使用DELETE语句删除原先的记录,然后再使用INSERT插入新的记录。而在MySQL中为我们提供了一种新的解决方案,这就是REPLACE语句。使用REPLACE插入一条记录时,如果不重复,REPLACE就和INSERT的功能一样,如果有重复记录,REPLACE就使用新记录的值来替换原来的记录值。

v. 是否能手写sql, sql书写习惯, 是否考虑大小写

一般都是手写sql、考虑

思想、知识面——

a. 平常工作中碰到技术问题,会通过哪些途径解决

碰到技术问题:一般会先在网上搜索一下,没有的话会去一些技术技术论坛发帖寻求帮助或查找相关问题的书籍

b. 读过哪些技术方面的书籍(在读的和计划读的)

目前正在看着杜江的《php5+mysql5web开发技术详解》、高洛峰的《细说php2》、计 划阅读linux方面《鸟哥的linux私房菜》还有就是一些优化数据库方面的书籍

c. 经常去的技术论坛

Csdn、php china、博客园 51cto技术论坛

非必须

a. 对MVC开发模式有什么认识? 是否使用过框架开发?

b. 是否接触过开源系统,bbs/cms

i. discuz最熟悉什么版本?

ii. dz用户登陆流程

iii. 同步登陆是如何实现的

iv. 后台计划任务如何实现的

v. 用户表数据量很大已经影响读写速度了,怎么办? 分表,如何解决id增长问题

c. linux操作系统的了解,打包、查看系统负责 , w , 编辑器 vi使用 : 删除、查找、替换

d. 了解或者使用过的缓存技术

e. 是否用过什么浏览器调试工具

f.

i. 你现在使用的Jquery版本是?

ii. jquery有哪些选择器

iii. 如何用Jquery实现一次ajax请求
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: