3.31恒生电子笔试+代码随想录二刷——长度最小子数组系列

题型:

10道选择题+3道SQL编程题+2道数据库(各5小题),貌似蛮多都是原题来着

不定项选择题:涵盖SQL,数据库,数据仓库,ETL过程

比如:、关系表的主键、外键、

1.

修改表结构的sql语句 A

A alter
B create
C desc
D rename
2.

选择正确选项:AD

A 在一个关系表中,主键可唯一标识一行记录
B 一个事务中的某条sql命令提交时,其它sql命令可以不提交
C 一个关系表中的外键必定是另一表中的主键
D 回滚可以在事务失败时,回到操作事务前的数据状态
3.

给出两张表Table1,Table2,结构分别如下:请问哪条语句会将Table2的全部列插入道Table1 : D

Table1
Col1 INT
Col2 CHAR(30)
Table2
Col1 INT
Col2 CHAR (30)
INSERTINTO table1 (table2.col1,table2.col2)
INSERTINTO table1 SELECT COl1, COl2 FROM table2
INSERTINTO table1 VALUES(SELECT COl1,COl2 FROM table2)
INSERTINTO table1 (col1, Col2) VALUES (SELECT Cl1, Cl2 FROM table2)
4.

数据集市和数据仓库的区别描述正确的是() ABC

A 数据仓库主要基于整个企业的数据模型建立;数据集市则一般按照某一特定部门或场景来建立;
B.数据仓库的数据有效周期为中长期甚至永久,但数据集市的数据有效期一般则较短
C.数据仓库中存储整个企业的数据,数据详细程度较高但数据集市的数据详细程度则要低一些,包含概要
D.数据集市的数据组织一般采用星网模型
5.

以下描述ETL过程的主要步骤中,错误的是: B

1)决定数仓中需要的所有的目标数据
2)决定所有的数据源,包括内部和外部的数据源
3)准备从源数据到目标数据的数据映射关系
4)建立全面的数据抽取规则
5)决定数据转换和清洗规则:
6)为综合表制定计划
7)组织数据缓冲区域和检测工具
8)为所有的数据装载编写规程
9)选择ETL工具
10)制定ETL计划
11)维度表的抽取、转换和装载
12)事实表的抽取、转换和装载
A 1
B 6
C 9
D 10
E 9、10、11、12
6.

以下关于数据库事务的说法,哪些是正确的() CD

A 事务特性包含原了性,一致性,隔离性,同步性
B 隔离级别Repeatable read (可重复读)会导致脏读
C 隔离级别Serializable隔离级别是最高的,控制最严格
D 可以通过SQL语来动态调整事务隔离级别
7.

在关系数据库系统中,为了简化用户的查询操作,而又不增加数据的存储空间,常用的方法是创建 C

A 表(table)
B 游标(cursor)
C 视图(view)
D 索引(index)
8.

如图所示,两个关系R1和R2,它们进行() 运算后得到关系R3 D

A 中 
B 并
C 笛卡尔积
D 连接
9.

数据仓库中常见的模型有() ABC

A 雪花模型
B 星型建模
C 第三范式
D 星网模型
10.

典型的元数据包括如下哪些? C

1)数据仓库表的结构
2)数据仓库表的属性
3)数据仓库的源数据
4)数据仓库的数据源
5)源数据到数据仓库的映射
6)数据模型的规格说明
7)抽取日志
8)访问数据的公共例行程序
A 12356
B 123456
C 1235678
D 12345678

SQL编程题(支持若编译不过,可写解题思路,酌情给分)

总体难度不大,需要自己建表,没给数据,一开始以为可以直接查询语句即可,发现怎么都过不了,后来建表之后,也是有一些细节问题,比如建表,一些字符串的字段,加上单引号,却怎么都过不了,耗费很多时间,后来尝试不加,反而过了…平时没怎么练习过建表,更新这些,一下挺陌生,卡住

11.

表D

字段名称字段类型中文描述说明
companyvarchar(10)公司名称主键
agencyidvarchar(10)员工工号主键
namevarchar(20)员工姓名
dtmonthint年月主键
dutyvarchar(20)员工职级

表E结构如下:

字段名称字段类型中文描述说明
provincevarchar(20)省份
companyvarchar(10)公司名称主键
adeareavarchar(8)办事处名称主键

表D与表E通过company关联,要求编写SQL语句查询每个员工工号所属的省份。

create D(
	company varchar(10) not null comment'公司名称',
	agencyid varchar(10) not null comment'员工工号',
	name varchar(20) not null comment'员工姓名',
	dtmonth int not null comment'年月',
	duty varchar(20) not null comment'员工职级'
	primary key('company','agencyid','dtmonth')	
)
create E(
	province varchar(20) not null comment'省份',
	company varchar(10) not null comment'公司名称',
	name varchar(8) not null comment'办事处名称',
	primary key('company','adearea')	
)
select
	province
