玩吧

本文深入探讨Java线程池配置与工作原理,分析核心与最大线程数设定,以及线程回收机制。同时,详细讲解HashMap的扩容过程、容量选择原因及其与桶大小的关系,探讨链表与红黑树转换策略。此外,文章还覆盖了Linux日志查看、JVM监控、数据库执行计划解读等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一面

 

  • 自我介绍

介绍了实习相关和工作相关

  • 为什么看机会
  • 线程池参数
public class ThreadPoolConfig {
    /**
     * 机器内核数
     */
    private final static int AVAILABLE_PROCESSORS = Runtime.getRuntime().availableProcessors() * 2;
    /**
     * 线程池创建
     */
    private static ExecutorService THREADPOOL = new ThreadPoolExecutor(AVAILABLE_PROCESSORS, 50,
        0L, TimeUnit.MILLISECONDS,
        new LinkedBlockingQueue<Runnable>(1024), new ThreadFactoryBuilder()
        .setNameFormat("call-thread-pool-%d").build(), new ThreadPoolExecutor.AbortPolicy());
    private ThreadPoolConfig() { }
    /**
     * 获取定长线程池
     *
     * @return
     */
    public static ExecutorService getThreadPool() {
        return THREADPOOL;
    }
}

 

队列一般用有界队列,不然可能撑爆内存

 

一家餐厅

corePoolSize 可以理解成一般情况下餐厅招5个厨师,核心成员就5个,就可以完成对餐厅客人的供给

maximumPoolSize 当节假日,餐厅生意比较好,5个已经忙不过来了,就再招3个达到8个,考虑到成本的最大数量,当生意又恢复到平时,另外3个临时工再干掉

  • 为什么阿里规范不让用executors
  • 线程池空闲的线程怎么回收,怎么判断线程空闲

keepAliveTime when the number of threads is greater than

*        the core, this is the maximum time that excess idle threads

*        will wait for new tasks before terminating.

  • HashMap扩容过程

double size 扩容

扩容因子 0.75 触发扩容

 

  • HashMap size 16 扩 32 目的是什么 ?

比如到12触发扩容到32,但就算用到14,也还有10几个位置没用,为什么一定要扩到32

我回答的是  16 二进制是 1111  ,32 二进制是 11111

这样key的hash值和1111/11111与和时,不会让桶的大小影响映射的位置

面试官问还有呢?

突然想到之前看过一篇文章说是,扩容后需要rehash,rehash后的结点要么在原位置,要么在原位置 + 16

 

  • 现在的cpu 求模和求与和效率上没什么差吧,那为什么源码用求与和,基于什么考虑

瞎球说的。。。

 

  • HashMap链表、红黑树相关

链表法,在阀值下链表 -> 红黑树 , 红黑树 -> 链表

红黑树效率更高

 

  • linux公司平时用什么

查日志  cat / tail 。。。

  • shell 脚本替换文本中的内容

shell学过,没实践经验

  • jstack 怎么用
  • jstack线程状态有哪些
  • mysql执行计划

explian

  • 一个sql语句,where 后面有好几个查询条件,用执行计划得到的count 扫描行数是什么

我回答是最优计划扫描B+树的行数 ,答的不好

 

rows: MySQL估算的为了找到所需行而要检索的行数,作为优化器选择key的参考

 

  • redis好在哪里

基于内存  单进程  多路复用   过期策略(优化版LRU)

 

  • redis bgsave fork子进程后,还接收新的写请求嘛,会不会产生脏数据,redis怎么处理的

接收写请求,子进程不影响主进程

对rdb文件的影响答的不好

 

  • 公司 redis 集群怎么样的
  • tcp  udp
  • 冒泡排序
  • 比较zab协议和raft协议

zab协议和raft协议都是基于拜占庭协议

zab协议是对zookeeper基于raft协议的改进版

zab协议包括消息广播,崩溃恢复

 

  • 用户登陆后延迟一段时间发红包怎么做(新用户延时短,老用户延时长)

我说是通过mq 没到 延迟时间一直自消费,到时间再调发红包服务

面试官说我想复杂了,就用jdk的延迟队列即可

 

 

二面

 

  • 用过k8s嘛
  • 公司怎么看服务器的状态
  • 公司怎么看mysql、redis相关的指标
  • 什么时候会看这些监控系统
  • 服务上线怎么确认上线成功,整个过程需要多久呢
  • 什么命令会导致redis 慢查询

key *

  • scan怎么用
  • HashMap 的容量为什么都是2的n次方

让结点打到桶的位置不受桶的大小影响,面试官问还有呢。。。

我说让结点rehash后的值,要么在原结点,要么在原结点 + 16

  • HashMap 扩容后rehash,都需要重新计算所有结点的hash值嘛
  • HashMap 的容量为什么都是2的n次方
  • 看过源码嘛
  • Spring ioc 怎么解决循环依赖,如果是你的话会怎么解决
  • 什么是强引用和弱引用
  • 做过长连接的项目嘛
  • 说说对重构的看法
  • 如果重构和业务需求并行怎么处理
  • 对分布式高并发有什么研究
  • zookeeper分布式锁怎么实现
  • 为什么需要分布式锁
  • 为什么需要分布式
  • 什么是驱动你学习这些东西的
  • 最近看过的书
  • 职业规划和行业意向

电商、娱乐、社交

  • 接收的加班时间范围
  • 200w  DAU,怎么存储用户id和用户信息,面试官提醒涉及垃圾回收器
  • 做一个英雄联盟的录像回放?

回答一:存放视频原件,根据byte流给用户

面试官:那加一个条件,可以切换标清、高清、超清、蓝光呢?

回答二:存放视频原件,根据不同的压缩策略给用户

面试官:加个条件,不能存放视频原价

回答三:(这个想了很久)

既然是游戏,那么人物啊,技能啊,动作啊,鼠标点击事件,肯定都是命令,都是代码,把这些命令存放在一个文件里

用户录像回放的时候,就把这些命令重放一遍,就类似redis的aof,mysql的binlog

 

 

三面

 

  • 自我介绍
  • 优缺点
  • 怎么学习
  • 看了哪些书
  • 遇到最大困难
  • 对加班的看法
  • 目前面了哪些公司
  • 想去什么样的公司
  • 职业规划
  • 会考虑管理吗
  • 提问题

玩吧上的哪块业务最需要人力开发和维护呀,哪些游戏最要人力投入

 

现在玩吧上都是小游戏,以后会不会考虑开发稍大型游戏

 

一个研发是负责一个游戏后台的开发,还是多个游戏后台开发

能者多劳

 

在现在pc端的英雄联盟、吃鸡,手机端有王者荣耀、吃鸡,怎么保证平台的竞争力和吸引力,和我们针对的用户群体(社交 + 娱乐)

我玩了咱们平台的狼人杀游戏,和专门做狼人杀的app还是有一定差距的,怎么保证我们的游戏又全又精

后面会投入人力和资源做相关的整改和优化吗

 

公司的主要技术栈   Spring Cloud + K8S

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值