当前位置: 首页 > 面试经验 >

商米科技数据开发笔试

优质
小牛编辑
162浏览
2023-03-28

商米科技数据开发笔试

题型:15道选择题,其中有单选和多选;3道编程题,核心代码模式,为了方便调试,本文提供ACM

笔试太难了?可以私信我

有些AC有些通过率还行,助攻已经进面了

在TCP/IP协议的传输层将数据传送给用户应用进程所使用的地址形式

A.端口号

B.socket地址

C.IP地址

D.MAC地址

 

多选

高并发测试中,数据库数据问题往往出现很多,下面关于隔离级别描述正确的是

A不可重复读:同个事务前后多次读取,不能读到相同的数据内容,中间另一个事务也操作了该同一数据

B幻读:当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,发现两次不一样,产生幻读

c事务的隔离级别越高,事务越安全,并发能力越高。

D.脏读:事务中的修改即使没有提交,其他事务也能看见,事务可以读到未提交的数据称为脏读

 

作为一种级存工赎:在工作中 Redis得到了大量的应用,下列关于Redis的说法错误的是?

A.使用 Redis查询速度快,因为 Redis 数据存在于内存

B.支持事务,操作都是原子性

C.支持丰富数据类型,例如 string,list, set, Tuple, hash等

D. Redis可以满足互联网高并发需要高速处理数据的场合, 比如抢红包、商品秒杀等场景

 

Redis支持事务吗?

A支持

B.不支持

 

多选

数据倾斜是数据处理中中一个很常见的问题,对于数据倾斜的处理方法,正确的是?

A提高作业的并行度

B对数据中的脏数据,统一留到最后再进行处理

C根据维度。对源数据进行聚合

 

下列关于MySQL的读锁和写锁正确的是?

A使用读锁锁住表的单行时,其他会话可以对这一行数据执行更新操作,但是无法删除

B当使用读锁锁住一行数据且隔离级别为Read
Uncommitted时,其他会话可能会脏读此行

C使用写锁锁住单行数据时,此行可以被其他会话读取

 

关于Zookeeper中的四种类型的数据节点Znodp,下列描述正确的是?

A EPHEMERAL 临时节点,他的生命周期会与客户端会话绑定,如果这个客户端会话失效,由这个客户端创建的临时节点不会受到影响

B.PERSISTENT 持久节点,除非手动删除,否则节点一直存在于Zookeeper

C.EPHEMERAL_SEQUENTIAL 临时顺序节点,与持久节点相同,增加了顺序属性

D. PERSISTENT SEQUENTIAL 持久顺序节点,与持久节点相同,就是节点名字后面会追加一个由父节点维护的自增整形数字

Kfka可以每秒处理几十万条信息。而且延迟最低只有几亳秒,下列关于Kafka处理速度快的说法错误的是?

A使用Zero copy 技术大大提高了应用程序的性能少不必要的内核级冲区跟用户缓冲区间的拷贝

B.利用Page cache+mmap进行储存管理

C.Kafka 采用批量压缩设计,支持多种压缩方式,允许使用递归的消息集合。

D. Kafka写入数据的时候优先写入级存,会降低拉取消息的速度

 

在MapReduce中,在数据的Shuffle 阶段中哪个流程是最后进行的?

A分区

B溢写

C合并

D排序

 

压纳可以哮低磁盘的IO。关于Hive中常见的压缩格式,下列描述错误的是?

A SequenceFile,存储方式为列式存储,具有使用方便、可分割、可压缩的特点

支持三种压缩选择:NONE,RECORD,BLOCK,一般建议使用 RECORD 压缩

B. TextFile,存储方式为行存储,数据不做压缩,磁盘开销大,数据解析开销大

C.RCFile数据储存按行分块,每块按列存储,能够利用列维度的数据压缩。并且能跳过不必要的列读取

D. ORCFile数据按列储存,压缩快,压缩效率比 RCFile高.

 

多选

RDD是一种弹性分布式数据集,同时也是 Spark的一种编程模型。RDD的弹性主要表现在哪几点?

A.checkpoint和
persist,数据计算之后持久化缓存

B.不需要依赖其他 RDD,可以单独进行计算

C.可以自动的对内存和磁盘管理进行储存转换

D.数据调度弹单性,DAG TASK 调度和资源无关;

 

下面描述TCP握手过程正确的是?

A.第二次握手服务端收到连接请求,如果同意连接,就会发送一个应答。

B.第三次握手客户端收到同意连接的应答后,给服务端发送一个确认报文。

C.第一次握手客户端向服务端发送连接请求。

D.以上都是正确的

 

多选

MySQL数据库是互联网公司流行的数据库软件。下面说法正确的是

A.select * from product limit 1,10;是分页查询

B.drop table product;是删除product 数据库

C. create database user_db是创建数据库

D.show databases;是列出当下有多少数据库

 

在数据库系统中,产生数据不一致的根本原因是()

A.数据冗余

B.未对数据进行完整性控制

C.数据存储量太大

D.没有严格保护数据

 

多选

Spark拥有多种部署模式,下列对于Spark中的四种部采模式,描述正确的是?

A.本地模式,不一定要跑在Hadoop集群,可在本地运行,一般是为了方便调试

