原文:https://blog.csdn.net/u012102104/article/details/79772903

八种基本数据类型的大小,以及他们的封装类

类 型 大小 封 装 类
byte 1字节 Byte
short 2字节 Short
int 4字节 Integer
long 8字节 Long
float 4字节 Float
double 8字节 Double
char 2字节 Character
boolean Boolean

Java与C++对比

比较点 Java C++
面向对象思想 完全对象化 可采用非面向对象(兼容C)
内存管理机制 Java自身管理 程序员管理
异常机制 完善 欠缺
第三方库 丰富(Log、JUnit等等) 较少(STL)
执行效率
操控底层 麻烦 方便

Java面向对象(四个基本特性)

  1. 封装:将客观事物包装成类,隐藏具体实现,提供操作接口。
  2. 继承:子类获得父类的属性和行为(extends)。
  3. 多态:同一行为多种表现形式。
    • 重写Override
    • 接口的不同实现implements
    • 抽象类和抽象方法abstract
  4. 抽象:用代码描述客观事物。包括数据抽象(属性)和过程抽象(行为)。

Java 8新特性

  • 默认方法:在接口里面有了一个实现的方法
  • Lambda 表达式:Lambda允许把函数作为一个方法的参数
  • Stream API:把真正的函数式编程风格引入到Java中
  • Date Time API:加强对日期与时间的处理
  • Optional 类:Optional 类已成为 Java 8类库的一部分,用来解决空指针异常
  • 方法引用:可以直接引用已有Java类或对象的方法或构造器
  • 新编译工具:Nashorn引擎(一个新的JavaScript引擎)、 类依赖分析器

各种比较

Override和Overload的区别

比较点 Override Overload
中文 重写 重载
方法名 相同 相同
形参 相同 不同
返回类型 相同 可同可不同

Override 典型例子:接口方法的重写
Overload 典型例子:构造方法的重载

Interface与abstract类的区别

比较点 Interface abstract类
中文 接口 抽象类
能否实例化 不能 不能
方法能否实现 Java 8 可以 可以
一个类可以 implements多个 extends一个

equals()与==的区别

  equals()用于比较对象(内容),==常用于比较原生类型(地址)。简单的说,==比较两个人的DNA,equals()一般用来比较两个人身高体重等等,可自定义。

int x = 10;
int y = 10;
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
String str4 = new String("abc");

// == 比较两个(基本数据类型)地址值
System.out.println(x y); // true
System.out.println(str1 str2); // true
System.out.println(str3 == str4); // false

// String重写的equals()比较两个对象内容
System.out.println(str1.equals(str2)); // true
System.out.println(str3.equals(str4)); // true

要注意Object类中equals()即为==equals()是可以重写(Override)的。

String、StringBuffer、StringBuilder

比较点 String StringBuffer StringBuilder
底层实现 final char value[] char[] value char[] value
可变性(参考底层) 不可变 可变 可变
修改时 不会改变自身 改变自身 改变自身
安全性 线程安全 线程安全 非线程安全
使用场景 少量数据 多线程大量数据 单线程大量数据
String str = "abc"; // str只是一个String对象的引用
str = "xyz"; // 创建了新对象"xyz",而引用str重新指向新对象

Java的四种引用

比较点 强引用 软引用 弱引用 虚引用
特性 不会被回收 内存足则不回收,内存不足则回收 一旦发现便回收 必须和引用队列联合使用
使用场景 平时工作接触的最多(new) 可用来实现内存敏感的高速缓存 常用于Map数据结构中,引用占用内存空间较大的对象 跟踪对象被回收的活动

comparable接口和comparator接口

  • Comparable:在集合内部实现排序的接口,位于java.lang包。
  • Comparator:在集合外部实现排序的比较器接口,位于java.util包。
public class Person implements Comparable {String name;int age;

//使用Collections.sort(personList)即可排序

public class Person {String name;int age;static class PersonComparator implements Comparator {@Overridepublic int compare(Object o1, Object o2) {// 使用字符串的比较int i = ((Person) o1).name.compareTo(((Person) o2).name); if (i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果return ((Person) o1).age - ((Person) o2).age;} else {return i; // 名字不一样, 返回比较名字的结果.}}}
}//使用Collections.sort(list, new Person.PersonComparator())即可排序

Arrays内使用双轴快排(DualPivotQuicksort),两个中心点三段数据。

Java IO与BIO,NIO,AIO分别是什么

  Java中IO是以流为基础进行输入输出的,在网络编程中,接触到最多的就是利用Socket进行网络通信开发,主要有BIO、NIO、AIO三种实现方式。

比较点 BIO NIO AIO
中文 阻塞IO 非阻塞IO 异步IO
版本 JDK 1.4提出 JDK 1.7 提出
描述 服务端每次都需要创建一个线程来建立连接并处理消息。若建立连接、读写数据时发生阻碍,线程会阻塞。并发情况下,N个连接需要N个线程来处理。 使用一个线程来管理所有的Socket 通道,也就是基于Selector机制,查询到事件时(连接、读写),转发给不同的处理线程(Handler)。 在进行读写操作时,只需要调用相应的read/write方法,并传入CompletionHandler(动作完成处理器),在动作完成后会调用CompletionHandler。

序列化与反序列化

  序列化即把对象转换为字节序列;反序列化即把字节序列恢复为对象。其使用场景大致有如下几种:

  • 把内存中的对象状态保存到文件或者数据库中。
  • 用套接字在网络上传送对象。
  • 通过RMI传输对象。

JVM会把字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化。

Java反射机制

  在运行状态中,对于任意一个类,都能够知道其所有属性和方法;对于任意一个对象,都能够调用其任意方法和属性。这种动态获取信息及动态调用对象方法的功能称为Java语言的反射机制。Java反射API如下:

  • Class:反射的核心类。
  • Field:类的成员变量。
  • Method:类的成员方法。
  • Constructor:类的构造方法。
/**获取Class对象的三种方式**/

// 1. 调用某个对象的getClass()方法
Class clazz = person.getClass();

// 2. 调用某个类的class属性
Class clazz = Person.class;

// 3. 使用Class类的forName()静态方法
Class clazz = Class.forName(“Person”);

  反射机制主要提供了以下功能:

  1. 在运行时判断任意一个对象所属的类。
  2. 在运行时构造任意一个类的对象。
  3. 在运行时判断任意一个类所具有的成员变量和方法。
  4. 在运行时调用任意一个对象的方法。
  5. 生成动态代理。

Java异常机制

Error与Excption包结构

  1. Error:程序无法处理的错误,继承自Throwable。

  2. Exception:程序可以处理的异常,继承自Throwable。
    1. Checked Exception:受检异常,需要强制catch,是Exception的子类。
    2. Unchecked Exception:不受检异常,无需强制catch,是RuntimeException的子类。

    例如list.size()语句,若list为null,则会出现NullPointerException(Unchecked Exception)

if (ex instanceof RuntimeException){// ex is unchecked exception
} else if (ex instanceof Exception){// ex is checked exception
} else {// ex is a error
}

哪些情况会导致OOM或SOF,怎么解决

OutOfMemory(OOM)

  • Java堆溢出:一般由于内存泄露或者堆的大小设置不当引起。可以通过虚拟机参数-Xms-Xmx等设置堆大小。
  • 方法区溢出:包括运行时常量池溢出,一般由于大量动态生成的Class导致。可以通过-XX:PermSize-XX:MaxPermSize限制方法区的大小。

使用JConsole生成Heap Dump文件,然后使用MAT分析排查

StackOverflow(SOF)

  • Java虚拟机栈和本地方法栈内存溢出:一般是由于程序中存在死循环或者深度递归调用造成的,栈设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈大小。

JNI的使用

  JNI (Java Native Interface)允许Java代码和其他语言代码(主要是C和C++)进行交互。

  1. 定义本地native方法
  2. 用javah命令生成.h头文件,拷贝至jni目录
  3. 在jni目录中编写.c文件
  4. 在jni目录中创建Android.mk文件,声明所引用的.c文件和生成的函数库名
  5. 创建Application.mk文件,声明支持的平台(armeabi、armeabi-v7a、x86)
  6. 使用ndk工具编译生成.so成动态链接库文件

Java 面试之语言基础相关推荐

  1. Java面试之语言基础

    文章目录 Java八种基本数据类型 Java三大基础特性 面向对象和面向过程的区别 面向过程 面向对象 Java与C++对比 Java8 新特性 Java反射机制 Java异常机制 Throwable ...

  2. [Java面试三]JavaWeb基础知识总结.

    [Java面试三]JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Int ...

  3. Java回炉之语言基础

    Java回炉之语言基础 Java回炉之语言基础 DOS命令 java编译过程 path和classpath的区别 关键字表 数据类型 位运算 算数优先级 内存划分 类的初始化过程 static关键字特 ...

  4. Java之J2se-Java语言基础(程序结构) 教学视频发布了,请小伙伴们前往观看

    Java之J2se-Java语言基础(程序结构) 教学视频发布了,请小伙伴们前往观看 视频地址如下: http://v.youku.com/v_show/id_XODA5NTM3NTAw.html

  5. Java核心技术笔记 语言基础

    <Java核心技术 卷Ⅰ> 第3章 Java 的基本程序设计结构 一些规则 类命名:CamelCase 驼峰命名法,以及必须是字母开头,后面跟字母和数字的任意组合: 源代码文件名:必须与公 ...

  6. java 考试题_JAVA语言基础内部测试题(50道选择题)

    JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...

  7. java面试必知--基础

    1 / 66 Java 基础知识总结 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的 j ...

  8. Flask实现个人博客系统(附源码),java面试说我基础太差

    登录 {% endif %} {% block content %} {# 其他页面内容 #} {% endblock %} 这里页面使用了Layui定义了一个导航栏,展示了对应的功能模块.其中{% ...

  9. Java面试三件套:基础+多线程+___?

    Netty easy of use! 面试官 不不不,咱得跟我聊聊BIO.NIO.SELECT.EPOLL Netty quick and easy development of network ap ...

最新文章

  1. android studio控件使用方法,android studio使用教程
  2. golang中的优雅中止
  3. matlab 设置legend(比较全面)
  4. 虚拟机3种网络模式(桥接、nat、Host-only)
  5. Attribute is missing the Android namespace prefix
  6. VMware 报错“Intel VT-x处于禁止状态”
  7. mysql join using temporary 优化_MySQL 在 INNER JOIN 场景的使用-爱可生
  8. 开课吧python小课学了有用吗-(内推实习)年薪30万,大量缺人,这个技能在金融圈到底有多吃香?...
  9. c语言中*在变量的右上角,C语言中变量的声明和定义
  10. LINUX FFMPEG编译汇总(中等,只编译必要的部分)
  11. 【安装sql 2008步骤】
  12. java笔试记录(基础知识复习)
  13. 时光倒流我这么学java
  14. 【2022-01-06】JS逆向之QCC请求头参数
  15. ps快捷键及相关基础知识总结(持续ing)
  16. 计算机鼠标装有,计算机插入鼠标时无法安装设备驱动程序的解决方法
  17. 比有钱更重要的,是拥有“选择权”(深度好文)
  18. 使用vue实现简单的图书管理
  19. jstl依赖_[JSTL表达式]
  20. 一寸Timing一寸金,寸金能买寸光阴——CCD

热门文章

  1. 润乾单查日期特别慢_SQL编写不合理导致历史日志查询特别慢
  2. python提供两个对象身份比较操作符_标准类型对象比较操作符
  3. tcp丢包一定会断线吗_有遗传就一定会脱发吗
  4. oracle java javapath_系统找不到C:\ProgramData\Oracle\Java\javapath\java.exe问题及解决方案...
  5. leetcode刷题六z字形变换
  6. 从golang-gin-realworld-example-app项目学写httpapi (四)
  7. C++基于TCP和UDP的socket通信
  8. javascript使用闭包模拟私有属性和方法
  9. ubuntu 下重装mysql若干问题
  10. 内卷、996的背后,AI技术该如何服务企业“人、财、物”?