Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1237|回复: 0

[默认分类] 数据库相关面试题

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-3-17 11:36:37 | 显示全部楼层 |阅读模式
    Oracle与mysql的区别
    mysql是中小型数据库 开源免费
    Oracle数据是大型数据库,闭源,收费(个人使用免费,商业用途收费),

    主键
            mysql可以设置成主键自动增长,在建表是设置主键列为 auto increment
            Oracle没有主键自动增长,需要创建一个序列把下一个值赋给该字段即可
            
    分页
            mysql使用limit关键字
            Oracle使用rownum字段
            
    空字符的处理
            Oracle定义非空字段就必须要有值
            mysql定义非空字段可以有空的内容

    长字符串
            Oracle插入和修改时如果字符串长度大于4000个单字节,要考虑使用clob类型

    字符串的模糊比较
            mysql与Oracle的模糊查询都是使用 like '%字符串%' 但Oracle使用了该模糊查询就不能使用索引 降低了效率

    引号的处理
            mysql可以用双引号包起字符串  Oracle只能用单引号包起字符串 插入和修改字符串前必须添加单引号
            
    存储过程和函数【重点】
            函数是一个特殊的存储过程,存储过程能使用的技术函数都可以使用
            函数和过程都是预编译的 一次编译多次执行  效率更高
            存储过程使用procedure<婆c觉> 函数使用function
            函数必须要有一个返回值(return) 存储过程只能使用out间接返回值 都可以有参数可以没有参数
            函数可以在任何地方调用 存储过程只能在plsql中调用
            
            
    Oracle中有哪几种文件
            数据文件(后缀.dbf或者.ora) 日志文件(后缀名.log) 控制文件(后缀名.ctl) 一般在安装目录下的\oraData\orcl
            
    Oracle怎样存储文件,能够存储那些文件
            Clob  可变长度的字符数据类型,
            Nclob 可变字符类型的数据,一个字符永远占3个字节
            Blob  可变长度的二进制数据
            Bfile  数据库外面存储的二进制文件
            
    Oracle备份
            Oracle使用cmd命令 exp/imp导入导出为二进制文件  可以使用pl/sql Develpoer工具import/export导入导出
            
    Oracle冷备份和热备份的不同点以及各自优点
             冷备份需要关闭数据库的情况下,将文件拷贝到另外位置
                    优点:安全,容易归档,非常快速的备份方法,容易恢复到某个时间点
                    缺点:备份时数据库不能作其他的工作 若磁盘空间有限,只能拷贝到磁盘以外的设备上
             热备份是在数据库运行的情况下,采用归档方式备份数据库的方法
                    优点:在数据库工作时,也可以进行备份 可以将数据库恢复到任意时间点
                    缺点:不能出错,若备份不成功,所得到的结果不可用于恢复

    truncate和delete
            都是删除表的实体  
                    truncate删除不记录到rollback日志,数据无法恢复,所以操作速度较快  数据定义语言(DDL)
                    delete删除数据将存储在系统回滚段中,需要的时候可以恢复 数据操纵语言(DML)
                                              
    rowid和rownum
            他们都是表中的伪列
            rowid是物理地址,用于定位Oracle中具体数据的存储位置 rowid相对不变
            rownum是sql查询结果排序  rownum会变化的
            
    优化Oracle数据库【重点】
            操作数据库要通过IO操作,读写磁盘速度是比较慢的,我们要减少磁盘的IO  可以对物理逻辑进行优化
             物理
                    可以对硬件进行升级
                    建立索引=====》<btree索引--值唯一或少许重复  norma索引--允许小范围的重复>
                    建立表分区
                    合理配置Oracle
                            修改最大连接数
                            禁止回收站功能
             逻辑
                    开发时sql语句要么全部大写要么全部小写并使用占位符语句 oracel会先解析sql语句并放入共享池中
                    尽量不要使用*号  因为*号要转化为具体的列名 比较耗时
                    where语句尽量不要使用!= 因为使用了就不使用索引
                    使用redis缓存
                   
                   
    Oracle怎样进行分页
            使用rownum进行分页
            select g.* from (select t.*,rownum from 表名 t) g where t.rownum>=开始位置 and t.rownum<=结束位置
            先把要分页的表查询出来 以查询结果进行子查询分页
            

            
    什么是死锁 解决死锁问题
             死锁
                    多个线程对同一个资源的争抢
                    例如:当一个线程对一行数据进行操作没提交 另一个线程对一行数据进行操作没提交  然后他们两个在互相操作对方未提交的数据行 这时会产生死锁
             解决
                    使用dba登录 查看产生死锁的语句:
                    select s.username,l.object_id, l.session_id,s.serial#, s.lockwait,s.status,s.machine,s.program from v$session s,v$locked_object l where s.sid = l.session_id;
                    再杀死进程中的会话 结合session_id 和serial#(塞论饿)
                    alter system kill session 'session_id,serial#';
                    alter system kill session '301,16405';

    删除数据库的重复记录
            delete form 表名 t where t.rowid!=(select max(rowid) form 表名 group by (列名))

            
    数据库三范式
            列是不可再分的
            一张表只能做一件事情
            列不予许间接依赖(一张表只能有一个主键)

    数据库的隔离级别分别是什么解决了什么问题
            读未提交  读已提交  可重复读  串行化
            解决了脏读(读取到了用户未提交的数据)
            不可重复读(重复读取同一行数据,发现数据被更改了)
            幻读(两次读取某一条件的多条数据是,发现多了几条数据),


    Oracle中dml、ddl、dcl、tcl
            dml数据操纵语言:select delete update insert
            ddl数据定义语言:create table drop table
            dcl数据控制语言:grant revoke
            tcl事务控制语言:commit rollback
            
    什么是ER图
            实体与实体的关系
                    一对多 多对多 一对一
                   
    什么是视图 普通视图和物化视图的区别
            普通视图是虚拟表 视图指向了一条SQL语句  相当于为该SQL语句取了一个别名
            物化视图是一种特殊的物理表  会占用数据库磁盘空间
            
    索引的优缺点
            有点:快速查询
            缺点:数据量大时  需要加大索引的维护量
            
            
    表连接
            迪卡尔积  交叉连接的结果
            内连接 通过条件关联无法关联的丢弃
            左外连接 以指定的表为主表 能关联显示 不能关联的主表保留
            右外连接 以指定的表为主表 能关联的显示 不能关联的主表保留
            全连接 左外连和右外连的结果合并去重复


    说说你写过的最大存储过程
            在工作中很少写过 存储过程是在数据库中执行的有复杂的逻辑会降低数据库的性能 它也比较难迁移 mysql和Oracle的
                    存储过程的语法是不一样的 比较难维护
                   
                   
                   
                   
    ===========================================redis==========
    什么是redis
            redis是一个key-value存储系统,支持丰富的数据类型,数据存储在内存中 读取效率极高
            
    支持的数据类型
            String 值是字符串
            List 值是一个集合可重复集合
            Set 值是一个不可重复的集合
            Sorted Set 值是一个排序的不可重复的数据
            Hash 值可以是一个对象
            
    为什么redis把数据放在内存中
            内存读写数据要比磁盘快 磁盘中的IO影响性能
            
    redis分布式的模型
            redis支持主从的模式 Master(写)会将数据同步到slave(查)这是一个典型的读写分离  这样可以减少单个机器并发的访问数量
            redis最经典的方案是 redis cluster 完全去中心化的集群  每一个节点都可以读写

    redis的回收策略
            当redis数据过多导致内存快使用完了 redis可以启用回收策略
            volatile-lru:从过期的数据集中挑选最近最少使用的数据淘汰
            volatile-ttl:从过期的数据集中挑选将要过期的数据淘汰
            volatile-random:从过期数据集中任意选择数据淘汰
            allkeys-lru:从数据集中挑选最近最少使用的
            allkeys-random:从数据集中任意选择数据淘汰

            
    redis与Memcached有哪些优势
            memcached的值均是简单的字符串 redis支持丰富的数据类型
            redis的速度比memcached快
            redis可以持久化数据


    redis常用的场景
            会话缓存
            Tomcat集群session方案 将session数据缓存在redis
            分布式获取主键
            队列
            排行榜
            发布和订阅



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-26 05:06 , Processed in 0.392045 second(s), 52 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表