资讯动态

百度校招Java笔试第二批复盘:高频考点与避坑指南

发布时间:2026/8/31 5:25:50 来源:尧图企业网站定制
百度2023校招Java研发工程师笔试卷第二批的热度从当年九、十月份一直持续到现在。很多应届生拿到卷子的第一反应是题量怎么这么大第二反应是怎么有些知识点我复习的时候根本没见过。本文不打算复述原题那涉及保密协议也不现实我更想结合当年参与考试复盘、后续辅导学弟学妹时整理的经验把第二批Java研发卷里最容易丢分的几个模块拆开讲透顺便把复习方向捋清楚。不管你是明年才参加校招还是最近正在刷题冲刺这份复盘应该都能帮你少走不少弯路。1. 批卷二给我最直观的三个信号题量、广度和隐藏的筛选逻辑1.1 为什么百度笔试总让人觉得写不完先说体感。百度的Java研发笔试卷第二批整体题量比第一批没有明显减少但部分题目角度更偏尤其是Java基础题不再问ArrayList和LinkedList的区别这种直接默写题而是给一段代码让你判断输出或者给一个报错场景让你选原因。这种出题方式对知识掌握程度的考察更真实因为它筛的不是背没背过而是有没有真正写过、调过、踩过坑。我当年带过的一个学弟Java基础背得滚瓜烂熟HashMap的扩容机制能默写但遇到一道关于ConcurrentHashMap在JDK 8下size()方法是否准确的题他犹豫了很久。这类题恰恰是百度笔试爱出的表面考集合实际考源码理解加并发经验。所以复习时不能只停留在会用要会讲清楚为什么。另一个信号是时间分配。整卷通常包含选择题、程序输出题、算法编程题偶尔还有简答题或场景设计题。建议的策略是先快速扫一遍所有题目优先做算法题因为编程题分值高且有明确输出。选择题如果卡住超过两分钟先标记跳过不要在一道题上耗掉后面三道题的时间。1.2 基础知识题看似送分实际在筛熟练度第二批的基础知识题有一个特点题干特别短但选项之间的区分度极小。比如考String的intern()方法、考Integer缓存范围、考泛型擦除后的桥接方法这些内容如果在学校做过实验或者看过源码基本上秒答但如果只是背过结论遇到变体就容易翻车。这里有个很实用的复习方法把Java基础过一遍的时候不要只看概念而是去把javap -c反编译结果看几遍。比如String的拼接优化、Integer的缓存池、try-with-resources的字节码结构反编译后一目了然。笔试不会考你字节码细节但会让你判断一段代码的运行结果这时候理解底层执行逻辑比死记答案可靠得多。1.3 算法题中等难度为主但边界条件才是分水岭从同学反馈来看批卷二的算法题主要集中在排序、链表、栈与队列、简单动态规划常见的有快速排序、冒泡排序变种、数组去重、括号匹配、最大子数组和等。题目难度不算高但笔试平台通常是ACM模式需要自己处理输入输出很多人不是不会做而是栽在输入解析和边界条件上。一个真实的教训某次笔试题要求输入一个数组第一行是数组长度第二行是数组元素。有人用Scanner读取时先读了整数然后nextLine()读数组行结果因为换行符问题拿到空字符串导致整个数组都没解析出来。这种问题在本地IDE里不容易暴露因为很多人测试用的都是硬编码数据一到在线笔试就翻车。练算法题时务必按照笔试平台的输入输出格式多练几遍尤其是如何处理换行、多组输入、空行等情况。2. 语言基础题从字符串到枚举每一分都藏在细节里2.1 运算符与表达式别被和短路绕进去笔试选择题里表达式求值几乎是必考内容。第二批次出现的考点包括自增自减、位运算、逻辑短路。下面这类代码建议每一位准备笔试的同学都能在五秒内说出结果int i 0; System.out.println(i i); System.out.println(i);这里i先返回0i变为1i先自增为2再返回2所以结果是2最终i为2。如果换成长整型、浮点型或者把自增嵌进数组下标里结论需要重新推演。再比如逻辑短路int a 5; boolean b (a 3) || (a 5); System.out.println(a);由于||左侧为true右侧不会执行a仍然是5。这个知识点本身不难但笔试喜欢把它和、|混在一起出题。我的建议是复习时把短路与非短路的区别写成一个表格配合几个小例子反复看确保不混淆。2.2 面向对象与继承重载、重写、多态的三层递进面向对象编程是Java笔试的老牌重点。第二批里出现过不少关于继承初始化顺序、重载和重写的辨析题。比如下面这段代码class Parent { static { System.out.print(A); } { System.out.print(B); } Parent() { System.out.print(C); } } class Child extends Parent { static { System.out.print(D); } { System.out.print(E); } Child() { System.out.print(F); } } public class Demo { public static void main(String[] args) { new Child(); } }输出顺序是ADBCEF。静态块在类加载时按父类到子类的顺序执行实例块和构造器在创建对象时也是先父后子。这种题很容易被忽略因为它需要你同时掌握类加载机制和对象创建流程。复习时建议画一张类加载与对象创建顺序图把静态变量、静态块、实例变量、实例块、构造器的执行顺序理成一条线能解决90%的继承初始化问题。重载和重写的判断也是常客。记住一句口诀编译看左边运行看右边。重载是编译期决定的根据参数的静态类型选择版本重写是运行期决定的根据对象实际类型选择方法。笔试中经常给出一个父类引用指向子类对象的代码问你调用的是哪个方法。这种题需要对动态绑定机制有清晰认识不能只看方法名相同就认为一定发生多态。2.3 枚举、Lambda和常用类Java 8以后的新玩法枚举在被降级为常量的场景里很容易被忽视但笔试中枚举和switch的组合、枚举实现单例、枚举的values()方法等都是热门考点。百度第二批里我印象比较深的一道题是问枚举如何保证线程安全。答案其实很简单枚举类的构造器是私有的且枚举实例在类加载时被创建JVM保证枚举类的实例创建过程天然线程安全。用枚举实现单例也是Effective Java里推荐的方式这个点值得多看两遍。Lambda表达式在笔试中更多以Comparator、Function等函数式接口形式出现。考察点包括Lambda对局部变量的捕获要求变量必须是final或 effectively final方法引用和Lambda的转换规则stream的惰性求值和短路操作。比如ListInteger list Arrays.asList(1, 2, 3, 4, 5); int result list.stream() .filter(x - x % 2 0) .map(x - x * x) .reduce(0, Integer::sum);这段代码算出偶数的平方和即4 16 20。这里的filter和map都是惰性的没有终端操作reduce之前不会执行。这类题考察的是对Stream API底层执行流程的理解而不只是API的用法。java热词里频繁出现常用类对应到笔试就是String、StringBuilder、StringBuffer、日期类、Optional等。String的不可变性、字符串常量池、StringBuilder的线程不安全特性这些属于送分题但一旦和与equals结合起来就变成易错题。比如String s1 hello; String s2 new String(hello); System.out.println(s1 s2); // false System.out.println(s1.equals(s2)); // true如果再加上intern()题目难度立刻上一个台阶。复习时建议把字符串的创建方式、常量池位置、intern()返回规则串联成一个完整的故事而不是零散记忆。2.4 数组越界与容器选择一不留神就丢分的高频陷阱java中数组越界异常这个搜索词出现得非常自然因为笔试真的爱考数组下标访问。常见陷阱包括for (int i 0; i arr.length; i)造成越界以及二分查找中mid (left right) / 2可能溢出。虽然笔试不考溢出导致的细节问题但在算法题里手写二分时建议养成写mid left (right - left) / 2的习惯既防止整数溢出也让阅卷人觉得你足够专业。容器相关的选择题永远绕不开ArrayList、LinkedList、HashMap、HashSet、TreeMap。除了背底层数据结构更重要的是理解它们各自适合的场景。比如频繁在头部插入应该用LinkedList按下标随机访问应该用ArrayList。HashMap在JDK 8以后引入红黑树当链表长度超过8且数组容量大于64时转为红黑树。笔试如果问HashMap如何解决hash冲突答案不能只写链地址法还要简单提一下树的退化条件。另外Comparator.comparing这个热词背后是一个很实际的编程需求按对象的某个属性排序。笔试编程题里经常出现按年龄升序如果年龄相同按姓名降序这类排序要求。下面会单独展开。3. 算法与数据结构排序、查找和Comparator的实战打法3.1 快速排序与冒泡排序手写代码的常见失分点算法题中手写排序的概率很高尤其是快速排序。快速排序的写法很多但笔试时建议用最容易写对的一种挖坑法或左右指针法。我以挖坑法为例public static void quickSort(int[] arr, int left, int right) { if (left right) return; int pivot arr[left]; int i left, j right; while (i j) { while (i j arr[j] pivot) j--; arr[i] arr[j]; while (i j arr[i] pivot) i; arr[j] arr[i]; } arr[i] pivot; quickSort(arr, left, i - 1); quickSort(arr, i 1, right); }这段代码最容易被忽略的有三点递归终止条件left right、内层循环索引边界i j、以及比较时用和而不是和。最后一个点尤其关键否则遇到大量重复元素时可能会死循环或者栈溢出。很多人笔试时写排序不出错但一跑测试用例就挂往往就是边界符号用错了。冒泡排序本身不难但笔试可能考优化后的冒泡排序当某轮没有发生任何交换时数组已经有序提前退出。这个优化常被写成一道小题问最优时间复杂度是O(n)。如果复习时能顺手把插入排序、选择排序也手写一遍再做一张复杂度对比表这块基本就稳了。排序算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n^2)O(n^2)O(1)稳定快速排序O(n log n)O(n^2)O(log n)不稳定插入排序O(n^2)O(n^2)O(1)稳定归并排序O(n log n)O(n log n)O(n)稳定3.2 数组和链表场景题时间复杂度和空间复杂度怎么权衡百度笔试喜欢出与实际关联度高的场景题。比如设计一个支持在头部和尾部都能高效插入删除的数据结构这类题的答题思路要从ArrayList和LinkedList的底层结构出发。数组在头部插入需要O(n)的搬移链表在尾部插入需要遍历到最后一个节点。如果要求两头都是O(1)最佳方案是双端链表或循环数组。答题时要明确说出数据结构的选择依据和每种操作的时间复杂度。还有一类常见场景是大量数据去重后排序涉及HashSet与TreeSet的选择。HashSet去重O(n)、但结果无序TreeSet去重O(n log n)、结果有序。如果对内存有要求还要考虑数据量能否放进内存不能的话是不是要使用外部排序或位图。这种题考查的不是某个API而是工程思维。3.3 Comparator.comparing把某元素值放第一个这类排序需求翻译成代码Java热词里有一条java comparator.comparing 将某元素值放第一个这个需求在笔试和实际开发里都很常见。比如有一个用户列表要求把状态为VIP的用户排在最前面其余用户按年龄升序。以前我们习惯写一个完整的Comparator匿名内部类现在用Comparator.comparing加thenComparing很简洁ListUser users getUsers(); users.sort(Comparator .comparing((User u) - !u.isVip()) .thenComparing(User::getAge));注意这里把isVip()取反是为了让true排在前面因为Comparator.comparing默认升序false排在true之前。如果希望VIP用户排在前面就得用!isVip()作为比较键。这个技巧在笔试中可以直接套用比手动写两个比较逻辑要清晰得多还能减少出错概率。如果需求复杂比如根据某个字段null值排在最后可以通过Comparator.nullsLast(...)组合。笔试现场时间紧张提前熟悉这些组合API是提分关键。3.4 列车调度与栈队列场景题对抽象能力的要求列车调度java这个搜索词很可能来自经典的数据结构题列车进站出站序列判断一个出站序列是否合法或者求最少调度轨数。这类题目对应栈和队列的特性也涉及贪心思想。比如经典的车厢重排或者最少轨道数问题可以用一个轨道末尾最小值的队列集合来贪心求解。遇到这类题第一步不是写代码而是把场景抽象成数据结构。列车调度问题本质上是多个先进先出队列的组合或者栈的合法出栈序列判断。如果之前没见过现场推会很浪费时间。建议提前把栈和队列的经典应用场景过一遍括号匹配、表达式求值、单调栈、用两个栈实现队列、约瑟夫环等。这些都是高频考点也是第二批试卷里算法题的重灾区。4. JVM、编译与运行环境把报错信息当作复习大纲4.1 java: outofmemoryerror: insufficient memory 的排查思路很多搜索引擎里出现java: outofmemoryerror: insufficient memory说明不少人在本地写代码时遇到过。这个报错在笔试中可能会以场景题出现程序运行一段时间后内存不足问你怎么排查。这里的核心词是insufficient memory它可能是Java堆内存不足也可能是操作系统本机内存不足。排查的第一步是区分错误类型java.lang.OutOfMemoryError: Java heap space堆内存不足需要考虑调大-Xmx或者检查是否存在内存泄漏。java.lang.OutOfMemoryError: Insufficient memory有些JVM版本会以这个格式提示通常是本机物理内存或虚拟内存不足JVM无法继续分配内存。java.lang.OutOfMemoryError: unable to create new native thread线程数过多Linux下往往是进程线程数限制或总内存限制。笔试答题时不要只写调大JVM参数还要给出排查命令jps -l # 找到Java进程ID jmap -heap pid # 查看堆内存配置与使用情况 jmap -histo pid # 查看内存中对象实例数量 jstack pid # 查看线程栈排查死锁或线程泄漏如果怀疑内存泄漏可以用jmap导出堆转储快照再用MAT或JProfiler分析。笔试不需要你写出每个命令的完整输出但能答出排查链路就能体现出真实项目经验。4.2 Lombok与mapping processor报错注解处理器的坑热词里出现了java: you arent using a compiler supported by lombok, so lombok will not work和java: internal error in the mapping processor: java.lang.nullpointerexception。这两个报错在工程化场景中特别真实。Lombok不工作的原因通常有两个一是IDE内置编译器版本与Lombok支持版本不兼容二是项目里使用的Java版本太新而Lombok版本太旧。比如新版JDK升级后注解处理器内部使用了一些旧JDK没有的API就会导致Lombok完全失效。解决办法是升级Lombok依赖到最新版或者在IDE设置里把编译器切换为javac而不是内置编译器。mapping processor的NullPointerException常见于MapStruct这类基于注解处理器生成映射实现类的框架。这类报错往往不是代码逻辑问题而是注解处理器在生成代码时遇到了类型不匹配或循环依赖。我的建议是把这个报错时的target/generated-sources目录清理一下重新编译如果还不行重点检查Mapper接口里有没有使用不正确的属性名或类型。笔试如果出这种题大概率是给你一段报错信息问你最可能的原因能够说出这是注解处理器的问题和业务代码关系不大就已经拿到大部分分数。4.3 源发行版 17 需要目标发行版 17从错误反推构建配置java: 警告: 源发行版 17 需要目标发行版 17是很多人在新项目里遇到的编译警告笔试中可能改成选择题考你如何解决。本质原因是javac编译时的-source和-target版本配置太高但项目实际使用的JDK版本低于该版本或者Maven没有正确指定编译参数。解决方法有三种修改pom.xml中的maven-compiler-plugin配置将source和target设为一致的版本。在IDE中检查Project Structure的Project SDK和Language Level是否匹配。在IDEA的Settings里检查Java Compiler的-parameters和字节码版本设置。这个问题的价值在于它提醒我们笔试不只是考你写代码也考你能不能应对真实工程环境里的构建问题。平时遇到版本不一致报错别光顾着点IntelliJ IDEA自动修复多留意一下它改了什么配置笔试就可能多拿一分。4.4 找不到Java和VSCode运行乱码环境变量是笔试之外的隐形题搜索热词里有drozer找不到java和vscode运行java报错乱码这虽然不是典型的笔试知识点但说明很多人在环境配置上吃过亏。笔试通常在自己的环境里做一般不用现场配置环境但在某些兼容性较差的安全工具或实验平台上JAVA_HOME没有配置就会导致工具无法启动。如果笔试是线上IDE这类问题可能不出现但如果是手写答题问如何配置Java环境变量的概率仍然存在。要记住JAVA_HOME指向JDK安装目录PATH里面需要追加%JAVA_HOME%\binWindows或$JAVA_HOME/binLinux/macOS。classpath在JDK 9之后一般不需要手动设置但旧题里可能还会涉及。VSCode运行Java乱码通常是文件编码与控制台编码不一致导致可以在settings.json里设置java.debug.settings.consoleEncoding: GBK或统一用UTF-8。这类问题在真实开发中很常见建议花半小时把系统环境变量捋一遍对理解Java运行机制也有帮助。5. 框架与工程实践题从API Key到接口自动化考的是项目经历是否真实5.1 Spring Boot API Key安全对接签名、时效与拦截器百度校招Java研发职位对Spring Boot框架的考察非常偏实战。批卷二里出现过与第三方系统对接相关的设计题如何保证API接口调用的安全性。如果你的项目经历里写过接口但没考虑过安全这题就会暴露。合理的思路是API Key 签名 时间戳。客户端与服务器约定一个appKey和appSecret每次请求带上appKey、timestamp、nonce和sign。签名规则通常是将参数按字典序拼接后加上appSecret用HMAC-SHA256或MD5生成摘要。服务端通过拦截器或AOP校验public class ApiKeyInterceptor implements HandlerInterceptor { Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String appKey request.getHeader(X-App-Key); String timestamp request.getHeader(X-Timestamp); String nonce request.getHeader(X-Nonce); String sign request.getHeader(X-Sign); // 1. 校验appKey是否存在 // 2. 校验时间戳是否在允许的时间窗口内如5分钟 // 3. 校验nonce是否被使用过防重放 // 4. 用appSecret计算签名并比对 return true; } }这里要注意的细节是防重放攻击nonce通常存到Redis并设置过期时间超时时间就过期同时校验时间戳若时间偏差超过阈值直接拒绝。如果只是简单校验一个固定API Key那接口很容易被伪造。这类设计题没有标准答案但答题时把签名、时效、防重放这三个关键词说清楚就能比大多数应届生强。5.2 Java接口自动化测试框架三层结构才是回答重点java接口自动化测试框架是校招简历上的高频词也是笔试场景题的常见素材。面试官问的是你怎么设计一个接口自动化测试框架而不是你会用Postman调接口吗。笔试答案建议采用三层结构用例管理层、请求执行层、数据驱动层。用例管理层使用TestNG或JUnit管理用例执行顺序、依赖关系和测试报告。请求执行层封装HTTP客户端如RestTemplate、OkHttp、HttpClient统一处理请求头、签名、日志、重试。数据驱动层将测试数据放在Excel、YAML或JSON里通过数据源注解把参数注入测试方法。另外还要考虑断言方式状态码校验、响应体字段校验、数据库结果校验。如果涉及数据库注意测试数据隔离最好每个用例使用独立事务或独立数据集。这道题更深入一点的考法是如何保证自动化用例的稳定性。这时候可以提重试机制、等待策略而不是固定sleep、接口幂等性设计。这些内容如果项目里真正实践过答起来会非常自然。5.3 ES异步写入Java与数据一致性生产环境遇到过的问题es异步写入java这个热词说明很多人在对接Elasticsearch时遇到了性能问题。百度笔试如果考察中间件使用很可能结合日志、搜索、数据同步等场景问你如何把数据高效写入Elasticsearch。常见的方案是使用Elasticsearch Java Client的BulkProcessor或异步客户端批量提交数据而不是单条写入。示例大致是BulkProcessor bulkProcessor BulkProcessor.builder( (request, bulkListener) - bulkListener::afterBulk, new BulkProcessor.Listener() { Override public void beforeBulk(long executionId, BulkRequest request) {} Override public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {} Override public void afterBulk(long executionId, BulkRequest request, Throwable failure) { // 记录失败批次重投或落本地表 } }).build();但笔试更想了解的是你对数据一致性的理解。异步写入意味着数据没有实时可见如果后面逻辑依赖写入结果就必须处理回调或补偿。在面试中我被问过一个典型问题ES写入成功但MySQL事务回滚了怎么办标准答案是引入本地消息表或事务消息保证ES与数据库的最终一致性。这类问题考验的不只是API熟练度而是分布式系统的全局观。5.4 LangChain4j接入Qwen Embedding并存储Milvus2023年才有的新考点热词里出现qwen embedding、并存储milvus 调用示例 java langchain4j这说明大模型相关的Java开发已经成为新的考察方向。虽然传统Java笔试试卷里不常考但2023下半年以后一些头部公司开始把向量检索、RAG这类概念放进技术面甚至笔试的场景题里。LangChain4j是Java生态里的LangChain类库支持对接各种大模型和向量数据库。在Java里实现把文档切分后生成Embedding再存入Milvus的流程大致是加载文本按固定长度或语义切分。调用Embedding模型如Qwen的Embedding接口把文本转成向量。向量写入Milvus集合并保存原始文本内容payload。查询时把用户问题转成向量在Milvus里做相似度检索取TopK。EmbeddingModel embeddingModel OpenAiEmbeddingModel.builder() .baseUrl(https://dashscope.aliyuncs.com/compatible-mode/v1) .apiKey(your-api-key) .modelName(text-embedding-v3) .build(); ListTextSegment segments TextSegment.from(需要分段的文本内容); ResponseListEmbedding embeddings embeddingModel.embedAll(segments);如果笔试里考这个不要觉得超纲它代表公司在寻找具备快速学习能力的Java工程师。你完全可以回答我了解这个方向并且会通过LangChain4j去整合模型和向量库。重要的是展示你理解这个技术栈的价值和使用场景而不是死记代码。6. 从批卷二延伸出的Java学习路线哪些可以速成哪些必须长期积累6.1 八股文之外笔试真正想考的编程素养看过批卷二的考点之后你会发现它其实在反复验证几个底层能力能否读懂一段Java代码的执行结果、能否把数据结构知识应用到具体场景、能否从报错信息中定位工程问题。这些能力不是靠几天刷题就能速成的但可以通过输出式学习来强化。刷题时不要只看别人的题解要亲手写写到能在一分钟内默写出快速排序、二分查找、链表反转这几个高频模板。Java基础部分每天做二三十道小题然后追问自己为什么是这个结果这是把八股文变成真正知识的唯一路径。现在很多网站都有Java面试题合集里面会标注高频考点你可以按专题刷而不是一页一页翻。6.2 一套高效刷题与背题组合策略很多同学问Java八股文到底要不要背。我的答案是要背但要在理解基础上背。笔试选择题涉及的输出结果、异常类型、API参数不背的话现场推演很费时间。但背之前先通过手写demo验证结论记住的是结论验证过程而不是孤立的文字。具体的组合策略可以这样算法题每天两题优先做LeetCode热门100题里的数组、链表、栈、队列、排序、二分、动态规划入门题。手写代码时尽量用ACM模式避免IDE自动补全带来的依赖。Java基础每天一个专题。比如今天整理String和常量池明天整理HashMap的源码注释后天整理并发工具类。每整理完一个专题就做十道配套选择题。框架与场景题不要只看概念要准备1~2个真实项目把里面用到的技术点拆成可以口述的小故事。比如接口如何鉴权、Redis如何防重复提交、ES如何保证最终一致。这些内容在笔试简答和面试里都能复用。6.3 复盘时最有用的一个习惯把错题收集成一句话清单我在准备校招时有一个习惯每错一道题就把考点浓缩成一句话记在手机备忘录里。比如Integer缓存范围是-128~127用比较要小心。HashMap在JDK 7及以前头插法并发扩容会形成环JDK 8改为尾插法但并发下仍可能丢数据。重写equals()必须重写hashCode()否则集合操作会出错。String::intern在JDK 7以后常量池移到堆中但并非所有字符串都进入常量池。这些一句话清单考前十分钟翻一遍比临时翻书有用得多。批卷二里那些看似偏门的报错题比如Lombok不工作、源发行版冲突本质上都是真实工程里踩过的坑。如果你平时有记录报错和解决方案的习惯这类题对你来说就是送分题。从我带过的学生来看能在百度校招笔试里拿到高分的人不一定是刷题最多的但一定是对运行结果和报错原因特别敏感的人。他们看到一段代码第一反应不是背诵结论而是心算一遍执行流程遇到一个报错不是急着百度而是先看堆栈、定位到具体是哪一行引发了问题。这种敏感度没有捷径只能靠平时多写、多调、多复盘。如果你现在时间还很充裕我建议从今天开始做一个小的Java实验项目把字符串、集合、并发、Lambda、Spring Boot、消息队列、Elasticsearch这些点全部串起来。等这个项目做完再回头看百度校招笔试卷你会发现自己不再怕任何一道题。毕竟笔试本质上考的就是一个Java工程师日常最常用、最该熟练的那部分能力。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价