JDK、JRE、JVM有什么区别?

  • JDK:Java Development Kit 针对Java程序员的产品
  • JRE:Java Runtime Environment是运行Java的环境集合
  • JVM:Java虚拟机用于运行Java字节码文件,跨平台的核心

常用数字类型的区别

写出程序执行结果,并说明原因

  • 打印结果:yes
  • 分析:
    float类型在内存中的存储形式为科学计算法,表达为4.2123456E7,只保留了小数点后7位。
  • 补充:
  1. 浮点数存储分为三部分:
    符号位(Sign):0代表正数,1代表负数
    指数位(Exponent):用于存储科学计数法中的指数部分
    尾数位(Mantissa):用于存储尾数部分
  2. 单精度是1位符号,8位指数,23位小数
  3. 双精度是1位符号,11位指数,52位小数

编程题:随机生成30~100之间的整

面向对象的三大特征

  • 封装:将同一类事物的功能包装在一起,只对外提供访问接口
       好处:
       1. 实现专业的分工(你是使用者只需要关心怎么使用就行,无需了解具体实现细节)
       2. 减少代码耦合(面向接口开发,互不干扰)
       3. 可以自由修改类的内部结构(只要不影响使用者的功能,都可以随意改造)
  • 继承:从已有的类派生出新的类,新的类可以有已有类的属性和行为,并拓展新的功能
  • 多态:
       多态是同一个行为具有多个不同表现形式或形态的能力
       多态是同一个接口,使用不同的实例而执行不同操作

接口和抽象类的异

静态和实例变量(方法)的区别:

  • 语法区别:静态变量前要加static关键字,实例则不用
  • 隶属区别:实例变量属于某个对象的属性,而静态属于类
  • 运行区别:静态变量在JVM加载类时创建,实例变量在实例化对象时创建
  • 位置区别:静态变量存放在JVM方法区,无法被回收;实例变量存放在堆中,不用就被回收

父子类实例化过程分析

public class Parent {
private static String name = initName();
private int age = initAge();
private static String initName(){
System.out.println("1父类静态变量初始化");
return "程序员Forlan";
}
private int initAge(){
System.out.println("2父类普通变量初始化");
return 100;
}
static {
System.out.println("3父类静态代码块");
}
{
System.out.println("4父类非静态代码块");
}
public Parent(){
System.out.println("5父类构造函数");
}
}
public class Son extends Parent{
private static String name = initName();
private int age = initAge();
private static String initName(){
System.out.println("6子类静态变量初始化");
return "程序员Forlan";
}
private int initAge(){
System.out.println("7子类普通变量初始化");
return 100;
}
static {
System.out.println("8子类静态代码块");
}
{
System.out.println("9子类非静态代码块");
}
public Son(){
System.out.println("10子类构造函数");
}
} public static void main(String[] args) {
new Son();
}

  • 输出结果顺序为:13682457910
  • 三个原则:
    静态优先
    父类优先
    非静态块优先于构造函数
  • 注意:
    静态变量和静态代码块,谁写前面谁先执行
    非静态变量和非静态代码块,谁写前面谁先执行

JAVA异常体系

String中“==” 和equals程序分析

  • 结果:
    true
    true
    false
    true
    false
  • 分析:
    ==比较的是地址,equals比较的是值
    创建后就不可变(被final修饰),保存在方法区中的常量池
    s2是引用类型,Java编译器在编译期间无法确定数值,只有在运行时才能确定具体的值,所以s2+"def"会产生一个新的内存地址,分配给s5
    new String()创建的字符串不保存在常量池

String、StringBuilder、StringBuffer的区别

List和Set的区别

Lsit比较

Set比较

Object类hashCode()和equals()的区别

  • equals()方法用来判断两个对象是否相同
  • hashCode()返回一个int,代表该对象的内部地址

Java IO中有几种类型的流

JVM的内存组成

  • 共享区:对于所有线程都可以访问的
  1. 堆:用于保存程序运行时的变量
  2. 方法区:包含静态内容
  • 私有区:对于线程来说是私有的,其他线程无法直接访问
  1. 程序计数器:行号计数器,在程序跳转时,我们要记住跳转行号是多少,方便程序进行还原
  2. 虚拟机栈:包含方法执行时的状态,每个方法都会形成一个栈帧
  3. 本地方法栈:用于在调用操作系统级别的底层方法,才会存放方法的栈帧

Java垃圾回收

  • GC(Garbage Collection)用于回收不再使用的内存
  • GC负责3项任务:分配内存、确保引用、回收内存
  • GC回收是依据某个没有任何引用,则可以被回收
  • 通过有向图记录对象,判断是否可达

