java基础复习第二阶段

1 什么是SQL 注入攻击?

SQL 注入攻击是将要执行的 SQL 代码添加特殊参数符号,然后传递到服务器解析。本质上是篡改原本sql的本意所执行的一种攻击手法。

1.1 如何防止 SQL 注入攻击

利用新对象 PreparedStatement 对象完成,先将 SQL 骨架发送给数据库服务器,然后再将参数单独发给服务器,所以此时参数仅仅当成普通字符串来处理,进而起到防止SQL 注入的问题。

2.什么是内连接,左外连接,右外连接查询

内连接查询:需要查找两张表同时存在的数据,使用内连接查询
左外连接查询:可以将左边表中的所有记录都查询出来,右边表只显示和左边表相对应的数据,如果左边表中某些记录在右边没有对应的数据,右边显示为null即可。
在这里插入图片描述

右外连接查询: 可以将右边表中的所有记录都查询出来,左边表只显示和右边表相对应的数据,如果右边表中的某些记录在左边表是没有对应的数据,则左边表数据显示为null即可。
在这里插入图片描述

3 SQL 优化的方法

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 的列上建立索引。
2.select查询语句应尽量避免使用星号(*),甚至不用星号查询
3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4.可以避免模糊查询的尽量不要用,因为模糊查询也会导致全表扫描
select id from t where name like ‘%abc%’
5.合理的增加冗余的字段(减少多表的查询)
6.尽可能的使用 varchar 代替 char ,因为首先变长字符串存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内查询的效率显然要高。
7.减少使用 IN 和 NOT IN ,使用 exists,not exists 语句替代,原因也是避免导致全表扫描。
8.or 的查询尽量用 union 或者 union all 代替

扩展:
如果想将两张表中的所有数据都查询出来(左外+右外并去除重复记录),可以使用全外连接查询,但是mysql又不支持全外连接查询。
在这里插入图片描述

4 什么是事务??事务有什么特点??

事务:简单的说就是将一堆的sql语句绑定在一起执行,要么都执行成功,要么执行都失败

事物有四大特点:
1.原子性:事务的所有操作要么都执行成功,要么都执行失败
2.一致性:事务执行后,业务数据之和是保持一致的。
解释:A给B转了100元,A的账户减去100,B的账户加上100,A+B的账户总和在这个过程总是不变的
3.隔离性:并发中的事务是不会互相干扰的
解释:事务A看不到事务B的执行中状态,B也同理。要么看到的是执行前的状态,要么看到的是执行后的状态
4.持久性:一旦事务提交成功后,事务中的所有数据都必须持久化到数据库中,即使数据库马上崩溃,也能通过某种机制恢复数据

5 数据库有几种隔离级别??(四种)

1、READ UNCOMMITTED(读未提交数据)

安全性最差,可能出现任何事务并发问题(比如脏读、不可以重复读、幻读等)

但性能最好(不使用!!)

2、READ COMMITTED(读已提交数据)(Oracle默认)

安全性较差

性能较好

可以防止脏读,但不能防止不可重复读,也不能防止幻读;

3、REPEATABLE READ(可重复读)(MySQL默认)

安全性较高

性能较差

可以防止脏读不可重复读,但不能防止幻读问题;

4、SERIALIZABLE(串行化)

安全性最高,不会出现任何并发问题,因为它对同一数据的访问是串行的,非并发访问;

性能最差;(不使用!!)

MySQL的默认隔离级别为REPEATABLE READ,即可以防止脏读和不可重复读

6 什么是服务器?

服务器:分为服务器硬件 (即是我们的电脑)和 服务器软件。在硬件服务器(计算机)上安装了服务器软件,才可以对外提供服务。比如:让其他的计算机来访问当前服务器,为其他的计算机提供服务。

(1) 服务器硬件:是指在互联网上具有独立IP地址的计算机,比如我们自己用的计算机也可以作为服务器使用。

(2) 服务器软件:就是一个计算机程序,比如MySQL服务器软件,tomcat服务器软件。服务器软件分为很多类型,比如:ftp服务器(上传或者下载资料),数据库服务器,web服务器软件,邮件服务器等。

7 什么是Web服务器?

(1) web服务器是指驻留在互联网上的某种类型的计算机程序。当浏览器访问服务器,请求服务器上的文件时,服务器将会处理该请求,并将请求的文件响应给浏览器,并会附带一些信息告诉浏览器如何查看该文件(即文件的类型)

(2) web服务器是可以向 “发出请求的浏览器提供文档” 的程序,比如在访问百度时,其实就是在访问百度的服务器。

在这里插入图片描述

Tomcat就是一个web服务器软件,是由apache组织提供的一款服务器软件,特点:小巧灵活,免费开源,简单易用。

8 什么是HTTP协议?

在这里插入图片描述

HTTP协议在工作时所遵循的基本原则:
(1)一次请求,只对应一次响应
(2)请求只能由浏览器发起,服务器只能被动的等待请求,根据请求作出回应。

8.1 补从知识

200: 表示请求处理成功
302: 表示请求重定向(即需要再进一步请求才可以获取到相应的资源)
304/307: 表示通知浏览器使用缓存
404: 表示浏览器请求的资源不存在(浏览器的问题, 请求路径错误)
500: 表示服务器在处理请求的过程中抛出了异常。

9 什么是Servlet?

Servlet是由SUN公司提供的一门动态Web资源开发技术,Servlet本质上是一段Java程序,和之前的Java程序不同的是,Servlet程序无法独立运行,需要将Servlet程序放在服务器中(比如tomcat服务器),由服务器调用才可以执行。
在这里插入图片描述

9.1 动态Web资源

