广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

Java开发面试题库之JavaWEB_惠州JAVA培训

作者:黄君发布时间:2020-11-30分类:Java技术浏览:1048


导读:JavaWEB 2.1、MySQL数据库 2.1.1、说出一些数据库优化的经验 答:用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。

JavaWEB

2.1、MySQL数据库

2.1.1、说出一些数据库优化的经验

答:用PreparedStatement 一般来说比Statement性能高:一个sql 发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。

有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。

sql语句全部大写,特别是列名和表名都大写。特别是sql命令的缓存功能,更加需要统一大小写。

还有索引对查询性能的改进也是值得关注的。

2.1.2、什么是数据库里面的索引和约束

答:索引就是一个指向表中数据的指针,如果我们把书比作数据,那么各个章节就相对于数据库中的表,而书的目录就是索引了。索引是在基本表的列上建立的一种数据库对象,它和基本表分开存储,它的建立或撤销对数据的内容毫无影响。索引一经创建,就完全由系统自动选择和维护,不需要用户指定使用索引,也不需要用户执行打开索引或进行重新索引等操作。

设计数据库完整性的目的是为了防止数据库存在不符合语义的数据,防止错误信息的输入和输出。SQL Server提供的用来实施数据完整性的途径主要是约束(Constraint)、标识列(Identity Column)、默认(Default)、规则(Rule)、触发器(Trigger)、数据类型(Data Type)、索引(Index)和存储过程(Stored Procedure)等

2.1.3、谈谈数据库的存储过程

答:存储过程的实验步骤:

mysql> delimiter |

mysql> create procedure insertArticle_Procedure (pTitle varchar(50),pBid int,out

 pId int)

    -> begin

    -> insert into article1 value(null,pTitle,pBid);

    -> select max(id) into pId from article1;

    -> end;

    -> |

Query OK, 0 rows affected (0.05 sec)

 

mysql> call insertArticle_Procedure('大数据',1,@pid);

    -> |

Query OK, 0 rows affected (0.00 sec)

 

mysql> delimiter ;

mysql> select @pid;  

+------+

| @pid |

+------+

| 3    |

+------+

1 row in set (0.00 sec)

 

mysql> select * from article1;

+----+--------------+------+

| id | title        | bid  |

+----+--------------+------+

| 1  | test         | 1    |

| 2  | dashuju | 1    |

| 3  |大数据     | 1    |

+----+--------------+------+

3 rows in set (0.00 sec)

2.1.4、Mysql的索引原理

索引(Index)是帮助MySQL高效获取数据的数据结构。

提取句子主干,就可以得到索引的本质:索引是一种数据结构B+Tree

 

2.1.5、数据库技术中的“脏数据”指的是什么?一般如何处理?

从数据库到数据仓库,脏数据概括起来就是

(1)不完整的数据(比如如供应商的名称、分公司的名称、客户的区域信息缺失、业务系统中主表与明细表不能匹配等)

解决方法:补全

(2)错误的数据(比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等)

解决方法:对错误进行分类,然后写SQL语句挑出来,再提交给业务部门修正,最后再重新抽取

(3)重复的数据

解决方法:将重复数据记录的所有字段导出来,让客户确认并整理。

2.1.6、事务的概念和特点

概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功。

特点:ACID

原子性(Atomicity)

原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 

一致性(Consistency)

事务前后数据的完整性必须保持一致。隔离性(Isolation)

事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

2.1.7、简单写出oracle分页或mysql分页

Oracle:

SELECT * FROM 
(
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
WHERE ROWNUM <= 40
)
WHERE RN >= 21或者

SELECT * FROM 
(
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
)
WHERE RN BETWEEN 21 AND 40

Mysql:  

select * from test limit 10,30

 

2.2、Servlet

2.2.1、说一说Servlet的生命周期

答:servlet的生命周期包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

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

web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的destroy()方法。

2.2.2、转发与重定向的比较?

//转发到new.jsp

request.getRequestDispatcher("new.jsp").forward(request, response); 

//重定向到new.jsp 
response.sendRedirect("new.jsp");

<!--在jsp页面中实现转发: -->

<jsp:forward page="apage.jsp" />

<!--在jsp页面中实现重定向: -->

<%response.sendRedirect("new.jsp");//重定向到new.jsp%>

1.重定向访问服务器两次,转发只访问服务器一次。
2.重定向可以看见目标页面的URL,转发只能看见第一次访问的页面URL,以后的工作都是有服务器来做的。
3.重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码就不会在执行了。
4.在request级别使用信息共享,使用重定向必然出错

5.重定向可以访问自己web应用以外的资源

 

2.3、Request和Response

2.3.1、Request对象的主要方法:

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

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

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

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

实例

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

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

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

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

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

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

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

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

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

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

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

2.3.2、request和response的作用

Request对象:为脚本提供了当客户端请求一个页面或者传递一个窗体时,客户端提供的全部信息。这包括能指明浏览器和用户的HTTP变量,在这个域名下存放在浏览器中的cookie,任何作为查询字符串而附于URL后面的字符串或页面的<FORM>段中的HTML控件的值。也提供使用Secure Socket Layer(SSL)或其他加密通信协议的授权访问,及有助于对连接进行管理的属性。

