热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

web前端加php题,也许你需要点实用的Web前端笔试题

之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自

之前发的一篇博客里没有附上答案,现在有空整理了下发出来,希望能帮助到正在找工作的你,还是那句话:技术只有自己真正理解了才是自己的东西,共勉。

Web前端笔试题

Html+css

1.对WEB标准以及w3c的理解与认识。

标签闭合,标签小写,不乱嵌套:提高搜索机器人的搜索几率;

使用外联的css和js,结构行为表现的分离:文件下载与页面加载速度更快,内容能被更广泛的设备所访问;

更少的代码和组件:容易维护,改版方便,不需要变动页面内容,提供打印版本而不需要复制内容,提高网站的易用性。

2.Xhtml和html有什么区别。

Html(超文本标记语言)是标准通用标记语言下的一个应用,也是一种规范,一种标准。

Xhtml(可扩展超文本标记语言)是一种置标语言,表现方式与html类似,不过语法上更加严格,主要不同:

1,所有元素必须被正确嵌套,

2,所有标记必须闭合,

3,标签名,属性名必须小写字母,

4,所有的属性必须用“”括起来,

5,所有非标签一部分的>

6,所有属性必须要有值,

7,注释中不要有--

8,图片必须要有说明文字

3.css的引入方式有哪些?link和@import的区别是?

四种:内联,内嵌,外链,导入

区别:

1,link属于xhtml标签,@import完全是css提供的一种方式,link除了加载css还可以定义rss,定义rel属性等,@import只能加载css。

2,加载顺序差别:link引用的css是同时被加载的,@import引用的css会等到页面全部被下载完才会再被加载。

3,兼容性差别,@import是css2.1提出,ie5以上才支持,link没有兼容问题。

4,使用dom控制样式的差别,当用Javascript去控制样式的时候,只能使用link,@import不是dom能控制的。

5,@import可以在css中再次引入其他样式表。

4.css选择符有哪些?哪些属性可以继承?优先级如何计算?内联和important哪个优先级高?

标签选择符,类选择符,id选择符

继承的不如指定的,id>class>Tagname

Important优先级高

5.前端页面由哪三层构成,分别是什么?作用是什么?

结构层:html

由html或者xhtml负责创建,运用标签对网页内容的含义作出描述。

表示层:css

由css负责创建,对如何显示有关内容做出回答。

行为层:Javascript

由Javascript负责创建,负责回答应该如何对事件作出反应。

6.css的基本语句构成是?

选择器,属性,属性值

7.你曾经在哪些浏览器测试过兼容?这些浏览器的内核分别是什么?

Ie(ie内核),火狐(Gecko),谷歌(webkit),opera(presto)

8. 、

23.px和em的区别

PX:

PX实际上就是像素,用PX设置字体大小时,比较稳定和精确。但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,如果改变了浏览器的缩放,这时会使用我们的Web页面布局被打破。这样对于那些关心自己网站可用性的用户来说,就是一个大问题了。因此,这时就提出了使用“em”来定义Web页面的字体。EM:

EM就是根据基准来缩放字体的大小。EM实质是一个相对值,而非具体的数值。这种技术需要一个参考点,一般都是以

另外,em是相对于父元素的属性而计算的,如果想计算px和em之间的换算,这个网站不错,输入数据就可以px和em相互计算。狠击这里:px和em换算

Rem:

EM是相对于其父元素来设置字体大小的,这样就会存在一个问题,进行任何元素设置,都有可能需要知道他父元素的大小。而Rem是相对于根元素

浏览器的兼容性

除了IE6-IE8r,其它的浏览器都支持em和rem属性,px是所有浏览器都支持。

因此为了浏览器的兼容性,可“px”和“rem”一起使用,用"px"来实现IE6-8下的效果,然后使用“Rem”来实现代浏览器的效果。

24.透明度

html{

filter:alpha(opacity=50); /* ie 有效*/

-moz-opacity:0.5; /* Firefox 有效*/

opacity: 0.5; /* 通用,其他浏览器 有效*/

}

Javascript

1.Javascript的typeof返回哪些数据类型?

Object,number,function,boolean,undefined;

2.例举3种强制类型转换和2种隐式类型转换。

强制Number(),String(),Boolean(),Object();

隐式 + - == if while for in alert

3.Split()和join()的区别。

Join() 函数获取一批字符串,然后用分隔符字符串将它们联接起来,从而返回一个字符串。

Split() 函数获取一个字符串,然后在分隔符处将其断开,从而返回一批字符串。

split,是把一串字符(根据某个分隔符)分成若干个元素存放在一个数组里。而Join是把数组中的字符串连成一个长串,可以大体上认为是split的逆操作。

