觅动科技 Java开发 实习 一面

DNS 域名解析步骤是什么

当用户在浏览器输入:

java 复制代码
www.baidu.com

浏览器并不知道服务器 IP,需要先进行 DNS 解析

java 复制代码
浏览器缓存
→ 操作系统缓存
→ 本地域名服务器(LDNS)
→ 根域名服务器
→ .com 顶级域名服务器
→ baidu.com 权威 DNS
→ 返回 IP

浏览器会先查本地缓存,再查本地域名服务器,递归找到权威 DNS 返回 IP,之后客户端再通过 TCP 和 HTTPS 与服务端建立连接。

多个Docker之间如何通过域名访问

其实本质上:

Docker 内部自带了一套 DNS 服务。

所以:

复制代码
同一个 Docker Network 下
容器名 = 域名

可以直接互相访问。

Docker 在同一个网络下会自动维护内部 DNS。

容器之间可以直接通过"容器名"通信,不需要写死 IP。

所以在微服务或者多容器场景里,通常使用容器名作为服务域名。

为什么不能直接用 IP

Docker 容器 IP 会变化

比如:

  • 重启容器
  • 重新部署
  • 扩缩容

JWT 编码解码方案

JWT 是什么

一种"无状态"的用户认证方案。由 Header、Payload、Signature 三部分组成

Header 描述算法,Payload 存用户信息,Signature 用于防篡改(载荷部分不加密)

它常用于:

  • 登录认证
  • 微服务鉴权

JWT 为什么出现

JWT 最大优势是不依赖服务端 Session,非常适合微服务和分布式系统

但它也有缺点,

  • Payload 只是 Base64 编码,并不是加密,所以不能存敏感数据。
  • 主动失效比较困难,所以工程上通常会结合 Redis过期机制

对未来AI的看法

我认为未来 AI 一定会越来越像"基础设施",就像现在的数据库、中间件、云服务一样,逐渐成为软件系统的一部分。

目前的大模型已经具备很强的通用能力,但真正的难点其实已经不只是"模型本身",而是如何把 AI 工程化落地。

比如我现在自己在做的 RAG 和 Agent 项目里,我会发现真正复杂的部分其实是:

  • 知识检索质量
  • 多轮上下文管理
  • Agent 工作流设计
  • 工具调用
  • 幻觉控制
  • 限流与稳定性
  • 成本控制
  • 可观测性

而不仅仅是"调 Prompt"。

所以我觉得未来会越来越偏向:

复制代码
AI + 工程化

而不是单纯"会用模型"。

我不认为 AI 会完全替代开发,而是会改变开发方式。

未来开发者可能更多是:

  • 设计系统
  • 管理 Agent
  • 做工程治理
  • 做 AI 能力编排

AI 更像一个"能力放大器"。

所以我现在也在往:

  • AI 工程化
  • Agent 系统
  • RAG 架构

这些方向学习。

如果面试官继续追问

你觉得 AI 最大问题是什么?

  • 幻觉
  • 成本问题
  • 工程稳定性

HTTPS 握手

这个其实就是想问你HTTP升级为HTTPS之后密钥的传输是如何进行的

HTTPS 本质是 HTTP + TLS

TLS 握手阶段会先通过非对称加密安全交换会话密钥,后续真正的数据传输再使用对称加密,因为对称加密性能更高。

同时 HTTPS 通过 CA 证书验证服务器身份,防止中间人攻击。

它主要解决了数据传输中的窃听、篡改以及身份伪造问题。

后端接口优化:如何设计一个好的接口

  1. 接口路径设计清晰
java 复制代码
GET /api/users/{id}        查询用户
POST /api/users            新增用户
PUT /api/users/{id}        修改用户
DELETE /api/users/{id}     删除用户
  1. 统一请求和响应格式
java 复制代码
{
  "code": 200,
  "message": "success",
  "data": {},
  "traceId": "xxx"
}
  1. 参数校验
java 复制代码
@NotNull
@NotBlank
@Size
@Valid
  1. 幂等性设计

  2. 安全性设计

java 复制代码
登录鉴权 JWT / Session
权限校验 RBAC
接口限流
参数防篡改
敏感字段脱敏
防 SQL 注入

get,post请求的区别(域前请求)

