面试必备:常考Java基础知识总结(持续更新)
本文的Java方面基础知识是我在面试过程中的积累和总结。
- 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 |
- 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}.
- static关键字
static意思是静态的,全局的。一旦被static修饰,说明被修饰的东西在一定范围内是共享的,谁都可以访问。static可以修饰类变量、方法和方法块。
static修饰变量的时候,如果该变量是public的话,表示改变量可以被任何类访问,而无需初始化类,直接使用 类名.变量名进行访问。
static修饰方法的时候,代表该方法和当前类是无关的,如果方法又被public修饰,那么任何类都可以访问该方法。static方法内部只能调用static方法,不能调用普通方法。
static修饰方法块的时候,该段代码被称为静态代码块。静态代码块常用于在类启动之前的初始化工作。
- final关键字
final修饰的类叫最终类,不能被继承;
final修饰的方法不能被重写;
final修饰的变量叫常量,常量必须被初始化,初始化之后值不能被修改。
- 重写和重载
重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写。
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
重载(Overload)是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
被重载的方法必须改变参数列表(参数个数或类型不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。
- BIO、NIO、AIO区别
BIO:Block IO,同步阻塞式IO,模式简单,使用方便,并发处理能力低
NIO:NEW IO,同步非阻塞IO,传统IO的升级,客户端和服务器端通过Channel通讯,实现多路复用
AIO:Asynchronous是NIO的升级,实现异步非阻塞IO,异步IO的操作基于时间和回调机制。
- String、StringBuffer、StringBuilder的区别
String和StringBuffer、StringBuilder的区别在于String声明的是不可变对象,每次操作都会生成新的String对象;而StringBuffer和Stringbuilder可以在原有对象的基础上进行操作,所以经常改变字符串内容的情况下最好不用String。
StringBuffer和StringBuilder的最大区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但是StringBuilder的性能高于StringBuffer,所以在单线程环境下推荐使用Stringbuilder,多线程环境下推荐使用StringBuffer。
- 接口和抽象类区别
实现:抽象类的子类使用extends来继承;接口必须使用implements来实现接口
构造函数:抽象类可以有构造函数;接口不能有
实现数量:类可以实现多个接口;但是只能继承一个抽象类,Java是单继承
访问修饰符:接口中的方法默认是public修饰;抽象类中的方法可以是任意访问修饰符
- TCP为什么要三次握手,两次不行吗?
如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。如果采用三次握手,服务端没有收到客户端的再次确认,就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。
- 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基础知识总结(持续更新)的更多相关文章
- Java基础知识(持续更新中...)
1.成员变量:全局变量/字段(Field),不要称之为属性(错误)直接定义在类中,方法外面 1.类成员变量 使用static修饰的变量 2.实例成员变量 没用使用static修饰的变量 局部变量 ...
- [JavaCore] 不错的Java基础学习资料-持续更新
容易弄混的JAVA基础知识: http://www.iteye.com/topic/943647 [总结]String in Java: http://www.iteye.com/topic/5221 ...
- 数据库和SQL面试题基础知识(持续更新)
数据库方面基础知识复习 常问小问题: 一.like查询大小写问题: sql查询结果去重 SELECT distinct name FROM 表:平均数avg 一.like查询大小写问题: ①用bina ...
- C++ 基础知识汇总 持续更新
摘录一些C++面试常考问题,写一些自己的理解,花了挺长时间的,作图是真的累,欢迎来摘果子. static关键字 用于声明静态对象: 静态函数只在本文件可见.(默认是extern的) 全局静态对象:全局 ...
- Python 基础知识(持续更新中)
内置数据类型: 整型 浮点型 字符串 布尔值 空值 None 列表 list 元组 tuple 字典 dict 集合 set ...
- Python 基础知识 (1) 持续更新
(1)数字和表达式 当进入Python交互式的时候,Python就可以直接当成计算机使用 如 >>> 2 + 2 4 但是 当 1个整数 和 另外一个整数 相除的时候,计算的结果,只 ...
- web-信息泄露基础知识总结(持续更新)
web-信息泄露 1.git泄露 Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等.发布代码的时候,如果没 ...
- 高端面试必备:一个Java对象占用多大内存
这个问题一般会出现在稍微高端一点的 Java 面试环节.要求面试者不仅对 Java 基础知识熟悉,更重要的是要了解内存模型. Java 对象模型 HotSpot JVM 使用名为 oops (Ordi ...
- Java基础知识常见面试题汇总第一篇
[Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...
随机推荐
- linux初学者-输出输入管理
1.输出重定向 在linux中,因为用户的权限不同,所以访问某些文件或者目录会被拒绝而形成错误输出,这些错误的输出也会显示出来.一般正确输出的编号为1,错误输出的编号为2.如下图,在普通用户stu ...
- 备战金九银十,Java研发面试题(Spring、MySQL、JVM、Mybatis、Redis、Tomcat)[带答案],刷起来!
八月在即,马上就是"金九银十",又是跳槽招聘季.咱们这行公认涨薪不如跳槽加的快.但不建议频繁跳槽,还是要学会融合团队,抓住每个机会提升技能. 苏先生在这里给大家整理了一套各大互联网 ...
- jsp数据交互(一).2
01.什么是JSP内置对象(jsp核心)? Java 内置对象 Java 作用域 解析:jsp内置对象是web容器创建的一组对象.我们都知道tomcat这款软件可以看成是一种web容器,所以我们可以 ...
- 实战SpringCloud响应式微服务系列教程(第二章)
接上一篇:实战SpringCloud响应式微服务系列教程(第一章) 1.1.2背压 背压是响应式编程的核心概念,这一节也是我们了解响应式编程的重点. 1.背压的机制 在生产者/消费者模型中,我们意识到 ...
- 【iOS】图片缩放动画
iOS 开发中,可用 UIView 的下述方法实现图片的缩放动画效果: + transitionWithView:duration:options:animations:completion: 示例代 ...
- Linux 常用命令及使用方法
1. type :查询命令 是否属于shell解释器 2. help : 帮助命令3. man : 为所有用户提供在线帮助4. ls : 列表显示目录内的文件及目录 -l 以长格 ...
- RocketMQ中Broker的启动源码分析(二)
接着上一篇博客 [RocketMQ中Broker的启动源码分析(一)] 在完成准备工作后,调用start方法: public static BrokerController start(Broker ...
- 佳木斯集训Day1
23333第一次写博客 其实在佳木斯集训之前我都已经两三个月没打代码了 在佳木斯的时候前几天真心手生,导致了前几次考试考的很差... D1的考试还是比较良心的,T1是一道大模拟,直接枚举最后几位是00 ...
- Netty学习(五)-DelimiterBasedFrameDecoder
上一节我们说了LineBasedframeDecoder来解决粘包拆包的问题,TCP以流的方式进行数据传输,上层应用协议为了对消息进行区分,一般采用如下4种方式: 消息长度固定,累计读取到消息长度总和 ...
- Linux常用命令之权限管理
在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录,这也让linux更安全.下面主要讲解下常用的权限命令chgrp,chmod,chown . 1.文 ...