摘要:本文首发于的博客转载请注明出处抽象类与接口的区别类抽象类只能继承一个直接父类,可以实现多个接口接口可以继承多个接口变量抽象类允许所有作用域或者关键字进行变量的修饰,与普通类没有区别接口只允许静态不可变的变量方法接口中在之前所有方法都是抽象的
本文首发于cartoon的博客
转载请注明出处:https://cartoonyu.github.io/c...
抽象类与接口的区别
类
抽象类只能继承一个直接父类,可以实现多个接口
接口可以继承多个接口
变量
抽象类允许所有作用域或者关键字进行变量的修饰,与普通类没有区别
接口只允许静态不可变的public变量
方法
接口中在jdk1.8之前所有方法都是抽象的public方法,在1.8得到增强,可以有静态方法或者默认的普通方法
抽象类中可以有抽象方法,普通方法,静态方法,可以被多种关键字修饰,普通方法中可以有自身的逻辑
作用
接口主要用于模块间行为的约束
抽象类主要用于模板类的实现
线程不同步集合转换成线程同步集合以及区别
继承原有集合通过java的线程同步机制实现
使用Collections的synchronizedXxx方法进行集合的转换
简单
锁的对象为对象,粒度过大
使用java.util包中的ConCurrent方法进行包装
简单
锁的粒度为行级,且锁的种类比较丰富
java常见异常以及发生场景(最少5个exception)
OutOfMemoryError
创建大对象超过java老年代内存抛出
循环调用过多,甚至出现无限循环抛出
ClassCastException
对象向下转型时发生
NullPointerException
对象引用未指定对象实例直接使用
SQLException
sql语句执行错误
InterruptedException
线程意外终止
IndexOutOfBoundException
数组越界
为什么要用线程池,线程池有什么参数可以对线程池进行配置
使用线程池原因
异步操作频繁造成的线程切换
线程频繁创建销毁造成的资源的消耗
参数
ThreadFactory
corePoolSize
CPU密集,n+1
IO密集,多线程
keepAliveTime
maximumPoolSize
BlockingQueue
6种实现队列
TimeUnit
List,Set,Map的区别
存储元素
List与Set是存储单一元素的集合
Map是存储key-value对元素的集合
元素有序性
Set与Map内的元素在方法调用层面是无序的
List元素是有序的
元素可重复性
List元素是可重复的
Set不允许重复,Map不允许key重复
继承接口
Set与List继承了Collection
Map是与Collection层次一致的接口
Iterator与ListIterator的区别
继承性
ListIterator继承于Iterator
遍历集合
Iterator可以遍历Collection内的所有实现类
ListIterator只能遍历List接口下的ArrayList以及LinkedList
遍历方向
Iterator只能向下遍历
ListIterator可以向上向下遍历
迭代时修改元素
Iterator不支持迭代时修改或插入集合元素
ListIterator支持迭代时修改或删除元素
迭代时移除元素
两个迭代器都可以在迭代时移除元素
JVM
垃圾回收算法
标记-清理
标记存活对象
清除未标记对象
效率高,但是会造成内存碎片
复制
将内存区域划分成清理区与存活区
将存活对象复制到存活区
清理清理区的所有对象
不会造成内存碎片,但是降低内存的使用率
标记-整理
标记待清理对象
将标记对象移到另外一侧
清理边界外内存区域
有效解决了内存碎片的产生以及内存使用率下降的问题
数据库
char与varchar的区别
数据插入方面
当插入数据等于定义长度,两者处理没有区别
当插入元素小于定义长度
char会填充空格到定义长度
varchar不会填充空格
空格问题
数据最后出现空格
char会将空格删除
varchar不会
检索速度
char比varchar的检索速度快
数据库的事务特性
原子性(Atomic),事务内操作结果时一致的
一致性(Consitency),事务执行前后数据库的状态时一致的
隔离性(Isolation),并发事务的执行是互不干扰的
持久性(Durability),事务执行结果是永久存储的
数据库中select语句执行流程(客户端到存储引擎)
客户端通过TCP三次握手与服务端进行连接
连接器判断账号信息是否有效
有效,则进入第三步
无效,连接器返回Access denied的错误
查询缓存中是否有执行的记录
不建议使用,可以通过query_cache_type关闭,MySQL 8.0去除了查询缓存的功能
有执行记录,则返回上次执行结果
没有执行记录,进入第四步
分析器进行词法分析,语法分析
词法分析
判断输入的SQL语句中的关键词的含义
语法分析
判断SQL是否合法
若合法,进入第五步
若不合法,返回 You have an error in your SQL syntax错误到客户端
sql语句经过优化器选择最佳执行策略
多索引情况下的最佳索引的选择
多表关联时决定表的连接顺序
sql语句交由执行器进行存储引擎的操作并返回结果
根据from找到需要查询的表,根据where形成有效的结果集合
(如果有order by,对数据进行排序)select返回结果
数据库中数据更新语句执行流程(客户端到存储引擎)
1. 客户端通过TCP三次握手与服务端进行连接 2. 连接器判断账号信息是否有效 1. 有效,则进入第三步 2. 无效,连接器返回Access denied的错误 3. 查询缓存中是否有执行的记录 1. 不建议使用,可以通过query_cache_type关闭,MySQL 8.0去除了查询缓存的功能 2. 有执行记录,则返回上次执行结果 3. 没有执行记录,进入第四步 4. 分析器进行词法分析,语法分析 1. 词法分析 1. 判断输入的SQL语句中的关键词的含义 2. 语法分析 1. 判断SQL是否合法 2. 若合法,进入第五步 3. 若不合法,返回 You have an error in your SQL syntax错误到客户端 5. sql语句经过优化器选择最佳执行策略 6. sql语句交由执行器进行存储引擎的操作并返回结果 7. 两段式提交 1. 检查并读入相关数据页到内存 2. 将更新语句的操作行写入内存 1. 写入操作记录到readlog中,处于prepare状态 2. 写入操作记录到binlog中 3. 事务提交,处于commit状态
redis的数据类型以及底层实现数据结构
1. string 1. 动态字符串 2. hash 1. 数据量小,压缩链表 2. 数据量大,哈希表 3. list 1. 数据量小,压缩列表 2. 数据量大,双循环链表 4. 有序集合 1. 数据量小,压缩链表 2. 数据量大,跳表 5. set 1. 数据量小,有序数组 2. 数据量大,哈希表算法
将有序数组转换为二叉搜索树
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75596.html
摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...
摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...
摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...
阅读 1630·2019-08-30 15:55
阅读 950·2019-08-30 15:44
阅读 841·2019-08-30 10:48
阅读 1995·2019-08-29 13:42
阅读 3162·2019-08-29 11:16
阅读 1161·2019-08-29 11:09
阅读 2014·2019-08-26 11:46
阅读 592·2019-08-26 11:44