Java综合知识点总结-面试必背-基础篇

序 言
本篇文章还不足以囊括所有 Java 问题,都是日常的总结,后续也会继续更新… …


如想了解更多更全面的Java必备内容可以阅读:所有JAVA必备知识点面试题文章目录:


1.JDK常用的包
  • java.lang: 有很多常用的基础类,比如String、Math、Integer、System和Thread, 提供常用功能。
  • java.io: 这里面是所有输入输出有关的类,比如文件操作等。
  • java.net: 这里面是与网络有关的类,比如URL,URLConnection等。
  • java.util : 这个是系统辅助类,特别是集合类Collection,List,Map等。
  • java.sql: 这个是数据库操作的类,Connection, Statememt,ResultSet等。
2.Get和Post的区别
  1. get是从服务器上获取数据,post是向服务器传送数据,
  2. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。
  3. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
  4. 在进行文件上传时只能使用post而不能是get。
3.Java多态的具体体现

面向对象编程有四个特征:抽象,封装,继承,多态。
多态有四种体现形式:

  1. 接口和接口的继承。
  2. 类和类的继承。
  3. 重载。
  4. 重写。

其中重载和重写为核心。

  • 重载:重载发生在同一个类中,在该类中如果存在多个同名方
    法,但是方法的参数类型和个数不一样,那么说明该方法被重
    载了。
  • 重写:重写发生在子类继承父类的关系中,父类中的方法被子
    类继承,方法名,返回值类型,参数完全一样,但是方法体不
    一样,那么说明父类中的该方法被子类重写了。
4.StringBuffer StringBuilder String 区别 [详细解析]
  • StringBuffer和StringBuilder都继承自抽象类AbstractStringBuilder。
  • String是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,存储数据的字符数组没有被final修饰,说明值可以改变,抽象类AbstractStringBuilder内部都提供了一个自动扩容机制,当发现长度不够的时候(初始默认长度是16),会自动进行扩容工作,扩展为原数组长度的2倍加2,创建一个新的数组,并将数组的数据复制到新数组,所以对于拼接字符串效率要比String要高。
  • 线程安全性:StringBuffer由于很多方法都被 synchronized 修饰了所以线程安全,但是当多线程访问时,加锁和释放锁的过程很平凡,所以效率相比StringBuilder要低。StringBuilder相反执行效率高,但是线程不安全。
  • 执行速度:StringBuilder > StringBuffer > String。
5.Hashtable与HashMap的区别 [Java容器详细解析]

Map是一个以键值对存储的接口。HashMap和HashTable两个就是Map下具体的实现。

  1. HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。
  2. Hashtable比HashMap多提供了elments() 和contains() 两个方法。
  3. HashMap允许空(null)的键和值(key),HashTable则不允许。
  4. HashMap不是线程安全的,HashTable是线程安全。
  5. 初始容量大小和每次扩充容量大小的不同:Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。
  6. 计算hash值的方法不同:为了得到元素的位置,首先需要根据元素的 KEY计算出一个hash值,然后再用这个hash值来计算得到最终的位置。Hashtable直接使用对象的hashCode。hashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值。然后再使用除留余数发来获得最终的位置。
6.九大隐式对象 [JavaWeb详细解析]
  • 输入/输出对象: request、response、out
  • 作用域通信对象: session、application、pageContext
  • Servlet 对象: page、config
  • 错误对象: exception
7.Forword(请求转发)与Redirect(重定向)
  1. 从数据共享上
    Forword是一个请求的延续,可以共享request的数据
    Redirect开启一个新的请求,不可以共享request的数据
  2. 从地址栏
    Forword转发地址栏不发生变化
    Redirect转发地址栏发生变化
8.JQurey总结

jquery是一个轻量级的js框架,具有跨浏览器的特性,兼容性好,
并且封装了很多工具,方便使用。
常用的有: 选择器 ,dom操作 ,ajax(ajax不能跨域) ,特效,工具类

9.XML和Json的特点