4.事件绑定和普通事件有什么区别?

普通添加事件的方法不支持添加多个事件,最下面的事件会覆盖上面的,而事件绑定(addEventListener)方式添加事件可以添加多个。

5.数组方法pop() push() unshift() shift()

Push()尾部添加pop()尾部删除

Unshift()头部添加shift()头部删除

6.Ie和dom事件流的区别?

1.执行顺序不一样

2.参数不一样

3.事件加不加on

4.this指向问题

7.Ie和标准下有哪些兼容性的写法?

Var ev = ev || window.event

document.documentElement.clientWidth || document.body.clientWidth

Var target = ev.srcElement||ev.target

8.Ajax的get和post方式的区别?

1、使用Get请求时,参数在URL中显示,而使用Post方式是放在虚拟载体里面,不会显示出来。

2、 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。两种方式的参数都可以用Request来获得。

3、get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,因服务器的不同而异.

4、get安全性非常低,post安全性较高。

5、get请求需注意缓存问题,post请求不需担心这个问题。

6、post请求必须设置Content-Type值为application/x-form-www-urlencoded

7、发送请求时,因为get请求的参数都在url里,所以send函数发送的参数为null,而post请求在使用send方法时,却需赋予其参数

9.call和apply的区别?

call方法:

语法:call(thisObj,Object)

定义:调用一个对象的一个方法,以另一个对象替换当前对象。

说明:

call 方法可以用来代替另一个对象调用一个方法。call方法可将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象。

如果没有提供 thisObj 参数,那么Global对象被用作thisObj。

apply方法:

语法:apply(thisObj,[argArray])

定义:应用某一对象的一个方法,用另一个对象替换当前对象。

说明:

如果 argArray 不是一个有效的数组或者不是arguments对象,那么将导致一个TypeError。

如果没有提供 argArray 和thisObj任何一个参数,那么Global对象将被用作thisObj, 并且无法被传递任何参数。

10.Ajax请求时,如何解析json数据?

使用eval parse 鉴于安全性考虑 使用parse更靠谱

11.什么是Javascript的本地对象,内置对象和宿主对象?

本地对象:独立于宿主环境的ECMAScript实现提供的对象。它们包括:Object,Function,Array,String,Boolean,Number,Date,RegExp,Error,EvalError,RangeError,ReferenceError,SyntaxErro,TypeError URIError可以实例化。

内置对象 Global和Math:由ECMASscript实现提供的、独立于宿主环境的所有对象不可以实例化。

宿主对象:所有的非本地对象都是宿主对象即由ECMAscript实现的宿主环境提供的对象。所有BOM和DOM对象都是宿主对象,document,window等。

12.Document load和document ready的区别?

页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件),二是onload,指示页面包含图片等文件在内的所有元素都加载完成。

13.编写一个数组去重的方法。

1.创建一个新的数组存放结果

2.创建一个空对象

3.for循环时,每次取出一个元素与对象进行对比,如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为1,存入到第2步建立的对象中。var s = [0, 2, 3, 4, 4, 0, 2, 'tt', 0, 0]; //测试数组

for (var i = 0, o = {}, tmp = [], count = 0, l = s.length; i

if (o[s[i]]) {

count++;//重复+1

} else {

o[s[i]] = 1;//不重复设置属性

tmp.push(s[i])//加入新数组

}}

alert(count);alert(tmp)

14.事件委托。

利用冒泡的原理,把事件加到父级上,触发执行效果。使用事件委托技术能让你避免对特定的每个节点添加事件监听器;相反,事件监听器是被添加到它们的父元素上。事件监听器会分析从子元素冒泡上来的事件,找到是哪个子元素的事件。

15.作用域链。

当代码在一个环境中执行时,会创建变量对象的的一个作用域链(scope chain)。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端,始终都是当前执行的代码所在环境的变量对象。如果这个环境是一个函数,则将其活动对象作为变量对象。

每一个函数都有自己的执行环境,当执行流进一个函数时,函数环境就会被推入一个环境栈中,而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境,这个栈也就是作用域链。

当执行函数时,将创建函数的执行环境(调用对象),并将该对象置于链表开头,然后将父级函数的调用对象链接在之后,最后是全局对象。

16.闭包。

闭包就是能够读取其他函数内部变量的函数。由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。它的最大用处有两个,一个是读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

17.如何阻止事件冒泡和默认事件。//如果提供了事件对象,则这是一个非IE浏览器

