java面试总结

一、java基础

1.java中的几种基本数据类型是什么,各自占用多少字节?

java分为两种数据类型:
1.基本数据类型
2.引用数据类型,如,类,接口,数组
基本数据类型:8种
1)byte 1个字节,-128~127
2)short 2个字节,-32768~32767
3)int 4个字节
4)long 8个字节
5)float 4个字节
6)double 8个字节
7)char 2个字节
8)boolean 1或4个字节,一个字节表示,至少也得用一个字节来表示,4个字节,32位的CPU每次处理4个字节,效率问题。

2.String类能被继承吗?为什么?

不能,应该改类final类,不能被继承

3.String,StringBuffer,StringBuilder的区别。

String对象一旦被创建,里面的值便不可改变,需要改变就需要创建新的对象

StringBuffer和StringBuilder是可变的,里面的值改变而不需要创建新的对象。

StringBuffer是线程安全的,性能低。

StringBuilder是线程不安全,性能高。

4.ArrayList和LinkedList有什么区别。

都实现了List接口。
ArrayList的底层实现原理是数组类型,数组类型代表着,查询快,但是插入和删除慢,需要查询某个值时,直接通过索引,时间复杂度O(1)。当需要插入某个值时,在这个位置后面的值都得向后移动一位,物理上是一段连续内存。
LinkedList底层实现是链表,链表则表示查询慢,新增删除快,删除,只需要改变,指针的指向,当然在java中没有指针这一概念

5.类的实例化对象

类的实例化顺序,最先执行的是父类的静态数据->子类的静态数据->父类的构造方法->子类的构造方法,记住两个顺序,父静子静,父构构子构构,先静态,先父类。

6.用过哪些Map类,都有什么区别?

直接实现了map接口的主要有HashMap和AbstractMap以及Hashtable。而TreeMap和ConcurrentHashMap都继承与AbstractMap.
区别:
1)HashMap的底层数据结构是数组加链表。每一个entry都有一个key,value,当不同的key经过hash函数运算之后得到了一个相同的值,这个时候便发生了hash冲突。便会把value值存在一个数组里面。而多个entry便构成一个数组。允许key,value为null。采用链表可以有效的解决hash冲突。
2)Hashtable方法是同步的,也就是线程安全的,key和value都不能为空。
3)CurrentHashMap是线程安全的,采用了分段锁,在java1.8之后放弃的分段锁的使用。
4)TreeMap底层的数据结构是有顺序访问的红黑树。

7.抽象类和接口的区别?

抽象类:可以有默认的方法实现,可以有构造器,不可以实例化,可以有public,protected,default。可以有main方法,可以运行main放法。
接口:没有方法的实现,没有构造器,不可以实例化,只要public。不可以有main方法。

8.IO模型有哪些。

BIO:同步阻塞IO,意思是当进行IO操作时,我们的一个线程对应一个IO操作。并且是阻塞的。假如socket通信,当客服端没有发送信息到服务端时,服务器上这个线程便一直阻塞在这里,不会向下执行。
NIO:同步非阻塞,采用的原理主要是轮询。当多个IO操作同时存在时,一个线程便可以解决,线程先走到一个IO操作的代码处,如果此时通道并没有数据,也不需要写入,线程会继续走,访问下一个IO操作,就这样不停的轮询访问,当通道有数据了,并且需要读取的时候,线程便执行读操作。
AIO:异步非阻塞,也成为NIO2是NIO的改进版,每一个IO操作都会有一个回调函数。线程不会去轮询,当某个IO需要读取或写入数据时,便会执行回调函数,线程便在此处。
reactor:基于事件处理。

9.fianl的用途

表示最终类,不能被继承
1)final关键字提高了性能,JVM和Java应用都会缓存final变量
2)final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销
3)使用final关键字,JVM会对方法。变量及类进行优化
用途:常量;多线程共享

10.请写出三种单例模式

1.饿汉模式
public class Student{
    
    private static final Student student = new Student();
    
    private Student(){}

    public static Student getInstance(){

        return student;

   }

}

2.懒汉模式
public class Student{

    private static Student student=new Student();

    private Student(){}

    public static Student getInstance(){
    
       synchronized(Student.class){

          if(student == null){

            return new Student();

       }

        return student;

    } 
  }
}
3.静态内部类实现(登记者模式)

public class Student{

    private Student(){}

    private static Student getInstance(){
    
    return Holder.student;
 }

private static class Holder{
    private static Student student=new Student();
 }

}

11.如何在父类中为了子类自动完成所有的hashcode和equals实现?这么做有何优劣

Object是所有类的父类,里面封装了hashcode本地方法和equals方法。
如果我们自定义父类,来重写hashcode方法和equals方法
优势:这个不用说了,所有的类都享有父类的方法
劣势:当前我们的子类拥有不同的属性时,而这个属性有需要作为判断是否相等,这时候我们还是需要自己重写父类的方法,而在java中继承是不推荐使用的。

12.error和exception的区别,CheckedException,RuntimeException的区别

简单来说,Error是系统级错误,是程序员不可控的;Exception是应用程序的错误,分为检查异常和非检查异常。

CheckedException,检查异常也叫编译异常,必须处理,在代码中捕获或者抛出
RuntimeException,非检查异常也叫运行时异常,不必须要求处理。

13.请列出5个运行时异常

IndexOutOfBoundsException(下标越界异常)
NullPointerException(空指针异常)
ArithmeticException(算术运算异常,如除数为0)
ArrayStoreException(向数组中存放于与声明类型不兼容对象异常)
SecurityException(安全异常)

14.a.hashcode()有什么用,与a.equals(b)有什么关系?

在没有重写这两个方法的情况下,同一个对象的hashcode一定相同,不同的hashcode有可能不同,也有可能相同
equals方法即在比较两个对象是同一个对象
两点:同一个对象,equals一定为true,hashcode一定相同
不同对象,equals一定为false,hashcode有可能相同

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

后期慢慢更新,再加进去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
使用 JavaScript 编写的 Squareshooter 游戏及其源代码   项目:使用 JavaScript 编写的 Squareshooter 游戏(附源代码) 这款游戏是双人游戏。这是一款使用 JavaScript 编写的射击游戏,带有门户和强化道具。在这里,每个玩家都必须控制方形盒子(作为射手)。这款射击游戏的主要目标是射击对手玩家以求生存。当它射击对手时,它会获得一分。 游戏制作 该游戏仅使用 HTML 和 JavaScript 开发。该游戏的 PC 控制也很简单。 对于玩家 1: T:朝你上次动作的方向射击 A:向左移动 D:向右移动 W:向上移动 S:向下移动 对于玩家2: L:朝你上次移动的方向射击 左箭头:向左移动 右箭头:向右移动 向上箭头:向上移动 向下箭头:向下移动 游戏会一直进行,直到您成功射击对手或对手射击您为止。游戏得分显示在顶部。所有游戏功能均由 JavaScript 设置,而布局和其他次要功能则由 HTML 设置。 如何运行该项目? 要运行此项目,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要运行此游戏,首先,通过单击 index.html 文件在浏览器中打开项目。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值