我最近 是在 xx 公司 (以 此突出 商业项 目) 里 做了 xx 项目 , 这 个项目 的客户方 是xx, 已 经上 线( 但如果 是web项 目面 试官 大概率会 去核对 )。这 个项 目用到 了敏捷 开发模 式 (提一下 别展开 , 算抛 出个 提问点 ), 这个项 目组 人员 是xx人 , 做 了n个 月, 我在 里面做 了xx和 xx 模块。
你这样 一说 ,能 通过 项目 所在公 司和客 户方等 要素 , 说明 这个项 目不是 你编 的。有 人会问 了, 如 果项目真的 是编的 , 该怎 么说 ? 这块 我不管 , 你自 己想 办法说。
但你这 样说之 前, 事 先需 要做好 如下的 功课。
1. 了解敏 捷开发模 式,比 如站会 每个人 该说什 么 ,用 jira 管理进 度, 一 年定 好若干 个发布 日期 , 一 个月发 布一次 等, 因 为你 提到了 , 面试 官大概 率后 继会问 到。
2. 如果你 说的 是xx财务 系统 xx 图书 馆系 统等 ,一 些资深 的面试 官可能 会问 , 这块 有现成 的项目 , 为什么 你们公 司还要 自己 开发 ?所 以说 你在准 备项 目描述 时, 不 能夸张 , 比如把一 个数据 收集模块的维 护项目 夸张 成xx财务系 统。不 过我也 遇到 过一些 候选人 , 他们 就说 这是公 司接的 项目 , 为什么人 家还要 下订单 做此 项目他 们管不 着。
3. 你一旦 说了这 个项目 , 那么面试 官就会 认为你 真实 做过 ,所 以其 中每个 业务 需求 ,比 如数 据从哪里收集 , 客户 从哪个 前端 发请求 , 客户 请求处 理的 流程 ,以 及数 据表的 规模 等信息 , 你得 知道并且事先 准备好 回答预 案,我就经 常用此 来确认 候选 人的项 目是真 实项目 还是 编的项 目。
4.通过说项 目管 理工具 ,说 明你 不仅 会写代 码
在介绍 项目背 景之后 , 你更可以 说些项 目管理 的工 具 , 以 此证明 你在项 目里 还做过 其它事 情, 不 仅是仅会写 代码 ,具 体的 说辞 范例如 下。
在这个 项目里 , 我们 用到 了maven,用 git 来管 理代码 , 用jira来管 理任 务和 bug, 用jenkins工 具来发布 。 我还 用过 junit 编写过 单元测 试, 我 们还 用sonar来 统计代 码的 测试覆盖 度, 我 们项目 经理 要求 , 只 有当“行 覆盖 率高 于80%”,代 码才 能提 交。
上文提 到maven,Git和 junit 这块 不难 ,jira 管理 bug 和task这个 也没什么 可问 ,但 你要 事先 了解 下sonar管 理代码 质量 的基础知 识以及 行覆盖 率等 要点 ,至 于jenkins发 布脚本 ,这 个无 需一般 开发操心 ,你 说下 就行了 。 在上文里 你仅仅 提到的 是工 具 , 但 你更要 通过这 些工 具 , 来 进行自 我表扬。
我在使 用junit时 ,不会 敷衍地 编写案 例, 而 会根 据真实 的业务 数据来 编写 案例 ,并 且我 还会着 重考 虑各种边 界情况 ( 这些 哪怕 初级开 发也有 本事做 到 ), 而且 在编写 代码时 , 我会非常 注意编 码规范 , 比
如定义 变量时 会让人 一看 就理解 , 在关键 代码 地方多写 注释 ,在 if 等条 件里不会 写太复 杂, 一 个方 法不会写 太长 ,或 者你 可以 再说些 其它好 的编码 规范 。而且, 一旦 遇到我 的bug,我会 第一时间 跟进 , 并会和 相关对 应的人 一起 解决掉。
上述文 字, 虽 然说是 自卖 自夸 ,但 由于 你结合 到了 项目 ,所 以面 试官不 会有 违和感 。 而且 你这样一说 , 面 试官就 会认为 你除 了写代 码外 ,其 它开 发项 目的综 合能力 也很强。
不过千 万注意 , 介绍 项目 经验的 目的主 要是证 明技 能的匹 配度 ,所 以上 文提 到的 “ 介绍项 目背景 ” 和“说明 项目用 到的工具 ” 以及 “ 自卖自 夸”的 说辞 , 你别 说太多 , 可以 通过 练习把 它们控 制在 1 分钟以内。
5.用 Spring Boot 项 目 举例 ,说 明你 的技术 基本 面
然后就 需要介 绍项目 里用 到的技 术, 哪 怕你的 亮点 说辞再 说, 你 也得保 证技 术的基 本面说 辞, 这 里就用当 前Java项目 的主 流框 架Spring Boot为 例, 告诉 大家如 何以此 展示 Java 开发 的基 本功。
我们这 个项目 用到 了Spring Boot框 架, 其 中用 JPA 连接 Oracle( 或MySQL等 )数 据库 , 在控 制层里用到 了@RequestMapping注 解来 编写业 务处 理方法 。 在业 务代码 里,是 用@Autowired注 解来以 IOC 的方式 引入类 , 还用 到了 @Service 和@Component注 解。当 我们 从数据库 里拿到 数据后 , 会 用包含 @Entity 和@Table注解的 模型类 来映射 数据 。在这 个项目 里, 我 们还 用到了 @Transactional 注解来定 义事务 , 这个 注解 是作用 在Service层 上的 , 在这 个项目 里, 我 们还 用到多 个Java集 合类 和异 常处理 类。
通过上 文的范 例, 大 家应 该可以 很好地 展示 Spring Boot 的基本 技术面 , 其实对 大多 数Java初 级开发 而言 ,日 常工 作也就 是用 Spring Boot 写一 些增删改 查的工 作, 所 谓根 据现有 的业务 再编写 新的 业务 , 所 以上述 说辞足 够了 。但是 由于你 提到 了Spring Boot, 所 以在提 问阶 段 , 面 试官大 概率会 问及如下的 问题。
⚫ @Service和 @Component 注解 的差别?
⚫ 各 种Restful请 求格式 以及各 种http请 求返回 码。
⚫ @Transactional事务 里的事务 隔离级 别和事 务传 播机制 概念。
⚫ Spring依 赖注 入概念 和@Autowired的 用法。
⚫ Spring Bean的 生命 周期。
⚫ 甚至可 能还会 问Spring Boot启 动流程 以及底 层源码。
在写代 码时 ,我 会非 常注 意 ,在 try...catch...finally 从句 里关 闭或释 放Connection和大 的集合 , 一 些大的对 象用好 以后 ,我 会及时把 它们设 置成 null, 以此提 升它们 的回收 时间 , 在for等 循环里 , 我不 会频繁 地操 作String对 象 , 因 为会产 生大量 内存 碎片。同 时 ,我 会非 常谨 慎地使 用finalize方法 ( 事先看下 ), 因 为这可 能会 导致对 象无法 回收。
其实说 上这四 点就够 了 , 如果你 自己感觉 有本 事, 可以 在了解 强引用 、弱 引用和 软引用 的前提 下在 说如下的 点, 这 很值钱。
在数据 同步的 业务场 景里 , 我用 到了弱 引用 (或软 引用 ),以此 提升数 据对 象的回 收时间。
如果面 试官问 你JVM内 存结构 及GC(垃圾 回收 ) 流程, 这其 实是理 论问 题 , 网 上资料 太多 ,靠背 就行了 ,所 以这 里就不 再详 细说了 。 但话 说回来 ,GC流程 以及 JVM 体系 结构这方 面的理 论知识 , 这 属于面试 常用考 点, 你 准备 下不吃 亏。
7. 展示你 在数据 库调优方 面的经 验
很多候 选人其 实不会 在面 试中展 示内存 调优方 面的 经验 ,而 你如 果按照 上述 说辞 ,一 方面 在介绍 项目经验时 引出要 点, 另 一方 面在后 继交流 中很好 地说 明细节 , 那么 可以这 样说 , 你就 超越了 很多竞争者 , 甚 至说句 不该说 的话 , 一些 初级开 发甚至 还能 以此充 实自己 的项目 经验。
在介绍 项目经 验时 , 如 果单纯展 示内存 调优方 面的 经验 ,可 能说 服力不 强 ,这里再 给出用 实际说 明数据库调 优技能 的范例 。 首先你可 以在介 绍项目 时 ,适当地 通过如 下的说 辞来 引入要 点。
在本项 目里 ,我 参与 过数 据表设 计, 所 以会考 虑用 反范式 来避免 因大表 关联 而导致 的性能 损耗 ,同 时我们会 合理地 设置索 引以 提升数 据库的 访问性 能 ,并且我 还有过 用执行 计划 优化语 句的经 验, 同 时在使用事 务的时 候, 我 会非 常注意 配置事 务隔离 级别 和事务 传播机 制, 以 免造 成锁表。
同样 ,在 项目 介绍阶 段,数据库 调优方 面的说 辞不 需要展 开, 给 出点即 可,由于你 提到了 , 所以 面试官在后 面大概 率会问 到。
不过你 在面试 前, 需 要准 备如下 的技能 ( 其实 这些 技能属 于数据 库基本 点,你不准 备反而 会有问题 )。
1 你去看 下索引 的数据 结构 ( 比 如B+树 ), 建索 引的语 句, 索 引的种 类 ,尤其是 复合索 引以及 对应 的回表和 最左匹 配原则。
2 事先看 下索引 的正确 用法 , 以 及哪些 情况下 用不 到索引 , 比如 where a != 'xx' 可能就 用不到 。 3 索引的 代价 (会 占硬 盘, 以及 大批量 读写时 会重 建索引 , 所以 性能慢 ), 以及在 小表里 , 无需 建索引。
4执 行计划 的概念 ,以及 通过执 行计划 排查 慢sql时该注 意的点 ( 避免 全表 扫描 ,设 置合 理的关 联表方式等)。
5 三范式 和反范 式相关 概念 , 因 为你提 到了。
6 事务隔 离级别 里的脏 读等概念 , 以及 事务传 播机 制 , 尤 其地 ,你 要具 体说 出你项 目里用 的是哪 个。
8. 总结前 文说 辞
这里根 据上文 给出的 要点 , 整理 下介绍 项目经 验的 说辞。
(介绍 项目背 景)我 最近 的项目是 在xx公 司做 的xx社区爱 心超市 项目 (项 目别说太 大),客 户方 是xx公司 ,项 目组 里是 6 个人 , 开发 了八个 月, 最 近还 在开发 , 在其 中我做 了删 除和更 新订单 模块的 业务 ( 如果 是在校 阶段做 的项 目需要 再加上 如下的 话 ), 这个 项目是 我从大 三开 始 , 外 面找 xx 公司做 的兼 职项目 , 做项 目的时 候我 每月还 能拿到 钱。
( 介绍 项目技 术,JD上 列的尽 量说全 ) 这个 项目 用到 了Spring Boot框 架 , 数 据库 是Oracle,用 JPA 连接 Oracle( 或MySQL等 )数 据库 , 在控 制层里用 到了 @RequestMapping 注解 来编 写业 务处理方法 。 在业 务代码 里,是 用@Autowired注 解来 以IOC的 方式引 入类 , 还用 到了 @Service 和@Component注 解。当 我们从 数据库 里拿到 数据 后 , 会 用包含 @Entity 和@Table注解 的模型 类来映射数 据。在 这个项 目里 , 我们 还用到 了@Transactional注 解来 定义事 务, 这个 注解是 作用在 Service 层上 的 ,在 这个 项目里 , 我们 还用到 多个 Java 集合 类和 异常 处理类。
( 介绍 项目管 理工具 )这 个项目 用到了 敏捷开 发模 式 ,用 Maven 框架 , 用sonar管理 质量 ,用 git 管理项目 版本 ,用 jenkins 发布 ,用 logback 打日 志 , 我 在这个项 目里 , 除了写 代码外 , 还有 用Junit进行单 元测试 的经验 。 我们还 用sonar来统 计代 码的测试 覆盖度 , 我们 项目 经理要 求, 只 有当 “ 行覆 盖率高 于80%”,代码 才能提 交。
( 最后 抛出亮 点)在 这个 项目里 , 我用 到了单 例和 工厂设 计模式 , 在这 个项 目里 ,我 做过 JVM 调优 和数据库 调优的 的事情 , 在做项目 时为了 加深理 解 ,我还看 了ArrayList快 速失效的 底层代 码, 也 看过
Hashap关 于HashCode以 及put和 get 部分 的底层 源码。这 个项 目后 期进度 比较紧 , 我也 能通 过加班等 手段保 证项目 能正 常上线 , 而且 一旦遇 到线 上问题 , 我也 会尽量 参与 并解决。
大家在 面试前 , 可以 根据 上述范 例合理 地准备 说辞 , 次序 和内容 上可以 做调 整 , 但 包含的 几个要 素尽量都说 全。如 果可以 , 事先要多 练习几 遍, 确 保能 足量地 抛出你 的相关 技能 和亮点。
不过千 万注意 , 在介 绍项 目时 ,对 具体 的点 ,比如 内存调 优, 你 点到为 止,别展开 , 否则 的话 ,面 试官一定 会认为 里思路 不清 晰。总 之在介 绍项目 时 ,需要遵 循的要 点是 :第一 要尽可 能全面 地说明 你用 过JD上 的技能 , 第二 要抛出亮 点话题 , 等待 面试 官提问。
9. 准备项 目说辞 时, 更可 以准备 后继 面试官 的问 题
其实大 多数面 试官在 面试 前 , 有 可能还 在调试 代码 , 或者 还在开 会, 也 就是 他们事 先是不 会准备 面试问题的 。 所以 当你在 自我 介绍和 介绍项 目经验 时抛 出亮点 后, 他 们往往 会随 口接着 这个话 题问下 去, 也就是 说, 只 要实现 准备 好 , 你 是知道 面试官 会问 什么的。
根据上 文给出 的项目 介绍 说辞 ,你 提到 了敏捷 开发 ,Spring Boot 框架 ,数 据库调 优, 内 存调优 , 设计模式 ,junit 以及 项目 管理软 件,java集 合以 及底层源 码等话 题, 在 前文 里也给 出了一 些面试 官可 能问到的 问题以 及对应 的准 备要点 , 除此 之外 ,大家 还可以 做如下 的准备。
→ 理解单 例模式 ,尤 其是 双重检 查的单 例模式 , 要 会写代 码, 并 给出一 个项 目使用 场景 ,比 如某工具类需 要用单 例的方 式创 建。同 样地 ,对 于工 厂模 式也准 备一个 使用场 景,这更好 办, 比 如xml解析器 类, 是 用Factory模式创 建的。
→ 在理解 的基础上 , 背诵 并会默 写ArrayList快 速失效的 底层代 码, 面 试时 , 当面 试官顺 着你给出 的言辞 继续提 问时 ,你 可以边写 边说 ,同 时也 可以 准备 HashMap 以及 Hashcode 的底 层源 码。
→ 去看 下JVM内存 调优 和垃圾回 收相关 理论 ,最好 再看下 强引用 , 弱引 用和 软引用 理论。
这里请 注意 ,你 在自 我介 绍和 项目 介绍 时, 可 以通 过抛出 亮点来 引导面 试官 提问 ,但 同时 , 你更 需要准备其 它常见 问题 ,因 为有些面 试官依 然会问 其它 问题。对 此大 家可以 在Spring Boot框架 , 数据 库和 Java 核心 开发 这三 个方面多 刷些面 试题 ,甚 至可以多 准备些 笔试 题。那 么这样 一说 ,你 抛出 亮点 有什么好 处呢?
第一 ,真 有些 面试官 在顺 着你言 辞提问 后, 发 现你 回答很 好( 因 为你事 先准 备过 ,想 不好 回答都
难 ),然 后他 们就不 再提 问了。
第二 ,面 试官 多少会 问及 些你提 到的亮 点, 这 样你 就能最 大程度 避免面 试官 问及你 不熟悉 的点。
第三 ,其 实大 多数初 级开 发在项 目中只 是做增 删改查 , 但 一方面 你根据 上文 描述准 备了若 干常稳 点,
另一方 面你能 很好证 明你 熟悉设 计模式 , 有JVM和数据 库调优 经验 ,那么 你就有 可能在 面试中 表现 比
其它人 强。
总之 ,你 在准 备项目 经验 的前提 下准备 些基础 和亮 点技术 点, 准 不会吃 亏。
原文链接:https://blog.csdn.net/2301_77783312/article/details/130346088