-
自我介绍
-
kmp算法
- https://www.zhihu.com/question/21923021
- kmp算法的时间复杂度 O(n+m)
- 双指针的时间复杂度 O(n)
-
java
- final修饰的内容的值是引用的不可变还是引用的对象内容不可变
- 修饰类
- 当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。
- 修饰方法
- 如果只有在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的
- 修饰变量
- 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
- 引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的
- 创建线程池有几种方式 4种
- 一、继承Thread类创建线程
- 定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体
- 创建该类的实例对象,即创建了线程对象
- 调用线程方法的start方法来启动线程
- 二、实现Runnable接口创建线程
- 定义Runnable接口的实现类,重写run()方法,run()方法的方法体就是线程要完成的任务
- 创建Runnable实现类的实例,并用这个实例作为Thread的target来创建Thread对象,这个Thread对象才是真正的线程对象
- 调用线程的run()方法来启动线程
- 三、实现Callable接口和Future创建线程
- 创建Callable接口实现类,并实现call()方法,该方法将作为线程执行体,且该方法有返回值,再创建Callable实现类的实例
- 使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值
- 使用FutureTask对象作为Thread对象的target创建并启动新线程
- 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
- 四、通过线程器ExecutorServices类
- 新任务提交到线程池,线程池怎么处理的
- 第三步:线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。
-
mysql
- like会不会走索引
- MySQL在like查询中是否使用到索引
- mysql在使用like查询的时候只有使用后面的%时,才会使用到索引
网友评论