Response对象:用来访问服务器端所创建的并发回到客户端的响应信息。为脚本提供HTTP变量,指明服务器和服务器的功能和关于发回浏览器的内容的信息,以及任何将为这个域而存放在浏览器里新的

2.4、Cookie和Session

2.4.1、cookie与session的区别

cookie是客户端技术,将数据保存在客户端,保存时间一般比较长, 但是安全性差。浏览器能够查看保存的本地Cookie并进行Cookie欺骗。通过Http协议实现,基于set-cookie响应头和cookie请求头工作。

Cookie如果不设置过期时间,则表示这个cookie声明周期为浏览器会话期间,只要关闭浏览器cookie就小时了

session将数据保存服务器端,保存时间一般较短, 但是安全性高。是一个域对象,将数据保存在域中,服务器在运行时可以为每一个浏览器创建一个独享的session对象,用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当再去访问时,从各自的session中取出数据 。当访问增多,会比较占用服务器的性能。

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个Cookie。而Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型

没有直接删除cookie的方法如果想要删除一个Cookie, 可以向浏览器发送一个 同名 同path 同domain的Cookie, 只需要将Cookie的maxAge设置为0

而session可以自杀:当调用session.invalidate()方法的时session立即销毁

Cookie的应用场景:记住用户名

Session的应用场景:保存用户信息,实现登录显示,三十天自动登录,保存购物车信息。

Session的运行依赖session id,而session id是存在cookie中的,也就是说浏览器禁用了cookie,同时session也会失效(但是可以通过其他方式实现,比如在url中传递session id)

Cookie的不安全性:

如果你在机器上面保存了某个论坛的cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,然后放在他的浏览器目录下面,那么他登录该网站的时候就是用你的身份登录的。所以cookie是可以伪造的。

当然,伪造的时候需要注意,直接拷贝cookie文件到cookie目录,浏览器是不忍的,它有一个index.dat文件,存储了cookie文件的建立时间,以及是否有修改,所以你必须要有该网站的cookie文件,并且保证时间上骗过浏览器

2.4.2、session什么时候被创建,什么时候被删除

直到某server端程序(Servlet)调用HttpServletRequest.getSession(true)这样的语句时才会被创建。

session在下列情况下被删除:

A.程序调用HttpSession.invalidate()

B.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间

C.服务器进程被停止

 

再次注意关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效,不会使服务器端的session对象失效。

2.5、过滤器和监听器

2.5.1、Filter 的作用是什么?

Servlet Filte是过滤器,功能是阻止url,过滤url请求,只有符合要求时才会批准通过进行响应。

在servlet中有request 和response 这两种请求方式,其中request是向服务器发起请求,而response是向客户端也就是浏览器发送的请求,而filter就是在请求的途中进行判断拦截,在到达最后的目的地之前进行一些相应的处理,比如全站乱码解决器,就是在所有的请求之前加上乱码解决的处理,这样就可以不用在每一个地方频繁地进行处理乱码的问题。

开发中首先要在web.xml中声明过滤器,然后在.java中写过滤的内容。

PS:还有一些用到过滤器的地方:配置30天自动登陆、权限控制过滤器,密码过滤器,认证过滤器......只要有需要,就可以自己定义

 

2.5.2、Filter的生命周期?

Filter的生命周期同servlet的生命周期是一样的。它们都提供了init()和destroy()方法来控制。当web容器启动的时候,就会自动调用init()来对filter进行初始化,而且只会执行依次,当关闭web容器,关机,或者reload整个应用时,都会调用destroy()来关闭filter。也就是说,当web容器启动时,filter就被加载到内存,并在destroy()调用之前都常驻内存。

如果在web.xml中配置了多个过滤器,那么会按照顺序依次执行过滤器。

2.5.3、过滤器和监听器的区别

过滤器

Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁

监听器

Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

 

2.5.4拦截器和过滤器的区别

l 拦截器是基于Java的反射机制的,而过滤器是基于函数回调。

l 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

l 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

l 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

l 拦截器可以访问action上下文里的对象,而过滤器不能访问。

l 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

 

2.6、设计模式

2.6.1、你了解哪些设计模式

答:常见的五种设计模式(单例模式、装饰者模式、代理模式、观察者模式以及工程模式)需要答出来

2.6.2、说一下单例模式

答:单例模式是指整个应用中有且只有一个实例,所有指向该类型实例的引用都指向这个实例。

常见的单例模式有饿汉式和懒汉式

饿汉式会直接将对象定义出来,它使用static修饰,随着类的加载而加载,会损耗性能,但是方法相对简单;懒汉式只给出变量,并不将其初始化,它在第一次用的时候相对较慢,因为需要加载,线程不安全。



素材来源“清茶_”,如侵立删。

标签:惠州北大青鸟惠州JAVA培训惠州IT培训惠州软件培训惠州软件开发


Java技术排行
标签列表
网站分类
文章归档
最近发表