2021年秋招面试复盘 | 携程Java后端一面+二面+HR面(已意向)

本文是作者2021年秋招在携程Java后端面试的经历分享,涵盖一面和二面的主要问题,涉及线程、进程、LRU、线程安全等技术点。面试过程中,作者对智能机器人课题、线程和线程安全、LRU机制、ThreadLocal的理解及其问题进行了深入讨论,并反思了线程内部结构、Redis应用等问题。
摘要由CSDN通过智能技术生成

一面(8.19)

聊聊你研究生的课题(智能机器人相关)
几个做的啊,分工是什么样的

如果以后想把你们做的东西商业化 产品化,怎么去收集用户的信息?
云?用户定期上传数据到云服务器,公司负责处理这些数据(不懂。朝着云的方向扯了一些)

进程与线程的区别

调度:进程是资源管理分配的基本单位,线程是程序执行调度的基本单位。
切换:线程上下文切换比进程上下文切换要快得多。
拥有资源: 进程是拥有资源的一个独立单位,线程不拥有系统资源,但是可以访问隶属于进程的资源。
系统开销: 创建或撤销进程时,系统都要为之分配或回收系统资源,如内存空间,I/O设备等,OS所付出的开销显著大于在创建或撤销线程时的开销,进程切换的开销也远大于线程切换的开销。

线程一般存在什么地方?线程里有什么东西?

额。有没有大佬懂的评论区指导一波,当时卡住了。。

说说看自己对LRU的理解。实现思路

最近最少使用机制,是操作系统中用来实现页面替换的一种优秀的算法。本质上是一种双向链表的数据结构,用哈希表来辅助维护里面的节点位置。插入时先看看哈希表里有键值冲突:没有的话,用键值新构造一个节点,插入到链表中,并移到链表头,再看看有没有越界,越了的话要把尾部节点删除;同时放入哈希表中。有的话,用新值代替旧值,然后移到链表头。若读取,判断键对应的节点存不存在,存在的话读值并把节点移到头部。其中涉及到把节点移到链表头、删除链表尾的操作。附上实现,面试官让口述:

public class Solution {
  /**
   * lru design
   * @param operators int整型二维数组 the ops
   * @param k int整型 the k
   * @return int整型一维数组
   */
  class DoubleListNode {
      int key;
      int val;
      DoubleListNode pre;
      DoubleListNode next;
      DoubleListNode() {}
      DoubleListNode(int key, int val) {
          this.key = key;
          this.val = val;
      }
  }

  DoubleListNode head = new DoubleListNode(-1, -1);
  DoubleListNode tail = new DoubleListNode(-1, -1);
  HashMap<Integer, DoubleListNode> map = new HashMap<>();

  public int[] LRU (int[][] operators, int k) {
      // write code here
      ArrayList<Integer> ans = new ArrayList<>();
      head.next = tail;
      tail.pre = head;
      int size = 0;

      for(int i = 0; i < operators.length; i++){
          int tmp_key = operators[i][1];
          DoubleListNode node = map.get(tmp_key);
          if(operators[i][0] == 1){
              if(node == null){
                  DoubleListNode new_node = new DoubleListNode(tmp_key, operators[i][2]);
                  map.put(tmp_key, new_node);
                  add2head(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>