B.Spark on yarn模式,分布式部署集群,资源和任务监控交给yarn管理,目前仅支持粗粒度资源分配方式

C.standalone模式,分布式部署集群,自带完整的服务,资源管理和任务监控是Spark自己监控

D.Spark On Mesos模式,Spark运行在 Mesos上,比运行在yarn上更加灵活

 

1-A; 2-ABD; 3-D;4-A; 5-AC; 6-B; 7-ABCD;
8-D; 9-D; 10-B; 11-ABC; 12-A; 13-AD; 14-B; 15-ABCD

 

编程题:

题目1:不能AC,够时间就自动交卷了,还来不及修改,欢迎友友们提供解法

HTML表格允许 Web开发人员将数据排列到单元格的行和列中。

它们是使用<table>标记创建的。其内容由<t>标记表示的一行或多行组成。

此外,每一行的内容包括一个或多个由<tr>标签表示的单元格,<td>标签内的内容就是网站访问者在表格中看到的内容。

您将茨得一个矩形 HTML 表格,用坐标(行、列均从0开始)提取单元格的内容。若不存在。返回“No such cell.

输入输出具体参数

输入参数:构建的表格内容,要提取的单元格的坐标。

输出参数:要提取的单元格的内容。

示例1

输入:

table =
"<table><tr><td>show</td><td>me</td></tr><tr><td>bug</td><td>!</td></tr></table>"

row =0,column=1;

输出: "me"

示例2

输入:

table =
"<table><tr><td>show</td><td>me</td></tr><tr><td>bug</td><td>!</td></tr></table>"

row=1,column = 0;

输出:“bug"

示例3

输入:

table =
"<table><tr><td>show</td><td>me</td></tr><tr><td>bug</td><td>!</td></tr></table>"

row=4,column = 0;

输出:“No such cell"


#include <iostream>
#include <string>
using namespace std;

int main() {
string table;
int row, column;
cin >> table >> row >> column;
int start_pos = table.find("<table>");
int end_pos = table.find("</table>");
if (start_pos == string::npos || end_pos == string::npos) {
cout << "No such cell" << endl;
return 0;
}
string table_content = table.substr(start_pos + 7, end_pos - start_pos - 7);
int tr_start_pos = 0;
int tr_end_pos = 0;
for (int i = 0; i <= row; i++) {
tr_start_pos = table_content.find("<tr>", tr_end_pos);
if (tr_start_pos == string::npos) {
cout << "No such cell" << endl;
return 0;
}
tr_end_pos = table_content.find("</tr>", tr_start_pos);
}
int td_start_pos = tr_start_pos;
int td_end_pos = 0;
for (int i = 0; i <= column; i++) {
td_start_pos = table_content.find("<td>", td_end_pos);
if (td_start_pos == string::npos || td_start_pos >= tr_end_pos) {
cout << "No such cell" << endl;
return 0;
}
td_end_pos = table_content.find("</td>", td_start_pos);
}
if (td_end_pos == string::npos || td_end_pos >= tr_end_pos) {
cout << "No such cell" << endl;
return 0;
}
string content = table_content.substr(td_start_pos + 4, td_end_pos - td_start_pos - 4);
cout << content << endl;
return 0;
}

 题目2:AC

请写一个程序,不用if,条件表达式,switch
等判断语句,线出两个整数a,b中的较大者。(a≠b)

若a>b,输出a large

若a<b,输出b large

输入描述

输入第一个数是a,第二个数是b。

输出描述

输出字符串。"a large"或"b large"

示例1

输入:

1 2

输出:

"b large"

示例2

输入:

2 1

输出:

"a large"


#include <iostream>
using namespace std;

int main() {
int a, b;
cin >> a >> b;
string result = (a > b) ? "a large" : "b large";
cout << result << endl;
return 0;
}

题目3:

给定一个日期,返回该日期对应该年份的第几天?

确入的日期,只需考虑"yyyy-m-d"的格式,如2021-2-1

输入描述

输入字符串"yyyy-m-d",yyyy表示年,m表示月,d表示日

输出描述

输出整型数字

示例1

输入:

date="2020-7-1"

输出:

183

解释:前5个月的天数加上7月的第一天:31+29+31+30+31+30+1=183

示例2

输入:

date="2021-2-4"

输出:

35

解释:

1个月的天数加上2月的第4天: 31+4=35


#include <iostream>
#include <string>
using namespace std;

int Solution(String data)
{
int year = stoi(date.substr(0, 4));
int month = stoi(date.substr(5, 2));
int day = stoi(date.substr(8, 2));
int days = 0;
for (int i = 1; i < month; i++) {
if (i == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days += 29;
} else {
days += 28;
}
} else if (i == 4 || i == 6 || i == 9 || i == 11) {
days += 30;
} else {
days += 31;
}
}
days += day;
return days;
}

int main() {
string date;
cin >> date;
int year = stoi(date.substr(0, 4));
int month = stoi(date.substr(5, 2));
int day = stoi(date.substr(8));

int daysInMonth[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 存储每个月的天数,2月份根据是否闰年而定
int days = 0;
for (int i = 1; i < month; i++) {
days += daysInMonth[i];
if (i == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days++;
}
}
}
days += day;
cout << days << endl;
return 0;
}


#软件开发2023笔面经##商米##春招##数据开发工程师#
 类似资料: