• Home
  • 归档
文章检索 作品与友邻 关于我
暴君乔博客
Home 归档

Java面试题测试,你掌握了吗

发布于: 2018-11-22
更新于: 2023-07-18
文章目录
  1. 面试题目类型
    1. 笔试
    2. 错题记录

面试题目类型

笔试

print 函数内执行 i++

int i=1;
System.out.println("num is "+ ++i);
  • 上面代码输出的结果是 2.

    PS 当 ➕ 的顺序为 + + + i 时,i 就为 1

String 是 final 类吗,final 类可以继承吗

是,final 类不能继承,具体 String 的详细内容可看另外一篇文章

%与_在 sql 中各自代表了什么

前者任意数量任意字符,后者单指一个任意字符

存放对象常量的对象

字符串

String 和 StringBuffer,其中前者不可变,后者可变

字符型

Character 的包装类

数组存储

Vector 与 ArrayList 类似,实现了 list 接口,都通过数组实现,区别在于 Vector 支持线程的同步,避免多线程引起的不一致性

常见 Java 文件格式

字节码

Java 文件经过 Jvm 编译生成了字节码文件,即.class 文件,在不同操作系统的虚拟机执行时,会由操作系统再将字节码编译为机器码文件。[跨平台]

JAR

Java Archive File. Java 的文档形式,类似于 ZIP 文件,也称为文件包。唯一区别呢在于在 JAR 文件中,包含了一个 META-INF/MANIFEST.MF 文件,生成 JAR 文件的时候自动创建。

默认参数类型

整数

int

带小数

double

构造函数

调用方式
  1. 类内部使用 this.constructor()调用
  2. 子类中通过 super.constructor()调用
  3. 反射机制可以知道类的所有属性和方法,包括了构造函数

数组

复制速度

System.arraycopy>Clone>Arrays.copyOf>for循环

  1. System 调用的是 native 方法,本地方法速度最快
  2. clone 复制引用,或者调用底层函数
  3. 底层也是调了 System.arraycopy,只是额外做了 Math.min 函数
  4. for 速度之所以慢,是因为下标表示法每次都是从起点开始寻位到指定下标处(后续编译器有优化为指针形式),此外每次循环时都要判断是否达到数组最大长度和进行一次额外记录下标值的加法运算

类定义

局部变量

局部变量如果使用到就必须要初始化。

成员变量

成员变量才会在类加载时会有初始化赋值

volatile 与 synchronized
volatile synchronized
告诉当前变量在寄存器是不稳定的,要从主存读取 锁定当前变量,只有当前线程读取变量,其他线程阻塞
在变量级别 可用于变量、方法
实现变量的修改可见性,没有原子性 可保证变量的修改可见性和原子性
不会造成线程的阻塞 可能导致线程阻塞
标记的变量不会被编译器优化 可以被编译器优化[存在指令重排导致读不到完全初始化的变量情况]
public
  1. 一个类只能出现一个
多态
  1. 子类继承父类的所有成员,包括 private 权限的成员变量,但是继承的子类具有私有变量的拥有权但没有使用权
抽象类
  1. 抽象类中可以构造方法
  2. 可以存在普通属性、方法,静态属性,方法以及抽象方法
  3. 如果有一个抽象方法,那么一定为抽象类,另外抽象类不一定要有抽象方法
  4. 子类必须实现父类的抽象方法,不然也是抽象的
接口
  1. 只有方法的声明,没有方法体(Jdk8 default 另说)
  2. 只有常量 public static final
  3. 方法修饰符永远是 public
  4. 接口没有构造方法,也不能实例接口对象
  5. 接口可以实现多继承
  6. 接口的方法必须都有实现类来实现,不然只能定义为抽象类

J2EE

Web 容器

给处于其中的应用程序组件(JSP、SERVLET)提供一个环境,使得直接交互,而无需关注系统问题,比如 TOMCAT、WEBLOGIC、WEBSPHERE 等,一般这种容器都严格遵守 J2EE 规范的 WEB APPLICATION 标准

EJB 容器

Enterprise Java Bean。给运行的 EJB 各种管理功能,被容器高效管理,可以通过现有接口获得系统级别的服务。Eg:邮件服务、事务管理

JNDI

Java Naming & Directory Interface。Java 命名目录服务。主要功能是提供目录系,让其他应用在上面留下自己的索引,便于快速查找和定位分布式应用程序的功能

JTA

Java Transaction API。Java 事务服务

JAF

Java Action FrameWork. Java 安全认证框架

RMI/IIOP

Remote Method Invocation/internal 对象请求中介协议,主要用于远程调用服务

协议:采取 TCP/IP 协议
进阶版:RPC 等慢慢取缔

流

节点流

向特定地方(节点)读写数据,比如 FileReader

常用节点流
  1. 文件 FileInputStream
  2. 字符串 StringReader
  3. 数组 ByteArrayInputStream
  4. 管道 PipedInputStream
处理流

对已存在的流连接和封装,通过封装流的功能实现数据读写。比如 BufferedReader 处理流构造方法总需要带一个其他的流对象做参数。

常用处理流
  1. 缓冲流 BufferedInputStream
  2. 转换流 InputStreamReader 实现字节流和字符流之间的转换
  3. 数据流 DataInputStream 将数据类型写入到文件中

exception

20210617065220

异常的处理范围

可以将异常抛给上级方法(即方法调用者)进行处理

