JAVA随笔三
21.session与cookie的区别,你在项目的哪些地方使用了?
都是会话跟踪技术,cookie是在客户端记录信息确定用户身份;session通过在服务器记录信息确定用户身份,session的实现依赖于cookie,sessionId(session的唯一标识需要存放在客户端)
区别: cookie数据存放在客户的浏览器上,session数据放在服务器上
cookie不是很安全,session较安全
session会保存在服务器上,占用内存,多了影响性能,考虑到减轻服务器性能方面,使用cookie
cookie限制4K,一般网站限制20个cookie
个人建议: 将登录信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中(购物车)
购物车最好使用cookie,但是cookie是可以在客户端禁用的,这时候我们要使用cookie+数据库的方式实现,当从cookie中不能取出数据时,就从数据库获取
22.MVC的各个部分都有哪些技术来实现?
M : javabean V: html jsp vclicity freemakers C: servlet action
最简单,最经典的MVC: jsp+servlet+Javabean (实际上是model2的实现方式,就是把视图和逻辑隔离开来)//说明model1 方式 jsp+service+dao
使用struts2和springMVC 这样的MVC框架后 , jsp+control(核心控制器)+action+Javabean
23.简单介绍一下关系数据库三范式?
范式就是规范: 要满足第二必须满足第一范式;要满足第三必须满足第二
第一范式: 列的不可分割
第二范式: 唯一标识符--主键
第三范式: 数据库表中不包含已在其他表包含的非主关键字--外键
反三范式: 有的时候为了效率,可以设置重复或推导出的字段(例如订单的)
24.事务四个基本特征 ACID特性
事务是并发控制的单位,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位
例如: 转账 必须A扣钱 B加钱 这才算真的转账成功
事务必须满足的四大特征:原子性,一致性,隔离性 , 持久性/持续性
原子性:表示事务内操作不可分割,要么都成功,要么都失败
一致性:要么都成功要么都失败,后面的失败了 要对前面的操作进行回滚
隔离性:一个事务开始后,不能受其他事物干扰
持久性/持续性:表示事务开始了,就不能终止
25.MySQL数据库的默认的最大连接数?
100
为什么需要最大连接数?特定服务器上面的数据库只能支持一定数目同时连接,这时候我们就需要设置最大连接数(最多同时服务多少连接)
26.说一下MySQL的分页,Oracle的分页?
MySQL是使用关键字limit来进行分页的 limit offset,size表示从多少索引 取多少位
Oracle的分页 大部分情况下记不住,说思路,要使用三层嵌套查询:
代码:mysql String sql = "selete * from students order by id limit"+ pageSize*(pageNumber-1)+","+pageSize;
写的看不懂.. oracle :String sql = "select*from"+{selete}......
27.讲一下数据库的触发器的使用场景?
触发器,需要有触发条件 , 当条件满足以后做什么操作.
发一个日志,说说 会自动通知好友,其实就是在增加日志时做一个后触发,再向通知表中写入条目,因为触发器效率高(UCH公司没有用触发器,效率和数据处理能力都很低)
每插入一个帖子,都希望将版面中的最后发帖时间,帖子总数字段进行同步更新,用触发器效率就很高
创建触发器:
delimiter | //改分隔符为|
create trigger XXX after insert on 某表 for each row begin
-> update 某表 set articleCount = articleCount+1 where id = NEW.bid;
-> end;
->|
delimiter;
28.数据库的存储过程的使用场景?
优点:1>sql语句每执行一次就编译一次,而存储过程只在创建时进行编译,以后每次创建都不再重复编译,可以大大提高数据库执行速度
2>通常,复杂的业务逻辑需要多条sql语句,这些语句要分别的从客户机发送到服务器,当客户机和服务器之间的操作很多时,将产生大量的网络传输,如果将这些操作放在一个存储过程中,那么客户机和服务器之间的网络传输就会大大减少,降低了网络负载
3>存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量
4>安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用EXECUTE权限调用存储过程,无需拥有访问底层数据库对象的显示权限
定义存储过程:
create procedure insert_Student(_name varchar(50),_age int , out_id int)
begin
insert into student value(null,_name_age);
select max(stuid) into_id from student;
end;
call insert_Student('wfz',23,@id);
select @id;
29.用jdbc怎么调用存储过程?
jdbc 步骤 贾琏欲执事:
加载驱动 获取链接 设置参数 执行 释放链接
30.说一下对jdbc的理解?
31.JDBC中的PreparedStatement相比Statement的好处
1>PreparedStatement是预编译的,比Statement速度快
2>代码的可读性和可维护性
虽然PrepareStatement来代替Statement会使代码多处几行,但这样的代码无论从可读性还是可维护性上来说,都比直接用Statement的代码高很多档次
3>安全性:
PreparedStatement可以防止SQL注入攻击,而Statement却不能
32.数据库连接池的作用
1>限定数据库的个数,不会导致由于数据库链接过多导致系统运行缓慢或崩溃
2>数据库链接不需要每次都去创建或销毁,节约了资源
3>数据库链接不需要每次都去创建,响应时间更快