if ( e && e.stopPropagation ) {

e.stopPropagation(); //因此它支持W3C的stopPropagation()方法

} else {

window.event.cancelBubble = true; //否则,我们需要使用IE的方式来取消事件冒泡

return false;

}

//如果提供了事件对象,则这是一个非IE浏览器

if ( e && e.preventDefault ) {

e.preventDefault(); //阻止默认浏览器动作(W3C)

} else {

window.event.returnValue = false; //IE中阻止函数器默认动作的方式

return false;

}

18.Javascript的同源策略。

一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

19.JS排序算法。var sort = {

debug: function(str) {

if (window.console && window.console.log) {

console.log(str);

}

},

swap: function(arr, index1, index2) { //数组数据交换

var temp = arr[index1];

arr[index1] = arr[index2];

arr[index2] = temp;

},

bubbleSort: function(arr) { //冒泡排序

this.debug("冒泡排序before:" + arr);

var len = arr.length;

for (var outer = 0; outer

for (var inner = 0; inner

if (arr[inner] > arr[inner + 1]) {

this.swap(arr, inner, inner + 1)

}

}

this.debug("第" + (outer + 1) + "轮后:" + arr);

}

this.debug("冒泡排序after:" + arr);

},

selectionSort: function(arr) { //选择排序

this.debug("选择排序before:" + arr);

var min, len = arr.length;

for (var outer = 0; outer

min = outer;

// 比较最小项目和第outer项之后的剩余数组项, 以寻找更小项

for (var inner = outer + 1; inner

if (arr[inner]

min = inner;

this.debug("min--" + min);

}

}

this.swap(arr, outer, min);

this.debug("第" + (outer + 1) + "轮后:" + arr);

}

this.debug("选择排序after:" + arr);

},

insertionSort: function(arr) { //插入排序

this.debug("插入排序before:" + arr);

var temp, inner, len = arr.length;

for (var outer = 1; outer

temp = arr[outer];

inner = outer;

while (inner > 0 && arr[inner - 1] >= temp) {

arr[inner] = arr[inner - 1];

--inner;

}

arr[inner] = temp;

}

this.debug("插入排序after:" + arr);

},

shellSort: function(arr) { //希尔排序

this.debug("希尔排序before:" + arr);

var gaps = [5, 3, 1],

temp;

for (var g = 0; g

for (var i = gaps[g]; i

temp = arr[i];

for (var j = i; j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]) {

arr[j] = arr[j - gaps[g]];

}

arr[j] = temp;

}

}

this.debug("希尔排序after:" + arr);

},

shellSortDynamic: function(arr) { //动态计算间隔序列的希尔排序

this.debug("动态计算间隔序列的希尔排序before:" + arr);

var N = arr.length,

h = 1;

while (h

h = 3 * h + 1;

}

while (h >= 1) {

for (var i = h; i

for (var j = i; j >= h && arr[j]

this.swap(arr, j, j - h);

}

}

h = (h - 1) / 3;

}

this.debug("动态计算间隔序列的希尔排序after:" + arr);

},

