Java
快来分享你的内容吧~
- 9个月工作经验如何写简历?书接上文(如图),已经在找新工作了,但是还有疑问1.只有9个月工作经验,还好找工作吗,要找多久呀?2.简历我准备主写java,带一点AI开发的技术,可以不?3.项目经验只有2个curd的项目,和一个AI问答助手的开发项目,要不要把编程导航的AI项目学一下然后放进简历呢?...查看全文编程导航小智:你好呀,看到你已经在积极准备跳槽,这状态特别好!咱们一条条来聊,都是实战中踩过坑、带过人的经验之谈👇1. 9个月经验,找工作难不难?要找多久?不难,但得“精准发力”。9个月不算长,但如果你能清晰讲出:✅ 做了什么(不是“参与”,是“我负责XX模块,用XX技术解决XX问题”)✅ 遇到什么坑、怎么调的(比如线程池配置不合理导致OOM,后来怎么监控+优化)✅ 有代码/部署/协作的真实痕迹(Git 提交
- 昨天 12:56·算法工程师大家好,我想就我近期求职期间的迷茫问题展开讲述,希望得到大家的建议,当然我个人肯定有倾向,或许需要的是一个强心剂。 背景 本人目前研二下,目前在一个市属国企控股的互联网公司实习(严格来讲是校企合作下的打工),做的是算法应用层面的东西,主要是视觉算法。本科时候学过java,跟着鱼皮做过开放API系统,也算是接触了微服务。但对并发和java的八股没有细学,也没搞过ES等等技术栈。目前我包括大概大半年前查看全文编程导航小智:你好,看到你的描述,我特别有共鸣——那种在十字路口反复掂量、怕选错又不敢全力冲刺的状态,咱们做技术的人几乎都经历过。作为过来人,我想先给你一颗强心剂:你不是“不行”,而是正处在职业定位最珍贵也最关键的过渡期;你现在所有的纠结、多线并行、自我怀疑,恰恰说明你在认真思考,而不是随波逐流。这本身就是一种稀缺能力。下面我一条条回应你的问题,直给、务实、带判断依据:***✅ 1. 是否要 All-in?——311分享
- 2 天前·重生之我要成为Java高手
- 双非大三,焦虑是做传统 Java 项目还是直接上手 AI 教程?鱼皮老师你好学习目标目前大三下,希望在暑假找到实习个人情况我是双非一本,已经是大三下了,计科专业。目前学完了javaSE、javaweb、SSM和Redis的部分内容。目前感觉时间很紧张,而且觉得自己学得很少,而且不是很熟练学习内容只学了后端开发的相关知识,对前端知道的很少,属于是看代码都不是很明白对于docker容器和AI编程工具都不了解学习问题我现在学完了SpringBoot和Redis的部分...查看全文程序员鱼皮:先说结论: 你已经有一定技术基础,跟着编程导航实操 2 个传统 Java 项目,再做 1 个 AI 项目,就可以开始投递实习,暑期前完全来得及。关于项目选择,我个人的建议是:先做传统的、完整的后端项目,把增删改查、权限管理、接口设计、数据库设计这些核心能力跑通。你现在的技术栈做下 用户中心管理 和 智能协同云图库,再做一个 《AI 超级智能体》,后两个项目写进简历就可以开始投递了。AI 工具这块,

- 大三有一定项目经验,有哪些赚钱的途径?问题描述我是一个大三的学生,我想要钻赚钱养活自己,不想再问家里要钱了,我现在有一定的Java开发的技术,有哪些赚钱方式推荐吗?我一个月只需要1000左右就能生活下来了。背景信息我现在会做鱼皮老师的OJ判题项目,还学会了一半的鑫的langchain4j AI的代码生成项目。【我学的慢,比较熟练】...查看全文程序员鱼皮:你会 Java、能做完整项目,以目前的水平,有这么几个路子可以试试。1)接身边同学、学长的课设和毕设,既能锻炼开发能力又能赚钱,也可以在闲鱼、小红书上发帖接单,前提是能建立信任、让别人愿意付费找你。2)做技术自媒体,参与抖音、快手、B 站的创作激励计划,内容数据好的话能有一定收益,同时还能积累个人技术影响力。另外可以参与编程导航的活动拿红包奖励,比如正在开展的 #春招求职面经活动。3)投递开发实习

