佛系前端面试题记录--第八周
这里写目录标题
- 1.你知道多少种Doctype文档类型?
- 2.HTML与XHTML——二者有什么区别
- 3.new操作符具体干了什么呢?
- 4.哪些操作会造成内存泄漏?
- 5.grunt, YUI compressor 和 google clojure用来进行代码压缩的用法。
- 6.WEB应用从服务器主动推送Data到客户端有那些方式?
- 7.对网站重构的理解
- 8.js 操作获取和设置 cookie
- 9.事件、IE与火狐的事件机制有什么区别? 如何阻止冒泡?
- 10.写一个通用的事件侦听器函数
- 11.异步加载和延迟加载
- 12.eval是做什么的?
- 13.如何获取UA
- 14.document.write和 innerHTML 的区别
1.你知道多少种Doctype文档类型?
- 该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。
- HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。
- XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。
- Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks(包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。
2.HTML与XHTML——二者有什么区别
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。
3.new操作符具体干了什么呢?
- 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型
- 属性和方法被加入到 this 引用的对象中
- 新创建的对象由 this 所引用,并且最后隐式的返回 this
var obj = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
4.哪些操作会造成内存泄漏?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
- setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
- 闭包
- 控制台日志
- 循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)
5.grunt, YUI compressor 和 google clojure用来进行代码压缩的用法。
grunt:
UglifyJS 是基于 NodeJS 的 Javascript 语法解析/压缩/格式化工具
官网:http://lisperator.net/uglifyjs/ 或者 https://github.com/mishoo/UglifyJS2
安装:
$ npm install uglify-js -g
使用方法见官网 demo
YUI compressor:
YUI Compressor 是一个用来压缩 JS 和 CSS 文件的工具,采用Java开发。
使用方法:
// 压缩JS
java -jar yuicompressor-2.4.2.jar --type js --charset utf-8 -v src.js > packed.js
// 压缩CSS
java -jar yuicompressor-2.4.2.jar --type css --charset utf-8 -v src.css > packed.css
Google Closure Compiler:
官网:https://developers.google.com/closure/compiler/
使用方法:
- 在命令行下使用一个google编译好的java程序
- 使用google提供的在线服务
- 使用google提供的RESTful API
6.WEB应用从服务器主动推送Data到客户端有那些方式?
- html5 websocket
- WebSocket 通过 Flash
- XHR长时间连接
- XHR Multipart Streaming
- 不可见的Iframe
- < script >标签的长时间连接(可跨域)
7.对网站重构的理解
网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变 UI 的情况下,对网站进行优化,在扩展的同时保持一致的 UI。
对于传统的网站来说重构通常是:
- 表格(table)布局改为 DIV + CSS
- 使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对 IE6 有效的)
- 对于移动平台的优化
- 针对于 SEO 进行优化
- 深层次的网站重构应该考虑的方面
- 减少代码间的耦合
- 让代码保持弹性
- 严格按规范编写代码
- 设计可扩展的API
- 代替旧有的框架、语言(如VB)
- 增强用户体验
- 通常来说对于速度的优化也包含在重构中
- 压缩JS、CSS、image等前端资源(通常是由服务器来解决)
- 程序的性能优化(如数据读写)
- 采用CDN来加速资源加载
- 对于JS DOM的优化
- HTTP服务器的文件缓存
8.js 操作获取和设置 cookie
// 创建cookie
function setCookie(name, value, expires, path, domain, secure) {var cookieText = encodeURIComponent(name) + '=' + encodeURIComponent(value);if (expires instanceof Date) {cookieText += '; expires=' + expires;}if (path) {cookieText += "; path=" + path }if (domain) {cookieText += '; domain=' + domain;}if (secure) {cookieText += '; secure';}document.cookie = cookieText;
}
// 获取cookie
function getCookie(name) {var cookieName = encodeURIComponent(name) + '=';var cookieStart = document.cookie.indexOf(cookieName);var cookieValue = null;if (cookieStart > -1) {var cookieEnd = document.cookie.indexOf(';', cookieStart);if (cookieEnd == -1) {cookieEnd = document.cookie.length;}cookieValue = decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length, cookieEnd));}return cookieValue;
}
// 删除cookie
function unsetCookie(name) {document.cookie = name + "= ; expires=" + new Date(0);
}
9.事件、IE与火狐的事件机制有什么区别? 如何阻止冒泡?
- 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为
- 事件处理机制:IE是事件冒泡、firefox同时支持两种事件模型,也就是:捕获型事件和冒泡型事件
- ev.stopPropagation();
注意旧ie的方法:ev.cancelBubble = true;
10.写一个通用的事件侦听器函数
// event(事件)工具集,来源:github.com/markyun
markyun.Event = {// 页面加载完成后readyEvent : function(fn) {if (fn==null) {fn=document;}var oldonload = window.onload;if (typeof window.onload != 'function') {window.onload = fn;} else {window.onload = function() {oldonload();fn();};}},// 视能力分别使用dom0||dom2||IE方式 来绑定事件// 参数: 操作的元素,事件名称 ,事件处理程序addEvent : function(element, type, handler) {if (element.addEventListener) {//事件类型、需要执行的函数、是否捕捉element.addEventListener(type, handler, false);} else if (element.attachEvent) {element.attachEvent('on' + type, function() {handler.call(element);});} else {element['on' + type] = handler;}},// 移除事件removeEvent : function(element, type, handler) {if (element.removeEnentListener) {element.removeEnentListener(type, handler, false);} else if (element.detachEvent) {element.detachEvent('on' + type, handler);} else {element['on' + type] = null;}}, // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)stopPropagation : function(ev) {if (ev.stopPropagation) {ev.stopPropagation();} else {ev.cancelBubble = true;}},// 取消事件的默认行为preventDefault : function(event) {if (event.preventDefault) {event.preventDefault();} else {event.returnValue = false;}},// 获取事件目标getTarget : function(event) {return event.target || event.srcElement;},// 获取event对象的引用,取到事件的所有信息,确保随时能使用event;getEvent : function(e) {var ev = e || window.event;if (!ev) {var c = this.getEvent.caller;while (c) {ev = c.arguments[0];if (ev && Event == ev.constructor) {break;}c = c.caller;}}return ev;}
}
11.异步加载和延迟加载
- 异步加载的方案: 动态插入 script 标签
- 通过 ajax 去获取 js 代码,然后通过 eval 执行
- script 标签上添加 defer 或者 async 属性
- 创建并插入 iframe,让它异步执行 js
- 延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的
12.eval是做什么的?
- 它的功能是把对应的字符串解析成JS代码并运行
- 应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)
13.如何获取UA
<script>
function whatBrowser() { document.Browser.Name.value=navigator.appName; document.Browser.Version.value=navigator.appVersion; document.Browser.Code.value=navigator.appCodeName; document.Browser.Agent.value=navigator.userAgent;
}
</script>
14.document.write和 innerHTML 的区别
document.write 只能重绘整个页面
innerHTML 可以重绘页面的一部分
佛系前端面试题记录--第八周相关推荐
- 2019前端面试题记录(杂文)
session和redis 目前session直接是js变量,放到nodejs的进程内存中,存在问题 问题一:进程内存有限,访问量过大,内存爆增怎么办?(有可能进程崩溃) 问题二:正式上线后运行的是多 ...
- 一年内经验前端面试题记录
1. JavaScript 1. JavaScript文件在什么情况下会放在html哪个位置 https://zhuanlan.zhihu.com/p/... 对于必须要在DOM加载之前运行的Java ...
- 前端面试题记录(大环境不太友好的2022篇)
前言 不出去体会一下就想不到所谓的别人口中的 "大环境不太好" 的具体情况 结果就是:相比上一次确实难多了,之前没投几家最后就确定了,这次真的是达到了海投的地步 (还是准备不够充分 ...
- 【面试】中级前端面试题记录及答案总结
前言 最近刚面试了一家互联网公司的中级前端开发工程师.好家伙,一面上来直接开始手写题,考算法什么的. 特此记录一下考题.看能不能帮助到大家,有些题忘记了,记录个大概吧. 目录 --手写题-- 1.le ...
- 前端笔试题记录【1】 + JS内置对象复习
目录 一.海康威视 二.微众银行 三.长沙兴盛优选 四.复习JS的内置对象 1.Math对象 2.Date对象 Array对象 String对象 一.海康威视 单选题 多选题 两道编程题 1.冒泡排序 ...
- 一名佛系退休前端程序员的年度总结(生活记录)
写在前边的几句话 大家好,我是一名坐标青岛,向往退休,擅长捕鱼的前端搬砖民工.回想这一年,很多话,无从说起.刚好这也是在掘金第一次发文章,是一年的结束,希望也是一个新的开始吧. "我自己是一 ...
- 前端笔试题面试题记录(上)
前言 过完元宵,就到上海找了波工作,现在已经入职好了,蹭波热点,写一波面试记录,内容包含笔试题和面试题,还有一些没有写进来,准备再开一篇,许久没写了,写的确实有些慢.如果喜欢的话可以点波赞,或者关注一 ...
- 前端笔试题面试题记录(下)
前言 接上篇前端笔试题面试题记录(上).趁清明小长假,把上篇剩下的部分也写一下,因为最近比较忙这篇已经拖了很久了.现在刚刚开始银四了,应该还是有些小伙伴在找工作,时间还不算太晚,希望本篇可以帮到这些小 ...
- 【面试题记录】2020前端秋招笔试面试题目记录
笔试题记录 1. 空元素 Empty Element (滴滴笔试) 空元素是HTML/SVG里的不可能存在子节点的元素. 个人理解就是:自闭和标签 HTML中的空元素: <br/> < ...
- 佛系张小龙和他的微信帝国 | 畅言
不知从何时起,加个微信代替了记个电话和加个QQ,微信成为了日常生活离不开的工具.这款国民应用由张小龙带领广研团队于11年推出,凭借出色的产品设计和对人性的精致把握,加上QQ的神助攻,在里外夹击中突围, ...
最新文章
- DTCC:数据库安全重点在数据拷贝过程中
- NGUI从入门到实战第1章开启NGUI学习之旅
- golang中的条件变量
- 请解释一下Java多线程回调是什么意思?
- C#中的结构和类之间的区别
- css宽高自适应布局,实现Sticky Footer的三种布局方式
- Python3.0 新特性
- Pycharm 中py文件编译成exe文件出现的问题和一个问题解决
- JVM运行时内存概念-堆栈及新生代、老年代、持久代
- excek快速删除指定行
- 计算几何-Andrew法-凸包
- Android 数据存储/访问 之 SharedPreferences(偏好设定)
- .Net Micro Framework移植基础(包编译通过)
- 一种破解静态链接库(.lib)的简单方法
- 计算机多媒体教室管理制度,新疆大学多媒体教室管理制度
- 手写解析微信Matrix性能监控日志的工具
- php eot,PHP定界符EOT的用法
- Effective C++ NVI手法
- 软文营销有什么效果,主要作用是什么?
- Tableau Desktop连接MongoDB
热门文章
- 如何优化Web网站性能?
- 通过collect埋点_通过Collect UI查找每日界面设计灵感
- phpstudy修改mysql账户名_phpstudy怎么更改用户名
- 阿里云如何选择带宽计费模式和带宽值
- 详解数据库三大范式、BCNF范式
- dota2服务器何时修复,《DOTA2》10月10日更新:服务器改善bug饰品修复
- python定义空数组_python定义二维数组
- 惠普打印机USB安装成功,但断开USB重新连接时显示脱机无法打印问题(上一版本的驱动程序还在内存中,因此无法加载驱动程序)
- RabbitMQ学习总结(一)
- 苹果Mac电脑的复制粘贴不能用了