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

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

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

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

由于 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#
全部评论

相关推荐

点赞 评论 收藏
分享
头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
嵌入式的小白:不错啊,淘天也是挺好的,恭喜
我的求职进度条
点赞 评论 收藏
分享
评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务