Java错题集(四)

目录

结构型模式中最体现扩展性的模式是()

运行代码,输出的结果是()

list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()

mysql数据库,game_order表表结构如下,下面哪些sql能使用到索引()?

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

try块后必须有catch块。()

设m和都是int类型,那么以下for循环语句的执行情况是( )


 

结构型模式中最体现扩展性的模式是()

正确答案: A   你的答案: A (正确)

装饰模式
合成模式
桥接模式
适配器

来源:https://www.nowcoder.com/questionTerminal/8118573affd743df95045267464089ab

学习博客:https://blog.csdn.net/benbenxiongyuan/article/details/24021039

结构型模式是描述如何将类对象结合在一起,形成一个更大的结构,结构模式描述两种不同的东西:类与类的实例。故可以分为类结构模式和对象结构模式。

在GoF设计模式中,结构型模式有:

1.适配器模式 Adapter

  适配器模式是将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

  两个成熟的类需要通信,但是接口不同,由于开闭原则,我们不能去修改这两个类的接口,所以就需要一个适配器来完成衔接过程。

2.桥接模式 Bridge

  桥接模式将抽象部分与它的实现部分分离,是它们都可以独立地变化。它很好的支持了开闭原则和组合锯和复用原则。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这些多角度分离出来让他们独立变化,减少他们之间的耦合。

3.组合模式 Composite

  组合模式将对象组合成树形结构以表示部分-整体的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。

4.装饰模式 Decorator

装饰模式动态地给一个对象添加一些额外的职责,就增加功能来说,它比生成子类更灵活。也可以这样说,装饰模式把复杂类中的核心职责和装饰功能区分开了,这样既简化了复杂类,有去除了相关类中重复的装饰逻辑。 装饰模式没有通过继承原有类来扩展功能,但却达到了一样的目的,而且比继承更加灵活,所以可以说装饰模式是继承关系的一种替代方案。

5.外观模式 Facade

 外观模式为子系统中的一组接口提供了同意的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

外观模式中,客户对各个具体的子系统是不了解的,所以对这些子系统进行了封装,对外只提供了用户所明白的单一而简单的接口,用户直接使用这个接口就可以完成操作,而不用去理睬具体的过程,而且子系统的变化不会影响到用户,这样就做到了信息隐蔽。

6.享元模式 Flyweight

 享元模式为运用共享技术有效的支持大量细粒度的对象。因为它可以通过共享大幅度地减少单个实例的数目,避免了大量非常相似类的开销。.

      享元模式是一个类别的多个对象共享这个类别的一个对象,而不是各自再实例化各自的对象。这样就达到了节省内存的目的。

7.代理模式 Proxy   

为其他对象提供一种代理对象,并由代理对象控制对原对象的引用,以间接控制对原对象的访问。

 

运行代码,输出的结果是()

public class P {
public static int abc = 123;
static{
System.out.println("P is init");
}
}
public class S extends P {
static{
System.out.println("S is init");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(S.abc);
}
}

正确答案: A   你的答案: C (错误)

P is init<br />123
S is init<br />P is init<br />123
P is init<br />S is init<br />123
S is init<br />123

来源:https://www.nowcoder.com/questionTerminal/df71c590125948c8a1d6f8775b41ece1

学习博客:https://www.jianshu.com/p/3afa5d24bf71

属于被动引用不会出发子类初始化 

 1.子类引用父类的静态字段,只会触发子类的加载、父类的初始化,不会导致子类初始化 

 2.通过数组定义来引用类,不会触发此类的初始化 

 3.常量在编译阶段会进行常量优化,将常量存入调用类的常量池中, 本质上并没有直接引用到定义常量的类,因此不会触发定义常量的类的初始化。 

 

以下哪个式子有可能在某个进制下成立()?

正确答案: A   你的答案: A (正确)

13*14=204
12*34=568
14*14=140
1+1=3

来源:https://www.nowcoder.com/questionTerminal/1e878c85ce594e92bd7c6b43ba825af4

八进制13转十进制:1*8+3=11
八进制14转十进制:1*8+4=12
11*12=132
八进制204转十进制:2*8*8+0*8+4=132 

所以:(1*x¹+3*x°)* (1*x¹+4*x°) = 2*x²+0*x¹+4*x°

             (x+3)*(x+4)=2x²+4

             x²+7x+12=2x²+4

             x²-7x=8

             x*(x-7)=8

             x₁=8    x₂=-1

  解二元一次方程组 得到   8    【x代表进制】

 

list是一个ArrayList的对象,哪个选项的代码填到//todo delete处,可以在Iterator遍历的过程中正确并安全的删除一个list中保存的对象?()

