我爱编程

php-面试第一篇

2017-12-05  本文已影响41人  像敏锐的狗

一、html 部分 1,请阐述你对WEB标准以及W3C的理解与认识标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维 护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性; 2,请描述一个网页从开始请求到最终显示的完整过程?一般可分为7个步骤: 1).在浏览器中输入网址; 2).发送至DNS服务器并获得域名对应的WEB服务器的IP地址; 3).与WEB服务器建立TCP连接; 4).浏览器向WEB服务器的IP地址发送相应的HTTP请求; 5).WEB服务器响应请求并返回指定的URL的数据,或错误信息,如果设定重定向,则重定向到新的URL地址。 6).浏览器下载数据后解析HTML源文件,解析的过程中实现对页面的排版,解析完成后在浏览器中显示基础页面。 7).分析页面中的超链接并显示在当前页面,重复以上过程直至无超链接需要发送,完成全部显示。 3,xhtml和html有什么区别HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:XHTML 元素必须被正确地嵌套。XHTML 元素必须被关闭。标签名必须用小写字母。XHTML 文档必须拥有根元素。 4,DOCTYPE声明的作用是什么?严格模式与混杂模式如何区分?HTML语言已经存在太久了,目前必然会有一些不同版本的文档存在。为了能够让浏览器清楚你的文档的版本、类型和风格,需要在文档的起始用DOCTYPE声明指定当前文档的版本和风格。如果在网页中提供了版本信息,则可以有利于验证页面中的代码是否符合当前的版本和风格。<!DOCTYPE>声明位于文档中的最前面,处于标签之前,告知浏览器的解析器,用什么文档类型规范来解析这个文档。在严格模式(标准模式)中,浏览器根据规范呈现页面;在混杂模式中,页面以向后兼容的方式显示,以防止老站点无法工作。如果HTML文档包含形式完整的DOCTYPE,那么它一般以标准模式呈现。对于HTML4.01文档,包含严格DTD的DOCTYPE常常导致页面以标准模式呈现。DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。 5,行内元素有哪些?块级元素有哪些?行内元素:a、b、span、img、input、strong、select、label、em、button、textarea块级元素:div、ul、li、dl、dt、dd、p、h1-h6、blockquote空元素:即系没有内容的HTML元素,例如:br、meta、hr、link、input、img    6,img标签上title与alt属性的区别是什么?Alt 当图片不显示是 用文字代表。Title 为该属性提供信息 7,前端页面有哪三层构成,分别是什么?作用是什么?结构层 Html 表示层 CSS 行为层 js 8,简要描述常见的浏览器内核。IE,火狐Firefox,谷歌Chrome,opear,Safari浏览器内核赋值对网页语法的解释并显示网页,它决定了浏览器如何显示网页的内容以及页面的格式信息。常见的浏览器内核:IE浏览器内核:TridentMozilla浏览器内核,如Firefox:GeckoSafari浏览器内核,也是Chrome浏览器的内核:WebkitChrome浏览器和,Opera浏览器内核:Blink 9,简述一下src与href的区别href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置; 在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。 当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕, 图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。 10,锚点的作用是什么?如何创建锚点?锚点是文档中某行的一个记号,类似于书签,用于链接到文档中的某个位置。当定义锚点后,我们可以创建直接跳至该锚点(比如页面中某个小节)的链接,这样使用者就无需不停地滚动页面来寻找他们需要的信息了。在使用元素创建锚点时,需要使用name属性为其命名,代码如下所示:锚点一然后就可以创建链接,直接跳转到锚点,代码如下所示:回到锚点一二、html5 部分 1,HTML5为什么只需要写?HTML5不基于SGML,因此不需要对DTD进行引用,但是需要DOCTYPE来规范浏览器的行为(让浏览器按照它们应该的方式来运行);HTML4.01基于SGML,所以需要对DTD进行引用,才能让浏览器知道该文档所使用的文档类型。 2,新的 HTML5 文档类型和字符集分别是什么?HTML5 文档类型很简单:HTML5 使用 UTF-8 编码示例: 3, HTML5 的Canvas 元素有什么用?Canvas 元素用于在网页上绘制图形,该元素标签强大之处在于可以直接在 HTML 上进行图形操作,

