java实习生面试题

                            


(1).#{} ${}的区别

一.类型不一样
(1)#{}:参数占位符,即预编译
(2)${} :字符串替换符,即SQL拼接

二.防注入问题 
(1)#{}:很大程度上能防止sql 注入
(2)${}:不能防止sql 注入

三.执行过程
(1)#{}:编译好SQL后语句再去取值 
(2)${}:取值以后再去编译SQL语句

一般能用#的就别用$  

(2).数据库事物

一、数据库的隔离级别:

        1.读未提交(Read uncommitted);  在提交前别人可以读数据

        2.读已提交(Read committed);    提交之后的数据才可以读

        3.可重复读(Repeatable read),数据库默认开启;

        4.串行化(Serializable )

原子性 一致性 隔离性 持久性

二、如果不考虑隔离性,会发生什么事呢?

(1).脏读:

        脏读是指一个事务在处理数据的过程中,读取到另一个未提交事务的数据。

(2).不可重复读:

        不可重复读是指对于数据库中的某个数据,一个事务范围内的多次查询却返回了不同的结果,这是由于在查询过程中,数据被另外一个事务修改并提交了。

(3).幻读

        幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。


三、四种隔离级别解决了上述问题

        1.读未提交(Read uncommitted):这种事务隔离级别下,select语句不加锁。

此时,可能读取到不一致的数据,即“读脏 ”。这是并发最高,一致性最差的隔离级别。

        2.读已提交(Read committed):可避免 脏读 的发生。在互联网大数据量,高并发量的场景下,几乎 不会使用 上述两种隔离级别。

        3.可重复读(Repeatable read):MySql默认隔离级别。可避免 脏读 、不可重复读 的发生。

        4.串行化(Serializable ):可避免 脏读、不可重复读、幻读 的发生。


 REDIS用在经常要被访问的页面上,比如首页,或者是不常更换的数据上.

(3)redis的五种数据类型 


redis无论什么数据类型,在数据库中都是以key-value形式保存,并且所有的key(键)都是字符串,所以讨论基础数据结构都是讨论的value值的数据类型

主要包括常见的5种数据类型,分别是:String、List、Set、Zset、Hash。

String字符串    可以是字符串、整数或浮点数    对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作;
List列表    一个链表,链表上的每个节点都包含一个字符串    对链表的两端进行push和pop操作,读取单个或多个元素;根据值查找或删除元素;
Set集合    包含字符串的无序集合    字符串的集合,包含基础的方法有看是否存在添加、获取、删除;还包含计算交集、并集、差集等
Hash散列    包含键值对的无序散列表    包含方法有添加、获取、删除单个元素
Zset有序集合    和散列一样,用于存储键值对    字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定;包含方法有添加、获取、删除单个元素以及根据分值范围或成员来获取元素

(4)redis为什么是单线程的?


redis6.0之前的网络i/o和读写存储是单线程的
redis6.0之后 网络请求采用多线程 读写存储依然是单线程
持久化,集群数据同步是额外的线程完成的

(5)为什么那么快?


1、命令执行基于内存操作,一条命令在内存操作的时间是几十纳秒
2.命令执行是单线程操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值