java笔试题带答案

java笔试题带答案

最近在面试java开发工程师,虽然面试的结果不重要,但是过程还是很重要的,我觉得有必要记录下来。下面是我总结的一些java笔试题,希望能帮到大家。

—、不定项选择题

三维家
1、下列描述正确的是(ABD)
A:cookie存储在客户端的临吋文件中。
B:session存储在服务器的内存中。
C:cookle的secure=true时,不允许客户端脚本访问。
D:cookle的 httpOnly==true时,不允许客户端脚本访问。
解析:secure=true时,只能在 HTTPS 连接中被浏览器传递到服务器端进行会话验证,
如果是 HTTP 连接则不会传递该信息。

2、下列选项中,属于SpringlOC Bean的作用域的是(BCD)
A:Cookie B:Request
C:Session D:Prototype
解析:Spring 3中为Bean定义了5中作用域,分别为singleton(单例)、prototype(原型)、request、session和global session
详情请查看我的博客:https://blog.csdn.net/weixin_43287508/article/details/88058714

3、下面关于Spring 传播机制的描述,正确的是(BD)
A:Propagation_REQUIRE_NEW 支持当前事务,如果当前没有事务,则新建一个事务。
B:Propagation_REQUIRE指支持当前事务,如果当前没有事务,则新建一个事务。
C:Propagation_NOT_SUPPORTED指以非事务方式执行操作,如果当前存在事务,则抛出异常。
D:Propagation_NEVER 指以非事务方式执行操作,如果当前存在事务,则抛出异常。

解析:A: PROPAGATION_REQUIRES_NEW 总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
C: PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
详情请查看我的博客:https://blog.csdn.net/weixin_43287508/article/details/88064566

4、下列叙述正确的是:(AB)
A:Vector是线程安全的,ArrayList是线程不安全的
B:ArrayList 效率比 Vector 更髙
C:ArrayList底层是数组实现,Vector不是
D:Vector和ArrayList的自动扩容机制是一样的

解析:C:Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步。
D: ArrayList以1.5倍的方式在扩容、Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。
详情请查看我的博客:https://blog.csdn.net/weixin_43287508/article/details/88065284

5、下面描述正确的是:(AD)
A:单线程情况下StringBuilder在做大量的字符串拼接的效率优于StringBuffer
B:StringBuilder是线程安全的,StringBuffer是线程不安全的
C:StringBuilder 的拼接字符串方法是 append(Object),StringBuilder 不是
D:StringBuilder默认的长度是16
详情请查看我的博客:https://blog.csdn.net/weixin_43287508/article/details/88245200

6、下面哪些即使经过IO之后仍然可以保持单例:(AD)
A:创建单例对象的时候使用双重锁
B:枚举类对象
C:创建单例对象类的时候Override方法readResolve ()方法
D:将单例对象的变量定义为常量
这题不知道答得对不对,欢迎指出。

7、下面代码执行后控制台返回的结’果是:(D)
Public static void main(String args[]){
byte b=127;
b++;
System.out.print(b);
}
A:128 B:127 C:0 D:-128
解析:byte类型的范围是-128到127,127的二进制为:0111 1111,所以执行++a时,0111 111变为1000 0000,而128的二进制为:1000 0000,即为127+1=-128。

8、当我们在通过调用Thread.System.gc()或者Runtime getRuntime gc(); 方法启动我们的垃圾回收,收集器什么时候执行(D)
A:立刻执行
B:当前方法执行结束之后
C:程序停止的时候执行
D:不可预判,程序可能会随时执行
这题不会,望有人给出答案

二、填空题

1、看下面代码,完成填空

public class UserService{

private final static String	name="张三";

public static void main(String[] args){
	    User user=new User();
	    Integer age=100;
	    user.setAge(age);
	    user.setName (name);
}
}

class User{

private Integer age;
private String name;

public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
public Integer getAgef) {
	return age;
}
public void setAge(lnteger age) {
	 this. age = age;
}
}

上述代码main方法执行之后:(答案请在下面给出的答案中选择)

字符串“张三”存在JVM的存储区域是( C );
main()方法字节码存在的存储区域是( D );
user对象存在的存储区域是 ( B );
user对象中的age存在的存储区域是( A );

A:本地方法栈 B: Java堆
C:运行时常量池 D:方法区

2、OOP五大原则((Object-oriented programming),指面向对象程序设计):

  1. 单一职责原则
  2. 接口隔离原则
  3. 开放-封闭原则
  4. 替换原则
  5. 依赖倒置原则

三、解答题

1、在需要使用集合的时候我们需要根据什么来权衡使用
ArrayList,Linkedlist,Vector,Stack ?
答:一,线程安全性
Vector、Stack:线程安全,ArrayList、LinkedList:非线程安全

二,实现方式
LinkedList:双向链表,ArrayList,Vector,Stack:数组