Xml特点:
  1、有且只有一个根节点;
  2、数据传输的载体
  3、所有的标签都需要自定义
  4、是纯文本文件
  
Json(JavaScript Object Notation)特点,Json分为两种格式:

  • Json对象(就是在{}中存储键值对,键和值之间用冒号分隔,
    键 值 对之间用逗号分隔)。

  • Json数组(就是[]中存储多个Json对象,Json对象之间用逗号分隔)
    (两者间可以进行相互嵌套)数据传输的载体之一。

区别:

  • 传输同样格式的数据,xml需要使用更多的字符进行描述,
  • 流行的是基于Json的数据传输。
  • xml的层次结构比Json更清晰。

共同点:

  • xml和json都是数据传输的载体,并且具有跨平台跨语言的特性。
10.request.getSession()、reqeust.getSession(false)和 request.getSession(true)

getSession()/getSession(true):当session存在时返回该session,否则新建一个 session并返回该对象。
getSession(false):当session存在时返回该session,否则返回null。

11.Page和PageContext的区别

Page是servlet对象;使用this关键字,它的作用范围是在同一页面。
PageContext是作用域通信对象;通常使用setAttribute()和getAttribute()来设置和获取存放对象的值。

12.Ajax总结

AJAX 全称: 异步JavaScript及 XML(Asynchronous JavaScript And XML)
Ajax的核心是JavaScript对象XmlHttpRequest(XHR)。
Ajax的优点:
    提高用户体验度(UE)
    提高应用程序的性能
    进行局部刷新
1、 AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的 Web 应用程序的技术。
2、 通过 AJAX,我们的 JavaScript 可使用JavaScript的XMLHttpRequest对象来直接与服务器进行通信。通过这个对象,我们的 JavaScript 可在不重载页面的情况与Web服务器交换数据,即可局部刷新。
3、 AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面,减轻服务器的负担,提升站点的性能。
4、 AJAX 可使因特网应用程序更小、更快,更友好,用户体验(UE)好。
5、 Ajax是基于标准化并被广泛支持的技术,并且不需要插件和下载小程序。

13.JSP 9大对象中四个作用域的大小与作用范围

四个作用域从大到小:appliaction>session>request>page

  • application:全局作用范围,整个应用程序共享.生命周期为:应用程序启动到停止。
  • session:会话作用域,当用户首次访问时,产生一个新的会话,以后服务器就可以记 住这个会话状态。
  • request:请求作用域,就是客户端的一次请求。
  • page:一个JSP页面。

以上作用范围使越来越小, request和page的生命周期都是短暂的,他们之间的区别就是:一个request可以包含多个page页(include,forward)。

14.List,Set,Collection,Collections [Java容器详细解析]

List和Set都是接口,他们都继承于接口Collection,List是一个有序的可重复的集合,而Set的无序的不可重复的集合。Collection是集合的顶层接口,Collections是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的,所以不能实例化。

15.OSI 的七层模型
  • 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。
  • 数据链路层:负责建立和管理节点间的链路。
  • 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。
  • 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。
  • 会话层:向两个实体的表示层提供建立和使用连接的方法。
  • 表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。
  • 应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。
16.内存泄露和内存溢出
  • 内存泄露 (memory leak),是指应用程序在申请内存后,无法释放已经申请的内存空间.一次内存泄露危害可以忽略,但如果任其发展最终会导致内存溢出(out of memory)。如读取文件后流要进行及时的关闭以及对数据库连接的释放。
  • 内存溢出(out of memory)是指应用程序在申请内存时,没有足够的内存空间供其使用。如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。
17.单例模式 *面试常叫写三个中其中某一个的代码构成!

单例就是该类只能返回一个实例。
单例所具备的特点:

  1. 私有化的构造函数
  2. 私有的静态的全局变量
  3. 公有的静态的方法

单例分为饿汉式、懒汉式和双层锁式(线程安全)

饿汉式:
public class Singleton{
      private Singleton() {};
      private static Singleton single = new Singleton();
      public static Singleton getInstance() {
          return single;
     }
 }
