公司内部传递的java技术问答集锦

     2022-03-27     139

关键词:

1 说出Servlet的生命周期,并说出Servlet和CGI的区别

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。

与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

2 forward 和redirect的区别

forward是服务器内部请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

3 JSP中动态INCLUDE与静态INCLUDE的区别
技术分享图片
公司内部传递的Java技术问答集锦

动态INCLUDE用jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

静态INCLUDE用include伪码实现,不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>

4 JSP的内置对象及方法

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。

response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)。

out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。

applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息。

config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。

page表示从该页面产生的一个servlet实例。

5 JSP的常用指令

<%@page language=”java” contenType=”text/html;charset=gb2312” session=”true” buffer=”64kb” autoFlush=”true” isThreadSafe=”true” info=”text” errorPage=”error.jsp” isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>
isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)

<%@include file=”filename”%>
<%@taglib prefix=”c”uri=”http://……”%>;
6 什么情况下调用doGet()和doPost()?

Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。

7 如何现实servlet的单线程模式

<%@ page isThreadSafe=”false”%>

8 页面间对象传递的方法

request,session,application,cookie等

9 JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

JSP 是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

10 四种会话跟踪技术

page是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面。

request是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)。

session是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求。

application是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域。

11 Request对象的主要方法

setAttribute(String name,Object):设置名字为name的request的参数值

getAttribute(String name):返回由name指定的属性值

getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例

getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组

getCharacterEncoding():返回请求中的字符编码方式

getContentLength():返回请求的Body的长度

getHeader(String name):获得HTTP协议定义的文件头信息

getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例

getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例

getInputStream():返回请求的输入流,用于获得请求中的数据

getMethod():获得客户端向服务器端传送数据的方法

getParameter(String name):获得客户端传送给服务器端的有name指定的参数值

getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例

getParameterValues(String name):获得有name指定的参数的所有值

getProtocol():获取客户端向服务器端传送数据所依据的协议名称

getQueryString():获得查询字符串

getRequestURI():获取发出请求字符串的客户端地址

getRemoteAddr():获取客户端的IP地址

getRemoteHost():获取客户端的名字

getSession([Boolean create]):返回和请求相关Session

getServerName():获取服务器的名字

getServletPath():获取客户端所请求的脚本文件的路径

getServerPort():获取服务器的端口号

removeAttribute(String name):删除请求中的一个属性

12 J2EE是技术还是平台还是框架?

J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。

J2EE是一套全然不同于传统应用开发的技术架构,包含许多组件,主要可简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值,其核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共通的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,导致企业内部或外部难以互通的窘境。

13 Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy()
14 请对以下在J2EE中常用的名词进行解释(或简单描述)