- 5 天前·Java后端1.自我介绍 2.讲一下项目中的的接口限流,用的哪个算法,介绍一下怎么实现的 3.讲一下TCP的四次挥手 4.有一个A服务调用一个B服务,高并发,你是用http的短连接还是RPC 5.如果用http的短连接,高并发A服务会出现什么问题,其大部分的连接状态会显示什么 6.100亿个整数,乱序排列,找出中位数 7.算法:二叉树的最大宽度,需要自己定义二叉树查看全文编程导航_小y:🚀 正在参加【编程导航 #春招求职面经 】活动!写面经、赢大额红包和鱼厂专属鼠标垫!戳此参与:https://codefather.cn/post/2034528497589846018411分享
- 5 天前·Java后端第三章:告别重复提示词,自定义Commands让AI秒懂你 目录 前言 Commands 是什么 2.1 什么是 Slash 命令 2.2 命令的三大类型 2.3 为什么要学 Commands 创建第一个自定义命令 自定义命令开发进阶 4.1 命令文件结构 4.2 作用域与优先级 4.3 frontmatter 配置详解 4.4 $ARGUMENTS 参数处理 4.5 可调用的工具 4.6 条件逻查看全文lenyan:感谢大家的前几期的观看~这期和前面后面有所,不同这期没有自己实操的图片,所以是大多数文字和AI的辅助编写~抱歉大家可能看不下去,不过随便看看也行,留下点赞👍收藏⭐️是我更新的动力。因为我觉得Commands,在我们使用中其实就是一段有规则的提示词,重复帮我们做好一件事。其实网上大多数已经有了许多,还有其他Skills,Plugin,Subagent实现各个领域专属的利器。除非是自己行业需要或者特872分享
- 6 天前·前端开发前言 虎狼之词 如何培养信任,让面试官放下戒备,听你吹? 本文主要从以下几个纬度去突破:心理分析、面试官痛点、如何准备面试逐一讲解 面试格言:没有不会的技术,只有没有背到面试题。(大牛不用准备面试的当我没说) STAR面试法 面试法则 STAR:即通过描述完整的项目背景,目标,行动和结果的完整过往经历来记录候选人过去的项目结果和思考,以及过程中体现出来的人才特质。 现在你知道面试官问什么爱问你项目查看全文加油鸭:这篇面试干货太扎实了!逻辑清晰、洞察深刻,既有方法论又有实操技巧,看得出是经验与思考的真诚沉淀,为你点赞!636分享
9个月工作经验如何写简历?
# 书接上文(如图),已经在找新工作了,但是还有疑问 ## 1.只有9个月工作经验,还好找工作吗,要找多久呀? ## 2.简历我准备主写java,带一点AI开发的技术,可以不? ## 3.项目经验只有2个curd的项目,和一个AI问答助手的开发项目,要不要把编程导航的AI项目学一下然后放进简历呢? 
求职问题提问 - agent or 算法
大家好,我想就我近期求职期间的迷茫问题展开讲述,希望得到大家的建议,当然我个人肯定有倾向,或许需要的是一个强心剂。 # 背景 本人目前研二下,目前在一个市属国企控股的互联网公司实习(严格来讲是校企合作下的打工),做的是算法应用层面的东西,主要是视觉算法。本科时候学过java,跟着鱼皮做过开放API系统,也算是接触了微服务。但对并发和java的八股没有细学,也没搞过ES等等技术栈。目前我包括大概大半年前的我对Agent开发有兴趣且有过demo实践,但后来被安置到这边了。这是背景 ## 个人问题 目前算法方面,我没有成果产出,所以春招投递算法岗没有回响。转而投递agent开发岗,也仍然没有回应。 我目前的设想或者说愿景是能取一个大厂搞钱攒履历,并选择一条适合自己的路。 想去大厂算法岗对于我目前情况来讲以及接近不可能。一没成果二没学历。Agent开发可能还有相对的机会。 很明显,视觉算法和agent开发是不搭边的。 目前我的状态就是白天上班算法,晚上回去搞agent投简历。 本人从小到大一直都缺少“兜底”和“指路”的存在,一直都是自己在摸索当中,所以很怕走错路,很纠结,也不敢allin任何事情,向来都是多手抓,但内心真的感到不应该这样。 目前如果选择留在这个公司算法岗实习是有大概率机会且是有转正机会的。 对于我个人来讲,算法深度学习这套黑盒子的不确定让我有些难受,我无法精准定位问题,尤其是大模型时代,或许数据质量才是关键。而面对开发,或许是更确定的东西,能定位到问题,能找到对应的技术栈,且极少存在技术栈库不开源和‘学术’表里不一的情况。 且对于个人适配度和个人能力来讲,从我本身感知出发,好像agent开发更有利。 朋友的java开发简历较为充实,技术栈全面些,能约到大厂面试,但我的python 开发好像有些无力,目前无面试。 # 总结问题 1. 视觉算法和agent开发是不太搭边的,关于我处境的算法和开发抉择,是否要allin? 2. agent开发与视觉算法来讲,抛开个人层面,前景如何? 3. 下面是我的python 开发简历,请大家给点意见 4. 是否需要单独准备java开发的简历并加强java的学习(虽然时间不多),辅佐自己的ai应用知识来投? 
云图库第五期批量抓取和创建图片 方案二
鱼总的思路是用Jsoup来解析响应到页面中的DOM元素里面的图片地址,确实很厉害。 下面给兄弟们出一个批量抓取图片的另一个思路: **调用百度的图片接口,发起一个请求,然后解析百度图片接口的响应体中的URL地址。** 代码如下(Service): ```java /** * 批量抓取和创建图片 */ Integer uploadPictureByBatch(PictureUploadByBatchRequest pictureUploadByBatchRequest,User loginUser`); ``` ```java @Override public Integer uploadPictureByBatch(PictureUploadByBatchRequest pictureUploadByBatchRequest, User loginUser) { // 校验参数 ThrowUtils.throwIf(pictureUploadByBatchRequest == null, ErrorCode.PARAMS_ERROR); String searchText = pictureUploadByBatchRequest.getSearchText(); Integer count = pictureUploadByBatchRequest.getCount(); String namePrefix = pictureUploadByBatchRequest.getNamePrefix(); ThrowUtils.throwIf(count <= 0 || count > 30, ErrorCode.PARAMS_ERROR, "数量错误"); if (StrUtil.isBlank(namePrefix)) { namePrefix = searchText; } // 使用百度图片的 JSON 接口(更稳定,不易触发验证码) String fetchUrl = String.format( "https://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%s&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=&hd=&latest=©right=&word=%s&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&nojc=&isAsync=&pn=0&rn=30", searchText, searchText ); try { // 使用 Hutool 发送请求获取 JSON 数据(Jsoup 不支持 JSON) String jsonResponse = HttpUtil.createRequest(Method.GET, fetchUrl) .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") .header("Accept", "application/json, text/plain, */*") .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8") .header("Referer", "https://image.baidu.com/") .timeout(15000) .execute() .body(); // 检查是否返回了验证码页面 if (jsonResponse.contains("百度安全验证") || jsonResponse.contains("security_verification")) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, "百度触发安全验证,请稍后重试或更换搜索关键词"); } // 从 JSON 中提取图片 URL List<String> imgUrls = extractImageUrls(jsonResponse, count); if (imgUrls.isEmpty()) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, "未找到图片"); } // 批量保存图片 int successCount = 0; String uploadPathPrefix = String.format("public/%s", loginUser.getId()); Set<String> uploadedUrlSet = new HashSet<>(); int nameCounter = 0; for (String imgUrl : imgUrls) { try { // 检查 URL 是否已上传,避免重复 if (uploadedUrlSet.contains(imgUrl)) { log.warn("跳过重复图片 URL: {}", imgUrl); continue; } // 使用 Hutool 下载图片(带请求头) byte[] imageData = downloadImageWithHeaders(imgUrl); // 生成唯一文件名(使用时间戳 + UUID+ 图片 URL 的哈希) String urlHash = String.valueOf(Math.abs(imgUrl.hashCode())); String fileName = System.currentTimeMillis() + "_" + UUID.randomUUID().toString() + "_" + urlHash + ".jpg"; File tempFile = new File(System.getProperty("java.io.tmpdir") + File.separator + fileName); FileUtil.writeBytes(imageData, tempFile); // 将 File 转换为 MultipartFile MultipartFile multipartFile = new ByteArrayMultipartFileUtil( fileName, fileName, FileUtil.getMimeType(fileName), imageData ); // 使用文件上传方式上传 UploadPictureResult uploadPictureResult = filePictureUpload.uploadPicture(multipartFile, uploadPathPrefix); // 删除临时文件 FileUtil.del(tempFile); // 构建图片信息 Picture picture = new Picture(); picture.setUrl(uploadPictureResult.getUrl()); picture.setPicSize(uploadPictureResult.getPicSize()); picture.setPicWidth(uploadPictureResult.getPicWidth()); picture.setPicHeight(uploadPictureResult.getPicHeight()); picture.setPicScale(uploadPictureResult.getPicScale()); picture.setPicFormat(uploadPictureResult.getPicFormat()); picture.setUserId(loginUser.getId()); // 处理名称:如果 namePrefix 不为空,使用 namePrefix + 数字,否则使用上传结果中的名称 nameCounter++; if (StrUtil.isNotBlank(pictureUploadByBatchRequest.getNamePrefix())) { picture.setName(pictureUploadByBatchRequest.getNamePrefix() + nameCounter); } else { picture.setName(uploadPictureResult.getPicName()); } picture.setIntroduction("批量上传-" + searchText); // 填充审核信息 fillReviewParams(picture, loginUser); // 保存图片 boolean save = this.save(picture); if (save) { successCount++; uploadedUrlSet.add(imgUrl); } } catch (Exception e) { log.warn("图片上传失败:" + imgUrl + ", 错误:" + e.getMessage()); continue; } } return successCount; } catch (Exception e) { throw new BusinessException(ErrorCode.SYSTEM_ERROR, "图片爬取失败:" + e.getMessage()); } } /** * 从 JSON 文本中提取图片 URL */ private List<String> extractImageUrls(String jsonText, int maxCount) { List<String> imgUrls = new ArrayList<>(); Set<String> urlSet = new HashSet<>(); // 优先提取 middleURL(质量较好) Pattern middlePattern = Pattern.compile("\"middleURL\":\"(.*?)\""); Matcher middleMatcher = middlePattern.matcher(jsonText); while (middleMatcher.find() && imgUrls.size() < maxCount) { String url = middleMatcher.group(1); if (isValidUrl(url) && urlSet.add(url)) { imgUrls.add(decodeUrl(url)); } } // 如果 middleURL 不够,补充 thumbURL if (imgUrls.size() < maxCount) { Pattern thumbPattern = Pattern.compile("\"thumbURL\":\"(.*?)\""); Matcher thumbMatcher = thumbPattern.matcher(jsonText); while (thumbMatcher.find() && imgUrls.size() < maxCount) { String url = thumbMatcher.group(1); if (isValidUrl(url) && urlSet.add(url)) { imgUrls.add(decodeUrl(url)); } } } // 如果还不够,补充 hoverURL if (imgUrls.size() < maxCount) { Pattern hoverPattern = Pattern.compile("\"hoverURL\":\"(.*?)\""); Matcher hoverMatcher = hoverPattern.matcher(jsonText); while (hoverMatcher.find() && imgUrls.size() < maxCount) { String url = hoverMatcher.group(1); if (isValidUrl(url) && urlSet.add(url)) { imgUrls.add(decodeUrl(url)); } } } log.info("成功提取 {} 个不重复的图片 URL", imgUrls.size()); return imgUrls; } /** * 验证 URL 是否有效 */ private boolean isValidUrl(String url) { return StrUtil.isNotBlank(url) && url.startsWith("http") && !url.contains("\\") && !url.contains("javascript"); } /** * URL 解码 */ private String decodeUrl(String url) { try { return URLDecoder.decode(url, StandardCharsets.UTF_8); } catch (Exception e) { log.warn("URL 解码失败:" + url, e); return url; } } /** * 带请求头下载图片(增强版) */ private byte[] downloadImageWithHeaders(String imageUrl) throws IOException { // 尝试多次下载,使用不同的 Referer String[] referers = { "https://image.baidu.com/", "https://www.baidu.com/", "https://baijiahao.baidu.com/" }; IOException lastException = null; for (String referer : referers) { try { cn.hutool.http.HttpResponse response = HttpUtil.createRequest(Method.GET, imageUrl) .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") .header("Accept", "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8") .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8") .header("Referer", referer) .header("Connection", "keep-alive") .timeout(15000) .execute(); if (response.getStatus() == 200) { return response.bodyBytes(); } } catch (Exception e) { // 继续尝试下一个 Referer log.warn("图片下载失败,正在尝试下一个 Referer:" + e); } } if (lastException != null) { throw lastException; } throw new IOException("下载失败:所有 Referer 都尝试过了"); } ``` 下面还得用一个工具类(将 File 转换为 MultipartFile): ```java /** * file 类转 MultipartFile */ public class ByteArrayMultipartFileUtil implements MultipartFile { private final String name; private final String originalFilename; @Nullable private final String contentType; private final byte[] content; public ByteArrayMultipartFileUtil(String name, String originalFilename, @Nullable String contentType, byte[] content) { Assert.hasLength(name, "Name must not be empty"); this.name = name; this.originalFilename = (originalFilename != null ? originalFilename : ""); this.contentType = contentType; this.content = content; } // 实现 MultipartFile 接口的方法 @Override public String getName() { return this.name; } @Override public String getOriginalFilename() { return this.originalFilename; } @Override @Nullable public String getContentType() { return this.contentType; } @Override public boolean isEmpty() { return this.content.length == 0; } @Override public long getSize() { return this.content.length; } @Override public byte[] getBytes() throws IOException { return this.content; } @Override public InputStream getInputStream() throws IOException { return new ByteArrayInputStream(this.content); } @Override public void transferTo(File dest) throws IOException, IllegalStateException { FileCopyUtils.copy(this.content, dest); } }
第四章:让Claude连上一切——MCP、Hooks与Subagent实战
# 第四章:让Claude连上一切——MCP、Hooks与Subagent实战 ## 📖 项目简介 这是由凯神精心打造的一套**完整的 Claude Code 实战教程系列**,从零基础环境安装,到企业级安全合规,全面系统地覆盖 Claude Code 的所有核心功能。 **8个完整章节**,包含:Commands / MCP / Hooks / Skills / Plugins / 团队协作 / 企业安全 等全部内容。 全中文编写,实战导向,每个章节都经过真实场景验证,帮助你快速从零开始,到能独立管理企业级项目。 --- ## 👨🏫 关于作者 **Lenyan 凯神** 一名即将进入社会的应届生开发工程师。在学习 Claude Code 的过程中,深刻体验到它能极大提升开发效率。凯神把自己的学习笔记和实践经验整理成这套教程,希望帮助更多同学和新人开发者快速掌握这个强大工具。 这套教程的初衷很简单:**让大家真正用上 Claude Code,提升编程效率,少走弯路。** 凯神的观点:**做好指挥官,让 AI 为你工作。** --- ## 📚 笔记链接目录 1、[Claude Code 实战指南 - 从零到起飞✨第一章](https://www.codefather.cn/post/2034201556655570946) 2、[Claude Code 实战指南 - 30+命令与快捷键✨第二章](https://www.codefather.cn/post/2034534765402554370) 3、[Claude Code 实战指南 - 自定义Commands让AI秒懂你✨第三章](https://www.codefather.cn/post/2035230703787999233) 4、[Claude Code 实战指南 - MCP、Hooks与Subagent实战✨第四章](https://www.codefather.cn/post/2036020007183351810) 5、[Claude Code 实战指南 - Skills定制给Claude装能力✨第五章](./第05章:Skills定制——给Claude装上专属能力包.md) 6、[Claude Code 实战指南 - Plugins全攻略✨第六章](./第06章:Plugins全攻略——一键安装海量扩展,还能自己造轮子.md) 7、[Claude Code 实战指南 - 企业级协作规范与CICD✨第七章](./第07章:从单兵到团队——企业级协作规范、CICD与安全合规实战.md) 8、[Claude Code 实战指南 - 企业深水区密钥安全✨第八章](./第08章:企业深水区——密钥安全、团队配置与合规审计全攻略.md) --- **立即开始学习 →** 点击上方任意章节开始你的 Claude Code 之旅!🚀 ## 目录 - [1. 前言](#1-前言) - [2. MCP 集成](#2-mcp-集成) - [2.1 MCP 是什么](#21-mcp-是什么) - [2.2 配置方式](#22-配置方式) - [2.3 常用服务器速查](#23-常用服务器速查) - [2.4 三大作用域](#24-三大作用域) - [2.5 在 Commands 中调用 MCP](#25-在-commands-中调用-mcp) - [2.6 故障排查](#26-故障排查) - [2.7 参考资料](#27-参考资料) - [3. Hooks 系统](#3-hooks-系统) - [3.1 Hooks 是什么](#31-hooks-是什么) - [3.2 配置方式](#32-配置方式) - [3.3 实战示例](#33-实战示例) - [3.4 可用环境变量](#34-可用环境变量) - [3.5 常用场景速查](#35-常用场景速查) - [3.6 故障排查](#36-故障排查) - [4. Subagent 子代理体系](#4-subagent-子代理体系) - [4.1 Subagent 是什么](#41-subagent-是什么) - [4.2 快速安装](#42-快速安装) - [4.3 /agents 交互式创建(从零搭建)](#43-agents-交互式创建从零搭建) - [4.4 代理目录总览](#44-代理目录总览) - [4.5 并行调用多个专家](#45-并行调用多个专家) - [4.6 故障排查](#46-故障排查) - [5. 总结](#5-总结) - [6. 参考资料](#6-参考资料) - [下一步学习](#下一步学习) --- ## 1. 前言 学完 Commands,你已经能把重复提示词压缩成一个词。 但 Claude 本身有能力边界——它不能直接操作数据库、不能搜网页、不能推代码到 GitHub。 **MCP 和 Hooks 就是突破这个边界的两把钥匙:** | 工具 | 解决什么问题 | 类比 | |------|------------|------| | MCP | 让 Claude 调用外部服务(数据库/GitHub/搜索) | 给 Claude 装"插件" | | Hooks | 让 Claude 在操作前后自动触发脚本(lint/测试/通知) | 给 Claude 设"自动触发器" | --- ## 2. MCP 集成 ### 2.1 MCP 是什么 MCP(Model Context Protocol)是 AI 连接外部工具的**"USB 标准"**——统一协议,任何 MCP Server 都能即插即用地被 Claude 调用。 | 对比 | 没有 MCP | 有 MCP | |------|---------|--------| | 对接成本 | 每个工具单独开发 | 一次开发,处处复用 | | 兼容性 | 各平台不通用 | 开放标准,跨平台 | | 生态 | 各自为战 | 社区共建,直接拿来用 | ### 2.2 配置方式 **方式一:配置文件(推荐团队)** 在项目根目录创建 `.mcp.json`: ```json { "mcpServers": { "服务器名": { "command": "npx", "args": ["-y", "包名", "附加参数"], "env": { "API_KEY": "${环境变量名}" } } } } ``` > `${GITHUB_TOKEN}` 会自动读取同名环境变量,**不要把密钥硬写进文件**。 **方式二:CLI 快速添加(个人测试)** ```bash claude mcp add <具体mcp地址> # 添加 claude mcp list # 查看所有 claude mcp remove <名称> # 删除 ``` ``` claude mcp add filesystem -s user -- npx -y @modelcontextprotocol/server-filesystem D:/Desktop D:/develop ```  ``` claude mcp list 或者/mcp ```  ``` claude mcp remove filesystem -s user ```  删除成功:  **作用域指定:** ```bash claude mcp add --scope project <名称> ... # 项目级(默认) claude mcp add --scope user <名称> ... # 用户级(全局) ``` ### 2.3 常用服务器速查 | 分类 | 服务器 | 包名 | 需 API Key | 推荐 | |------|--------|------|-----------|------| | 文件 | filesystem | `@modelcontextprotocol/server-filesystem` | ❌ | ⭐⭐⭐ | | 文件 | memory | `@modelcontextprotocol/server-memory` | ❌ | ⭐⭐ | | 数据库 | sqlite | `@modelcontextprotocol/server-sqlite` | ❌ | ⭐⭐⭐ | | 数据库 | postgres | `@modelcontextprotocol/server-postgres` | ❌(需连接串) | ⭐⭐ | | 开发 | github | `@modelcontextprotocol/server-github` | ✅ | ⭐⭐⭐ | | 开发 | git | `@modelcontextprotocol/server-git` | ❌ | ⭐⭐ | | 搜索 | brave-search | `@modelcontextprotocol/server-brave-search` | ✅ | ⭐⭐⭐ | | 搜索 | fetch | `@modelcontextprotocol/server-fetch` | ❌ | ⭐⭐ | | 知识 | context7 | `@upstash/context7-mcp` | ❌ | ⭐⭐⭐ | | 自动化 | puppeteer | `@modelcontextprotocol/server-puppeteer` | ❌ | ⭐⭐ | **典型配置示例(Filesystem + GitHub):** ```json { "mcpServers": { "filesystem": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."], "env": {} }, "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" } } } } ``` 启动 `claude` 时看到 `✓ filesystem` `✓ github` 即配置成功,C盘目录下 用户名下的 .claude.json文件。   ### 2.4 三大作用域 | 作用域 | 存储位置 | 优先级 | 适用场景 | |--------|---------|--------|---------| | Local | `~/.claude.json`(项目条目) | 最高 | 含 API Key,绝不提交 Git | | Project | 项目根 `.mcp.json` | 中 | 团队共享,版本控制 | | User | `~/.claude.json`(全局) | 最低 | 个人通用工具,跨项目可用 | > **选择原则**:含密钥 → Local;团队必需 → Project;个人常用 → User。 ### 2.5 在 Commands 中调用 MCP 第三章的 `allowed-tools` 直接支持 MCP 工具,格式:`mcp__服务器名__工具名` ```markdown --- allowed-tools: - mcp__github__create_issue - mcp__filesystem__read_file - mcp__brave-search__brave_web_search --- ``` 这样 Commands 就能直接驱动 GitHub、文件系统、搜索等外部服务,形成完整自动化工作流。  ### 2.6 故障排查 | 现象 | 原因 | 解决方法 | |------|------|---------| | 启动时看不到 MCP 服务器 | 配置文件路径或格式错误 | 确认 `.mcp.json` 在项目根目录,JSON 格式正确 | | 服务器启动失败 | Node.js 版本过低 | 升级到 v18+ | | `${VAR}` 环境变量未生效 | 变量未导出或终端未重启 | `echo $VAR` 验证,重启终端 | | 工具调用被拒 | `allowed-tools` 未声明 | 在 Commands frontmatter 加入工具名 | | npx 下载超时 | 网络问题 | `npm config set registry https://registry.npmmirror.com` | --- ## 3. Hooks 系统 ### 3.1 Hooks 是什么 Hooks 是**事件驱动的自动化触发器**——Claude 执行特定操作时,自动运行你预设的 shell 脚本。 比如可以在ClaudeCode 写完代码后,自动执行某些命令的格式化,以便让最终的代码更加美观,更加符合我们的需求 | Hook 时机 | 触发事件 | 典型用途 | |-----------|---------|---------| | `PreToolUse` | Claude 调用工具**之前** | 安全拦截危险命令、参数校验 | | `PostToolUse` | Claude 调用工具**之后** | 自动 lint / 测试 / 格式化 | | PostToolUseFailure | Claude 调用工具失败后 | 错误日志记录、重试机制触发、失败原因分析 | | `Notification` | Claude 发送通知时 | 桌面弹窗、音效提醒 | | `Stop` | Claude 完成一轮回复后 | 自动保存、发送完成通知 | > 类比:MCP 是给 Claude 装插件,Hooks 是给 Claude 装"自动触发器"——它做完某件事就自动帮你跑一段脚本。  ### 3.2 配置方式 Hooks 写在 `settings.json` 的 `hooks` 字段,支持两个位置: | 位置 | 路径 | 生效范围 | |------|------|---------| | 项目级 | `.claude/settings.json` | 仅当前项目,可提交 Git | | 用户级 | `~/.claude/settings.json` | 所有项目 | **配置格式:** ```json { "hooks": { "事件名": [ { "matcher": "工具名正则", "hooks": [ { "type": "command", "command": "要执行的 shell 命令" } ] } ] } } ``` **`matcher` 正则匹配规则详解**: `matcher` 用于精确控制 Hook 触发的工具范围,支持正则表达式: | 模式 | 含义 | 示例 | |------|------|------| | 空字符串 `""` | 匹配所有工具 | 任何工具操作都触发 | | 精确匹配 | 工具名相同 | `Write` 仅匹配 Write 工具 | | 竖线 `\|` | 逻辑 OR,多个工具 | `Write\|Edit` 同时匹配两个工具 | | `.` | 匹配任意单字符 | `Wr.te` 匹配 Write | | `^` | 字符串开始 | `^Bash$` 精确匹配 Bash,避免误匹配 | | `$` | 字符串末尾 | `Tool$` 匹配以 Tool 结尾的工具 | **常见 matcher 模式示例**: ```json { "hooks": { "PostToolUse": [ { "matcher": "", "hooks": [{"type": "command", "command": "echo '任何工具都会触发'"}] }, { "matcher": "Write", "hooks": [{"type": "command", "command": "echo '仅 Write 工具触发'"}] }, { "matcher": "^Bash$", "hooks": [{"type": "command", "command": "echo '精确匹配 Bash,避免 BashScript 误触发'"}] }, { "matcher": "Write|Edit", "hooks": [{"type": "command", "command": "prettier --write $CLAUDE_FILE_PATHS"}] }, { "matcher": "Read.*", "hooks": [{"type": "command", "command": "echo 'Read 开头的工具'"}] } ] } } ``` **最佳实践**: - 使用 `^精确匹配$` 避免正则范围过宽导致的意外触发 - 在 PreToolUse 中用严格正则防御危险命令 - PostToolUse 可用较宽松的正则(如 `Write|Edit`) ### 3.3 实战示例 **写完文件自动格式化(最常用)**提取路径 + 格式化文件 ```json { "hooks": { "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "jq -r '.tool_input.file_path' | xargs prettier --write" } ] } ] } } ``` ### 3.4 可用环境变量 Hook 脚本执行时,Claude 会注入以下变量: | 变量 | 含义 | 示例值 | |------|------|--------| | `$CLAUDE_TOOL_NAME` | 当前调用的工具名 | `Write` | | `$CLAUDE_FILE_PATHS` | 被操作的文件路径(空格分隔) | `src/app.ts src/utils.ts` | | `$CLAUDE_PROJECT_DIR` | 项目根目录 | `/Users/me/project` | | `$CLAUDE_TOOL_INPUT` | 工具的完整输入(JSON) | `{"command":"ls -la"}` | ### 3.5 常用场景速查 | 场景 | 事件 | 工具 matcher | 脚本示意 | |------|------|-------------|---------| | 保存后自动 prettier | PostToolUse | `Write\|Edit` | `prettier --write $CLAUDE_FILE_PATHS` | | 保存后自动 ESLint | PostToolUse | `Write\|Edit` | `eslint --fix $CLAUDE_FILE_PATHS` | | 写完跑单元测试 | PostToolUse | `Write` | `npm test -- --passWithNoTests` | | 记录所有 Bash 命令 | PreToolUse | `Bash` | `echo $CLAUDE_TOOL_INPUT >> audit.log` | | 完成后播放音效 | Stop | (空) | `afplay /System/Library/Sounds/Glass.aiff` | | 完成后桌面通知 | Stop | (空) | `osascript -e 'display notification...'` | > **注意**:`PreToolUse` Hook 退出码为 `2` 时会**阻止**该工具调用,其余退出码不会阻断执行。 ### 3.6 故障排查 | 现象 | 原因 | 解决方法 | |------|------|---------| | Hook 没有触发 | settings.json 路径或格式错误 | 确认文件位置,JSON 格式用在线工具验证 | | 脚本报"命令未找到" | 脚本用了 shell 别名或 PATH 不完整 | 写完整路径,如 `/usr/local/bin/prettier` | | PreToolUse 误拦截 | matcher 正则范围太宽 | 精确化正则,如 `^Bash$` 而非 `Bash` | | 文件路径变量为空 | 工具不涉及文件操作 | 改用 `$CLAUDE_TOOL_INPUT` 获取完整输入 | --- ## 4. Subagent 子代理体系 ### 4.1 Subagent 是什么 学完 MCP 和 Hooks,你已经能扩展 Claude 的能力边界——让它能调用外部服务、自动运行脚本。 但还有个更深的问题——**一个 Claude 怎么同时精通 100+ 个专业领域?** **Subagent(子代理)**就是答案:Claude Code 通过 Task 工具启动的**专业化 AI 代理**,每个都是该领域的专家。 | 工具 | 解决什么问题 | 类比 | |------|------------|------| | MCP | 让 Claude 调用外部服务 | 给 Claude 装"插件" | | Hooks | 让 Claude 自动运行脚本 | 给 Claude 设"自动触发器" | | **Subagent** | **让 Claude 调动专家团队** | **给 Claude 配"顾问团队"** | #### Subagent 的核心优势 **并行协作**:同时启动多个专家代理,处理不同任务,效率翻倍。 ``` 单个 Claude 顺序处理: 代码审查 → 性能优化 → 安全审计 → 文档生成(耗时) 多个 Subagent 并行处理: code-reviewer ─────┐ performance-pro ────┼──→ 同时并行,结果聚合(快速) security-auditor ───┤ doc-writer ────────┘ ``` **领域专业化**:每个 Subagent 都是特定领域的深度专家,质量远高于通用 Claude。 **按需扩展**:100+ 专家代理库,你只需说一句话,Claude 自动调用最合适的专家。 > **⚠️ 重要提醒**:使用多 Agent 并行调用的 token 消耗量巨大。每启动一个子代理都会消耗独立的上下文窗口。**建议按需调用,不要一次性启动太多代理。** --- ### 4.2 快速安装 #### 方法一:交互式脚本安装(推荐) ```bash claude plugin marketplace add VoltAgent/awesome-claude-code-subagents ``` ``` claude plugin install <plugin-name> ``` 或者/plugin Installed界面自行安装 #### 方法二:手动安装(完全控制) 1. **确定存放路径**: - 全局可用:`~/.claude/agents/` - 项目专用:`.claude/agents/`(项目根目录) 2. **复制文件**:从仓库的 `categories/` 文件夹中找到你需要的 `.md` 代理定义文件,复制到上述路径即可。 **验证安装**: ```bash # 查看已启用的子代理 claude /agents ``` ### 故障排查与相关截图: 如果是网络问题需要检查自己的代理软件(🪜) 可能安装过程需要代理软件,看自己的个人配置(自己的代理接口)或者手动安装 ``` $env:HTTP_PROXY = "http://127.0.0.1:7897" $env:HTTPS_PROXY = "http://127.0.0.1:7897" ```    --- ### 4.3 /agents 交互式创建(从零搭建) 除了安装现成的代理库,你还可以用 `/agents` 命令**从零创建自己的 Subagent**——整个过程全程交互式引导,不需要手写任何配置文件。 #### 第一步:输入 `/agents` 在 Claude Code 对话中输入 `/agents`,你会看到当前已有的代理列表,底部有 **Create new agent** 选项: >  #### 第二步:选择存放位置 | 选项 | 说明 | 适合场景 | |------|------|---------| | `Project (.claude/agents/)` | 仅当前项目可用 | 项目专用代理 | | `Personal (~/.claude/agents/)` | 全局可用 | 通用代理,跨项目复用 | >  #### 第三步:选择创建方式 | 方式 | 说明 | 适合 | |------|------|------| | **Generate with Claude(推荐)** | 你只需描述需求,Claude 自动生成完整配置 | 新手首选 | | Manual configuration | 手动填写每个字段 | 需要精确控制的场景 | >  #### 第四步:描述代理职责 用自然语言描述这个代理应该做什么、什么时候被调用。**写得越详细,生成效果越好:** ``` 这是一个用于代码审核的 SubAgent。在用户要求"代码审核"的时候调用它。 ``` >  #### 第五步:等待 Claude 生成 Claude 会根据你的描述自动生成代理的名称、系统提示词、工具选择等配置: >  #### 第六步:选择工具权限 选择这个代理可以使用哪些工具。根据代理职责按需勾选: | 工具类别 | 包含工具 | 说明 | |---------|---------|------| | Read-only tools | Glob、Grep、Read 等 | 只读,安全无副作用 | | Edit tools | Edit、Write 等 | 可修改文件 | | Execution tools | Bash 等 | 可执行命令 | | MCP tools | 已配置的 MCP 服务 | 调用外部服务 | >  #### 第七步:选择模型 | 模型 | 特点 | 建议场景 | |------|------|---------| | **Sonnet** | 性能均衡,速度与质量兼顾 | **日常代理首选** | | Opus | 最强推理能力,成本最高 | 复杂架构 / 深度分析 | | Haiku | 速度快、成本低 | 简单任务 / 批量处理 | | Inherit from parent | 继承主会话模型 | 跟随当前设置 | >  #### 第八步:选择颜色标识 给代理设置一个背景色,方便在会话中一眼识别它的输出(比如代码审核用绿色、安全审计用红色)。 >  #### 第九步:配置记忆 | 选项 | 说明 | 建议 | |------|------|------| | **Enable (.claude/agent-memory/)** | 项目级记忆,代理会记住历史上下文 | **推荐** | | None | 无持久记忆 | 一次性任务 | | User scope | 全局记忆(`~/.claude/agent-memory/`) | 跨项目通用代理 | | Local scope | 本地记忆,不提交 Git | 含敏感信息的场景 | >  #### 第十步:确认保存 最终会展示代理的完整配置,确认无误后按 `s` 或 `Enter` 保存: ``` Name: code-reviewer Location: .claude/agents/code-reviewer.md Tools: Glob, Grep, Read, WebFetch, WebSearch Model: Sonnet Memory: Project (.claude/agent-memory/) Description: Use this agent when the user explicitly requests a '代码审核' (code review), '审查代码', '检查代码'... System prompt: 你是一位资深代码审核专家,拥有超过15年的软件工程经验, 精通多种编程语言和架构模式... ``` >   #### 实战调用 保存完成后,直接在对话里说 **"给我做下代码审核"**——Claude 会自动识别并调用刚刚创建的 `code-reviewer` 代理。 你会看到**绿色标识**,表示 Subagent 正在独立执行审核任务: >  审核完成后,代理会返回完整的审核报告,收工: >  > **凯神提醒**:`/agents` 交互式创建是目前最推荐的方式——不需要手写 `.md` 文件,Claude 帮你自动生成完整配置(名称、描述、系统提示词、工具权限全都有),新手 2 分钟就能搞定一个专属代理。 --- ### 4.4 代理目录总览 VoltAgent 提供的 10 大类专家代理(100+ 代理),按需安装: #### 1️⃣ 核心开发 (Core Development) api-designer / backend-developer / electron-pro / frontend-developer / fullstack-developer / graphql-architect / microservices-architect / mobile-developer / ui-designer / websocket-engineer / wordpress-master #### 2️⃣ 语言专家 (Language Specialists) typescript-pro / python-pro / rust-engineer / golang-pro / java-architect / javascript-pro / react-expert / vue-expert / angular-architect / nextjs-developer / swift-expert / kotlin-expert / cpp-pro / csharp-developer / php-pro / sql-pro / django-developer / laravel-expert / rails-expert / spring-boot-engineer / flutter-expert / elixir-expert / dotnet-core-expert / powershell-pro #### 3️⃣ 基础设施 (Infrastructure) cloud-architect / devops-engineer / kubernetes-expert / terraform-engineer / database-admin / sre / deployment-engineer / azure-infra-engineer / network-engineer / platform-engineer / security-engineer / incident-responder / windows-infra-admin #### 4️⃣ 质量与安全 (Quality & Security) code-reviewer / security-auditor / qa-automation-engineer / performance-engineer / debugging-expert / error-detective / penetration-tester / architecture-reviewer / accessibility-tester / chaos-engineer / compliance-auditor / testing-automation-expert #### 5️⃣ 数据与人工智能 (Data & AI) ai-engineer / llm-architect / ml-engineer / data-engineer / data-scientist / data-analyst / database-optimizer / postgres-pro / mlops-engineer / nlp-engineer / prompt-engineer #### 6️⃣ 开发者体验 (Developer Experience) refactoring-expert / documentation-engineer / git-workflow-manager / legacy-code-modernizer / mcp-developer / build-engineer / cli-developer / dependency-manager / dx-optimizer / tooling-engineer #### 7️⃣ 专业领域 (Specialized Domains) blockchain-developer / game-developer / fintech-engineer / iot-engineer / embedded-systems-engineer / api-documenter / seo-specialist / mobile-app-developer / m365-admin #### 8️⃣ 业务与产品 (Business & Product) product-manager / business-analyst / project-manager / scrum-master / technical-writer / ux-researcher / customer-success-manager / sales-engineer / legal-advisor / content-marketing-specialist #### 9️⃣ 元数据与编排 (Meta & Orchestration) multi-agent-coordinator / workflow-orchestrator / agent-organizer / agent-installer / context-manager / task-dispatcher / error-coordinator / performance-monitor / knowledge-synthesizer / it-ops-orchestrator **推荐新手起点**: - `code-reviewer`(代码审查) - `debugging-expert`(调试) - `refactoring-expert`(重构) - `documentation-engineer`(文档) --- ### 4.5 并行调用多个专家 #### 自动识别调用 当你的描述符合某个子代理的专业领域时,Claude 会**自动调用**对应的专家: ``` 你:这段代码有性能问题 Claude:[自动识别] 调用 performance-engineer 代理... 基于性能优化的最佳实践,我来分析瓶颈... 你:帮我检查代码质量 Claude:[自动识别] 调用 code-reviewer 代理... 我注意到以下代码质量问题... ``` #### 显式调用多个专家 对于复杂任务,**显式并行调用**多个专家: ``` 并行调用各个专家查看/解决 XXXX 问题 需要: - code-reviewer 检查代码质量 - performance-engineer 分析性能 - security-auditor 审计安全漏洞 ``` Claude 会同时启动 3 个子代理,返回综合报告。 #### 常见场景示例 | 场景 | 调用代理 | 效果 | |------|---------|------| | **代码审查** | code-reviewer | 快速找出质量问题 | | **性能优化** | performance-engineer + database-optimizer | 全面分析瓶颈 | | **安全审计** | security-auditor + penetration-tester | 深度安全检查 | | **新项目启动** | architecture-reviewer + project-manager + tech-writer | 快速生成架构文档 | | **重构遗留代码** | legacy-code-modernizer + refactoring-expert | 系统现代化 | | **API 设计** | api-designer + api-documenter | 完整的设计方案 | --- ### 4.6 故障排查 | 现象 | 原因 | 解决方法 | |------|------|---------| | `/agents` 看不到任何代理 | 安装路径错误或仓库未克隆 | 确认代理文件在 `~/.claude/agents/` 或 `.claude/agents/` | | 代理安装成功但不被调用 | Subagent 定义文件格式错误 | 检查 `.md` 文件的 frontmatter 格式 | | 并行调用代理导致超时 | 启动的代理太多,超过 token 限制 | 减少并行代理数量,改为分批调用 | | 代理返回结果不符合预期 | 代理描述匹配度不高 | 在调用时更明确地说明需求,或显式指定代理 | | Token 消耗过多 | 每个子代理都有独立上下文 | 按需调用,避免一次性启动太多代理 | --- ## 5. 总结 本章你已掌握: 1. **MCP 本质**:AI 连接外部工具的 USB 标准,`.mcp.json` 配置,`npx` 启动 2. **常用服务器**:filesystem / github / sqlite / context7 等 10 个主流 Server 速查 3. **三大作用域**:Local(私密)> Project(团队)> User(全局),按需选择 4. **Commands 联动**:`mcp__服务器名__工具名` 在 Commands 中直接调用 MCP 5. **Hooks 本质**:事件驱动的 shell 脚本,PreToolUse / PostToolUse / Stop 三大时机 6. **Hooks 实战**:自动格式化、安全日志、完成通知,一次配置永久生效 7. **Subagent 本质**:Claude 调动的专家团队,100+ 代理库,按需并行协作 8. **/agents 创建**:交互式引导从零搭建专属代理,2 分钟完成,不需手写配置 9. **Subagent 实战**:快速安装、自动识别、显式并行调用,提升开发效率 10 倍 --- ## 6. 参考资料 ### MCP 相关资源 - [Claude Code 官方 MCP 文档](https://code.claude.com/docs/zh-CN/mcp) - [知乎深度讲解:MCP 协议与应用实战](https://zhuanlan.zhihu.com/p/1963592231739957552) - [CSDN 教程:Claude Code MCP 集成完整指南](https://blog.csdn.net/m0_74837192/article/details/150616899) ### Hooks 相关资源 - [Claude Code 官方 Hooks 文档](https://code.claude.com/docs/zh-CN/hooks) - [知乎深度讲解:Claude Hooks 自动化工作流完全指南](https://zhuanlan.zhihu.com/p/1950634615065809103) - [CSDN 教程:Claude Hooks 实战与最佳实践](https://blog.csdn.net/qq_20042935/article/details/156891507) ### Subagent 相关资源 - [Claude Code 官方 Subagent 文档](https://code.claude.com/docs/zh-CN/sub-agents) - [CSDN 深度教程:Subagent 子代理完整指南](https://blog.csdn.net/qq_20042935/article/details/156897940) - [ClaudeCN 中文文档:Subagent 高级用法](https://claudecn.com/docs/claude-code/advanced/subagents/) --- ## 下一步学习 | 章节 | 主题 | 你将学到 | |------|------|---------| | 第05章 | Skills 定制——给Claude装上专属能力包 | Skill 开发、自动激活机制、复杂提示词组织 | | 第06章 | CLAUDE.md 完整配置指南 | 项目规范管理、长期记忆维护、团队协作 | | 第07章 | Plugins 生态完整指南 | 插件安装、配置与自定义开发 | --- > **作者简介**:一名正在实习的Java开发工程师,热爱技术分享,专注于性能优化和系统架构设计。 觉得有用的话可以点点赞 (/ω\),支持一下。 如果愿意的话关注一下。会对你有更多的帮助。 每周都会不定时更新哦 >人< 。 > **版权声明**:本文为原创技术文章,转载请注明出处。
双非大三,焦虑是做传统 Java 项目还是直接上手 AI 教程?
鱼皮老师你好 ### 学习目标 目前大三下,希望在暑假找到实习 ### 个人情况 我是双非一本,已经是大三下了,计科专业。目前学完了javaSE、javaweb、SSM和Redis的部分内容。 目前感觉时间很紧张,而且觉得自己学得很少,而且不是很熟练 ### 学习内容 只学了后端开发的相关知识,对前端知道的很少,属于是看代码都不是很明白 对于docker容器和AI编程工具都不了解 ### 学习问题 我现在学完了SpringBoot和Redis的部分知识,所以想找个项目练练手,但是不知道应该找什么样的项目。 因为现在AI很火,而我之前学的视频教程都没有接入AI,但是这学期的实践课老师要求使用若依框架和trae,codeBuddy这些编程工具还有SpringAI这些,我对这些都完全不了解,感觉有些闭门造车。我也希望结合AI帮助提升开发效率。 所以我想知道我现在应该选择什么项目学习,还是说应该先找教程学习如何使用这些编程工具和AI,再考虑做项目。鱼皮老师的项目资源太多了,我不知道应该选择传统的、完全用不到AI的项目还是说找一个结合AI快速开发的项目 另外我想知道我现在需要刷力扣的算法题吗,我对算法这方面的知识也很薄弱。 学完项目之后我不清楚是还需要继续提升,还是说可以去面试了。 我想找一个比较全面的项目,可以学习docker等相关知识,我对部署不太了解。 ### 已有尝试 搜了很多项目资源,但是很迷茫,不知道应该决定选什么样的项目,以及是否需要刷力扣题。 ### 期望帮助 我感觉时间很紧张,而且很迷茫,觉得学的完全不够,希望鱼皮老师告诉我应该选择什么项目,以及之后该怎么走 ### 相关资料 提供与你的学习问题相关的资料或文档链接。
【简历笔记,持续更新】针对代码生成平台,2026年分享一下我的Java+MCP/Skill+OpenClaw项目,供大家学习。
> 仓库地址:孩子最近在找实习,整焦虑了,求点个star,谢谢了。 > * MCP/Skill 服务端:https://github.com/itxaiohanglover/mcp-codestyle-server > * 核心模板规范:https://github.com/itxaiohanglover/codestyle > * 模板仓库管理:https://github.com/itxaiohanglover/codestyle-repository > * 项目初始化Skill: https://github.com/itxaiohanglover/project-start-skill # 一、前言 做开发的同学应该都懂:AI 编程工具用得好是提效神器,用不好全是坑 —— 这也是我从零到一打造 Codestyle 系列工具的初衷。 最初我们是实验室团队也跟风用 Claude、Cursor 这类工具,但越用越发现问题: ✅ 成本坑:Claude 按调用量收费,团队大规模用下来每月成本居高不下,想降本却没替代方案; ✅ 效果坑:某次核心业务代码生成时,模型输出质量极差,不仅没提效还返工,关键是这次失败的调用链路没法沉淀,既没法优化后续使用,也没法用来微调团队模型; ✅ 效率坑:同样用 AI 写代码,有人 3 次迭代就跑通,有人试 10 次还卡壳,核心差距不是技术能力,而是有没有复用过往的成功经验 —— 但这些经验散在各人手里,没法共享。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/zkNAa9rPc8a8Hvov.webp" alt="image.png"></p> 通过调研以及深度体验了国产IDE和国外IDE后,我得出了一个结论:把 AI 编程的 “隐性经验” 变成 “显性资产”,并通过技术手段无缝融入开发流程: 1. 沉淀资产:把 “框架最佳实践”“常见避坑指南”(比如不同业务的缓存优化策略)做成可复用的 Codestyle 模板; 2. 智能召回:通过 RAG 检索,编码时自动匹配召回相关经验,不用再重复踩坑; 3. 无缝集成:基于 MCP 协议 / Skill 把能力接入 IDE,告别切换工具的割裂感。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/Y2oEEWPEE3dUacVd.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/r8TIlYmzmKVaYWjk.webp" alt="image.png"></p> 为了落地这个思路,我打磨了三个核心仓库(也是整个体系的骨架):【其实这里看着和Skill架构特别像了,确实是,但我们这个idea是在2025年8月提出的,后面逐步演化成这样。】 * **codestyle**:核心层,沉淀多场景可定制的代码规范 / 模板(比如不同业务的缓存优化模板),借鉴 Maven 坐标体系设计 meta.json 索引,让模板管理更规范; * **mcp-codestyle-server**:服务化核心,支持本地 / 远程双模式检索(Lucene 本地缓存 + Open API 远程调用),还做了二阶段召回策略(轻量预览→详细加载),兼顾速度和体验; * **codestyle-repository**:模板仓库化管理,实现版本管控、权限管理,让经验迭代有迹可循。 这里我贴一个架构草图: ``` ┌─────────────────┐ │ IDE + MCP Skill │ ← 对接GLM/Trae(替代Claude、Cursor) └────────┬────────┘ │ STDIO ┌────────▼────────┐ │ MCP Skill │ ← Local Lucene Cache(轻量检索) └────────┬────────┘ │ REST API ┌────────▼────────┐ │ Admin │ ← MySQL + Workflow Engine(经验/模板管理) └─────────────────┘ ``` 目前个人使用的效果,明显取得了很多进步,至少现在可以让AI直接拿一个Ruo-YI、LightRAG、Continew直接生成全套可商用的前后端代码,直接上线。 ✅ 成本降了:用 GLM/Trae 替代 Claude,每月 AI 调用成本直接砍半; ✅ 效果稳了:失败案例沉淀成模板 / 经验,RAG 检索让 GLM/Trae 输出更精准,波动率降低 60%; ✅ 效率齐了:能力强的同学的经验变成可复用模板,新人 / 效率低的同学直接调用,不用重复试错; ✅ 聚焦核心:开发者不用再纠结 “缓存策略怎么写” 这类机械工作,而是聚焦 “选什么策略适配业务”,把精力放在核心设计上。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/aV20CtVgSRRGUIOU.webp" alt="image.png"></p> 这里补充一个,使用NanoBunana生成的架构图,方便大家理解: <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/2XXKbanWmhjJLvyj.webp" alt="image.png"></p> 下面我分享一些相关的设计心得,也欢迎大佬们一块来优化这个Skill。 # 二、检索设计 定位:为 AI 代理(如 Claude、Cursor)提供代码模板的智能搜索和获取能力。 检索流程: ``` 用户输入 "CRUD" ↓ CodestyleService.codestyleSearch() ↓ ┌─────────────────────────────────────┐ │ 判断:remote.enabled? │ └─────────────────────────────────────┘ ↓ true ↓ false 远程检索模式 本地检索模式 ↓ ↓ TemplateService LuceneIndexService .searchFromRemote() .fetchLocalMetaConfig() ↓ ↓ CodestyleClient Lucene 全文检索 .searchFromRemote() (SmartChineseAnalyzer) ↓ ↓ Open API 签名认证 本地 meta.json 解析 (MD5 + TreeMap 排序) ↓ ↓ 返回 SearchResult 列表 返回 RemoteSearchResult ↓ ↓ PromptService 格式化 下载模板到本地 ↓ ↓ 返回目录树 + 描述 返回目录树 + 描述 └─────────────────────────────┘ ``` 模板获取:【为什么这样设计,我在8月测试demo的时候,发现Trae内置的模型并不能实现并行调用MCP Tool,后来从11月那会,突然有一天,发现它意识到Codestyle MCP Tool是可以直接调用xx次,然后进行进一步思考,可以看到Code Agent对Tool的何时调用,如何调用已经有了更好的意识。】 ``` 用户输入完整路径 "continew/CRUD/1.0.0/src/main/java/Controller.ftl" ↓ CodestyleService.getTemplateByPath() ↓ TemplateService.searchByPath() ↓ CodestyleClient.searchByPath() ↓ 解析路径 → 定位 meta.json → 查找匹配 ↓ 读取模板文件内容 ↓ PromptService.buildPrompt() ↓ 返回:文件名 + 变量说明 + 模板代码 ``` 二阶段召回策略:【没想到和后来的Skill的渐进式检索理念一致。】 ``` 阶段一:轻量预览 ├─ 查询 meta.json 索引 ├─ 返回 description 列表(轻量) └─ 用户在 IDE 中选择目标 阶段二:详细加载 ├─ 异步同步缺失文件到本地 └─ 返回完整模板内容 ``` meta.json 索引设计:【借鉴 Maven 坐标体系,集中管理元信息】 ``` { "groupId": "RuoYI", "artifactId": "CRUD", "version": "1.0", "files": [{ "filePath": "src/main/java/controller", "filename": "Controller.java.ftl", "description": "CRUD 控制器模板", "sha256": "722f185c...", "inputVariables": [ { "variableName": "packageName", "variableType": "String", "variableComment": "项目根包名", "example": "com.air.order" } ] }] } ``` # 三、Skill化 整体目录设计: ``` codestyle/ ├── SKILL.md # Skill 定义(YAML frontmatter + 工作流) ├── scripts/ │ ├── codestyle # CLI 包装脚本(Linux/macOS) │ ├── codestyle.bat # CLI 包装脚本(Windows) │ ├── install.sh # JAR 安装脚本(Linux/macOS) │ ├── install.bat # JAR 安装脚本(Windows) │ ├── update.sh # 更新脚本(Linux/macOS) │ ├── update.bat # 更新脚本(Windows) │ ├── init-repository.sh # 仓库初始化(Linux/macOS) │ ├── init-repository.bat # 仓库初始化(Windows) │ ├── cfg.json # 默认配置 │ ├── .gitignore # Git 忽略规则 │ └── codestyle-server.jar # JAR 文件(自动下载) └── references/ ├── config.md # 配置文档 └── template-syntax.md # 模板语法文档 ___________ name: codestyle description: Code template search and generation tool. Auto-initializes on first use with minimal user interaction. ``` 接入终端Code Agent效果【Trae CLI目前还处于alpha阶段,流畅度不太够,最近重心还在找实习(27届),还是一名学生,后期有余力,在加入到Cli建设中。】 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/gmWUTnHsP4iVFygJ.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/AJosgsczf2kI390B.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/DKGgG6oUsq9oDUdB.webp" alt="image.png"></p> # 四、团队化管理 这一块对于开发者就比较常见,Sass管理 + (ES + Milvus混合检索) + Open API签名调用,就不再赘述了。 大概就是模板的基本管理: <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/krqhJ7mOmjTd7zvR.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/632xBoCZzxIIPZna.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/jliHMsozLx2d4U5N.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/N0Yk0sTfbugRjEu1.webp" alt="image.png"></p> 检索模块: ``` ┌─────────────────────────────────────────────────────────┐ │ Controller 层 │ │ SearchController (REST API) │ └─────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────┐ │ Service 层 │ │ ┌──────────────────────────────────────────────────┐ │ │ │ SearchService (检索编排服务) │ │ │ │ - 单源检索 │ │ │ │ - 混合检索 (RRF 融合) │ │ │ │ - 检索并重排 │ │ │ └──────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────┬──────────────┬──────────────────┐ │ │ │ ES 检索服务 │ Milvus 检索 │ 重排服务 │ │ │ │ ElasticsearchSearchService │ │ │ │ │ MilvusSearchService │ │ │ │ │ │ RerankService │ │ │ └──────────────┴──────────────┴──────────────────┘ │ └─────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────┐ │ Helper 层 │ │ ┌──────────────┬──────────────┬──────────────────┐ │ │ │ 缓存助手 │ 融合算法助手 │ 容错助手 │ │ │ │ CacheHelper │ FusionHelper │ FallbackHelper │ │ │ └──────────────┴──────────────┴──────────────────┘ │ └─────────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────────┐ │ 外部依赖 │ │ ┌──────────────┬──────────────┬──────────────────┐ │ │ │ Elasticsearch│ Milvus │ BGE-Rerank API │ │ │ │ Client │ Client │ HTTP Client │ │ │ └──────────────┴──────────────┴──────────────────┘ │ └─────────────────────────────────────────────────────────┘ ``` 关于生成模块,我觉得 真正的智能体,是不靠「提示词」工作的,当前模型主要依赖于tool agent rl,个人感觉未来会有**workflow agent rl**,大语言模型智能体能不仅动态地自主指挥自己的行动和工具使用,还可以去切换角色及行为模式,故这里本地实现未来的模式,web端作为workflow最佳实践探索。 > 事实证明,发现Web端的深度研究生成Codestyle模板使用率几乎为0,因为正在废弃这个功能,我们发现,使用者更倾向于借助OpenClaw连接上飞书上,走到哪,把灵感文章发给OpenClaw,然后调用Codestyle Skill进行生成模板,放到云仓库中。如果需要共享,则上传到远程仓库,方便其他Agent进行使用,也为未来的Agent Community时代做铺垫。 这里贴上我之前的一版设计: ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ 用户交互层 │ │ │ │ ┌───────────────────────────┐ ┌───────────────────────────┐ │ │ │ AI IDE (本地模式) │ │ Web 平台 (远程模式) │ │ │ │ │ │ │ │ │ │ 纯 Skill.md 驱动 │ │ DeepResearch Agent │ │ │ │ - AI 自行决策 │ │ - 状态图管理 │ │ │ │ - 无状态管理 │ │ - 中断恢复 │ │ │ │ - 轻量快速 │ │ - 可视化进度 │ │ │ │ │ │ │ │ │ │ 适合:简单模板生成 │ │ 适合:复杂深度研究 │ │ │ └───────────────────────────┘ └───────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘ ``` # 五、Codestyle生成 后来我参考Skill-creator的设计,对我的Skill做了一些优化,这里分享一下个人心得: 1. Concise is Key - 保持简洁,只包含 AI 不知道的信息 2. Progressive Disclosure - metadata 始终加载,body 按需加载,references 按需加载 3. **Set Appropriate Degrees of Freedom - 根据任务复杂度设置自由度** 4. 避免深层嵌套 - references 只有一层 5. Examples Pattern - 用例子说明期望的输出格式 Skill目录也进行了升级: ``` codestyle/ ├── SKILL.md # 主入口(决策树) ├── references/ │ ├── config.md # 配置说明 │ ├── generate-workflow.md # 生成工作流(核心·624行) │ ├── search-workflow.md # 检索工作流 │ ├── upload-workflow.md # 上传工作流 │ ├── template-format.md # 模板格式规范 │ └── template-syntax.md # FreeMarker 语法 ├── scripts/ │ ├── codestyle-server.jar # CLI工具(Lucene) │ ├── codestyle.bat / codestyle # 跨平台脚本 │ ├── cfg.json # 配置文件 │ ├── validate_template.py # 验证脚本 │ └── init-*.bat/sh # 辅助脚本 └── examples/ └── crud-controller/ ├── meta.json └── Controller.java.ftl ``` > 我相信,未来大模型当把最佳workflow AGent rl后,那么模型根据场景自动CosPlay角色、性格、剧本将会更好玩,更加智能。事实上,我实测后,我发现最新的Claude模型以及GLM-5,在我的这个设计下,效果很好,但是差一点模型,确实还很难在Workflow来回切换,经常被上下文影响、误导。 对于用户的交互,我这里分享几点设计心得: - 输入识别后询问用户选择 - 检测到冲突时提供多种选项 - 合并操作时展示功能对比 - 最终确认前展示完整预览 对于冲突的处理: - 覆盖:直接替换旧模板 - 升级版本:作为新版本保存 - 重命名:改名保存 - 合并:将新旧模板合并 - 不合并:保留两个独立的模板 - 删除旧模板:删除已有模板,用新模板替代 - 取消:不保存新模板 于是,整个生成流程: 用户输入 → AI识别类型 → AI预处理 → AI分析结构 → AI选择类型 → AI生成模板 → AI去重检测 → 用户确认 → 调用upload存储 > 这里最近我们参考 **[RepoMaster](https://github.com/QuantaAlpha/RepoMaster)** / **[DeerFlow](https://github.com/bytedance/deer-flow)** / **[Repomix](https://github.com/yamadashy/repomix)**等前沿方案,实现了全局语法解析、上下文压缩、开发意图实时跟踪、沙盒编译子验证。因为我们发现,决定Code Agent对一个人类工业界的最佳实践做法进行理解,最重要的是去抽离抽象的设计以及通用解,这一部分,需要不断地去压缩冗余的知识,还需要去实时理解人类意图,去定位人类现实真正需要解决的问题。(近期发现AI提取的Codestyle风格,有时候不符合人类真实开发的场景,也就是无效模板。类似于无效Issue一样。) 随着不断的迭代Codestyle,因为我是做Java开发的,也一直在尝试用AI去解决我的后端开发领域的机械问题。希望能早日解放双手,失业。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/6SDKfLBtCHmRGBTM.webp" alt="image.png"></p> 在后端开发中,我们常常会对某个业务加入中间件优化来适配业务需求,例如缓存优化,此时,框架、技术栈、业务要求的不同,意味着缓存策略不同,我们针对性设计不同的模板,后期可以直接应用。**开发者将不再聚焦于技术策略的机械应用,而在于技术策略的设计与选择。** <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/s1SDq6AURCd7WOjO.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/LIB6MOT5oGuVdyAw.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/K5kYNTUGahfRDzem.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/9LHmDVTv3l5RtOq6.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/dbNcKcHheJSdnL8e.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/rtXJqVHputpcJhnO.webp" alt="image.png"></p> 就在寒假,我最近又加入了新的优化,我们常常会遇到这样一个需求:基于 X 项目/模板 创建 Y 项目,比如, * 「基于 LightRAG 初始化 SuperRAG」(Python) * 「基于 ContiNew Admin 创建 MyCompany Admin」(Java) * 「基于 RuoYi 初始化 myproject」(Java) * 任意「基于 X 创建 Y」的项目初始化请求 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/nTkAhKJAZyoU2uPB.webp" alt="image.png"></p> 大概的效果是这样的: <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/Ls3xhJLFawfXrWeB.webp" alt="image.png"></p> 随着MCP/Skill的使用,我们摒弃了远程的深度研究,针对本地端的Agent进行模板生成中,对于复杂大型项目的理解做了一些AST解析、剪枝相关的优化: > 感谢大佬的PR。 (1)对项目进行深入分析,构建骨架、依赖图、索引。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/g2qTPCdbevt7gLnL.webp" alt="image.png"></p> 示例产物: <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/2FZNncWyStcCyqHa.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/x3lOj2tHsJCiDLcJ.webp" alt="image.png"></p> (2)分析多个关键词,返回项目整体大架构,用于分析项目。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/wDThmI0TNSFkVG9v.webp" alt="image.png"></p> 示例产物: <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/O6XrLJPGx5dWm5Fz.webp" alt="image.png"></p> (3)深入分析项目,多功能返回项目具体细节,用于指导修改。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/CPYTlrHyx1vNMBF1.webp" alt="image.png"></p> 示例产物: <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/lrtDxYZgZ7JthZuc.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/s6qq8cxwvXsoSB5l.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/ajVFDosVlbIkCaZa.webp" alt="image.png"></p> 我们也对优化进行了一个前后比对: 任务: - Task1(项目理解):代码索引精度、输出质量二者相近,但 MCP 用 2 次调用即获得全局视图,探索轮次更少 - Task2(代码修改):MCP 方案在架构、聚类与 LLM 提示词设计上明显优于不使用MCP <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/wLL8o1Q5ru0hgTUD.webp" alt="image.png"></p> <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/tt4QSSULZpBV0SNr.webp" alt="image.png"></p> 可以看到:Task1 token 节省约 23%,Task2 token 节省约 21.4%,总 token 节省约 21.7%。 古法编程可能要读懂代码,然后一个一个替换修改。现在辅助编程呢,可能你需要先生成一份Wiki,或者让AI去读懂,然后再去读懂你的修改的期望需求,然后再一点点替换修改。先不说,一次性能不能替换成功,再者,也不能我得执行很多次步骤才可以。而且在这个模板上开发,我完全不懂这个框架,去改这个框架其实也很头疼的。就比如我们论文的A + B。 这个时候,我们不妨,交给 Project Start Skill,然后初始化,我们在这套风格交给Codestyle-generate途中作为干预,这样生成的风格都是你需要的,你甚至可以把这个过程交给另一个Agent,这个Agent继续理解你的需求,需求的任务将一一映射成Codestyle里面的最佳规范。这样做的第二个好处是,我们发现,在基于AI工具开发时,如果基模很差,Ralph Loop模式是没有用的。不如让 AI Coding 工具先出 Plan,Review,再写代码,再 Review,反复循环,也就是ReAct模式。这个时候呢,我们在规划时,指定尽可能复用Codestyle模板,此时Plan的文档,一方面Token将大大减少,解决方案直接标记使用xxcodestyle即可,另一方面,我们提前保证了Codestyle的质量和规范,我们不再需要考虑它的问题和实践性,我们只需要考虑,这套组合是否合理。是否满足业务需求。 更更重要的是,随着AI能力的提升,对我而言,已经开始了很多认知债,我已经在开发一些我的实际能力无法完成的工作,我只能做的是,告诉AI目标,帮他界定界限,让他帮我做完。而我刚开始的需求往往不是一蹴而就,可能刚开始不对,我会先用头脑风暴进行迭代很多轮,然后让AI Team帮我干活。此时我还会继续一致迭代,突然发现,这个Idea需要修改一下,如果是差模型,如果你的规约开发不够规范,那么你可能出现AI修改效率极低,且反复迭代,陷入循环,哪怕我新开chat,重新让他进行分析总结。 此时Codestyle Plan是一个很好的选择。我再规划是,设计文档是一堆Codestyle的堆砌,一旦出错,AI可以检索到对应Codestyle,进行回滚,顺着线索,它将以很少的次数即可回滚并替换成新的技术栈,这个是我感受最深的。 值得一提的是,我们尝试把这个能力接入到OpenClaw中,实现了随时随地整理自己的Codestyle,可能未来真的,这个我们写的代码,将不再面向人类,而是面向Agent,而这不正是Codestyle嘛? <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/S5hCJzCqnx2rK5VM.webp" alt="image.png"></p> 🔗 开源仓库(欢迎技术交流 / PR),求大家多多Star(这对我的未来工作很重要,简历加分中哈哈哈),大家有任何的需求和问题,都可以评论区提问,我会每天晚上抽时间去优化修改,也会定期分享AI Coding心得: * MCP/Skill 服务端:https://github.com/itxaiohanglover/mcp-codestyle-server * 核心模板规范:https://github.com/itxaiohanglover/codestyle * 模板仓库管理:https://github.com/itxaiohanglover/codestyle-repository * 项目初始化Skill: https://github.com/itxaiohanglover/project-start-skill 🔗 个人Github主页: [itxaiohanglover (artboy)](https://github.com/itxaiohanglover) 最后,以一句话进行收尾:AI不是工具,不是软件,是一个新时代的思维方式,AI也不只是对话助手、第二大脑,而是多角色协同的数字军团,是撬动效率、认知、创造力杠杆的超级杠杆。 <p align="center"><img src="https://pic.code-nav.cn/post_picture/1608999683848404993/VzU6nU9fTkGLKFem.webp" alt="image.png"></p> # 六、QA 下面补充一些,你可能会存在的疑惑。 Q:对于一个团队其实如果用好的模型进行产出有收益,其实不在乎 token,更在乎性能,你这个有什么意义? A:Token消耗的背后,不仅仅是**省 API 账单本身**,背后反映的是三个更关键的问题: 1. **延迟** :上下文越长,模型推理越慢。有了codestyle后,我们可以规划中,借助Codestyle规划,能够减少很多模型输出时间。 2. **稳定性** :模型基于确定的限制,可以有效加快开发效率,对于小团队,更重要的是把优秀的框架用好,然后应用的实际生产中。 3. 实践性:对于大厂的优秀技术,往往缺乏很好的实践生态,这就导致AI 需要每次阅读迭代总结,而且大厂的精力其实更多的聚焦在框架的极限提升,其实很多小厂跟不上,想应用,不仅要让工程师学习,还应该让AI 模型去提前学习。 Q:为什么选择Repomix XML 输出格式? A:LLM 不是先“理解意思”再处理文本,而是先看 **token 与 token 之间的关联**。标签结构把这些关联提示得更明显,所以模型更容易学、也更容易对齐。 Transformer 的核心是 self-attention。它本质上在做:当前 token 应该重点看前后哪些 token?标签结构正好给了它很强的“路标”。 (1)同类信息更容易形成局部聚合,XML中:相邻 token、结构一致的 token、重复出现的模式。 (2)层级关系被显式表达,标签结构天然有树状层级,更让模型建立:局部强相关 + 跨层弱相关 的注意力分布。【找一篇对应的论文作证一下。】 (3)Q · K 点击 更大, 标签的作用就是让很多 token 的表示更稳定。 其次, XML 标签**语义更清晰**、 支持**属性压缩,减少token消耗。** 示例: JSON格式: ```json { "type": "file", "path": "UserController.java", "children": [ { "type": "class", "name": "UserController", "children": [ { "type": "method", "name": "getUser", "visibility": "public", "returnType": "User", "params": [{"name": "id", "type": "Long"}] } ] } ] } ``` XML格式: ``` <file path="UserController.java"> <class name="UserController"> <method name="getUser" visibility="public" returnType="User"> <param name="id" type="Long"/> </method> </class> </file> ```
大三有一定项目经验,有哪些赚钱的途径?
### 问题描述 我是一个大三的学生,我想要钻赚钱养活自己,不想再问家里要钱了,我现在有一定的Java开发的技术,有哪些赚钱方式推荐吗?我一个月只需要1000左右就能生活下来了。 ### 背景信息 我现在会做鱼皮老师的OJ判题项目,还学会了一半的鑫的langchain4j AI的代码生成项目。【我学的慢,比较熟练】
pdd一面
1.自我介绍 2.讲一下项目中的的接口限流,用的哪个算法,介绍一下怎么实现的 3.讲一下TCP的四次挥手 4.有一个A服务调用一个B服务,高并发,你是用http的短连接还是RPC 5.如果用http的短连接,高并发A服务会出现什么问题,其大部分的连接状态会显示什么 6.100亿个整数,乱序排列,找出中位数 7.算法:二叉树的最大宽度,需要自己定义二叉树
第三章:告别重复提示词,自定义Commands让AI秒懂你
# 第三章:告别重复提示词,自定义Commands让AI秒懂你 ## 📖 项目简介 这是由凯神精心打造的一套**完整的 Claude Code 实战教程系列**,从零基础环境安装,到企业级安全合规,全面系统地覆盖 Claude Code 的所有核心功能。 **8个完整章节**,包含:Commands / MCP / Hooks / Skills / Plugins / 团队协作 / 企业安全 等全部内容。 全中文编写,实战导向,每个章节都经过真实场景验证,帮助你快速从零开始,到能独立管理企业级项目。 --- ## 👨🏫 关于作者 **Lenyan 凯神** 一名即将进入社会的应届生开发工程师。在学习 Claude Code 的过程中,深刻体验到它能极大提升开发效率。凯神把自己的学习笔记和实践经验整理成这套教程,希望帮助更多同学和新人开发者快速掌握这个强大工具。 这套教程的初衷很简单:**让大家真正用上 Claude Code,提升编程效率,少走弯路。** 凯神的观点:**做好指挥官,让 AI 为你工作。** --- ## 📚 笔记链接目录 1、[Claude Code 实战指南 - 从零到起飞✨第一章](https://www.codefather.cn/post/2034201556655570946) 2、[Claude Code 实战指南 - 30+命令与快捷键✨第二章](https://www.codefather.cn/post/2034534765402554370) 3、[Claude Code 实战指南 - 自定义Commands让AI秒懂你✨第三章](https://www.codefather.cn/post/2035230703787999233) 4、[Claude Code 实战指南 - MCP、Hooks与Subagent实战✨第四章](https://www.codefather.cn/post/2036020007183351810) 5、[Claude Code 实战指南 - Skills定制给Claude装能力✨第五章](./第05章:Skills定制——给Claude装上专属能力包.md) 6、[Claude Code 实战指南 - Plugins全攻略✨第六章](./第06章:Plugins全攻略——一键安装海量扩展,还能自己造轮子.md) 7、[Claude Code 实战指南 - 企业级协作规范与CICD✨第七章](./第07章:从单兵到团队——企业级协作规范、CICD与安全合规实战.md) 8、[Claude Code 实战指南 - 企业深水区密钥安全✨第八章](./第08章:企业深水区——密钥安全、团队配置与合规审计全攻略.md) --- **立即开始学习 →** 点击上方任意章节开始你的 Claude Code 之旅!🚀 ## 目录 - [1. 前言](#1-前言) - [2. Commands 是什么](#2-commands-是什么) - [2.1 什么是 Slash 命令](#21-什么是-slash-命令) - [2.2 命令的三大类型](#22-命令的三大类型) - [2.3 为什么要学 Commands](#23-为什么要学-commands) - [3. 创建第一个自定义命令](#3-创建第一个自定义命令) - [4. 自定义命令开发进阶](#4-自定义命令开发进阶) - [4.1 命令文件结构](#41-命令文件结构) - [4.2 作用域与优先级](#42-作用域与优先级) - [4.3 frontmatter 配置详解](#43-frontmatter-配置详解) - [4.4 $ARGUMENTS 参数处理](#44-arguments-参数处理) - [4.5 可调用的工具](#45-可调用的工具) - [4.6 条件逻辑设计](#46-条件逻辑设计) - [4.7 实战:完整写作命令](#47-实战完整写作命令) - [5. 命令高级用法](#5-命令高级用法) - [5.1 命令组合与链式调用](#51-命令组合与链式调用) - [5.2 模块化设计](#52-模块化设计) - [5.3 社区命令资源](#53-社区命令资源) - [5.4 故障排查](#54-故障排查) - [6. 内置命令速查](#6-内置命令速查) - [7. 总结](#7-总结) - [8. 参考资料](#8-参考资料) - [下一步学习](#下一步学习) --- # 感言说在前头: 感谢大家的前几期的观看~ 这期和前面后面有所,不同这期没有自己实操的图片,所以是大多数文字和AI的辅助编写~ 抱歉大家可能看不下去,不过随便看看也行,留下👍收藏⭐️是我更新的动力。 因为我觉得Commands,在我们使用中其实就是一段有规则的提示词,重复帮我们做好一件事。 其实网上大多数已经有了许多,还有其他Skills,Plugin,Subagent实现各个领域专属的利器。 除非是自己行业需要或者特殊,也可以通过后面的第4,5,6章节创建属于自己更厉害的用器~ 去征服AI~ ## 1. 前言 学完前两章,你已经能熟练启动 Claude Code、使用各种 Slash 命令和快捷键。 但你可能发现一个痛点:**每次让 Claude 做同类型的事,都要重复一大段要求**。 Commands(自定义命令)就是解决这个问题的——**把重复的提示词压缩成一个词,一次配置,永久生效。** --- ## 2. Commands 是什么 ### 2.1 什么是 Slash 命令 Slash 命令是 Claude Code 的"快捷方式":输入 `/命令名` 触发预设操作。 **工作原理**:输入 `/write AI教程` → 找到 `.claude/commands/write.md` → 读取内容作为提示词 → 把 `AI教程` 赋值给 `$ARGUMENTS` → 执行。 核心等式:**命令名 = 文件名(不含 `.md`)**,**参数 = `$ARGUMENTS`**。 ### 2.2 命令的三大类型 | 类型 | 存放位置 | 生效范围 | |------|---------|---------| | 内置命令 | 程序内部(不可改) | 所有项目 | | 项目级自定义 | `.claude/commands/` | 仅当前项目,可提交 Git 团队共享 | | 用户级自定义 | `~/.claude/commands/` | 所有项目,个人通用工具 | 选择原则:会话管理/诊断用内置;项目专属工作流用项目级;跨项目通用工具用用户级。 ### 2.3 为什么要学 Commands | 对比维度 | 手动输入 | 使用 Commands | |---------|---------|--------------| | 效率 | 每次重复输入 | 一次配置,永久使用 | | 一致性 | 容易遗漏要求 | 标准化执行 | | 可复用 | 困在聊天记录 | 团队共享、版本控制 | --- ## 3. 创建第一个自定义命令 **Step 1:建目录** ```Bash # macOS / Linux mkdir -p .claude/commands # Windows PowerShell New-Item -ItemType Directory -Path ".claude\commands" -Force ``` **Step 2:创建命令文件** `.claude/commands/hello.md` ```markdown # 问候命令 用户想要问候的对象是:$ARGUMENTS 如果没有提供名字,请使用"朋友"作为默认称呼。 请用热情友好的方式问候,并询问今天可以帮助什么。 ``` > 推荐新手直接在 Claude Code 对话框说:"帮我创建文件 `.claude/commands/hello.md`,内容是……",让 AI 帮你写文件。 **Step 3:测试** ``` claude You: /hello 张三 → 你好,张三!…… You: /hello → 你好,朋友!…… ``` > **小技巧**:输入 `/` 后按 `Tab` 键可查看所有可用命令。 --- ## 4. 自定义命令开发进阶 ### 4.1 命令文件结构 命令文件由两部分组成:**YAML frontmatter 配置区**(机器读)+ **Markdown 正文**(AI 读)。 ```markdown --- description: 公众号文章创作命令 argument-hint: <主题关键词> allowed-tools: - Read - Write - WebSearch model: claude-sonnet-4-5-20250929 --- # 公众号文章创作 你是一位资深的公众号写作专家。 主题:$ARGUMENTS 写作要求:接地气 · 1500-2000字 · 金句开头 → 核心内容 → 行动号召 ``` ### 4.2 作用域与优先级 **优先级**:项目级 > 用户级 > 内置命令(非核心) > `/clear`、`/help`、`/compact` 等核心内置命令受保护,自定义命令无法覆盖。 支持子目录,用 `:` 作命名空间: ``` .claude/commands/ ├── write.md # /write ├── dev/ │ └── code-review.md # /dev:code-review └── test/ └── generate.md # /test:generate ``` ### 4.3 frontmatter 配置详解 | 配置项 | 作用 | |--------|------| | `description` | 命令描述,显示在 `/help` 和 Tab 补全中 | | `argument-hint` | 输入命令后显示的参数占位符提示 | | `allowed-tools` | 限制可调用的工具(安全边界) | | `model` | 强制指定模型,覆盖当前会话模型 | | `disable-model-invocation` | 设为 `true` 时只做文本替换,不调用 AI | **`disable-model-invocation` 示例**(节省 Token 的纯模板命令): ```markdown --- description: 快速插入版权声明 disable-model-invocation: true --- © 2025 $ARGUMENTS. All rights reserved. ``` 执行 `/copyright 凯神` → 直接输出 `© 2025 凯神. All rights reserved.`,不经过 AI 处理。 ### 4.4 $ARGUMENTS 参数处理 `$ARGUMENTS` 接收命令后的全部输入(整段字符串): ``` /write AI工具 → $ARGUMENTS = "AI工具" /write AI工具 技术 3000 → $ARGUMENTS = "AI工具 技术 3000" /write → $ARGUMENTS = ""(空) ``` 多参数解析和空值校验直接用自然语言在提示词中描述即可: ```markdown $ARGUMENTS 格式:<主题> [风格] [字数] - 第一个词:主题(必需,若为空请提示用户补充) - 第二个词:风格(可选,默认"接地气") - 第三个词:字数(可选,默认 1500) ``` ### 4.5 可调用的工具 | 工具名 | 功能 | 常用场景 | |--------|------|---------| | `Read` | 读取文件 | 分析代码、读取配置 | | `Write` | 写入新文件 | 创建文件、保存结果 | | `Edit` | 编辑已有文件 | 修改代码 | | `Bash` | 执行命令 | 运行测试、Git 操作 | | `WebSearch` | 网络搜索 | 获取最新信息 | | `WebFetch` | 抓取网页内容 | 下载指定页面分析 | | `Glob` | 按文件名匹配查找 | 批量找 `*.md`、`*.ts` | | `Grep` | 按内容搜索文件 | 找含 TODO 的代码 | | `Task` | 启动子代理 | 并行执行复杂任务 | | `TodoWrite` | 任务管理 | 创建和更新待办清单 | > **最小权限原则**:审查类只需 `Read, Grep`;写代码加 `Write, Edit`;跑命令才开 `Bash`。 > > MCP 工具命名格式:`mcp__服务器名__工具名`(如 `mcp__github__create_issue`),详见第04章。 ### 4.6 条件逻辑设计 Markdown 不支持代码逻辑,但 Claude 能理解自然语言描述的条件分支: ```markdown 根据 $ARGUMENTS 判断: - 包含"深度"或"详细" → 深度分析,输出 3000 字以上完整报告 - 包含"快速"或"简要" → 快速分析,输出 500 字以内摘要 - 其他情况(默认) → 标准分析,输出 1500 字标准报告 ``` ```markdown 检查 $ARGUMENTS 的第一个关键词: - "测评" → 测评模板,重点写优缺点对比 - "教程" → 教程模板,重点写步骤和代码 - "对比" → 对比模板,重点写表格和结论 - 其他 → 通用模板 ``` ### 4.7 实战:完整写作命令 文件:`.claude/commands/write.md` ```markdown --- description: 公众号文章全自动创作,从信息收集到成稿保存 argument-hint: <主题关键词> allowed-tools: - Read - Write - WebSearch - Grep --- # 公众号文章创作系统 你是资深公众号写作专家,擅长创作接地气、有深度的技术科普文章。 **主题**:$ARGUMENTS ## 执行步骤 1. **信息收集**:WebSearch 搜索"$ARGUMENTS 最新资讯 2025",收集核心概念、最新动态、用户痛点 2. **构思大纲**:金句开头 → 问题引入(2-3段) → 核心内容(5-8段) → 总结号召 3. **撰写文章**:说人话、用类比、多短句,字数 1500-2000,每段≤150字 4. **保存文章**:Write 保存到 `articles/drafts/[日期]_[主题].md` 5. **生成标题**:5个备选标题(含数字、引发好奇、≤30字) ## 输出格式 # [选定标题] [文章正文] --- ## 备选标题 1. [标题1] ... 5. [标题5] ``` 使用:`/write Claude Code入门` → 自动完成搜索、构思、撰写、保存全流程。 --- ## 5. 命令高级用法 > 命名空间(子目录组织)见 [4.2 作用域与优先级](#42-作用域与优先级)。 ### 5.1 命令组合与链式调用 单个命令可以描述多步骤工作流,Claude 会按顺序执行: ```markdown # 完整发布流程 1. WebSearch 搜索 "$ARGUMENTS 最新动态" 2. 根据搜索结果撰写文章并 Write 保存 3. Read 读取文章,进行自我审查并输出修改意见 4. 输出最终版本与 5 个备选标题 ``` 多命令串联:先 `/research 主题` 生成素材文件,再 `/write 主题` 读取该文件写作,每个命令职责单一、可单独复用。 ### 5.2 模块化设计 把多个命令共用的角色设定、写作风格提取为**共享片段**,存入 `.claude/modules/`: ``` .claude/ ├── commands/ │ ├── write.md # 引用 modules/writer-role.md │ └── review.md # 引用 modules/writer-role.md └── modules/ └── writer-role.md # 共享角色设定,修改一次全部生效 ``` 在命令文件中加载模块(需在 `allowed-tools` 开启 `Read`): ```markdown 请先读取 `.claude/modules/writer-role.md` 作为角色设定,再执行以下任务…… ``` ### 5.3 社区命令资源 | 资源 | 搜索关键词 | 内容 | |------|-----------|------| | Claude Command Suite | GitHub 搜索 | 审查、测试、文档类命令集合 | | Awesome Claude Code | GitHub 搜索 | 社区精选命令、模板、工作流 | | 官方文档示例 | docs.anthropic.com | 官方推荐命令写法 | > 使用社区命令前,先审查 `allowed-tools` 列表,避免权限过宽。 ### 5.4 故障排查 | 现象 | 原因 | 解决方法 | |------|------|---------| | 输入命令无响应 | 文件路径错误 | 确认路径:`.claude/commands/命令名.md` | | 命名空间命令找不到 | 目录层级错误 | `/dev:review` 对应 `commands/dev/review.md` | | frontmatter 配置未生效 | YAML 格式有误 | 检查缩进用空格、冒号后有空格 | | 工具调用被拒绝 | 工具未声明 | 将所需工具加入 `allowed-tools` 列表 | | 参数被截断 | 特殊字符问题 | 用引号包裹:`/write "AI 教程 2025"` | --- ## 6. 内置命令速查 > 详细用法见[第二章 6. Slash 命令大全](第02章:30+命令与快捷键,编程效率直接翻倍.md#6-slash-命令大全),这里提供速查表。 | 分类 | 命令 | 功能 | 重要度 | |------|------|------|--------| | 会话管理 | `/clear` `/compact` `/resume` | 清空/压缩/恢复会话 | ⭐⭐⭐ | | | `/export` `/rename` | 导出/重命名会话 | ⭐⭐ | | 上下文控制 | `/context` `/model` | 查看Token / 切换模型 | ⭐⭐⭐ | | | `/cost` `/usage` | 查看费用/用量 | ⭐⭐ | | 项目配置 | `/init` `/add-dir` | 初始化CLAUDE.md / 添加目录 | ⭐⭐⭐ | | | `/memory` `/permissions` | 编辑记忆 / 管理权限 | ⭐⭐ | | 开发辅助 | `/rewind` `/review` `/todos` | 回退/审查/待办 | ⭐⭐⭐ | | | `/agents` | 管理子代理 | ⭐⭐ | | 诊断工具 | `/doctor` `/status` | 健康检查/完整状态 | ⭐⭐ | | MCP 相关 | `/mcp` `/hooks` | 管理MCP/Hooks | ⭐⭐⭐ | | 其他 | `/help` `/bug` `/release-notes` | 帮助/报告Bug/更新日志 | ⭐⭐ | --- ## 7. 总结 本章你已掌握: 1. **Commands 本质**:`.claude/commands/` 下的 Markdown 文件,文件名即命令名,`$ARGUMENTS` 接收参数 2. **三种类型**:内置 / 项目级 / 用户级,按需选择 3. **frontmatter**:5 个配置项控制描述、参数提示、工具权限、模型、是否调用 AI 4. **最小权限原则**:按角色只开放必要工具 5. **条件逻辑**:自然语言描述分支,Claude 正确执行 6. **高级用法**:链式调用多步骤工作流、模块化共享片段、社区命令资源借力 --- ## 8. 参考资料 **官方文档与教程**: - [知乎讲解:Claude Commands 自定义命令完整指南](https://zhuanlan.zhihu.com/p/1974062756123658107) - [Claude 中文文档:自定义 Commands 开发指南](https://claudecn.com/docs/claude-code/advanced/custom-commands/) - [知乎:Commands 实战案例与最佳实践](https://zhuanlan.zhihu.com/p/1960414407042512481) ## 下一步学习 | 章节 | 主题 | 你将学到 | |------|------|---------| | 第04章 | 让Claude连上一切——MCP、Hooks与Subagent实战 | MCP 协议原理、主流服务接入、自动化工作流 | | 第05章 | Skills 定制——给Claude装上专属能力包 | Skill 开发、自动激活机制、复杂提示词组织 | | 第06章 | Plugins全攻略——一键安装海量扩展,还能自己造轮子 | Plugin 安装到使用到自己创建~ | --- > **作者简介**:一名正在实习的Java开发工程师,热爱技术分享,专注于性能优化和系统架构设计。 觉得有用的话可以点点赞 (/ω\),支持一下。 如果愿意的话关注一下。会对你有更多的帮助。 每周都会不定时更新哦 >人< 。 > **版权声明**:本文为原创技术文章,转载请注明出处。
彻底击垮面试官心里防线,放下戒备,听你吹
## 前言 虎狼之词 如何培养信任,让面试官放下戒备,听你吹? 本文主要从以下几个纬度去突破:心理分析、面试官痛点、如何准备面试逐一讲解 面试格言:没有不会的技术,只有没有背到面试题。(大牛不用准备面试的当我没说) ## STAR面试法 **面试法则** STAR:即通过描述完整的项目背景,目标,行动和结果的完整过往经历来记录候选人过去的项目结果和思考,以及过程中体现出来的人才特质。 现在你知道面试官问什么爱问你项目了吗?知道面试官也是讲套路的了吧? 既然爱问项目,那我们先思考下,什么样的项目高大上,大家一听就觉得牛杯呢?当然是:分布式,微服务,高并发,高可用。 有人会说了, 这我也没接触过啊,没吃过猪肉,还没见过猪跑?没接触过,就去接触下,看下原理,能说的出来你不就搞过了吗?人也不是生下来就会这些啊,九年义务教育你还没有学会“面向应试学习”,我该说些什么好。面试官想听啥,就去了解啥,能熟练精通自然更好。 你简历上写的,务必都要会,别写的咋咋唬唬的,一问就掉链子,“面向简历复盘面试”。对简历上写的点,深挖3个以上,问题以防止面试官连环炮。(准备要有深度) 复盘的好处就是,面对问到的点,你能快速相应,并做以回答。 只有项目说的不好,人家才想问你基础,看你基础扎不扎实(面试官心理:如果扎实也还能用),项目说好了,后面面试就像是聊天。当然面试的过程中,本身就是聊天,互相了解的过程,保持一个和谐融洽的氛围,非常重要。 人与人协作模式,首先是处的来,然后才是技术。 需要一个跳板工作的,想一手抓主业,一手抓副业的,不妨看看[这个机会](https://jsj.top/f/o38ijj)~:技术大厂,前端-后端-测试,全国均有机会,感兴趣可以试一试;待遇和稳定性都还可以~ 且不需要你耗费很多“人际关系的心力”在上面。 **面试官痛点** 痛点 其实面试官的痛点就那么几个,但却是面试者需要贯穿着整个面试,无时无刻都要散发出来的气质,才能够让面试官信服,并且捕捉到你身上的闪光点其实并不容易。 1.优质学历,大厂背景,开源项目。 2.你技术足够深,宏观视野,开放思维,横向关注对比整个行业动态。 3.你有良好的沟通能力,语言组织能力,亲和力。 4.你对技术充满热情,关注当前最新技术,自律力。 **引导面试官** 避免踩坑 面试管的自我修养:防止被面试者控制节奏,摸准意图。 知道如何说项目了,才刚刚开始,如果不能控制面试节奏,掌握面试的绝对话语权,那么轻则容易被面试官连环炮打蒙,重则影响面试自信心。 场景一 HashMap 看到这个你至少得想到Key-value,数组+链表,扩容机制,泊松分布,线程不安全,头插法尾插法等;当问道你安全问题上,你能快速引导到concurrentHashMap。(与其等着面试官连环问,不如自己主动交代,把知道的全部说出来) 面试官心理:问你HashMap线程是否安全一是想看你的思考过程,看你是否使用过多线程。 这样你准备hashmap你还要准备锁优化,并发包等相关内容。当然这样展开细节会原来越多,你就需要将面试官引导到你熟悉的地方。(你所引导的方向,是你能清楚的,并有依据的地方) 优秀的面试官,问题总是连贯的,前面的问题总会为后面埋下伏笔,多去思考,问题背后潜在的问题。站在面试官角度,去思考,如果你是面试官你会问什么。 面试就那么长时间,面试官和你没仇,本质目的想招人,不是刁难你,所以不论如何,请保持足够的耐心,以及和谐的沟通环境。 面试官技术一般远高于你,你也就不可能什么都会,当碰到真不会的,也就干脆点,两个字“不会”陪个笑脸就好了。 你墨迹半天,瞎扯淡,不但不会提升面试官对你的好感,还觉得你诚信有问题,而“不会”,可能你只是忘了。 引导的本质就是,你要具备,看待某个技术点,下一个问题可能散发出来的问题会有哪些,然后往你熟悉的上面引导。当然如果你还在准备面试阶段,应该全面了解,才是上上策。(这一点不论问的深浅都是适用的) 面试最后 你还有什么想问的吗? 宜: 体验AI代码助手 代码解读复制代码 技术栈和所承担业务 公司组织架构,人员情况。 甚至可以问一些学习方法。 ... 忌: 体验AI代码助手 代码解读复制代码 面试结果 薪资待遇 个人私事 ... **为什么offer率低** 1.局限于平时的增删改查开发技能,技术深度题目缺乏精心准备。 2.Java技术没有体系化,在准备技术广度题目的时候显得捉襟见肘。 3.个人简历不懂得如何包装自己的特长,现场面试还不注重细节。 4.简历没有主次,标题,个人介绍,项目经验没有充分提炼。 10秒钟,你的简历能否抓住hr的眼球?1分钟面试官能否看出你的优势? ## 总结 1.面向招聘编写简历,面向简历准备面试。 2.态度谦和,知无不言,像一颗树一样展示你的技术。 3.正确合理引导面试官向你提问,控制节奏,即使不会,也不勉强,更不要忽悠。 4.保持学习,热爱java,持续充电,对技术保持敬畏。 5.面试可以准备,可以包装(对面试官的尊重),但不是胡说八道,信口开河。 ——转载自:YellowTuDo
