搜狐校招Java后端开发一面面经——已过一面

全程一个半小时,给我说得口干舌燥,面完还以为过不了了,去问了 hr ,hr 说过了,我说我很多没答好诶,她说考察可能会很深入但是不要求一定了解,主要看同学的基础和学习能力
  1. Java 基本数据类型
  2. 装箱和拆箱
  3. Java 的特点
  4. 怎么实现多态的
  5. 什么动态绑定,什么是动态代理(这个没答好)
  6. 熟悉哪些 Java 集合类
  7. ArrayList 和 LinkedList 的区别和适用场景
  8. HashMap 的底层实现,以及 put 操作,hash 函数,二次扰动,扩容机制
  9. LinkHashMap 了解吗?(不了解)
  10. ConcurrentHashMap 的底层实现,怎么做到线程安全的
  11. 比较了 JDK 1.7 和 JDK 1.8 中 HashMap 和 ConcurrentHashMap 的不同
  12. 写过多线程 Java 编程吗,都是怎么写的 (答:Synchronized)
  13. Synchronized 底层是怎么实现的,同步代码块和同步方法
  14. 扯到了 Synchronized 的锁优化,偏向锁 、轻量级锁、重量级锁
  15. 说一下 wait 和 sleep 的区别
  16. 可不可以自己手动加锁,手动加锁你怎么实现,底层又是怎么实现的 (不太明白,扯了 lock 和 unlock 指令)
  17. 上面扯到指令,然后又开始了类加载机制
  18. 对象何时初始化,初始化的顺序(没太懂他的意思,也没答好)
  19. 类加载器以及双亲委派机制,以及破坏双亲委派机制的场景(不知道什么场景)
  20. Java 怎么去实现共享操作,多线程访问同一数据 (不了解)
  21. 怎么创建线程,说一下线程池,自己手动构造线程池的核心参数,线程池的工作原理
  22. 说一说 AQS,底层怎么实现的(没答好,当时已经有点蒙了,问题太多了,也有很多没答好)
  23. 然后 CAS 是什么(这个我知道)
  24. 说一下 Future 和 FutureTask,以及他们之间的区别 (说得七七八八)
  25. 怎么实现在一个线程中,把计算结果这个操作放在一边执行,然后线程继续别的操作 (不了解)
  26. 怎么实现多个计算线程全部到达之后再进行下一步的操作(我说了 CountDownLatch 和 join)
  27. 最后算法题:给一个数组和 target 值,找出长度最长的且和等于 target 的连续子数组的长度 (写了个 O(n^2) 的,但是面试官说有 O (n) 的,我没想出来)
全程没有问 gc 和 数据库,明明还好好准备了,最怕并发,结果一堆并发...

放下算法题代码,O(n) 复杂度。
感谢@带带大师哥 的前缀和 + 双指针的思路
public class Main {
    public static void main(String[] args) {
        int[] nums = {1,3,4,5,1,1,1,1};
        int target = 5;
        System.out.println(maxLenthSubArray(nums,target));
    }
    public static int maxLenthSubArray(int[] nums, int target) {
        int ans = 0;
        int[] d = new int[nums.length];
        d[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            d[i] = d[i - 1] + nums[i];
        }
        int pre = 0;
        int last = 1;
        while (last < nums.length && pre < nums.length){
            if (d[last] - d[pre] == target){
                if (ans < last - pre)
                    ans = last - pre;
                last++;
                continue;
            }
            if (d[last] - d[pre] > target)
                pre++;
            if (d[last] - d[pre] < target)
                last++;
            System.out.println(last + " " + pre);  // 看双指针的移动
        }
        return ans;
    }
}



#搜狐校招##搜狐##Java工程师##面经##校招#
全部评论
分享面经,许愿OC
点赞 回复 分享
发布于 2020-05-07 23:54
算法不是爽指针就能On了吗
点赞 回复 分享
发布于 2020-05-08 00:21
26 应该是CylicBarrier吧
点赞 回复 分享
发布于 2020-05-08 08:01
楼主 搜狐哪个部门啊
点赞 回复 分享
发布于 2020-05-08 09:43
join 不是会规定顺序吗
点赞 回复 分享
发布于 2020-05-08 23:52
那个25 和24 好像有联系 , 可以通过使用futuretask 进行计算,然后过一段时间去得到结果
点赞 回复 分享
发布于 2020-05-09 00:03
二面了吗
点赞 回复 分享
发布于 2020-05-10 21:11

相关推荐

扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
7 57 评论
分享
牛客网
牛客企业服务