Web容器: 给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接×××互,不必关注其它系统问题。主 要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的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/IOP: (Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机 上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。

15 MVC的各个部分都有那些技术来实现?如何实现?

MVC 是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重 用。

16 jsp有哪些动作?作用分别是什么?

JSP 共有以下6种基本动作:

jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
17 Cookie与Session的区别与联系

Cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

Cookie机制:正统的Cookie分发是通过 扩展HTTP协议来实现的,服务器通过 在HTTP的响应头中加上一行特殊的指示 以提示浏览器按照指示生成相应的Cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成Cookie。而Cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的Cookie,如果某个Cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该Cookie附在请求资源的HTTP请求头上发送给服务器。

Cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成Cookie的作用范围。若不设置过期时间,则表示这个Cookie的生命期为浏览器会话期间,关闭浏览器窗口,Cookie就消失。这种生命期为浏览器会话期的Cookie被称为会话Cookie。

会话Cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把Cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie 仍然有效直到超过设定的过期时间。存储在硬盘上的Cookie 可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的Cookie ,不同的浏览器有不同的处理方式 。

Session机制:session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加群。在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加群。如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的可以加群。java架构群:591240817 一起交流。

当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。保存这个session id的方式可以采用Cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但Cookie 可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。

经常被使用的一种技术叫做 URL重写,就是把session id直接附加在URL路径的后面。

还有一种技术叫做 表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。比如:

<form name="testform" action="/xxx"> <input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764"> <input type="text"> </form>
实际上这种技术可以简单的用对action应用URL重写来代替。

Cookie 和Session 的区别:

cookie数据存放在客户的浏览器上,session数据放在服务器上。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用 COOKIE。
单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
18 JSP的内置对象与作用

JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

request用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外
19 jsp的两种跳转方式分别是什么,有什么区别?

带request参数的跳转
request.setAttribute("param", "value"); request.getRequestDispatcher("test.jsp").forward(request, response);
在目的页面可以获取参数:
String Value = request.getAttribute("param")==null?:(String)request.getAttribute("param");
不带request参数的跳转
response.sendredirect("test.jsp");
20 forward和redirect的区别

forward 是服务器内部重定向,程序收到请求后重新定向到另一个程序,客户机并不知道;

redirect则是服务器收到请求后发送一个状态头给客户,客户将再请求一 次,这里多了两次网络通信的来往。当然forward也有缺点,就是forward的页面的路径如果是相对路径就会有些问题了。

forward 会将 request state , bean 等等信息带往下一个 jsp。 redirect 是送到 client 端后再一次 request , 所以资料不被保留。
使用 forward 你就可以用 getAttribute() 来取的前一个 jsp 所放入的 bean 等资料

从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。
从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据. redirect:不能共享数据.redirect不仅可以重定向到当前应用程序的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源. forward,方法只能在同一个Web应用程序内的资源之间转发请求. forward 是服务器内部的一种操作. redirect 是服务器通知客户端,让客户端重新发起请求. 所以,你可以说 redirect 是一种间接的请求, 但是你不能说"一个请求是属于forward还是redirect "。
从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
从效率来说
forward:高. redirect:低.
21 描述JSP和Servlet的区别、共同点、各自应用的范围

JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet来生成动态网页;JSP由HTML代码和JSP标签构成,可以方便地编写动态网页,因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.

22 列出Jsp中包含外部文件的2种方式,两者有何区别。

<jsp:include page="b.jsp" />
<%@ include file="b.jsp" />
区别:

<jsp:include page="b.jsp" />(先执行,后包含)
此标签表示法:能动态区别加进来的是动态页面还是静态页面对于静态页面则直接将资源包含(仅取其文本)。
<%@ include file="b.jsp">此指令表示:静态地包含页面,不管其内容如何,不过是静态页面还是动态页面都首先将页面的内容先加进来。
<jsp:include page="b.jsp" />可以传递参数,如下:
<jsp:include page="b.jsp" > <jsp:param name="参数名" value="参数值"/> </jsp:include>
23 Jsp和Servlet中的请求转发分别如何实现

servlet的转发方式有两种:

response.sendRedirect(response.encodeURL(相对路径或绝对路径)); request.getRequestDispatcher(相对路径).forward();
jsp是servlet的扩展,除可用上面两种之外,还可以用标签:

<jsp:forward page="相对路径" />

mysql语句如何传递日期参数-技术问答

如何select[time]fromtablewhere[time]=\'2008=10-26\'有什么日期处理的函数呢达人指教FROM_UNIXTIME这个是MySQL函数而非PHP函数。在SQL语句中出现的函数都是MySQL函数。FROM_UNIXTIME(unix_timestamp),FROM_UNIXTIME(unix_timestamp,format)返回\\\'YYYY-MM-D... 查看详情

技术分享会谈谈公司内部的技术分享

  这段时间,为了促进程序同事间技术氛围,在公司内部组织开展技术分享会。形式很简单,每周进行一次技术分享;分享人由组员顺序安排;题材不限,可以是自己熟悉的技术,比如说服务端的开发者,分享后端定时器,消... 查看详情

java相关技术问答

网上一些没有标准答案的面试题,我自己做的解答总结,有任何异议可以提出来~^_^,不断更新中...Springboot除了自动配置与传统的spring还有哪些不同传统的springweb项目需要部署在tomcat这样的容器才能运行,springboot集成了tomcat容器... 查看详情

推荐:java性能优化系列集锦

...经今非昔比了。现代JVM持续演进,内建了更为成熟的优化技术、运行时技术和垃圾收集器。与此同时,底层的硬件平台和操作系统也在演化。目录:一、Java性能优化系列之一--设计优化二、Java性能优化系列之二--程序优化三、Jav... 查看详情

经常使用的csshack技术集锦

来源:http://www.ido321.com/938.html一、什么是CSSHack?不同的浏览器对CSS的解析结果是不同的,因此会导致同样的CSS输出的页面效果不同,这就须要CSSHack来解决浏览器局部的兼容性问题。而这个针对不同的浏览器写不同的CSS代码的过... 查看详情

java笔试题集锦

Java笔试题集锦1.MVC的各个部分都有那些技术来实现?如何实现?答:MVC是Model-View-Controller的简写。"Model"代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),"View"是应用的表示面(由J... 查看详情

有关java的优秀博客集锦

...并发?并发会有什么影响?java中提供了哪些处理并发的技术(机制)关于并发产生的原因,我查了一些资料目前发现有两种原因:一,存在共享的资源且对资源有修改行为(静态变量);二,对象中存在状态变量且在多线程中错误地... 查看详情

java并发编程内部分享ppt分享

...有嚼劲,进入JAVA技术体系必看书籍之一。看完之后,在公司内部做了一个简单的分享,主要是普及下.NET程序员转向Java技术后对于并发的基本认识。PPT中有大量的实例代码,可以自己debug。本文出自“王清培”博客,请务必保留... 查看详情

bat面试题集锦——java基础(代码片段)

一、java面试题熟练掌握java是很关键的,大公司不仅仅要求你会使用几个api,更多的是要你熟悉源码实现原理,甚至要你知道有哪些不足,怎么改进,还有一些java有关的一些算法,设计模式等等。(一&... 查看详情

程序员专属段子集锦7/10

...F,又改需求…2.程序员的生存状态3.实习生改Bug4.从大公司跳槽去了小公司后的自己5.当你上台演示产品功能时6.当你听到这周末要继续加班时…7.当我给老板汇报技术细节时8.在培训班学得好好的,上班之后…9.单身程序员... 查看详情

程序员专属段子集锦7/10

...F,又改需求…2.程序员的生存状态3.实习生改Bug4.从大公司跳槽去了小公司后的自己5.当你上台演示产品功能时6.当你听到这周末要继续加班时…7.当我给老板汇报技术细节时8.在培训班学得好好的,上班之后…9.单身程序员... 查看详情

vuejs开发常见问题集锦

由于公司的前端开始转向VueJS,最近开始使用这个框架进行开发,遇到一些问题记录下来,以备后用。主要写一些官方手册上没有写,但是实际开发中会遇到的问题,需要一定知识基础。涉及技术栈CLI:Vue-CLIUI:ElementHTML:Pug(Jade)CSS:L... 查看详情

vuejs开发常见问题集锦

由于公司的前端开始转向VueJS,最近开始使用这个框架进行开发,遇到一些问题记录下来,以备后用。主要写一些官方手册上没有写,但是实际开发中会遇到的问题,需要一定知识基础。涉及技术栈CLI:Vue-CLIUI:ElementHTML:Pug(Jade)CSS:L... 查看详情

爬虫(集锦)

...互联网建立的目的?互联网的核心价值在于数据的共享/传递:数据是存放于一台台计算机上的,而将计算机互联到一起的目的就是为了能够方便彼此之间的数据共享/传递,否则你只能拿U盘去别人的计算 查看详情

如何在windows下拥有phpconsole-技术问答

...运行我的php,比如\"phpindex.php\"参考技术A我在公司,只要用puttyssh到linux的server,就可以直接在putty里运行php了,可是我现在是在windows下装的wamp,没有ssh,不能用putty啊 参考技术B看了楼上提供的了,没有用,找到php.exe了... 查看详情

it公司技术博客地址

IT公司技术博客美团点评技术团队今日头条技术博客TencentISUXDesignTGideas-腾讯互动娱乐创意设计团队>AlloyTeam|腾讯全端AlloyTeam团队Blog阿里巴巴国际UED团队阿里巴巴(中国站)用户体验设计部博客U一点设计UED团队优质博文集锦-云... 查看详情

《docker问题集锦》系列-总览

...频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对WebRTC、FFmpeg和Electron有非常深入的了解,公众号:玩转音视频。同时也是CSDN博客专家、华为云社区云享专家、签约编辑、... 查看详情

《docker问题集锦》系列-总览

...频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对WebRTC、FFmpeg和Electron有非常深入的了解,公众号:玩转音视频。同时也是CSDN博客专家、华为云社区云享专家、签约编辑、... 查看详情