微芯研究院一面4.2

0.说一下集合

ArrayList、LinkedList、HashMap的原理大概讲了一下。

1.讲讲AOP

主要讲一下jdk动态代理和cglib动态代理就行。

2.讲一下事务是怎样实现的,默认的传播行为,项目中用到了哪几种传播行为

之前没有注意默认的传播行为,看了一下源代码,默认的是Required,不记得项目中用到了哪几种,根据业务逻辑和场景分析了一下。

3.同一个service中,一个非事务方法调用事务方法,出现异常会回滚吗

我:会。
面试官:不对,因为它调用自己的方法不会被事务拦截器拦截到。
面试完我自己写代码试了一下,发现不管是jdk还是cglib动态代理都不会被拦截,是的,因为直接调用的内部方法不会走代理。

4.怎样将String转化为Stream

不太记得了(记IO流的转换可真费劲呐!看来需要系统地总结一下了!)
这篇文章讲得挺好的(IO流)

byte[] bytes = s.getBytes();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
InputStreamReader inputStreamReader = new InputStreamReader(byteArrayInputStream );
5.怎样防止订单重复提交

我:项目中没有注意,之前写demo的时候了解过,就是需要后台给前台传一个值,然后前台在提交数据的时候把这个值一起提交,后台判断是否匹配,如果匹配说明提交正常,否则不应该再次提交(就是token,当时忘了叫啥了)
面试官:还有别的方法吗?
我:好像没了
(还有禁用按钮啊,页面跳转啊,后台重定向啊)

6.阻塞队列知道吗

知道一点,BlockingQueue

7.在哪里可以用到阻塞队列呢

我:我们项目中好像没有用到
面试官:你想想哪里可以用到它
我:消费者生产者
面试官:能说一下生产者消费者吗
我:就是生产者把他生产出来的东西放到队列中,消费者到队列中去取他需要的东西,在队列已满的时候,生产者会被阻塞,队列空的时候消费者会被阻塞。队列在这里其实就相当于一个工厂,额不对一个仓库。
面试官:嗯,意思表达出来了

7.定时器有没有用过,有什么办法可以比Timer更优

没想起来(之前写过Demo,但是平时没有用过所以全忘了,发现我之前还写过一个Timer用法的博客…e…我可能是鱼…),主要是我们项目中用的是消息队列设置定时任务,但是我没有仔细看过它是怎样实现的,而且担心我答跑题,就没说。但是后来想想可能面试官就是问的消息队列~

9.redis

看到配置文件中有配,但是不太了解项目中哪里用了…

10.还问了很多项目相关的内容,会问很细的点,查看你对项目的熟悉和理解程度。还问了加班。

这个部分答得比较好。毕竟那么多需求不是白做的,害。但是!问到一些我了解并且经常看到甚至去他们那里找bug但是不是我做的模块的时候,答得不太好,虽然平时会去看别人写的代码,但是看完我就忘了,没有自己做的东西印象深刻哎!

11.一个编程题目

一个整数数组int[] nums,一个整数n

  • 存在且只存在一对数之和=n
  • 求这俩数
    (想了两分钟,想要先排序,但是排完序?想不到了耶,下面是面试完做出来的~喔百度了一下…哈哈哈哈哈,哦我顺便写成了不只俩数的情况)
package com.example.demo.examine;

/**
* @Description
*
* 一个整数数组int[] nums,一个整数n
* 存在且只存在一对数之和=n
* 求这俩数
* @Author Radish
* @Date 2020/4/2
*/

public class GetIndexInArrayByN {
   public static void main(String[] args) {
       getIndexs(new int[]{7,1,7,9,7,3,5,2,4,6,0,1},5);
   }
   //先排序,求最大值和最小值之和,如果>n,最大值往前走,如果
   public static void getIndexs(int[] nums, int n) {
       //不如...换个有意思的排序?嘿嘿嘿....
       //先来快排吧~你要掌握才行啊!
       quickSort(nums,0,nums.length-1);
       for (int i : nums) {
           System.out.print(i + "\t");
       }

       //
       int i = 0;
       int j = nums.length-1;
       while (i < j) {
           while (nums[i] + nums[j] != n) {
               if (nums[i] + nums[j] < n) {
                   //小了,变大
                   i++;
               } else {
                   j--;
               }
           }
           System.out.println("结果是:" + nums[i] + ", " + nums[j]);
           i++;j--;
       }

   }

   //很棒!
   public static void quickSort(int[] nums, int l, int r) {
       if (l >= r) return;
       int i = l;
       int j = r;
       int point = nums[i];
       while (i < j) {
           //右边的小数
           while (i < j && nums[j] >= point){
               j--;
           }
           if (i < j) {
               nums[i] = nums[j];
           }
           //左边的大数
           while (i < j && nums[i] <= point) {
               i++;
           }
           if (i < j) {
               nums[j] = nums[i];
           }
       }
       nums[i] = point;
       //左边
       quickSort(nums, l, i-1);
       //右边
       quickSort(nums, i+1, r);
   }
   //堆排序?要不要挑战一哈er?罢辽先复习框架吧
}

面试官:那你有什么问题吗
我:你们是做啥的啊,就是业务方面
面试官:我们有电商啊还有啥啊啥啊啥啊啥啊…
我:那…你们是外包吗?
面试官:这个你放心,我可以很负责任地告诉你,我们招你进来是给我们自己用的,绝对不是外包(差点就信了会把我招进去…)
我:喔~这样啊哈哈哈,那你们都会用到哪些技术呢
面试官:跟你们用的是差不多的,都是spring这一套,然后springboot啊,springcloud啊这些
我:还有一个问题,您觉得我刚才回答得怎么样呀(娇羞哈哈哈哈哈)
面试官:看得出来你绝对是有两年经验的,然后一些基础和底层的东西答得都很好,可能是复习了有一些准备,但是对于框架和中间件好像了解的不多,好像就只是调用一下。
我:恩恩对的(面试官果真是火眼金睛!但是其实人家只有一年多一点的经验啦哈哈哈哈哈多出来的经验大概是加班加出来的…)中间件那些用的比较少,所以了解得不多,我会再学习一下的。
面试官:好的,那我们今天的面试就到这里吧,之后等hr的通知就行
我:好的,那谢谢您!
面试官:也谢谢你~再见!
我:再见!

总结

  虽然没有成功,但是,是一次很愉悦的面试经历。面试官并没有一味地去问很多框架啊原理啊底层啊啥的,问了很多项目相关的内容(不是问商业机密,是一些细节你可能会怎样处理啊之类的,其实就是了解你对项目的把控),然后在我回答的过程中,会给我每个问题的反馈,我答错的他会进行纠正。然后我在讲的时候就一直听到面试官在那头儿笑…(好啦人家知道人家是一个开心果啦!)总之,就是一场开心的技术的交流~ nice!(如果去这家公司工作应该也会比较开心吧!为它打call!对了,这是一家民营非盈利性质的企业,e…我也不太懂,面试官让我了解一下我还没有了解~)

  好啦,我要继续学习啦!话说,下周就要复工了耶,不想复工,想安安静静地复习然后把现有的两个面试都面试完再说。害!学习真是令人上头!

你可能感兴趣的:(面试经验)