3年常见面试题

SHEIN希音一面

1、简单大概自我介绍

2、面试官根据您简历项目进行互动,所以可以好好复习关于财务系统(例如报销系统、财务系统、供应商订货财务等)一些理论知识点和项目、系统比较容易出现什么突发bug、如何修复等

2、技术方面
1)mysql中有一张表id自增 name 找出name重复的记录?
select employee_name,count(*) as c from employee group by employee_name having c>1;
2)有个集合想要一边遍历一边删掉里面的元素怎么删?
(1)for循环 (2)增强for循环,也就是foreach (3)迭代器
但是注意角标越界
3)取两个集合的共同交集,怎么取? 在这里插入图片描述
4)索引失效的情况:
a、like查询以“%”开头;b、or语句前后没有同时使用索引;c、组合索引中不是使用第一列索引;d、在索引列上使用“IS NULL”或“IS NOT NULL”操作;e、对索引列进行运算(+,-,,/,!等)导致索引失效。
5)线程安全的集合:Vector Hashtable
concurrent包下的线程安全的集合
o CopyOnWriteArrayList
o CopyOnWriteArraySet
6) 如何保证消息的可靠性?(怎么保证RabbitMq消息的一致性?)
消息到 MQ 的过程中搞丢,MQ 自己搞丢,MQ 到消费过程中搞丢。
生产者到 RabbitMQ:事务机制和 Confirm 机制,注意:事务机制和 Confirm 机制是互斥的,两者不能共存,会导致 RabbitMQ 报错。
RabbitMQ 自身:持久化、集群、普通模式、镜像模式。
RabbitMQ 到消费者:basicAck 机制、死信队列、消息补偿机制。
7)线程池原理:我们在代码中模拟了 10 个任务,我们配置的核心线程数为 5 、等待队列容量为 100 ,所以每次只可能存在 5 个任务同时执行,剩下的 5 个任务会被放到等待队列中去。当前的 5 个任务中如果有任务被执行完了,线程池就会去拿新的任务执行。
(1)说一下分布式架构
答:分布式系统就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统。
在没有分布式架构的时候,业务项目是整体且单一的,随着项目发展,项目工程无节制的变得臃肿庞大,今天增加一个业务,明天扩展一个模块,
系统复杂度增加,经常有各种代码合并冲突要处理,非常耗时间,维护性也及其差,而且业务上线新拓展的功能很容易对原有的稳定功能产生影响(只要出现
一个bug,整体项目不可用)。
其次随着用户访问流量的增加,系统负载压力加大,变得不堪重负,即使通过增加机器主机的方式能够带来的效果已经微乎其微,故障频发,效率低下。
有了分布式架构后,就以当前项目为例:
将整体项目根据功能拆分成7个子服务(订购、收租、支付等),每个服务上线后部署集群,保证高可用,也能提高并发量。
每次修改业务只会对当前模块产生影响,极大的降低了系统出故障的概率,即使出问题也不会影响其他业务。
维护代码,不需要考虑频繁的代码冲突。
功能定位清晰,易于维护,增加可读性。
总结起来就一句话,拆分成分布式系统之后,可以大幅度提升复杂系统大型开发团队的效率。分布式架构
(2)限流具体如何操作
答:1.网关限流 2.服务内用RateLimiter采用令牌桶的方式限流3.nginx限流
A:gatway(yaml配置文件): # 速率限流
redis-rate-limiter.replenishRate: 1
# 能容纳的并发流量总数
redis-rate-limiter.burstCapacity: 2

   B:RateLimiter:令牌桶1)所有的请求在处理之前都需要拿到一个可用的令牌才会被处理; 
      2)根据限流大小,设置按照一定的速率往桶里添加令牌; 
      3)桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃或者拒绝; 
      4)请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完业务逻辑之后,将令牌直接删除; 
      5)令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令牌,以此保证足够的限流 

   C:limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;(nginx.conf文件)

