java偏功能实现的面试题,教你如何做面霸,2024年最新快手程序员面试

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

二级缓存是mapper级别的,只要是对一个mapper调用就可以使用二级缓存。

  1. mybatis的实现原理(>9)

一言难尽,请自行百度。

必备技能,但是以上基础部分需要重点掌握。根据自己的薪资可以自行提升难度。

五.分布式


  1. 介绍一下分布式,说说对分布式的理解(>5)

分布式侧重将一个系统拆分成多个业务单元,例如一个门户网站里面可能有登录、视频、图片等,每一个都可以拆分出

来独立部署,而且每一个都可以弄成集群,视频服务集群,图片服务集群,主系统可以对这些子系统进行调用,子系统

之间可以有调用关系也可以没有,看实际业务情况。

网上很多,请自己总结

  1. 分布式事务(>10)

tcc,seata等,篇幅原因请自行查看

  1. 分布式锁(>10)

Redission等,篇幅原因请自行查看

分布式事务分布式锁等小公司使用并不多,初级,中级了解即可,如果想拿到一个更高的薪资(装b)建议掌握。

六.spring全家桶(吃饭的家伙)


6.1 spring

  1. 介绍一下spring的理解(>5)

提供了ioc,aop,用于解耦。

  1. spring的依赖注入和控制反转是什么意思(>5)

依赖注入与控制反转是一回事

依赖注入:被注入对象依赖IoC容器配置依赖对象。

控制反转:bean的控制交于工厂。

  1. 和new()相比,spring有什么优点(>6)

1.bean交于容器统一管理

2.节省堆内存

  1. ioc与aop的实现原理(>7)

ioc工厂模式

aop代理模式

涉及源码,篇幅有限 请自行百度

  1. 说一下自己了解spring注入失败的原因(>6)

1.bean重名

2.bean起名为set或get(其他关键字可能也会有问题)

3.循环依赖

  1. 能介绍一下spring的循环依赖吗 (>10)

循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A

  1. 说一下spring的事务传播级别(>10)

PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常。

  1. bean的初始化流程 (>10)

涉及源码,篇幅有限 请自行百度。

6.2 spring cloud

  1. 是否使用过微服务,说说对微服务的理解 (>5)

1.按照业务拆分服务,方便于管理开发。

2.更加方便集群化建设。

3.更加容易容器化建设。

  1. 在项目中使用过哪些微服务组件(>6)(根据不同微服务生态)

Netflix和爸爸版生态 需要了解一个

  1. 说说微服务生态的各组件的选型(>7)

建议选型爸爸版

注册与配置:nacos

服务间调用:dubbo/openfeign

网关:getway

监控:sentinel

优点

1.还在持续开源,未来或许还有其他功能

2.nacos比eureka更加强大,有命名空间,组等功能呢。

3.性能更加优越。

4.中文文档齐全。

  1. 说说对网关的理解(>7)

在没有API网关作为统一出口的情况下,需要调用方自己组合各种服务,而且容易让调用方感知后端各种服务的存在,

加入网关后,客户端调用服务需要通过网关来进行,并且网关可以处理路由,安全,限流,缓存,日志,监控,重试,

熔断等事务,使业务开发更纯净。

  1. 说说对熔断的理解(>7)

由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻

塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故

障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。为了解决这个问题,业界提

出了 熔断器模型。

  1. 在微服务体系中 服务的注册和暴露的过程 (>8)

服务向注册中心发送请求,注册中心获取到服务信息后,保存在本地,当需要服务间需要调用时,服务会拉取注册中心

的服务列表,获取被调用服务信息,执行调用。

并且有着心跳的概念,及在固定时间内服务向注册中心发送请求,表明自己还活着。

  1. 服务间调用如果响应时间过慢造成无响应怎么办(>9)

可以加大调用允许保持连接的时间,但是如果是响应过慢,对用户体验特别差,所以不建议。所以需要以下

1.排查被调用服务器是否有优化余地,如sql等。

2.如果是少部分请求,加入熔断,提升用户体验,