4,HTML5 有哪些新增的表单元素?HTML5 新增了很多表单元素让开发者构建更优秀的 Web 应用程序。  ● datalist  ● datetime  ● output  ● keygen  ● date  ● month  ● week  ● time  ● color  ● number  ● range  ● email  ● url  5,HTML5 废弃了哪些 HTML4 标签?HTML5 废弃了一些过时的,不合理的 HTML 标签:  ● frame  ● frameset  ● noframe  ● applet  ● big  ● center  ● basefront  6,HTML5 标准提供了哪些新的 API?HTML5 提供的应用程序 API 主要有:  ● Media API  ● Text Track API  ● Application Cache API  ● User Interaction  ● Data Transfer API  ● Command API  ● Constraint Validation API  ● History API  7,HTML5 应用程序缓存和浏览器缓存有什么区别?应用程序缓存是 HTML5 的重要特性之一,提供了离线使用的功能,让应用程序可以获取本地的网站内容,例如 HTML、CSS、图片以及 JavaScript。这个特性可以提高网站性能,它的实现借助于 manifest 文件,如下:…..与传统浏览器缓存相比,它不强制用户访问的网站内容被缓存。三、css 部分  1,什么是盒子模型?在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分。这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或区域。4个部分一起构成了css中元素的盒模型。  2,什么是CSS Hack?一般来说是针对不同的浏览器写不同的CSS,就是 CSS Hack。IE浏览器Hack一般又分为三种,条件Hack、属性级Hack、选择符Hack(详细参考CSS文档:css文档)。例如:// 1、条件Hack// 2、属性Hack.test{color:#090\9; /* For IE8+ */*color:#f00;  /* For IE7 and earlier */_color:#ff0;  /* For IE6 and earlier */}// 3、选择符Hack* html .test{color:#090;}      /* For IE6 and earlier */* + html .test{color:#ff0;}    /* For IE7 */  3,清除浮动的几种方式,各自的优缺点1.使用空标签清除浮动 clear:both(理论上能清楚任何标签,,,增加无意义的标签)2.使用overflow:auto(空标签元素清除浮动而不得不增加无意代码的弊端,,使用zoom:1用于兼容IE)3.是用afert伪元素清除浮动(用于非IE浏览器)  4,CSS引入的方式有哪些? link和@import的区别是?内联 内嵌 外链 导入区别 :同时加载前者无兼容性,后者CSS2.1以下浏览器不支持Link 支持使用javascript改变样式,后者不可  5,px和em有什么区别?px和em都是长度单位,区别是,px的值是固定的,指定是多少就是多少,计算比较容易。em得值不是固定的,并且em会继承父级元素的字体大小。浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em四、javascript 部分  1,解释jsonp的原理,以及为什么不是真正的ajaxjsonp是动态创建script标签,回调函数。而Ajax是页面无刷新请求数据操作。利用在页面中创建节点的方法向不同域提交HTTP请求的方法称为JSONP,这项技术可以解决跨域提交Ajax请求的问题。JSONP的工作原理如下所述: 假设在http://example1.com/index.php这个页面中向http://example2.com/getinfo.php提交GET请求,我们可以将下面的JavaScript代码放在http://example1.com/index.php这个页面中来实现: var eleScript= document.createElement("script"); eleScript.type = "text/javascript"; eleScript.src = "http://example2.com/getinfo.php"; document.getElementsByTagName("HEAD")[0].appendChild(eleScript);当GET请求从http://example2.com/getinfo.php返回时,可以返回一段JavaScript代码,这段代码会自动执行,可以用来负责调用http://example1.com/index.php页面中的一个callback函数。 JSONP的最基本的原理是:动态添加一个标签,而script标签的src属性是没有跨域的限制的。这样说来,这种跨域方式其实与ajax XmlHttpRequest协议无关了。  2,解释javascript的本地对象,内置对象和宿主对象本地对象为array obj regexp等可以new实例化内置对象为gload Math 等不可以实例化的宿主为浏览器自带的document,window 等  3, 列举流行的 Ajax 框架?说明 Ajax 实现原理是什么及 json 在 Ajax 中起什么作用?流行的 Ajax 框架有 jQuery,Prototype,Dojo,MooTools。Ajax 的工作原理是一个页面的指定位置可以加载另一个页面所有的输出内容,这样就实现了一个静态页面也能获取到数据库中的返回数据信息了。所以 Ajax 技术实现了一个静态网页在不刷新整个页面的情况下与服务器通信,减少了用户等待时间,同时也从而降低了网络流量,增强了客户体验的友好程度。在使用 Ajax 时,涉及到数据传输,即将数据从服务器返回到客户端,服务器端和客户端分别使用不同的脚步语言来处理数据,这就需要一种通用的数据格式,XML 和 json 就是最常用的两种,而 json 比 XML 更简单。  4,请写出ajax的优点和缺点优点:无数新更新数据、异步与服务器通信、前端和后端负载平衡、基于标准被广泛支持、界面与应用分离缺点:安全问题、对搜索引擎支持较弱、破坏程序的异常处理机制、违背URL和资源定位的初衷、      AJAX不能很好支持移动设备、客户端过肥,太多客户端代码造成开发上的成本  5,事件委托是什么?利用冒泡的原理,把事件加到父级上,触发执行效果。通俗的讲,事件就是onclick,onmouseover,onmouseout,等就是事件,委托呢,就是让别人来做,这个事件本来是加在某些元素上的,然而你却加到别人身上来做,完成这个事件。五、jquery 部分  1、Jquery的美元符号$有什么作用?美元符号$只是”jQuery”的别名,它是jQuery的选择器,如下代码:  $(document).ready(function(){      });当然你也可以用jQuery来代替$,如下代码:  jQuery(document).ready(function(){      });jQuery中就是通过这个美元符号来实现各种灵活的DOM元素选择的,例如$(“#main”)即选中id为main的元素。  2、body中的onload()函数和jQuery中的document.ready()有什么区别?onload()和document.ready()的区别有以下两点:1)、我们可以在页面中使用多个document.ready(),但只能使用一次onload()。2)、document.ready()函数在页面DOM元素加载完以后就会被调用,而onload()函数则要在所有的关联资源(包括图像、音频)加载完毕后才会调用。  3、Jquery中有哪几种类型的选择器?从我自己的角度来讲,可以有3种类型的选择器,如下:1)、基本选择器:直接根据id、css类名、元素名返回匹配的dom元素。2)、层次选择器:也叫做路径选择器,可以根据路径层次来选择相应的DOM元素。3)、过滤选择器:在前面的基础上过滤相关条件,得到匹配的dom元素。4)、请使用jQuery将页面上的所有元素边框设置为2px宽的虚线?代码如下:                $("*").css("border", "2px dotted red");4、如何使用jQuery实现点击按钮弹出一个对话框?代码如下:html:jQuery:$(document).ready(function ()

