阿里本地生活暑期开发实习(1面+2面+3面,凉)

其实已经面了挺了久了,一面是4.23,当时还没笔试,突然接到一面电话,就和面试官说我还没笔试呢,怎么就一面了,我说我还没准备好,面试官来了一句,不让你准备,现在开始,我说那好吧。二面是5.1晚上,对,没错,一号的晚上,当时正在电影院看柯南,突然接到面视电话,就在电影院面了。二面结束后到现在一直没有消息,本来想面完写个完整的面经,系统里也是一直正在面视的状态,不知道为啥,大概是凉了。三面是5.14号,项目部分答的不好,系统里已结束。
一面:
  1. 为什么数据库中用B+树作为索引而不使用hash表
  2. 如何判断一个链表中是否有环形结构
  3. 数组和链表的性能分析
  4. 青蛙跳台阶问题:一开始答了一维的动态规划,没想到面试官是想让我答斐波那契数列数列通项
没了,一面的确就那么短,第一个问题答的不是很好,面试官让我回去好好看看。
二面:
  1. 数据库索引的作用以及优缺点
  2. satics关键字的作用,JAVA中satics关键字和private关键字能否被重写
  3. 方法覆盖和重载的区别
  4. 抽象类和接口的区别
  5. hascode和equals方法的重要性
  6. 开启线程的方法
  7. 索引B+树的数据结构
  8. concurrentHasMap JDK1.7和JDK1.8的取别还有锁粒度
三面:
  1. 为什么判断链表有环的过程中快指针要取为1,可以取其他值吗?一定会相遇吗?
  2. 判断一个数是否为质数?为什么遍历的过程的上限是开方
  3. 项目中发帖的过程
  4. 项目中对帖子的循环引用回复怎么实现
  5. 热帖的实现过程
  6. 如何集中删除某部分热帖(比如针对某个地点)
  7. 帖子中的表情该怎么实现
一面之后,进行的笔试,笔试太差,面试官让我加试一道题(伯乐系统)

加试题:给你一个长度为N的链表。N很大,但你不知道N有多大,你的任务是从这N个元素中随机取出K个元素。你只能遍历整个链表一次,你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现的概率相等)
后面网上查了好久没有直接的答案,这里贴一下我的做法吧:
import java.util.*;
public class Solution{
   public int[] Main(ListNode root,int k)
   {
     
     //先接受前k个杨素
     int[] samples[]=new int[k];
     Node temp=root;
     for(int i=0;i<k;i++)
     {  
       samples[i]=temp.val;
       temp=temp.next;
     }
     //记录元素的下标值
     int p=k;
     //生成随机数
     Random random=new Random();
     int j;
     //开始处理
     while(temp!=null)
     {
       
       j=random.nextInt(p+1);
       //如果得到的随机数小于k,则接受这个数
       if(j<k)
       {
         samples[j]=temp.val;
       }
       temp=temp.next;
       //索引要++
       p++;
     }
     return samples;
    }
}
}

#实习##面经##阿里巴巴##Java工程师#
全部评论
力扣有个差不多的:https://leetcode-cn.com/problems/linked-list-random-node/
点赞 回复 分享
发布于 2021-05-14 14:40

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
评论
4
28
分享
牛客网
牛客企业服务