3.如果允许可以使用异步或者mq。以异步的方式获取数据。

spring mvc(如果简历写过)

  1. spring mvc的原理 (>7)

(1)客户端(浏览器)发送请求,直接请求到DispatcherServlet。

(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。

(3)解析到对应的Handler后,开始由HandlerAdapter适配器处理。

(4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。

(5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。

(6)ViewResolver会根据逻辑View查找实际的View。

(7)DispaterServlet把返回的Model传给View。

(8)通过View返回给请求者(浏览器)

详细答案请自行百度

  1. 介绍一下dispatchservlet (>8)

  2. 请求会首先发送到DispatchServlet,这是spring的前置Servlet,它会接收请求并转发给spring的MVC

controller,也就是业务controller

  1. DispatchServlet通过HandlerMapping(处理器映射)确定将请求转发给哪个controller,HandlerMapping主

要通过请求中的URL确定映射关系的

  1. DispatchServlet将请求转发给确定的controller之后,DispatchServlet卸下请求的负载,controller负责处

理这个请求,一般会通过调用service层进行业务逻辑处理

  1. 当controller处理完请求后,它会把业务处理结果封装成model,为了使处理结果的model在页面上更好的展示,

controller还会指定展示model对应的view(比如一个JSP页面),当controller确定了model和view之后,会把它们

以请求的形式再转发给DispatchServlet

  1. DispatchServlet通过查询ViewResolver(视图解析器)找到view对应的页面

  2. DispatchServlet最终把model交给页面进行渲染

  3. 页面对model进行渲染,将结果展示到客户端,整个请求结束

  4. 说说对上下文的理解(>8)

context就是“容器”,放的就是应用程序的所有资源,要用时候就访问它,所以context里面的东西,在同一个应用程

序里面是全局的;web上下文可以看成web应用的运行环境,一般用context名字来修饰,里面保存了web应用相关的一

些设置和全局变量

  1. 说说与spring boot的区别(>10)

spring mvc需要大量xml配置,spring boot遵守着约定大于配置,springboot具体实现可以参考下文

6.3 spring boot

  1. 介绍一下编写接口的注解(>5)

@RestController,@RequestMapping,@RequestParam,@Service,@RequestBody,@requestmapping等

  1. 介绍一下spring boot事务(>5)

一个接口内,数据全部处理完成或者处理失败,防止一部分失败一部分成功。

使用@Transactional(rollbackFor = Exception.class)

  1. 描述一下restful风格(>7)

一种软件架构风格、设计风格,增删改查接口全部使用一个命名,使用请求类型来(get,post,put,delete)确定调

用的那个接口。

  1. springboot的启动原理(>8)

1.运行 SpringApplication.run()方法

2.SpringApplicationRunListeners listeners = this.getRunListeners(args);获取监听器

3.listeners.starting()触发applicationStartedEvent 启动监听器

4.准备好环境environment 触发applicationEnvironmentPrepareEvent

5.创建一个spring上下文createApplicationContext()

6.初始化上下文

1):获取要启动类包的地址

2):转为BeanDefinitionRegistry

3):通过注解扫描出bean

4):调用BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder,

this.registry);将启动类BeanDefinition注册到IoC容器的beanDefinitionMap中

7.刷新上下文refreshContext(注入各种需要的bean 以下是bean的生命周期 !!关键)

//设置BeanFactory的后置处理. 空方法,留给子类拓展用。

(1)postProcessBeanFactory(beanFactory);

//调用BeanFactory的后处理器, 这些后处理器是在Bean定义中向容器注册的.

(2)invokeBeanFactoryPostProcessors(beanFactory);

(3)实现自动化配置

//注册Bean的后处理器, 在Bean创建过程中调用.

(4)registerBeanPostProcessors(beanFactory);

//初始化上下文中的消息源,即不同语言的消息体进行国际化处理

(5)initMessageSource();

//初始化ApplicationEventMulticaster bean,应用事件广播器

(6)initApplicationEventMulticaster();

