加入收藏 | 设为首页 | 会员中心 | 我要投稿 上饶站长网 (https://www.0793zz.com.cn/)- 数据库平台、视觉智能、智能搜索、决策智能、迁移!
当前位置: 首页 > 运营中心 > 交互 > 正文

Java开发面试题整理(2019春招)

发布时间:2020-12-24 12:23:23 所属栏目:交互 来源:网络整理
导读:div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post" div id="content_views" class="htmledit_views" 一、Java基础部分 1. HashMap和Hashtable各有什么特点,它们有

核心:要依赖于抽象,不要依赖于具体的实现

  • 1.高层模块不应该依赖低层模块,两者都应该依赖其抽象(抽象类或接口)
  • 2.抽象不应该依赖细节(具体实现)
  • 3.细节(具体实现)应该依赖抽象。
    三种实现方式:
  • 1.通过构造函数传递依赖对象
  • 2.通过setter方法传递依赖对象
  • 3.接口声明实现依赖对象

6、 迪米特原则(最少知识原则)(LOD:Law of Demeter)

核心思想:一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。(类间解耦,低耦合)意思就是降低各个对象之间的耦合,提高系统的可维护性;在模块之间只通过接口来通信,而不理会模块的内部工作原理,可以使各个模块的耦合降到最低,促进软件的复用
注:

  • 1.在类的划分上,应该创建有弱耦合的类;
  • 2.在类的结构设计上,每一个类都应当尽量降低成员的访问权限;
  • 3.在类的设计上,只要有可能,一个类应当设计成不变;
  • 4.在对其他类的引用上,一个对象对其它对象的引用应当降到最低;
  • 5.尽量降低类的访问权限;
  • 6.谨慎使用序列化功能;
  • 7.不要暴露类成员,而应该提供相应的访问器(属性)

7、 组合/聚合复用原则(CRP:Composite Reuse Principle)

核心思想:尽量使用对象组合,而不是继承来达到复用的目的。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。

复用的种类:

  • 1.继承
  • 2.合成聚合

注:在复用时应优先考虑使用合成聚合而不是继承

6. 谈谈堆和栈的区别!

a.堆栈空间分配

  • 栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  • 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表

b.堆栈缓存方式

  • 栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
  • 堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

c.堆栈数据结构区别

  • 堆(数据结构):堆可以被看成是一棵树,如:堆排序。
  • 栈(数据结构):一种先进后出的数据结构。

7. 谈谈你所了解的设计模式,并简单描述其特点和用法,或简单写一个某某设计模式!

1. 单例设计模式
2. 工厂设计模式
3. 代理模式
4. 观察者设计模式
5. 适配器模式
6. 策略模式
7. 门面模式
8. 桥接模式

来一个参考链接

注:设计模式有很多,这里列举几种常用的!读者需要自行将这几种设计模式理解清楚!前五种是常用也是常考的!

8. 熟悉HTTP基本的状态码!

一些常见的状态码为:

  • 200 - 服务器成功返回网页
  • 404 - 请求的网页不存在
  • 503 - 服务不可用
  • 具体详细的可以参考博客?

9. List、Set和Map的特点和区别(重点)

List:

  • 1.可以允许重复的对象。
  • 2.可以插入多个null元素。
  • 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
  • 4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

Set:

  • 1.不允许重复对象
  • 2.无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。
  • 3.只允许一个 null 元素
  • 4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器。

Map:

  • 1.不是collection的子接口或者实现类。Map是一个接口。
  • 2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。
  • 3.TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。
  • 4.Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
  • 5.Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

10.监听器、过滤器、拦截器、servlet的区别

  • eb.xml 的加载顺序是:context- param -> listener -> filter -> servlet
    监听器(listener):
  • 在request、session、application三个对象创建消亡或者往其中增/删/改属性时自动执行指定代码的功能组件。
  • 生命周期:随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。
  • 作用:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
    过滤器(filter):
  • 拦截请求,filter能够在一个请求到达控制层之前预处理用户请求,也可以在离开控制层时处理http 响应,进行一些设置以及逻辑判断,然后再传入servlet或者struts的 action进行业务逻辑,基于函数回调。
  • 生命周期:它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
  • 作用:a.对请求或响应(Request、Response)统一设置统一编码,简化操作;b.进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。c.过滤掉非法url
    拦截器(interceptor):
  • 拦截器是在面向切面编程中应用的,基于JAVA的反射机制,在一个业务逻辑(某个方法) 前、后调用另一个方法。
    生命周期:
    作用:
    servlet:
  • servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
    参考链接:

11. 当在浏览器输入一个网址,所要经过的全部在过程,请详细描述!

(编辑:上饶站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读