(3)自动拆装箱、多线程、数据库、索引原理、分组去重、spl注入、线程池参数使用、线程通信、中间件、redis分布式锁、Java基础、rabbitMQ、$和#区别
自动拆装箱:
Java语言是一种面向对象的语言,但是Java中的基本数据类型不是面向对象的,不能之间参与面向对象的开发,为了解决这个不足,java 提供了8个基本类型对应的包装类,这样就可以参与面向对象的开发了。
装箱、拆箱:把基本类型转化为对应的包装类,叫做装箱,反之,把包装类转换成基本类型叫做拆箱.
使用场景:1.比如在集合类中,我们是无法将int 、double等类型放进去的。因为集合的容器要求元素是Object类型(对象)。
2.方法返回值可以填写 int/Integer.
3.Integer之间计算,实质是自动拆箱为基本数据类型再计算。
4. 包装类型和基本类型的大小比较时(如 Integer a; a1?);
项目开发中遇到的小问题:有个场景用到SQL查询,用Integer返回的。结果查询不到,返回的空,此时需要与0进行判断执行业务逻辑。
(举例:Integer a =null; a
0)此处一直空指针,为自动拆箱导致空指针异常
解决方法:用int做返回值
多线程:
主要是提高计算机系统 CPU 的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,大大提高程序的效率。
创建线程的方式:1.继承Thread类,实现RUNNABLE接口,线程池创建。
项目中使用到的主要是收租的时候使用分布式定时任务,通过多线程对不同分片的数据进行收租/IO的处理:网络IO,文件IO,用线程池异步提升响应速度。
再说说线程的几个状态
数据库:
索引原理

分组去重:

select distinct * from a Group By Name
sql注入:
程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作;也就是对业务sql语句进行非法拼接
避免方式:过滤输入内容,校验字符串
参数化查询:指在设计与数据库连接并访问数据时,在需要填入数值或数据的地方,使用参数(Parameter)来给值
(这里就涉及到这两个区别:
#{}:
解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。)

线程池参数使用:

1.corePoolSize:线程池中的常驻核心线程数
2.maxinumPoolSize:线程池中能够容纳同时执行的最大线程数,此值必须大于等于一
3.keepAliveTime:多余的空闲线程的存活时间。当前线程池数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余空闲线程会被销毁直到只剩下corePoolSize个线程为止。
4.unit:keepAliveTime的单位
5.workQueue:任务队列,被提交但是尚未被执行的任务。
6.threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程一般用默认的即可。
7.handler:拒绝策略,表示当队列满了并且工作线程-大于等于线程池的数量最大线程数(maxinumPoolSize)时如何来拒绝请求执行的runnable的策略。
线程通信:
1.volatile:多个线程同时监听一个变量,当该变量发生变化的时候,线程能够感知并执行相应的业务
2.wait()、notify()、notifyAll(),它们是多线程通信的基础,而这种实现方式的思想自然是线程间通信。wait()/notify()/notifyAll() 必须配合 synchronized 使用,wait 方法释放锁,notify 方法不释放锁。

中间件:网关:Nginx、Gatway 缓存:Redis、
熔断:Hystrix、 负载均衡:Nginx
注册中心:Eureka、Zookeeper、Etcd 认证鉴权:SpringSecurity
消费队列:Kafka 文件系统:FastDFS
RPC框架: Dubbo、grpc 构建工具:Maven、Gradle
集成部署:Docker、Jenkins、Git、Maven、k8s
分布式配置:Spring Cloud Config
压测:JMeter 数据库:MySQL、Redis
分布式框架:Dubbo、Spring-Could 分布式任务:Quartz
redis分布式锁:
控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性
详见
Java基础:
rabbitMQ
(3)这边任务有很多临时任务, 你是如何确保任务能够执行下去
答:首先按照优先级进行排期,然后分别评估工作量,如果可能存在超期风险,上报风险调整任务量等。
(4)你这边的项目执行流程是怎么样的
首先产品进行产品模型分析,然后交接项目负责人进行需求评估需求切割,业务排期,然后进行需求宣讲,我们进行需求预开发(开发前将开发思路开会评审,保证
不存在问题),然后进行正式开发,开发完毕交接测试,并对测试中出现的问题进行讲解或bug解决,整体完毕就灰度测试,无问题就按照版本计划正式上线,
运维维护。
(5)说一下你做过的项目的技术架构是如何确定
由专门的架构实施部进行架构确定
(6)说一下你曾经做相关过程中碰到的技术问题,及你们是如何解决的
1.某同事查询数据库,导致接口响应及其慢,通过更改SQL语句,换成in (举例:select id from table where name in(‘name1’,‘name2’))
2.session共享问题:项目中原使用的nginx负载均衡规则为ip_hash,某项目对接的客户方的ip不固定,导致相同用户无法路由到同一台机器上。
解决:创建一个简单的filter,请求进入后先把session存储到redis中,实现共享
3.自动拆装箱问题:有个场景用到SQL查询,用Integer返回的。结果查询不到,返回的空,此时需要与0进行判断执行业务逻辑。
(举例:Integer a =null; a==0)此处一直空指针,为自动拆箱导致空指针异常
解决方法:用int做返回值
4.@Transactional失败未回滚问题:同一个类中,非@Transactional注解调用@Transactional注解的方法,注解的方法中的@Transactional不起作用。
另外,@Transactional只能用于修饰public方法。
5.对返回结果未判空,直接调用导致空指针
(7)从你做过的项目里面挑一两个说一下你之前是如何开展工作的

