面试题2

8 篇文章 0 订阅
7 篇文章 0 订阅

面试题2

html部分

第一题

问:
HTML全局属性(global attribute)有哪些(包含H5)?
答:
全局属性:用于任何HTML5元素的属性
属性描述
accesskey设置访问元素的键盘快捷键。
class规定元素的类名(classname)
contenteditable (h5)规定是否可编辑元素的内容。
contextmenu (h5)指定一个元素的上下文菜单。当用户右击该元素,出现上下文菜单
data-*(h5)用于存储页面的自定义数据
dir设置元素中内容的文本方向。
draggable (h5)指定某个元素是否可以拖动
dropzone (h5)指定是否将数据复制,移动,或链接,或删除
hidden (h5)hidden 属性规定对元素进行隐藏。
id规定元素的唯一 id
lang设置元素中内容的语言代码。
spellcheck (h5)检测元素是否拼写错误
style规定元素的行内样式(inline style)
tabindex设置元素的 Tab 键控制次序。
title规定元素的额外信息(可在工具提示中显示)
translate (h5)指定是否一个元素的值在页面载入时是否需要翻译

第二题:

问:
HTML 5的文件离线储存怎么使用,工作原理是什么?
答:
HTML5 的离线存储的使用:
什么是HTML5 的离线存储?

HTML5提供了很多新的功能以及相应的接口,离线存储就是其中的一个,离线存储可以将站点的一些文件存储在本地,在没有网络的时候还是可以访问到以缓存的对应的站点页面,其中这些文件可以包括html,js,css,img等等文件,但其实即使在有网络的时候,浏览器也会优先使用已离线存储的文件,返回一个200(from cache)头。这跟HTTP的缓存使用策略是不同的。

本地缓存应用所需的文件

怎么使用HTML5的离线存储

首先,你得告诉浏览器你想要离线存储哪些文件,那就需要有一个缓存文件清单,这跟文件是一个manifest后缀名的文件,注意,使用HTML5的离线存储就必须有这个文件,而且必须在服务器端做修改,使得.manifest后缀名的文件的mime类型为text/cache-manifest。

配置manifest文件

页面上:

<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
manifest文件:

manifest是最简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。

manifest文件分为三个部分:
  1. CACHE MANIFEST-在此标题下列出的文件将在首次下载后进行缓存
  2. NETWOrK-在此标题下的文件需要与服务器进行连接,且不会被缓存
  3. FALLBACK-在此标题下的文件规定当页面无法被访问时的回退页面(比如404页面)
  4. 指定上述文件,可以用相对路径,也可以用绝对路径,都是ok的。但是绝对路径要加上http://

完整demo

CACHE MANIFEST
# 2016-07-24 v1.0.0
/theme.css
/main.js

NETWORK:
login.jsp

FALLBACK:
/html/ /offline.html

服务器上:manifest文件需要配置正确的MIME-type,即text/cache-manifest

常用API

核心是applicationCache对象,有个status属性,表示应用缓存的当前状态:

0 (UNCACHED):无缓存,没有和页面相关的应用缓存

1 (IDLE):闲置,应用缓存没有得到更新

2 (CHECKING):检查中,正在下载描述文件并检查更新

3 (DOWNLOADING):下载中,应用缓存正在下载与描述文件中指定的资源

4 (UPDATEREADY):更新完成,所有资源都已经下载完毕

5 (IDLE):废弃,应用缓存的描述文件已经不存在了,因此页面无法再访问应用缓存

相关事件

表示应用缓存状态的改变:

checking:在浏览器为应用缓存查找更新时触发

error:在检查更新或下载资源期间发生错误时触发

noupdate:在检查描述文件发现文件无变化时触发

downloading:在开始下载应用缓存资源时触发

progress:在文件下载应用缓存的过程中持续不断地下载时触发

updateready:在页面新的应用缓存下载完毕时触发

cached:在应用缓存完整可用时触发

application cache的三个优势:
  1. 离线浏览
  2. 提升页面载入速度
  3. 降低服务器压力
注意事项:
  1. 浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点5M
  2. 如果是manifest文件,或者内部列举的某一个文件不能正常下载,整个更新过程将视为失败,浏览器继续全部使用旧的缓存
  3. 引用manifesthtml必须与manifest文件同源,在同一个域下
  4. 浏览器会自动缓存引用manifest文件的html文件,这就导致了如果更改了html内容,也需要更新版本才能做到最新
  5. manifest文件中的CACHENETWOrKFALLBACK的位置顺序没有关系,如果是隐式声明需要在最前面
  6. FALLBACK中的资源必须和manifest文件同源
  7. 更新完版本后,必须刷新一次才会启动新版本(会出现重刷一次页面的情况),需要添加监听版本事件
  8. 站点中的其他页面即使没有设置manifest属性,请求的资源如果在缓存中也从缓存中访问
  9. manifest文件发生改变时,资源请求本身也会触发更新
离线缓存和传统浏览器缓存的区别
  1. 离线缓存是针对整个应用,浏览器缓存是单个文件
  2. 离线缓存可以主动通知浏览器更新资源

css部分

第一题

问:
在页面上隐藏元素的方法有哪些?
答:
利用 dispaly
  • disaplay: none; 页面不会渲染
  • visibility: hidden; 页面会渲染只是不限显示
  • opacity: 0; 看不见,但是会占据空间
利用 position (absolute 的情况下)
  • left/right/top/bottom: 9999px/-9999px 让元素在视区外
  • z-index: -9999 放到最底层,同一位置可以让其他元素把这个给遮掉
利用2D动画
  • transform: scale(0) 设置元素缩放比例为0,起到display:none; 的作用
超出隐藏
  • overflow: hidden;
宽高设置
  • width:0; height:0;
