后端开发工程师[Java]-商业产品技术职位 [社招-一面]

  • 面试介绍自己
  • 八股文 经典的一些
  • 线程之间的同步及机制 有哪些种类 以及区别 CountDownLatch CyclicBarrier Semaphore LockSupport
  • synchronizedReentrantLock实现和区别,jvm层的字节码等等(回答的不是很好)
  • 线上服务某些pod cpu过高怎么排查,负载不均匀是什么问题,经典Linux场景题,回答差不多就行(top jstatck arthas dump等 )
  • MySQL的三个日志文件 binlog redolog undolog 分别是什么作用,这个问题隐藏的mvvc原理呀,等深入的问题,回答不太好(redo log日志保证事务的持久性,使用undo log日志保证事务的原子性。binlog 做从库或者中间件的数据来源,以及保证数据库的一致性
  • 项目使用了队列Kafka说一下你们为什么用,一直Kafka的优点,你们消费者群组怎么设置,如何防止重复消费,分区的目的是啥?创建Topic如何将分区放置到不同Broker。(我其实之前用的Redis,后来领导买了Kafka我就改了,你要问我为啥,领导让用啥用啥,对了,还问你Redis队列构建,数据补偿,有什么优化措施,这点很怕问zookeeper,还好没问,不过高版本Kafka舍弃了zookeeper,改为了KRaft,好像更麻烦了)
  • 看你用了不少Redis,熟悉结构吧,一堆瞎编(看过一点源码),然后就是redis大key怎么处理(其实就是减小单个key大小,可以根据属性拆分,亦可以拆成不同部分,关键在于降低一个key的大小)
  • 热点key定义,如何缓存热点key,这点就要说下缓存常见问题,缓存穿透、缓存击穿等等,面试反问是不是可以做二级 三级缓存,是的,可以在redis做一个,以及jvm使用hashmap等类似的缓存工具做一个
  • redis 还有什么使用吗 就是分布式锁之类的了,实现基于k8s部署的自动雪花算法机器中心以及数据中心维护,心跳
  • 做道题吧,如下 由于他那个飞书(打不开代码框),就让我说下思路,这题一看就是第一个思路双指针,不过做的时候真不一定十分钟ac
//输入:head = [1,2,3,4]
//输出:[1,4,2,3] 
//
// 示例 2: 
//
// 
//
// 
//输入:head = [1,2,3,4,5]
//输出:[1,5,2,4,3] 
//
// 
//
// 提示: 
//
// 
// 链表的长度范围为 [1, 5 * 10⁴] 
// 1 <= node.val <= 1000 
// 
//



//leetcode submit region begin(Prohibit modification and deletion)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public void reorderList(ListNode head) {
        if (head == null || head.next == null) {
            return;
        }
        //快慢指针找到中间节点
        ListNode slow = head;
        ListNode fast = head;
        while (fast.next != null && fast.next.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        //反转后半部分链表
        ListNode pre = null;
        ListNode cur = slow.next;
        slow.next = null;
        while (cur != null) {
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        //合并两个链表
        ListNode p1 = head;
        ListNode p2 = pre;
        while (p1 != null && p2 != null) {
            ListNode next1 = p1.next;
            ListNode next2 = p2.next;
            p1.next = p2;
            p2.next = next1;
            p1 = next1;
            p2 = next2;
        }
    }
}
//leetcode submit region end(Prohibit modification and deletion)
  • 咱们平常排序比较多,说下快排思想,java的快排呢,时间复杂度多少,什么时候快排并不好用,堆排序呢,时间复杂度,java中有吗,对于n个数取Top m ,应该使用什么,时间复杂度(脑残了,说成,应该是,介绍下堆排序,其实使用PriorityQueue<Integer> queue = new PriorityQueue<>(n);默认小顶队, 大顶堆 PriorityQueue<Integer> queue = new PriorityQueue<>((o1, o2) -> o2 - o1);

  • 然后就是反问,45分钟左右,主要是代码编辑器打不开,省时间,估计没有后续。

#字节##字节面试##面经##社招#
全部评论
几年经验啊
点赞 回复 分享
发布于 07-18 11:42 上海

相关推荐

11 13 评论
分享
牛客网
牛客企业服务