mergeSort: function(arr) { //归并排序

this.debug("归并排序before:" + arr);

var len = arr.length,

step = 1,

left,

right;

var mergeArray = function(arr, startLeft, stopLeft, startRight, stopRight) {

var rightArr = new Array(stopRight - startRight + 1),

leftArr = new Array(stopLeft - startLeft + 1),

k = startRight,

m = 0,

n = 0;

for (var i &#61; 0; i <(rightArr.length - 1); &#43;&#43;i) {

rightArr[i] &#61; arr[k];

&#43;&#43;k;

}

k &#61; startLeft;

for (var i &#61; 0; i <(leftArr.length - 1); &#43;&#43;i) {

leftArr[i] &#61; arr[k];

&#43;&#43;k;

}

rightArr[rightArr.length - 1] &#61; Infinity; //哨兵值

leftArr[leftArr.length - 1] &#61; Infinity; //哨兵值

for (var k &#61; startLeft; k

if (leftArr[m] <&#61; rightArr[n]) {

arr[k] &#61; leftArr[m];

m&#43;&#43;;

} else {

arr[k] &#61; rightArr[n];

n&#43;&#43;

}

}

}

if (len <2) {

return;

}

while (step

left &#61; 0;

right &#61; step;

while (right &#43; step <&#61; len) {

mergeArray(arr, left, left &#43; step, right, right &#43; step);

left &#61; right &#43; step;

right &#61; left &#43; step;

}

if (right

mergeArray(arr, left, left &#43; step, right, len);

}

step *&#61; 2;

}

this.debug("归并排序after:" &#43; arr);

},

quickSort: function(arr) { //快速排序

this.debug("快速排序before:" &#43; arr);

var _quickSort &#61; function(arr) {

var len &#61; arr.length,

lesser &#61; [],

greater &#61; [],

pivot,

meCall &#61; arguments.callee;

if (len &#61;&#61; 0) {

return [];

}

pivot &#61; arr[0];

for (var i &#61; 1; i

if (arr[i]

lesser.push(arr[i])

} else {

greater.push(arr[i])

}

}

return meCall(lesser).concat(pivot, meCall(greater));

}

this.debug("快速排序after:" &#43; _quickSort(arr));

return _quickSort(arr);

}

}

var search &#61; {

linearSearch: function(arr, data) { //线性查找

for (var i &#61; 0; i

if (arr[i] &#61;&#61; data) {

return i;

}

}

return -1;

},

binarySearch: function(arr, data) { //二分查找 适用于已排好序的线性结构

var lowerBound &#61; 0,

upperBound &#61; arr.length - 1,

mid;

while (lowerBound <&#61; upperBound) {

mid &#61; Math.floor((lowerBound &#43; upperBound) / 2);

if (arr[mid]

lowerBound &#61; mid &#43; 1;

} else if (arr[mid] > data) {

upperBound &#61; mid - 1;

} else {

return mid;

}

return -1;

}

}

}

var tempArr &#61; [3, 6, 4, 2, 11, 10, 5];

//sort.bubbleSort(tempArr);

//sort.selectionSort(tempArr);

//sort.insertionSort(tempArr);

//sort.shellSort(tempArr);

//sort.shellSortDynamic(tempArr);

//sort.mergeSort(tempArr);

//sort.quickSort(tempArr);

以上就是也许你需要点实用的-Web前端笔试题的内容&#xff0c;更多相关内容请关注PHP中文网(www.php.cn)&#xff01;

相关标签&#xff1a;Web前端

本文原创发布php中文网&#xff0c;转载请注明出处&#xff0c;感谢您的尊重&#xff01;



推荐阅读
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 系统转换的三种方法及其具体应用分析
    系统转换是信息技术领域中常见的任务,本文详细探讨了三种主要的系统转换方法及其具体应用场景。这些方法包括:代码迁移、数据迁移和平台迁移。文章通过实例分析了每种方法的优势和局限性,并提供了实际操作中的注意事项和技术要点。例如,代码迁移适用于从VB6获取网页源码,数据迁移在Ubuntu中用于隐藏侧边栏,而平台迁移则涉及Tomcat 6.0的使用和谷歌爬虫的测试。此外,文章还讨论了蓝翰互动PHP面试和5118 SEO工具在系统转换中的应用,为读者提供了全面的技术参考。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文将深入解析 Lumen 框架中的中间件机制,并提供实用的应用指南。我们将从官方文档出发,重点解读 5.3 版本中的相关内容,帮助开发者更好地理解和使用中间件功能。通过具体示例,探讨中间件在请求处理流程中的作用及其配置方法。 ... [详细]
  • 在使用 Qt 进行 YUV420 图像渲染时,由于 Qt 本身不支持直接绘制 YUV 数据,因此需要借助 QOpenGLWidget 和 OpenGL 技术来实现。通过继承 QOpenGLWidget 类并重写其绘图方法,可以利用 GPU 的高效渲染能力,实现高质量的 YUV420 图像显示。此外,这种方法还能显著提高图像处理的性能和流畅性。 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 如何撰写适应变化的高效代码:策略与实践
    编写高质量且适应变化的代码是每位程序员的追求。优质代码的关键在于其可维护性和可扩展性。本文将从面向对象编程的角度出发,探讨实现这一目标的具体策略与实践方法,帮助开发者提升代码效率和灵活性。 ... [详细]
  • Windows 11系统中Win键失效的解决方法与专业建议
    Windows 11系统中Win键失效的解决方法与专业建议 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 如何高效利用Hackbar插件提升网页调试效率
    通过合理利用Hackbar插件,可以显著提升网页调试的效率。本文介绍了如何获取并使用未包含收费功能的2.1.3版本,以确保在不升级到最新2.2.2版本的情况下,依然能够高效进行网页调试。此外,文章还提供了详细的使用技巧和常见问题解决方案,帮助开发者更好地掌握这一工具。 ... [详细]
  • 在前文探讨了Spring如何为特定的bean选择合适的通知器后,本文将进一步深入分析Spring AOP框架中代理对象的生成机制。具体而言,我们将详细解析如何通过代理技术将通知器(Advisor)中包含的通知(Advice)应用到目标bean上,以实现切面编程的核心功能。 ... [详细]
author-avatar
-寒小兮_991
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有