Java笔试题总结

这家公司应该是做大数据的

1.Java是大端还是小端?int的范围?人的年龄应该用什么数据类型?

java应该是大端的方式。int从-2的32次方到2的32次方。在java中 int 是默认得整数型,即一个整数赋值的时候,默认他的类型就是int,所以用int。不知道对不对

2.volatile关键字是?多线程有多少种方法实现?

volatile作为java中的关键词之一,用以声明变量的值可能随时会别的线程修改,使用volatile修饰的变量会强制将修改的值立即写入主存,主存中值的更新会使缓存中的值失效(非volatile变量不具备这样的特性,非volatile变量的值会被缓存,线程A更新了这个值,线程B读取这个变量的值时可能读到的并不是是线程A更新后的值)。volatile会禁止指令重排。
多线程实现:继承Thread类,重写run();实现Runnable接口,重写run();实现Callable接口,重写call函数

同步方式:synchronized修饰,wait(),notify()

3.JVM的理解?GC?对象的生命周期?

俗称Java虚拟机。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。JVM的内部体系结构分为三部分

  • 类装载器(ClassLoader)子系统
  • 运行时数据区
  • 执行引擎

(垃圾回收)原理是这样的:把对象分为年青代(Young)、年老代(Tenured)、持久代(Perm),对不同生命周期的对象使用不同的算法。(基于对对象生命周期分析)

对象的整个生命周期大致可以分为7个阶段:创建阶段(Creation)、应用阶段(Using)、不可视阶段(Invisible)、不可到达阶段(Unreachable)、可收集阶段(Collected)、终结阶段(Finalized)与释放阶段(Free)。

一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段

4.求平方根的函数?

讲真,牛顿迭代公式什么的早忘了…

public static double SQR(int a) {
    double x1 = 1, x2;
    x2 = x1 / 2.0 + a / (2 * x1);//牛顿迭代公式
    while (Math.abs(x2 - x1) > 1e-4) {
        x1 = x2;
        x2 = x1 / 2.0 + a / (2 * x1);
    }
    return x2;
}

5.实现一个排序算法

//冒泡排序
public class BubbleSort{
	public static void bubbleSort2(int[] a, int n){
		int i, j;
		int flag;

		for(i=n-1;i>0;i--){
			flag=0;
			for(j=0;j<i;j++){
				if(a[j]>a[j+1]){
					int tmp = a[j];
					a[j] = a[j+1];
					a[j+1] = tmp;

					flag=1;
				}
			}
			if(flat==0){
				break;
			}
		}
	}

6.实现一个单例

public class HungrySingleton{
	private static final HungrySingleton instance = new HungrySingleton();
	private HungrySingleton(){}
	public static HungrySingleton getInstance(){
		return instance;
	}

7.Hashmap和Arraylist对比

ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。
List 在存数据上比Map快很多,找数据和删除数据比Map慢很多.
如果ArrayList 和Map存储的元素都比较多。那么在取元素方面,ArrayList要慢很多。
但是这也不是绝对的,因为ArrayList底层基于数组,如果你明确的知道你要取的元素在哪个下标上,那么ArrayList也是相当的快。但是如果你不清楚,只能通过迭代内部全部元素然后进行条件判断查找,那么ArrayList就要慢的多,因为他要从头到尾一个个的元素去查,直到找到满足你的要求的那个元素,而Map则不需要迭代,因为Map有键,直接取键对应的值。

对于添加元素,ArrayList是在数组的结尾追加,当容量不够时,创建一个新的更长的数组然后将旧的全部拷贝过来。Map和他的方式差不多,也是容量不足的时候需要重新创建新的然后拷贝,但是当发生删除元素时,ArrayList简直就是灾难。假设你有10000个元素,你删除首个元素,在删除完毕以后 ArrayList中的所有元素都必须进行一次移动操作,向前位移。。。而Map则不需要。

总结:Java基础不到位

多面试挺好的,就跟考试一样查出自己究竟哪里没学好理解不够。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值