3、说一下你做的系统的架构及业务实现方式
7个服务:1·个前后端不分离BFM,两个单体服务access、lp,4个微服务vss、vcs、vps、ves(边缘服务,外部接口调用vas平台时从此服务进入进行鉴权,网关服务)使用了spring、springmvc\mybatis\springboot\kafka\NUWA,redis,maven,git,mysql

4、你做的项目 是否有从0开始的项目,对于这类项目你是如何处理的
说是从0 开始,其实也是整体copy其他的项目过来,基本架构是不用动的,只是将里面一些业务逻辑删删改改,保证业务人员不用在架构的层面消耗时间。

5、你做的项目 是否有从中接手的项目, 对于这类项目你是如何处理的
首先找业务开发文档,
再对项目整体依赖进行粗略的了解,主要是框架类的,对产品实现的框架要理解
从业务层面分析学习,并使用debug从页面端触发,把握整体的调用链路,并进行记录。
积极寻求老员工的帮助,对出现的问题进行及时解决,避免出现技术债。
然后尝试进行一些简单的基本开发,对业务中使用的中间件功能等加深印象。
然后再尝试业务部署,环境端查看日志调试等,对环境加深了解。

6、如何确保项目质量
开发前需求宣讲(与业务经理积极沟通,避免理解出现分歧)
开发前预开发(编写开发文档,开会多人评估)
代码检视,控制代码质量
开发完毕后业务功能的代码自测
与测试的积极沟通保证功能完备性

7、用一句话概括你近期看过的书或者学习的项目
最近在看分布式事务相关的东西(两阶段提交、三阶段提交)
8、当你和领导同事在项目发生冲突,你怎么处理
(可以说先冷静下来,听听别人对于不能接受理解我的意见原因是什么,如果确实是我错,那么我向别人学习,如果自己好的继续保持下去,争取做一个情绪管理和能力强的人)

满帮1面:

1.项目亮点难点
答:微服务分布式,使用redis避免重复订购,使用分布式分片定时任务框架,工厂单例等设计模式,
2.元空间oom怎么解决
答:Metaspace 参数设置不当,比如 Metaspace 内存给的太小,就很容易导致 Metaspace 不够用
代码中用 CGLib、ASM、javassist 等动态字节码技术动态创建一些类,如果代码写的有问题就可能导致生成过多的类而把 Metaspace 塞满 添加链接描述
3线上dump过吗
首先dump是在java启动参数中添加配置:-XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/mnt/log/oom_dump.log ,后面的路径是发生OOM自动生成的dump文件的目录
将dump文件导入软件visualvm中,可以通过可视化的方式便捷看到什么地方占用内存导致内存溢出
4写代码时,如果遇到流量很大的接口,会怎么处理
微服务网关gatway限流,VCS的Ratelimiter令牌桶限流
具体看:添加链接描述
5.mysql默认隔离级别,解决了什么问题,mvcc了解吗
可重复读,不能解决幻读,解决了脏读、不可重复读
mvcc: 添加链接描述
6.rpc下的接口掉用流量激增
(不太清楚想问啥)我就说了网关流控
项目遇到哪些关于sql优化的
之前有个同事循环查库,导致接口相应很慢,后来通过一条SQL解决
写sql时要注意什么
这个就是sql调优的
7网关作用
添加链接描述
调用外部接口异常时,不同异常如何处理
分别catch按照业务进行处理,如之前莫桑比克的超时场景按照成功处理
8.线程池如何使用
VCS分布式定时任务,每个分片启东一个线程执行,可用线程池对线程进行管理
mysql,redis数据一致性
添加链接描述
9.业务redis使用场景
a.短信验证码 b.redis的key保证避免重复订购 c.频繁使用的产品、项目等信息 d.失败重试:规定访问运营商接口失败只重试3次,将次数放到redis
10.最近在学什么新东西
学习分布式事务,阿里的seata(两阶段提交、三阶段提交)
项目性能要求,多少集群
10万tps,每个微服务单独有7台机器(1灰度,6生产)

亚信1一面

