Java面试总结

1.基础

问: hashmap的底层原理
答:底层结构主要是数组,链表,红黑树,在1.7jdk版本的时候是数组和链表后来到1.8版本加入了红黑树主要是链表大于8自动转为红黑树,结构是数组里是链表

问:ArrayList和LinkedList有什么区别
答: ArrayList底层是数组,LinkedList底层是数据链表,所以ArrayList查询很快但是添加和删除就很慢反之LinkedList是添加和删除很快查询比较慢,这里可以引申一下头中尾插入时间对比 ,头中LinkedList更快 尾是一样的

问:String、StringBuffer、StringBuilder区别及使用场景
答:String是只读字符串,他其实是无法直接修改内容的,如我们经常看到的String A=“abc” A=“aaa” 好像是值被修改了其实不是只是指向地址从abc变成了aaa然后abc变成不可达数据,StringBuffer和StringBuilder实现基本一样唯一不一样的就是StringBuffer是线程安全的它的方法被 synchronized关键字修饰

问:Java里的锁有哪些
答:悲观锁,乐观锁,自旋锁,公平锁,非公平锁,共享锁,独占锁

问:java里final修饰的类,方法,变量都有哪些表现
答:类被final是无法被继承的,方法被final不可以重写 ,变量被final它的取值在程序的整个执行过程中都是不变的。

问:重写和重载的区别
答:重写必须参数和返回都和原本方法一致,重载就不用都可以不一样。

问:你知道的排序算法
答:冒泡排序 两两比对 ,快速排序 也是递归排序选一个中间值大的在右边小的在左边分完在层层细分直到一边只有一个数据 选择排序 选择一个最大或最小值然后每次都选择剩下数据的最大和最小值直到结束 ,插入排序 字面意思选择数据然后插入到合适位置

问:说说NIO ,BIO, AIO的区别
答:同步阻塞的BIO ,同步非阻塞的NIO,异步非阻塞的AIO

问:线程池有哪些
答:单线程线程池 ,定长线程池,缓存线程池,定时线程池

问:进程和线程的区别
答:从属关系不同 进程包含线程,描述侧重点不同 进程是操作系统分配资源的基本单位,而线程是操作系统调度的基本单位,共享资源不同 进程不共享线程恭喜,上下文切换速度不同 进程慢线程快,操纵者不同 进程的操纵者是操作系统,而线程的操纵者是编程人员

2.数据库

问:事务的四大特性
答:原子 隔离 一致 持久

问:事务的隔离性是如何实现的
答:InnoDB实现的RR,通过锁机制(包含next-key lock)、MVCC(包括数据的隐藏列、基于undo log的版本链、ReadView)等,实现了一定程度的隔离性,可以满足大多数场景的需要

问:数据库的隔离级别,mysql在那个级别
答:读未提交,读已提交,可重复读 ,序列化,数据库默认是可重复读

问:说说你知道的索引类型
答:普通索引,主键索引,唯一索引,组合索引,全文索引

问:索引失效有哪些情况
答:组合索引没有按照顺序查询 ,计算、函数、类型转换(自动或手动)导致索引失效,不等于( != 或者 <> )索引失效, is null 可以使用索引,is not null 无法使用索引,like 以通配符 % 开头索引失效,OR 前后存在非索引的列,索引失效

问:说一下你对于mysql的优化思路
答:先从阿里云上查看有哪些慢sql然后把他提取出来,像select *这种就必须修改到具体需要的字段 ,改完以后还是慢就用执行计划查看一下索引命中的情况 ,添加需要字段的索引去除哪些会导致索引失效的写法 如 or语句 like 以通配符 % 开头等,修改完后还是慢的话就把多表的查询拆分为单表的查询在java代码里来实现数据的传递

3.redis

问:redis有几种数据类型
答: string(字符串),hash(哈希),list(列表),set(集合),zset(sorted set:有序集合)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值