Java学习记录——错题总结(十)

第一套

1.Java网络程序设计中,下列正确的描述是()
正确答案: A D
Java网络编程API建立在Socket基础之上
Java网络接口只支持tcP以及其上层协议
Java网络接口只支持UDP以及其上层协议
Java网络接口支持IP以上的所有高层协议

2.以下哪些类是线程安全的()
正确答案: A D E
Vector
HashMap
ArrayList
StringBuffer
Properties

A,Vector相当于一个线程安全的List
B,HashMap是非线程安全的,其对应的线程安全类是HashTable
C,Arraylist是非线程安全的,其对应的线程安全类是Vector
D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder
E,Properties实现了Map接口,是线程安全的

第二套

下面有关jdbc statement的说法错误的是?
正确答案: C
JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程
对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象”
PreparedStatement中,“?” 叫做占位符,一个占位符可以有一个或者多个值
PreparedStatement可以阻止常见的SQL注入式攻击

征程头像征程
1.Statement、PreparedStatement和CallableStatement都是接口(interface)。
2.Statement继承自Wrapper、PreparedStatement继承自Statement、CallableStatement继承自PreparedStatement。
3.
Statement接口提供了执行语句和获取结果的基本方法;
PreparedStatement接口添加了处理 IN 参数的方法;
CallableStatement接口添加了处理 OUT 参数的方法。
4.
a.Statement:
普通的不带参的查询SQL;支持批量更新,批量删除;
b.PreparedStatement:
可变参数的SQL,编译一次,执行多次,效率高;
安全性好,有效防止Sql注入等问题;
支持批量更新,批量删除;
c.CallableStatement:
继承自PreparedStatement,支持带参数的SQL操作;
支持调用存储过程,提供了对输出和输入/输出参数(INOUT)的支持;

Statement每次执行sql语句,数据库都要执行sql语句的编译 ,
最好用于仅执行一次查询并返回结果的情形,效率高于PreparedStatement。

PreparedStatement是预编译的,使用PreparedStatement有几个好处

  1. 在执行可变参数的一条SQL时,PreparedStatement比Statement的效率高,因为DBMS预编译一条SQL当然会比多次编译一条SQL的效率要高。
  2. 安全性好,有效防止Sql注入等问题。
  3. 对于多次重复执行的语句,使用PreparedStament效率会更高一点,并且在这种情况下也比较适合使用batch;
  4. 代码的可读性和可维护性。
    一个占位符必定只能对应一个值

2.下面有关java hashmap的说法错误的是?
正确答案: C
HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。
HashMap 的实现不是同步的,意味着它不是线程安全的
HashMap通过开放地址法解决哈希冲突(实际上是拉链法)
HashMap中的key-value都是存储在Entry数组中的

  1. 开放定址法:线性探测再散列、二次探测再散列、再随机探测再散列;

  2. 再哈希法:换一种哈希函数;

  3. 链地址法 :在数组中冲突元素后面拉一条链路,存储重复的元素;

  4. 建立一个公共溢出区:其实就是建立一个表,存放那些冲突的元素。

什么时候会产生冲突

HashMap中调用 hashCode() 方法来计算hashCode。

由于在Java中两个不同的对象可能有一样的hashCode,所以不同的键可能有一样hashCode,从而导致冲突的产升。
HashMap底层是 数组和链表 的结合体。底层是一个线性数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。数组是 Entry[] 数组,静态内部类。 E ntry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用 next ,这就构成了链表。所以 很明显是链地址法。
具体过程:
当我们往HashMap中put元素的时候:当程序试图将一个key-value对放入HashMap中时,
1 . 程序首先根据该 key 的 hashCode() 返回值决定该 Entry 的存储位置;
2 . 若 Entry 的存储位置上为 null ,直接存储该对象;若不为空,两个 Entry 的 key 的 hashCode() 返回值相同,那它们的存储位置相同,
3 . 循环遍历链表,如果这两个 Entry 的 key 通过 equals 比较返回 true,新添加 Entry 的 value 将覆盖集合中原有 Entry 的 value,但key不会覆盖;如果这两个 Entry 的 key 通过 equals 比较返回 false,新添加的 Entry 将与集合中原有 Entry 形成 Entry 链,而且新添加的 Entry 位于 Entry 链的头部

3.有关会话跟踪技术描述正确的是()
正确答案: A B C
Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端
关闭浏览器意味着临时会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期
在禁用Cookie时可以使用URL重写技术跟踪会话
隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示

D:隐藏域在页面中对于用户(浏览器)是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。

