我的大学河南科技学院青春志

北京决策数一面(Java) 2022.3.17

2022-03-17  本文已影响0人  胡小毛
  1. 自我介绍

  2. kmp算法

    1. https://www.zhihu.com/question/21923021
    2. kmp算法的时间复杂度 O(n+m)
    1. 双指针的时间复杂度 O(n)
  3. java

    1. final修饰的内容的值是引用的不可变还是引用的对象内容不可变
      1. 浅析Java中的final关键字
        1. 修饰类
          1. 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。
        1. 修饰方法
          1. 如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的
        1. 修饰变量
          1. 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
          2. 引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的
    1. 创建线程池有几种方式 4种
      1. 线程的四种创建方式
        1. 一、继承Thread类创建线程
          1. 定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体
          2. 创建该类的实例对象,即创建了线程对象
          1. 调用线程方法的start方法来启动线程
        1. 二、实现Runnable接口创建线程
          1. 定义Runnable接口的实现类,重写run()方法,run()方法的方法体就是线程要完成的任务
          2. 创建Runnable实现类的实例,并用这个实例作为Thread的target来创建Thread对象,这个Thread对象才是真正的线程对象
          1. 调用线程的run()方法来启动线程
        1. 三、实现Callable接口和Future创建线程
          1. 创建Callable接口实现类,并实现call()方法,该方法将作为线程执行体,且该方法有返回值,再创建Callable实现类的实例
          2. 使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值
          1. 使用FutureTask对象作为Thread对象的target创建并启动新线程
          2. 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
        1. 四、通过线程器ExecutorServices类
    1. 新任务提交到线程池,线程池怎么处理的
      1. 第一步:线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。
      2. 第二步:线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。如果工作队列满了,则执行第三步。
      1. 第三步:线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。
  4. mysql

    1. like会不会走索引
    2. MySQL在like查询中是否使用到索引
      1. mysql在使用like查询的时候只有使用后面的%时,才会使用到索引
上一篇下一篇

猜你喜欢

热点阅读