news 2026/10/24 1:04:30

Java笔试高频考点全解析:从重载、InnoDB到多线程与算法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java笔试高频考点全解析:从重载、InnoDB到多线程与算法

简介:2020兴业数金Java在线笔试题的完整知识点回顾,面向准备银行系Java笔试与面试的开发者。资料围绕Java重载方式、JDK辅助工具(javadoc、jar、jconsole)用法、计算机存储系统的三级层次结构及分层存储原理、多线程同步与互斥的用户/内核模式实现、InnoDB引擎特性、Delete与Truncate差别、堆的概念等核心考点展开;编程题则包含“输入正整数计算输出距离它最近的对称数”的解题思路,可作为系统刷题与查漏补缺的参考。资源共1个docx文档,整体仅14KB,内容精炼,适合快速浏览。目前已有8738人浏览学习,尤其适合追求银行科技岗笔试真题回顾的Java求职者。细读可掌握每类问题的答题要点与术语表述,节省自己整理时间。

1. 在线笔试的“体检逻辑”:为什么 Java 卷子里要塞进数据库、并发和算法

假设你收到一份某银行系金融科技公司的 Java 在线笔试题,打开文档的感觉很像去体检:内科、外科、眼科、耳鼻喉科轮着来,每一项只测一小段,拼起来却是你的整体健康水平。这份笔试题也是同样套路——一道找对称数的算法题,一道存储系统分层题,一道 MySQL 引擎题,一道多线程同步题,再加几道 Java 语言基础题,单独拎出来看都不算难,合在一起却特别考验完整功底。

试卷里的知识点基本能归成五块:Java 语言基础、存储系统、数据库、多线程并发、算法。这篇不写教科书定义,只用你能一眼看懂的类比,把最容易丢分的几个概念逐个讲透,顺带把边界也厘清:“堆”到底是内存还是数据结构,Delete 和 Truncate 差在哪,重载与重写又怎么区分。搞懂这批考点,你不仅在应付一场在线笔试,也在给后面的 Java 面试清路障。

2. Java 语言考点:重载和 JDK 自带工具,把“同名”和“附属工具”讲透

2.1 方法重载的三种常见方式:参数个数、参数类型、参数顺序

在很多 Java 教程里,方法重载是类和对象之后的必修课,但真到面试时,很多人能写出重载代码,却说不清“重载有几种方式”。试卷问“Java 重载的几种方式”,其实是在问方法签名由哪几部分组成,重载靠什么区分同名方法。

先给一句话定义:在同一个类中定义多个同名方法,但参数列表不同,编译器根据调用时传入的参数自动决定调用哪一个。这个决定动作发生在编译阶段,而不是运行阶段。所谓“参数列表不同”,常见的有三种:

  • 参数个数不同;
  • 参数类型不同;
  • 参数顺序不同,前提是类型之间交换顺序后可以相互区分。
