做题修炼Java+SQL

本文介绍了Java中方法重载和重写的概念及其区别,并探讨了数据库的ACID特性。同时,提供了Java对象方法和Web开发中document对象相关知识点的多选题解析,以及SQL查询的实践题目,包括获取第N高薪水、分数排名和连续出现数字的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

First Day

1、在Java中,以下关于方法重载和方法重写描述正确的是?

A.方法重载和方法的重写实现的功能相同
B.方法重载出现在父子关系中,方法重写是在同一类中
C.方法重载的返回值类型必须一致,参数项必须不同
B.方法重写的返回值类型必须相同或相容。(或是其子类)

解析: D

方法重载(overload):

1.必须是同一个类

2.方法名(也可以叫函数)一样

3.参数类型不一样或参数数量不一样

**方法的重写(override)两同两小一大原则: **

1.方法名相同,参数类型相同

2.子类返回类型小于等于父类方法返回类型,

3.子类抛出异常小于等于父类方法抛出异常,

4.子类访问权限大于等于父类方法访问权限。

2、仅仅提交更新部分的数据而不是全部数据违反了数据库的什么规则?

解析:原子性

数据库事务的四大特性(简称ACID)是:

(1) 原子性(Atomicity):

事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改操作要么全部执行,要么完全不执行。这种特性称为原子性。

例如:银行取款事务分为2个步骤(1)存折减款(2)提取现金。不可能存折减款,却没有提取现金。2个步骤必须同时完成或者都不完成。

(2)一致性(Consistency):

事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。这种特性称为事务的一致性。假如数据库的状态满足所有的完整性约束,就说该数据库是一致的。

例如:完整性约束a+b=10,一个事务改变了a,那么b也应随之改变。

(3)分离性(亦称独立性Isolation):

分离性指并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。

(4)持久性(Durability):

持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证

[多选]3、 java中下面哪些是Object类的方法()

A、notify() B、notifyAll() C、sleep() D、wait()

解析:ABD

Object类中方法:

1、protected Object clone()创建并返回此对象的一个副本。

2、boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。

3、protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

4、 class getClass()返回此 Object 的运行时类。

5、int hashCode()返回该对象的哈希码值。

6、void notify()唤醒在此对象监视器上等待的单个线程。

7、void notifyAll()唤醒在此对象监视器上等待的所有线程。

8、String toString()返回该对象的字符串表示。

9、void wait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

10、void wait(long timeout)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

11、void wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

[多选]4、下列不属于document对象方法的是?()

A、onload B、querySelectorAll C、children D、ajax

解析:ACD

load是属于window的事件,onload是dom的写法,可以绑定在body标签上。

children返回子元素,childNodes返回子节点,这两个都是属性不是方法。

ajax不是对象方法是一种标准,依赖XmlHttpRequest 对象实现功能。

querySelectorAll() 方法返回文档中匹配指定 CSS 选择器的所有元素

[多选]5、JavaWEB中有一个类,当会话种邦定了属性或者删除了属性时,他会得到通知,这个类是:( )

A、HttpSessionAttributeListener

B、HttpSessionBindingListener

C、HttpSessionObjectListener

D、HttpSessionListener;

E、HttpSession

F、HttpSessionActivationListener

解析:A

HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知

HttpSessionBindingListener:当该对象从一个会话中被绑定或者解绑时通知该对象,这个对象由HttpSessionBindingEvent对象通知。这可能是servlet程序显式地从会话中解绑定属性的结果,可能是由于会话无效,也可能是由于会话超时;

HttpSessionObjectListener:没有该接口API;

HttpSessionListener:当web应用程序中的活动会话列表发生更改时通知该接口的实现类,为了接收该通知事件,必须在web应用程序的部署描述符中配置实现类;

HttpSessionActivationListener:绑定到会话的对象可以侦听容器事件,通知它们会话将被钝化,会话将被激活。需要一个在虚拟机之间迁移会话或持久会话的容器来通知所有绑定到实现该接口会话的属性。

数据库

1、第N高薪水

编写一个 SQL 查询,获取 Employee 表中第 n 高的薪水(Salary)。

+----+--------+
| Id | Salary |
+----+--------+
| 1  | 100    |
| 2  | 200    |
| 3  | 300    |
+----+--------+

例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null

+------------------------+
| getNthHighestSalary(2) |
+------------------------+
| 200                    |
+------------------------+

解析:

SELECT salary FROM employee
GROUP BY salary
ORDER BY salary DESC
LIMIT N, 1

注意:

① limit 2,1;

是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据

② limit 2 offset 1;

是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条

1.数据库数据计算是从0开始的

2.offset X是跳过X个数据,limit Y是选取Y个数据

3.limit X,Y 中X表示跳过X个数据,读取Y个数据

2、分数排名

编写一个 SQL 查询来实现分数排名。

如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

+----+-------+
| Id | Score |
+----+-------+
| 1  | 3.50  |
| 2  | 3.65  |
| 3  | 4.00  |
| 4  | 3.85  |
| 5  | 4.00  |
| 6  | 3.65  |
+----+-------+

例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

+-------+------+
| Score | Rank |
+-------+------+
| 4.00  | 1    |
| 4.00  | 1    |
| 3.85  | 2    |
| 3.65  | 3    |
| 3.65  | 3    |
| 3.50  | 4    |
+-------+------+

解析:

select a.Score as Score,
(select count(distinct b.Score) from Scores b where b.Score >= a.Score) as Rank
from Scores a
order by a.Score DESC
 
1、首先提取出大于等于Score的所有分数集合H,将H去重后的元素个数就是Score的排名
2、第二部分的Rank是对应第一部分的分数来的,所以这里的Score就是上面的a.Score

3、连续出现的数字

编写一个 SQL 查询,查找所有至少连续出现三次的数字。

+----+-----+
| Id | Num |
+----+-----+
| 1  |  1  |
| 2  |  1  |
| 3  |  1  |
| 4  |  2  |
| 5  |  1  |
| 6  |  2  |
| 7  |  2  |
+----+-----+

例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

+-----------------+
| ConsecutiveNums |
+-----------------+
| 1               |
+-----------------+

解析:

SELECT DISTINCT
    l1.Num AS ConsecutiveNums
FROM
    Logs l1,
    Logs l2,
    Logs l3
WHERE
    l1.Id = l2.Id - 1
    AND l2.Id = l3.Id - 1
    AND l1.Num = l2.Num
    AND l2.Num = l3.Num

在这里插入图片描述

select distinct a.成绩 as 最终答案
from score as a,
   score as b,
   score as c;
 where a.学号 = b.学号 - 1
   and b.学号 = c.学号 - 1
   and a.成绩 = b.成绩
   and b.成绩 = c.成绩;

备注: 题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/consecutive-numbers

来源:牛客网
链接:https://www.nowcoder.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值