每日五问(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 的效率,就要考虑建立组合索引。即将数据库表中的多个字段联合起来作为一个组合索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Nicholas_giao

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

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

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

打赏作者

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

抵扣说明:

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

余额充值