public class RoomLight { // 方式一:参数个数不同 public void turnOn() { } // 方式二:参数类型不同 public void turnOn(String roomName) { } // 方式三:参数个数和类型都不同 public void turnOn(String roomName, int brightness) { } }

这里有个很容易被忽略的细节:turnOn(String, int)和turnOn(int, String)也算重载,因为编译器能根据参数顺序区分;但要是写成两个参数个数、类型完全一样的turnOn(String, int),那就是同一个签名,直接编译报错。

另一个重要边界是:只有返回值不同,不构成重载。原因是 Java 编译器只按“方法名 + 参数列表”查找方法,返回值只出现在调用结果那一端,参不参与匹配。你要是硬写一个String doSomething()和一个void doSomething(),编译期就提示方法签名冲突,这就是初学者最容易翻车的地方。

用一个生活场景记:你说“拍照”这个词,配合手机是“拍照”,配合单反也是“拍照”,配合“拍证件照”就是另一种动作。重载关心的是“怎么调用”,不关心“调用完给你什么结果”。面试官喜欢追问重载,因为它表面简单,底下却连着编译期分派机制:你在代码里写obj.print("a"),编译器那一刻就要确认到底调用哪一个print。把重载想透了,后面看重写、多态、泛型擦除都会顺利很多。

2.2 JDK 自带的辅助工具:javadoc、jar、jconsole 各管什么

试卷第二问是“JDK 额外提供了哪些辅助工具”,对应 JDK 安装目录里那些命令行命令。日常开发用的主要是java和javac,但整套 JDK 还带了一批平时不起眼、关键时候能救命的工具。

工具一句话作用常见使用场景
javadoc从源码注释生成 HTML 文档交付 API 文档,不用手写 Word
jar把编译后的 class 和资源打包成一个压缩包发布可执行程序、上传服务器
jconsole图形化界面监控 JVM 内存、线程、CPU排查内存泄漏、线程死锁
javap反编译 class 文件,查看字节码结构验证语法糖和编译结果

通俗地说,javadoc是代码的“说明书生成器”。只要源码里按规范写/** ... */注释,跑一条命令,它就能把所有公共类、方法、字段整理成带索引的 HTML 文档。写对外交付的 SDK 时,这套东西几乎是标配,你不需要再手动维护一份又臭又长的接口文档。

jar是发布阶段的常客。一条jar cf myapp.jar classes/能把编译产物打成单个包;配合清单文件里的Main-Class,还能做成直接可运行的程序。很多人以为 jar 只是压缩包,它其实比 zip 多了一层启动与依赖描述,这正是它能被java -jar直接识别的原因。

jconsole是笔试题里最容易被忽略的一项,因为大多数人在学习期根本不会打开它。它是一个可视化监控面板,能连接本机或远程的 JVM 进程,实时看堆内存使用曲线、线程状态、类加载数量和 CPU 占用。线上服务出现“卡得像死机一样”的情况,第一件该做的事往往是打开 jconsole,看看线程是不是堆在某个锁上。

javap则是“字节码解剖器”。它的典型用法是:

javap -c SomeClass.class

它会输出 JVM 字节码指令,比如invokevirtual、getstatic。想验证“重载是不是真的在编译期确定”,用它看比翻书直观得多,这也是把它列进辅助工具的深层原因。

2.3 为什么考点会绕着这些打转

可能你会觉得,重载不是每天都在写吗,JDK 工具不是搜一下就会吗?面试官偏要用两个名词来考,背后的意图其实是考察工程习惯:你是不是只停留在 IDE 自动补全的层面,还是清楚每次补全背后的编译规则;你是不是只知道写代码,还是知道怎么打包、生成文档、观察 JVM 运行状态。

在线笔试题时间有限,没法让你现场写几千行业务逻辑,所以只能用短平快的概念快速区分“背过题”和“真用过”的人。你会用 javadoc,说明你交付过 API;你用 jconsole 看过内存曲线,说明线上排查对你不陌生。这些零散知识点合起来,考的其实是你有没有形成“写代码之外的那一整套工程流程”的认知。

3. MySQL 考点:InnoDB 凭什么当默认引擎,DELETE 和 TRUNCATE 差在哪

3.1 InnoDB 的核心能力:事务、行级锁、崩溃恢复

MySQL 在多数版本里默认存储引擎都是 InnoDB。试卷直接问“关于 MySQL 中的 innodb 引擎的理解”,本质上是在考你是否真用过数据库的“事务”和“锁”这两个核心概念。

先说它为什么重要。InnoDB 是一个支持事务的存储引擎,事务意味着“要么全做,要么全不做”。拿转账打比方:A 给 B 转 100 元,A 账户扣款和 B 账户入账必须发生在同一个事务里。如果扣完款系统就断电,钱不能凭空消失,事务会通过回滚把 A 的余额恢复。这个特性在数据库术语里叫 ACID:原子性、一致性、隔离性、持久性,其中原子性又最常被拿出来问。

InnoDB 的另一个能力是行级锁。同一张表里有多个用户同时改不同的行,行级锁能让它们互不干扰;而 MyISAM 这类老引擎用的是表级锁,相当于整张表加锁,一个人写,所有人排队。行级锁提升了并发写场景的吞吐量,代价是锁管理更复杂,死锁概率也更高。

崩溃恢复是 InnoDB 的第三个看家本领。它有 redo log 和 undo log,前者记录“已经做了哪些修改”,后者记录“如何撤销”。哪怕 MySQL 在写入一半时宕机,重启后也能靠日志把数据恢复到一致状态。这个设计很像飞机上的黑匣子:过程数据没丢,最终状态就能还原。

注意:InnoDB 的“行级锁”依赖索引。查询没有走任何索引时,它可能退化成对整张表加锁,效果近似表锁。面试被追问“行级锁是不是永远比表锁好”时,要答出这个前提才算深入。

由于 InnoDB 在事务、行锁、崩溃恢复上的综合表现,它成为 OLTP 业务系统的默认选择;像只读统计、全文检索这类场景,旧版本里有人会退回 MyISAM,但如今已经越来越少见。被问“默认引擎是谁”时,先答 InnoDB,再把事务和行锁说清楚,这道题就稳了。

3.2 DELETE 与 TRUNCATE 的本质区别:一个删行,一个清表

DELETE 与 TRUNCATE 是一道经典对比题。两者中文都叫“删除”,行为差异却很大。试卷原题是“Delete 和 truncate 的差别”,答题时如果只写“一个能加 where,一个不能”,只能拿一半分。

对比点DELETETRUNCATE
语句类别DML,逐行操作DDL,重建表结构
是否支持 WHERE支持,按条件删部分行不支持,只能整表清空
删除后自增列保留当前计数重置为初始值
执行速度慢,逐行记录日志快,直接释放数据页
事务回滚事务内可以回滚隐式提交,基本不能回滚
触发器逐行触发不触发逐行触发器

一个很实用的记忆方式:DELETE 像书店按名单一本一本抽掉书,抽完书架编号不变;TRUNCATE 像直接清空整个书架,再把编号从 1 重新编。注意,TRUNCATE 后的自增列会从头算,这在做数据迁移时经常影响业务预期——你想清掉一张流水表还保留历史序号,用 TRUNCATE 就会出问题。

官方文档里说 TRUNCATE 在大部分情况下“不能回滚”,因为它执行时会隐式提交。有的同学背了“TRUNCATE 等价于 DELETE 全表 + 重置自增”这句话,考场上直接答“可以回滚”,结果栽了跟头。更准确的描述是:TRUNCATE 的实现类似于删除表再重建一张结构相同的空表,这种操作不支持事务性恢复,和 DELETE 逐行记录日志的行为完全不同。

3.3 场景选择:什么时候用 DELETE,什么时候用 TRUNCATE

实际开发里,三个场景能覆盖八成需求:

  • 删除一部分数据:只能用 DELETE,后面接 WHERE 条件。
  • 清空全部数据,保留表结构,且不想保留自增计数:用 TRUNCATE,速度快得多。
  • 清空全部数据但想着“万一删错了能回滚”:把 DELETE 放进事务里,代价是海量数据时性能很差,可能要删很久。

血泪经验是:TRUNCATE 没有后悔药。它等于“把表删掉再重建一张同样的空表”,执行后立即生效,反悔只能靠备份。对线上大表做这类操作,先确认备份、再挑低峰期执行,别在调试时拿真实数据试手。

你还会在项目里看到有人用 DELETE 清空几十万行表,结果跑了十几秒还没结束。这种情况应该先在测试库比较 DELETE 和 TRUNCATE 的耗时,再决定到底用哪个方案,而不是凭习惯拍脑袋。

4. 多线程考点:同步与互斥的四种实现,用户模式与内核模式的取舍

4.1 同步和互斥:一个为“协作”,一个为“独占”

在线笔试题把“多线程同步和互斥有几种实现方法”放在问答题部分,因为它适合考理解层次。先分清两个词。

线程同步,说的是线程之间有制约关系:一个线程要等另一个线程的消息,接到消息才继续。它管的是“先后秩序”。线程互斥,说的是每个线程访问共享资源时的排他性:同一时刻最多一个线程用这个资源,用完释放,别人再抢。它管的是“同时用会不会冲突”。

通俗地讲,同步像接力赛:一棒跑完,必须把接力棒交到下一棒手里,下一棒才启动。互斥像公共厕所的单间门锁:里面有人,外面的人只能等;出来一个,再进一个。

这里有一个关键逻辑:互斥可以看作一种特殊的同步。试卷原话也说了“线程互斥可以看成是一种特殊的线程同步”。原因很简单:互斥本质上也在协调多个线程的先后关系,只是它协调的规则更严格——不允许两个线程同时进临界区。答题时先分清两个词,再补上“互斥是一种特殊同步”,这段就完整了。

4.2 四种实现方式:临界区、互斥量、信号量、事件

试卷把实现方式分成用户模式和内核模式两类,具体方法包括临界区、互斥量、信号量以及事件。它们各有各的适用场景。

临界区:让同一进程内的多个线程串行访问公共代码段。它速度快,因为是用户态操作,不涉及系统调用;缺点是管不了其他进程里的线程。适合在 Java 里保护一段循环或一个共享变量,典型场景是synchronized代码块。

互斥量:为协调多个线程对同一共享资源的单独访问而设计。一个线程持有锁,其他人等待,等持有者释放才竞争。互斥量能跨进程工作,因为它在系统内核里注册了对象,身份更正式,代价是每次加锁解锁都要走内核切换。

信号量:控制有限数量资源的分配。比如停车场有 50 个车位,每进一辆车信号量减一,每出一辆加一,减到 0 后外面车辆排队。它和互斥量的差别在于:互斥量强调“独占”,信号量强调“最多允许多少个并发”。

事件:用来通知“某类事情已经发生,可以启动后续任务”。典型场景是 A 线程批量算完数据后,触发事件唤醒等着的 B 线程去做消费。事件和信号量的区别在于:事件承担“发通知”的职责,本身不带计数,适合做生产者-消费者模型里的唤醒信号。

实现模式核心用途典型限制
原子操作用户态对单个变量做不可分割的修改只能保护一个变量
临界区用户态保护同一进程内的一段代码不能跨进程
互斥量内核态跨进程协调共享资源切换成本高
信号量内核态控制有限数量的资源并发容易与互斥量混淆
事件内核态线程之间发送“开工通知”不承担计数职责

这四个概念的记忆锚点是:临界区是“门禁”,互斥量是“一把钥匙”,信号量是“N 张停车券”,事件是“一个闹钟”。考场上能说出这四个锚点,再把各自限制补上,基本就是满分答法。

4.3 用户模式与内核模式的取舍:快但有限,慢但可靠

为什么要把实现方法分成用户模式和内核模式两类?本质是操作系统执行特权级别不同。

用户模式下的原子操作和临界区不需要切换到系统内核,比如自己做一次全局变量自增,或在自己进程内拿一把锁,开销很小,速度快。但它有一个硬边界:只能保护本进程内部的资源,管不了其他进程的访问。需要跨进程协调时,就必须请系统内核出面。

每次走内核模式,线程都要从用户态切到内核态,完成等待或释放后再切回来,这个切换有成本。高频调用时,切换开销会明显拖低性能。但换来的是更强的能力:互斥量、信号量、事件实例化时,其实是在内核里建了一个对象,由操作系统维护等待队列和唤醒机制,跨进程也能正常工作。

面试里常被追问的坑是:Java 里的synchronized到底属于哪种?它本质上是依赖监视器锁,经过偏向锁、轻量级锁优化后,竞争激烈时会膨胀为重量级锁,最终落到内核态互斥机制。所以不能简单回答“同步是用户态或者内核态”,要看锁竞争的升级路径。

初学并发时,很多人把“死锁”当成玄学问题:程序跑着跑着就卡住,既不报异常也没日志。其实死锁的本质就是互斥、持有并等待、不可抢占、循环等待这四件事同时成立。理解互斥量是谁持有、谁等待,再去看死锁就会一目了然。

5. 易混概念与常见误区:两个“堆”、重载重写、删数据的三种后果

5.1 两个“堆”:JVM 堆内存和数据结构堆

“堆”是这次笔试题里最典型的撞名词考点。Java 面试高频题里有一问是“什么是堆”,但提问者可能指两个完全不同的东西:JVM 堆内存,和数据结构里的堆。

为什么容易混?因为中文都叫“堆”,英文也都是一个词。“堆”在翻译时把两个领域的概念撞在一起了,甚至连教材章节都可能同时出现:前面讲内存模型提到堆,后面讲优先队列又提到堆,初学者很容易把两者合并成一样的东西。

JVM 堆:Java 运行时数据区里的一块内存,专门存放new出来的对象,垃圾回收器也是在这一块做回收。它内部不要求元素有序,对象随便放,就像堆放杂物的大仓库。

数据结构堆:一种特殊的完全二叉树,要求父子节点之间有大小约束。最大堆要求父节点值大于等于子节点值,最小堆要求父节点值小于等于子节点值。堆排序、优先队列、TopK 问题都建立在它上面。它像按规则码放好的书架,每次取走最大或最小的那一本都很快。

区分时抓住两个关键词:JVM 堆是“放对象的地方”,数据结构堆是“能快速取极值的树”。另外要注意:有些题面说“对于任意节点,左子树和右子树的高度之差最多为 1”,这其实是平衡树的性质,标准堆约束的是父子节点值序关系,不是高度差。考试时碰到类似描述,要能分辨题目是否写混了。

5.2 “重载”和“重写”:一个在同类里加签名,一个在子类里换实现

这是全卷最容易搞混的一组中文术语:重载 vs 重写。中文只差一个字,英文却是两个完全不同的词:overload 和 override。

重载关心“同一个类里,多个方法名相同但参数不同”,第 2 章已经展开过。重写关心“子类继承父类方法后,提供自己的实现版本”,前提是有继承关系。两者唯一共同点就是“方法名相同”,这恰恰是混淆源头。

class Parent { void greet() { System.out.println("Hello from Parent"); } } class Child extends Parent { // 这是重写:子类用新实现覆盖父类的 greet() @Override void greet() { System.out.println("Hello from Child"); } }
维度重载 overload重写 override
所在范围同一个类内部父类与子类之间
方法名必须相同必须相同
参数列表必须不同必须相同
返回类型可以不同必须兼容
运行机制编译期分派运行期动态绑定

区分口诀:看到@Override注解一定是重写;看到同一个类里同名方法参数不同,一定是重载。两者背后的设计意图也不同——重载是“给你多个选择”,重写是“允许你换实现”。

5.3 Delete、Truncate、Drop:三个都带“删”,后果完全不同

只把 Delete 和 Truncate 放一起对比还不够,实际项目里还有 Drop。三个词都带“删”,后果却完全不同,这也是数据库题里的大坑。

