Java中类与接口区别

  1. String和StringBuffer以及StringBuilder的区别?
    String是定长,没追加一个数据都会开辟一个空间。
    StringBuffer和StringBuilder是变长,不管追加多少数据都只开辟一个空间。
    单线程环境下使用StringBuilder,多线程环境下使用StringBuffer
    执行速度:StringBuilder>StringBuffer>String
  2. ArrayList和LinkedList的区别?
    数据结构实现:ArrayList是动态数组的数据结构实现;LinkedList是双向链表数据结构实现。
    随机访问效率:ArrayList比LinkedList在随机访问的时候效率高,因为LinkedList是线性的数据存储方式,所以需要指针从前往后一次查找;
    增加和删除效率:在非首尾的增加和删除操作时,LinkedList效率比ArrayList要高,因为ArrayList在增加、删除操作时,会影响数组的其他数据下标
    总体来说,需要频繁读取集合的元素时,推荐使用ArrayList,执行增删操作时,推荐使用LinkedList。
  3. abstract和interface的异同?
    相同点:A.都是抽象类,都不能被实例化。
    B.两者的实现类都必须实现已经声明的抽象方法。
    不同点:A.interface实现需要implement,abstract需要继承extends。
    B.一个类可以实现多个interface,但只能继承一个abstract。
    C.interface中的每个方法都是抽象方法,没有方法体,实现类必须要实现;而abstract的子类可以有选择性的实现。
    D.interface强调特定功能的实现,abstract强调所属关系。
  4. ==和equals的区别?
    equals解读:
    本质上就是==,只不过String和Integer重写了equals方法,把它变成了值的比较。继承Object的equals方法,并对其进行了方法重写,比较两个字符串是否相等。
    ==解读:
    对于基本类型:比较值是否相同;
    对于引用类型:比较引用是否相同;
    ==比较两个对象是否为同一个对象,实质是引用变量地址值的比较,指针指向用一个对象地址值才能相同。
    总结:==对于基本类型来说是值比较,对于引用类型来说是比较的是引用,而equals默认情况下是引用比较,只是很多类重写了equals方法,比如String、Integer等把它变成了值比较,所以一般情况下equals比较的是值是否相等。
  5. 方法重写和方法重载的区别,都需要什么条件?
    重载:同一个类中,方法名相同和参数列表不同。
    重写:子类对父类中的方法进行重写,方法名和参数列表相同,访问权限比父类大或者相同,返回值类型与异常要比父类小或相同。
  6. List和Set接口的区别?
    List中数据有序且可重复,可以通过索引获取;Set中数据无序且不仅可重复。
  7. int和Integer的区别?
    1.Integer是int的包装类,int是Java中的基本数据类型。
    2.Integer变量必须实例化后才可以使用,而int变量不需要。
    3.Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值。
    4.Integer的默认值是null,int默认值为0;
  8. 普通类和抽象类有哪些区别?
    普通类不能包含抽象方法,抽象类可以包含抽象方法;
    抽象类不能被实例化,就是不能被new创建对象,普通类可以直接实例化;
    如果一个类继承于抽象类,则子类必须实现父类的抽象方法。
  9. Collections和Collection有什么区别?
    Collection是一个集合接口,提供了对集合对象进行基本操作的通用方法,所有几个都是它的子类。
    Collections是一个包装类,包含了很多静态方法,不能被实例化,像是一个工具类。
  10. ArrayList和Vector的区别是什么?
    线程安全:Vector使用了synchronized修饰来实现线程同步,是线程安全的;ArrayList是非线程安全;
    性能:ArrayList性能比Vector要好
    扩容:ArrayList和Vector都会根据实际需求进行动态的调增容量,Vector每次增加原容量的一倍,而ArrayList只会增加百分之五十。
  11. Array和ArrayList有什么区别?
    Array能存储基本数据类型和对象,而ArrayList只能存储对象;
    Array是固定大小的,而ArrayList有自动扩容机制;
    Array中的内置方法没有ArrayList中的多。
  12. Iterator和ListIterator有什么区别?
    Iterator可以遍历Set和List;而ListIterator只能遍历list;
    Iterator只能单向遍历,ListIterator可以双向遍历;
    ListIterator从Iterator接口继承,增加了一些功能,如:添加一个元素。
  13. 并行和并发的区别?
    并行:多个处理器或多核处理器同时处理多个任务;
    并发:多个任务在同一个CPU核上,按细分的时间片轮流进行,逻辑上是同时执行的
  14. 线程和进程的区别?
    一个程序至少有一个进程,一个进程至少有一个线程也可以有多个线程来增加执行速度。
  15. Runnable和Callable的区别?
    Runnable无返回值,而Callable有返回值,Callable相当于对Runnable的补充。
  16. sleep()和wait()有什么区别?
    类:sleep()是来自Thread,wait()是来自Object
    释放锁:sleep()不释放锁,wait()释放锁
    用法不同:sleep()时间到会自动恢复;wait()可以用notify或notifyAll()直接唤醒。
  17. 线程的run()和start()有什么区别?
    start()方法用于启动线程,run()方法用于执行线程的运行时代码。run()可以重复使用,但start()只能用一次。
  18. synchronized和volatile的区别是什么?
    volatile是变量修饰符;synchronized是修饰符、方法、代码段。、
    volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性。
  19. synchronized和Lock的区别是什么?
    synchronized可以给类、方法、代码块加锁;而lock只能给代码块加锁。
    synchronized不需要手动获取锁和释放锁,发生异常会自动释放锁,不会造成死锁。而lock需要自己加锁和释放锁,如果使用不当没有unlock()去释放锁会造成死锁。
    通过Lock可以知道有没有成功获取锁,而synchronized却无法办到。
  20. 深拷贝和浅拷贝的区别是什么?
    浅拷贝:当对象被复制时只复制它本身和其中包含的值类型的成员变量。而引用类型的成员变量并没有复制。
    深拷贝:除了对象本身被复制外,对象所包含的所有成员变量也将复制
  21. JSP和Servlet有什么区别?
    JSP是servlet技术的扩展,本质上就是servlet的简易方式。servlet和JSP最主要的不同点在于,servlet的应用逻辑是在Java文件中,并且完全从表达层中的HTML里分离开来,而JSP的情况是Java和HTML可以组合成一个扩展名JSP的文件。JSP侧重于视图,servlet主要用于控制逻辑。
  22. JSP中的九大内置对象分别有什么作用?
    request:封装客户端的需求,其中包含来自get或post请求参数;
    response:封装服务器对客户端的响应;
    pagecontext:通过该对象可以获取其他对象;
    session:封装用户会话的对象;
    application:封装服务器运行环境的对象;
    out:输出服务器响应的输出流对象;
    config:web应用的配置对象;
    page:JSP页面本身(相当于Java程序中的this)
    exception:封装页面抛出异常的对象
  23. session和cookie的区别是什么?
    session:是一种会话状态保存在服务器端的技术
    cookie:是在http协议下,web服务器保存用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,web站点都可以访问cookie信息。
    存储位置不同:session存储在服务器上;cookie存储在浏览器端
    安全性不同:cookie安全性一般,在浏览器存储,可以被伪造和修改。
    容量和个数限制:cookie有容量限制,每个站点下的cookie也有个数限制;
    存储的多样性:session可以存储在Redis中、数据库中、应用程序中;而cookie只能存储在浏览器中;
  24. SpringMvc和struts的区别是什么?
    拦截级别:Struts2 是类级别的拦截;springMVC是方法级别的拦截;
    数据独立性:Springmvc的方法之间基本上独立,独享request和response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量;而Struts2 虽然方法之间也是独立的,但其所有的action变量是共享的,这不会影响程序运行,却给编码和读程序时带来了一定的麻烦。
    拦截机制:Struts2 有以自己的interceptor机制,springmvc用的是独立的aop方式,这样导致Struts2 的配置文件量比Springmvc大。
    对ajax的支持:springmvc集成了ajax,所有的ajax使用很方便,只需要一个注解@ResponseBody就可以实现;而Struts2 一般需要安装插件或者自己写代码才行。
  25. throw和throws的区别是什么?
    throw:是真实抛出一个异常。
    throws:是声明可能会抛出一个异常。
  26. forward和redirect的区别?
    forward是转发而redirect是重定向。
    地址栏URL显示:forward URL不会发生变化,redirect会发生变化;
    数据共享:forward可以共享数据,而redirect里的数据不能共享;
    效率:forward比redirect效率高。
  27. OSI的七层模型是什么?
    物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
    数据链路层:负责建立和管理节点间的路线;
    网络层:通过路由选择算法,为报文或分组通过子网选择最合适的路径。
    传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
    会话层:向两个实体的表示层提供建立和使用连接的方法;
    表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等;
    应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作;
  28. get和post请求有哪些区别?
    get请求会被浏览器主动缓存,而post不会;
    get传递参数有大小限制,而poet没有;
    post传递参数更安全,get的参数会明文限制在URL上,而post不会。
  29. 多种设计模式?
    单例模式:保证被创建一次,节省系统开销;
    工厂模式(简单工厂、抽象工厂):解耦代码;
    观察者模式:定义一个对象之间的一对多以来,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新;
    外观模式:提供一个接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用;
    模板方法模式:
    状态模式:
  30. 简单工厂和抽象工厂的区别?
    简单工厂:用来生产同一等级结构中的任意产品,对于增加产品,无能为力;
    工厂方法:用来生产同一等级结构中的固定产品,支持增加任意产品。
    抽象方法:用来生产不同产品族的全部产品,对于增加新的产品,无能为力;支持增加产品族。
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值