项目介绍,如何实现风控的
mysql如何实现分页(真分页,通过前端传入的页数等参数,在sql中拼出limit A,B)
mysql常用聚合函数(SUM\COUNT\MAX\MIN\AVG)
定时任务用什么实现的,底层实现有了解吗(quartz分布式定时任务框架,没了解)
可重入锁lock了解吗
答:可重入就是说某个线程已经获得某个锁,可以再次获取锁而不会出现死锁。ReentrantLock为例
可重入锁主要用在线程需要多次进入临界区代码时,需要使用可重入锁。具体的例子,比如上文中提到的一个synchronized方法需要调用另一个synchronized方法时。
为每个锁关联一个获取计数器和一个所有者线程,当计数值为0的时候,这个锁就没有被任何线程持有。
当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数值置为1,如果同一个线程再次获取这个锁,计数值将递增,退出一次同步代码块,计算值递减,当计数值为0时,这个锁就被释放。
ps:可重入是指对同一线程而言。
mysql索引作用
答:加快数据的检索速度
线程池怎么用的,关键参数有哪些
ThreadPoolExecutor 3 个最重要的参数:
corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。
maximumPoolSize : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
ThreadPoolExecutor其他常见参数 :
keepAliveTime:当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被回收销毁;
unit : keepAliveTime 参数的时间单位。
threadFactory :executor 创建新线程的时候会用到。
handler :饱和策略。
常用设计模式有哪些(上面有)

亚信1二面

redis项目用处
答:a.短信验证码 b.redis的key保证避免重复订购 c.频繁使用的产品、项目等信息 d.失败重试:规定访问运营商接口失败只重试3次,将次数放到redis
项目中遇到的困难
对接运营商,项目上线调测才发现运营商文档有问题
有没有部署过nginx之类的

sql调优(上面有)
有用过vue吗
没有
常用设计模式有哪些(上面有)
redis用的什么持久化机制
答:(rdb+aof混合)
详见:添加链接描述
数据库和redis的数据一致性
谈谈多线程理解
答:多线程使用主要是为了最大限度的利用cpu资源,当一个线程只是在使用I/O等资源时,让空闲出来的cpu资源用到其他线程
线程池怎么用的(上面有)
线上cpu升高,线上oom处理过吗
答:dump文件,然后跑到上面的dump那儿
排他锁共享锁
添加链接描述
ConcurrentHashMap如何保证多线程的数据稳定:
1.7基于Segment加锁:我们称它为分段锁或者片段锁;1.8的使用了CAS 加 volatile 或者 synchronized 的方式来保证线程安全
threadLocal用过吗
答:添加链接描述

亚信2一面

常用设计模式有哪些(上面有)
项目中遇到的困难(上面有)
项目中的失败重试机制怎么用的
答:上面的redis的第4点是一种,然后或者失败后将该信息入库,然后定时任务启动扫描该表重新执行,如果成功就从表中删除,如果失败累计失败次数,如果超过10次就停止执行。
项目中的hash是多长
答:128
48个分片,当你想扩容收租表的时候会怎么操作(不会,好像应该是会员那边有个动态扩容算法)
数据库和redis的数据一致性(上面有)
mybatis二级缓存
答:mysql 8版本源码已移除缓存
具体了解看:添加链接描述
@cacheable注解用过吗
答:类似redis,spring原生的缓存,不过基本不用
索引有哪些
答:MySQL目前主要有的索引类型为:普通索引、唯一索引、主键索引、组合索引、全文索引。
结合hytrix项目如何熔断降级(上面有)

顶点面试:

1.springmvc执行流程
答:用户点击某个请求路径,发起一个 HTTP request 请求,该请求会被提交到 DispatcherServlet(前端控制器);
由 DispatcherServlet 请求一个或多个 HandlerMapping(处理器映射器),并返回一个执行链(HandlerExecutionChain)。
DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter(处理器适配器);
HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler(常称为 Controller);
Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象(Spring MVC的底层对象,包括 Model 数据模型和 View 视图信息);
HandlerAdapter 接收到 ModelAndView 对象后,将其返回给 DispatcherServlet ;
DispatcherServlet 接收到 ModelAndView 对象后,会请求 ViewResolver(视图解析器)对视图进行解析;
ViewResolver 根据 View 信息匹配到相应的视图结果,并返回给 DispatcherServlet;
DispatcherServlet 接收到具体的 View 视图后,进行视图渲染,将 Model 中的模型数据填充到 View 视图中的 request 域,生成最终的 View(视图);
视图负责将结果显示到浏览器(客户端)。
2.controller和service mapper各自的作用。
答:controller层是用来接受前台数据和返回页面请求信息的
service层用于业务处理和逻辑判断
mapper层用于和数据库交互
3.controller层参数校验注解
答:@Valid @NotBlank @NotEmpty @NotNull @Min(value) @Max(value) @Size(max,min)
4.线程池用的啥
推荐使用 ThreadPoolExecutor 构造函数创建线程池:
ThreadPoolExecutor 3 个最重要的参数:
corePoolSize : 核心线程数线程数定义了最小可以同时运行的线程数量。
maximumPoolSize : 当队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
workQueue: 当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
ThreadPoolExecutor其他常见参数 :
keepAliveTime:当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被回收销毁;
unit : keepAliveTime 参数的时间单位。
threadFactory :executor 创建新线程的时候会用到。
handler :饱和策略。

