Java开发技术面试考点--Java web编程

Java web编程

❤1、web编程基础

1、启动项目时如何实现不在链接里输入项目名就能启动?
修改tomcat文件:server.xml
找到自己的项目设置:
<Context docBase=“userManager” path="/userManage" reloadable=“true” source=“org.eclipse.jst.jee.server:userManager”/>
修改成:
<Context docBase=“userManager” path="/" reloadable=“true” source=“org.eclipse.jst.jee.server:userManager”/>
2、1分钟之内只能处理1000个请求,你怎么实现,手撕代码?

3、什么时候用assert
断言 一般使用在程序开发调试中,
4、JAVA应用服务器有那些?
WebLogic, WebSphere, Jboss, Tomcat象及方法。
6、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?(JSP)
jsp和servlet的区别和联系:
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
联系: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
7、说一说四种会话跟踪技术
会话跟踪技术:url重写,隐藏表单域,cookie,seesion
cookie和session都是一种存储用户状态信息的机制,cookie是服务器发送客户端存储在浏览器中用户状态信息,以文本形式存在,再次请求时发送cookie至服务器。单个cookie默认限制大小为4k,且只支持ascii的字符形式,且只能在同一级域名下使用。如果浏览器设置禁用cookie,则无法使用该模式,转而使用session
session是存储在服务器中的用户状态信息的机制,session没有大小限制,也支持任意类型对象,但是这样会增加服务器的压力。session可以在同一主机名下使用。
url重写,可以通过url参数的形式将信息发送至服务器。但是这种方式参数的大小受到浏览器限制,cookie禁用时可以继续的工作,不存在持久性,一旦页面关闭则结束,这种方式通过明文将信息传输,并不安全,容易被劫持
隐藏表单域通过input标签设置type=hidden和value的方式实现,该当时能够在cookie禁用时继续工作,不存在持久性,一旦页面关闭就结束了。参数将会存放在请求实体中,长度没有限制,因此不支持get请求方式。但是这种方式会影响浏览器对于html的渲染性能(吐槽:ASP.NET页面就是这种方式,你会发现通过f12后html中存在大量的隐藏表单域,且value中的数据量还是比较大的,十分影响渲染响应速度)
8、讲讲Request对象的主要方法
Request对象是当客户端向服务器端发送请求时,服务器为本次请求创建request对象,并在调用Servlet的service方法时,将该对象传递给service方法。Request对象中封装了客户端发送过来的所有的请求数据。
Request对象的类型是HttpServletRequest,该类中定义了很多与http协议相关的方法,比如获取请求头信息,请求方式,客户端ip地址等信息。下面是常用的API.
(1)常用信息
String getRemoteAddr():获取客户端ip地址
String getMethod():获取客户端请求方式。例如:get或post
(2)获取请求头信息
String getHeader(String name):获取单值的请求头的值。
int getIntHeader(String name):获取单值int类型的请求头的值
Request获取请求参数方法
String getParameter(String name )
获取指定名称的请求参数值,适用于单值的请求参数
String[] getParameterValues(String name)
获取指定名称的请求参数值,适用于多值的请求参数
Enumeration getParameterNames()
获取所有的请求参数名称
Map getParameterMap()
获取所有请求参数,其中参数名作为map的key,参数值作为map的value.
9、说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然后在浏览器上就可打入主机?

10、jsp有哪些动作?作用分别是什么?
JSP 共有以下6种基本动作 jsp:include:在页面被请求的时候引入一个文件。 jsp:useBean:寻找或者实例化一个JavaBean。 jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到一个新的页面。 jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
11、请谈谈JSP有哪些内置对象?作用分别是什么?
JSP共有以下9种基本内置组件
1、request对象 客户端请求,此请求会包含来自GET/POST请求的参数通过它才能了 解到客户的需求,然后做出响应。
2、response对象 响应客户请求的有关信息
3、session对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个 WebApplication开始,直到客户端与服务 器断开连接为止。
4、out对象 它是JspWriter类的实例,是向客户端输出内容常用的对象
5、page对象 它是指向当前JSP页面本身,有点象类中的this指针,它是 java.lang.Object类的实例
6、application对象 它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭
7、exception对象 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。
8、pageContext对象 它提供了对JSP页面内所有的对象及名字空间的访问
9、config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的
12、说一下表达式语言(EL)的隐式对象及其作用