{

$(‘#Button1′).click(function () { alert($(‘#inputField’).attr(“value”));

} );

5、$(document).ready() 是个什么函数?为什么要用它?

ready() 函数用于在文档进入ready状态时执行代码。

当DOM 完全加载(例如HTML被完全解析DOM树构建完成时),jQuery允许你执行代码。

使用$(document).ready()的最大好处在于它适用于所有浏览器,jQuery帮你解决了跨浏览器的难题。

6、你如何使用jQuery设置一个属性值?

$('#obj').attr(name, value)

7、你如何利用jQuery来向一个元素中添加和移除CSS类?

通过利用 addClass() 和 removeClass() 这两个 jQuery 方法。

动态的改变元素的class属性可以很简单例如. 使用类“.active"来标记它们的未激活和激活状态,等等.

8、jQuery.get() 和 jQuery.ajax() 方法之间的区别是什么?

ajax() 方法更强大,更具可配置性, 让你可以指定等待多久,以及如何处理错误。

get() 方法是一个只获取一些数据的专门化方法。

9、你是如何将一个 HTML 元素添加到 DOM 树中的?

你可以用 jQuery 方法 appendTo() 将一个 HTML 元素添加到 DOM 树中。

这是 jQuery 提供的众多操控 DOM 的方法中的一个。

你可以通过 appendTo() 方法在指定的 DOM 元素末尾添加一个现存的元素或者一个新的 HTML 元素。

10、jQuery 里的 each() 是什么函数?你是如何使用它的?

each() 函数就像是 Java 里的一个 Iterator,它允许你遍历一个元素集合。

你可以传一个函数给 each() 方法,被调用的 jQuery 对象会在其每个元素上执行传入的函数。

有时这个问题会紧接着上面一个问题,举个例子,如何在 alert 框里显示所有选中项。

我们可以用上面的选择器代码找出所有选中项,然后我们在 alert 框中用 each() 方法来一个个打印它们,代码如下:

$('[name=NameOfSelectedTag] :selected').each(function(selected) {

alert($(selected).text());

});

六、PHP 部分

1、双引号和单引号的区别。

● 双引号解释变量,单引号不解释变量

● 双引号里插入单引号,其中单引号里如果有变量的话,变量解释

● 双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误

● 双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\

● 能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)

2、常用的超全局变量(8个)。

● $_GET ----->get传送方式

● $_POST ----->post传送方式

● $_REQUEST ----->可以接收到get和post两种方式的值

--------------------------------------------------------------------------------

● $GLOBALS ----->所有的变量都放在里面

● $_FILE ----->上传文件使用

● $_SERVER ----->系统环境变量

--------------------------------------------------------------------------------

● $_SESSION ----->会话控制的时候会用到

● $_COOKIE ----->会话控制的时候会用到

3、HTTP中POST、GET、PUT、DELETE方式的区别。

HTTP定义了与服务器交互的不同的方法,最基本的是POST、GET、PUT、DELETE,

与其比不可少的URL的全称是资源描述符,我们可以这样理解:url描述了一个网络上资源,

而post、get、put、delete就是对这个资源进行增、删、改、查的操作!

