2023年11月28日发(作者:)
JAVA前端与后端交互⾯试题
1.前端与后端交互⾯试题
1.1. 描述Servlet调⽤过程?
答案:
(1)在浏览器输⼊地址,浏览器先去查找hosts⽂件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。
(2)浏览器根据ip地址和端⼝号访问服务器,组织http请求信息发送给服务器。
(3)服务器收到请求后⾸先根据Host请求头判断当前访问的是哪台虚拟主机。
(4)服务器根据http请求头中的请求URI判断当前访问的是哪个web应⽤。
(5)服务器根据http请求头中的请求URI判断当前访问的是web应⽤中的哪个web资源。
(6)检查web应⽤的⽂件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理,如果找不到就交给缺省servlet
处理。
(7)这个过程中浏览器只知道⾃⼰发出来http请求,不久就收到了http响应,浏览器不知道也不关⼼服务器内部是如何处理的。浏览器和
服务器之间的关系是⾮常单纯的,只有HTTP协议。
(8)解析请求、封装RequestResponse对象、创建Servlet、调⽤Service⽅法都是服务器⾃动进⾏的,开发⼈员只需要写好Servlet配置
(1) get请求⽤来从服务器上获得资源,⽽post是⽤来向服务器提交数据;
(2) get将表单中数据按照name=value的形式,添加到action 所指向的URL 后⾯,并且两者使⽤"?“连接,⽽各个变量之间使
⽤”&“连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL;
(3) get传输的数据要受到URL长度限制(1024字节);⽽post可以传输⼤量的数据, POST数据是没有限制的,上传⽂件通常要使⽤
post⽅式;
(4) 使⽤get时参数会显⽰在地址栏上,如果这些数据不是敏感数据,那么可以使⽤get;对于敏感数据还是应⽤使⽤post;
(5) get使⽤MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)⽂本的格式传递参数,保证被传送的参数
由遵循规范的⽂本组成,例如⼀个空格的编码是”%20"。
(6) Jsp页⾯中的FORM标签⾥的method属性为get时调⽤doGet(),为post时调⽤doPost()。
1.13. Session⽣命周期?
答案:
当程序第⼀次调⽤到sion()代码时,服务器明确的知道了需要⽤到session了,此时创建session。
如果session超过30分钟(可以在中配置的)没⼈使⽤,服务器认为这个session超时了,销毁session。
明确的调⽤date(),session⽴即销毁。
服务器被⾮正常关闭或web应⽤被移除出容器,此时随着web应⽤的销毁session销毁.如果是正常关闭,session会被钝化.当下次服务器正常
启动时,没有超时的session还会被活化回来。
1.14. session的原理?
答案:
session的原理:在服务器第⼀次调⽤sion()⽅法的时候,会在内存中创建⼀个session对象,此对象具有⼀个独⼀⽆⼆的
id值,此id值将会以cookie(JSESSIONID)的形式发送给浏览器,浏览器以后每次访问都会带着此cookie,服务器就利⽤此cookie区分
浏览器找到对应的session空间。
SQL注⼊:就是通过把SQL命令插⼊到Web表单递交或输⼊域名或页⾯请求的查询字符串,最终达到欺骗服务器执⾏恶意的SQL命令。具
体来说,它是利⽤现有应⽤程序,将(恶意)的SQL命令注⼊到后台数据库引擎执⾏的能⼒,它可以通过在Web表单中输⼊(恶意)SQL
语句得到⼀个存在安全漏洞的⽹站上的数据库,⽽不是按照设计者意图去执⾏SQL语句。
防⽌的⽅法:
(1) 永远不要信任⽤户的输⼊,要对⽤户的输⼊进⾏校验,可以通过正则表达式,或限制长度,对单引号和双"-"进⾏转换等。
答案:
思路如下:
1:利⽤class实现DataSource接⼝
2:在class的构造器⼀次性创建指定的链接将链接保存LinkedList中
3:实现getConnection从LinkedList返回⼀个链接
4:提供将链接放回⽅法
Public class MyDataSource inplements DataSource{
Private LinkedList dataSource=new LinkedList<>();
Public MyDataSource(){
For( int a=0;a<1000;a++){
Try{
erDriver(new SQLServerDriver());
Connection
con=nection(“jdbc:sqlserver://localhost:1443;DatabaseName=liming”,”root”,”liming”
}catch(Exception e){
}
}
Public Connection getConnetion(){
答案:
Servlet本⾝是单实例的,这样当有多个⽤户同时访问某个Servlet时,会访问该唯⼀的Servlet实例中的成员变量,如果对成员变量进
⾏写⼊操作,那就会导致Servlet的多线程问题,即数据不⼀致。
1.解决Servlet多线程同步问题的最好⽅式:去除实例变量,使⽤局部变量。
不使⽤成员变量,⽽使⽤局部变量,因为局部变量在每个线程中都有各⾃的实例。
所以对Servlet来说,如果要对某个变量做写⼊操作,⼀定不要使⽤成员变量,⽽要使⽤局部变量。
2.使⽤同步代码块
synchronized{}
t实现ThreadModel,Servlet2.4中已经废弃了该接⼝,此时Servlet容器将保证Servlet实例以单线程⽅式运
⾏,也就是说,同⼀时刻,只会有⼀个线程执⾏Servlet的service()⽅法。
1.28. ameter()和ribute()的区别?
答案:
a、ameter()获取的类型是String;
ribute()获取的类型是Object
b、meter()获取的是POST/GET传递的参数值和URL中的参数;
ribute()获取的是对象容器中的数据值/对象
c、ribute()和ribute()可以发送、接收对象;
答案:
使⽤session技术:
a、在页⾯中⽣成⼀个为⼀个随机值,将其保存到session中,同时将其保存为表单的隐藏域的值。
b、在处理注册的请求时,获取session中的值,获取请求参数的值,⽐较两者是否相同,如果相同说明不是重复提交,请求通过同时删除
session中保存的的值,如果不相同则是重复提交,不能通过。
1.33. 什么是web容器?
答案:
给处于其中的应⽤程序组件(JSP、Servlet)提供⼀个环境,是JSP、Servlet直接跟容器中的变量交互,不必关注其他系统问题。
1.38. sql优化:(索引、范式)
答案:
三范式:
第⼀范式(确保每列保持原⼦性)最基本范式。数据库表中所有字段值都是不可分解的原⼦值,就满⾜了第⼀范式。
第⼆范式(确保表中的每列都和主键相关)在第⼀范式上更近⼀层。确保数据库表中的每⼀列都和主键相关,⽽不能只与主键的某⼀部分相
关,也就是说⼀个表中只能保存⼀种数据,不可以吧多种数据保存在⼀张表中。
第三范式:确保每列都和主键列直接相关,不是间接相关。
索引:
避免对索引字段进⾏计算、避免索引在字段上使⽤not、<>、!=、避免在索引上使⽤IS NULL和NOT NULL、避免在索引列上出现数据类
型转换、避免索引字段使⽤函数、避免建⽴索引的列出现空值
1.39. Ajax原理
答案:
Ajax的⼯作原理相当于在⽤户和服务器之间加了—个中间层,使⽤户操作与服务器响应异步化。并不是所有的⽤户请求都提交给服务器,像—
些数据验证和数据处理等都交给Ajax引擎⾃⼰来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。
Ajax其核⼼只有JavaScript、XMLHTTPRequest和DOM,在旧的交互⽅式中,由⽤户触发⼀个HTTP请求到服务器,服务器对其进⾏处理后
再返回⼀个新的HTHL页到客户端, 每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是⼀次很⼩的交互、只需从服务器
端得到很简单的⼀个数据,都要返回⼀个完整的HTML页,⽽⽤户每次都要浪费时间和带宽去重新读取整个页⾯。⽽使⽤Ajax后⽤户从感觉上
1.46. SQL优化
答案:
1. SELECT⼦句中避免使⽤‘*’
2. SQL语句⽤⼤写的
3. ⽤IN来替换OR
4. 查询语句中不要使⽤ *
5. 尽量减少⼦查询,使⽤关联查询(left join,right join,inner join)替代
6. 减少使⽤IN或者NOT IN ,使⽤exists,not exists或者关联查询语句替代
7. or 的查询尽量⽤ union或者union all 代替
8. 合理的增加冗余的字段(减少表的联接查询)
9. 增加中间表进⾏优化(这个主要是在统计报表的场景,
1.47. Tomcat配置,部署优化
答案:
1. 内存优化:Tomcat依赖于JVM,可以配置JVM的内存配置
2. 最⼤连接数配置(并发能⼒)
通常搭配Nginx提升Tomcat的并发性能
答案:
HTML(Hypertext Markup Language)⽂本标记语⾔,它是静态页⾯,和JavaScript⼀样解释性语⾔,为什么说是解释性语⾔呢?因
为,只要你有⼀个浏览器那么它就可以正常显⽰出来,⽽不需要指定的编译⼯具,只需在TXT⽂档中写上HTML标记就OK。
JSP(Java Server Page)看这个意思就知道是Java服务端的页⾯,所以它是动态的,它是需要经过JDK编译后把内容发给客户端去显
⽰,我们都知道,Java⽂件编译后会产⽣⼀个class⽂件,最终执⾏的就是这个class⽂件,JSP也⼀样,它也要编译成class⽂件!JSP不
⽌要编译,它还得要转译,⾸先把JSP转译成⼀个Servlet⽂件,然后在编译成class⽂件。当⽤户访问JSP时就执⾏了class⽂件,最 终…
1.最简单的区别就是,HTML能直接打开,jsp只能发布到Tomact等服务器上才能打开
2.定义上HTML页⾯是静态页⾯可以直接运⾏,JSP页⾯是动态页它运⾏时需要转换成servlet
3.他们的表头不同,这个是JSP的头“ <%@ page language=“java” import=“.*” pageEncoding=“gbk”%>”在表头中有
编码格式和导⼊包等
4.也是很好区分的在jsp中⽤<%%>就可以写Java代码了,⽽html没有<%%>
1.52. HTML和Servlet的异同
答案:
不同: Html是静态,servlet是动态 html页⾯由服务器直接返回, servlet是⽤来处理客户请求,并返回html页⾯ ,Servlet需要服务器调
⽤servlet⽅法⽣成动态html页⾯,且需要在中配置url路径
1.53. request ,response,session 和 application是怎么⽤的
答案:
1、Request是客户端向服务端发送请求
2、Response是服务端对客户端请求做出响应
3、Session在servlet中不能直接使⽤,需要通过getSession()创建,如果没有设定它的⽣命周期,或者通过invildate()⽅法销毁,关闭浏
览器session就会消失
4、Application不能直接创建,存在于服务器的内存中,由服务器创建和销毁
1.54. Request和Session的取值区别,以及出现乱码的解决⽅式(不能在java代码中设置)
答案:
1、Request可以通过getAttribute()⽅法直接取值,也可通过getParameter()取值
2、Session需要通过sion().getAttribute()才能取值
答案:
开启事务注解驱动
事务管理器
开启注解功能,并配置扫描包
配置数据库
配置SQL会话⼯⼚,别名,映射⽂件
不⽤编写Dao层的实现类


发布评论