from D
join E
on D.company=E.company
12.

有一张员工工资表(EMP),表有两列: 员工编号(D),工资(SALARY),请给出SQL删除ID重复的记录,只保留第一条,不需要考虑表中存在完全相同记录的情况。

select 
	ID,SALARY 
from 
(
	select 
	ID,
	SALARY ,
	row_number() over(partition by ID order by ID) row_num 
	from EMP) t1 
where row_num = 1
13.

已知一张表S的结构如左下表,怎样通过select语句把它变成右下表的结构,即将竖表转换为横表

姓名科目成绩
张三语文20
张三数学30
张三英语50
李四语文70
李四数学60
李四英语90
姓名语文数学英语
张三203050
李四706090
create S(
	name varchar(3) not null comment'姓名',
	subject varchar(2) not null comment'科目',
	grade int not null comment'成绩'
)
insert into S(name,subject,grade)
value('张三','语文','20'),('张三','数学','30'),('张三','英语','50'),('李四','语文','70'),('李四','数学','60'),('李四','英语','90')
select 
	name as '姓名',
	max(case subject when '语文' then grade else 0 end) '语文',
   max(case subject when '数学' then grade else 0 end) '数学',
   max(case subject when '英语' then grade else 0 end) '英语'
from S
group by name;

数据库

给若干个表与字段,没有数据。每大题5小问,查询、增加字段、加索引

14.

有一个理财数据库,包括客户Client、资金账户Fund、经理人Manager、投资流水Investment、理财产品Product,表结构如下所示:

Client表:
客户名Cno 	姓名Cname  性别Csex  所在城市Caddr 资金账号Fno
Fund表
资金账号Fno  余额Fbalance
Manager表
经理人工号Mno   姓名Mname  性别Msex  权限Mauth
Investment表
客户号Cno  经理人工号Mno  产品代码Pno  投资金额Iaccount
Produce表
产品代码Pno  产品名称Pname 投资期限Pperiod
说明: 除了Fund表的余额(Fbalance)字段和Investment表的投资金额 (laccount) 字段为number,其他均视为字符串。请回答以下问题:
1、查询所有投资过600571这个产品且单笔投资金额不少于10000的客户的客户号和姓名,且按姓名降序排列
2.给理财产品表Product新增字段产品净值 (Pvalue) ,类型为字符串,长度为32位,不允许为空
3、在投资流水表Investment中,新建客户号、经理人工号和产品代码的唯一索引
4.为表彰业绩优秀的经理人,请查询出投资600571这个产品投资金额在平均值以上的客户的经理人的工号和姓名4现在投资600571这个产品的客户要从自己的资金账户统一追加投资5000元,请操作相关的表

CSDN原题,见(26条消息) 前端 – 数据库题目_select部分_第12关:客户理财、保险与基金投资总额。_Evan_ZGYF丶的博客-CSDN博客

15.

设有一个投资管理系统,包括用户User、产品Product、交易明细TradeDetail下表所示:

Users表

用户ID姓名性别
UserIDUserNameSsex

Product表

产品编号产品名称产品类型
PrdNoPrdNamePrdType

PrdType:S——偏股型,C——货币基金

TradeDetail表

交易日期产品编号用户ID交易类型交易金额交易状态T
TradeDatePrdNoUserIDTradeTypeAmountTradeStatus

TradeType:B一申购,S 赎回
TradeStatus: T-交易成功,F一交易失败
TradeDate: 格式为YYYYMMDD
请回答以下问题:
1、请给用户表的用户ID增加一个唯一索引。
2、请按日统计2016年10月份各产品的交易金额(含失败),并按交易日期进行降序排序。
3、将2016年10月31日的所有交易金额大于1000.00的交易状态更新为交易成功。
4、请列出所有购买过货币基金产品的客户姓名
5、请列出2016年10月份申购交易前10的产品

1、create unique index user_ID ON Users(UserID);
2、可使用窗口函数或者group by
select
	sum(Amount)over(partition by TradeDate order by TradeDate desc)
from TradeDetail
where date_format(TradeDate,'YYYYMM')='201610'
3.update TradeDetail
set TradeStatus=T…
where TradeDate = '20161031'
4、
select 
	U.UserName
from
(
	select
		UserID
	from TradeDetail T
	join Product P
	on T.PrdNo=P.PrdNo
	where PrdType='C'
)t1
join Users U 
on t1.UserlD=U.UserID
5.个人理解是筛选出2016年10月份,每个产品的交易金额,前10。使用窗口函数row_number
select
	PrdNo
