综述:平时看到别人的面试问题,做下总结
1.是否了解重构?具体需要注意哪些?
重构的原因:
- 祖传代码随着时代的发展出现了越来越多的问题,比如可扩展性,可维护性,开发效率过低
- 已经产生了新的可替代技术,可大幅度提高用户体验、产品性能、开发效率;
需要注意的点:
- 一定要找到当前产品中的问题,包括代码中的,产品未来发展方向等
- 了解各方的需求
- 做好技术的选型
- 要资深工程师做架构设计
- 针对未来可能出现的功能,全面考虑可扩展性
- 代码模块之间要解耦
- 制定基本的开发规范,统一大家的思想,避免混乱
2.正则表达式是否系统学习过?贪婪匹配和非贪婪匹配(懒惰匹配)理论知识?
没有,平时需要的时候,去查找即可;
正则表达式的贪婪与非贪婪匹配:
如:String str="abcaxc";
Patter p="ab.*c";
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab.*c)。
非贪婪匹配(懒惰匹配):就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab.*c)
3.Sizzle是否有用过?sizzle.js是什么?
Sizzle.js是jQuery的御用选择器引擎,是jQuery作者John Resig写的DOM选择器引擎,速度号称业界第一。另外,Sizzle是独立的一部分,不依赖任何库,如果你不想用jQuery,可 以只用Sizzle。所以单独拿出来特别对待。在Prototype1.7中,选择器也采用了Sizzle,不过版本有点老。
4.不好的jQuery书写方式有哪些?好的又有哪些?
5.cookies的操作和属性有哪些?怎样封装操作cookies的方法?
Cookie 是服务器保存在浏览器的一小段文本信息,每个 Cookie 的大小一般不能超过4KB。浏览器每次向服务器发出请求,就会自动附上这段信息;
5.1操作方法介绍
- 设置cookie存储:注意 设置cookie一次只能存储一条,cookie可以多次设置 key相同不会重新赋值而是会新建一条cookie
document.cookie = 'userName=fengkaicahng';
- 读取cookie
var allCookies = document.cookie;
//一次读取所有cookie 字符串形式
//所以一般我们还要做一次转换
var cookiesArray=document.cookie.split(';');
console.log(cookiesArray);
5.2属性介绍
- value 必须一个键值对,用来指定cookie的值
document.cookie = 'userName=fengkaicahng';
- expires 指定Cookie过期时间;格式采用Date.toUTCString()
var day = new Date();
day.setTime(day.getTime()+(1*24*60*60*1000));
//设置一天的有效期
//如果不设置; 默认时间是当前会话窗口关闭即失效
document.cookie = 'userName=fengkaicahng;expires="+day+"';
- domain 指定发送Cookie的域名
var day = new Date();
day.setTime(day.getTime()+(1*24*60*60*1000));
//只有在该域名下才发送cookie,
//如果不设置; 默认是设置cookie时的域名
//以下配置会在fengkaichang.com 的所有子域名下生效
document.cookie = 'userName=fengkaicahng;expires='+day+';domain=fengkaichang.com;
- path 指定Cookie的路径
var day = new Date();
day.setTime(day.getTime()+(1*24*60*60*1000));
//只有这个路径和发送到服务器的路径相同才发送cookie 可以直接配置/ 从根目录下匹配 这个匹配并不是绝对的,
//如果不设置; 默认是请求该cookie时的路径
//以下配置会在fengkaichang.com 的所有请求路径下生效
//注意 path生效的前提是domain匹配成功,否则都是扯淡
document.cookie = 'userName=fengkaicahng;expires='+day+';domain=fengkaichang.com;path=/'
- secure 指定Cookie只能在加密协议HTTPS下发送到服务器
var day = new Date();
day.setTime(day.getTime()+(1*24*60*60*1000));
//这个属性的值是一个布尔值
//如果这个通信协议是HTTPS那么协议自动打开
//如果手动设置 一下配置不会在普通HTTP协议下发送
document.cookie = 'userName=fengkaicahng;expires='+day+';domain=fengkaichang.com;path=/;secure=true'
6.简述js封装?
js疯转就是尽量把复杂的,重复的功能模块化,把使用方式简单化,内部逻辑和使用解耦,通俗的说就是使用的时候只需要知道该传入什么参数和返回的值,其他的条件尽量不要使用人员进行设置,方便代码的统一管理和复用,提高开发效率;
js封装的方法:
- 函数的方式,使用的时候,直接调用函数即可,简单的功能可以,复杂的功能不合适
function kk(a,b){
//内部对a,b怎么处理就不需要关心了
}
- 对象方式,ops系统大量使用,
function kk(a,b){
this.x = a;
this.y = b;
}
var k = new kk(1,2);//通过面向对象的方式
- 闭包的方式,应用场景是?
function kk(a,b){
var k = 1;
return function tt(){
k++;
}
}
var u = kk(1,2);
u();//闭包实现累加
u();//闭包实现累加
7.js继承的两种形式是?
- 原型链继承:将父类的实例作为子类的原型
- 构造继承:使用父类的构造函数来增强子类实例,等于是复制父类的实例属性给子类(没用到原型)
- 实例继承
- 拷贝继承
- 组合继承
- 寄生组合继承
8.css层叠是什么?
通过使用css中的position来设置元素的定位,改变z-index值来实现元素在不同层级的显示
9.四大主流IDE的使用情况,各自的优势是什么?
- Visual Studio Code:插件相对比较多
- webstorm:付费,功能挺全,占用内存较大,内置ES6,sass,less转译工具,代码ugify(丑化工具)
- Hbuilder:可以打包Hybrid APP,内置nativeBrige.js中间件,前端单独开发混合式APP时,非常有用,提示较全面
- Sublime text :最为轻量,也可以扩展,短暂时间使用可选
10.cookie和seesion之间的区别?在什么时候使用?
cookie用于客户端和服务端交互,信息传递,session则是服务端的一个存储用户信息的载体,比如用于记录用户的登录状态,每次请求一次就刷新一下用户的session值,当session值在15分钟都没有变时,提醒用户重新登录;
11.什么是闭包?闭包有什么作用?使用的好处和坏处是?可以使用闭包实现函数add(1)(2)=3 吗?alibaba校招面试题
function add(a){
return function(b){
return a+b;
}
}
console.log(add(1)(2)); //3
12.HTTP请求报文与响应报文格式,十分重要的基础知识
请求报文包含三部分:
a、请求行:包含请求方法、URI、HTTP版本信息
b、请求首部字段
c、请求内容实体
响应报文包含三部分:
a、状态行:包含HTTP版本、状态码、状态码的原因短语
b、响应首部字段
c、响应内容实体