J003-基于规约手册的答题尝试
status
Published
slug
J003
type
Post
category
Technology
date
Feb 5, 2025
tags
笔记
J计划
summary
《阿里巴巴Java开发手册》其实很多年前就已经读过,但是当时都是简单地过一遍,因此看到这些测试题就想着翻出手册,尝试看着手册答题,争取做到「知其然,知其所以然」,也为后续的技术阅读提供一个参考。
原文链接:https://mp.weixin.qq.com/s/KLbCRDaPV74-lJbZXSiKwQ,《阿里巴巴Java开发手册》其实很多年前就已经读过,但是当时都是简单地过一遍,因此看到这些测试题就想着翻出手册,尝试看着手册答题,争取做到「知其然,知其所以然」,也为后续的技术阅读提供一个参考。
题目如下:
1 服务端发生错误时,返回给前端的响应信息必须包含以下哪几个部分?
A. HTTP状态码
B. errorCode
C. errorMessage
D. 用户提示信息
解答:ABCD,HTTP 状态码,errorCode、errorMessage、用户提示信息分别对应着浏览器、前端开发、错误排查人员和用户。因此这四部分缺一不可,完整的信息有助于提示错误、给出错误原因等。
2 以下哪些时间类型在规约中不允许在程序中使用?
A. java.sql.Date
B. java.sql.Time
C. java.sql.Timestamp
D. java.util.Date
解答:ABC,手册中提到不允许在程序任何地方中使用:1)java.sql.Date。 2)java.sql.Time。
3)java.sql.Timestamp。这三个类型在时间使用场景下,容易出现问题,因此不推荐使用。java.sql.Date不记录时间,getHours() 抛出异常;java.sql.Time不记录日期,getYear() 抛出异常;java.sql.Timestamp。Java8引入了java.time,提供的API设计更为合理,并且提供了更好的线程安全性,因此日期相关类推荐使用java.time。
3 以下哪些选项不符合前后端交互的JSON格式数据中key的编码风格:
A. assetStatus
B. error_message
C. 3days
D. msg
解答:BC,JSON格式数据key必须为小写字母开始,使用lowerCamelCase 风格,符合英文表达习惯,且表意完整。
4 前后端的时间格式统一为____,统一为GMT。
A. yyyy-MM-dd HH:mm:ss
B. yyyy-mm-dd HH:mm:ss
C. YYYY-MM-dd HH:mm:ss
D. yyyy-mm-DD HH:MM:ss
解答:A
5 HTTP请求通过URL传递参数时,不能超过多少字节?
A. 1024字节
B. 2048字节
C. 4096字节
D. 8192字节
解答:B,不同浏览器对于URL传递长度的限制不同,超出最长长度的处理逻辑也不同。因此,在开发过程中尽可能避免出现超出最长长度的情况,取各个浏览器支持最大长度的最小值为2048。
6 前后端交互的API,以下说法正确的是:
A. 请求的路径可以使用动词、名词、推荐使用名词单数
B. URL路径中单词要使用驼峰分隔
C. 路径禁止携带表示请求内容类型的后缀
D. 响应体body可放置多种数据类型,由Content-Type头来确定
解答:CD,手册中详细规定的API的协议、域名、路径、请求方法、请求内容、状态码和响应体。选项A,请求路径通常表示资源,应为名词;选项B,由于URL路径不能大写,单词分隔统一使用下划线;
7 对于日志的相关描述,下面正确的有?
A. 所有日志文件至少保存7天
B. 根据国家法律,网络运行状态、网络安全事件、个人敏感信息操作等相关记录,留存的日志不少于六个月,并且进行网络多机备份
C. 应用中的扩展日志(如打点、临时监控、访问日志等)命名方式:appName_logType_logName.log
D. 在日志输出时,字符串变量之间的拼接使用占位符的方式
解答:BCD,所有日志文件至少保存15天,因为许多异常以“周”为频次发生,方便排查。
8 以下说明属于正确的前后端规约内容的有哪几项?
A. 推荐在接口路径中加入版本号,来进行相应的版本控制
B. 服务端返回的数据,推荐使用JSON格式而非XML
C. 服务器返回信息必须被标记是否可以缓存,如果缓存,客户端可能会重用之前的请求结果
D. HTTP请求通过body传递内容时,必须控制长度,超出最大长度后,后端解析会出错
解答:BCD,选项A,在接口路径中不要加入版本号,版本控制在 HTTP 头信息中体现,有利于向前兼容;选项B,JSON格式更为简洁,可读性和可维护性更强,并且跨平台和跨语言的支持很好,与现代Web技术集成良好;选项D,流行的Web应用服务器有nginx和tomcat,对于传输内容,nginx 默认限制是 1MB,tomcat 默认限制为 2MB,当确实有业务需要传较大内容时,可以通过调大服务器端的限制。
9 以下描述错误的是:
A. 401: 请求要求身份验证,常见对于需要登录而用户未登录的情况
B. 402:服务器拒绝请求,常见于机密信息或通过复制其它登陆用户链接访问服务器的情况
C. 501:服务器不支持请求的功能,无法完成请求
D. 502: 服务器产生内部错误
解答:常见的 HTTP 状态码如下,完整列表见https://www.runoob.com/http/http-status-codes.html
- 200 OK: 表明该请求被成功地完成,所请求的资源发送到客户端。
- 401 Unauthorized: 请求要求身份验证,常见对于需要登录而用户未登录的情况。
- 402 Payment Required: 保留,将来使用
- 403 Forbidden:服务器拒绝请求,常见于机密信息或复制其它登录用户链接访问服务器的情况。
- 404 Not Found: 服务器无法取得所请求的网页,请求资源不存在。
- 500 Internal Server Error: 服务器内部错误
- 501 Not Implemented: 服务器不支持请求的功能,无法完成请求
- 502 Bad Gateway: 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
10 对于前后端传递整数的场景,当十进制整数大于等于多少位时,服务端需要采用String类型返回防止精度丢失?
A. 14
B. 15
C. 16
D. 17
解答:C,Java 服务端如果直接返回 Long 整型数据给前端,JS 会自动转换为 Number 类型(注:此类型为双 精度浮点数,表示原理与取值范围等同于 Java 中的 Double)。Long 类型能表示的最大值是 2 的 63 次方 -1,在取值范围之内,超过 2 的 53 次方 (9007199254740992)的数值转化为 JS 的 Number 时,有些数 值会有精度损失。
11 对以下关于叙述正确的是?
A. 错误码应该体现错误等级以及其版本号
B. 错误码在某些特殊场景下可以直接输出给用户作为提示信息使用
C. 错误码之外的业务独特信息由error_message来承载,而不是让错误码本身涵盖过多具体业务属性
D. 错误码使用者避免随意定义新的错误码
解答:CD,选项A,错误码不应该体现错误等级以及其版本号,错误码应以不断追加的方式进行兼容。错误等级由日志和错误码本身的释义来决定;选项B,错误码不能直接输出给用户作为提示信息使用。说明:堆栈(stack_trace)、错误信息(error_message)、错误码(error_code)、提示信息(user_tip)是一个有效关联并互相转义的和谐整体,但是请勿互相越俎代庖。