from
(
select
	row_number(sum(Amount)) row_num
from
where date_format(TradeDate,'YYYYMM')='201610'
group by PrdNo
order by sum(Amount)
)t1
where row_num<=10

补充窗口函数rank、dense_rank、row_number

rank():跳跃排序;
dense_rank():连续排序;
row_number():没有重复值的排序(记录相等也是不重复的),可以进行分页使用。

rank()函数,是跳跃排序,相同数据排名相同,比如并列第1,则两行数据(这里为rank列)都标为1,下一位将是第3名.中间的2被直接跳过了。排名存在重复值。e.g
成绩排名
951
951
903
854
dense_rank(),这个是连续排序的,比如两条并列第1,则两行数据(这里为rank列)都标为1,下一个排名将是第2名。
成绩排名
951
951
902
853
row_numer(),这个排序函数的特点是相同数据,先查出的排名在前,没有重复值。
成绩排名
951
952
903
854

《代码随想录》

904.水果成篮

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类

你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:

  • 你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
  • 你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
  • 一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。

给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

示例 1:

输入:fruits = [1,2,1]
输出:3
解释:可以采摘全部 3 棵树。

示例 2:

输入:fruits = [0,1,2,2]
输出:3
解释:可以采摘 [1,2,2] 这三棵树。
如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。

思路

​ 本题用滑动窗口+哈希表存储这个窗口内的数及出现的次数
​ left 和 right分别表示满足要求的窗口左右边界
​ right每次移动一个位置,并将fruit[right]加入哈希表,如果哈希表超过两个键值对,就需要移动left

题解

public class TotalFruit {
    public int totalFruit(int[] fruits) {
        //904.水果成篮
        //本题用滑动窗口+哈希表存储这个窗口内的数及出现的次数
        //left 和 right分别表示满足要求的窗口左右边界
        //right每次移动一个位置,并将fruit[right]加入哈希表,如果哈希表超过两个键值对,就需要移动left
        int n = fruits.length;
        HashMap<Integer, Integer> cnt = new HashMap<>();

        int left = 0;
        int ans = 0;
        for (int right = 0; right < n; right++) {
            //将right对应的值作为key插入,value记录它出现的次数 + 1,如果未出现过从初始值0开始计起
            cnt.put(fruits[right],cnt.getOrDefault(fruits[right],0) + 1);
            while (cnt.size() > 2){//当超过2种种类,则得让窗口滑动了
                cnt.put(fruits[left],cnt.get(fruits[left]) - 1);//左边界对应的种类次数 - 1
                if(cnt.get(fruits[left]) == 0){
                    cnt.remove(fruits[left]);//如果左边界对应的种类次数为0了,则将其去除
                }
                left++;
            }
            ans = Math.max(ans,right - left + 1);//算出每个阶段的最大长度,即为最多水果数
        }
        return ans;

    }
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以通过以下步骤安装libsvm 3.31: 1. 首先,您可以从libsvm***libsvm的扩展包。您可以选择适合您的操作系统的版本,并下载zip文件。 2. 下载完成后,解压缩zip文件。您可以将解压缩后的文件夹放在您选择的位置。 3. 在解压缩后的文件夹中,您可以找到libsvm的主要文件和文件夹。其中包括libsvm.jar和wlsvm.jar等必需的文件。您可以将这些文件复制到您的项目或工程目录中,以便在使用libsvm时可以引用它们。 4. 此外,您还可以在解压缩后的文件夹中找到一些预编译的二进制文件,例如libsvmread.mexw64、libsvmwrite.mexw64、svmtrain.mexw64和svmpredict.mexw64等。这些文件可以用于MATLAB等编程语言的集成。如果您打算在MATLAB中使用libsvm,您可以将这些文件复制到MATLAB的工作目录中,以便在MATLAB中调用它们。 5. 安装完成后,您可以根据libsvm的使用说明进行配置和调用。您可以在libsvm的官方主页上找到详细的使用文档和示例代码,以帮助您开始使用libsvm进行机器学习和数据分类任务。 请注意,以上是一般的安装步骤,具体的安装步骤可能会因操作系统和使用环境的不同而有所差异。建议您在安装之前参考libsvm的官方文档和使用说明,以确保正确安装和使用libsvm。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [weka 集成LibSVMm所需的jar(wlsvm.zip),另附libsvm.zip和liblinear.zip](https://download.csdn.net/download/qq_42988711/87906163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SVM之Libsvm工具包的安装教程](https://blog.csdn.net/qq_43493562/article/details/110918276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [[Matlab]在Matlab中安装与使用LibSVM工具箱(小白指南)](https://blog.csdn.net/zytjasper/article/details/103168354)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值