三,容量扩展方面
由于ArrayList和Vector(Stack继承自Vector,只在Vector的基础上添加了几个Stack相关的方法,故之后不再对Stack做特别的说明)使用数组实现,当数组长度不够时,其内部会创建一个更大的数组,然后将原数组中的数据拷贝至新数组中,如果在创建Vector时不指定capacityIncrement(自动扩展长度)的值,如需扩展,则每次至少扩展至原长度的2倍。

四,效率方面
查询ArrayList>LinkedList
插入ArrayList<LinkedList

2、写-段代码,删除指定集合中的某个特定值
答:

public static void name() {
		ArrayList<String> al = new ArrayList<String>();
		al.add("a");
		al.add("b");
		al.add("c");

		for (int i = 0; i < al.size(); i++) {
			if (al.get(i) == "b") {
				al.remove(i);
				i--;
			}
		}

		for (int i = 0; i < al.size(); i++) {
			System.out.println(i + "::::" + al.get(i));
		}

	}

使用迭代器

List<String> strings = new ArrayList<String>();
   strings.add("aa");
   strings.add("bb");
   strings.add("cc");
   strings.add("dd");
   System.out.println("before:"+strings);
   Iterator<String> iterator = strings.iterator();
   while(iterator.hasNext()){
   	if(iterator.next().equals("cc")) {
   		iterator.remove();
   	}
   }
   System.out.println("after--while:"+strings);
   
   for (int i = strings.size() - 1; i >= 0; i--) {
       String str = strings.get(i);
       if ("bb".equals(str)) {
       	strings.remove(str);
       }
   }
   
   System.out.println("after--for:"+strings);

3、将下列数字用代码进行排序,写成每一次操作步骤后的排序结果,实例:5,4, 6, 2, 8, 7
答:
冒泡排序算法

int array[]={5,4,6,2,8,7};
		for(int i=0;i<array.length;i++){
			System.out.print(array[i]);
			
		}
		System.out.println("");
		System.out.println("---------");
		for (int i = 0; i < array.length - 1; i++) {
			// 排序轮数
			for (int j = 0; j <  array.length - i - 1; j++) {
			// 比较次数
				if (array[j] > array[j + 1]) {
					int temp = array[j + 1];
					array[j + 1] = array[j];
					array[j] = temp;
				}
			}

452678

425678

245678

4、有没有办法访问其他类中的private方法,以及为什么?

5、看下面的student表

在这里插入图片描述
用一条SQL查出查出每门课程都大于80的学生姓名

SELECT DISTINCT name FROM grade WHERE name NOT IN(SELECT DISTINCT name FROM grade WHERE score <=80);

四、问答题

1、请列举出Redis常用的5种数据类型
答:String, list,set,zset,hash
索菲亚

2、Spring的依赖注入是什么意思?给一个Bean的message属性,字符串类型,注入值为“HELLOWORLD”的XML配置文件该怎么写?
答:

3、请解释下Spring Bean的生命周期?
答:1:创建实例( init-method);
2:注入依赖关系;
3:调用 bean 的初始化方法;
4:bean 初始成功,可以使用;
5:容器关闭时 , 调用 bean 的销毁方法(destroy-method);

详情请查看我的博客:https://blog.csdn.net/weixin_43287508/article/details/88058714

4、Spring的事务有几种实现方式?谈谈Spring事务的隔离性和传播行为?
答:

5、JDBC如何做事务处理?
答:

6、MYSQL数据库中的Exist和in执行效率上哪个更好,为什么?
答:

7、一个用户具有多个角色,请写出SQL查询出该表中,具有该用户的所有角色的其他用户。
答:

8、请分别写出一段栈溢出和堆溢出的代码?
答:

9、设计一个函数只定义2个变量a和b,不使用第三个变量,使2个值交换?
答:可以用两个数求和然后相减的方式进行数据交换,弊端在于如果 x 和 y 的数值过大的话,超出 int 的值会损失精度。

public static void main(String[]args)
    {
        int x =5,y=10; //定义两个变量

        x = x + y;        //x(15) = 5 + 10;
        y = x - y;        //y(5) = x(15) - 10;
        x = x - y;        //x(10) = x(15) - y(5)
        System.out.println("x="+x+"y="+y);

    }

10、有四个人要在夜里穿过一条悬索桥回到宿营地。可是他们只有一支手电,电池只够再亮17分钟。过桥必须要有手电,否则太危险。桥最多只能承受两个人同时通过的重量。这四个人的过桥速度都不一样:一个需要1分钟,一个需要2分钟,一个需要5分钟,还有一个需要10分钟。他们如何才能在17分钟之内全部过桥?
答:
1、2一起过—2分钟
1回来—1分钟
5、10一起过—10分钟
2回来—2分钟
1、2一起过—2分钟。
总共17分钟。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值