本文的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. 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 clients = new ThreadLocal();

java笔试必考知识_面试必备:常考Java基础知识总结(持续更新)相关推荐

  1. mvc试图 下拉框不重复_面试前不巩固一下基础知识、刷刷题吗?

    其实面试就像一场相亲,在你心动人的面前,肯定要展示自己最好的一面,无论是穿着还是言行举止.作为一个软件开发工程师,看过很多公司的面试题,也参与过很多公司的面试,也给不少人新人面过时不试,虽说我现在并没 ...

  2. sql两个列值以下划线拼接得到一个新的列_面试必备sql知识点——MySQL基础

    在刷了上百道sql题后,发现所有的题目都是基于某一个或几个知识点来做考察的,所以理清基础的知识细节,才能在题目考察到任意知识点时,找到解决线索. 温故而知新,学习在于总结,于是我再次对已经学习过的my ...

  3. sql server 多条记录数据合并为一条_面试必备sql知识点——MySQL基础

    在刷了上百道sql题后,发现所有的题目都是基于某一个或几个知识点来做考察的,所以理清基础的知识细节,才能在题目考察到任意知识点时,找到解决线索. 温故而知新,学习在于总结,于是我再次对已经学习过的my ...

  4. 二级公共基础知识_计算机二级选择题(公共基础知识)

    在这一期的文章主要以计算机二级选择题的公共基础知识进行讲解. 在计算机二级考试当中,选择题中的二级公共基础知识是必考的部分.很多考生对计算机二级的公共基础知识选择题有很多不解.二级公共基础知识选择题主 ...

  5. 二级公共基础知识_计算机系统习题,二级公共基础知识新增章节

    计算机系统知识为二级公共基础知识2020版考试大纲[1]新增章节,以下是计算机系统的习题,选自教育部考试中心指定教材 习题 1.下对计算机中整数的表示法中,可以直接作加或运算的是 A)原码 B)反码 ...

  6. java 静态方法 调用非静态方法_面试官:为什么java中静态方法不能调用非静态方法或变量?...

    这个可能很多人之前学习jvm的时候都会遇到,属于一个小问题,写这篇文章的原因是我在看java相关的面试题目中遇到的,因此顺手总结一下: 一.例子 我们先看效果: 我们在静态方法main中调用非静态变量 ...

  7. 作为一名Java程序员,这些Spring知识点面试官常考

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 丸纸 来源 | 极客时间 毋庸置疑,Spring 早已成为 Java 后端开发事实 ...

  8. 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器

    文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...

  9. 面试必备:《Java 最常见 200+ 面试题全面解析》

    春招在即,想让面试官在短短的几十分钟内就认可你的能力? 想在最快的时间内收获 Java 技术栈最核心的知识点? 想要更全面.更深入的了解 Java 技术? 这里能够给你想要的所有答案? 给准备面试的大 ...

最新文章

  1. 2022-2028年中国UTM市场投资分析及前景预测报告
  2. 亚马逊AWS-EC2云服务器部署代理服务
  3. 安装JDK-- Java基础
  4. spingboot视图层实例(JSP+Freemaker)以及自定义配置读取
  5. 4083. 最大公约数
  6. Android,六款安卓车机大PK
  7. 基于CUDA的并行lammps编译及测试
  8. 微信带参二维码数据解析
  9. 一个DIV的芝士汉堡制作
  10. 【汇编程序】编写一个在显示器上显示的一个笑脸字符的程序
  11. RFC5766-TURN协议
  12. traceroute的一些用法
  13. Fisherface(FLD)人脸识别实验
  14. C语言二进制与十进制互相转换的方法和示例
  15. 计算机系冬日必需品,冬日集结,趣味动员
  16. 【小5聊】Sql Server 2012 更改数据类型之提示不允许保存更改解决方法
  17. 小ck活动机器人包包_怪不得小CK包包这么火,原来这么好看还百搭
  18. 【Address already in use Port 5000 is in use by another program 端口被占用问题(已解决)】
  19. python 拼音库 pypinyin 简介
  20. 项目管理理论中关于软件项目外包采购管理的探讨(转)

热门文章

  1. nodejs pm2教程(转载)
  2. JS—触摸事件、手势事件
  3. WorkSbell第10周2017
  4. DEV MessageBox
  5. 对网易云音乐软件的看法
  6. javscript 创建类的三种方法【转】
  7. git源代码控制客户端基本配置
  8. (转)如何在MySql中记录SQL日志(例如Sql Server Profiler)
  9. 【个人笔记】OpenCV4 C++ 快速入门 13课
  10. android各种组件的监听器