13、JSP中的静态包含和动态包含有什么区别?
1.两者格式不同,静态包含:<%@ include file=“文件” %>,而动态包含:<jsp : include page = “文件” />。
2.包含时间不同,静态包含是先将几个文件合并,然后再被编译,缺点就是如果含有相同的标签,会出错。
动态包含是页面被请求时编译,将结果放在一个页面。
3.生成的文件不同,静态包含会生成一个包含页面名字的servlet和class文件;而动态包含会各自生成对应的servlet和class文件
4.传递参数不同,动态包含能够传递参数,而静态包含不能
14、过滤器有哪些作用和用法?
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。
可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。
Servlet 过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:
在客户端的请求访问后端资源之前,拦截这些请求。
在服务器的响应发送回客户端之前,处理这些响应。
15、请谈谈你对Javaweb开发中的监听器的理解?
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。
监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行。
java中的事件监听机制可用图来表示:
Java开发技术面试考点--Java web编程_第1张图片
16、说说web.xml文件中可以配置哪些内容?
监听器(listener)、过滤器(filter)、Servlet、相关参数、会话超时时间、安全验证方式、错误页面等

❤2、web编程进阶

1、forward与redirect区别,说一下你知道的状态码,redirect的状态码是多少?
(1)转发在服务器端完成,重定向在客户端完成
(2)转发一次请求 ,重定向两次请求
(3)转发地址栏没变化,重定向地址栏有变化
301 永久重定向,302临时重定向
2、servlet生命周期,是否单例,为什么是单例。

  1. 加载并实例化:servlet容器负责servlet的加载和实例化操作,当容器启动或第一个请求来临时,servlet容器会创建一个servlet实例。当客户端向容器发送请求并相应时,servlet容器会检查是否存在servlet实例,如果有则取出,如果没有则创建一个实例
  2. 初始化:当servlet进行实例化后,容器将会调用servlet的init方法进行初始化,初始化的作用:建立数据库连接,配置初始化参数等操作
  3. 服务:当servlet完成初始化操作之后,此时servlet容器能够响应客户端请求,当容器收到这样的请求后,容器就会调用servlet的service方法,并根据该请求的方法类型,在适当的时候调用doGet或doPost方法。容器调用service方式并能够将请求对象和响应对象作为参数进行传递
  4. 卸载:当servlet需要被卸载或关闭时,容器就会在所有servlet的service线程被调用之后,调用servlet的destory方法终止,jvm对无用的存储单元进行回收

