• 每日五问(java)


    一.Thread 和 Runnable 的区别
    (1)Thread 是实现类而Runnable 是接口,所以继承只能单一继承而接口实现可以多实现,如果已经有继承关系的类要实现多线程只能实现Runnable 接口
    (2)Runnable 表示一个线程的顶级接口,Thread 类其实是实现了 Runnable 这个接口,我们在使用的时候都需要实现 run 方法。站在面向对象的思想来说,Runnable 相当于一个任务,而 Thread 才是真正处理的线程,所以我们只需要用 Runnable 去定义一个具体的任务,然后交给Thread 去处理就可以了,这样达到了松耦合的设计目的
    (3)接口表示一种规范或者标准,而实现类表示对这个规范或者标准的实现,所以站在线程的角度来说,Thread 才是真正意义上的线程实现。Runnable 表示线程要执行的任务,因此在线程池里面,提交一个任务传递的类型是 Runnable。
    二.可以讲一下 ArrayList 的自动扩容机制吗
    ArrayList 是一个数组结构的存储器默认情况下数组的长度是10,当然我可以自己定义长度,当随着程序不断的增加数据到ArrayList 中达到最大长度的时候,ArrayList 就没有空间存储数据量,这时候数组会自动扩容,首先会创建一个新的数组是之前数组长度的1.5倍然后然后使用Arrays.copyOf 方法把之前数组的中的值传给新的数组,扩容完成后再把当前要添加的元素加入到新的数组里面,从而完成动态扩容的过程。
    三.Java 有几种文件拷贝方式,哪一种效率最高
    第 一 种 , 使 用 java.io 包 下 的 库 , 使 用 FileInputStream 读 取 , 再 使 用FileOutputStream 写出。
    第二种,利用 java.nio 包下的库,使用 transferTo 或 transfFrom 方法实现。
    第三种,Java 标准类库本身已经提供了 Files.copy 的实现.
    对于 Copy 的效率,这个其实与操作系统和配置等情况相关,在传统的文件 IO操作里面,我们都是调用操作系统提供的底层标准 IO 系统调用函数 read()、write() ,由于内核指令的调用会使得当前用户线程切换到内核态,然后内核线程负责把相应的文件数据读取到内核的 IO 缓冲区,再把数据从内核 IO 缓冲区拷贝到进程的私有地址空间中去,这样便完成了一次 IO 操作。
    而 NIO 里面提供的 NIO transferTo 和 transfFrom 方法,也就是常说的零拷贝实现。
    四,mysql 中 varchar 与char 的区别以及 varchar(50)中的
    50代表的涵义

    (1) varchar 与 char 的区别: char 是一种固定长度的类型,varchar 则是一种可变长度的类型.
    (2) varchar(50)中 50 的涵义 : 最多存放 50 个字节
    (3) int(20)中 20 的涵义: int(M)中的 M indicates the maximumdisplay width (最大显示宽度)for integer types. The maximumlegal display width is 255
    五请简述常用的索引有哪些种类?

    1. 普通索引: 即针对数据库表创建索引
    2. 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值必须唯一,但允许有空值
    3. 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引
    4. 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
  • 相关阅读:
    adobe认证证书含金量
    面部检测与特征分析:视频实时美颜SDK的核心组件
    ubuntu linux 环境下的程序打包
    前端开发(layui框架)
    xstream实现xml和java bean 互相转换
    支付宝服务商第三方代发布小程序
    cpolar内网穿透
    git常用操作总结
    【张兔兔送书第一期:考研必备书单】
    谣言检测(SRD-PSCD)《Rumor Detection with Self-supervised Learning on Texts and Social Graph》
  • 原文地址:https://blog.csdn.net/Nicholas_giao/article/details/127749958