本文的Java方面基础知识是我在面试过程中的积累和总结。

  1. Java基本数据类型、所占空间大小及对应包装类
基本类型 大小 包装类
boolean - Boolean
char 16-bit Character
byte 8 bits Byte
short 16 bits Short
int 32 bits Integer
long 64 bits Long
float 32 bits Float
double 64 bits Double
  1. HashMap和Hashtable的区别
  • 存储:HashMap允许key和value为null;而Hashtable不允许。
    public synchronized V put(K key, V value) {
// Make sure the value is not null
if (value == null) {
throw new NullPointerException();
}
...
  • 线程安全:Hashtable为线程安全的,而HashMap是线程不安全的。
  • 推进使用:Hashtable是保留类不建议使用,推荐在单线程环境下使用HashMap代替,如果需要多线程使用则用ConcurrentHashMap代替。
 * Java Collections Framework</a>.  Unlike the new collection
* implementations, {@code Hashtable} is synchronized. If a
* thread-safe implementation is not needed, it is recommended to use
* {@link HashMap} in place of {@code Hashtable}. If a thread-safe
* highly-concurrent implementation is desired, then it is recommended
* to use {@link java.util.concurrent.ConcurrentHashMap} in place of
* {@code Hashtable}.
  1. static关键字

static意思是静态的,全局的。一旦被static修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问。static可以修饰类变量、方法和方法块。

static修饰变量的时候,如果该变量是public的话,表示改变量可以被任何类访问,而无需初始化类,直接使用 类名.变量名进行访问。

static修饰方法的时候,代表该方法和当前类是无关的,如果方法又被public修饰,那么任何类都可以访问该方法。static方法内部只能调用static方法,不能调用普通方法。

static修饰方法块的时候,该段代码被称为静态代码块。静态代码块常用于在类启动之前的初始化工作。

  1. final关键字

final修饰的类叫最终类,不能被继承;

final修饰的方法不能被重写;

final修饰的变量叫常量,常量必须被初始化,初始化之后值不能被修改。

  1. 重写和重载

重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

重载(Overload)是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载规则:

被重载的方法必须改变参数列表(参数个数或类型不一样);

被重载的方法可以改变返回类型;

被重载的方法可以改变访问修饰符;

被重载的方法可以声明新的或更广的检查异常;

方法能够在同一个类中或者在一个子类中被重载。

无法以返回值类型作为重载函数的区分标准。

  1. BIO、NIO、AIO区别

BIO:Block IO,同步阻塞式IO,模式简单,使用方便,并发处理能力低

NIO:NEW IO,同步非阻塞IO,传统IO的升级,客户端和服务器端通过Channel通讯,实现多路复用

AIO:Asynchronous是NIO的升级,实现异步非阻塞IO,异步IO的操作基于时间和回调机制。

  1. String、StringBuffer、StringBuilder的区别

String和StringBuffer、StringBuilder的区别在于String声明的是不可变对象,每次操作都会生成新的String对象;而StringBuffer和Stringbuilder可以在原有对象的基础上进行操作,所以经常改变字符串内容的情况下最好不用String。

StringBuffer和StringBuilder的最大区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但是StringBuilder的性能高于StringBuffer,所以在单线程环境下推荐使用Stringbuilder,多线程环境下推荐使用StringBuffer。

  1. 接口和抽象类区别

实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口

构造函数:抽象类可以有构造函数;接口不能有

实现数量:类可以实现多个接口;但是只能继承一个抽象类,Java是单继承

访问修饰符:接口中的方法默认是public修饰;抽象类中的方法可以是任意访问修饰符

  1. TCP为什么要三次握手,两次不行吗?

如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。如果采用三次握手,服务端没有收到客户端的再次确认,就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。

  1. ThreadLocal类

当访问共享的可变数据的时候,通常需要使用同步技术。一种避免使用同步的方式就是不共享数据。如果仅在单线程内访问数据,就不需要同步了。这种技术被称为线程封闭技术,它是实现线程安全性的最简单方式之一。当某个对象封闭在一个线程中,这种用法将自动实现线程安全性,即使被封闭的对象本身并不是线程安全的。

线程封闭技术的常见应用是JDBC的Connection对象。典型应用场景是这样的,线程从连接池中获得一个Connection独享,并且用该对象来处理请求,使用完后再将对象返还给连接池。

ThreadLocal类是Java语言提供的一种线程封闭技术。这个类提供了get的set等访问接口或方法,这些方法为每个使用该变量的线程都存有一分独立的副本,因此总是返回有当前执行线程在调用set时候设置的最新值。

	private static final ThreadLocal threadSession = new ThreadLocal();

    public static Session getSession() throws InfrastructureException {
Session s = (Session) threadSession.get();
try {
if (s == null) {
s = getSessionFactory().openSession();
threadSession.set(s);
}
} catch (HibernateException ex) {
throw new InfrastructureException(ex);
}
return s;
}

private static final ThreadLocal<HttpClient> clients = new ThreadLocal<HttpClient>();

面试必备:常考Java基础知识总结(持续更新)的更多相关文章

  1. Java基础知识(持续更新中...)

    1.成员变量:全局变量/字段(Field),不要称之为属性(错误)直接定义在类中,方法外面 1.类成员变量    使用static修饰的变量 2.实例成员变量 没用使用static修饰的变量 局部变量 ...

  2. [JavaCore] 不错的Java基础学习资料-持续更新

    容易弄混的JAVA基础知识: http://www.iteye.com/topic/943647 [总结]String in Java: http://www.iteye.com/topic/5221 ...

  3. 数据库和SQL面试题基础知识(持续更新)

    数据库方面基础知识复习 常问小问题: 一.like查询大小写问题: sql查询结果去重 SELECT distinct name FROM 表:平均数avg 一.like查询大小写问题: ①用bina ...

  4. C++ 基础知识汇总 持续更新

    摘录一些C++面试常考问题,写一些自己的理解,花了挺长时间的,作图是真的累,欢迎来摘果子. static关键字 用于声明静态对象: 静态函数只在本文件可见.(默认是extern的) 全局静态对象:全局 ...

  5. Python 基础知识(持续更新中)

    内置数据类型:     整型     浮点型     字符串     布尔值     空值 None     列表 list     元组 tuple     字典 dict     集合 set   ...

  6. Python 基础知识 (1) 持续更新

    (1)数字和表达式 当进入Python交互式的时候,Python就可以直接当成计算机使用 如 >>> 2 + 2 4 但是 当 1个整数 和 另外一个整数 相除的时候,计算的结果,只 ...

  7. web-信息泄露基础知识总结(持续更新)

    web-信息泄露 1.git泄露 Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等.发布代码的时候,如果没 ...

  8. 高端面试必备:一个Java对象占用多大内存

    这个问题一般会出现在稍微高端一点的 Java 面试环节.要求面试者不仅对 Java 基础知识熟悉,更重要的是要了解内存模型. Java 对象模型 HotSpot JVM 使用名为 oops (Ordi ...

  9. Java基础知识常见面试题汇总第一篇

    [Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...

随机推荐

  1. JAVA-注解(2)-自定义注解及反射注解

    自定义注解开发 1.开发一个注解类 开发一个注解类的过程,非常类似于开发一个接口,只不过需要通过@interface关键字来声明 2.使用元注解修饰注解的声明 所谓的原注解是用来修饰注解声明的注释,可 ...

  2. ioc和aop的区别

    IoC,(Inverse of Control)控制反转,其包含两个内容:其一是控制,其二是反转.在程序中,被调用类的选择控制权从调用它的类中移除,转交给第三方裁决.这个第三方指的就是Spring的容 ...

  3. 实战SpringCloud响应式微服务系列教程(第二章)

    接上一篇:实战SpringCloud响应式微服务系列教程(第一章) 1.1.2背压 背压是响应式编程的核心概念,这一节也是我们了解响应式编程的重点. 1.背压的机制 在生产者/消费者模型中,我们意识到 ...

  4. 【iOS】NSNotification 常用方法

    NSNotification 常用的几个方法,代码如下: // 发送通知 [[NSNotificationCenter defaultCenter] postNotificationName:@&qu ...

  5. 提交bug的标准及书写规范

    Bug有效性 1.交付过程中测试者需按照专家设定好的模块,对Bug进行归类提交: 2.Bug的类型默认为UI问题.功能问题.崩溃问题,提交Bug时不能弄错: 3.需求是否明确.前提条件是否满足.输入数 ...

  6. 01-Spring Security框架学习

    目录 01-Spring Security框架学习 简介 Spring Security 是什么 Spring Security 解决那些问题 Spring Security 的优点 历史背景 Spr ...

  7. MariaDB 修改存储路径后启动失败问题解决

    修改 MariaDB 路径到 home 路径下, 执行 systemctl start mariadb 启动MariaDB 时,报错提示: Job for mariadb.service failed ...

  8. 自己动手写Spring框架--IOC、MVC

    对于一名Java开发人员,我相信没有人不知道 Spring 框架,而且也能够轻松就说出 Spring 的特性-- IOC.MVC.AOP.ORM(batis). 下面我想简单介绍一下我写的轻量级的 S ...

  9. Hystrix超时测试

    package com.cookie.test; import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.Hystr ...

  10. hadoop学习(七)----mapReduce原理以及操作过程

    前面我们使用HDFS进行了相关的操作,也了解了HDFS的原理和机制,有了分布式文件系统我们如何去处理文件呢,这就的提到hadoop的第二个组成部分-MapReduce. MapReduce充分借鉴了分 ...