免费公司网站建设,广西通信规划设计咨询有限公司,深圳多语言网站建设,做美妆网站的关键词面试官提问的内容通常会由易到难#xff0c;如果前面容易的内容都答不上来#xff0c;往往就被刷了#xff0c;如果是前面提问的都答上来了#xff0c;他会问一些有深度的问题#xff0c;这时候就算你回答不上来也不要慌张#xff0c;他只是看看你的薪资水平而已
接下来…面试官提问的内容通常会由易到难如果前面容易的内容都答不上来往往就被刷了如果是前面提问的都答上来了他会问一些有深度的问题这时候就算你回答不上来也不要慌张他只是看看你的薪资水平而已
接下来我就说一下java面试通常会问到的一些知识点
如果你的简历上面没有写框架的东西只写了web的一些技术比如servlet和jsp他一般会问java基础但是如果写了框架一般就不问java基础了当然servlet和jsp是要问的
一我这里就先开始说servlet
1servlet的生命周期
void init(ServletConfig)出生之后1次
void service(ServletRequest request,ServletResponse response)每次处理请求时都会被调用
void destroy()临死之前1次
这样说也够了但是为了显示自己很厉害还可以说明他们分别是什么时候使用是干啥的
第一次创建servlet对象之后服务器会调用init(ServletConfig)他是是用来初始化servlet参数ServletConfig就是servlet的配置信息每次接收请求都会调用service他是用来处理请求服务器关闭时会调用destroy(),destroy可以用来释放资源 2servlet是干什么的
Servlet是JavaWeb的三大组件之一它属于动态资源。Servlet的作用是处理请求服务器会把接收到的请求交给Servlet来处理在Servlet中通常需要1 接收请求数据2 处理请求3完成响应。
3servlet是怎么得到的
有三种1实现servlet接口2继承GenericServlet抽象类3继承HttpServlet抽象类
这样答基本上就可以了但是我们还可以解释一下
GenericServlet抽象类实现servlet接口而HttpServlet抽象类是是GenericServlet抽象类的子类通常用的都是继承HttpServlet抽象类因为他是跟Http协议相关的专门用来处理Http协议的请求
4有哪些域对象
(1)域对象就是用来在多个Servlet中传递数据,底层是一个map用来存数据和取数据
(2)ServletRequest作用范围是一个请求
(3)HttpSessionl 一个会话创建一个HttpSession对象同一会话中的多个请求中可以共享session中的数据
(4)ServletContext服务器会为每一个项目创建一个ServletContext对象作用范围是整个项目 ServletContext对象的作用是在整个项目的动态资源之间共享数据 5重定向和请求转发和请求包含
1l请求转发是一个请求而重定向是两个请求
2请求转发的目标只能是本应用中的资源重定向的目标可以是其他应用
请求转发和请求包含都是一次请求而且请求转发是留头不留体也就是的前一个servlet的响应头是可以设置的但是响应体是不允许输出而只能使用后一个servlet的
请求包含是留头又留体响应体和响应头都允许输出
所以请求包含大多都是在jsp页面中用来完成多页面的合并请求转发大多都是在servlet中。转发目标大多是jsp页面
6关于servlet
Servlet是线程不安全的而且是单实例对象当多个请求向一个Servlet发出时有可能会存在一个线程对其进行读操作。另一个对其进行写操作
有三种解决方法
不要在Servlet中创建成员创建局部变量即可
可以创建无状态成员也就是没有get、set方法
可以创建有状态的成员但状态必须为只读的也就是没有set方法
二jsp
1jsp是干什么的
JSPJava Server Pages是JavaWeb服务器端的动态资源。他是用来显示数据和获取数据。
JSP是一种特殊的Servlet当JSP页面首次被访问时容器Tomcat会先把JSP编译成Servlet然后再去执行Servlet。所以JSP其实就是一个Servlet
2会话跟踪技术
1HTTP协议中可以使用Cookie来完成会话跟踪在JavaWeb中使用session来完成会话跟踪session底层依赖Cookie技术
2cookie
不同浏览器之间是不共享Cookie的
如果服务器端发送重复的Cookie那么会覆盖原有的Cookie
当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器这样服务器就可以识别客户端了
cookie的生命默认情况下是保存在浏览器内存中一旦浏览器关闭cookie就消失了
但是可以通过设置时间来让他保存在磁盘中这样在浏览器关闭之后也会存在存在时间就是设置的时间
请求路径如果包含了Cookie路径那么会在请求中包含这个Cookie否则不会请求中不会包含这个Cookie。
这里要注意cookie的路径要比请求的路径要大应该这么想一个cookie可以被多个请求带上
3session
HttpSession也是一个域对象
当首次使用session时服务器端要创建sessionsession是保存在服务器端而给客户端的session的id一个cookie中保存了sessionId。客户端带走的是sessionId而数据是保存在session中。
当客户端再次访问服务器时在请求中会带上sessionId而服务器会通过sessionId找到对应的session而无需再创建新的session。
session保存在服务器而sessionId通过Cookie发送给客户端但这个Cookie的生命不-1即只在浏览器内存中存在也就是说如果用户关闭了浏览器那么这个Cookie就丢失了。
当用户再次打开浏览器访问服务器时就不会有sessionId发送给服务器那么服务器会认为你没有session所以服务器会创建一个session并在响应中把sessionId中到Cookie中发送给客户端。
这里有一个很重要的问题就是页面的路径的范围小于等于Cookie的路径的范围
Cookie中不能存在中文
如果是在浏览器内存中就会出现当开两个相同的浏览器时是没有关联的是属于两个用户
如果是在计算机硬盘中说明就是有关联的是属于一个用户 4三大指令
page指令定义整个页面的一些属性和值、include指令静态包含先合并再编译如果是动态包含就是先编译再合并、taglib指令导入标签库
5九大内置对象
out -- jsp的输出流用来向客户端响应
page -- 当前jsp对象 它的引用类型是Object即真身中有如下代码Object page this;
config -- 它对应真身(就是转译成的Java文件它其实是一个Servlet)中的ServletConfig对象
pageContext -- 一个顶9个(以下那些都和Servlet里的匹配起来他们的使用方法是一样的)
request -- HttpServletEequest
response -- HttpServletResponse
exception -- Throwable
session -- HttpSession
application -- ServletContext一个jsp页面这个域是在当前jsp页面和当前jsp页面中使用的标签之间共享数据
代理其他域pageContext.setAttribute(xxx, XXX, PageContext.SESSION_SCOPE); 全域查找pageContext.findAttribute(xxx);从小到大依赖查找 获取其他8个内置对象
多个用户请求一个JSP页面时要为每一个用户开辟一个线程
6.一般问到的是打开一个IE浏览器打开一个网站之后再打开这个浏览器也打开这个网站总共有几个session对象创建
这个这样答比较详细可能一个也可能两个因为session本身是存在于服务器端的session的识别是通过cookie中的JSessionIDsession的底层是依赖于cookie的而如果cookie设置的时间是默认的-1说明cookie是存在于浏览器内存中这样cookie是相对于浏览器存在的一个浏览器一个对象而如果设置的时间大于0那么cookie就会存在于磁盘中只要是相同的浏览器开启之后都会是一个session对象而且虽然cookie存在于磁盘中不同的浏览器也不会有相同的session对象肯定是不一样的不同的浏览器是不共享cookie的
7.还可能会问session是依赖于什么存在的
先回答是cookie因为session对象本身是存在于服务器端的而把JSessionID是存放在cookie中当再次进行请求时cookie中会带上JSessionID这样就可以得到服务器端的session了 但是如果这个请求时没有cookie的如果我们还想使用session我们也可以通过URL重写的方式这需要在每个URL后面都加上sessionId这样用户的请求中就包含了sessionId服务器就可以通过sessionId找到对应的session对象了。
所以session是依赖于cookie或者URL重写
三过滤器
1过滤器是怎么执行的
当用户请求某个Servlet时会先执行部署在这个请求上的Filter如果Filter“放行”那么会继承执行用户请求的Servlet如果Filter不“放行”那么就不会执行用户请求的Servlet。
doFilter()方法的参数中有一个类型为FilterChain的参数它只有一个方法doFilter(ServletRequest,ServletResponse)。执行这个方法就会放行
2有哪几种拦截方式
拦截方式REQUEST、FORWARD、INCLUDE、ERROR默认是REQUEST方式。
l REQUEST拦截直接请求方式
l FORWARD拦截请求转发方式
l INCLUDE拦截请求包含方式
l ERROR拦截错误转发方式。
filter-mapping的配置顺序决定了过滤器的执行顺序
四Struts2
1拦截器的作用拦截器与过滤器的区别
1一组拦截器构成了过滤器来实现而过滤器和action是Struts2的核心组件同时可以减轻代码冗余提高重用率。
2) 过滤器是拦截用户请求的,范围明显比拦截器大的多。
2如何在 Struts2 中使用 Ajax 功能
3Struts2 如何访问 HttpServletRequest、HttpSession、ServletContext 三个域对象 访问servlet的API
1通过ActionContext来访问这种方式可以访问这servlet的API对象但是无法直接获得对象
2实现接口ServletRequestAware都是APIAware实现这些接口并且写上相应的与对象的变量和set方法就可以了
3ServletActionContext的静态方法可以获取
4.为什么要使用 Struts2 Struts2 的优点Struts2和Struts1和webWork的关系
5.Struts2的前端控制器是什么
StrutsPrepareAndExecuteFilter他其实就是一个过滤器他有两个功能一个是预处理一个是执行预处理是通过他的生命周期方法init加载action配置文件过滤器由一组拦截器组成这些拦截器就是进行拦截
6action中是怎么编写的呢
a:只写个普通类不实现任何接口不继承任何类
b:实现action接口
c:继承actionSupport类这个类就已经实现了action接口还实现了很多其他的接口
7Struts2的配置文件的加载顺序
struts.xml-struts.properties-web.xml 8Struts2中的数据封装有哪几种方法
可以这么说有两种一个是属性封装一个是模型驱动封装属性封装有包括set方法和表达式封装
也可以说有三种一个是属性封装一个是模型驱动封装一个是表达式封装
属性封装设置属性的set方法
模型驱动封装通过实现ModelDriver接口来接收请求参数里面的泛型是要封装的类之后手动构建对象重写getModel方法返回的就是Action所使用的数据模型对象
表达式封装其实他本质上也是属性封装只是当属性很多的时候就会写很多set方法这样很臃肿所以就把这些属性和setget方法封装到一个对象中在action中直接使用这个对象
区别表达式封装是本质上就属于属性封装只是当属性太多时将这些属性封装到了一个对象中直接使用对象所以当属性少的时候就用属性封装当属性多的时候就用表达式封装而表达式封装和模型驱动封装本质上是不同的如果操作现有的pojo对象就用模型驱动封装而如果操作的属性很多但是不构成现有的pojo对象或者构成了多个pojo对象就需要使用表达式封装
9拦截器是怎么进行拦截的
拦截器是动态拦截action的调用对象可以定义在执行action之前或之后可以执行的一些功能也可以判断是否进行拦截
他这里用到了Aop思想面向切面思想也就是不通过修改源代码而去扩展功能
还有就是责任链也叫拦截器链将拦截器按照一定的顺序组成一个链之后当访问这个action时会按照定义好的顺序进行拦截 五spring
1spring的特性是什么
1spring是一站式框架在web层有springMVC在service层有IOC在dao层有JDBCTamplate对于常见的dao层框架也有相应的Template,
2IOC思想控制反转对象的创建不是通过new方式来实现而是通过spring配置创建类对象
3AOP思想面向切面编程不通过修改源代码而实现功能的扩展
2IOC底层原理是怎么实现的
dom4j解析xml文件工厂设计模式反射最主要就要说出反射
3spring是怎么配置创建类对象的
可以这么答有两种一个是配置文件配置一种是注解方式
配置的方式有三种使用类的无参构造创建
为了让学习变得轻松、高效今天给大家免费分享一套Java入门教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要入门的资料欢迎加入学习交流群928505736