Iterator it = list.iterator();
int index = 0;
while (it.hasNext())
{
    Object obj = it.next();
    if (needDelete(obj))  //needDelete返回boolean,决定是否要删除
    {
        //todo delete
    }
    index ++;
}

正确答案: A   你的答案: C (错误)

it.remove();
list.remove(obj);
list.remove(index);
list.remove(obj,index);

来源:https://www.nowcoder.com/questionTerminal/b41c88359c8a4d69a35c2f37400e49f0

terator  支持从源集合中安全地删除对象,

只需在 Iterator 上调用 remove() 即可

这样做的好处是可以避免 ConcurrentModifiedException ,当打开 Iterator 迭代集合时,同时又在对集合进行修改。有些集合不允许在迭代时删除或添加元素,但是调用 Iterator 的remove() 方法是个安全的做法。

 

mysql数据库,game_order表表结构如下,下面哪些sql能使用到索引()?

正确答案: B C D E   你的答案: A D E (错误)

select * from game_order where plat_game_id=5 and plat_id=134
select * from game_order where plat_id=134 and
plat_game_id=5 and plat_order_id=’100’
select * from game_order where plat_order_id=’100’
select * from game_order where plat_game_id=5 and
plat_order_id=’100’ and plat_id=134
select * from game_order where plat_game_id=5 and plat_order_id=’100’

来源https://www.nowcoder.com/questionTerminal/7d2af51194e14e708c71c855f5f28a36

  • 这道题目想考察的知识点是MySQL组合索引(复合索引)的最左优先原则。最左优先就是说组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到。只要组合索引最左边第一个字段出现在Where中,那么不管后面的字段出现与否或者出现顺序如何,MySQL引擎都会自动调用索引来优化查询效率。
  • 根据最左匹配原则可以知道B-Tree建立索引的过程,比如假设有一个3列索引(col1,col2,col3),那么MySQL只会会建立三个索引(col1),(col1,col2),(col1,col2,col3)。
  • 所以题目会创建三个索引(plat_order_id)、(plat_order_id与plat_game_id的组合索引)、(plat_order_id、plat_game_id与plat_id的组合索引)。根据最左匹配原则,where语句必须要有plat_order_id才能调用索引(如果没有plat_order_id字段那么一个索引也调用不到),如果同时出现plat_order_id与plat_game_id则会调用两者的组合索引,如果同时出现三者则调用三者的组合索引。
  • 题目问有哪些sql能使用到索引,个人认为只要Where后出现了plat_order_id字段的SQL语句都会调用到索引,只不过是所调用的索引不同而已,所以选BCDE。如果题目说清楚是调用到三个字段的复合索引,那答案才是BD。

 

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

正确答案: A   你的答案: A D F (错误)

HttpSessionAttributeListener
HttpSessionBindingListener
HttpSessionObjectListener
HttpSessionListener;
HttpSession
HttpSessionActivationListener

来源:https://www.nowcoder.com/questionTerminal/12aa0298fb874408b93485e1bf52be44

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

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

HttpSessionObjectListener:没有该接口API;

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

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

 

try块后必须有catch块。()

正确答案: B   你的答案: A (错误)

正确
错误

来源:https://www.nowcoder.com/questionTerminal/1a47aa72f3ab4aa08df20b9f208d94d3

catch可以省略,try的形式有三种:

try-catch

try-finally

try-catch-finally

catch和finally语句不能同时省略!

 

对于以下代码段,4个输出语句中输出true的个数是(    )。

class A{}

class B extends A{}

class C extends A{}

class D extends B{}

A obj = new D();

System.out.println(obj instanceof B);

System.out.println(obj instanceof C);

System.out.println(obj instanceof D);

System.out.println(obj instanceof A);

 

正确答案: C   你的答案: A (错误)

1
2
3
4

来源:https://www.nowcoder.com/questionTerminal/aa57aa82f3384c5b9acd8e120ce1dba2

instanceof是判断前者是否可以类型可以转化为后者,可以转化即为true,分为向上转型和向下转型

 

设m和都是int类型,那么以下for循环语句的执行情况是( )

for (m = 0, n = -1; n = 0; m++, n++)
n++;

正确答案: D   你的答案: B (错误)

循环体一次也不执行 循环体执行一次 是无限循环 有限次循环 循环结束判断条件不合法 运行出错
循环体执行一次 是无限循环
有限次循环
循环结束判断条件不合法

来源:https://www.nowcoder.com/questionTerminal/c38f6b3a592142d98e797bb841694577

for 循环的结束判定条件  是  boolean型    n = 0 是 int 类型 会有编译异常 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值