垃圾回收(GC)算法

  • 标记-清除算法
  • 复制算法
  • 标记-整理算法
  • 分代收集算法
    详细可看https://www.cnblogs.com/huozhonghun/p/JVM2.html

Java中内存泄露的场景

  • 静态集合类
  • 各种连接
  • 监听器
  • 不合理的作用域

对象的浅复制与深复制区别

  • 浅复制:只对对象及变量值进行复制,引用对象地址不变
  • 深复制:不仅对象及变量值进行复制,引用对象也进行复制

感谢耐心观看!!!
如有不足,欢迎指出,一起成长!
如有帮助,请点赞给予支持,感谢!

Java开发工程师面试-基础的更多相关文章

  1. JAVA开发工程师面试(1)

    我已经有很长一段时间没有更新博客了,难道是博主我变懒惰了吗?哎,这样可不行啊,我还有好多知识要学习,要和大家分享.以后我需要更加努力,改掉自己的惰性.本人文采不怎么样,只能是把自己所想的说出来,想和大 ...

  2. Java开发工程师面试-Web基础与数据处理

    Servlet执行流程 客户端浏览器向Tomcat服务器发送Http请求 Tomcat解析web.xml文件,找到对应的url以及servlet-name,根据servlet-name找到对应的ser ...

  3. Java高级开发工程师面试笔记

    最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...

  4. 阿里巴巴-OS事业群-OS手机事业部-系统服务部门招聘Java开发工程师,有意者请进来

    我是阿里巴巴-OS事业群-OS手机事业部-系统服务部的开发工程师,正在招聘Java开发工程师. 以下是职位描述: 岗位名称:Java开发工程师 招聘人数:5人 生效日期:2014-03-12 结束日期 ...

  5. 知名互联网公司校招 Java 开发岗面试知识点解析

    天之道,损有余而补不足,是故虚胜实,不足胜有余. 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几 ...

  6. Java开发岗面试知识点解析

    本文作者参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 高并发编 ...

  7. Java 开发岗面试知识点

    本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向.在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点. 主要包括以下几个部分: Java 基础知识点 Java 常见集合 ...

  8. 简历编写技巧-java开发工程师简历实战

    看到一遍简历编写的文章 想到也快找工作了 早晚能够用上 现在摘录如下 640?wx_fmt=jpeg 工欲善其事,必先利其器,这是自古以来的道理.所以如果想找到一份好的工作,一定要先整理一份好的简历. ...

  9. 珍藏版 Python 开发工程师面试试题

    珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...

随机推荐

  1. node.js & Unbuntu Linux & nvm & npm

    node.js & Unbuntu Linux & nvm & npm https://websiteforstudents.com/install-the-latest-no ...

  2. Flutter 在同一页面显示List和Grid

    import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends State ...

  3. postman 发送数组

    原文 users[]:aa users[]:22 object[] // { users: [ { name: ' "ajanuw"', pwd: ' "aaa" ...

  4. Java对象内存布局

    本文转载自Java对象内存布局 导语 首先直接抛出问题 Unsafe.getInt(obj, fieldOffset)中的fieldOffset是什么, 类似还有compareAndSwapX(obj ...

  5. 使用 Castle 实现 AOP,以及 Autofac 集成 Castle

    Castle 是 2003 年诞生于 Apache Avalon 项目,目的是为了创建一个IOC 框架.发展到现在已经有四个组件: ORM组件:ActiveRecord IOC组件:Windsor 动 ...

  6. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

  7. IDEA如何快速查看类中的属性和方法?

    在idea中,当需要快速的查看一个类的所有属性和方法时,直接去代码中查看,就显得非常的麻烦,idea是有快捷键的,可显示所有的属性和方法,方法如下. 打开一个类,使用快捷键ALT+7,就可以在左侧看到 ...

  8. Java后台防止客户端重复请求、提交表单

    前言 在Web / App项目中,有一些请求或操作会对数据产生影响(比如新增.删除.修改),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱. 常见处理方案 1 ...

  9. Go | Go 结合 Consul 实现动态反向代理

    Go 结合 Consul 实现动态反向代理 代理的核心功能可以用一句话概括:接受客户端的请求,转发到后端服务器,获得应答之后返回给客户端. Table of Contents 反向代理 实现逻辑 Go ...

  10. linux之安装nginx

    nginx官网:http://nginx.org/en/download.html 1.安装nginx所需环境 a)  PCRE pcre-devel 安装 # yum install -y pcre ...