2025年计算机与大数据基础习题参考答案_第1页
2025年计算机与大数据基础习题参考答案_第2页
2025年计算机与大数据基础习题参考答案_第3页
2025年计算机与大数据基础习题参考答案_第4页
2025年计算机与大数据基础习题参考答案_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年计算机与大数据基础习题参考答案一、计算机基础部分1.已知二进制数110101.101,将其转换为十进制数。解答:二进制转十进制需按权展开求和。整数部分从右往左,权值为2⁰、2¹、2²…;小数部分从左往右,权值为2⁻¹、2⁻²、2⁻³…。整数部分:1×2⁵+1×2⁴+0×2³+1×2²+0×2¹+1×2⁰=32+16+0+4+0+1=53小数部分:1×2⁻¹+0×2⁻²+1×2⁻³=0.5+0+0.125=0.625因此,110101.101B=53.625D。2.计算十进制数-47的8位二进制补码表示。解答:补码计算步骤为:先求绝对值的二进制原码,取反(符号位不变)后加1。-47的原码:最高位为符号位(1表示负),剩余7位为47的二进制。47的二进制是101111,补足7位为0101111,因此原码为10101111。反码:符号位不变,其余位取反,得到11010000。补码:反码加1,11010000+1=11010001。因此,-47的8位补码是11010001。3.设A=10110100,B=01101010(均为8位二进制数),计算A∧B、A∨B、A⊕B。解答:按位逻辑运算规则:与(∧):对应位均为1时结果为1,否则为0。A∧B:1011010001101010-00100000或(∨):对应位有1时结果为1,否则为0。A∨B:1011010001101010-11111110异或(⊕):对应位不同时结果为1,否则为0。A⊕B:1011010001101010-11011110二、数据结构部分4.已知单链表L的头节点为head,其存储结构为(数据域data,指针域next)。请写出在值为x的节点之前插入值为y的节点的算法步骤(假设链表中x唯一)。解答:(1)若链表为空(head.next==null),则直接插入y作为头节点,结束。(2)否则,定义两个指针:pre指向当前节点的前驱(初始为head),curr指向当前节点(初始为head.next)。(3)遍历链表,当curr不为空且curr.data≠x时,pre=curr,curr=curr.next。(4)若遍历结束后curr为null(未找到x),则插入失败,返回错误。(5)否则,创建新节点newNode,newNode.data=y。(6)调整指针:newNode.next=curr;pre.next=newNode。(7)算法结束。5.一个栈的输入序列为1,2,3,4,5,能否得到输出序列4,3,5,1,2?请说明理由。解答:不能。栈的操作遵循后进先出(LIFO)原则。分析输出序列4,3,5,1,2:输出4时,栈中需已压入1,2,3,4,此时弹出4,栈内剩余1,2,3。输出3时,弹出栈顶3,栈内剩余1,2。输出5时,需压入5后弹出,此时栈内剩余1,2。输出1时,栈顶应为2(因1在栈底),无法直接弹出1,因此该序列无法通过栈操作得到。6.已知二叉树的中序遍历序列为D,B,A,E,C,F,后序遍历序列为D,B,E,F,C,A。请画出该二叉树的结构。解答:后序遍历的最后一个节点是根节点(A)。中序遍历中,根A将序列分为左子树(D,B)和右子树(E,C,F)。左子树的中序序列D,B,后序序列D,B(后序最后一个是B),故左子树根为B,其左子树为D(中序D在B左)。右子树的中序序列E,C,F,后序序列E,F,C(后序最后一个是C),故右子树根为C。中序中C的左是E,右是F;后序中E,F,C,验证F是C的右子树,E是C的左子树。最终二叉树结构:A/\BC//\DEF三、数据库基础部分7.某电商数据库包含以下表结构:用户表(user_id,username,reg_time)订单表(order_id,user_id,order_time,total_amount)商品表(product_id,product_name,price)订单明细表(order_id,product_id,quantity)请用SQL语句查询2024年注册的用户中,消费金额最高的前10名用户(消费金额=订单总金额之和)。解答:步骤分析:需关联用户表、订单表,筛选2024年注册的用户,按用户分组计算总消费金额,降序取前10。SQL语句:SELECTu.user_id,u.username,SUM(o.total_amount)AStotal_consumptionFROMuseruJOINorderoONu.user_id=o.user_idWHEREYEAR(u.reg_time)=2024GROUPBYu.user_id,u.usernameORDERBYtotal_consumptionDESCLIMIT10;8.已知学生表(sno,sname,sdept),课程表(cno,cname,credit),选课表(sno,cno,grade)。请用SQL语句查询所有选了“数据结构”课程但成绩低于60分的学生姓名和所在系。解答:步骤分析:需先通过课程表找到“数据结构”的cno,再关联选课表筛选成绩<60的sno,最后关联学生表获取姓名和系。SQL语句:SELECTs.sname,s.sdeptFROMstudentsJOINscONs.sno=sc.snoJOINcoursecONo=oWHEREame='数据结构'ANDsc.grade<60;四、大数据技术基础部分9.简述HadoopMapReduce的核心思想,并说明WordCount任务中Mapper和Reducer的具体实现逻辑。解答:MapReduce的核心思想是“分而治之”,将大规模数据处理任务分解为Map(映射)和Reduce(归约)两个阶段。Map阶段将输入数据拆分为键值对(Key-Value),并对每个键值对执行用户定义的映射函数;Reduce阶段将Map输出的键值对按键分组,对每组执行归约函数,最终输出结果。WordCount任务(统计文本中各单词出现次数)的具体实现:Mapper阶段:输入为文本行(如“Helloworld”),Mapper将每行拆分为单词(“Hello”“world”),为每个单词提供键值对(单词,1),输出如(“Hello”,1)、(“world”,1)。Shuffle阶段:Map输出的键值对按键哈希分发到不同Reducer,相同键的键值对会被合并为列表(如(“Hello”,[1,1,1]))。Reducer阶段:对每个键的列表求和,输出(“Hello”,3)、(“world”,2)等结果。10.说明SparkRDD的持久化(Persistence)机制,并举例说明何时需要使用持久化。解答:RDD持久化通过将RDD数据缓存到内存或磁盘,避免重复计算,提升迭代或多次查询的效率。Spark提供persist()和cache()方法(cache()是persist(StorageLevel.MEMORY_ONLY)的简写),支持多种存储级别(如内存、磁盘、堆外内存等)。应用场景举例:在机器学习迭代训练中,同一RDD会被多次用于计算梯度和更新模型参数。若每次迭代都重新计算RDD(如从HDFS读取并转换),会导致大量I/O和计算开销。此时对RDD进行持久化(如缓存到内存),可显著减少重复计算,提升训练速度。11.某电商用户行为数据集包含字段:user_id(用户ID)、event_time(事件时间)、event_type(事件类型:点击、收藏、加购、购买)、product_id(商品ID)。请设计一个数据清洗方案,处理以下问题:(1)event_time存在“2024-02-3012:00:00”等非法日期;(2)user_id为NULL的记录;(3)同一用户对同一商品在10秒内产生多条重复的点击事件。解答:(1)非法日期处理:使用正则表达式或日期解析函数(如Spark的to_date())校验event_time格式。对无法解析的记录,标记为异常并单独存储(如写入“bad_records”表),或根据业务需求填充默认值(如事件时间的最大合法值)。(2)user_id为NULL处理:用户ID是核心标识,缺失时无法关联用户行为。若NULL记录占比极小(如<0.1%),直接删除;若占比较高,需检查数据采集源头(如埋点漏传),临时处理可通过关联用户登录日志补全user_id(如根据设备ID或IP关联最近登录的用户)。(3)重复点击事件去重:按user_id、product_id分组,按event_time排序,计算相邻事件的时间差。若时间差≤10秒且event_type为“点击”,保留第一条记录,删除后续重复记录。可使用窗口函数(如SparkSQL的ROW_NUMBER())实现:SELECTFROM(SELECT,ROW_NUMBER()OVER(PARTITIONBYuser_id,product_id,event_typeORDERBYevent_time)ASrnFROMuser_behaviorWHEREevent_type='点击')tWHERErn=1OR(event_timeLAG(event_time)OVER(PARTITIONBYuser_id,product_id,event_typeORDERBYevent_time))>10;五、综合应用题12.设计一个基于Hadoop生态的日志分析系统,处理某网站的访问日志(格式:时间戳、IP、URL、状态码、用户代理),要求实现以下功能:(1)统计每日各URL的访问次数;(2)识别恶意IP(当日访问同一URL超过100次的IP);(3)分析用户代理中不同浏览器的市场占比。解答:系统架构设计如下:(1)数据采集:使用Flume实时收集服务器日志,写入HDFS存储(按日期分区,如/path/date=2024-01-01)。(2)数据清洗:通过Hive或Spark处理原始日志,过滤无效记录(如状态码≥400的错误请求),提取时间、IP、URL、浏览器(从用户代理中解析)等字段,存储为Parquet格式(列式存储,提升查询效率)。(3)功能实现:每日URL访问次数统计:使用HiveQL按日期和URL分组,COUNT()计算次数;或用MapReduce,Mapper输出(日期+URL,1),Reducer求和。恶意IP识别:按日期、IP、URL分组,COUNT()计算访问次数,筛选次数>100的记录,输出恶意IP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论