线程池不允许使用 Executors 去创建:
Executors 返回线程池对象的弊端如下:
FixedThreadPool 和 SingleThreadExecutor : 允许请求的队列长度为 Integer.MAX_VALUE,可能堆积大量的请求,从而导致 OOM。
CachedThreadPool 和 ScheduledThreadPool : 允许创建的线程数量为 Integer.MAX_VALUE ,可能会创建大量线程,从而导致 OOM。
5.常用设计模式
代理(aop),工厂(多个运营商),适配器(springmvc里面),模板方法模式,单例,
6.ioc.aop
7.kafka的broken知道吗
添加链接描述 这里有介绍
8.kafka如何保证消息不丢失
添加链接描述
9.缓存击穿
一个被高并发访问的key突然失效了(可以理解为redis的缓存突然无了),无数的请求访问会在瞬间给数据库带来巨大的冲击。
方案:a.使用双重检测锁 b.永不过期,变动更新value
10.redis业务使用场景
a.短信验证码 b.redis的key保证避免重复订购 c.频繁使用的产品、项目等信息 d.失败重试:规定访问运营商接口失败只重试3次,将次数放到redis
11.分布式定时任务
Elastic-Job
添加链接描述 大概瞅一眼就行了
12.注册中心用的什么,熔断降级用的什么
熔断降级:hystrix (策略都采用默认的:也就是如果出现大流量场景,然后服务自动跳到默认的简易页面提示人太多了)
13.如果sql执行慢,如何解决
第1个原因:没有索引或者 导致索引失效。
第2个原因:单表数据量数据过多,导致查询瓶颈
第3个原因:网络原因或者机器负载过高。
第4个原因:热点数据导致单点负载不均衡。
针对一:可以利用执行计划explain去查看SQL是否有命中索引。如果发现慢查询的SQL没有命中索引,可以尝试去优化这些SQL语句,保证SQL走索引执行。如果SQL结构没有办法优化的话,可以考虑在表上再添加对应的索引。我们在优化SQL或者是添加索引的时候,都需要符合最左匹配原则
针对二:分库分表,如收租表的48个分片表
针对三:网络原因或者机器负载过高的情况,我们可以进行读写分离。(主表写,从表读)
针对四:了对数据库本身的调整以外,还可以增加缓存。将查询比较频繁的热点数据预存到缓存当中。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: React常见面试题包括对React的理解、React的特性、区分Real DOM和Virtual DOM、JSX的特性、类组件和函数组件的区别、Virtual DOM的工作原理、State和Props的区别、React refs的理解和应用场景、setState是同步还是异步、super()和super(props)的区别、React事件机制的理解、React事件绑定的方式和区别、React组件生命周期的阶段和方法、受控组件和非受控组件的区别、虚拟DOM提高性能的原因、React中的key的作用、React组件间的通信、高阶组件的概念和作用、React Hooks的理解和解决的问题、React中引入CSS的方式和区别、React中实现组件间过渡动画的方法、React context的概念、对Redux的理解和工作原理、Redux遵循的三个原则、Redux中数据的流动、react-redux的两个主要功能、Redux中处理异步请求的方法、Redux中间件的介绍、在React项目中使用Redux的方法和项目结构的划分、为什么在React Router中使用Switch关键字等等。\[2\] 其中,Refs是React中引用的简写,它是一个属性,用于存储对特定的React元素或组件的引用。它在需要进行DOM测量或向组件添加方法时非常有用。\[3\] #### 引用[.reference_title] - *1* *2* [2021React常见面试题以及答案(持续更新中...)](https://blog.csdn.net/qq_44182284/article/details/116979015)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [面试官最有可能问到的 50 个 React 面试题和答案](https://blog.csdn.net/YZY010313/article/details/122418064)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值