简介面向Java面试备考与基础自测的题库文档聚焦语法、数据类型、控制结构、面向对象、异常处理、类与对象及方法等高频考点适合初中级开发者、应届生和转行学习者用于查漏补缺与考前演练。压缩包内共1个docx文件约91KB以单选题和判断题形式组织题干与参考答案集中呈现便于快速浏览、自测和对照复盘。内容涉及变量命名与大小写敏感、char与boolean取值、合法标识符、方法return用法、for与do...while循环、switch匹配及编译错误、强制类型转换、面向对象优缺点、带参数方法、算术运算优先级和程序调试方法等并附有答案解析能帮助读者理解易错点而非只记结论。目前已有283人学习下载适合作为面试前短周期刷题和Java基础巩固材料。1. 一份 100 分的 Java 题库 docx先看清它考的是编译期还是运行期面试前一周把一份 Java 题库从头背到尾是很多人踩过的坑。这份 Java 题库 docx 一共 50 道客观题加一组基础二客观题90 分钟、满分 100答案直接标在每道题题干后面交卷只需要提交答题卡。它覆盖面不算宽却精准卡在面试官爱追问的几个点上标识符规则、类型转换、switch 穿透、循环次数、值传递、equals 与 的区别。适合两类人准备初级、中级 Java 面试、想用一张卷子摸清语法底盘的人以及带新人的老手拿它当语法校准清单。反直觉的是这份题库最容易被误用的地方不是不会做而是把答案背下来——题干里不少代码片段带全角引号、漏分号、case 用逗号连接真粘进 IDE 就得翻车。2. 题型地图50 道题背后的六组考点与一张自测计分表2.1 从题干反推考点分布拿到 docx 先别从第一题开始做。把题干快速扫一遍按「这题在问什么」分组你会发现它其实是六组考点拼起来的而且分组之后每组的套路高度重复。下面这张表是我自己拆的时候记的题号按原卷顺序标方便你对照。考点组代表题号典型问法面试里对应的问题语法与标识符3、9、36、45、50哪个是合法标识符变量命名、关键字能不能当名字数据类型与转换1、2、8、33、37赋值是否合法、强转结果基本类型、精度丢失、字符串转数字运算符与表达式15、18、32、49表达式结果、求值顺序自增自减、短路、优先级控制结构5、7、10、11、17、20、34、35、38、42、44、46、47循环次数、switch 输出for/while、switch 的类型限制面向对象概念12、13、14、25、26、27、33、34、40、41、48类与对象关系、静态变量封装、static、JVM 跨平台字符串与 API19、21、24、31、46substring/charAt/equalsString 不可变、equals 与 分组之后你会发现控制结构和面向对象概念占了将近一半的题量而这两块恰好是面试里最容易「以为自己会、一追问就露馅」的区域。语法与标识符那组题量不大但错得最冤——很多人不是不懂规则是没记住$和_的边界。提示分组时只按「考什么」分不按对错分。先分完组再动笔能避免做完后面忘了前面也能让你看出哪一组值得二刷。2.2 面向对象概念题的判定口径类、对象、属性、静态变量这一组题的特点是「每个选项看起来都像对的」因为它考的不是代码是措辞。题库里反复出现几个判定口径记住口径比记答案有用。第一类是模板对象是实例。题 34 里「类包含对象」被判错原因就在这——类不是容器对象也不是类的组成部分对象是按类这个模板创建出来的独立实体有自己的属性值。题 41 里「对象实例化后就是一个类」同样错实例化得到的是对象不是类「对象更抽象、类更具体」则是把两者说反了。第二属性和方法是类的两大成员。题 25 问类的成员包括什么答案是属性和方法题 40 问对象的静态特征在类中叫什么答案是属性。这两题一个考「成员构成」一个考「特征叫法」措辞不同但指向同一件事刷题时把它们放一起记。第三静态变量的访问口径。题 48 的正确选项是「实例方法和类方法都能访问静态变量」。很多人会误以为静态变量只能通过类名访问其实通过实例也能访问只是不推荐静态变量的值可以被修改不可变的是 final 修饰的变量不是 static。题 13 和题 26 是同一道题改了措辞都问「面向对象优点描述错误的」答案是「程序语言都支持面向对象程序设计」——不是所有语言都支持这个绝对化表述就是错点。第四带参数方法的返回值。题 14 的正确选项是「带参数方法的返回值不能为 void」这句话本身就是错误选项因为 void 是合法的返回类型表示不返回任何值。这类题喜欢把「不能」「必须」「只能」塞进选项里读题时把这些词圈出来判断速度会快很多。2.3 90 分钟自测流程与错题归因表这份卷子的使用方式和普通练习题不一样它带计时和计分适合当一次完整的摸底。我的做法是三步。第一步准备答题卡。拿一张纸或者一个纯文本文件写 1 到 50 的编号只写选项字母不写题干。这一步是为了逼自己脱离「看着选项猜」的状态也方便后面只对答案、不重读题。第二步90 分钟计时中间不查资料、不开 IDE。遇到卡住的题先标个记号跳过全部做完再回头。做完之后对照题干后面的(答案:X)计分每题 2 分多选题漏选按错算。第三步错题归因。这一步比做题本身重要。把每道错题按下面三类打标签标签写在答题卡对应编号旁边。归因类型判断标准后续动作A 语法记忆错规则本身没记住比如不知道$能出现在标识符里回到 3.1 节把规则抄一遍B 语义理解错规则知道但算错了结果比如循环次数数错把片段抄进 IDE 跑一遍加打印C 编译期/运行期混淆以为能跑其实编译不过或者反过来单独整理一份「编译错误清单」三类里最值得花时间的是 C 类。因为面试官问「这段代码输出什么」的时候很多时候正确答案就是「编译错误」而你如果按运行期去推推得再认真也是错的。题 7 的case 0,1:、题 30 的未初始化String s、题 39 的int i未赋值都是典型的编译期题混进运行期推理里就必错。注意二刷不要重做整张卷子只做错题。错题重做时把答案遮住如果第二次还错说明归因标签打错了重新归一次。3. 语法层判定标识符、类型转换、运算符与字符串接口的编译期红线3.1 标识符与关键字$mark、inta、p234 为什么能过Java 标识符的规则只有三条首字符必须是字母、下划线_或美元符号$后续字符可以是字母、数字、下划线、美元符号不能是关键字或保留字。规则简单但题库喜欢在边界上出题。A123$合法因为$可以出现在任意位置s123_Name合法下划线和大小写混排都没问题$mark合法$开头也行inta合法因为它不是关键字只是长得像int。反过来3Total错在数字开头#A123错在#不是合法字符short错在它是关键字。public class IdentCheck { public static void main(String[] args) { int A123$ 1; // 合法$ 可以出现在标识符末尾 int s123_Name 2; // 合法下划线、字母、数字混排 int $mark 3; // 合法$ 可以开头 int p234 4; // 合法字母开头后接数字 int inta 5; // 合法不是关键字只是形似 int // int 3Total 6; // 非法数字不能开头 // int #A123 7; // 非法# 不是合法标识符字符 // int short 8; // 非法short 是关键字 System.out.println(A123$ s123_Name $mark p234 inta); } }这段代码的作用是把题库里分散在四道题里的标识符判断集中到一处编译一次就能验证全部结论。参数没什么可调的关键是注释掉的三行取消注释后javac会分别报「 illegal character 」「not a statement」和「as of release 1.4, assert is a keyword」之类的错误错误信息本身就是答案。我一般会把这三行留着不删下次再看到类似题直接对照。有一个边界要单独说题 45 问「下列哪个是合法标识符」选项里有Main和p234题库给的答案是p234。但从语法上讲Main首字母大写、不是关键字也是合法标识符只是不符合「变量名小写开头」的命名习惯。这类题属于考试口径和语言规范不完全一致的情况遇到时按题库标注的答案走同时心里清楚Main在编译器眼里并不违规面试被追问时不至于答错。3.2 类型转换float a10、(int)exc、(int)a 的三种结局类型转换的题在卷子里出现得很密本质只有三种结局自动提升、强制转换、编译不过。float a 10;能过因为 int 字面量在赋值给 float 时会自动提升这是 widening conversionint avg (int) exc;能过因为exc是 double强制转换会截断小数部分60.8 变成 60不是四舍五入int i (int) a;编译不过因为字符串和基本类型之间不存在这条转换路径字符串转数字必须走Integer.parseInt。public class CastCheck { public static void main(String[] args) { float a 10; // int 字面量自动提升为 float double exc 60.8; int avg (int) exc; // 强转截断小数结果是 60不是 61 int i (int) 34.3; // 同样截断结果是 34 char c (char) 3; // 合法得到码点为 3 的控制字符 char d 2 2; // 合法2 的码点是 50加 2 得 52 // int bad (int) a; // 编译错误字符串不能直接强转为 int int parsed Integer.parseInt(123); // 字符串转数字的正确做法 System.out.println(a avg i (int) c (int) d parsed); } }这段代码把四道转换题合并验证。注释里那行(int) a是重点取消注释后编译器会报「incompatible types: String cannot be converted to int」这句话就是题库里那道题的答案来源。char d 2 2对应题 33字符字面量参与算术运算时会先提升为 int结果是 52再窄化回 char 是合法的。参数上唯一需要注意的是Integer.parseInt只接受纯数字字符串传12a会抛NumberFormatException这是运行期异常不是编译错误面试里经常被拿来区分两类错误。题 33 还有一个选项string s on ione;错在两处string小写不是类型名ione是多个字符却用了单引号。这种选项就是专门用来考「你有没有真的看过编译器报错」的。3.3 运算符与求值顺序j-- - k、a*b0 与三元表达式运算符题的核心是求值顺序不是优先级口诀。j-- - k里j--是后缀先取 j 的当前值 2 参与运算然后 j 自减为 1k是前缀k 先自增为 4 再参与运算所以整个表达式是 2 - 4 -2。如果换成--j - k结果和副作用都会变这就是为什么这类题必须动手跑。public class OpCheck { public static void main(String[] args) { int j 2, k 3; int v j-- - k; // j-- 取 2 后 j1k 先加为 4v 2-4 -2 System.out.println(v v , j j , k k); int a -3, b -4; System.out.println(a * b 0); // 同号相乘为正结果为 true int x 2; System.out.println(x * 3 10 ? 1 : 2); // 610 为 false输出 2 int m 3, n 6, cnt 0; while ((m) (--n)) { // 第一轮 35 成立第二轮 44 不成立 cnt; } System.out.println(cnt cnt , m m , n n); } }这段代码对应题 49、题 32、题 18 和题 17。最后那个 while 循环值得单独看第一轮m取 3、m 变 4--n先把 n 减到 5 再比较3 5 成立cnt 加一第二轮m取 4、m 变 5--n把 n 减到 44 4 不成立循环结束。所以 cnt 是 1不是 2。参数上没有什么可调的把m改成m结果就会变这正好可以用来做对照实验。题 15 那个纯算术表达式(10*(2-8)10)/(5-5*2)也放在这一类里先算括号内-6010 -50分母5-10 -5结果是 10。题库里四个选项有 -10、10、30、-32选 10。这类题没有坑坑都在自增自减和短路求值上。3.4 字符串接口substring、charAt、equalsIgnoreCase 与拼接顺序字符串题在卷子里出现得不多但每道都踩在面试高频点上。substring(0, 6)是左闭右开取的是下标 0 到 5 的字符也就是Hello 带一个空格但题 21 打印的是str而不是s所以输出还是Hello Java因为 String 不可变substring 返回的是新对象。这个「问的是谁」的坑比 API 本身更容易错。public class StrCheck { public static void main(String[] args) { String str Hello Java; String s str.substring(0, 6); // 左闭右开取到 Hello System.out.println(str); // str 本身不变仍是 Hello Java System.out.println(s); String name Jessica ; System.out.println(name.charAt(6)); // 下标从 0 开始第 7 个字符是 a String s1 Hello Kit; String s2 hello kit; System.out.println(s1.equals(s2)); // false大小写敏感 System.out.println(s1.equalsIgnoreCase(s2)); // true忽略大小写 System.out.println(y 1 2); // 从左到右先拼成 y1 再拼 2输出 y12 System.out.println(1 2 y); // 先算 123再拼 y输出 3y } }这段代码覆盖题 21、题 46、题 24 和题 31。charAt(6)那行要注意字符串Jessica 末尾有个空格下标 0 到 6 依次是 J、e、s、s、i、c、a所以第 7 个字符是a不是空格。equalsIgnoreCase和equals的区别在题 24 里被放大成四个选项两个带 0的选项是干扰项因为equals返回 boolean不能和 0 比较编译就过不了。拼接顺序那两行对应题 31是从左到右结合的左边只要出现字符串后面全部按字符串拼接处理。4. 控制结构switch 穿透、循环次数与 break 的核算方法4.1 switch 的三个硬限制case 常量类型、穿透、default 位置switch 在题库里反复出现考来考去就三个限制。第一case 后面只能跟常量而且类型必须和 switch 表达式的类型兼容题 7 写成case 0,1:是语法错误Java 不支持逗号分隔多个 case 值必须写成两个 case 标签。第二switch 表达式支持的类型是有限制的byte、short、char、int 及其包装类、枚举、StringJDK 7 起long、float、double、boolean 都不行题 10 里byte x 100和char x d能匹配case 100因为d的码点就是 100而float和long那两项直接编译不过。第三case 穿透没有 break 就会继续执行下一个分支题 38 的case 1、case 3、case 5共用一段逻辑day3命中后打印「学钢琴」然后 break输出只有一行。public class SwitchCheck { public static void main(String[] args) { int i 0, j -1; switch (i) { case 0: case 1: j 1; // 不能写成 case 0,1: case 2: j 2; // 没有 break会穿透到这里 } System.out.println(j j); // 输出 j2 byte x 100; switch (x) { case 100: System.out.println(byte 100); break; } char c d; // d 的码点是 100 switch (c) { case 100: System.out.println(char 100); break; } // long l 100; // switch (l) { } // 编译错误long 不支持 } }这段代码把三件事放在一起验证case 标签必须分开写、没有 break 会穿透、byte 和 char 都能匹配整型常量。j最终是 2 而不是 1就是因为case 1执行完没有 break继续落到case 2。注释掉的switch (l)是题 10 的排除项取消注释后编译器会报「incompatible types: possible lossy conversion from long to int」这个报错信息就是判断依据。题库里还有一道题 11 说「判断条件为字符串时不能使用 switch」答案把这一项标成了正确描述。这是按 JDK 1.6 的口径出的题JDK 7 之后 String 已经可以作为 switch 表达式。刷题时遇到这种版本差异记结论的同时记一下版本前提面试被追问「哪个版本开始支持」时不至于卡住。4.2 for/while/do-while 的执行次数把题干抄进 IDE 加计数器循环次数的题最忌讳心算。我的习惯是原样抄进 IDE在循环体里加一个计数器跑完直接看数字。题 35 是双层循环外层i从 5 到 1 共 5 次内层j从 0 到 3 共 4 次总次数 20题 44 的for (int i 3; i 0; i--) { j i; }循环三次j 依次被赋 3、2、1最后是 1题 46 的 do-while 最容易错b - a; a;先执行一次b从 10 减到 9然后判断b-- 09 0 为 false但b--的后缀自减仍然生效b 变成 8循环结束。public class LoopTrace { public static void main(String[] args) { int total 0; for (int i 5; i 0; i--) { for (int j 0; j 4; j) { total; // 外层 5 次内层 4 次共 20 次 } } System.out.println(total total); int j 0; for (int i 3; i 0; i--) { j i; // j 依次为 3、2、1 } System.out.println(j j); int a 1, b 10; do { b - a; // 第一次b9a2 a; } while (b-- 0); // 判断 90 为 false但 b-- 仍把 b 减到 8 System.out.println(b b); } }三个输出分别是 20、1、8对应题 35、题 44、题 46。do-while 那段的参数关键在于「判断表达式里带副作用」b-- 0先比较再自减比较用的是 9自减后 b 是 8循环体不再执行但 b 的值已经被改掉了。如果把b--改成--b比较用的是 8b 最终也是 8但判断时机不同这种细微差别正是面试官喜欢追问的地方。题 36 的while (k 0)是另一个极端k 初始是 10条件一开始就是 false循环体一次都不执行。题 11 的 do-while 则相反int i 0; do { i; } while (i 1);先执行一次让 i 变 1再判断 1 1 为 false循环体执行一次。这两种结构放在一起记比单独背「do-while 至少执行一次」有效。4.3 break/continue 与嵌套循环题 47 的边界在哪break 和 continue 的题光看代码容易把「跳出哪一层」搞混。题 47 是典型输入 6for (int i 1; i 10; i)里判断if ((i num) 10) break;i 从 1 开始167 不大于 10打印 1i2 时 8 不大于 10打印 2i3 时 9 不大于 10打印 3i4 时 10 不大于 10打印 4i5 时 11 大于 10break循环结束。所以输出是 1 到 4不是 1 到 5也不包含 6。public class BreakDemo { public static void main(String[] args) { int num 6; for (int i 1; i 10; i) { if (i num 10) { break; // 跳出整个 for 循环不是跳过本次 } System.out.print(i \t); } System.out.println(); for (int i 1; i 5; i) { if (i 3) { continue; // 只跳过 i3 这一次循环继续 } System.out.print(i ); } } }第一段输出1 2 3 4第二段输出1 2 4 5。break 和 continue 的区别在这两段里很直观break 之后循环变量不再递增continue 之后还会继续下一轮。参数上要注意i num 10这个边界不是所以 i4 时 10 不大于 10仍然打印这是题 47 最容易错的地方。题 42本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
SuperX:一站式创作者增长操作系统的核心功能与技术解析 1. 项目定位解析:创作者增长操作系统的核心价值 SuperX这个产品名称中的"X"明显指向"eXperience"或"eXtreme"的缩写,暗示其为专业创作者提供极致体验。从ProductHunt的展示信息来看,这是一款定位垂直领域的Saa… · 2026/11/5 9:24:11
2026华为OD机试真题 11月1日 新系统 【获取利润第K大的值】 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 9:24:11
Redis在Java开发中的高效应用与实践 1. Redis与Java开发者的不解之缘 第一次在项目中接触Redis时,我被它惊人的读写性能震撼到了——单机版轻松扛住10万QPS,比传统关系型数据库快了两个数量级。作为Java开发者,我们经常需要处理高并发场景下的缓存穿透、秒杀库存、会话共享等典型… · 2026/11/5 9:24:11
工业级推荐系统架构设计与工程实践 1. 推荐系统架构全景解析 现代推荐系统早已超越了简单的"用户喜欢什么就推什么"的初级阶段。一个成熟的工业级推荐系统通常采用分层处理架构,就像工厂的流水线一样,每个环节各司其职又紧密配合。这种设计不仅能处理海量数据,还能在… · 2026/11/5 9:28:15
推荐系统分层架构与实战优化策略 1. 推荐系统的分层架构全景 推荐系统早已不是简单的"猜你喜欢",现代工业级推荐架构更像是一个精密运转的决策流水线。在我参与过的多个电商和内容平台项目中,分层设计是应对海量候选集和复杂业务规则的必然选择。典型的四层架构中,… · 2026/11/5 9:28:15
AiCheck文档校审工具架构解析与维护指南 1. 项目背景与现状说明AiCheck文档校审工具是我在2020年启动的一个个人开发项目,最初是为了解决自己在技术文档写作中频繁出现的拼写错误、术语不一致和格式混乱问题。这个工具通过整合多种开源校对引擎和自定义规则库,能够对Markdown、Word和LaTeX格式的… · 2026/11/5 9:28:15
分包陷阱:项目中期为何总被咬?成因与应对 1. 分包这件事,为什么总在项目中期开始咬人做过稍大一点项目的人大概都有类似的体感:项目启动会上大家意气风发,架构图画得漂漂亮亮,模块边界划得清清楚楚,等到项目推进到中段,进度开始吃紧,那些… · 2026/11/5 9:28:15
AI原生SQL工作台:DuckQuery如何重塑数据分析范式 1. 为什么一个“SQL工作台”需要冠以“AI原生”之名?你有没有过这样的经历:在某次数据探索任务中,面对一张叫user_behavior_log的表,字段名是uid,evt_type,ts,props_json——光看字段名根本猜不出props_json里到底塞了哪些键&… · 2026/11/5 9:28:15
互动小班课为何完课率更高?6大维度解析在线教育体验设计 1. 直播课体验对比:为什么互动小班课更受学生青睐 最近两年在线教育领域出现一个有趣现象:同样内容的直播课程,采用互动小班课形式的完课率比传统大班直播高出30%以上。作为参与过200课时教学设计的课程顾问,我发现这背后隐藏着在… · 2026/11/5 9:27:14
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38
多智能体协作系统架构设计与实践优化 1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中… · 2026/11/5 0:00:39
大模型系统性入门实战指南:从原理到部署微调的全链路路线 提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#… · 2026/11/5 0:00:39
鸿蒙文件系统沙箱机制解析与开发实践 1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的… · 2026/11/5 0:00:39
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38