懒汉式:
public class Singleton{
      private Singleton() {}
      private static Singleton single=null;
      public tatic Singleton getInstance() {
           if (single == null) {  
              single = new Singleton();
          }  
         return single;
     }
 }
线程安全:
public class Singleton{
	  private Singleton() {}
	  private static Singleton single ;
	  public static Singleton getInstance() {
		if(null == single){
			synchronized(single ){
				if(null == single){
					single = new Singleton();
				}
			}
		}
		return single;
	  }
}
18.解析xml文件的几种技术

1、 解析xml的几种技术:dom4j 、sax、jaxb、jdom、dom

  • dom4j:是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
  • SAX(simple API for XML):是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂。
  • JAXB(Java Architecture for XML Binding) :是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

2、dom4j 与 sax 之间的对比:【注:必须掌握!】
dom4j不适合大文件的解析,因为它是一下子将文件加载到内存中,所以有可能出现内存溢出, sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml;也正是因为如此,所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性。所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j。

19.项目的生命周期

1). 需求分析
2). 概要设计
3). 详细设计(用例图,流程图,类图)
4). 数据库设计(powerdesigner)
5). 代码开发(编写)
6). 单元测试(junit 白盒测试)(开发人员)
svn版本管理工具(提交,更新代码,文档)
7). 集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试))
8). 上线试运行 (用户自己体验)
9). 压力测试(loadrunner)
10). 正式上线
11). 维护

20.session和cookie的区别

session:是一种将会话状态保存在服务器端的技术。客户端登录完成之后,服务器会创建对应的 session,session 创建完之后,会把 session 的 id 发送给客户端,客户端再存储到浏览器cookie 中。这样客户端每次访问服务器时,都会带着 sessionid,服务器拿到 sessionid 之后,在内存找到与之对应的 session 这样就可以正常工作了。
Cookie :是在 HTTP 协议下, Web 服务器保存在用户浏览器(客户端)上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web 站点都可以访问 Cookie 信息 。

  • 存储位置不同:session 存储在服务器端;cookie 存储在浏览器端。
  • 安全性不同:cookie 安全性一般,在浏览器存储,可以被伪造和修改。
  • 容量和个数限制:cookie 有容量限制,每个站点下的 cookie 也有个数限制。
  • 存储的多样性:session 可以存储在 Redis 中、数据库中、应用程序中;而 cookie 只能存储在浏览器中。
21.final,finally,finalize 三者区别

Final是一个修饰符:

  • 当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值
  • 当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变 量的时候给它赋值
  • 当final修饰方法时,该方法不能被重写
  • 当final修饰类时,该类不能被继承
  • Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽 象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要)
  • Final不能修饰接口,因为接口中有需要其实现类来实现的方法

Finally
Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行, 并且会在return,continue,break关键字之前执行。
finalize
Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC (garbage collector垃圾回收)运行机制的一部分,finalize()方法是在 GC清理它所从 属的对象时被调用的。

22.Io流的层次结构

在这里插入图片描述

23.JDK JRE JVM的区别

Jdk【Java Development ToolKit】就是java开发工具箱, JDK是整个JAVA的核心里边包含了jre,它除了包含jre之外还包含了一些javac的工具类,把java源文件编译成class文件,java文件是用来运行这个程序的,除此之外,里边还包含了java源生的API,java.lang.integer在rt的jar包里边【可以在项目中看到】,通过rt这个jar包来调用我们的这些io流写入写出等
JDK有以下三种版本:

  • J2SE,standard edition,标准版,是我们通常用的一个版本
  • J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序
  • J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序

Jre【Java Runtime Enviromental】是java运行时环境,那么所谓的java运行时环境,就是为了保证java程序能够运行时,所必备的一基础环境,也就是它只是保证java程序运行的,不能用来开发,而jdk才是用来开发的,所有的Java程序都要在JRE下才能运行。
包括JVM和JAVA核心类库和支持文件。与JDK相比,它不包含开发工具——编译器、调试器和其它工具。
Jvm【Java Virtual Mechinal】因为jre是java运行时环境,java运行靠什么运行,而底层就是依赖于jvm,即java虚拟机,java虚拟机用来加载类文件,java中之所以有跨平台的作用,就是因为我们的jvm。