仅对块内文本元素:
  • text-indent: -9999px;
  • font-size: 0;

第二题:

问:
CSS选择器有哪些?哪些属性可以继承?
答:
css选择器
选择器例子例子描述CSS
.class.intro选择 class=“intro” 的所有元素。1
#id#firstname选择 id=“firstname” 的所有元素。1
**选择所有元素。2
elementp选择所有元素。1
element,elementdiv,p选择所有元素和所有元素。1
element elementdiv p选择元素内部的所有元素。1
element>elementdiv>p选择父元素为元素的所有元素。2
element+elementdiv+p选择紧接在元素之后的所有元素。2
[attribute][target]选择带有 target 属性所有元素。2
[attribute=value][target=_blank]选择 target="_blank" 的所有元素。2
[attribute~=value][title~=flower]选择 title 属性包含单词 “flower” 的所有元素。2
[attribute|=value][lang|=en]选择 lang 属性值以 “en” 开头的所有元素。2
:linka:link选择所有未被访问的链接。1
:visiteda:visited选择所有已被访问的链接。1
:activea:active选择活动链接。1
:hovera:hover选择鼠标指针位于其上的链接。1
:focusinput:focus选择获得焦点的 input 元素。2
:first-letterp:first-letter选择每个元素的首字母。1
:first-linep:first-line选择每个元素的首行。1
:first-childp:first-child选择属于父元素的第一个子元素的每个元素。2
:beforep:before在每个元素的内容之前插入内容。2
:afterp:after在每个元素的内容之后插入内容。2
:lang(language)p:lang(it)选择带有以 “it” 开头的 lang 属性值的每个元素。2
element1~element2p~ul选择前面有元素的每个元素。3
[attribute^=value]a[src^=“https”]选择其 src 属性值以 “https” 开头的每个 元素。3
[attribute$=value]a[src$=".pdf"]选择其 src 属性以 “.pdf” 结尾的所有 元素。3
[attribute*=value]a[src*=“abc”]选择其 src 属性中包含 “abc” 子串的每个 元素。3
:first-of-typep:first-of-type选择属于其父元素的首个元素的每个元素。3
:last-of-typep:last-of-type选择属于其父元素的最后元素的每个元素。3
:only-of-typep:only-of-type选择属于其父元素唯一的元素的每个元素。3
:only-childp:only-child选择属于其父元素的唯一子元素的每个元素。3
:nth-child(n)p:nth-child(2)选择属于其父元素的第二个子元素的每个元素。3
:nth-last-child(n)p:nth-last-child(2)同上,从最后一个子元素开始计数。3
:nth-of-type(n)p:nth-of-type(2)选择属于其父元素第二个元素的每个元素。3
:nth-last-of-type(n)p:nth-last-of-type(2)同上,但是从最后一个子元素开始计数。3
:last-childp:last-child选择属于其父元素最后一个子元素每个元素。3
:root:root选择文档的根元素。3
:emptyp:empty选择没有子元素的每个元素(包括文本节点)。3
:target#news:target选择当前活动的 #news 元素。3
:enabledinput:enabled选择每个启用的 元素。3
:disabledinput:disabled选择每个禁用的 元素3
:checkedinput:checked选择每个被选中的 元素。3
:not(selector):not§选择非元素的每个元素。3
::selection::selection选择被用户选取的元素部分。3
属性可以继承
1. 所有元素都可以继承
  • visibilitycursor

2. 内联元素可以继承
  • letter-spacing:字符之间的间隙
  • word-spacing:单词之间的间隙
  • white-space:换行方式
  • line-height:行高
  • color:颜色
  • font:字体设置
  • font-family:字体名称
  • font-size:字体大小
  • font-style:字体样式
  • font-variant:是否为小型的大写字母
  • font-weight:文本字体的粗细
  • text- decoration:复合属性。文本的装饰。
  • text-transform:文本的大小写
  • direction:文本流的方向

3. 块级元素可以继承
  • text-indent:文本缩进
  • text-align:文本对齐方式

4. 列表元素可以继承
  • list-style:复合属性。设置列表项目相关内容
  • list-style-type:列表项所使用的预设标记
  • list-style-position:列表项标记如何根据文本排列
  • list-style-image:列表项标记的图像

5. 表格元素嗯昆虫继承
  • border-collapse:表格的行和单元格的边是合并还是独立

6. 不可继承的元素
display`、`margin`、`border`、`padding`、`background`、`height`、`min-height`、`max- height`、`width`、`min-width`、`max-width`、`overflow`、`position`、`left`、`right`、`top`、 `bottom`、`z-index`、`float`、`clear`、`table-layout`、`vertical-align`、`page-break-after`、 `page-bread-before和unicode-bid

js部分

第一题:

问:
去除字符串中最后一个指定的字符
答:
var str = "123456789"
function strdelete (str, del) {
    if (typeof str !== 'string') {
        return false
    } else {
        var index = str.lastIndexOf(del)
		return str.substring(0,index ) + str.substring(index+1,str.length);
	}
}
var a=strdelete(str, "9")
console.log(a)

第二题:

问:
写一个方法把下划线命名转成大驼峰命名
答:

第一种:

function transoform(str) {
    var result = str.split('');
    result.forEach(function(e, i, a) {
        if (e === '_') {
            a[i + 1] = a[i + 1].toUpperCase(); 
        }
    });
    return result.join('').replace(/\_*/g, '');
}
var result = transoform('if_you_are_my_world');
console.log(result); // ifYouAreMyWorld

image.png

第二种:

function toCamel(str) {
  return str.replace(/(\w)(_)(\w)/g, (match, $1, $2, $3) => `${$1}${$3.toUpperCase()}`)
}

console.log(toCamel('a_bc_def')) // aBcDef 

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值