本人第一篇CSDN博客:
1.String与StringBuff 的比较
1)String的联合+方法与StringBuff的append方法的区别:String的+运算符在进行字符串运算时,首先将当前的字符串对象转换为StringBuff 类型,调用其append方法,最后再将生成的StringBuff 对象通过其toString 方法转换为String类型的字符串,所以其效率要低。但是在可读性上,还是String的连接运算符要高。
2)StringBuff是线程安全的String是线程是飞安全的
3)String是不可以修改的字符串对象,而StringBuff是可以修改的。
2.今天面试官问我Spring中的AOP 是什么吗,我大概的回答类似于过滤器的切面切面编程吧,回来特地查了下aop,过滤器,拦截器的区别与联系。
Filter技术是Servlet2.3新增加的功能,Servlet2.3是sun公司于2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则。在众多参与者的共同努力下,Servlet2.3比以往功能都强大了很多,而且性能也有了提高。那么Filter有什么功能呢?Filter可以用来设置字符集、控制权限、控制转向等等。简单点说:就是定义在访问某对象之前和访问之后要做的事情。
拦截器是在Struts2中出现的概念。 Struts2与Struts1相比,去掉了很多概念:ForwardAction,ActionMapping,ActionForm,Action的继承也变的可有可无(如果不声明拦截器等Struts2中特有的东西)。但是去掉了,不代表没有,只是在使用的时候,不会看到这些类的存在。若是你细细对比,在Struts2中你会找到他们的身影的。但是Struts2多了拦截器的概念,这个概念类似于Filter,Struts2的架构其实就是基于拦截器的。在Struts2中,还有一个概念:拦截器链(interceptor-stack)。有关于上次文件的、多选、静态参数、国际化等等好多个默认拦截器,当然也可以自己手动写拦截器。
Filter和拦截器有什么区别和联系?
二者都是运用了AOP的思想,都让系统变的可配置。
1.拦截器是基于java的反射机制,而过滤器是基于函数毁掉。
2.拦截器不依赖servlet容器,过滤器依赖于servlet容器。
3.拦截器只能对action起作用,而过滤器可以对几乎所有的请求起作用(可以保护资源)
4.拦截器可以访问action上下文,、堆栈里面的对象,而过滤器不可以。
执行顺序:过滤器-拦截器-Action处理-拦截后-过滤后。
通过上面的对比,可以看出,如果不访问Action里面的东西,那么拦截器可以做的,Filter都能做。在选择上,我更加倾向于Filter,因为用了拦截器,就带入侵入性,如果换一个别的MVC框架,这些拦截器就不能用了,而Filter不会。
3.对于Tomcat容器熟悉吗,编译好的项目放在Tomcat 哪个文件加下面?
答:webapps.
4.Servlet的生命周期。这个题目基本基本面试JAVA开发都会问到。
· 1)初始化阶段 调用init()方法
2)响应客户请求阶段 调用service()方法
3)终止阶段 调用destroy()方法
5.被问到数据库SQL 语句时,问我怎么实现分组,但是脑子短路,说了一大堆关于分页的。虽然但是脑子中立马出现了group by,但是就是不敢说,以前都是说分组查询,突然问一句分组竟然不知道什么意思了。
6.request 与session的区别。
两个生命周期不一样,request的生命周期只在数据提交,提交以后即释放,session则是浏览器关闭才释放 。所以一般一些用户信息类的内容都会存在session里,比如购物车内信息,或者用户登录的各种身份验证信息,这样不会因为跳转页面而丢失这些信息
7.public,private,protected,缺省的区别。
1、public修饰词,表示成员是公开的,所有其他类都可以访问;
2、private修饰词,表示成员是私有的,只有自身可以访问;
3、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。
4、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访 问,访问权限是包级访问权限;
8.转发与重定向
1)从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.。
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2)从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3)从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4)从效率来说
forward:高.
redirect:低.
本质区别:解释一句话,转发是服务器行为,重定向是客户端行为。
9. 静态方法是不能调用非静态的成员和方法。