1.13草花互动面试

1. 浏览器输入网址到服务器的完整流程(从 DNS 解析到页面渲染)

怎么答:

"当我在浏览器输入一个网址(比如 https://www.example.com)并回车后,整个过程大致是这样的:

  1. DNS 解析:浏览器把域名解析成 IP 地址(先查本地缓存,再问 DNS 服务器);
  2. 建立连接:通过 TCP 三次握手建立连接,如果是 HTTPS,还要做 TLS/SSL 握手加密;
  3. 发送请求:浏览器构造 HTTP 请求,发给服务器;
  4. 服务器处理:比如 Nginx 接收后转发给 Spring Boot 应用,执行业务逻辑(查数据库、调缓存等);
  5. 返回响应:服务器生成 HTML 或 JSON 响应,返回给浏览器;
  6. 页面渲染:浏览器解析 HTML/CSS/JS,最终展示页面。

在我们'瞬览购书'项目中,用户请求就是先到 Gateway 网关,再路由到具体微服务,整个链路依赖这个流程。"


2. Java 的数据类型有哪些?

怎么答:

"Java 的数据类型分为两大类:基本数据类型引用数据类型

基本数据类型有 8 种

  • 整型:byteshortintlong
  • 浮点型:floatdouble
  • 字符型:char
  • 布尔型:boolean

它们直接存储值,效率高。

引用数据类型 包括:类(如 String)、接口、数组、枚举等,它们存储的是对象的引用(地址),实际对象存在堆内存里。

特别注意:String 虽然用起来像基本类型,但它其实是引用类型。"


3. 进程和线程的区别

怎么答:

"进程是操作系统资源分配的最小单位 ,每个进程有独立的内存空间;

线程是 CPU 调度的最小单位 ,同一个进程内的多个线程共享内存,只拥有自己的栈。

所以:

  • 通信:进程间通信复杂(需管道、消息队列等),线程可直接共享变量;
  • 开销:创建/切换进程比线程慢得多;
  • 稳定性:一个进程崩溃不影响其他进程,但一个线程崩溃可能拖垮整个进程。

在 Java 中,一个 JVM 是一个进程,里面可以跑很多线程------比如 Tomcat 就用线程池处理并发请求。"


4. 常见的鉴权方式有哪些?

怎么答:

"我了解的主要有几种:

  • JWT:无状态,Token 自包含用户信息,适合微服务;
  • Session-Cookie:有状态,服务端存 Session,浏览器带 Cookie,适合传统 Web;
  • OAuth2.0:用于第三方登录或单点登录,比如用微信登录;
  • 自定义 Token:服务端生成随机 Token 存 Redis,客户端携带验证。

我们项目用的是 JWT,因为它无状态、易扩展,特别适合分布式架构。"


5. JWT 无状态鉴权的具体实现(结合您的项目)

怎么答:

"在'瞬览购书平台'中,用户登录后,认证服务会签发一个 JWT Token。

后续请求,前端把这个 Token 放在请求头里。

我们在 Gateway 网关层统一校验 Token ------ 检查签名、有效期等。

校验通过后,把用户 ID 存到 ThreadLocal 里。

这样,后面的微服务(比如商品、订单)就不用重复解析 Token,直接从 ThreadLocal 拿用户 ID,既安全又高效。"


6. "无状态鉴权"是什么意思?

怎么答:

"'无状态'意思是:服务端不需要记住用户是否登录过

每次请求只要 Token 合法(没过期、签名正确),就认为用户已认证。

而像 Session 方式是有状态的------服务端必须保存用户的登录记录。

无状态的好处是:容易水平扩展,天然适合微服务,不需要共享 Session 存储。"


怎么答:

"其实它们本来就是配合使用的

用户登录后,服务端创建 Session,并生成一个 Session ID。

这个 ID 通常通过 Set-Cookie 发给浏览器,浏览器后续自动带上这个 Cookie。

服务端靠它找回 Session,识别用户身份。

所以可以说:Cookie 是 Session ID 的'运输工具'

虽然 Session 也能用 URL 传 ID,但几乎都用 Cookie,因为更方便安全。"


8. 单点登录(SSO)如何实现?

怎么答:

"单点登录的核心是让多个系统信任同一个登录状态

我项目用的是 基于 JWT 的方案

  • 用户在一个系统(如用户中心)登录,拿到 JWT Token;
  • 访问其他系统时,前端主动带上这个 Token;
  • 其他系统用相同密钥验证 Token,有效就认为已登录。

另一种是 中心化认证(如 OAuth2.0):所有系统跳转到统一登录页,登录一次后,认证中心颁发凭证,实现跨系统免登。"


9. Java 面向对象的四大特性

怎么答:

"Java 面向对象有四大特性:

  1. 封装 :用 private 隐藏内部细节,通过方法提供安全访问(比如用户密码不能直接改);
  2. 继承 :子类复用父类代码(如 Dog extends Animal),减少重复;
  3. 多态 :父类引用调用子类方法(如 Animal a = new Dog(); a.speak() 实际执行 Dog 的逻辑),让代码更灵活;
  4. 抽象 :通过接口或抽象类定义规范,不关心具体实现(比如 Payment 接口,Alipay 和 WechatPay 各自实现)。

在'瞬览购书'项目中,我们就用多态实现了多种支付方式,用封装保护了敏感数据。"

相关推荐
阿蒙Amon4 小时前
C#每日面试题-常量和只读变量的区别
java·面试·c#
程序员小白条4 小时前
面试 Java 基础八股文十问十答第八期
java·开发语言·数据库·spring·面试·职场和发展·毕设
xlp666hub6 小时前
Linux 设备模型学习笔记(1)
面试·嵌入式
南囝coding7 小时前
CSS终于能做瀑布流了!三行代码搞定,告别JavaScript布局
前端·后端·面试
踏浪无痕7 小时前
Go 的协程是线程吗?别被"轻量级线程"骗了
后端·面试·go
一只叫煤球的猫8 小时前
为什么Java里面,Service 层不直接返回 Result 对象?
java·spring boot·面试
求梦8208 小时前
字节前端面试复盘
面试·职场和发展
千金裘换酒9 小时前
LeetCode 二叉树的最大深度 递归+层序遍历
算法·leetcode·职场和发展
C雨后彩虹9 小时前
书籍叠放问题
java·数据结构·算法·华为·面试