ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

面试后端岗,这些技术栈问题答不上来直接挂

面试后端岗,这些技术栈问题答不上来直接挂 一个学弟准备了三个月把网上能找到的Java面试题背了个遍。从HashMap扩容到线程池参数从JVM垃圾回收到MySQL隔离级别倒背如流。模拟面试时我问他“你们线上系统用过线程池吗corePoolSize和maxPoolSize怎么设置的”他愣了三秒说“一般默认就行吧。”这就是当下后端面试的真实写照。面试官不再满足于你“背出了结论”他要听你“推演的过程”。下面这几个技术栈问题答不上来基本等于直接挂。HashMap的put流程你能画出来吗“HashMap底层是数组链表红黑树”——这句话谁都会背。面试官接着会问哈希值怎么算的下标怎么定位的为什么要用高16位异或低16位加载因子为什么是0.75而不是1扩容时元素怎么迁移链表什么时候转红黑树什么时候又退回来面试官不是在考你背没背过而是在确认你有没有看过源码。1.7头插法扩容会死循环1.8改成尾插修复了但并发下size()仍然不准。这些问题串起来考的是你对数据结构的理解深度。ConcurrentHashMap怎么保证线程安全JDK 1.7用分段锁1.8改成CASsynchronized锁头节点volatile保证可见性。面试官会追问为什么放弃分段锁扩容时多线程怎么协同迁移数据sizeCtl这个字段到底控制了多少种状态ForwardingNode是什么时候插入的只答“加了synchronized”远远不够。面试官想听的是你理解并发控制的本质——锁的粒度、状态机的流转、以及为什么这样设计比那样设计好。Transactional为什么会失效这是Spring面试的经典送命题。自调用失效是因为内部方法调用走的是this引用不经过AOP代理非public方法失效是因为CGLIB只能代理public方法异常被catch了不回滚是因为事务切面感知不到异常默认只对RuntimeException回滚检查型异常必须配rollbackFor。面试官真正想确认的是你知不知道Spring事务的本质是AOP代理加ThreadLocal绑定事务上下文。事务上下文靠ThreadLocal维护异步线程默认不继承——这不是bug是设计使然。MySQL为什么有时候明明有索引却不走面试官问这个不是让你背“最左前缀原则”就完事了。索引列上做函数运算会失效隐式类型转换会失效like %张前置通配符会失效or连接非索引列会失效。更关键的是不走索引的UPDATE/DELETE不是变慢的问题是把整张表锁死的问题。面试官还会接着问EXPLAIN里type列从ALL到const你实际优化过哪一档Using filesort和Using temporary你遇到过吗这些问题的答案不在书里在你跑过的SQL里。Redis缓存和数据库怎么保证一致性先更新数据库再删除缓存这是标准答案。面试官追问删缓存失败了怎么办延时双删的时间怎么定异步监听binlog删除的方案你了解吗更大的坑在后面缓存击穿、穿透、雪崩分别是什么怎么解决缓存雪崩是大量key同时失效解决方案是过期时间加随机值缓存击穿是热点key失效需要互斥锁或永不过期缓存穿透是查不存在的数据布隆过滤器是标配。这三个概念混淆了面试官基本判定你没在生产环境踩过坑。消息队列怎么保证消息不丢失生产端要确认Broker收到了Broker端要持久化加副本消费端要在业务处理完成后手动ack。任何一段处理不完整消息就可能丢失。面试官还会问At Least Once为什么会产生重复消息消费者怎么保证幂等消息积压了怎么办回答“加机器”只是第一步真正的答案是先定位积压原因——是消费逻辑慢还是分区数不够然后才是扩容和限流。JVM频繁Full GC你怎么排查“调大堆内存”是最差的答案。正确的路径是先用jstat -gcutil看老年代占用趋势再用jmap dump堆快照用MAT分析大对象和引用链。线上排查的核心是先保留证据再缩小范围最后验证修复。常见原因包括缓存Map没设容量上限导致对象持续晋升老年代、ThreadLocal没remove导致线程池里的线程持有大对象、频繁创建大数组触发直接内存OOM。面试官想听的不是你背了多少GC参数而是你有没有真的定位过一次线上问题。这些技术栈问题的共同点是面试官不再考“你知道什么”而是考“你在什么场景下用过、踩过什么坑、怎么解决的”。背答案能应付一面场景推演才能过终面。把每个知识点绑到一个你真实做过的项目上面试官追问三层你都不虚。
返回列表