4、PHP介绍。

Hypertext Preprocessor----超文本预处理器

Personal Home Page 原始名称

目标用途: 允许web开发人员快速编写动态生成的web页面,与其他页面相比,PHP是将程序嵌入到HTML文档中去执行,效率比完全生成HTML编辑的CGI高很多

HTML: Hypertext Markup Language

创始人: 拉姆斯勒·勒多夫Rasmus Lerdorf,1968年生,加拿大滑铁卢大学

勒多夫最开始是为了维护个人网页,用prel语言写了维护程序,之后又用c进行了重写,最终衍生出php/fi

时间轴:

● 1995.06.08将PHP/FI公开释出

● 1995 php2.0,加入了对MySQL的支持

● 1997 php3.0

● 2000 php4.0

● 2008 php5.0

● 由于php6.0没有完全解决Unicode编码,所以基本没有生产线上的应用,基本只是一款概念产品,很多功能已经在php5.3.3和php5.3.4上实现

常见的IDE(Intergrated Development Environment): 集成开发环境

● Coda(mac)

● PHPStrom

● Adobe Dreamweaver

● NetBeans

常见文本编辑器,具备代码高亮:

● NodePad++

● SublimeText

PHP优势

PHP特性:

● php独特混合了C,Java,Prel以及PHP自创的语法

● 可以比CGI或者Prel更快速去执行动态网页,与其他变成语言相比,PHP是讲程序嵌入到HTML文档中去执行,执行效率比完全生成HTML编辑的CGI要高很多,所有的CGI都能实现

● 支持几乎所有流行的数据库以及操作系统

● PHP可以使用C,C++进行程序的扩展

PHP优势:

● 开放源代码

● 免费性

● 快捷性

● 跨平台强

● 效率高

● 图形处理

● 面向对象

● 专业专注

PHP技术应用:

● 静态页面生成

● 数据库缓存

● 过程缓存

● div+css w3c标准

● 大负荷

● 分布式

● flex

● 支持MVC

● Smarty模块引擎

PHP认证级别

● 初级 IFE:Index Front Engineer 前端工程师

● 中级 IPE:Index PHP Engineer PHP工程师

● 高级 IAE:Index Architecture Engineer 架构工程师

5、echo、print_r、print、var_dump之间的区别。

* echo、print是php语句,var_dump和print_r是函数

* echo 输出一个或多个字符串,中间以逗号隔开,没有返回值是语言结构而不是真正的函数,因此不能作为表达式的一部分使用

* print也是php的一个关键字,有返回值 只能打印出简单类型变量的值(如int,string),如果字符串显示成功则返回true,否则返回false

* print_r 可以打印出复杂类型变量的值(如数组、对象)以列表的形式显示,并以array、object开头,但print_r输出布尔值和NULL的结果没有意义,因为都是打印"\n",因此var_dump()函数更适合调试

* var_dump() 判断一个变量的类型和长度,并输出变量的数值

6、HTTP状态码。

常见的HTTP状态码:

● 200 - 请求成功

● 301 - 资源(网页等)被永久转义到其他URL

● 404 - 请求的资源(网页等)不存在

● 505 - 内部服务器错误

HTTP状态码分类:

● 1** - 信息,服务器收到的请求,需要请求者继续执行操作

● 2** - 成功,操作被成功接收并处理

● 3** - 重定向,需要进一步的操作以完成请求

● 4** - 客户端错误,请求包含语法错误或者无法完成请求

● 5** 服务器错误,服务器在处理请求的过程 中发生了错误

7、什么是魔术引号。

魔术引号是一个将自动将进入PHP脚本的数据进行转义的过程,最好在编码时不要转义而在运行时根据需要而转义

在一个项目中,魔术引号若是打开的话,所有的反斜线(\)、单引号(')、双引号(")、NULL 字符都会被自动加上一个反斜线进行转义,

这和 addslashes() 作用完全相同。

与之相关的函数:set_magic_quotes_runtime、magic_quotes_gpc、addslashes、stripslashes。

8、如何获取客户端的ip(要求取得一个int)和服务器ip的代码。

客户端:$_SERVER["REMOTE_ADDR"];或者getenv('REMOTE_ADDR') ip2long进行转换 服务器端:gethostbyname('www.baidu.com')

9、使用那些工具进行版本控制。

cvs,svn,git

10、语句include和require的区别是什么?为避免多次包含同一文件,可以用(?)语句代替他们。

● require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者无法打开的时候,会提示错误,并且会终止程序执行

● include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,那么会提示一个错误,但是程序会继续执行下去

注意:包含文件不存在或者语法错误的时候require是致命的,而include不是

● require_once表示了只包含一次,避免了重复包含

上一篇下一篇

猜你喜欢

热点阅读