一、前言
昨天去了一家公司面试,被一些基础知识给被虐了,于是之整理以记之。
再次强调:基础很重要,基础很重要,基础很重要。
二、题目
1、js的闭包是什么?
当时听到这个题目是懵逼的,其实之前是玩过闭包的,可能当时就不是太理解,当时忘记了,也没想到会问这个。
举个栗子吧。
var result=[];
function foo(){
var i= 0;
for (;i<3;i=i+1){
result[i]=function(){
alert(i)
}
}
};
foo();
result[0](); // 3
result[1](); // 3
result[2](); // 3
上面已经给出了答案。每个alert的都是3。
闭包是一个比较抽象的概念,尤其是对js新手来说.书上的解释实在是比较晦涩。我就用最简单粗俗的理解了:就是一个function里面返回另一个function。上面之所以每个alert都是3因为闭包中所记录的自由变量,只是对这个变量的一个引用,而非变量的值,当这个变量被改变了,闭包里获取到的变量值,也会被改变。
// 这是对上面方法的改造
function foo(){
var i= 0;
for (;i<3;i=i+1){
result[i]=(function(j){
return function(){
alert(j);
};
})(i);
}
};
2、session共享问题
session的生命周期
创建:Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。
销毁:
1. 服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。
2. 调用Session的invalidate方法。
关于具体共享问题:查看此博客,讲的已经非常好了。
3、如果客户端禁止cookie了,怎么解决
使用URL重写
HttpSession session = req.getSession();
String path = resp.encodeRedirectURL( "/world" );
System.out.println( "jsessionId是:" + req.getSession().getId() );
4、Object o = new Object();int a = 1 ,o,a分别存放在哪里?
o存放在哪里比较简单,o是引用存放在栈里,new Object()实例存放在堆里。
关于a:首先在栈中创建一个a的引用,然后在栈中查找是否有1这个字面量,如果有,直接将a的引用指向1,如果没有则创建一个1。
5、什么是xss
xss:中文就是跨站脚本注入。
简单来说就是在一个页面的输入框让你填写用户名密码,你呢,搞一段js来侵入别人网站。
防止:我们可以写一个filter来过滤掉一些脚本。主要思路是包装:HttpServletRequest类。具体看以下博客:
http://blog.csdn.net/fywt98/article/details/54425364
三、总结
问了好多,记住的没几个,很尴尬,再次强调,对一个问题一定要理解透了,即使是很简单的问题。