如果我们每个人去登录网页或者其它看到的内容都是不一致的,这就是动态web资源。(并不代表页面一定会动);如果我们每个人去京东看自己的购物车或者我们的订单,我们每个人看到的内容都是不一样的。

常用动态web资源开发技术:JSP/Servlet、ASP、PHP等。

9.2 静态Web资源

如果我们每个人去登录网页区或者其它看到的内容都是一致的,这就是静态web资源(并不代表网页不会动) 静态web无法连接数据库;例如我们每个人去京东搜索手机,我们会看到同样的效果,我们每个人登录百度也是看到同样的效果。

静态web资源开发技术:HTML

10 简述Servlet生命周期?

1.创建servlet实例(Servlet的对象由服务器负责实例化 )
2.当servlet实例化后,将调用这个对象的init()方法进行初始化
3.再调用对象的service()方法来处理请求,并返回处理结果,在调用service之前, 需保证init初始化已被成功执行
4.当需要释放servlet的时候,调用对象的destroy()方法来结束,并释放资源

11 request和response介绍

request是代表HTTP请求信息的对象,response是代表HTTP响应信息的对象。

当浏览器发请求访问服务器中的某一个Servlet时,服务器将会调用Servlet中的service方法来处理请求。在调用service方法之前会创建出request和response对象。
其中request对象中封装了浏览器发送给服务器的请求信息(请求行、请求头、请求实体等),response对象中将会封装服务器要发送给浏览器的响应信息(状态行、响应头、响应实体),在service方法执行完后,服务器再将response中的数据取出,按照HTTP协议的格式发送给浏览器。

注意:(执行service方法之前,response对象是空的)

11.1 Request生命周期

在服务器调用Servlet程序的service方法之前,会创建请求对象Request,在请求处理完,响应结束时,就会销毁Request对象。

12 如何处理响应乱码?

通过 response.setHeader(“Content-Type”, “text/html;charset=utf-8”)方法,通知服务器发送数据时的码表;
通过 response.setCharacterEncoding(“utf-8”)方法,通知浏览器解析时使用的码表。两码相同就不会有乱码了。

response 提供了 setContentType(“text/html;charset=UTF-8”)快捷方法,在它的底层,
会同时做上面两件事,所以可以一行代码解决 response 产生的乱码问题。

总结回答:出现乱码的原因就是编码和解码所用的码表不同所导致的现象,所以我们可以使用response对象通知服务器发送数据给客户端浏览器时所用的码表是什么,并且再使用response对象通知客户端浏览器解析时所用的码表是什么即可。

具体实现就是使用response对象的 setContentType方法,一行代码解决响应产生的乱码问题。

13 forward(转发)和Redirect(重定向)的特点

13.1 forward(转发)

在这里插入图片描述
(1)转发是一次请求,一次响应
(2)请求转发前后,浏览器的地址栏地址不会发生变化。(浏览器–访问–> A --转发–> B,地址栏地址始终指向A的地址)
(3)请求转发前后的request对象是同一个(转发前在A中的request和转发到B后,B中的request对象和A中的request对象是同一个。基于这一点,可以通过request从A带数据到B)
(4)请求转发前后的两个资源必须属于同一个Web应用,否则将无法进行转发。(A–转发–>B,A和B必须属于同一个Web应用!)

13.2 Redirect(重定向)

在这里插入图片描述
俗语解释:浏览器找AServlet借钱,AServlet没有钱借,回应给浏览器自己没钱,可以去找BServlet借,并且把BServlet的地址告诉给浏览器。

(1)重定向是两次请求、两次响应
(2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次请求都是通过浏览器发起,浏览器知道这个跳转的过程,因此地址栏地址会变化)
(3)重定向前后的request对象不是同一个(因为重定向是两次请求,服务器会根据两次请求创建两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)
(4)重定向前后的两个资源可以是来自不同的web应用,甚至可以是来自不同的服务器。(进行跳转的两个资源之间没有限制)

14 什么时候用forward?什么时候用redirect?

(1)如果希望跳转前后地址栏地址不会发生变化, 只能使用转发; 如果希望跳转前后地址栏地址会发生变化, 只能使用重定向
(2)如果希望在跳转前后, 能够通过request对象带数据到目的地, 只能使用转发
(3)如果仅仅是做一个跳转,没有其他要求,此时推荐使用转发(转发是一次请求,一次响应,可以减少访问服务器的次数,降低服务器的压力)

15 Cookie(会话)

1.Cookie是将会话中产生的数据保存在客户端,是客户端技术。
2.Cookie是基于两个头进行工作的:分别是Set-Cookie响应头和Cookie请求头
3.通过Set-Cookie响应头将cookie从服务器端发送给浏览器,让浏览器保存到内部;而浏览器一旦保存了cookie,以后浏览器每次访问服务器时,都会通过cookie请求头,将cookie信息再带回服务器中。在需要时,在服务器端可以获取请求中的cookie中的数据,从而实现某些功能。

16 Session(会话)

1.Session是将会话中产生的数据保存在服务器端,是服务器端技术
2.Session是一个域对象,session中也保存了一个map集合,往session中存数据,其实就是将数据保存到session的map集合中。
3.通过session.setAttribute()方法可以将数据保存到session中,通过session.getAttribute()方法可以将数据从session中取出来。

17 什么时候用Cookie?什么时候用Session?

cookie适合存储需要长时间保存、但对安全性要求不高的数据。
Cookie的应用:实现购物车、记住用户名、30天内自动登录等。

session中适合存储对安全性要求较高,但不需要长时间保存的数据。
Session的应用:保存登录状态、保存验证码

18 session 的原理?

每一个Session在创建之后都会生成一个编号,编号会以cookie的形式发送给浏览器,浏览器以后每次访问服务器都会带着 此cookie,服务器就利用此 cookie区分浏览器找到对应的 session 空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值