今日一题:
下面能够校验字符串是否完全由字母、数字、下划线组成的正则表达式是?(多选题)
A、^[a-zA-Z0-9_]+$
B、^\w+$
C、^(?:[a-zA-Z0-9_]+)$
D、^[a-zA-Z0-9_]$
答案和解析可在文章底部查看。
今日面试题:
1、HTML中meta标签的相关设置有哪些?
① 字符编码设置
<!-- 声明当前文档的字符编码 -->
<meta charset='utf-8'>
② 视口设置
<!-- 声明当前页面的视口设置 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=2.0,user-scalable=yes">
其中width
用于设置视口宽度,值可以是一个正整数,或者device-width
(设备宽度);initial-scale
用于设置初始缩放比例,值为一个数字,可以带小数;minimum-scale
用于设置用户手动缩放的最小缩放比例,值为一个数字,可以带小数;maximum-scale
用于设置用户手动缩放的最大缩放比例,值为一个数字,可以带小数;user-scalable=yes
用于设置是否允许用户手动缩放,值为yes/no
。
③ 关键词设置
<!-- 声明当前页面的关键词,用于SEO -->
<meta name="keywords" content="语文, 数学, 英语">
④ 描述设置
<!-- 声明当前页面的描述,用于SEO -->
<meta name="description" content="这是一个实验页面">
⑤ 作者设置
<!-- 声明当前页面的作者 -->
<meta name="author" content="前端生活圈">
⑥ IE兼容设置
<!-- 声明当前页面的在IE中的兼容设置 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
上面的设置中,IE=edge
用于设置IE浏览器使用最新的渲染引擎。为确保该标签在页面内容加载之前生效,要将该标签放在<head>
标签的最前面。
⑦ 搜索引擎设置
<!-- 声明当前页面对搜索引擎的设置 -->
<meta name="robots" content="noindex, nofollow">
在上面的设置中,name="robots"
表明该标签时为搜索引擎爬虫提供指令;content
提供具体指令,noindex
用于设置搜索引擎不要索引当前页面,即不要将当前页面包含在搜索引擎的索引中。nofollow
用于设置搜索引擎不要跟踪页面上的链接,即不要将页面上的链接进行索引。
noindex
的相反设置为index
,nofollow
的相反设置为follow
,index
和follow
是页面的默认设置,noindex
和nofollow
会影响页面的SEO,要慎重使用。
⑧ 刷新或重定向设置
<!-- 声明当前页面在指定时间后自动刷新 -->
<meta http-equiv="refresh" content="30">
<!-- 声明当前页面在指定时间后自动重定向 -->
<meta http-equiv="refresh" content="30; url=https://www.baidu.com">
在上面的设置中,content="n"
用于设置页面在n秒之后自动刷新;content="n; url=pageUrl"
用于设置页面在n秒之后自动重定向到 pageUrl 这个地址。
⑨ 缓存设置
<!-- 声明当前页面的缓存机制 -->
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="pragma" content="no-cache">
在上面的设置中,http-equiv="pragma"
已经被http-equiv="cache-control"
所取代,但为了兼容旧版本浏览器,通常我们两者会同时设置。content
设置具体的缓存机制,no-cache
表示在使用缓存之前,必须向服务器进行请求验证,保证访问页面时获取的是最新的内容。
除no-cache
之外,还可以设置为:no-cache
表示完全禁用缓存;max-age=<seconds>
表示设置资源的缓存时间为seconds;public
表示资源可以被任意一级缓存存储;private
表示资源只能被用户缓存,不能被共享区域缓存(如:代理服务器);must-revalidate
表示在资源过期后,必须向服务器验证资源的有效性;其他属性。
⑩ 其他设置
2、谈谈你对渐进增强和优雅降级的理解
渐进增强(Progressive Enhancement)和优雅降级(Graceful Degradation)是两种不同的前端开发策略,用于处理不同设备和不同版本浏览器对网站功能和表现的支持问题,目标都是为了提升用户体验,但实现方法和侧重点有所不同。
① 渐进增强
渐进增强是指从基础功能开始,逐步添加高级功能和样式的开发策略,核心思想是确保网站在低版本浏览器下也能正常工作,然后在高级浏览器中改进效果、交互和追加高级功能等,提供更好的用户体验。
更适合需要确保广泛兼容性和无障碍性的项目。
② 优雅降级
优雅降级是指从完整的高级功能开始,然后再针对低版本浏览器进⾏兼容,核心思想是首先开发功能齐全的版本,在高级浏览器中能获得最佳体验,然后在低版本浏览器中,削减掉一些效果、交互和高级功能等,保留网站的基础功能,确保网站仍能正常运行。
更适合需要快速开发和发布的项目。
3、利⽤多个域名来存储⽹站资源有什么优缺点
优点:
① 绕过并行下载限制
浏览器对同一域名的并行链接数量有限制(大约为6个左右),将资源分布在多个域名上,可以绕过限制,同时下载更多资源,提高页面架加载速度。
② 缓存优化
将不同类型的资源(如图片、脚本、样式表等)分布在不同的域名上,可以根据类型和域名,设置不同的缓存策略,更有效地利用缓存机制,减少重复下载。
③ 负载均衡
通过多个域名对应多服务器,可以将流量分散到不同的服务器上,减轻单个服务器的负载压力,提升系统稳定性和响应速度。
④ 灵活的CDN配置
不同的域名可以使用不同的CDN配置,可以根据不同的资源设置不同的配置。例如,为视频资源设置专门优化视频加载的CDN。
⑤ 更安全
将网站不同资源通过不同域名进行分隔,根据功能设置Cookie的作用域,可以更好的防范跨站脚本攻击(XSS)和跨站请求伪造攻击(CSRF)。
缺点:
① DNS查询延迟
每个域名都需要进行DNS解析,相对于单域名,会增加额外的DNS查询时间,影响页面加载速度。
② 跨域问题
可能会运发跨域资源共享(CORS)问题,需要额外进行配置。
③ 加载速度问题
不同域名上的资源加载速度和稳定性可能不一致,影响页面效果和用户体验。
④ 增加成本
每个域名都需要单独的SSL/TLS证书,多个域名需要维护多个DNS记录、SSL证书、服务器配置等,增加了运维成本和基础成本。
今日一题答案:ABC
该题主要考察的是对正则表达式各类字符的掌握是否熟练。
解析:
A、 ^[a-zA-Z0-9_]+$
^
表示匹配字符串的开始,[a-zA-Z0-9_]
表示匹配字母(大小写)、数字和下划线中的任意一种,+
表示匹配一个或多个字符,$
表示字符串的结束。符合题目要求。
B、^\w+$
^
表示匹配字符串的开始,\w
是一个元字符,等价于 [a-zA-Z0-9_]
,表示匹配字母、数字和下划线,$
表示字符串的结束。符合题目要求。
C、^(?:[a-zA-Z0-9_]+)$
^
表示匹配字符串的开始,[a-zA-Z0-9_]
表示匹配字母(大小写)、数字和下划线中的任意一种,(?: ... )
是一个非捕获组,和普通的括号 ()
一样,但不捕获匹配的内容。这里用来明确分组但不影响匹配结果。符合题目要求。
D、^[a-zA-Z0-9_]$
^
表示匹配字符串的开始,[a-zA-Z0-9_]
表示匹配字母(大小写)、数字和下划线中的任意一种,$
表示字符串的结束。缺少+
,只能匹配单字符,无法匹配多个字符,不符合题目要求。