1.隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用。浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器。
2 .有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cookie实现,但使用隐藏域就简单的多了.而且不会有浏览器不支持,用户禁用cookie的烦恼。

3 .有些时候一个form里有多个提交按钮,怎样使程序能够分清楚到底用户是按那一个按钮提交上来的呢?我们就可以写一个隐藏域,然后在每一个按钮处加上
οnclick="document.form.command.value=“xx”"然后我们接到数据后先检查command的值就会知道用户是按的
那个按钮提交上来的。

4 .有时候一个网页中有多个form,我们知道多个form是不能同时提交的,但有时这些form确实相互作用,我们就可以在form中添加隐藏域来使它们联系起来。

  1. javascript不支持全局变量,但有时我们必须用全局变量,我们就可以把值先存在隐藏域里,它的值就不会丢失了。

  2. 还有个例子,比如按一个按钮弹出四个小窗口,当点击其中的一个小窗口时其他三个自动关闭.可是IE不支持小窗口相互调用,所以只有在父窗口写个隐藏域,当小窗口看到那个隐藏域的值是close时就自己关掉。

第三套

1.关于下面程序,哪些描述是正确的: ( )

 public class While {
    public void loop() {
        int x= 10;
        while ( x )  {
            System.out.print("x minus one is " + (x - 1));
            x -= 1;
        }
    }
}

正确答案: B
行1有语法错误
行4有语法错误
行5有语法错误
行6有语法错误
行2有语法错误,loop是关键字
程序能够正常编译和运行

这个题主要考while()中表达式的判断,在C语言中大于0的int值都会被认为是true,而java中没有这个机制,必须是boolean类型的。

2.对于如下代码段

class A{
    public A foo() {
        return this;
    }
}
class B extends A {
    public A foo(){
        return this;
    }
}
class C extends B {
    _______
 
}

可以放入到横线位置,使程序正确编译运行,而且不产生错误的选项是( )

正确答案: C
public void foo(){}
public int foo(){return 1;}
public A foo(B b){return b;}
public A foo(){return A;}

重写 要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]

重载 方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数顺序
再来说说这道题 A B 都是方法名和参数相同,是重写,但是返回类型没与父类返回类型有继承关系,错误 D 返回一个类错误 c的参数类型与父类不同,所以不是重写,可以理解为广义上的重载访问权限小于父类,都会显示错误
虽然题目没点明一定要重载或者重写,但是当你的方法名与参数类型与父类相同时,已经是重写了,这时候如果返回类型或者异常类型比父类大,或者访问权限比父类小都会编译错误

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI语言模型,我无法编写完整的Java应用程序,但我可以给你一些指导,希望能帮到你。 首先,你需要确定你的错题本App需要包含哪些功能。以下是一个简单的功能列表: 1. 用户登录和注册 2. 添加题目和答案 3. 查看错题列表 4. 删除错题 5. 修改错题 6. 退出登录 接下来,你需要设计数据库表结构。你可以使用MySQL或其他数据库管理系统来存储数据。以下是一个简单的数据库表结构: 1. 用户表:包含用户ID、用户名和密码 2. 题目表:包含题目ID、题目、答案和用户ID 3. 错题表:包含错题ID、题目ID和用户ID 然后,你需要编写Java代码来实现上述功能。以下是一个简单的代码示例: 1. 用户登录和注册: ``` // 登录 public boolean login(String username, String password) { // 根据用户名和密码查询用户表 // 如果查询到了用户记录,返回true,否则返回false } // 注册 public boolean register(String username, String password) { // 插入新用户记录到用户表 // 如果插入成功,返回true,否则返回false } ``` 2. 添加题目和答案: ``` public boolean addQuestion(String question, String answer, int userId) { // 插入新题目记录到题目表 // 如果插入成功,返回true,否则返回false } ``` 3. 查看错题列表: ``` public List<Question> getWrongQuestions(int userId) { // 根据用户ID查询错题表和题目表,返回错题列表 } ``` 4. 删除错题: ``` public boolean deleteWrongQuestion(int wrongQuestionId) { // 根据错题ID删除错题记录 // 如果删除成功,返回true,否则返回false } ``` 5. 修改错题: ``` public boolean updateWrongQuestion(int wrongQuestionId, String question, String answer) { // 根据错题ID更新题目表的题目和答案 // 如果更新成功,返回true,否则返回false } ``` 6. 退出登录: ``` public void logout() { // 清除用户登录状态 } ``` 最后,你需要将这些代码整合到一个Java应用程序,并使用Java Swing或其他UI框架来实现用户界面。你还需要编写一些单元测试来确保你的代码能够正确地处理各种情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值