小红书杀疯了!现在想进小红书,都会被问到哪些内容?

大家好,我是土哥,一位被大数据开发耽误的歌手。

这两天,小红书的程序员们怕是夜不能寐,白天维护国内环境稳定,到了晚上还得陪着众多漂亮国的网友。

这事说来话长,咱们长话短说。

由于 TikTok 在美国即将面临禁令,许多美国用户为了避免 Tiktok 被封掉导致账户无法使用,因此他们转向了其他中国社交媒体平台,如小红书, 同时自称为:TikTok Refugee ~

这下可不得了了,这两天直接在 APP Store 上面把小红书的下载量干到了第一。

打开小红书,你会发现,全都是外国网友,一个个点赞,评论非常多,我都以为自己在使用国外软件,哈哈。

alt

xhs目前的状态就是国内外帖子并存,不知道后续是否会做隔离方案?

用户增长、流量暴增,带动小红书股价上涨的同时,对内部程序员的要求也必然会更高,需要他们在维持生态稳定、性能优化、异常监控等多方面做到更好更严谨,对未来的招聘流程,想必也会把控更严格,优中择优。后续有想法面xhs的小伙伴,要做好心理准备啦。

这里给大家分享三道大数据岗位,小红书之前考过的算法题,要求 30 分钟写完!!!

各位小伙伴们也可以测一下是否能在规定时间内搞定这3题。

算法题

面试官:1 写一个算法吧,求 两数之和

解题思路:

创建一个哈希表,对于每一个 x,我们首先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

使用哈希表,可以将寻找 target - x 的时间复杂度降低到从 O(N) 降低到 O(1)。

class Solution {
   public int[] twoSum(int[] nums, int target) {
       Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
       for (int i = 0; i < nums.length; ++i) {
           if (hashtable.containsKey(target - nums[i])) {
               return new int[]{hashtable.get(target - nums[i]), i};
           }
           hashtable.put(nums[i], i);
       }
       return new int[0];
   }
}

复杂度分析:

时间复杂度:O(N),其中 N 是数组中的元素数量。对于每一个元素 x,我们可以O(1) 地寻找 target - x。

空间复杂度:O(N),其中 N 是数组中的元素数量。主要为哈希表的开销。

面试官:2 再写个 三数之和

解题思路:

ArrayList 集合 + 排序 + 双指针

  1. 先创建集合 ArrayList。
  2. 判断数组长度小于3,返回定义的集合。
  3. 对数组排序 Arrays.sort(nums);
  4. for循环遍历数组;
  5. 判断,当nums[i] >0 返回 break;因为nums[i] 大于0了,后面的都大于0了
  6. 判断 当nums[i] ==nums[i-1],continue;
  7. 定义双指针 L = i+1; R = len-1;
  8. while(R>L) 定义 sum = nums[i] + nums[L] + nums[R];
  9. 判断 当sum == 0, 将三个数封装成集合,装进 listArray.
  10. 当 sum > 0,证明R 往后更大,所以 R--;
  11. 当 sum < 0,证明 R已经是最大了,L应该往右移,L++。
  12. 返回 listArray
class Solution {
    
    //nums = [-1,0,1,2,-1,-4] ,[[-1,-1,2],[-1,0,1]]
    
    public List<List<Integer>> threeSum(int[] nums) {
        
        // 1 新建 list 集合
        List<List<Integer>> listArray = new ArrayList<>();
        
        // 2 条件判断
        
        if(nums ==null || nums.length<3){
            return listArray;
        }
        
        //3 排序 [-4,-1,-1,0,1,2]
        Arrays.sort(nums);
        
        int len = nums.length;
        
        // 4 for 循环遍历
        for(int i =0;i<len;i++){
            if(nums[i]>0) break;
            if(i>0 && nums[i] == nums[i-1]) continue;
            // 5 定义双指针
             int L = i+1;
             int R = len-1;
            while(R>L){
                int sum = nums[i] + nums[L] + nums[R];
                // 6 判断 sum ==0
                if(sum ==0){
                    listArray.add(Arrays.asList(nums[i],nums[L],nums[R]));
                    while(L<R && nums[L] ==nums[L+1]) L++;
                    while(L<R && nums[R] == nums[R-1]) R--;
                    L++;
                    R--;
                }
                if(sum >0){
                 R--;   
                }
                if(sum <0){
                    L++;
                }
            }
        }
         return listArray;   
    }
}

时间复杂度:O(n^2)

3 面试官:看时间充沛,再来一道,求数组中递增子序列,数组中最多可以除去一个数字

举例:

(1)输入:1,3,6,2,7,5 输出:4

含义:当去除2时,最大递增子序列长度为1,3,6,7,所以长度为 4

(1)输入:1,3,8,2,6,5,7,9,3,11,1,2,3,4,3,5,6,7,8 输出:8

含义:当去除数字 3 时,最大长度为1,2,3,4,5,6,7,8 所以长度为8

解题思路:

该题的做法就是,定义最大递增长度初始值 max = 0,同时定义 累加器初始值 count = 1, 并定义开关初始值 flag = 0, 因为题目要求最多只能去除一个数字,所以让 flag 刚开始为0,当遇到要去除的数字时,flag ++,然后判断 flag <=1 里面的逻辑即可。

代码如下:

    public static int test(int[] nums){
        if(nums.length==0||nums==null){
            return 0;
        }
        // 累加器初始值为 1
        int count = 1;
        // 定义最大递增序列初始值为 1
        int max = 1;
        // 定义开关 flag 初始值为 0
        int flag = 0;
        
        for(int i=1;i<nums.length;i++){
            if(flag<=1){
                if(nums[i] - nums[i-1] >0){
                    count++;
                }else {
                    if (i==nums.length-1) {
                        break;
                    }
                    if(nums[i+1]-nums[i-1]>0&&nums[i] - nums[i-1]<=0){
                        flag++;
                    }else {
                        count = 1;
                    }
                }
            }else{
                flag = 0;
                count = 1;
            }
            max = Math.max(count,max);
        }
        return  max;
    }

以上就是本次分享的面试内容~

增值服务

增值服务:简历修改|面试辅导|Flink资料|模拟面试

你好,我是土哥,计算机硕士毕业,现某大厂资深大数据开发工程师。出生在一个 18 线开外的小村庄,通过自己努力毕业一年在新一线城市买房,在社招、校招斩获 28 家中大厂 offer。

土哥社招参加 28 场面试,100% 通过率,拿到全部 offer!

土哥这半年的悲惨人生,经历过被鸽 offer,最终触底反弹~

25 年新的一年,很多公司已经开启了节前面试-年后入职的流程。如果你想跳槽,但苦于一个人孤军奋战、无人指导、复习无从下手,或者不擅长写简历,手上只有拿不出手的毫无难点亮点的项目经历...

那么我的建议是多和身边的大佬沟通,哪怕是付费咨询,只要你能从他身上学到经验,那就是值得的。如果身边没有这样的人,那么我就毛遂自荐一下吧,毕竟,茫茫网络你能看到这篇文章何尝不是一种命运安排。

如果这篇文章对您有所帮助,或者有所启发的话求一键三连:点赞、转发、在看。

+土哥: ******************, 一块交流大数据~

#小红书求职进展汇总##tiktok#
全部评论

相关推荐

01-01 19:56
东北大学 Java
小博真爱学习:你这个经历和我之前面的一家很像,一面后第二天就二面了,然后就hr面了,问了些家庭状况,职业规划这些,然后打电话说过了,过了一个星期问,回答可能还要考虑一下,然后过了几天告诉我不合适😂
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务