JAVA基础面试部分(多线程、算法、网络编程提出去了,详细分类见《面经》

一、Java底层基础题

JDK和JRE区别?

1.JDK是整个JAVA的核心,包括了Java运行环境JRE,一堆Java工具和Java基础的类库。
通过JDK开发人员将源码文件(java文件)编译成字节码文件(class文件)。
2.JRE是Java运行环境,不含开发环境,即没有编译器和调试器。将class文件 加载到内存准备运行。

初始化与清理

抽象类与接口的区别是什么?

https://baijiahao.baidu.com/s?id=1620965468190584914&wfr=spider&for=pc

Java中存储金额用什么数据类型?

BigDecimal

3 * 0.1 == 0.3 将会返回什么?

false,因为有些浮点数不能完全精确的表示出来

final关键字,抽象类可以使用final修饰吗?

1.用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的 值无法被改变。
对于成员变量来讲,必须在声明时或者构造方法中对它赋值;
2.修饰方法,表示该方法无法被重写;
3.修饰类,表示该类无法被继承。
抽象类是被用于继承的,final修饰代表不可修改、不可继承的。所以不能用final修饰抽象类。

java.util.Date和java.sql.Date的区别?

共同点:都有getTime方法返回毫秒数,可以直接构建

不同点:

1、java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分,一般在读写数据库的时候用
PreparedStament的setDate()的参数和ResultSet的getDate()方法的都是java.sql.Date 2、java.util.Date是在除了SQL语句的情况下面使用,一般是日常日期字段 3、java.util.Date 是 java.sql.Date 的父类,
即:继承关系:java.lang.Object --》 java.util.Date --》 java.sql.Date

相互转化等,更多...

二、异常

三、反射:

RTTI、
构造器

了解反射吗?怎么用?用在哪里?

Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。

总结说:反射就是把java类中的各种成分映射成一个个的Java对象,并且可以进行操作。

Java反射的原理:java类的执行需要经历以下过程:

编译:.java文件编译后生成.class字节码文件

加载:类加载器负责根据一个类的全限定名来读取此类的二进制字节流到 JVM内部,并存储在运行时内存区的方法区,然后将其转换为一个与目标类型对 应的java.lang.Class对象实例 链接 验证:格式(class文件规范) 语义(final类是否有子类)

操作准备:静态变量赋初值和内存空间,final修饰的内存空间直接赋原值,此处不是用户指定的初值。解析:符号引用转化为直接引用,分配地址 初始化:根据程序员通过程序指定的主观计划去初始化类变量和其他资源, 或者可以从另一个角度来表达:初始化阶段是执行类构造器()方法的过 程。执行静态方法代码块为静态变量赋值。Java的反射就是利用上面第二步加载到jvm中的.class文件来进行操作的。.class文件中包含java类的所有信息,当你不知道某个类具体信息时,可以 使用反射获取class,然后进行各种操作。

怎么用:

    //1、通过class.forName(),加载某个类。
//2、在运行时构造任意一个类的对象。
1 Class cls = Class.forName("com.jdk");
2 jdk jdkobj = cls.newInstance();
//3、在运行时判断任意一个类所具有的成员变量和方法。
1 Class cls = Class.forName("com.jdk");
2 Methods methods[]= cls.getDecliedMethod();
3 Fields fields[] = cls.getDeclieredFields();

使用场景:Class.forName();数据库注册驱动的时候。编译器智能提示该类有哪些方法可供调用。

AOP动态代理。经典的就是在xml文件或者properties里面写好了配置,然后在Java类里面解析 xml或properties里面的内容,得到一个字符串,然后用反射机制,根据这个字 符串获得某个类的Class实例,这样就可以动态配置一些东西,不用每一次都要 在代码里面去new或者做其他的事情,以后要改的话直接改配置文件,代码维护 起来就很方便了,同时有时候要适应某些需求,Java类里面不一定能直接调用另 外的方法,这时候也可以通过反射机制来实现。

注解(Annontation)是Java5引入的一种代码辅助工具,它的核心作用是对类、方法、变 量、参数和包进行标注,通过反射来访问这些标注信息,以此在运行时改变所注解对象的行为。

四、集合类,

zsgc_迭代器

JAVA容器

ArrayList底层数组实现,封装了常见的增删改查操作,并且支持动态扩容。适 合查找多的场合。

LinkedList基于链表实现的列表。适合增删情况较多的场合。

TreeSet,基于二叉排序树(红黑树)实现的。TreeSet里最典型的就是它用到 了两种排序方式,即基于元素对象自身的实现的Comparable接口的自然排序, 以及基于更为灵活不与单个元素绑定的Comparator接口的客户化排序。自己在 构造的时候传入一个比较器即可。

HashMap是用来存储键值对的映射关系,底层是用数组+链表实现的。结合put 操作讲一下。HashSet其实就是基于HashMap实现的,只不过将值固定为一个固定的值。

LinkedHashMap,支持按照插入顺序排序。

PriorityQueue优先级队列,一个基于优先级堆的无界优先级队列

动态代理为什么使用反射而不使用继承?

这个问题有坑啊,动态代理可以用继承和反射都可以实现。

JDK动态代理:利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用 InvokeHandler来处理。

CGlib动态代理:利用ASM(开源的Java字节码编辑库,操作字节码)开源包,将代理对象 类的class文件加载进来,通过修改其字节码生成子类来处理。

区别:JDK代理只能对实现接口的类生成代理;CGlib是针对类实现代理,对指定的类生成 一个子类,并覆盖其中的方法,这种通过继承类的实现方式,不能代理final修饰的类。

总结:

1.JDK代理使用的是反射机制实现aop的动态代理,CGLIB代理使用字节码处理框架asm, 通过修改字节码生成子类。所以jdk动态代理的方式创建代理对象效率较高,执行效率较 低,cglib创建效率较低,执行效率高;

2.JDK动态代理机制是委托机制,具体说动态实现接口类,在动态生成的实现类里面委托 hanlder去调用原始实现类方法,CGLIB则使用的继承机制,具体说被代理类和代理类是继承关系,所以代理类是可以赋值给被代理类的,如果被代理类有接口,那么代理类也可以赋 值给接口。

两种动态代理方式及其区别(代理模式)

JDK的动态代理(依赖于接口)

  1. 在Java的动态代理机制中,有两个重要的类或接口,一个是InvocationHandler接 口,另一个是Proxy类。
  2. InvocationHandler接口是给动态代理类实现的,负责处理被代理对象的操作
  3. Proxy类是用来创建动态代理类实例对象的,只有得到这个对象,才能调用需要代 理的方法。
  4. 动态代理的代理类是在静态代理类上进行修改,将动态代理类实现 InvocationHandler接口,重写Invoke方法,Invoke方法通过传入的被代理类方法和 参数来执行。

JDK动态代理和Cglib动态代理的区别:

  1. JDK动态代理是实现了被代理对象的接口,Cglib是继承了被代理对象。
  2. Cglib因为是继承机制,所以无法代理被final修饰的方法。
  3. JDK和Cglib都是在运行期间生产字节码,JDK是直接写class字节码,Cglib使用 ASM框架写class字节码;cglib代理实现更复杂,生成代理类比JDK效率低。
  4. JDK调用代理方法,是通过反射实现机制调用,cglib是通过Fashclass机制直接调 用方法,效率更高。

Fastcalss机制:

为代理类和被代理类个生成一个class,这个class会为代理类或被代理类的方法分配一个 index。这个index当做一个入参,Fashclass就可以直接定位要调用的方法,并直接进行调用。这样 省去了反射调用,所以效率高。

五、JDBC:

桥梁:
1.加载驱动,
2.连库,
3.增删改查

六、IO流:

字节流
字符流

七、Java Web

1.1:JAVA基础的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  3. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  4. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  5. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  6. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  7. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  9. Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

    线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...

  10. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. Elasticsearch(1):基础入门

      1 Elasticsearch¶   在如今数据为王的时代,如何充分高效实现数据检索和分析是数据应用的关键.以电商平台为例,输入一个商品名称,那么就要求系统以最快的速度将所有相关的商品搜索处理.现 ...

  2. 滴滴开源AgileTC:敏捷测试用例管理平台

    ​桔妹导读:AgileTC是一套敏捷的测试用例管理平台,支持测试用例管理.执行计划管理.进度计算.多人实时协同等能力,方便测试人员对用例进行管理和沉淀.产品以脑图方式编辑可快速上手,用例关联需求形成流 ...

  3. PHP序列化与反序列化学习

    序列化与反序列化学习 把对象转换为字节序列的过程称为对象的序列化:把字节序列恢复为对象的过程称为对象的反序列化. <?php class UserInfo { public $name = &q ...

  4. 关于消息中间件ActiveMQ的企业级应用

    几个月前看到项目中配置了activeMq,于是想通透的掌握activeMq,便去网上学习搜寻资料,找到这一篇博客挺不错的,解释的比较清楚,包括原理使用和配置,特此把它分享给大家. 众所周知,消息中间件 ...

  5. 基础篇:深入解析JAVA异常

    目录 1 异常的分类和继承关系 2 几种常见异常类的解析 3 Java异常关键字 4 开发过程处理异常注意点 5 异常和AutoCloseable(1.7-JDK的语法糖) 6 throw和throw ...

  6. idea模拟前端向后台请求数据输出响应结果

    tools-httpClient-Test restful web service 通过上述步骤之后出现如下图 1 表示通过哪种方式请求:2 请求数据的地址头部:3 请求数据的除了头部之后的地址:4, ...

  7. [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型

    [iTyran原创]iPhone中OpenGL ES显示3DS MAX模型之二:lib3ds加载模型 作者:u0u0 - iTyran 在上一节中,我们分析了OBJ格式.OBJ格式优点是文本形式,可读 ...

  8. C语言中的左移与右移 <<, >> 位运算

    这里参考了一篇很好的位运算,涉及到位运算可能会遇到的正负号问题,左右溢出怎么处理问题. 参考: 1. https://www.cnblogs.com/myblesh/articles/2431806. ...

  9. 【题解】[国家集训队]happiness

    题目戳我 \(\text{Solution:}\) 显然还是一个分组问题.对于理科和文科我们可以看出最小割模型,而处理同时选择某一学科的时候,需要我们根据套路建立虚点处理. 同 小M的作物 一题,这题 ...

  10. 【题解】[USACO08MAR]Land Acquisition G

    Link 题目大意:给定\(n\)个二元组,每次可以选择一组,花费是组内最大的长乘以最大的宽.问消掉所有二元组的最小代价. \(\text{Solution:}\) \(dp\)写的不够啊-- 先挖掘 ...