精华内容
下载资源
问答
  • 在我前一篇博客中提到用XML序列化作为数据库的一个方案,@拿笔小心 提到他们在用XML序列化时,遇到了一个比较严重的bug,即XML不闭合,系统不能正确的加载此XML。在我的开发经验中,也遇到过这样的问题。现在把这个...

    关于C# XML序列化的一个BUG的修改

    在我前一篇博客中提到用XML序列化作为数据库的一个方案,@拿笔小心 提到他们在用XML序列化时,遇到了一个比较严重的bug,即XML不闭合,系统不能正确的加载此XML。在我的开发经验中,也遇到过这样的问题。现在把这个BUG的描述及解决方案记录如下,也供遇到此BUG的朋友参考。

    BUG描述

    这个BUG的出现也是比较诡异的,我们给客户做的一套系统,这个系统会把数据写到N个xml文件中,正常情况下都没有问题。直到有一天……客户运行程序运行了一天,到快下班的时候,把数据保存到数据库中;第二天来上班时,忽然发现数据都没有了,也就是说昨天一天的工作白做了。

    当客户把这个BUG告诉我的时候,我第一时间的反应是要重现这个BUG。因为同样的系统N份已经运行了一年了,从来没有出现过这个问题。结果客户在同样的机器上再次测试,没有遇到这个问题。我以为这个BUG是偶然现象,就没有处理,结果噩梦开始了。

    当客户把系统部署到生产系统中之后,生产系统中偶尔也出现这个问题,每次出现这个问题,基本上耽误了一天的工作,损失都是N万,当时压力巨大,赶紧扎到现场解决问题。

    我发现之所以以前没有出现这个BUG,是因为以前的数据量都非常少,但这个版本的数据量很大。我观察了数据文件,发现是XML文件丢失了一部分结尾造成的。如丢失一个>号,导致不能正确加载XML,数据丢失。

    解决方案1

    既然定位到了问题,那就有解决方案了。每次写完数据之后,我都会重新LOAD一下数据以验证正确性,如果不正确,则重新写入数据。用这个思路,我很快改了一版,部署到生产环境中。(测试环境很难重新这个错误)。

    然而,问题还是没有解决,一个月之后,同样的问题又出现了。看来必须找到根本原因,不能取巧解决问题。

    解决方案2

    我开始google这个问题,最后在stackoverflow上找到:xdocument save adding extra characters。他的描述是XML会增加字符,我的问题是会减少字符。

    原来XML的写入方式是:

    config.Save(new FileStream(@"c:\foo.xml", FileMode.Create, FileAccess.Write), SaveOptions.None);

    应该改为

    using (FileStream fs = new FileStream(@"C:\foo.xml", FileMode.Truncate, FileAccess.Read))
    {
        config.Load(fs);
    }

    主要修改是把FileMode.Create改为FileMode.Truncate。

    Use FileMode.Truncate in your write FileStream so that the file is truncated to 0 bytes before you start writing to it.

    这个方案看起来是靠谱的,然而,我还是不放心。

    解决方案3

    为了防止再次出问题,我写了一个FixErrorXmlFile方法,解决去除xml多字符的问题,在每次加载xml的时候,如果出现错误,调用此方法修正xml错误。其核心代码如下:

      private static bool ReadFile(string filePath, out string realContent)
            {
                string content = string.Empty;
                realContent = string.Empty;
                using (FileStream fs = new FileStream(filePath, FileMode.Truncate))
                {
                    using (StreamReader sr = new StreamReader(fs))
                    {
                        content = sr.ReadToEnd();
                    }
                }
                //首先,要找到文件头末尾的'>'(即第一个右尖括号)的索引值index1,如果index1的值小于1,说明'>'不存在,跳出:否则往下执行
                //然后,找到根元素左侧的'<'的索引值index2,同样,如果'<'存在继续往下执行
                //      找到根元素右侧的第一个'>'的索引值index3和第一个' '的索引值index4
                //      比较index3和index4,较小者为根元素右侧的第一个元素的索引
                //      找出根元素的名称
                //接着,找到最后一个匹配根元素名称的开始位置index5
                //最后,确定根元素右侧第一个'>'的索引值,来获取文件的真正内容realContent
                int index1 = content.IndexOf('>');
                if (index1 < 1)
                {
                    return false;
                }
                int index2 = content.IndexOf("<", index1);
                if (index2 < 1)
                {
                    return false;
                }
                int index3 = content.IndexOf(">", index2);
                int index4 = content.IndexOf(" ", index2);
                int index = index3 < index4 ? index3 : index4;
                string rootName = content.Substring(index2 + 1, index - index2 - 1);
                int index5 = content.LastIndexOf(rootName);
                if (index5 < 1)
                {
                    return false;
                }
                index5 += rootName.Length;
                realContent = content.Substring(0, index5 + 1);
                return true;
            }

    后记

    我同时把解决方案2和解决方案3都修改了,再次放到了生产系统中。一年过去了,再也没有出现过这个BUG。这个一年指的是同时5台机器一直不停的运行。

    后来我又观察了一下,好像我的解决方案3根本就没起作用,从来没有进入过这个函数。也就是说,解决方案2已经解决了这个问题。

    虽然这个问题没有重现,但我还是不认为这个问题已经完美解决。我认为这是微软的一个BUG,在正常应用序列化的情况下会出现丢失数据,应该由微软来解决,而不是采用其它的补丁方式解决问题。微软类似的BUG遇到好几个了。

    总之,这个问题就是这样解决了,希望对遇到相似问题的人有所帮助。也欢迎大家指出我的问题。

    参考:

    http://www.cnblogs.com/wardensky/p/4170605.html

    我同事当时记录的这个问题:xml存储bug

    转载于:https://www.cnblogs.com/wardensky/p/4172970.html

    展开全文
  • Springwolf利用了您已经充分描述了用户端点(带有侦听器注释,例如@KafkaListner )的事实,并自动为适当的负载生成示例负载对象,并允许您单击一下即可将其发布到正确的通道。 用法 您不应在应用程序中使用此依赖...
  • 测验7:文件和数据格式 1.单项选择题 1.以下选项对文件描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬...2.关于文件关闭的close()方法,哪个选项的描述正确的?‪

    测验7:文件和数据格式化

    1.单项选择题

    1.以下选项对文件描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.文件可以包含任何内容
    B.文件是程序的集合和抽象
    C.文件是存储在辅助仓库上的数据序列
    D.文件是数据的集合和摘要
    正确答案 B

    函数或类是程序的集合和抽象,文件不是。

    2.关于文件关闭的close()方法,哪个选项的描述是正确的?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.如果文件是预期方式打开,仅在这种情况下可以不用close()方法关闭文件
    B.文件处理后可以不用close()方法关闭文件,程序退出时会替换关闭
    C.文件处理常规严格的“打开-操作-关闭”模式
    D.文件处理结束之后,一定要用close()方法关闭文件
    正确答案 B

    :文件后采用close()关闭文件是一个好习惯。如果不调用close(),当前Python程序完全运行退出时,该文件引用被释放,即程序退出时,相当于调用了close()。

    3.关于Python文件的’+'打开模式,哪个选项的描述是正确的?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.覆盖写模式
    B.预期模式
    C.与r / w / a / x一起使用,在原功能基础上增加同时读写功能
    D.追加写模式
    正确答案 C

    “ +”打开模式的精髓在于它能够同时赋予文件的读写权限。

    4.给定列表ls = [1、2、3,“ 1”,“ 2”,“ 3”],其元素包含2种数据类型,哪些选项是列表ls的数据组织维度?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.多维数据
    B.二维数据
    C.一维数据
    D.高维数据
    正确答案 C

    列表元素如果都是列表,其可能表示二维数据,例如:[[1,2],[3,4],[5,6]]。

    如果列表元素不都是的将列表,则它表示一维数据。

    5.关于数据组织的维度,哪些选项的描述是错误的?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.二维数据采用表格方式组织,对应于数学中的矩阵
    B.高维数据由键值对类型的数据构成,采用对象方式组织
    C.一维数据采用线性方式组织,对应于数学中的数组和集合等概念
    D.数据组织存在维度,字典类型用于表示一维和二维数据
    正确答案 D

    字典用于表示高维数据,一般不表示一维数据。

    6.关于CSV文件的描述,那些选项的描述是错误的?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.整个CSV文件是一个二维数据
    B.CSV文件通过多种编码表示字符
    C.CSV文件的每一行是一维数据,可以使用Python中的列表类型表示
    D.CSV文件格式是一种通用的,相对简单的文件格式,替换程序之间转移表格数据
    正确答案 B

    类型,CSV文件都是文本文件,由相同编码字符组成。

    7.‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪以下选项不是Python文件读操作的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.readline()
    B.readtext()
    Creadlines()
    D.读()
    正确答案 B

    没有readtext()方法

    8.Python对文件操作采用的统一步骤是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬ ‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.操作—读取—写入
    B.打开—读写—写入
    C.打开—操作—关闭
    D.打开—读取—写入—关闭
    正确答案 C

    打开—操作—关闭 是一个统一步骤,其中,关闭可以省略。

    9.对于Python文件,以下描述正确的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.同一个文件可以既采用文本方式打开,也可以采用二进制方式打开
    B.当文件以二进制文件方式打开时,读取按照字符串方式
    C.根据不同类型的文件,打开方式只能是文本或者二进制中的一种
    D.当文件以文本方式打开时,读取按照字节流方式
    正确答案 A

    文件就在那里,二进制或文本方式打开只是对其不同的程序理解。

    10.二维列表ls=[[1,2,3], [4,5,6],[7,8,9]],哪个选项能获取其中元素5?‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    A.ls[4]
    B.ls[-1][-1]
    C.ls[-2][-1]
    D.ls[1][1]
    正确答案 D

    这是二维切片的使用方式。
    .

    2.程序设计题

    2.1文本的平均列数

    描述
    打印输出附件文件的平均列数,计算方法如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

    	(1)有效行指包含至少一个字符的行,不计算空行;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    	
    	(2)每行的列数为其有效字符数;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    	
    	(3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    
    输入 输出
    123

    【参考代码】

    f = open("latex.log")
    s, c = 0, 0
    for line in f:
        line = line.strip("\n")
        if line == "":
            continue
        s += len(line)
        c += 1
    print(round(s/c))
    

    请注意:for line in f获取的line包含每行最后的换行符(\n),所以,去掉该换行符进行统计。

    2.2 CSV格式清洗与转换

    描述
    附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

    (1)按行进行倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    
    (2)每行数据倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    
    (3)使用分号(;)代替逗号(,)分割数据,无空格;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬
    

    按照上述要求转换后将数据输出。 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

    输入 输出
    1,2,3,4,5,6,7,8,9 9;8;7,6;5;4,3;2;1

    【参考代码】

    f = open("data.csv")
    ls = f.readlines()
    ls = ls[::-1]
    lt = []
    for item in ls:
        item = item.strip("\n")
        item = item.replace(" ", "")
        lt = item.split(",")
        lt = lt[::-1]
        print(";".join(lt))
    f.close()
    

    注意:使用strip()方法去掉每行最后的回车,使用replace()去掉每行元素两侧的空格。

    展开全文
  • 【多选题】以下关于机器学习说法正确的是?【判断题】Python内置函数sum____用来返回数值型序列中所有元素之和。...【单选题】对于结构数据表述正确的是()。【多选题】以下哪些是人工智能时代的基...

    【多选题】以下关于机器学习说法正确的是?

    【判断题】Python内置函数sum____用来返回数值型序列中所有元素之和。

    【单选题】关于自定义函数的下列说法不正确的是:

    【判断题】Python内置函数len____可以返回列表、元组、字典、集合、字符串以及range对象中元素个数。

    【单选题】以下关于模块的描述,错误的是( )。

    【单选题】对于结构化数据表述正确的是()。

    【多选题】以下哪些是人工智能时代的基础?

    【单选题】( )函数以一系列列表作为参数,将列表中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

    【简答题】说出下列指令的寻址方式,并用语言阐述该指令的意思。(建议分值 50% ) ( 1 ) ADD R0,R1,#256 ( 2 ) SUB R0,R2,R3,LSL #1 ( 3 ) STRB R0,[R1] ( 4 ) STR R0,[R1],#8 ( 5 ) LDR R0,[R1],R2 ( 6 ) LDR R0,[R1,#8] ( 7 ) LDR R0,[R1],R2,LSR #3 ( 8 ) LDMFD R13!,{R0,R4-R12,PC}

    【判断题】Python程序运行速度要比C程序运行快。

    【判断题】Python内置函数open____用来打开或创建文件并返回文件对象。

    【判断题】Python程序可以在不同的操作系统中运行。

    【单选题】在读写文件之前,必须通过以下哪个方法创建文件对象:

    【简答题】简述计算机的特点

    【判断题】Python语言是一种编译型高级程序设计语言。

    【判断题】Python程序代码是开放的,加密困难。

    【单选题】以下关于Python的说法中正确的是哪一项?

    【多选题】大数据分析的基本模式()

    【判断题】Python内置函数max____用来返回序列中的最大元素。

    【单选题】人工智能研究的物质基础是( )。

    【判断题】PythonModuleDocs是Python的帮助文档。

    【单选题】有一组供用户标识为感兴趣或不感兴趣的网页,可被机器学习用来解决网页过滤问题,选择下列特征中哪个是通过训练这些网页学来的?

    【单选题】以下四个人工智能的应用领域中,与其他三个不同的是:

    【判断题】Python语言是一种面向对象的高级程序设计语言。

    【其它】作业1:数据库连接 连接属性 显示“产品”表的所有记录 作业2:按类别查询 作业3:添加“类别” 作业4:调用存储过程 作业5:Page212 例7-5

    【单选题】关于函数参数传递中,形参与实参的描述错误的是( )。

    【判断题】在函数内部可以通过关键字def来定义全局变量。

    【判断题】IDLE是Python的命令控制台,可以执行Python命令。

    【判断题】查看变量类型的Python内置函数是type____

    【简答题】请阅读以下代码,并写出1秒中内超级终端的输出内容 void Main (void) { Target_Init(); GUI_Init(); OSInit(); Send_D7light_Sem = OSSemCreate(0); OSTaskCreate(Task_1, (void *)0, (OS_STK *)&Stack_Task_1[STACKSIZE - 1], 5); OSStart(); } void Task_1 (void *pdata) { INT32U i,flag=0; Timer1_Init(); OSTaskCreate(Task_2, (void *)0, (OS_STK *)&Stack_Task_2[(STACKSIZE*3) - 1], 56); for(;;) { flag++; if(flag=2){ OSTimeDly(240); Uart_Printf("This is TASK1. %x\n" ,flag); OSSemPost(Send_D7light_Sem); flag=0; } } } void Task_2 (void *pdata) { INT8U err,flag=0; for(;;) { OSSemPend(Send_D7light_Sem, 0, &err); Uart_Printf("This is TASK2. \n");

    【判断题】要调用一个函数,需要知道函数的名称和参数。

    【判断题】max函数max____可以接收任意多个参数,并返回最大的那个。

    【其它】

    【单选题】以下关于函数的描述,正确的是( )

    【判断题】Python程序代码需要强制缩进。

    【单选题】关于函数的下列说法不正确的是:

    【填空题】1AFH=_______________D

    【判断题】Python语言是一种解释型高级程序设计语言。

    【判断题】Python2.0版本与Python3.0版本可以互相兼容。

    【简答题】简述计算机的几大应用领域—列举5项即可。

    【单选题】在Python中,以下关于函数的描述错误的是哪一项?

    【单选题】Python中,用于获取用户输入的命令为:

    【简答题】分组名单和每组招标文件以附件形式上传

    【多选题】以下属于分类算法的应用是?

    【其它】物业管理实务课程设计总结.docx 以组为单位填写并上传

    【单选题】被誉为计算机科学与人工智能之父的是

    【判断题】PythonManuals是Python的模块文档。

    【判断题】如果函数中没有return语句或者return语句不带任何返回值,那么该函数的返回值为Fasle。

    【判断题】Python内置函数min____用来返回序列中的最小元素。

    【单选题】( )函数是指直接或间接调用函数本身的函数

    展开全文
  • 不幸的是,虽然关系型数据库历经了约30年的发展,有成熟的理论和大量的实践基础,但是,大多数设计、开发人员在设计数据库结构时仍然是“跟着感觉走”,根据业务的需要和编程的方便,把字段这张表放几个那张表放几个...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? 34  *3.4 有这样一个巧妙的表达式:a^= b^= a^= b; 它不需要临时变量就可以交换a和b的值。 34 3.5 可否用显式括号来强制执行我所需要的计算顺序并...
  • 不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? *3.4 有这样一个巧妙的表达式:a^=b^=a^=b;它不需要临时变量就可以交换a和b的值。 3.5 可否用显式括号来强制执行我所需要的计算顺序并控制相关的副...
  • 不同编译器给出不同的i值,有的为3,有的为4,哪个是正确的? 34  *3.4 有这样一个巧妙的表达式:a^= b^= a^= b; 它不需要临时变量就可以交换a和b的值。 34 3.5 可否用显式括号来强制执行我所需要的计算顺序并...
  • 3.7.2 模式结构的正确命名 53 3.7.3 ER概念设计设计选择 54 3.7.4 ER图候选表示法 55 3.8 其他表示法示例:UML类图 55 3.9 高于2度联系类型 57 3.9.1 对二元和三元(或高度)联系选择 ...
  • 本书是一本关于Java最佳实践集大成之作,它从Java语言本身、Java程序架构设计和思想、Java程序编码规范和习惯等方面对151个经典问题给出了解决方案,为Java开发者提高开发效率和编写高质量Java代码提供了...
  • Spark考试题总结

    千次阅读 2020-10-12 17:27:03
    Scala语言中,以下说法正确的是() A.常量和变量都可以不用赋初始值 B.常量需要赋初始值,变量可以不用赋初始值C.常量和变量都需要赋初始值 D.常量不需要赋初始值,变量必须赋初始值 下面对MapReduce描述错误的是...

    一.选择判断

    1.单选

    下面哪个不是 RDD 的特点 ( )

    A.可分区 B.可序列化 C.可修改 D.可持久化

    关于累加器,下面哪个是错误的 ( )
    A.支持加法 
    B.支持数值类型
    C.可并行 
    D.不支持自定义类型

    Scala语言中,以下说法正确的是()
    A.常量和变量都可以不用赋初始值
    B.常量需要赋初始值,变量可以不用赋初始值
    C.常量和变量都需要赋初始值
    D.常量不需要赋初始值,变量必须赋初始值

    下面对MapReduce描述错误的是(  )
    A. 适合离线批处理   
    B. 具有很好的容错性和扩展性
    C. 启动开销小、可以使用很少的磁盘到时效率提高  
    D. Shuffle连接Map和Reduce

    下面描述正确的是(  )
    A. NameNode是一个中心服务器,单一节点,负责管理文件系统的名字空间以及客户端对文件的访问.
    B. DataNode负责元数据操作,很文件内容相关的数据流经过DataNode.
    C. 副本存放在那些DataNode上有NameNode和DataNode协商控制.
    D. DataNode全权管理数块的赋值,接受心跳信号和块状态报告

    下列那个配置描述是错误的(  )
    A.<name>fs.defaultFS</name> 是定义hdfs集群的命名空间
    B.<name>dfs.replication</name> 是定义hdfs文件系统副本数
    C.<name>dfs.datanode.data.dir</name> 是定义hdfs文件系统元数据存放目录
    D.<name>dfs.namenode.name.dir</name> 是定义hdfs文件系统元数据存放目录

    下列哪一项是yarn的一级调度管理(  )
    A.计算资源管理
    B.Schdule的周期管理
    C.app内部计算模型管理
    D.多样化计算模型管理

    下列哪一项不是applicationMaster的功能(  )
    A.数据切分
    B.为应用程序申请资源,并进一步分配给内部任务
    C.任务监控与容错
    D.所有应用的管理者

    关于ResourceManager描述错误的是(  )
    A. 全局的资源管理器,整个集群只有一个,负责集群资源的同意管理和调度分配
    B. 处理客户单请求
    C. 启动和监控ApplicationMaster
    D. 资源分配和调度、不监控NodeManager

    以下说明错误的是(  )
    A. setup() : 对 Map Task 进行一些预处理
    B. map() : 每次接受一个 Key-Value 对并对其进行处理,再分发处理
    C. cleanup() : 对 Reduce Task 进行一些处理后的工作
    D. run() : 相当于 Map Task 的驱动

    scala 中,以下说法错误是 (  )
    A. scala 中可以在类中定义类。
    B. scala 中可以在函数中定义函数。
    C. scala 中不可以在类中定义object。
    D. scala 中可以在函数中定义类。

    下面关于override修饰符的描述错误的是 (  )
    A. Scala里所有重载了父类具体成员的成员都需要这样的修饰符
    B. Scala里如果子类成员实现的是同名的抽象成员则这个修饰符是可选的
    C. Scala里如果子类中并未重载或实现什么基类里的成员则禁用这个修饰符
    D. Scala里如果子类是抽象类则子类的同名成员不可以使用这个修饰符

    Scala里,final修饰符的描述正确的是 (  )

    A. 类的声明上添加final修饰符确保成员不被子类重载
    B. 类的声明上添加final修饰符把整个类声明为final,这个类不能被继承
    C. 类的声明上添加final修饰符确保成员只能被子类重载一次
    D. 以上说法都是错误的

    调用函数时指定(),参数顺序可以跟函数定义时的顺序不同
    A.参数名
    B.参数值
    C.默认值
    D.变量值

    scala 中,类和它的伴生对象说法错误的是(  )
    A. 类和它的伴生对象定义在同一个文件中。
    B. 类和它的伴生对象可以有不同的名称。
    C. 类和它的伴生对象可以互相访问私有特性。
    D. 类和它的伴生对象可以实现既有实例方法又有静态方法。

     

    2.多选

    以下()可以实现类似java中的break跳出方式
    A.使用一个Boolean类型的控制变量,合适的时候return
    B.使用嵌套函数—从函数当中return
    C.使用Breaks对象中的break方法
    D.使用continu   

    ABC

    下列函数中参数必须为空的有()  

    A.readLine()   
    B.readInt()   
    C.readDouble()  
    D.readChar()

    BCD

    Spark跟如下哪些不是一类()
    A.MapReduce
    B.HDFS
    C.YARN
    D.Storm

    BC

    Spark可以实现哪些形式的分布式计算()

    A.内存式运算
    B.机器学习
    C.交互式查询
    D.流式计算

    ABCD

    Spark的算子类型()
    A.转换算子
    B.迭代算子
    C.动作算子
    D.核心算子

    AC

    下列哪些是spark的特点( )

    A.运行快
    B.基于内存
    C.底层是mr运算
    D.速度快

    ABD

    以下那些事宽依赖算子( )

    A.join
    B.mapPartitons
    C.groupByKey
    D.flatMap

    AC

    哪个是本地模式运行的条件 ( )
    A.spark.localExecution.enabled=true  
    B.显式指定本地运行
    C.finalStage 无父 Stage
    D.partition默认值

    ABC

    Stage 的 Task 的数量跟什么无关( )

    A.Partition             
    B.Job             
    C.Stage            
    D.TaskScheduler

    BCD

    spark的存储级别包含( )

    A.MEMORY_ONLY                      
    B.MEMORY_ONLY_SER
    C.MEMORY                                    
    D.MEMORY_AND_DISK_SER

    ABD

    Spark 的四大组件中包含( )
    A.Spark Streaming          
    B.Mlib 
    C.Graphx                           
    D.Spark R

    ABC

    Spark driver的功能是什么( )

    A.是作业的主进程
    B.负责了作业的调度
    C.负责向HDFS申请资源
    D.负责作业的解析

    ABD

    spark的有几种部署模式( )
    A.本地模式
    B.standalone 模式
    C.spark on yarn 模式
    D.mesos模式

    ABCD

    下列那些是spark中的常用算子( )
    A.map 
    B.mapPartitions  
    C.mapPartition 
    D.foreachPartitions

    AB

    下列那些选项导致内存溢出( )
    A.map端
    B.数据不平衡
    C.shuffle后
    D.standalone模式下资源分配不均匀

    ABCD

    Spark 的数据结构有 ( )

    A.rdd    B.DataFrame  C.Dataset D.RowMatrix

    AB

    SparkRdd 转换算子有( )
    A.map  B.filter  c.mapPartitions D.collect

    ABC

    以下是Spark中executor的作用是( )

    A.保存计算的RDD分区数据   
    B.向Driver反向注册   
    C.接受Driver端发送来的任务Task,作用在RDD上进行执行      
    D.做资源调度任务  

    ABC

    关于累加器,下面哪个是正确的( )

    A.支持加法 
    B.支持数值类型   
    C.可并行    
    D.不支持自定义类型

    ABC

    关于广播变量,下面哪个是正确的 ( )
    A.任何函数调用    
    B.是只读的  
    C.存储在各个节点    
    D.存储在磁盘或 HDFS

    ABC

    spark的特点有哪些( )
    A.快速性
    B.通用性
    C.兼容性
    D.持续性

    ABC

    下列选项有哪些是spark优化( )

    A.复用同一个rdd
    B.创建重复的rdd
    C.尽量使用shuffle算子
    D.使用map-side预聚合的shuffle操作

    AD

    Spark为什么比mapreduce快( )
    A.基于内存计算,减少低效的磁盘交互;
    B.高效的调度算法,基于DAG
    C.容错机制Linage,精华部分就是DAG和lineage
    D.executor封装cpu与内存,执行效率高

    ABC

    spark sql为什么比Hadoop快( )
    A.消除了冗余的HDFS读写
    B.基于内存,减少低效的磁盘交互
    C.消除了冗余的MapReduce阶段
    D.JVM的优化

    ACD

    Master 的 ElectedLeader 事件后不做哪些操作( )

    A.通知 driver 
    B.通知 worker 
    C.注册 application 
    D.直接 ALIVE

    ABC

    关于累加器,下面哪个是正确的的( )

    A.支持加法 
    B.支持数值类型 
    C.不可并行 
    D.不支持自定义类型

    AB

    Spark 支持的分布式部署方式中哪个是正确的( )
    A.standalone
    B.spark on mesos
    C.spark on YARN
    D.Spark on local

    ABC

    Task 不运行在下来哪里个选项中 Executor 上的工作单元( )

    A.Driver program
    B.spark master
    C.worker node
    D.Cluster manager

    ABD

    属于spark的执行流程对的是( )
    A.程序打包到hdfs
    B.master在对应的worker上开启executor进程
    C.executor向driver进程反向注册
    D.executor接受到任务之后,分批次执行

    BCD

    spark的特点包括( )
    A.快速
    B.通用
    C.可延伸
    D.兼容性

    ABD

    哪些是本地模式运行的个条件( )

    A.spark.localExecution.enabled=true  
    B.显式指定本地运行
    C.finalStage 无父 Stage
    D.partition默认值

    ABC

    关于spark中数据倾斜引发原因正确的选项有( )
    A.key本身分布不均衡
    B.计算方式有误
    C.过多的数据在一个task里面
    D.shuffle并行度不够

    ABCD

    关于spark容错说法错误的有( )

    A.在容错机制中,如果一个节点死机了,而且运算窄依赖,则只要把丢失的父RDD分区重算即可,依赖于其他节点
    B.宽依赖开销更大
    C.Checkpoint可以节约大量的系统资源
    D.RDD的容错机制是基于Spark Streaming的容错机制

    AD

    容错的级别有( )

    A.最多一次 
    B.至少一次 
    C.一次仅一次 
    D.只能一次

    ABC

    关于广播变量,下面哪个是错误的( )
    A.任何函数调用      B.是只读的  
    C.存储在各个节点    D.存储在磁盘或 HDFS

    ABC

    spark中常用的算子( )
    A.map
    B.mapPartitions
    C.foreach
    D.以上全不是

    ABC

    Spark的数据本地性有哪几种( )

    A.PROCESS_LOCAL是指读取缓存在本地节点的数据
    B.NODE_LOCAL是指读取本地节点硬盘数据
    C.ANY是指读取非本地节点数据
    D.B和C对

    ABC

    关于master的作用,下面正确的是( )
    A.接受driver端注册请求
    B.启动任务的容器Executor
    C.任务资源的调度
    D.监控集群

    ACD

    如何解决数据倾斜( )
    A.增大分区
    B.增加前缀或后缀
    C.减少分区
    D.根据需要找key

    ABD

    Spark的资源分配方式包括( ) 

    A.尽量集中
    B.尽量打散
    C.全部集中
    D.全部打散

    AB

    下面哪个操作是宽依赖 ( )

    A.join 
    B.filter
    C.group 
    D.sort

    ACD

    下列哪个是 RDD 的缓存方法 ( ) 

    A.persist() 
    B.Cache() 
    C.Memory()
    D.MemoryCache()

    AB

     

    spark.deploy.recoveryMode 支持那种( )

    A.ZooKeeper 
    B.FileSystem
    C. NONE 
    D Hadoop

    ABC

    下面哪些端口是 spark 自带服务的端口 ( )

    A.8080 B.4040 C.8090 D.18080

    ABD 

    下面属于HDFS设计目标的是
    A.自动快速检测应对硬件错误
    B.流式访问数据
    C.移动计算比移动数据本身更划算
    D.简单一致性模型

    ABCD

    下面描述正确的是(  )
    A. HDFS将数量众多的廉价机器使得硬件错误成为常态
    B. HDFS支持多种软硬件平台中的可移植性 
    C.HDFS上的一个文件大小是G或T数量级的,支持一个云中文件数量达到千万数量级。
    D. HDFS上的文件可以任意修改

    ABC

    hive有什么好处(  )
    A. 可以使用sql,操作存储在hdfs中的数据
    B. 可以通过语句自动编译mapreduce
    C. 可以直接在表中插入数据
    D. 可以存储数据

    AB

    那面那个是Hive的数据单元(  )
    A. Textfile
    B. Sequencefile
    C. Rcfile
    D. 都不正确

    ABC

    关于定义类正确的说法是()
    A.定义类时可以不用publiC.private来修饰
    B.定义类时类名前需用class关键字
    C.一个类文件中可以有多个类
    D.定义的所有的类都具有共有可见性

    ABC

    关于构造器说法正确的是()
    A.每个类都有主构造器
    B.除了主构造器,还可以定义辅助构造器
    C.用this关键字定义辅助构造器
    D.构造器参数可以不带val或var

    ABCD

     

    关于单例对象的说法正确的是()

    A.在Scala中没有静态方法和静态字段
    B.可以使用object这个语法结构来达到静态类的效果
    C.单例对象无法存放工具方法和常量
    D.调用单例对象的方法是类名.方法名

    ABD

     

    关于伴生对象下列说法正确的是()

    A.与类名相同的对象叫做伴生对象
    B.类和伴生对象之间可以相互访问私有的方法和属性
    C.声明伴生对象的方法是object 类名
    D.一个类中必须要声明伴生对象

    ABC

    3.判断

    scala中没有静态方法()错

    在scala编译器中,右键点击xxx.scala Refactor重命名时,xxx.scala内部名字改变()错

    在scala中给变量赋值时一般不需要指定类型()对

    在scala中当一行代码存在多条语句时用逗号隔开()对

    scala中定义的变量不可以被重新赋值()错

    scala中定义的常量不允许重新进行赋值()对

    在scala中常量需要赋初始值,变量可以不用赋初始值()错

    scala不刻意区分基本数据类型和引用数据类型()对

    实现单个特质中的抽象方法时不需要override关键字()对

    带有特质的对象就是在对象构造时指定其所需要的特质()对

    使用with关键字串联起来的特质实现的同一个方法被调用的前后顺序相同()错

    scala中的while循环和do循环与java中不相同()错

    vector在scala中表示集合的一种()对

    for推导式生成的集合与他的第一个生成器类型不兼容()错

    scala的语法支持不写分号()错

    scala 中的if/else表达式没有返回值()错

    scala 的设计中每个表达式都应该有某种类型的输出值()对

    Unit类似于java中的void,表示空的概念,不占用底层存储()对

    scala支持switch()错

    scala中的赋值语句可以连在一起写()错

    scala的异常工作机制和java一样,当程序抛出异常时当前的程序被终止()对

    scala中异常抛出的对象必须是java.lang.Throwable的子类()对

    scala可以在方法或函数定义时就声明可能会抛出的异常()错

    Scala可以使用模式匹配的方法捕获异常()对

    scala中函数对对象进行操作()错

    scala的函数定义中,必须给出所有的参数类型()对

    scala的函数定义中函数如果不是递归的,不需要指定返回类型()对

    scala中如果函数体需要多个表达式完成,可以使用代码块,块中的第一个表达式的值代表函数的返回值()错

    我们在调用某些函数时并不显式的给出所有参数值,对于这些函数我们可以使用默认参数()对

    scala不允许函数的参数有不确定的个数()错

    sparkStreaming的核心抽象是Dstream()对

    spark on hive是hive把spark作为底层计算框架()错

    Spark Job 默认的调度模式FIFO()对

    Saprk中的广播的广播变量存储在磁盘或者HDFS中()错

    join算子是属于宽依赖()对

    Spark中的窄依赖有shuffle宽依赖没有shuffle()错

    RDD不支持细粒度的写和更新操作()对

    可以增大driver的内存参数spark.driver.memory(default 1g)防止spark内存溢出 ()对

    spark中cache是缓存数据,默认是缓存在内存中,其本质还是调用persist()对

    SparkRdd action 算子的结果最后提交给driver()对

    SparkRdd 使用Transformation算子会销毁上一个rdd()对

    Spark的资源分配方式是尽量集中、尽量打散()错

    spark 1.4 版本的最大变化是支持动态资源分配()错

    spark只能用web ui 来查看运行日志()对

    hive 的元数据存储在 derby 和 MySQL 中没有区别()错

    sparkStreaming的核心抽象是Rdd()错

    Stage 的 Task 的数量Partition决定的()对

    默认的存储级别 是MEMORY_ONLY()对

    spark 的 master 和 worker 通过netty方式进行通信的()对

    做checkpoint有两种方式,数据检查点和记录数据的更新()对

    spark中sparkStreaming的核心是DataFrame()错

    具体的task运行在那他机器上,dag划分stage的时候确定的这是数据本地性()对

    reducebykey和groupbykey都只做全局聚合()错

     

    二.简答

    简述spark的容错机制

    答案:Spark的容错机制分为两种;
    第一种方式,lineAge内部如果有分片数据丢失,可以通过上下的依赖关系,启动重算机制,进行容错。
    第二种方式,spark可以通过checkPoint机制,设置一个第三方存储路径(一般是hdfs),当有数据丢失的时候,从对应的路径恢复数据,但是一旦启动了checkPoint意味着之前的lineAge被终止。

    spark作业调优

    序列化对于提高分布式程序的性能起到非常重要的作用。一个不好的序列化方式(如序列化模式的速度非常慢或者序列化结果非常大)会极大降低计算速度。很多情况下,这是你优化Spark应用的第一选择。Spark试图在方便和性能之间获取一个平衡。Spark提供了两个序列化类库:
    Java 序列化:在默认情况下,Spark采用Java的ObjectOutputStream序列化一个对象。该方式适用于所有实现了java.io.Serializable的类。通过继承 java.io.Externalizable,你能进一步控制序列化的性能。Java序列化非常灵活,但是速度较慢,在某些情况下序列化的结果也比较大。
    Kryo序列化:Spark也能使用Kryo(版本2)序列化对象。Kryo不但速度极快,而且产生的结果更为紧凑(通常能提高10倍)。Kryo的缺点是不支持所有类型,为了更好的性能,你需要提前注册程序中所使用的类(class)。

    driver的功能是什么?

    1)一个Spark作业运行时包括一个Driver进程,也是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的人口点;
    
    2)功能:负责向集群申请资源,向master注册信息,负责了作业的调度,,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。

    RDD宽依赖和窄依赖?

    RDD和它依赖的parent RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency)。
    
    1)窄依赖指的是每一个parent RDD的Partition最多被子RDD的一个Partition使用
    
    2)宽依赖指的是多个子RDD的Partition会依赖同一个parent RDD的Partition

    cache和pesist的区别 

    1)cache和persist都是用于将一个RDD进行缓存的,这样在之后使用的过程中就不需要重新计算了,可以大大节省程序运行时间;
    
    2) cache只有一个默认的缓存级别MEMORY_ONLY ,cache调用了persist,而persist可以根据情况设置其它的缓存级别;
    
    3)executor执行的时候,默认60%做cache,40%做task操作,persist最根本的函数,最底层的函数

    RDD有哪些缺陷?

    1)不支持细粒度的写和更新操作(如网络爬虫),spark写数据是粗粒度的所谓粗粒度,就是批量写入数据,为了提高效率。但是读数据是细粒度的也就是说可以一条条的读
    
    2)不支持增量迭代计算,Flink支持

    Spark中数据的位置是被谁管理的?

    每个数据分片都对应具体物理位置,数据的位置是被blockManager,无论数据是在磁盘,内存还是tacyan,都是由blockManager管理

    Spark程序执行,有时候默认为什么会产生很多task,怎么修改默认task执行个数?
     

    1)因为输入数据有很多task,尤其是有很多小文件的时候,有多少个输入block就会有多少个task启动;
    
    2)spark中有partition的概念,每个partition都会对应一个task,task越多,在处理大规模数据的时候,就会越有效率。不过task并不是越多越好,如果平时测试,或者数据量没有那么大,则没有必要task数量太多。
    
    3)参数可以通过spark_home/conf/spark-default.conf配置文件设置:spark.sql.shuffle.partitions 50 spark.default.parallelism 10第一个是针对spark sql的task数量第二个是非spark sql程序设置生效

     简单描述一下spark shufflle的过程?

    答案:spark的shuffle意味着数据要重新洗牌,主要分为两个流程,第一个是shuffle write,另外一个是shuffle read。
    shuffle write有两种方式,第一种类似于mapreduce的shuffle,第二种采用的是先排序后建立索引的方式,能大大减少第一种方式里面中间文件产生导致的性能降低。
    shuffle的read过程,要先判断需要读取数据来自于本节点还是其他节点,如果是其他节点需要先建立一个socket连接,然后通过文件块的方式来读取。
    
    Shuffle分为两类,基于hash的
    讲解了三种情况,建立索引排序

    哪些rdd会导致shuffle?

    答案: 1.byKey的算子
           2.reparation和coalesece(true)
        3.join(非 cogroup)

    kafka+spark-streaming结合丢数据怎么解决?

    spark streaming从1.2开始提供了数据的零丢失,想享受这个特性,需要满足如下条件:
    1.数据输入需要可靠的sources和可靠的receivers
    2.应用metadata必须通过应用driver checkpoint
    3.WAL(write ahead log)

    你觉得spark 可以完全替代hadoop 么?

    不可以
    Spark只是分布式计算平台,而hadoop已经是分布式计算、存储、管理的生态系统。
    与Spark相对应的是Hadoop MapReduce。我认为Spark是可以取代MapReduce的,从而成为Hadoop系统中不可或缺的一部分。
    Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的概念。RDD可以cache到内存中,那么每次对RDD数据集的操作之后的结果,都可以存放到内存中,下一个操作可以直接从内存中输入,省去了MapReduce大量的磁盘IO操作。但是,我们也要看到spark的限制:内存。我认为Hadoop虽然费时,但是在OLAP等大规模数据的应用场景,还是受欢迎的。目前Hadoop涵盖了从数据收集、到分布式存储,再到分布式计算的各个领域,在各领域都有自己独特优势。
    至于Spark相对于Hadoop的优势,我已经说了,分布式计算仅仅是hadoop的一部分。所以以下比较内容实际上是Spark和MapReduce的对比:
    更快
    更容易使用
    编程的时候没有蛋疼的map+reduce函数,而且配置起来超级方便。除支持JAVA外,支持scala、python、R。特别是scala,简直是太适合写数据分析的程序了,mapreduce用JAVA实在是太蛋疼了。而且RDD自带的函数超级好用,真心比mapreduce方便太多
    巨好用的库
    能解决90%问题的四大组件,无论是SQL、还是流数据处理、机器学习库、图计算,相当好用。当然,hadoop相关的库也不少,不过spark是原生包含,用起来方便点。
    运行方便
    Spark是可以脱离hadoop运行的,比如数据可以从数据库或者本地文件里面抽取。不过毕竟大数据时代,大家都习惯于将Spark和hadoop通过mesos或者yarn结合起来用;主要用Hadoop的HDFS,当然HBASE或者HIVE这种HDFS之上的组件,Spark也支持。

    对于Spark中的数据倾斜问题你有什么好的方案?

    1)前提是定位数据倾斜,是OOM了,还是任务执行缓慢,看日志,看WebUI
    2)解决方法,有多个方面
    · 避免不必要的shuffle,如使用广播小表的方式,将reduce-side-join提升为map-side-join
    ·分拆发生数据倾斜的记录,分成几个部分进行,然后合并join后的结果
    ·改变并行度,可能并行度太少了,导致个别task数据压力大
    ·两阶段聚合,先局部聚合,再全局聚合
    ·自定义paritioner,分散key的分布,使其更加均匀

    为什么要进行序列化?

    序列化可以减少数据的体积,减少存储空间,高效存储和传输数据,不好的是使用的时候要反序列化,非常消耗CPU

    Spark累加器有哪些特点?

    1)累加器在全局唯一的,只增不减,记录全局集群的唯一状态
    2)在exe中修改它,在driver读取
    3)executor级别共享的,广播变量是task级别的共享
    两个application不可以共享累加器,但是同一个app不同的job可以共享

    三.论述

    请用java 手写一个spark单词计数程序?

    public class WordCountLocal {
     public static void main(String[] args) {
      SparkConf conf = new SparkConf().setAppName("WordCountLocal").setMaster("local[2]");
      
      JavaSparkContext sc = new JavaSparkContext(conf);
      JavaRDD<String> words = sc.textFile("c:.//words.txt").flatMap(new FlatMapFunction<String, String>() {
       @Override
       public Iterable<String> call(String line) throws Exception {
        return Arrays.asList(line.split(" "));
       }
      });  
      JavaPairRDD<String, Integer> mapToPair = words.mapToPair(new PairFunction<String, String, Integer>() {
       @Override
       public Tuple2<String, Integer> call(String word) throws Exception {    
        return new Tuple2<String, Integer>(word,1);   
       }
      });  
      JavaPairRDD<String, Integer> result = mapToPair.reduceByKey(new Function2<Integer, Integer, Integer>() {
       
       @Override
       public Integer call(Integer v1, Integer v2) throws Exception {   
        return v1 + v2;
       }
      });
     
      result.foreach(new VoidFunction<Tuple2<String,Integer>>() {
       @Override
       public void call(Tuple2<String, Integer> wordCount) throws Exception {
       
        System.out.println(wordCount._1 + " appear " + wordCount._2 + " times!");
       }
      });
      sc.close();
     }
    }

    请用scala 手写一个spark的wordCount程序?(数据源为:c://words.txt)

    object WordCount {
      def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("WordCount").setMaster("local")
        val sc = new SparkContext(conf)
        sc.setCheckpointDir("")
        val rdd1 =sc.textFile("hdfs://huawei:8020/words.txt").flatMap(_.split(" ")).
          map((_,1)).reduceByKey(_+_).persist(StorageLevel.MEMORY_AND_DISK)
         rdd1.checkpoint()
           rdd1.saveAsTextFile("")
        println(rdd1.collect().toBuffer)
      }
    }

    Spark Streaming与Storm的优劣分析

    事实上,Spark Streaming绝对谈不上比Storm优秀。这两个框架在实时计算领域中,都很优秀,只是擅长的细分场景并不相同。
    
    Spark Streaming仅仅在吞吐量上比Storm要优秀,而吞吐量这一点,也是历来挺Spark Streaming,贬Storm的人着重强调的。但是问题是,是不是在所有的实时计算场景下,都那么注重吞吐量?不尽然。因此,通过吞吐量说Spark Streaming强于Storm,不靠谱。
    
    事实上,Storm在实时延迟度上,比Spark Streaming就好多了,前者是纯实时,后者是准实时。而且,Storm的事务机制、健壮性 / 容错性、动态调整并行度等特性,都要比Spark Streaming更加优秀。
    
    Spark Streaming,有一点是Storm绝对比不上的,就是:它位于Spark生态技术栈中,因此Spark Streaming可以和Spark Core、Spark SQL无缝整合,也就意味着,我们可以对实时处理出来的中间数据,立即在程序中无缝进行延迟批处理、交互式查询等操作。这个特点大大增强了Spark Streaming的优势和功能。

    storm和spark-streaming:为什么用storm不同spark-streaming

    对于Storm来说:
    
    1、建议在那种需要纯实时,不能忍受1秒以上延迟的场景下使用,比如实时金融系统,要求纯实时进行金融交易和分析
    2、此外,如果对于实时计算的功能中,要求可靠的事务机制和可靠性机制,即数据的处理完全精准,一条也不能多,一条也不能少,也可以考虑使用Storm
    3、如果还需要针对高峰低峰时间段,动态调整实时计算程序的并行度,以最大限度利用集群资源(通常是在小型公司,集群资源紧张的情况),也可以考虑用Storm
    4、如果一个大数据应用系统,它就是纯粹的实时计算,不需要在中间执行SQL交互式查询、复杂的transformation算子等,那么用Storm是比较好的选择
    
    对于Spark Streaming来说:
    1、如果对上述适用于Storm的三点,一条都不满足的实时场景,即,不要求纯实时,不要求强大可靠的事务机制,不要求动态调整并行度,那么可以考虑使用Spark StrStreaming
    2、考虑使用Spark Streaming最主要的一个因素,应该是针对整个项目进行宏观的考虑,即,如果一个项目除了实时计算之外,还包括了离线批处理、交互式查询等业务功能,而且实时计算中,可能还会牵扯到高延迟批处理、交互式查询等功能,那么就应该首选Spark生态,用Spark Core开发离线批处理,用Spark SQL开发交互式查询,用Spark Streaming开发实时计算,三者可以无缝整合,给系统提供非常高的可扩展性

    hadoop和spark的都是并行计算,那么他们有什么相同和区别

    两者都是用mr模型来进行并行计算,hadoop的一个作业称为job,job里面分为map task和reduce task,每个task都是在自己的进程中运行的,当task结束时,进程也会结束
    spark用户提交的任务成为application,一个application对应一个sparkcontext,app中存在多个job,每触发一次action操作就会产生一个job
    这些job可以并行或串行执行,每个job中有多个stage,stage是shuffle过程中DAGSchaduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset有TaskSchaduler分发到各个executor中执行,executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算
    hadoop的job只有map和reduce操作,表达能力比较欠缺而且在mr过程中会重复的读写hdfs,造成大量的io操作,多个job需要自己管理关系
    spark的迭代计算都是在内存中进行的,API中提供了大量的RDD操作如join,groupby等,而且通过DAG图可以实现良好的容错

    spark的有几种部署模式,每种模式特点?
     

    1)本地模式
    Spark不一定非要跑在hadoop集群,可以在本地,起多个线程的方式来指定。将Spark应用以多线程的方式直接运行在本地,一般都是为了方便调试,本地模式分三类
    · local:只启动一个executor
    · local[k]:启动k个executor
    · local
    :启动跟cpu数目相同的 executor
    2)standalone模式
    分布式部署集群, 自带完整的服务,资源管理和任务监控是Spark自己监控,这个模式也是其他模式的基础,
    3)Spark on yarn模式
    分布式部署集群,资源和任务监控交给yarn管理,但是目前仅支持粗粒度资源分配方式,包含cluster和client运行模式,cluster适合生产,driver运行在集群子节点,具有容错功能,client适合调试,dirver运行在客户端
    4)Spark On Mesos模式。官方推荐这种模式(当然,原因之一是血缘关系)。正是由于Spark开发之初就考虑到支持Mesos,因此,目前而言,Spark运行在Mesos上会比运行在YARN上更加灵活,更加自然。

    如何使用Spark解决分组排序问题?(互联网公司常面)
    组织数据形式:
    aa 11
    bb 11
    cc 34
    aa 22
    bb 67
    cc 29
    aa 36
    bb 33
    cc 30
    aa 42
    bb 44
    cc 49
    需求:
    1、对上述数据按key值进行分组
    2、对分组后的值进行排序
    3、截取分组后值得top 3位以key-value形式返回结果
     

    答案:
    val groupTopNRdd = sc.textFile("hdfs://db02:8020/user/hadoop/groupsorttop/groupsorttop.data")
    groupTopNRdd.map(_.split(" ")).map(x => (x(0),x(1))).groupByKey().map(
    x => {
    val xx = x._1
    val yy = x._2
    (xx,yy.toList.sorted.reverse.take(3))
    }
    ).collect

     

    展开全文
  • 关于类的序列化,下列说法哪些是正确的:D A .类的序列化与serialVersionUID毫无关系。 B .如果完全不兼容升级,不需要修改serialVersionUID值。 C .POJO类的serialVersionUID不一致会编译出错。 D .POJO类...
  • 所谓动态解释执行,是指在最终应用程序运行过程中,由用户自行输入命令表达式组成字符串序列,然后交由应用程序解释执行。而在应用程序开发过程中编译阶段由程序开发人员控制运算操作顺序且由编译程序完成命令...
  • flash shiti

    2014-03-14 10:32:41
    16. 下面的语句说法正确的是: □ A. 目前Flash 最新的创作平台是Flash MX,播放插件是Flash MX Player。 □ B. 目前Flash 最新的创作平台是Flash MX,播放插件是Flash 6.0 Player。 □ C. 目前Flash 最新的创作平台...
  • (24) 对建立良好的程序设计风格,下面描述正确的是______。(A) A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无 (25) 下面对对象概念描述错误的是______...
  • 你必须知道495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3, 有的为4, 哪个是正确的? . . . . . . . . . . . . . . . . . . . . . 14 3.4 这是个巧妙的表达式: a ˆ= b ˆ= a ˆ= b 它不需要临时变量就可 以交换a 和b 的值。. . . . . . . . . . . . . . . . . . . . . . ....
  • LINGO软件学习

    2009-08-08 22:36:50
    现在我们将深入介绍如何创建集,并用数据初始属性。学完本节后,你对基于建模技术集如何引入模型会有一个基本理解。 2.1 为什么使用集 集是LINGO建模语言基础,是程序设计最强有力基本构件。借助于集...
  • 数据逻辑结构是对数据元素之间逻辑关系的描述,它可以用一个数据元素集合和定义在此集合中若干关系来表示。数据逻辑结构有两个要素:一是数据元素集合,通常记为D;二是D上关系,它反映了数据元素之间...
  • (24) 对建立良好的程序设计风格,下面描述正确的是(A) 注:P48 A. 程序应简单、清晰、可读性好 B. 符号名的命名要符合语法 C. 充分考虑程序的执行效率 D. 程序的注释可有可无 (25) 下面对对象概念描述错误的是(A) 注...
  • A) 形式分析方法 B) PAD图描述 C) 结构分析(SA)方法 D) OOA法 3. 面向对象分析方法主要是建立三类模型,即(D)。 A) 系统模型、ER模型、应用模型 B) 对象模型、动态模型、应用模型 C) E-R...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
    21、下面是关于解释程序和编译程序的论述,其中正确的一条是  A)编译程序和解释程序均能产生目标程序 B)编译程序和解释程序均不能产生目标程序  C)编译程序能产生目标程序而解释程序则不能 D)编译程序不能产生目标...
  • java面试宝典

    2013-02-28 16:04:01
    76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock异同 ? 18 78、abstract class Name { private String name; public abstract boolean isStupidName...
  • 软件工程知识点

    2012-12-02 21:34:25
    系统分析是对软件项目的高层分析,需要获取的是有关系统的框架描述,并需要使系统从它所处的环境中分离出来,为划分系统边界与确定系统构架提供依据。 (3)系统分析模型 分析模型是指采用作图方式对系统进行直观的...
  • java 面试题 总结

    2009-09-16 08:45:34
    如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion...
  • Python Cookbook

    2013-07-31 22:33:26
    7.2 使用pickle和cPickle模块序列化数据 277 7.3 在Pickling时候压缩 280 7.4 对类和实例使用cPickle模块 281 7.5 Pickling被绑定方法 284 7.6 Pickling代码对象 286 7.7 通过shelve修改对象 288 7.8 使用...
  • 实例219 序列化与反序列化 实例220 分数常见运算 实例221 整数取值范围判断 10.2 Commons Math组件简介 280 实例222 描述统计学应用 实例223 绘制简单直方图 实例224 一元线性回归计算 实例225 实数矩阵...

空空如也

空空如也

1 2 3 4
收藏数 70
精华内容 28
关键字:

关于序列化描述正确的是