• 百度数据开发面试题


    事后HR回邮件被刷,总结下面试经历。
    面试比较全面,主要是oracle的sql开发,博主傻傻的把数据结构和各种算法看了一上午,下午去完全没问。
    话说面试大叔记忆力真的好,啥都记得清清楚楚的。

    一、Oracle开发
    1.取差集

    not in、not exists不去重(not in() 中有null值则查询结果为空)
    minus去重
    集合操作符总结(UNION:由每一个查询 选择的 全部不反复的行组成。并集不包括反复值, 默认按第 1 个查询的第 1 列升序排列。
              UNION ALL: 由每一个查询 选择的 全部的行。全然并集包括反复值。 不排序。
              MINUS : 在第一个查询中。 不在后面查询中的行。不包括反复。 按第1 个查询的第 1 列升序排列。
              INTERSECT: 取每一个查询结果的交集。 不包括反复行。 按第1 个查询的第 1 列升序排列。)


    2.行列转换

    Oracle行列转换

    Oracle行转列、列转行的Sql语句总结(转)

    链接中的基本都用到。
    1)wm_concat、listagg

    select listagg(sales,',') within GROUP (order by s_date) ,wm_concat(sales) from sales
    

      

    2)实现split

    oracle拆分逗号分隔字符串 实现split

    博主这里没记住正则,开始傻傻的用循环暴力,后来面试的大叔让我随便用什么语言
    博主就写了个java的List数组拆分,后来想想完全不同,这里应该是String的split,
    用oracle的话就用正则,其他语言支持正则的都可以用正则。这是老夫版的,
    面试写的随意,使用方法名递归,估计面试官替我着急。

     public static List<String> split1(String a) {
    		char[] b=(a+",").toCharArray();
    		String c="";
    		List<String> d = new ArrayLixt<String>();
    		for(char x:b) {
    			if(x==','){
    				d.add(c);
    				c="";
    			}else {
    				c=c+x;
    			}
    		}
        	return d;
        }
    

      

    3.分析函数

     1)普通分析函数就不说了,博主有些遗忘的关于开窗函数的使用吧,具体要的结果

    select distinct to_char(s_date,'yyyymm') 月份, 
    sum(sales) over(partition by to_char(s_date,'yyyymm')) 月销售,
    sum(sales) over(partition by to_char(s_date,'yyyy')||to_char(s_date,'Q'))  季销售,
    sum(sales) over(partition by to_char(s_date,'yyyy')) 年销售 
    from sales order by to_char(s_date,'yyyymm')

    https://www.jb51.net/article/91232.htm
    https://blog.csdn.net/fujiakai/article/details/51066389
     2)博主忘记名字的 Lag和Lead函数(可以在一次查询中取出某个字段的前N行和后N行的数据)
     
    4.start with 和prior组合使用
    大致上就是查找树关系

    select*from tab start with id=1 connect by prior id=fid

    大致上开发的问题就这些,其他的可能就是些人尽皆知的问题。

    二、数据库优化和相关知识
    主要被提及的就是一些优化方面的知识,一般都是程序运行慢了优化的处理过程
    吾想面试官君应该想要这类答案 

    Oracle数据库该如何着手优化一个SQL

    博主思路
    1.看执行计划
    怎么看:https://blog.csdn.net/java3344520/article/details/5506718
    这里博主说了用plsql和oracle的包。
    然后是执行计划给的信息都有什么
    https://www.cnblogs.com/Dreamer-1/p/6076440.html
    博主说主要看反应时间(这里博主已经陷入混乱状态,自己攻击了自己)
    然后说了看CPU消耗···(这里估计中年大叔也陷入了混乱状态,他表示问号,炎热的下午)

    2.sql优化
    https://blog.csdn.net/t0404/article/details/51893311
    这里博主大概答了不到一半,因为面试大叔反复问我还有呢还有呢···后来大叔的领导中年大叔也问的是这些

    3.数据库优化
    这里就是分区分表建立索引,优化redo日志(这里估计不是面试大叔想要的答案,毕竟公司肯定有DBA干这个了)

    三、Oracle数据库相关
    这里大叔问了一下存储架构,然后博主在纸上涂涂画画写出来了,从表空间到块解释一遍,后来问了个rowid的问题
    这里答主说是物理地址(其实不对,可能不太多人知道),然后大叔问我是rowid是的具体含义(这个N个月前有个老爷爷讲过,然鹅...)
    废多看链接 https://blog.csdn.net/wxwpxh/article/details/50532464

    普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid;
    你可以像使用其它列一样使用它,只是不能对该列的值进行增、删、改操作;
    一旦一行数据插入后,则其对应的ROWID在该行的生命周期内是唯一的,即使发生行迁移,该行的ROWID值也不变。
    让我们再回到 TABLE ACCESS BY ROWID 来:行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID可以快速定位到目标数据上,这也是Oracle中存取单行数据最快的方法

    高水位线问题,解释存储架构时一并解释了下(存储结构《oracle内核揭秘》讲的比较详细)

    Oracle高水位线(HWM)及性能优化

     

     





  • 相关阅读:
    学习进度笔记06
    学习进度笔记05
    学习进度笔记04
    学习进度笔记03
    学习进度笔记02
    周总结13
    周总结12
    周总结11
    人月神话阅读笔记3
    第一阶段冲刺10
  • 原文地址:https://www.cnblogs.com/Babylon/p/9224107.html
Copyright © 2020-2023  润新知