个人测试八

一、单选题

1.以下关于synchronized描述不正确的是( C )

A. 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其他线程对该对象的该synchronized方法或者synchronized代码块的访问将被阻塞

B. 当一个线程访问某对象的synchronized方法或者synchronized代码块时,其他线程仍然可以访问该对象的非同步代码块

C.当一个线程访问某对象的synchronized方法或者synchronized代码块时,其他线程可以访问该对象的其他的synchronized方法或者synchronized代码块

D. 当在对象上调用其任意synchronized方法的时候,对象都被加锁

2.下面关于wait()和sleep()两个方法描述错误的是( D )

A. wait()方法属于Object的方法,而sleep()方法属于Thread类的方法

B. wait()方法可以有参数,也可以无参数,sleep()方法必须要传入long的参数

C. 两个方法都需要InterruptedException异常处理

D. wait()无参方法调用后,线程阻塞。需要其他线程只能使用notify()方法才能唤醒。而sleep()可以在时间到后醒来继续运行

3.有如下抽象类,则描述正确的是:( D )

 public abstract class Animal {
  public  void move()
  {
   System.out.println("the animal can move...");
  }
  abstract void show();
}

A. 该抽象类中不能定义实例方法move.
B. 该抽象类可以被实例化。
C. 该抽象类不能被继承。
D. 该抽象类的子类对象要调用show方法,必须对Animal中的show方法进行重写。

4.假设当前时间是2021-03-03晚上20:20,星期三,则下面代码输出为( B )

 public class Test {   
   public static void main(String[] args) {   
    Date date=new Date();
    System.out.printf("%tD%n",date);   
     }   
   }    

A. 2021/03/03
B. 03/03/21
C. 2021/03/03 20:20:00
D. 03/03/21 20:20:00

5.方法a定义如下:

int a(int b){
		   int n=b-1;
		   n |= n >> 1;
		   n |= n >> 2;
		   n |= n >> 4;
		   n |= n >> 8;
		   n |= n >> 16;
		   return n;
		} 

调用方法a(10)返回的结果是:( C )
A. 10
B. 9
C. 15
D. 0

6.对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。( B )

A. 正确
B. 错误

7.下面代码运行结果是( C )

 public class Test{ 
    public int add(int a,int b){   
         try {
             return a+b;      
         }  catch (Exception e) {  
            System.out.println("catch语句块");
         }finally{ 
             System.out.println("finally语句块");
         }
         return 0;
    } 
     public static void main(String argv[]){ 
         Test test =new Test(); 
         System.out.println("和是:"+test.add(9, 34)); 
     }
}

A. catch语句块,和是:43
B. 编译异常
C. finally语句块,和是:43
D. 和是:43,finally语句块

8.关于ASCII码和ANSI码,以下说法不正确的是( D )

A. 标准ASCII只使用7个bit
B. 在简体中文的Windows系统中,ANSI就是GB2312
C. ASCII码是ANSI码的子集
D. ASCII码都是可打印字符

9.不通过构造函数也能创建对象吗( A )

A. 是
B. 否

Java创建对象的几种方式(重要):
(1) 用new语句创建对象,这是最常见的创建对象的方法。
(2) 运用反射手段,调用java.lang.Class或者
java.lang.reflect.Constructor类的newInstance()实例方法。
(3) 调用对象的clone()方法
(4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从文件中还原类的对象,也不会调用构造函数。

10.下面的代码段,当输入为2的时候返回值是( D )

public static int getValue(int i) {  
        int result = 0;  
        switch (i) {  
        case 1:  
            result = result + i;  
        case 2:  
            result = result + i * 2;  
        case 3:  
            result = result + i * 3;  
        }  
        return result;  
    }  

A. 0
B. 2
C. 4
D. 10

11.以下Java代码段会产生几个对象 (B )

public void test(){
	String a="a";
	String b="b";
	String c="c";
	c=a+""+b+""+c;
	System.out.print(c);
}

A.0
B.1
C.2
D.3
一个对象,因为编译期进行了优化,3个字符串常量直接折叠为一个

12.下列哪一种叙述是正确的( D )

A. abstract修饰符可修饰字段、方法和类
B. 抽象方法的body部分必须用一对大括号{}包住
C. 声明抽象方法,大括号可有可无
D. 声明抽象方法不可写出大括号

二、简答题

1.short s1 = 1; s1 = s1 + 1;有错吗?
short s1 = 1; s1 += 1;有错吗?

对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。
而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1, 相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

2.&和&&的区别?

&运算符有两种用法:(1)按位与;(2)逻辑与。&&运算符是短路与运算。逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个表达式的值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右边的表达式会被直接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是null而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会产生NullPointerException异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

3.用最有效率的方法计算2乘以8?

2 << 3(左移3位相当于乘以2的3次方,右移3位相当于除以2的3次方)。
用移位和减法运算来代替乘法,从而得到更好的性能。

4.String和StringBuilder、StringBuffer的区别?

Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

5.什么是微服务?

微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可 被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任 务。在所有情况下,每个任务代表着一个小的业务能力。 可以在“自己的程序”中运行,并通过“轻量级设备与 HTTP 型 API 进行沟通”。关键在于该服务可 以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个 API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务 需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。

6.Spring MVC的主要组件?

(1)前端控制器 DispatcherServlet(不需要程序员开发);作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
(2)处理器映射器HandlerMapping(不需要程序员开发);作用:根据请求的URL来查找Handler。
(3)处理器适配器HandlerAdapter;注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)处理器Handler(需要程序员开发);
(5)视图解析器 ViewResolver(不需要程序员开发);作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)。
(6)视图View(需要程序员开发jsp);View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)。