servlet并非是单例的,在非分布式中,一般web.xml中申明的一个servlet只对应一个实例
如果web.xml中申明多个实例则也会生成多个Servlet实例
在分布式环境下,可能并不是单例的
是否实现SingleThreadMode,因为他最多会创建20个实例,但是该类已经被弃用
3、说出Servlet的生命周期,并说出Servlet和CGI的区别。
Servlet的生命周期:在一个http请求到达服务器,访问Servlet容器时,如果已存在Servlet服务,则调用Service服务
如果没有,则进行实例化,然后执行init()方法,然后再调用Service()服务,使用其中的get()方法或post()方法.
到进程需要销毁时,调用destroy()方法,服务器关闭时自动调用destroy方法进行销毁
总体来说,生命周期如下:
(1)加载并实例化
(2)init()
(3)service()
(4)destroy()
4、Servlet执行时一般实现哪几个方法?
Servlet执行时要先编译成xx.class源文件,然后由jvm的类加载器加载进运行时容器,如tomcat,
当有人访问你的Servlet时,Servlet首先运行自己的构造方法,然后运行init()方法,进行Servlet的初始化,之后运行service()方法,在service()方法中,根据你请求的类型,如直接通过url地址打开这个Servlet为get方式,如通过表单并且表单的method属性为post,打开Servlet才为post方式;
service()方法根据你访问这个Servlet用的是get还是post方式,分别调用doGet,和doPost方法。
然后当Servlet容器,web服务器关闭时,调用此Destroy()方法销毁此Servlet对象.
执行的方法按顺序为:构造方法,init(),doGet()或者doPost(),Destroy();
5、阐述一下阐述Servlet和CGI的区别?
CGI(Common Gateway Interface),它是外部应用程序(CGI程序)与Web服务器之间的接口标准,是CGI程序和Web服务器之间传递信息的过程。
Servlet被服务器实例化之后,容器自动运行初始化(init)方法,当请求到达时运行其Service方法,Service方法自动运行和请求对应的方法(doGet,doPost),当服务器决定将实例销毁的时候调用destroy方法。
Servlet处于服务器进程中,它通过多线程运行Service方法,一个实例可以服务于多个请求,并且实例一般不会被销毁。
CGI每个请求都产生新的进程,并且服务完后就销毁,所以效率上低于Servlet。
Servlet可以完成CGI相同的功能。
Servlet提供了Java应用程序的所有优势——可移植、稳健、易开发。
6、说说Servlet接口中有哪些方法?
init、service、destroy、getServletConfig、getServletInfo。 前三个为生命周期方法。
7、Servlet 3中的异步处理指的是什么?
8、如何在基于Java的Web项目中实现文件上传和下载?
前端通过多表单提交的方式,以及file属性进行文件选择,注意必须使用post提交的方式,后端通过multpartfile进行文件接收,然后通过文件流进行下载保存即可
9、服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
doGet会放在地址栏中显示传递的信息,doPost会将请求的参数放在请求体中,表单提交参数过多,放在地址栏中不方便,所以放在请求体中,所以doPost
10、Servlet中如何获取用户提交的查询参数或表单数据?
可以通过请求对象(HttpServletRequest)的getParameter()方法通过参数名获得参数值。如果有包含多个值的参数(例如复选框),可以通过请求对象的getParameterValues()方法获得。当然也可以通过请求对象的getParameterMap()获得一个参数名和参数值的映射(Map)。
11、Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?
可以在Servlet中直接调用getInitParameterr(java.lang.Stringname)方法来读取初始化参数。也可以通过ServletConfig接口的getInitParameter(java.lang.Stringname)方法。getServletConfig()该方法定义在Servlet接口中,返回ServletConfig接口的引用。
所有的servlet都继承了该方法。当容器实例化一个servlet之前,会从web.xml中读取这个servlet的初始化参数,并把这些参数交给ServletConfig,然后在调用init()方法时,容器会传送这个ServletConfig的引用到servlet。每个servlet都会有一个唯一的ServletConfig引用。一旦有了ServletConfig的引用就可以调用getInitParameter()方法来取得我们在servlet中设置的初始化参数。
样取得上下文初始化参数?
servlet的ServletConfig对象拥有该servlet的ServletContext的一个引用,所以可这样取得上下文初始化参数:getServletConfig().getServletContext().getInitParameter()
也可以在servlet中直接调用getServletContext().getInitParameter(),两者是等价的。
12、讲一下redis的主从复制怎么做的?
13、redis为什么读写速率快性能好?
1.Redis将数据存储在内存上,避免了频繁的IO操作
2.Redis其本身采用字典的数据结构,时间复杂度为O(1),且其采用渐进式的扩容手段
3.Redis是单线程的,避免了上下文切换带来的消耗,采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。
14、redis为什么是单线程?
注意:redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块仍用了多个线程。
因为CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽,既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于redis的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求
15、缓存的优点?
缓存是为了解决CPU速度和内存速度的速度差异问题
内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多
这里要特别指出的是:
1.因为缓存只是内存中少部分数据的复制品,所以CPU到缓存中寻找数据时,也会出现找不到的情况(因为这些数据没有从内存复制到缓存中去),这时CPU还是会到内存中去找数据,这样系统的速度就慢下来了,不过CPU会把这些数据复制到缓存中去,以便下一次不要再到内存中去取。
2.因为随着时间的变化,被访问得最频繁的数据不是一成不变的,也就是说,刚才还不频繁的数据,此时已经需要被频繁的访问,刚才还是最频繁的数据,现在又不频繁了,所以说缓存中的数据要经常按照一定的算法来更换,这样才能保证缓存中的数据是被访问最频繁的
16、aof,rdb,优点,区别?
RDB优点:
RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份
RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快(因为其文件要比AOF的小)
RDB的性能更好
RDB缺点:
RDB的持久化不够及时
RDB持久化时如果文件过大可能会造成服务器的阻塞,停止客户端请求!
AOF优点:
AOF的持久性更加的耐久(可以每秒 或 每次操作保存一次)
AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂, 对文件进行分析(parse)也很轻松。
AOF是增量操作
AOF缺点:
对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。
17、redis的List能用做什么场景?
Redis list应用场景非常多,也是Redis最重要的数据结构之一
我们可以轻松地实现最新消息排行等功能。
Lists的另一个应用就是消息队列,可以利用Lists的PUSH操作,将任务存在Lists中,然后工作线程再用POP操作将任务取出进行执行。
18、说说MVC的各个部分都有那些技术来实现?如何实现?
MVC是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), View是应用的表示面(由JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。
19、什么是DAO模式?
DAO (DataAccessobjects 数据存取对象)是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。通俗来讲,就是将数据库操作都封装起来。
一个典型的DAO 模式主要由以下几部分组成。
1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。
2、DAO 实现类: 针对不同数据库给出DAO接口定义方法的具体实现。
3、实体类:用于存放与传输对象数据。
4、数据库连接和关闭工具类: 避免了数据库连接和关闭代码的重复使用,方便修改。
20、请问Java Web开发的Model 1和Model 2分别指的是什么?
21、你的项目中使用过哪些JSTL标签?
项目中主要使用了JSTL的核心标签库,包括等,主要用于构造循环和分支结构以控制显示逻辑。
22、使用标签库有什么好处?如何自定义JSP标签?(JSP标签)
使用标签库的好处包括以下几个方面:

  • 分离JSP页面的内容和逻辑,简化了Web开发;
  • 开发者可以创建自定义标签来封装业务逻辑和显示逻辑;
  • 标签具有很好的可移植性、可维护性和可重用性;
  • 避免了对Scriptlet(小脚本)的使用(很多公司的项目开发都不允许在JSP中书写小脚本)

自定义JSP标签包括以下几个步骤:

  • 编写一个Java类实现实现Tag/BodyTag/IterationTag接口(开发中通常不直接实现这些接口而是继承TagSupport/BodyTagSupport/SimpleTagSupport类,这是对缺省适配模式的应用),重写doStartTag()、doEndTag()等方法,定义标签要完成的功能
  • 编写扩展名为tld的标签描述文件对自定义标签进行部署,tld文件通常放在WEB-INF文件夹下或其子目录中
  • 在JSP页面中使用taglib指令引用该标签库

❤3、web编程原理

1、get和post区别?
1、get用于获取数据,post用于提交数据
2、get提交参数追加在url后面,post参数可以通过http body提交
3、get的url会有长度上的限制,则post的数据则可以非常大
4、get提交信息明文显示在url上,不够安全,post提交的信息不会在url上显示
5、get提交可以被浏览器缓存,post不会被浏览器缓存
2、请谈谈转发和重定向的区别?
1、转发是在服务器端完成的,重定向是在客户端发生的;
2、转发的速度快,重定向速度慢;
3、转发是同一次请求,重定向是两次请求;
4、转发地址栏没有变化,重定向地址栏有变化;
5、转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。
3、说说你对get和post请求,并且说说它们之间的区别?
4、cookie 和session 的区别?
1.存储位置
cookie存储在浏览器临时文件夹中,以明文方式存储,可以隐私信息加密存储,为多个用户共享
seesion存储在服务器内存中,一个session域对象,为一个用户浏览器服务
2.安全性
cookie是以明文方式存储,存放在客户端中,安全性弱,可以通过加密再存放
session是存放在服务端内从中,安全性较好
3.网络传输量
cookie会传递信息给服务器
session的属性值不会给客户端
4.生命周期
cookie的生命周期是累计时间,即如果我们cookie设置setMaxAge(30),则30秒后失效
session生命周期是间隔时间,如果设置session 20min,只在20min内没有访问session,则session失效,以下情况,session也会失效:
tomcat关闭
reload web应用
调用invalide方法
5.使用原则
因为session会占用服务器的内存,不要想session中存放过多、过大的对象,会影响内存
5、forward 和redirect的区别
6、BS与CS的联系与区别。
BS是浏览器-服务器架构,一般使用HTTP协议,HTTP的特点是只有浏览器能向服务器发出请求(除非使用WebSocket)。CS是客户端-服务器架构,服务器可以向客户端主动发出信息。
7、如何设置请求的编码以及响应内容的类型?
1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。
2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。
8、什么是Web Service(Web服务)?
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
9、谈谈Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
10、大型网站在架构上应当考虑哪些问题?
11、请对J2EE中常用的名词进行解释(或简单描述)
web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接**互,不必关注其它系统问题。主要有WEB服务器来实现
EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。
JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。

你可能感兴趣的:(Java开发技术面试考点--Java web编程)