34 Matching Annotations
  1. Apr 2022
    1. 持字符串变量

      字符串是使用字符数组来实现的,不单独提供字符串的数据类型。但是java中虽然底层也是基于字符数组或者是byte数组进行实现,但是却提供了Strng,SringBuffer和StringBuilder这些具体实现。

  2. Mar 2022
    1. BeanDefinition

      准确的来说是spring扫描到的对象的信息,诸如depends on 或者sigton这些信息全部存储在beandifinition当中

    2. 问题

      而Spring进行类的创建之后会进行属性注入,属性注入结束之后才会放入单例池当中,才算是bean创建成功。

    3. 循环依赖

      对于普通对象,对象的生命周期就是 加载:将类的二进制刘加载进常量池当中,验证:对于文件等进行验证。 准备就是给类的静态变量分配内存并且初始化为默认值、。所以类加载完之后不在构造方法中赋初值的情况下还是空,根本就只是一个引用,根本就不会造成循环依赖的问题

    1. 会实例化B,

      我觉得这个时候实现的b只是一个代理对象。当在真正使用到b这个对象的时候才进行实例化。

    2. 单例

      springboot的生成非懒加载单例的对象是因为使用了Map来对对象进行存储。为什么不像是单例模式一样使用懒汉式,饿汉式静态内部类和枚举来进行实现。主要是因为使用反射来进行实现可以破坏者几种实现方式的单例性。

    1. 转换成满足和<=sum-target 的最长数组失败,

      import java.util.*; ```java class Solution { public int minSubArrayLen(int target, int[] nums) { int sum = Arrays.stream(nums).sum(); if(target>sum) return 0; if(target==sum) return nums.length; int pack = sum - target; int[] dp = new int[pack+1]; for (int i = 0; i < nums.length; i++) { for (int j = pack; j >= nums[i]; j--) { dp[j] = Math.max(dp[j], dp[j - nums[i]]+1); } }

          return nums.length - dp[pack];
      }
      

      } ``` 测试案例 213 [12,28,83,4,25,26,25,2,25,25,25,12]

  3. Feb 2022
    1. 组合

      动态规划求长度为k的组合有多少种,但是我不会简化成滚动数组

      public int getRes(int k,int n){
          //长度为k的组合有多少种
          int[][] dp=new int[n+1][k+1];
          for(int i=0;i<=n;i++){
              dp[i][1]=i;
          }
          //
          //dp[j]=dp[j]+dp[j-1];
          for(int i=2;i<=n;i++){
              for(int j=2;j<=k;j++){
                  dp[i][j]=dp[i-1][j]+dp[i-1][j-1];
              }
          }
          return dp[n][k];
      }
      
    1. 中序遍历(

      入栈的时机: 只要点节点不为空就一直入左边节点+ 出栈一个元素就立即入它右边的节点 出栈的时机: 1. 左边节点已经是叶子节点+2 所有子节点都已经遍历过了

    1. 二叉树的迭代遍历

      每一种遍历都单独入根节点(在循环之外根节点入栈) 先序遍历: 入栈的时机: 每一个出栈都入出栈元素的右左节点 出栈的时机:每一次入栈结束之后都出栈顶元素 中序遍历: 入栈的时机:左节点不为空入左节点,出栈后入出栈节点的右节点 出栈的时机: 左节点为空或者右节点为空 后序遍历: 入栈的时机 :右节点不为空入右节点,左节点不为空入左节点 出栈的时机:左右节点都为空 特殊注意:需要断开栈顶元素跟其左右节点的关系(先入栈再断开关系)

    1. 包装类型

      包裹类型是和基本类型相对应的。 1. 包裹类型中存储了最大值,最小值,type,并且提供了一些api,比如常用的toString以及valueOf等方法。 2. 集合类型不允许存放基本类型

  4. Oct 2021
    1. 拉链法

      拉链法其实就是hashmap的实现方式,数组存储索引,数组后面连接链表,链表存储最终数据。 hashmap扩容,容量等于总容量的四分之三,进行扩容。 如果扩容之后且哈希冲突时链表长度大于阈值,链表就会树化。

  5. Sep 2021
    1. 虚拟机栈

      方法执行的内存模型,当调用方法的时候创建栈帧并且入栈,执行结束之后出栈,在栈帧中存储了局部变量表,返回值和对象引用。虚拟机栈会抛出outofmemeryException和stackoverflowexception错误

    1. 缓冲池

      除了Float和double其余的基本类型都有自己的缓冲池,是一个final数组名字叫cache,当调用valueof方法的时候会先在缓冲池中寻寻找,找到之后就直接返回缓冲池中的内容否则就新建一个包裹类型的对象,返回对象

    1. 反射就是运行状态中通过全类名、类或者对象获取该Class对象从而获得该类的所有的属性和方法并且可以创建该类对象的一种动态方法 反射最常用在框架当做,一个常见的适用场景就是在使用mybatis框架的时候通过getmapper方法将接口的Class对象传输进去,同样在早期使用jdbc自己封装select或者update方法的时候,为了让封装的方法能够兼容不同的表,就将我的实体类的类型以泛型的形式传输进去,再通过反射来创建对象。

    2. 重要

      1 解释 2举例 (之前如果详细解释过了equals方法,这个时候带过一下就行) hashcode其实是存储了对象在散列表中的索引位置,在Object的hashcode方法中其实是调用了native方法来获取一个与对象内存地址相关的哈希值存储在对象头当中。 一般来说判断两个对象相等,那么他们的哈希值也是相等的。 所以在进行对象相等判断的时候会先判断hashcode是否相等,如果相等的话需要继续调用equals方法判断相等,因为可能会存在哈希冲突

      举个例子,Set集合是不能存储相等内容的,当加入内容的时候就要判断新加入的内容和已经存储的是否是相同的,此时就是先调用hashcode方法进行哈希值判断然后再进行equals的判断。

    3. 从意义和语法上回答,先回答语法,在回答意义。 抽象类是接口的骨架。抽象类中实现了接口中大部分方法,让其他类实现接口变得简单。(举例 Collection 和AbstractCollection 就重写了除了iterator和size之外的所有方法)

    4. String中用private final char value[ ]

      1. Stringbuffer和Stringbuilder都是使用AbstractStringbuidler父类定义的char[] value。所以说String不可以被修改,但是Stringbuilder和Stringbuffer都可以被修改
      2. StringBuffer是使用sychronized关键字进行同步操作的,支持线程安全,但是开销比较大
    5. ?

      1 重载是发生在同一个类的同名方法上的,要求方法的参数列表不同但是对抛出的异常和返回值的类型没有特殊限制 2 重写是发生子子类与父类之间的同名,同参方法上,要求抛出的异常必须是父类异常或者是父类异常的子类,如果返回值是引用类型的话,返回值类型必须小于父类返回值,如果是基本类型的话,必须一致。访问控制权限要求子类重写的方法的权限相等或者大于父类(两同,两小,一大)。

    6. ?

      java和c++都是面向对象的语言,但是java比c++更简单安全,因为java实现了内存管理和垃圾回收机制,而c++需要手动实现。 java不提供指针的使用,但是c++提供 java只有接口支持多继承,但是c++是支持多继承的

    7. 什么是字节码?采用字节码的好处是什么?

      字节码文件其实是java源文件在编译之后生成的一种.class文件,Jvm的入口classloader处理的就是字节码文件。 字节码文件的好处在于不止有java可以编译成字节码文件,只要合乎规范都能够编译成字节码文件,并且由JVM进行运行

    8. Java 虚拟机(JVM)是运行 Java 字节码的虚拟机。JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们都会给出相同的结果。

      1.平台无关性 2.编译运行型语言 3.所有java程序都是运行在java虚拟机上面的