23.报错的状态码

301 永久重定向
302 临时重定向
304 服务端 未改变
403 访问无权限
200 正常
404 路径
500 内部错误

24.为什么用eclipse重写hashCode方法,有31这个数字?
  1. 要考虑减少冲突。选择较大的系数,计算出来的hash地址就越大,就会减少冲突,查询效率也会提高;31是一个素数,素数的作用就是如果拿一个数去乘以素数,这个数只能被1,素数还有这个数本身整除,也是减少冲突。
  2. 要考虑算法效率。31可以由i*31==(i<<5)-1来表示,现在很多虚拟机都做了相关的优化,底层提高了算法的效率。
  3. 要考虑数据溢出问题。也不能选择太大的数,31值占用5bits,相乘造成数据溢出的概率也较小。
25.Static加载顺序

父类的静态代码块,子类的静态代码块,调用子类的main方法中的方法,父类的构造代码块,父类的构造器,子类的构造代码块,子类的构造器
注意:静态代码块是在类加载时加载的

26.在List内去除重复数字值

将List的值addAll到Set中,再将set放入List

27.对java.io.Serializable的理解
  1. 它用于序列化,是空方法接口,主要用在写入磁盘和网络传输数据时
  2. 实现了该接口的对象,可将它们转换成一系列字节,并可以完全恢复回原来的样子。序列化机制能自动补偿操作系统间的差异。换句话说,可以先在Windows机器上创建一个对象,对其序列化,然后通过网络发给一台Unix机器,然后在那里准确无误地重新“装配”。
  3. 该接口,也可以利用多态的性质,作为参数使接口更灵活
28.关系型数据库

在这里插入图片描述
特性:

  • 原子性(Atomicity):在sql的原子操作中,要么同时成功,要么同时失败。例:银行转帐
  • 一致性(Consistency)
  • 隔离性(Isolation)
  • 持久性(Durability)
29.NOSQL非关系型数据库

在这里插入图片描述
NoSQL特性:

  • C(Consistency):强一致性
  • A(Availability):可用性
  • P(Partition tolerance):分区容错性

*CAP的三进二理论:
任何分布式系统CAP理论只能3进2 (一个分布式系统不可能同时满足一致性、可用性、分区容错性这个三块需求,因此CAP原理将NOSQL数据库分为满足SA原则、CP原则、AP原则)

  • CA-单点集群,满足一致性和可用性,通常在扩展性上不太强大。【RDBMS】
  • CP-满足一致性和分区容错性,通常性能不是特别高。【MongoDB、HBase、Redis】
  • AP-满足可用性和分区容错性,通常可能对一致性要求要低一些。【大型的网站架构(一致性和可用性中间做一个权衡)、CouchDB、Cassandra、DynamoDB、Riak】

BASE是什么:为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案

  • 基本可用(Basically Available)
  • 软状态(Soft state)
  • 最终一致(Eventually consistency)

思想:让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上的改观。(例:放松双十一当天的数据一致性来换取淘宝的不卡,可以先把不一致性数据存在redis中,过了这段时间后再来实现双十一当天的数据一致性)
在这里插入图片描述

30.什么是分布式,什么是集群

分布式:不同的多台服务器上面部署不同的服务器模块(工程),他们之间通过RPC/RMI通信和调用,对外提供服务和组内协作。
集群:不同的多台服务器上面部署相同的服务器模块,通过分布式调度软件进行统一调度,对外提供服务和访问。

… …
总结尚未结束,后续会继续更新中!
帮助他人,快乐自己,最后,感谢您的阅读!
所以如有纰漏或者建议,还请读者朋友们在评论区不吝指出!
……
个人网站…知识是一种宝贵的资源和财富,益发掘,更益分享…

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值