Statement

20210616073603

Exception

try-catch-finally 规则
  1. 只能在 try 后添加 catch 或 finally 块
  2. 按照顺序往下与 catch 块进行匹配
  3. 如果匹配了一个 catch,如没有继续 throw,则整个语句退出
  4. 除了下列情况,总将 finally 作为结束:**JVM 过早终止(调用System.exit(int));在 finally 块抛出一个未处理的异常;计算机宕机

Thread

start

开启多线程,由 JVM 执行相应的线程,线程执行情况由线程调度器决定

run

定义执行体,等同于线程处理任务逻辑的入口方法

JavaWeb

常见类
HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知;

HttpSessionBindingListener:当该对象从一个会话中被绑定或者解绑时通知该对象,这个对象由HttpSessionBindingEvent对象通知。这可能是servlet程序显式地从会话中解绑定属性的结果,可能是由于会话无效,也可能是由于会话超时;

HttpSessionObjectListener:没有该接口API;

HttpSessionListener:当web应用程序中的活动会话列表发生更改时通知该接口的实现类,为了接收该通知事件,必须在web应用程序的部署描述符中配置实现类;

HttpSessionActivationListener:绑定到会话的对象可以侦听容器事件,通知它们会话将被钝化,会话将被激活。需要一个在虚拟机之间迁移会话或持久会话的容器来通知所有绑定到实现该接口会话的属性。

内存

分配情况
内存申请过程
OOM 异常原因
  1. 年老代溢出 Javaheapspace

    设置内存参数 Xmx 过小 or 程序的内存泄漏 or 使用不当
    1. 循环上万次字符串操作
    1. 创建千万对象
    1. 在代码里申请上百M甚至上G的内存

  2. 持久代溢出 PermGenSpace

    可以设置-XX:MaxPermSize 调大 or 将 Java 类迁移到容器共享类中
    1. 持久代设置过小
    1. 动态加载大量Java类导致溢出

错题记录

import

import java.util.*
// 会引用子目录吗?
// 不会,只会引用当前目录的所有

ArrayList.remove

iterator.remove();
// 使用迭代器安全删除,搭配it.hasNext();
Java面试题测试,你掌握了吗
/archives/b4cb1e3d/
作者
tyrantqiao
发布于
2018-11-22
更新于
2023-07-18
许可协议
CC BY-NC-SA 4.0
赏

蟹蟹大佬的打赏,大家一起进步

支付宝
微信
  • Java
  • 面经

扫一扫,分享到微信

微信分享二维码
jvm学习笔记之一
面试测评常考的图像推理,如何推理解答呢!?
© 2026 tyrantqiao 本站总访问量次 本站访客数人次 载入天数...载入时分秒...
  • 文章检索
  • 作品与友邻
  • 关于我

展开标签

  • 随笔
  • 旅行
  • Java
  • 面经
  • 源码
  • 计算机网络
  • 技术
  • 架构
  • Hadoop
  • IDEA
  • maven
  • JDK
  • Linux
  • MySQL
  • 性能
  • 数据库
  • Redis
  • MQ
  • Spring
  • SquirrelFin
  • 记账
  • Android
  • 个人财务
  • unity
  • TIDB
  • chatgpt
  • 前端
  • Vue
  • Git
  • Hexo
  • shadowsocks
  • 问题排查
  • 业务
  • JVM
  • 算法
  • nginx
  • ssh
  • Python
  • 爬虫
  • test
  • vim
  • 影视剧
  • 中间件
  • 事务
  • 表达
  • 运动
  • mybatis
  • AI
  • 产品
  • 家装
  • 土巴兔
  • 域名
  • github
  • 软件
  • 个人项目
  • Leaves
  • Chrome
  • 浏览器插件
  • 开源
  • Balance Voice
  • 穿搭
  • 幽默
  • 画画
  • 缓存
  • 摄影
  • c
  • 课程设计
  • 调酒
  • 设计模式
  • 数学

Collection

作品与友邻

我做的小工具、朋友的站点和一些长期值得回访的灵感来源。

  • 土 土巴兔 AI 导购交互演示 可点击体验用户导购、平台运营、装修公司、材料商及 AI 话术知识库的多端增长流程。 /demos/tubatu-ai-guide/
  • L Leaves 行程记录 我做的行程记录页面小工具,用来沉淀旅行路线、日程安排和途中的灵感。 https://leaves.tyrantqiao.com/
  • 本 本网站主题yilia设计者的主页 http://litten.me/
tyrantqiao的头像

tyrantqiao

github rss qq mail facebook linkedin

About

关于我

代码、海浪和持续折腾,都是生活的一部分。

<div class="aboutme-card"> <p class="aboutme-eyebrow">tyrantqiao</p> <h3>Java 全栈开发</h3> <p>常年和 Java、后端服务、前端工程、数据与部署打交道,喜欢把复杂问题拆开、写清楚,也把踩坑过程整理成文章留给后来的人。</p> <div class="aboutme-tags"> <span>Java</span> <span>Full Stack</span> <span>Backend</span> <span>Frontend</span> <span>Extreme Sports</span> </div> <p>工作之外偏爱冲浪等极限运动,享受在浪上找平衡,也享受在代码里找边界。</p> <div class="aboutme-contact"> <a href="mailto:[email protected]">Gmail</a> <a href="mailto:[email protected]">QQ Mail</a> </div> </div>