java面试背诵随笔(java基础 背诵第二天)

1、java中金额的数据类型用          BigDecimal

2、HashMap和HashTable的区别

        HashMap没有synchronized修饰,线程不安全,HashTable线程安全

        HashMap允许Key和Value为null,而HashTable不允许。

3、Jdk8开始链表高度到8,数组长度超过64,链表转为红黑树,元素内部类Node节点存在。

4、String 、 StringBuffer 、 StringBuilder区别

        String是final修饰的,不可变,每次操作都会产生新的String对象,增加线程。

        Buffer:缓冲           Builder:建筑

        StringBuffer线程安全,StringBuilder线程不安全。

        性能:StringBuilder > StringBuffer >String

5、如何实现一个IOC容器 (配置、获取、确定、注入)

        1、配置文件配置包的扫描路径

        2、递归包扫描获取.class文件

        3、反射、确定需要交给IOC容器管理的类。

        4、对需要注入的类进行依赖注入。

6、java类加载器

        1、BootStrapClassLoader         顶层加载器    加载lib下的jar和class文件

        2、ExtClassLoader        扩展加载器        加载ext下的jar包和class文件

        3、AppClassLoader(程序员最相关)        自定义类加载器        加载classPath下的类文件。

7、双亲委派

        向上委派,向下查找。

        

 8、GC如何判断对象可以被回收

        1、引用计数法:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时回收。

        2、可达性分析:从GC Roots开始向下搜索,搜索走过的路径为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,那么可以回收。

9、线程的生命周期

        线程的五种状态:创建,就绪,运行,阻塞和死亡状态。

10、sleep()、wait()、join()、yeld()

11、并发、并行、串行的区别

串行在时间上不可能发生重叠,前一个任务没搞定,下一个任务就只能等着

并行在时间上是重叠的,两个任务在同一时刻互不干扰的同时执行。

并发允许两个任务彼此干扰。统—时间点、只有一个任务运行,交替执行

12、并发的三大特性

        1、原子性        要么做要么不做    i++线程不安全  在运行时得不到想要的结果

        2、有序性        虚拟机可能不会按照代码顺序来执行,导致线程不安全。

        3、可见性        一个线程修改,其他线程都能看到。

13、JDK 中常用的包有哪些

java.lang:这个是系统的基础类;
java.io:这里面是所有输入输出有关的类,比如文件操作等;
java.nio:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包;
java.net:这里面是与网络有关的类;
java.util:这个是系统辅助类,特别是集合类;
java.sql:这个是数据库操作的类。

14、java 中 IO 流分为几种?

按照流的流向分,可以分为输入流和输出流;
按照操作单元划分,可以划分为字节流和字符流;
按照流的角色划分为节点流和处理流。
15、 final finally finalize区别
        final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表
示该变量是一个常量不能被重新赋值。
        finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块
中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
        finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调 用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的最后判断。

16、static含义

        1、创建独立于具体对象的域变量或者方法,以致于即使没有创建对象也能使用属性和调用方法。

        2、用来形成静态代码块以优化程序性能。

        3、被static修饰的对象,只在类第一次使用时加载并进行初始化。

17、== 和 equals 的区别是什么

        简化:==比较的是地址,基本数据类型比较值,引用数据类型比较对象地址。

                   equals没有重写和==一样,重写比较的是内容是否相等。

             == : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型 == 比较的是
值,引用数据类型 == 比较的是内存地址)
           equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回
true (即,认为这两个对象相等)。

18、hashCode()与equals()区别

        简记:equals相等hashCode一定相等,反之亦然。

        如果两个对象相等,则hashcode一定也是相同的
        两个对象相等,对两个对象分别调用equals方法都返回true
        两个对象有相同的hashcode值,它们也不一定是相等的

19、什么是反射机制? (对于类和对象)

        JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调 用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
20、反射机制优缺点
         优点: 运行期类型的判断,动态加载类,提高代码灵活度。
         缺点: 性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的java代码要慢很多。

21、谈谈你对AOP的理解

        AOP叫做面向切面编程,主要的任务是用来解耦合的。相当于增强剂。

        任何一个系统都是由不同的组件来组成的,系统中会存在很多组件跟业务无关的,例如日志、事务、权限等核心服务组件,如果将这些组件融入到我们的业务逻辑中,一个业务逻辑都添加这样的代码,就会让代码冗余太多,因此我们将这些公共的代码逻辑抽象出来变成一个切面,然后注入到具体的业务中去。这样AOP就可以不修改原有的业务逻辑代码,只需要在原来的业务逻辑上面做一些增强就可以了。

22、谈谈你对IOC的理解

        IOC主要理解:容器概念、控制反转和依赖注入。

        容器概念:实际上就是一个map(key  value)

        控制反转:没有引入IOC时,都是需要什么对象自己就去创建什么对象。

                           引入IOC之后,由IOC容器创建,然后再注入到对象中,对象由主动创建变成被动接受。

        依赖注入:依赖注入是实现IOC的方法,就是由IOC容器在运行期间动态的将某种依赖关系注入到对象中去。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周学Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值