//初始化其它特殊的Bean, 空方法,留给子类拓展用。

(7)onRefresh();

//检查并向容器注册监听器Bean

(8)registerListeners();

//实例化所有剩余的(non-lazy-init) 单例Bean.

(9)finishBeanFactoryInitialization(beanFactory);

//发布容器事件, 结束refresh过程.

(10)finishRefresh();

7.ApplicationRunner和CommandLineRunner启动

  1. spring boot是怎么实现约定大于配置的(>8)

涉及源码,请自行百度。

  1. 描述一下spring boot中的异步(>8)

@EnableAsync使异步调用@Async注解生效

调用后立即返回固定对象,释放线程,程序在后台执行。前台无感知。

  1. 描述一下跨域是如何处理(>8)

添加cors配置。指定后台地址允许访问。

  1. 介绍一下自定义注解(>9)

1.基于aop

2.拦截器

3.ConstraintValidator注解实现验证

  1. 介绍一下@resource和@Autowired区别(>9)

@Autowired注解由Spring提供,只按照byType注入;@resource注解由J2EE提供,默认按照byName自动注入2、

@Autowired默认按类型进行装配,@Resource默认按照名称进行装配。”

对于小公司,技能要求真心不多,数据结构算法,完全用不上,那么最重要的还是springboot的使用,如果你能熟练的书写接口,熟练掌握ssh,那么找个一个理想的工作是不难的。所以,springboot接口编写一定要6。

6.4 spring security

  1. 描述一下spring security作用,并分别介绍以下(>7)

验证与鉴权。

验证:验证密码是否正确

鉴权:判断用户是否有权限访问接口。

  1. spring security token的存储方式 (>7)

内存,数据库,redis,jwt

  1. jwt和redis存储有什么区别 (>8)

jwt只能验证,并不能对token删除修改等,如果需要踢人,或者需要对token进行操作,请选择redis.

  1. 描述一下spring security核心配置类 (>8)

  2. 简单介绍一下spring security的原理(>9)

是一大堆过滤器链,分别验证

  1. 怎么实现验证码功能(>9)

  2. 记住我功能怎么实现(>9)

在小公司spring security+oauth2人才真的少,所以学吧老铁。如果未来想成为公司的架构的参与者,或者不满于curd,spring security应该是值得你掌握的。

七.中间件


7.1 elasticsearch

  1. 简单介绍一下es (如果简历有写)

Elasticsearch是一个开源的分布式、RESTful 风格的搜索和数据分析引擎,它的底层是开源库Apache Lucene。并

有以下特点

1.分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。

2.实时分析的分布式搜索引擎。

3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

  1. 说说es的倒排索引是怎么回事 (>6)

记录每个词条出现在那些文档,以及文档中的位置,可以根据词条快速定位到包含这个词条的文档及出现的位置

  1. es查询索引的语句怎么写 (>6) (以上两个问题答不上来说明不会 不用往下问了 二三线使用概率还是很小的)

GET /20211201-logs/_search