  • DELETE:删数据行,支持 WHERE,表结构还在,自增不变,事务内可回滚。
  • TRUNCATE:清空表数据,表结构还在,自增重置,速度快但基本不能回滚。
  • DROP:连表结构一起删除,数据和表定义都没了,空间整个释放。

为什么容易混?因为中文口语里“删掉”能同时表示这三种操作。你在业务群里说“把这个表删了”,没人知道你是指清数据、重建还是彻底移除,但在 SQL 里这三个词绝不能混用。

记忆口诀:DELETE 是“删行”,TRUNCATE 是“清仓”,DROP 是“拆店”。做题时看到“保留表结构,只要数据全清”,选 TRUNCATE;看到“彻底删除表”,选 DROP;看到“删除符合条件的部分数据”,选 DELETE。

一个高频坑:有人把 TRUNCATE 理解成“能把表结构一起删”,这其实是把 TRUNCATE 和 DROP 混在一起了。TRUNCATE 执行后依然存在一张空表,DROP 执行后整张表消失。回答“DELETE 和 TRUNCATE 区别”时,如果能顺手补一句“DROP 是更彻底的操作”,面试官通常会觉得你考虑得比题目本身更全面。

5.4 存储层次:三层结构还是两个层次,取决于从哪边看

“计算机存储系统分为几个层次”这道题也容易让人犯迷糊,因为不同教材给出的层数不一样。试卷里的标准答法是这样的:典型存储系统采用三级层次结构,从上到下依次是高速缓冲存储器 Cache、主存(内存)、辅助存储器(磁盘或 SSD)。越往下容量越大、速度越慢、价格越低。

但题面补充里还提到“整个结构又可以分为两个层次”:Cache–主存层次,解决 CPU 与主存速度不匹配的问题;主存–辅存层次,解决容量不足的问题。

三层和两层次并不矛盾,只是观察维度不同。三层是从物理设备种类出发的;两层次是从“谁为谁提速、谁为谁扩容”的分工出发的。很多人把“三级”和“两层次”当成两种答案互相反驳,其实笔试里最好都答:先列三层结构,再解释两个子层次的分工,既全面又准确。

这里也可以引出选配记忆:Cache 像前台的小抽屉,放最常用的东西;主存像办公室的文件柜,存取很快但容量有限;辅存像楼下的档案室,什么都能存但取起来慢。分层存储把数据按使用频率放在不同层级,程序跑起来才会又便宜又快。

6. 编程题“找最近的对称数”:暴力法什么时候够用,什么时候该换思路

题目要求输入一个正整数,输出距离它最近的对称数。对称数也叫回文数,就是左右读起来一样的数,例如 121、1331、1221。笔试评分通常看三件事:能不能跑通、边界处理对不对、大规模数据会不会超时。

最基本的思路是从这个数出发,同时向左右两边一个个探测,遇到第一个对称数就返回。代码可以写成这样:

// 判断一个数是不是对称数 static boolean isSym(long n) { String s = Long.toString(n); int left = 0, right = s.length() - 1; while (left < right) { if (s.charAt(left) != s.charAt(right)) { return false; } left++; right--; } return true; } // 从 n 出发,左右两侧同时找最近的对称数 static long findNearestSym(long n) { long offset = 1; while (true) { if (isSym(n - offset)) return n - offset; if (isSym(n + offset)) return n + offset; offset++; } }

暴力法胜在简单:逻辑没有绕弯,写出来不容易错。但它有一个明显软肋:n 达到十位以上,目标对称数又离它很远时,循环可能要试几十万个数字,检查时间会快速膨胀,线上笔试里就容易超时。

什么情况下不该用暴力?当 n 的位数很大、输入范围很宽时,应该换用“镜像构造”的思路:取前半段数字,把它反过来拼接到末尾,直接生成候选对称数,再比较候选与 n 的距离。候选数通常只有几个,距离判断也只需要减法,性能比逐一探测高得多。

这道题最值得扣分的点往往是边界:

  • 输入是 1 时,最接近的对称数就是 1,偏移量为 0,返回值不能出错;
  • 如果两侧距离相等,要看题目要求取较小还是较大那一个;
  • n 本身已经是对称数时,直接输出 n,不要去找下一个;
  • 位数变化时容易漏候选,例如 999 附近最近的对称数可能是 1001,需要单独检查。

从那以后,我每次写这类“找最近目标”的题,都会先在纸上画一条数轴,把左右探测范围和边界条件写清楚,再决定用暴力还是镜像构造。这份笔试题的知识点也让我养成了一个习惯:拿到一份复习资料,先把零散考点按“语言、存储、数据库、并发、算法”分好类,逐个干掉再连成网。希望你也能用同样的方法,把这些易混概念变成自己面试时的底气。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 1:03:45

前端调用本地exe的四种方案与安全实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:03:44

STM32F215RE与PCA9422低功耗电源管理方案设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:03:32

Games101作业3:从Phong光照到法线贴图的Shader渲染实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:03:23

Python类与对象详解:从第二十三课掌握面向对象核心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:03:22

ADD属性驱动架构设计:以质量属性为锚点的架构决策方法论

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:01:59

Excel规划求解完全指南:从加载宏到线性规划实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华