7.Spring 有什么好处?

(1) 轻量:Spring 是轻量的,基本的版本⼤约 2MB。
(2) 控制反转:Spring 通过控制反转实现了松散耦合,对象们给它们的依赖,⽽不是创建或查找依 赖的对象们。
(3) ⾯向切⾯编程(AOP):Spring⽀持⾯向切⾯编程,并且把应⽤业务逻辑和系统服务分开。
(4) 容器:Spring 包含并管理应⽤中对象的声明周期和配置。
(5) MVC 框架:Spring 的 WEB 框架是个精⼼设计的框架,是 Web 框架的⼀个很好的替代品
(6) 事务管理:Spring 提供⼀个持续的事务管理接⼝,可以扩展到上⾄本地事务下⾄全局事务 (JTA)。
(7) 异常处理:Spring 提供⽅便的 API 把具体技术相关的异常(⽐如由 JDBC,HibernateorJDO 抛出 的)转化为⼀致的 unchecked 异常。

三、编程题

1.求1+2!+3!+…+20!的和。

public class Test5{
	public static void main(String[] args){
		long sum = 0;
		for(int i=0;i<20;i++)
		  sum += factorial(i+1);
		System.out.println(sum);
	}
	//阶乘
	private static long factorial(int n){
		int mult = 1;
		for(int i=1;i<n+1;i++)
		  mult *= i;
		return mult;
	}
}

2.将一个数组逆序输出。

public class Test6{
	public static void main(String[] args){
		int[] A = new int[]{1,2,3,4,5,6,7,8,9,};
		print(A);
		System.out.println();
		int[] B = reverse(A);
		print(B);
	}
	private static int[] reverse(int[] A){
		for(int i=0;i<A.length/2;i++){
			int temp = A[A.length-i-1];
			A[A.length-i-1] = A[i];
			A[i] = temp;
		}
		return A;
	}
	private static void print(int[] A){
		for(int i=0;i<A.length;i++)
		  System.out.print(A[i]+" ");
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于个人博客项目的测试用例编写,可以考虑以下几个方面: 1. 用户登录测试: - 输入正确的用户名和密码,验证是否成功登录。 - 输入错误的用户名或密码,验证是否登录失败。 2. 文章发布测试: - 输入正确的标题、内容和标签,验证是否成功发布文章。 - 留空标题、内容或标签,并尝试发布文章,验证是否提示相关错误信息。 3. 文章编辑测试: - 选择一篇已存在的文章进行编辑,修改标题、内容或标签,验证是否成功保存修改。 - 尝试编辑不存在的文章,验证是否提示相关错误信息。 4. 文章删除测试: - 选择一篇已存在的文章进行删除,验证是否成功删除。 - 尝试删除不存在的文章,验证是否提示相关错误信息。 5. 评论功能测试: - 发表一条评论并验证是否成功显示在相应的文章页面。 - 删除已存在的评论并验证是否成功删除。 6. 用户权限测试: - 普通用户尝试进行管理员权限的操作(如发布文章、编辑其他用户的文章),验证是否提示相关错误信息。 7. 前端页面测试: - 验证页面跳转是否正常,如登录后跳转到用户个人主页、点击文章链接跳转到文章详情页等。 - 验证页面元素的展示和样式是否符合设计要求。 8. 数据库操作测试: - 针对各个功能模进行数据的增删改查操作,验证数据库操作是否正确。 以上是一些基本的测试用例,根据博客项目的具体功能和需求,还可以进行更详细和深入的测试设计。在编写测试用例时,需要考虑各种边界情况和异常情况,并确保测试覆盖率较高,以提高项目的质量和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值