资讯专栏INFORMATION COLUMN

JAVA面试题(46)

txgcwm / 3221人阅读

摘要:本文首发于的博客转载请注明出处抽象类与接口的区别类抽象类只能继承一个直接父类,可以实现多个接口接口可以继承多个接口变量抽象类允许所有作用域或者关键字进行变量的修饰,与普通类没有区别接口只允许静态不可变的变量方法接口中在之前所有方法都是抽象的

    本文首发于cartoon的博客
    转载请注明出处:https://cartoonyu.github.io/c...

JAVA

抽象类与接口的区别

抽象类只能继承一个直接父类,可以实现多个接口

接口可以继承多个接口

变量

抽象类允许所有作用域或者关键字进行变量的修饰,与普通类没有区别

接口只允许静态不可变的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

相关文章

  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    BicycleWarrior 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    Mr_houzi 评论0 收藏0
  • 【推荐】最新200篇:技术文章整理

    摘要:作为面试官,我是如何甄别应聘者的包装程度语言和等其他语言的对比分析和主从复制的原理详解和持久化的原理是什么面试中经常被问到的持久化与恢复实现故障恢复自动化详解哨兵技术查漏补缺最易错过的技术要点大扫盲意外宕机不难解决,但你真的懂数据恢复吗每秒 作为面试官,我是如何甄别应聘者的包装程度Go语言和Java、python等其他语言的对比分析 Redis和MySQL Redis:主从复制的原理详...

    tommego 评论0 收藏0
  • 前端面试总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    pumpkin9 评论0 收藏0
  • 前端面试总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    Tychio 评论0 收藏0

发表评论

0条评论

txgcwm

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<