面试题篇(没答案)

148 阅读3分钟

这个是最近看到的面试题,很多俺还没有学到先码住,万一有大佬帮忙回答了 1、学了哪些课程?选一个你最熟悉的,给我们介绍一下
2、数据库隔离级别
4个 读已提交,读未提交,可重复读,串行化。
但是肯定不是这么简单,然后想到和多事物并发有关 介绍了多事物并发的问题
(1)脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在事物T2读取无效。

(2)不可重复读:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;

(3)幻读:事务1读取记录时事务2增加了记录并提交,事务1再次读取时可以看到事务2新增的记录;

读未提交会产生脏读,不可重复读,幻读
事例:老板要给员工发工资,员工工资是3.6万/月。但是发工资时老板不小心按错了数字,按成3.9万/月,该钱已经打到员工的户口,但是事务还没有提交,就在这时,员工去查看自己这个月的工资,发现比往常多了3千元,以为涨工资了非常高兴。但是老板及时发现了不对,马上回滚差点就提交了的事务,将数字改成3.6万再提交。

  分析:实际员工这个月的工资还是3.6万,但是他看到的是3.9万。他看到的是老板还没提交事务时的数据。这就是脏读。因此,在这种隔离级别下,查询是不会加锁的,也由于查询的不加锁,所以这种隔离级别的一致性是最差的,可能会产生“脏读”、“不可重复读”、“幻读”。如无特殊情况,基本是不会使用这种隔离级别的。

  那怎么解决脏读呢?已读提交,能解决脏读问题
读已提交会有不可重复读,幻读

可重复读会产生幻读

3、介绍一下你的项目,包括功能、怎么实现的、有哪些问题
这个问题,就可以扯一些高大上的内容

4、AOP
spring里面的,提高代码可重用,更简单,高效,便捷
5、重写和重载
重写,是子类重写父类的方法 重载,定义相同的方法名,参数不一样

6、static,静态能调用非静态吗?如果硬要调用呢?
不能,new 7、事务的注解
8、SQL优化
9、索引用什么实现的
10、介绍三次握手,为什么两次不行
11、HTTP和HTTPS有什么不同
12、你是怎么理解并发和多线程的,整体介绍一下
13、前端技术有点落后,要了解一些最新的技术、框架

14.web系统包含了哪些功能

15.学生项目用的JSP、SSM技术比较老旧了,项目中遇到了哪些困难怎么解决的

16、排序

冒泡: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

```//假设数组为 a 实际我们只需要执行 a.length - 1 次排序 for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1;j++){ //相邻数进行比较,符合条件进行替换 if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } }



快速排序

```  定义数组,主元假设arr[l]
     sp=i+1;right=右边。
     在左边《右边,如果当前sp对应值小于主元,sp++;
     否则,交换sp和right对应值,然后right--;

    public int pv(int[]arr,int l,int r){
int p=arr[l];//左边是主元
int sp=l+1;//左边位置
int right=r;
while(sp<=right){
    if(arr[sp]<=p){
        sp++;
    }else{
        swap(arr,sp,right);
        right--;
    }
}swap(arr,l,right);
return right;

    }
        /**
     * 递归调用单向扫描方法
     */
    public void quickSort(int[] arr, int l, int r) {
        if (l < r) {
            int q = pv(arr, l, r);
            quickSort(arr, l, q - 1);
            quickSort(arr, q + 1, r);
        }
    }
        /**
     * 输出数组内容
     */
    public void showArray(int[] a){
        for (int a1 : a) {
            System.out.print(a1+" ");
        }
    }
}
/*
也可以递归调用双向扫描
/**
//核心代码
    public int pv(int[]arr,int l,int r){
        int p=arr[l];
        int left=l+1;
        int right=r;
        while (left <= right) {
            // left向右走,直到遇见大于主元的元素
        if(arr[left]<=p){
            left++;
        }
        // right向左走,直到遇见小于或等于主元的元素
        if(arr[right]>p){
            right--;
        }
        if(left<right){
            swap(arr, left, right);
        }
    }
    swap(arr, l, right);
        return right;
}
     * 递归调用双指针扫描方法
     */
    public void quickSort(int[] arr, int l, int r) {
        if (l < r) {
            int q = pv(arr, l, r);
            quickSort(arr, l, q - 1);
            quickSort(arr, q + 1, r);
        }
    }
*/

17.问了算法