GET 和 POST 最大区别在于 HTTP 语义不同。

GET 一般用于查询资源,强调幂等和可缓存;POST 一般用于提交数据,通常非幂等。

GET 参数通常放在 URL 中,而 POST 一般放在 Body 中。

另外 GET 通常会被浏览器缓存,而 POST 默认不会。

常见接口攻击

SQL 注入,暴力刷接口,越权访问,文件上传漏洞

HTTP 协议里的缓存

减少网络请求

降低服务器压力

提升响应速度

什么是深分页问题

一般指:

复制代码
LIMIT offset, size

里的:

复制代码
offset 特别大

比如:

复制代码
SELECT * 
FROM user
LIMIT 100000,10;

为什么深分页慢

很多人以为:

复制代码
直接跳到100000

其实不是。

MySQL 实际:

复制代码
会先扫描前100000条
再丢弃
最后返回10条

深分页优化方案

基于主键范围分页

不推荐

复制代码
limit 100000,10

推荐

记录上一页最大 ID:

复制代码
SELECT *
FROM user
WHERE id > 100000
LIMIT 10;

为什么快

因为:

复制代码
直接走主键索引范围扫描

不需要丢弃大量数据。

MySQL 索引有哪些类型

  1. 主键索引

  2. 普通索引

  3. 联合索引

  4. 唯一索引

  5. 覆盖索引

JVM的垃圾回收机制(GC)

JVM 自动回收"不再使用的对象"

垃圾回收如何判断对象死亡

可达性分析+引用计数

jvm使用的是可达性分析

什么是 GC Roots

GC 会从:

复制代码
GC Roots

开始向下找。

如果对象:

复制代码
不可达

说明:

复制代码
可以回收

常见垃圾回收器

G1,CMS

垃圾清理算法有哪些

标记清理,复制算法,标记整理,分代清理

如何排查内存泄漏

内存泄漏的典型表现是:

java 复制代码
Full GC 越来越频繁
老年代使用率持续升高
GC 后内存降不下来
最终 OOM

Full GC

Full GC 是对整个 JVM 堆进行垃圾回收,包括新生代和老年代。

它通常会触发较长时间的 Stop The World,所以线上影响比较大

1.看 GC 情况

重点看:

复制代码
OU:老年代使用率
FGC:Full GC 次数
FGCT:Full GC 总耗时

2. 导出堆快照

然后用VisualVM进行分析

3.看哪些对象占内存最大

找到:

复制代码
谁占用内存最多
谁持有了这些对象
为什么 GC 回收不了

4.看 GC Roots 引用链

常见内存泄漏原因

1. 缓存没有淘汰

java 复制代码
static Map<String, Object> cache = new HashMap<>();

一直 put,不清理

2. ThreadLocal 没有 remove

3. 集合无限增长

4. 连接 / 流没关闭

相关推荐
CNNACN电商经济6 天前
纸价波动加速中小产能出清,包装印刷板块龙头份额提升与议价能力重估
科技·生活
绿算技术6 天前
Mooncake 与绿算ForinnBase GroundPool如何联手打破推理僵局?
科技·算法·架构
nanoscientific6 天前
在芬顿耦合微纳米气泡系统中最大化利用界面处的Fe²⁺以实现有机污染物降解。
科技·微纳米气泡
蓝速科技6 天前
蓝速科技 AI 数字人部署与交互实战指南
人工智能·科技·交互
智塑未来6 天前
蒸汽热力循环仿真精度效果评估——秩益科技DIMAXER核电能源解决方案技术白皮书
科技·能源
苏州邦恩精密6 天前
GOM三维扫描在制造中的真实价值:让“修模”从经验动作变成数据动作
人工智能·科技·机器学习·3d·自动化·制造
云边云科技_云网融合6 天前
SASE:重新定义企业网络安全边界的 “云网安一体化“ 方案
网络·科技
cd_949217216 天前
云工场科技将携AIoT道路巡查与算力体系,亮相大湾区智慧交通大会
人工智能·科技
searchforAI6 天前
啥是LLM?大语言模型从原理到选型的完整科普
人工智能·科技·深度学习·ai·语言模型·知识图谱·agent
第***月7 天前
云南跟团行:在山水与烟火间读懂远方
科技·生活·旅游·美食·风景