自我介绍 面试官你好,我叫。。。,来自。。。。,。。年毕业于。。。。,毕业后至今一直在。。。工作,外派到。。。。。。。公司做BI开发,过往的项目中接触过ODS层、数仓层和报表层的开发。主要擅长数仓开发和性能优化。我觉得我的优势在于不管工作还是生活中都很有责任心,也很善于总结。以上就是我的自我介绍,谢谢。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 在上家公司主要做些什么? 在上家公司我主要是做BI开发,负责过4个项目,在不同的项目中负责过ODS层、DW层和DM层的开发,带过3个新人。上家公司主要使用的数据库是Oracle,常用工具主要涉及到: 用PowerDesigner套用模板进行建模,用Datastage工具进行ETL开发,用 FineReport结合sql做报表开发。自己比较擅长的是存储过程的开发,会做性能优化。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 介绍下最近的项目 最近项目是做管驾仓系统开发,项目主要是为了给行方管理层提供分析和决策的指标支持。我主要负责DM层的报表开发,通过存储过程开发将数据同步到报表层,用自定义函数对指标进行计算,然后用帆软工具做大屏展示。兼带DW层新人写一些复杂的存储过程。 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 写过比较复杂的业务是什么? 银行资产质量指标的计算 需要关联多张表计算出正常贷款迁徙率和不良贷款生成率、以及贷款偏离度。 关联的表有:正常类贷款、关注类贷款率、不良贷款、其中是多次左关联、取值以万为单位,再换算成%,然后再取小数点后2位。 逻辑是: (正常类贷款表关联不良贷款、关注类贷款关联不良贷款表、/ 正常类贷款表-正常类贷款表和不良贷款表关联 + 关注类贷款表-关注类贷款表和不良贷款表关联)×100% 正常贷款迁徙率=(期初正常类贷款中转为不良贷款的金额+期初关注类贷款中转为不良贷款的金额)/(期初正常类贷款余额-期初正常类贷款期间减少金额+期初关注类贷款余额-期初关注类贷款期间减少金额)×100% ------------------------ 不良贷款率=贷款拨备率/拨备覆盖率 1、贷款拨备率=贷款减值准备/各项贷款余额=(一般准备+特殊准备+专项准备)/各项贷款余额 2、拨备覆盖率=贷款减值准备/不良贷款 3、拨备覆盖率的监管标准为150% 4、贷款减值准备期末余额=期初余额+期初调整+当期计提-当期转回+当期转入-已减值贷款折现回拨部分+收回以前年度核销部分-当期核销+其它因素变动 贷款减值准备计提=1%*各项贷款余额+2%*关注类贷款+25%*次级类贷款+50%*可疑类贷款+100%*损失类贷款+特别准备 计提标准不同,因此可比性不高,而计入当期损益的贷款减值准备也是影响业绩的重要因素,因此资产质量与经营业绩之间具有较强的关联性。 1、正常类贷款率、关注类贷款率、不良贷款率 2、逾期贷款率、重组贷款率、 3、贷款拨备率(拨贷比)、拨款覆盖率 4、贷款迁徙率、不良贷款生成率、贷款偏离度 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 帆软常用报表 角色报表、填报报表、联动报表,流程报表 常用图案:饼图 柱状图 折线图 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 分析函数和聚合函数的区别? 1、用途:聚合函数用于简单的计算,分析函数用于复杂的计算 2、返回值数量不同:分析函数会根据表中的行数,每行返回一个计算结果,聚合函数计算结果返回一个值。 3、分组方式不同:聚合函数用group by 分组,分析函数是用partiton by 分组 4、聚合函数 select、group by 、having后面只能放分组字段,分析函数是在partiton by后面放要分组的字段 5、order by 的作用不同:聚合函数是排序,分析函数是排序和累计 6、过滤条件放的位置不同:聚合函数过滤条件要放在having后面,分析函数放在where后面 -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- hints用过哪些用法? 1、指定开启并行:parallel(表1,并行数) 2、指定索引:index (表1,索引名) 3、指定全表扫描: full(表1) 4、指定用ensted loop 连接 :use_nl(表1,表2) 5、指定用hash 连接:use_hash(表1,表2) 6、指定用sort merge join 连接:use_merge(表1,表2) 7、指定表1为驱动表: leading(表1,表2) -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 性能优化怎么做的 一般是用SQL调优、索引调优 和优化器调优 常用的SQL优化语句调优 1、避免索引失效 2、多用commit 提交数据 3、尽量多用半连接 4、in、not in 用 exist,not exist替换,少用join 5、用with 语句对某段SQL建立临时表,拆分步骤 6、distinct 去重性能最差,尽量用group by 7、like模糊查询语句替换成精准查询 8、decode 替换case when 9、select后避免使用* 10、连接和分组时先用where过滤,用where子句 替换having子句 11、避免隐式转换 12、避免笛卡尔积 13、用 truncate 替换delete 索引优化 索引的原理:对索引列进行排序生成索引表,根据rowid快速定位具体记录 索引的种类:unique 唯一索引:主键列 组合索引:经常一起在where条件中的多列 位图索引:某一列有大量重复数据 函数索引:where 条件中包含函数或者表达式时 优点:唯一索引可以保证数据库中的每一行数据的唯一性,加快检索速度。加速表关联 缺点:创建和动态维护需要大量时间,会占物理存储空间 什么时候会导致索引失效: 针对索引列使用函数、算术运算、隐式转换、!=和null 的判断、like:'%__' 在前 表分区 将数据在物理上存放在多个表空间,查询的时候不需要全表扫描。数据量特别大的时候用。 有点:改善查询性能、维护方便 缺点:已经存在的表无法直接转化为分区 表分区的种类: 范围分区:用指定的分区键决定的范围进行分区,常用日期 列表分区:某列的值只有几个,可以采用列表分区 ,如1/0、N/Y 散列分区:通过指定分区数量和编号来均匀分布 组合分区:范围分区和列表分区组合;范围分区和散列分区组合;分区中的分区被称为子分区 优化器优化 RBO:基于规则的优化器 和 CBO:基于代价的优化器 查看执行计划 F5 执行顺序:缩进最多的先执行,同一级遵循最上最右先执行 表的扫描方式: 全表扫描、索引扫描 表的关联方式: 嵌套循环:分驱动表和匹配表,从驱动表获取一行数据,在匹配表找符合条件的行;确定合适驱动表,建立索引执行效率会更高 哈希连接:先生成哈希函数,对两张表生成哈希值,利用哈希值建立连接;针对数据量大,无索引时,比嵌套效率高,适合等值关联 排序-合并连接:先排序,再连接;针对数据量大,无索引,需要排序的时候使用,使用不等式连接 看执行计划主要看:执行顺序、表的扫描方式、 常用的表 常计算的指标