面试问题总结

133 阅读4分钟
  1. 事务的4个特性,以及每个特性的介绍?原子性,一致性,隔离性,持久性

隔离性:针对数据资源的并发访问,事务的执行是相互独立的,它们不会相互干扰,也就是多个事务之间要存在隔离。

blog.csdn.net/weibo123012…

  1. 事务的隔离级别以及每个隔离级别解决的问题?

blog.csdn.net/weibo123012…

  1. 分布式事务?解决办法介绍?两阶段提交 三阶段提交是什么? 阿里中间件seata? blog.csdn.net/u010425776/…

阿里中间件seata? seata.io/zh-cn/docs/…

  1. 锁,syncornized 和 retrantLock 介绍?

  2. rocketmq 消息中间件学习?消息队列的设计?数据如何保存的?怎么存入到磁盘的? blog.csdn.net/qq_26896085…

  3. doubbo学习?dubbo的SPI是如何设计的? aobing.blog.csdn.net/article/det…

  4. sql语句优化,调优,慢sql问题解决?

  5. jvm的垃圾回收器 gone垃圾回收器?垃圾回收算法?

  6. jvm发生OOM异常,如何解决?工具是什么?

  7. 日常工作中 遇到哪些问题?如何解决的?解决效果如何?


  1. 二分查找算法?
  • 二分查找又称折半查找:每次划分一半进行下一步搜索。
  • 优点是比较次数少,查找速度快,平均性能好;
  • 其缺点是要求待查表为有序列表,且插入删除数据困难。
  • 因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
public class BinarySearch { 
        /** 
        * 二分查找算法 
        * 
        * @param srcArray 有序数组 
        * @param key 查找元素 
        * @return key的数组下标,没找到返回-1 
        */  
        public static void main(String[] args) { 
            int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};   
            System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81));  
        } 

        // 二分查找递归实现   
        public static int binSearch(int srcArray[], int start, int end, int key) {   
            int mid = (end - start) / 2 + start;   
            if (srcArray[mid] == key) {   
                return mid;   
            }   
            if (start >= end) {   
                return -1;   
            } else if (key > srcArray[mid]) {   
                return binSearch(srcArray, mid + 1, end, key);   
            } else if (key < srcArray[mid]) {   
                return binSearch(srcArray, start, mid - 1, key);   
            }   
            return -1;   
        } 

        // 二分查找普通循环实现   
        public static int binSearch(int srcArray[], int key) {   
            int mid = srcArray.length / 2;   
            if (key == srcArray[mid]) {   
                return mid;   
            }   

            int start = 0;   
            int end = srcArray.length - 1;   
            while (start <= end) {   
                mid = (end - start) / 2 + start;   
                if (key < srcArray[mid]) {   
                   end = mid - 1;   
                } else if (key > srcArray[mid]) {   
                    start = mid + 1;   
                } else {   
                    return mid;   
                }   
            }   
            return -1;   
        } 
    }

时间复杂度

比如:总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。 由于n/2^k取整后>=1,即令n/2^k=1, 可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)

  1. 选择排序算法 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序列表中找到最小(大)元素,存放到排序列表的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序列表的末尾。以此类推,直到所有元素均排序完毕。

  2. 持久化的三种状态

image.png

  1. 装饰器模式 www.jianshu.com/p/df81a440e…

  2. JMS概念

JMS即Java消息服务(Java Message Service)应用程序接口,是一个在Java平台中面向消息中间件API,用于在两个应用程序之间,或分布式系统间发送消息,进行异步通信。

17HttpServletResponse接口

提供了与 HTTP 协议相关的一些方法,Servlet 可通过这些方法来设置HTTP响应头或向客户端写Cookie

负责处理HTTP响应报文。

18 线程调度和线程同步的相关方法

image.png

19 sleep和wait的区别?

image.png

20 jvm 堆溢出参数

image.png

21 spring如何解决循环依赖问题

  • spring是通过递归的方式获取目标bean及其所依赖的bean的;
  • Spring实例化一个bean的时候,是分两步进行的,首先实例化目标bean,然后为其注入属性。

结合这两点,也就是说,Spring在实例化一个bean的时候,是首先递归的实例化其所依赖的所有bean,直到某个bean没有依赖其他bean,此时就会将该实例返回,然后反递归的将获取到的bean设置为各个上层bean的属性的。

www.cnblogs.com/zzq6032010/…

22 spring aop在什么时候加载?

  • AOP是在初始化处理器的后置处理器方法中进行实现的,也就是BanPostProcessor接口相关的实现类进行postProcessAfterInitialization方法的重写
  • AbstractAutoProxyCreator类实现重写了该方法,核心是实现了wrapIfNecessary方法 Aop阶段是在初始化处理器的的后置处理器方法中进行实现的,BeanPostProcessor接口里面有前置处理器方法与后置处理器方法

blog.csdn.net/weixin_4227…

23 双重校验锁代码谈一下volatile关键字

www.cnblogs.com/zhuifeng523…

blog.csdn.net/qq_24047659…