{

“query”: { “match_all”: {}

}

  1. es使用的场景是什么(>7)

全文检索,精准查询,elk等

  1. spring boot整合中用了什么客户端 (>7)

简单的可以使用spring提供的ElasticsearchTemplate

复杂的可以使用RestClient

  1. 查询前缀名相同的索引的查询语句 (>8)

GET /*_logs/_search

{

“query”: { “match_all”: {}

}

使用的非常少,有写的咱就得问啊。不是必须掌握。

7.2 rabbitmq

  1. mq的作用是什么(>5)

削峰,异步,解耦

  1. rabbitmq使用场景(>6)

向其他服务器异步发送消息

大量请求怼过来,按照服务器性能慢慢拉取适量请求

  1. 说说交换机种类(>7)

fanout:发送给所有绑定该交换机的队列。

Direct:默认的交换方法,按照提供的key去寻找队列。如果key为A,数据只能发送到A的队列中。

Topic:模糊匹配,只要符合该格式就可以。可以存在两种特殊字符“”与“#”,用于做模糊匹配,其中“”用于匹配

一个单词,“#”用于匹配多个单词(可以是零个)。如*.C.# 可以匹配A.C.B.不能匹配A.B.C.(其中以banding key

关联)

head:根据消息内容中的headers属性进行匹配。

  1. 怎么保证消息不丢失(>8)

1:队列持久化硬盘

2:手动ack

3:确认是否发送成功

4:集群化处理

5:异地容灾

6:发送消息持久化到db中 进行消息的重新发送

7:消费者消息固话到db中 通过消息id判断是否重复消费

  1. 说说ack和nack

手动应答是否接收成功,否则会出现消费者一直占用这队列的情况

  1. 了解延时队列和死信队列吗 (>10)

死信队列:如果有有错误消息 如果手动nack同时将消息放回到队列中 那么这条消息会反复消费 留在队列中

如果nack后将消息丢弃 那么如果碰到网络抖动 消息也会丢失 。 所以 建立死信队列避免消息丢失。

延时队列:在一定条件后触发执行

mq在小公司应用的也比较少,但是强烈建议了解一下,如果不写一般也不会问,但是如果使用一定要在一定程度保证消息的准确性,如:防止长期占用一个队列,消息不消费的情况。

7.3 redis

  1. redis的使用场景(>5)

使用自动过期策略存放token

热点数据存放redis

利用原子性自增计数器

分布式锁

  1. redis为什么比数据库快(>6)

一.纯内存操作

二.单线程反而避免了多线程的频繁上下文切换问题

  1. redis5个基本数据类型(>6)

string,list,map,set,zset

  1. redis雪崩 击穿 穿透(>8)

  2. 雪崩 击穿 穿透的解决办法 (>9)

一 缓存雪崩:大量key同时失效,大量请求发送到db上,导致db宕机。

解决办法:设置key过期时间时,使用随机数

二 缓存穿透:大量请求请求一个缓存中没有的key,这些请求直接怼到db上,造成宕机。如发送为负数的入参时。(一般为黑客侵入)

解决办法:1.加入入参的验证,防止非法入参。

2.nginx加入拦截,防止同一个ip大量的请求。

3.使用布隆过滤器判断数据库是否存在,不存在直接返回。

三 缓存击穿:热点key突然失效,大量的请求怼到db,db宕机。

解决办法:1:设置热点缓存不过期

2:加入互斥锁

  1. redis 单线程还是多线程 为什么单线程还是这么快(>10)

一.纯内存操作

二.核心是基于非阻塞的 IO 多路复用机制

三.单线程反而避免了多线程的频繁上下文切换问题

  1. 描述一下redis的持久化(>10)

RDB:RDB做镜像全量持久化,将redis所有的数据以二进制保存,RDB会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据。他是隔一段时间开启子线程,持久化这段时间的数据。

AOF:增量持久化,保存当前一秒或者当条指令,以文本保存

  1. redis与数据库数据一致性如何解决(>12)

先删缓存,再更新数据库,然后采用双删一致

最常用中间件,建议必须掌握。小公司使用的背景大多数是利用key过期时间保存token,或者利用redis原子性,计数使用,可能有少量从缓解数据库压力考虑。所以后几道题目应用的很少,但是,这种常用中间价在面试前应该背一下的。

7.4 mycat(简历有再问)

  1. 什么环境使用mycat(>5)

  2. 分库分表的背景(>5)

  3. 当前环境是否适合分库分表

  4. mycat原理(>7)

  5. 分库分表后怎么关联查询,分页,排序(>8)

很少使用,楼主也没有过应用经验,但是简历有写还是会问的。这里就不献丑提供经验了。没必要死记硬背。

八.代码规范


  1. idea格式化代码的快捷键是什么(>5)

ctrl+alt+l

  1. 是否对自己编写的接口建立接口规范(>7)

建议了解阿里规范

  1. 是否对自己建立的表建立规范(>7)

建议了解阿里规范

  1. 是否对自己编写的代码树立规范(>7)(>7)

建议了解阿里规范

  1. 类和注释经常写吗,是怎么实现的(>7)

建议了解阿里规范

  1. 对于规范是否有插件或者自己的体系检查

建议了解阿里 p3c

  1. 使用什么接口文档,其中需要注意什么。

对于我来说,一个良好的编写习惯是优秀程序猿必不可少的品质,无论在日常的编写还是以后作为teamleader或是管理者,是一定需要的。否则怎么跟小弟装b,这里我会重点问一下,可惜,达到要求的很少。我感觉如果在面试过程中突出表现自己有这方面经验,会脱颖而出。

九.多线程


  1. 如何理解多线程(>5)

如果不使用多线程 只有一件事干完才能干另一件事 那么你在听歌时候只有听歌的线程在执行 就不能评论,而是用多

线程后可以在听歌时候同时评论 同时提高对内存的使用率 避免内存空闲(但是不能创建太多线程,速度会变慢)

  1. 描述一下线程状态 (>8)

使用 new 关键字和 Thread 类或其子类建立一个线程对象后,该线程对象就处于新建状态。它保持这个状态直到程序

start() 这个线程。

就绪状态:

当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度

器的调度。

运行状态:

如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,

它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态:

如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞

状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种:

等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。

同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。

其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超

时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。(注意,sleep是不会释放持有的

锁)

死亡状态:

一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。

  1. 介绍一下线程池(>8)

Java中开辟出了一种管理线程的概念,这个概念叫做线程池,有以下优点

(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用

线程池可以进行统一的分配,调优和监控。

  1. 什么是线程安全 ,介绍几个java中线程不安全的类或方法 (>8)

多次执行线程,结果不变,那么线程安全

StringBuilder,simpledateformat等

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

一份还热乎的蚂蚁金服面经(已拿Offer)面试流程4轮技术面+1轮HR

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
:

当线程对象调用了start()方法之后,该线程就进入就绪状态。就绪状态的线程处于就绪队列中,要等待JVM里线程调度

器的调度。

运行状态:

如果就绪状态的线程获取 CPU 资源,就可以执行 run(),此时线程便处于运行状态。处于运行状态的线程最为复杂,

它可以变为阻塞状态、就绪状态和死亡状态。

阻塞状态:

如果一个线程执行了sleep(睡眠)、suspend(挂起)等方法,失去所占用资源之后,该线程就从运行状态进入阻塞

状态。在睡眠时间已到或获得设备资源后可以重新进入就绪状态。可以分为三种:

等待阻塞:运行状态中的线程执行 wait() 方法,使线程进入到等待阻塞状态。

同步阻塞:线程在获取 synchronized 同步锁失败(因为同步锁被其他线程占用)。

其他阻塞:通过调用线程的 sleep() 或 join() 发出了 I/O 请求时,线程就会进入到阻塞状态。当sleep() 状态超

时,join() 等待线程终止或超时,或者 I/O 处理完毕,线程重新转入就绪状态。(注意,sleep是不会释放持有的

锁)

死亡状态:

一个运行状态的线程完成任务或者其他终止条件发生时,该线程就切换到终止状态。

  1. 介绍一下线程池(>8)

Java中开辟出了一种管理线程的概念,这个概念叫做线程池,有以下优点

(1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

(2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。

(3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用

线程池可以进行统一的分配,调优和监控。

  1. 什么是线程安全 ,介绍几个java中线程不安全的类或方法 (>8)

多次执行线程,结果不变,那么线程安全

StringBuilder,simpledateformat等

总结

面试建议是,一定要自信,敢于表达,面试的时候我们对知识的掌握有时候很难面面俱到,把自己的思路说出来,而不是直接告诉面试官自己不懂,这也是可以加分的。

以上就是蚂蚁技术四面和HR面试题目,以下最新总结的最全,范围包含最全MySQL、Spring、Redis、JVM等最全面试题和答案,仅用于参考

[外链图片转存中…(img-hsZMktXC-1713542642869)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-Xg4ppE1r-1713542642869)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值