面试必备:常考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.前言 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...
随机推荐
- 推荐:经典SQL语句大全
一.基础 .说明:备份sql server--- 创建 备份数据的 device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:/mss ...
- 使用.net core基于Razor Pages开发网站一些工作笔记
本文是在实践工作中遇到的一些问题记录,并给出是如何解决的,.net core已经升级到3.0版本了,其实在项目中很早就已经在使用.net core来开发后台接口了,正好有个网站项目,就使用了Razor ...
- mysql查看视图用户
select `DEFINER` from information_schema.VIEWS;
- python课堂整理9---函数1
函数 一. 函数就是为了完成某一个特定的功能 形式参数不占运行空间,只有传入实参后才占,用完立刻释放空间. 函数一遇到 return 就结束掉了 函数名() :运行函数,有返回值的话用变量承接 def ...
- java并发笔记之synchronized 偏向锁 轻量级锁 重量级锁证明
警告⚠️:本文耗时很长,先做好心理准备 本篇将从hotspot源码(64 bits)入手,通过分析java对象头引申出锁的状态:本文采用大量实例及分析,请耐心看完,谢谢 先来看一下hotspot的 ...
- FD limit (65535) too low for maxconn=65535/maxsock=131084.Please raise 'ulimit-n' to 131084 or more to avoid any trouble.
在安装完Haproxy启动时报错,诸如:FD limit (65535) too low for maxconn=65535/maxsock=131084.Please raise 'ulimit-n ...
- Linux下zookeeper下载与安装教程
原文连接:(http://www.studyshare.cn/blog-front//blog/details/1169/0)一.下载 官网下载:点这里 百度网盘下载:点这里 官网下载图示: jav ...
- ubuntu 下常用的mysql 命令
一.mysql服务操作 0.查看数据库版本 sql-> status; 1.net start mysql //启动mysql服务 2.net stop mysql //停止mysql服务 ...
- Transformations 方块转换 USACO 模拟 数组 数学 耐心
1006: 1.2.2 Transformations 方块转换 时间限制: 1 Sec 内存限制: 128 MB提交: 10 解决: 7[提交] [状态] [讨论版] [命题人:外部导入] 题目 ...
- Centos7 搭建owncloud云存储
Centos7 搭建owncloud云存储 首先准备必要的软件和资料. 这里我已经整理好了: 百度云共享 不过最好还是自己去官网上下.这里只不过是提供了快捷方式. owncloud官网:https:/ ...