导读: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培训惠州软件培训惠州软件开发