六个月滴滴实习:轻松、舒心又高薪!

不久前,一位在滴滴后端研发部门实习了六个月的小伙伴在牛客网上分享了他的实习体验, 作者详细描述了他在滴滴的实习生活。

从他的叙述中,我们可以感受到与其他互联网公司相比,滴滴的工作环境显得相对轻松和舒适

他提到,自己在西二旗附近的两个职场工作过,环境优美,绿植环绕,配备的办公设备也是业内顶尖水准

滴滴的工作福利虽然没有过多花哨的项目,但在基本饮食上做得很不错,尤其是晚餐的选择多样,价格合理。

此外,工作氛围友好,工作与生活的平衡得到了良好的保证,很少有加班的情况,且员工与领导之间关系融洽,相互尊重。

更重要的是,作为北京互联网行业的一份子,滴滴为实习生提供的薪资待遇也是相当可观的。这样的工作稳定性和收入水平,对于很多正在寻找实习机会的年轻人来说,无疑具有很大的吸引力。

在这篇分享中,这位同学不仅带给我们滴滴轻松舒适的工作环境感受,更向我们展示了在这家公司实习的独特价值和体验。

在最后,他分享了滴滴一面的面试问题,让我们跟随他的步伐,看看滴滴面试的难度呢。

-----------------------------开始面试------

面试官: 你好,欢迎参加今天的面试。首先,能否讲讲你最近参与的项目?

求职者: 当然可以。最近我主要参与了一个电商平台的后端开发项目。在这个项目中,我负责商品管理模块,实现了商品的增删改查功能,以及与订单系统的对接。我们使用Spring Boot作为主要框架,利用MyBatis进行数据持久化操作,并且通过Redis实现了商品信息的缓存,以提高系统的响应速度。

面试官: 很好。请解释一下接口和抽象类的区别?

求职者: 接口和抽象类都可以用来定义抽象类型,但它们有几个主要区别。首先,接口可以定义方法签名,但不能包含方法实现(除了Java 8中的default方法),而抽象类可以包含方法实现。其次,一个类可以实现多个接口,但只能继承一个抽象类。此外,接口主要用于定义类型的契约,而抽象类则更多地被用来共享方法实现。

面试官: 那Java 8为什么要在接口中增加default方法呢?

求职者: Java 8中引入default方法主要是为了增强接口的功能和提供向后兼容的能力。通过default方法,接口可以有具体的实现,这样,当一个接口需要扩展新的方法时,不会破坏已有的实现类。这对于在不改变现有代码基础上扩展API非常有用。

面试官: 你能说说在什么情况下会使用接口或抽象类吗?

求职者: 通常,如果我们要定义一组类型必须遵守的契约,而不关心具体实现,那么就使用接口。如果我们既想定义契约又想提供一些方法的默认实现,那么可以使用抽象类。简而言之,如果多个类之间有很强的是“有能力做”的关系,用接口;如果是“是一个”的关系,使用抽象类更合适。

面试官: 谈谈synchronized的底层实现。

求职者: synchronized在底层主要通过对象监视器(Monitor)来实现同步。在JVM中,对象头会存储锁的状态和指向锁记录的指针。当一个线程尝试进入同步块时,它会检查对象头的标记字段。如果未被锁定,JVM会将锁的所有权标记为当前线程,并允许进入同步块。如果对象已被其他线程锁定,当前线程将会被阻塞,直到锁被释放。

面试官: 说说线程池的参数。

求职者: Java中线程池的核心参数包括:

  1. corePoolSize:核心线程数,即使线程是空闲的,线程池也会尽量维持该数量的线程。
  2. maximumPoolSize:最大线程数,线程池允许创建的最大线程数。
  3. keepAliveTime:当线程数大于核心线程数时,这是多余空闲线程在终止前等待新任务的最长时间。
  4. unitkeepAliveTime的时间单位。
  5. workQueue:工作队列,用于存放等待执行的任务。
  6. threadFactory:线程工厂,用于创建新线程。
  7. handler:拒绝策略,当任务太多来不及处理时,如何拒绝任务。

面试官: 谈谈MySQL索引的底层实现。为什么用B+树不用B树


求职者: MySQL索引的底层实现一般使用的是B+树数据结构。B+树相对于B树的优势在于它有更高的查询性能和范围查询能力。B+树的所有值都存在于叶子节点,并且叶子节点之间是相互链接的,这使得范围查询可以通过遍历叶子节点的链表来高效完成。而B树的值分布在整个树中,不利于快速范围检索。此外,B+树的内节点不存储数据,只存储键值,这意味着相同高度的B+树可以拥有更多的节点,减少了树的高度,从而减少了磁盘IO次数。


面试官: Spring事务的底层实现是如何的?


求职者: Spring事务的底层实现主要基于AOP(面向切面编程)和事务抽象。当一个方法被@Transactional注解标记时,Spring会通过AOP为这个方法创建一个代理,该代理会在方法执行前后添加事务管理的逻辑。如果方法执行期间没有异常发生,那么事件顺利进行。

面试官: 那么,MySQL索引的底层实现是什么?

求职者: MySQL索引的底层实现主要是通过B+树数据结构,特别是InnoDB存储引擎的默认索引类型。B+树是一种平衡多路查找树,它可以保持数据排序,同时支持快速的插入、删除和查找操作。在B+树中,所有的值都存在叶子节点上,而且叶子节点之间是以链表形式相连的,这对于范围查询非常有效。

面试官: 为什么使用B+树而不是B树作为索引结构?

求职者: B+树相比B树有几个优点使其更适合用作数据库索引:

  1. B+树的磁盘读写性能更优,因为它的内部节点不存储数据,只存储键值,这样可以有更多的键值放在同一页面,减少了IO次数。
  2. B+树的查询性能更加稳定,因为所有查询都要查找到叶子节点,查询路径的长度相同。
  3. B+树的叶子节点之间是相互链接的,这使得范围查询更加高效

面试官: 谈谈Spring事务的底层实现机制。

求职者: Spring事务的底层是通过AOP(面向切面编程)和事务抽象来实现的。当在方法上使用@Transactional注解时,Spring会通过AOP在运行时创建一个代理,该代理会在方法执行前后添加事务管理的逻辑。如果方法执行成功,事务就会提交;如果方法执行过程中出现异常,则会回滚事务。Spring事务抽象还允许开发者定义事务的传播行为和隔离级别。

面试官: 那么在什么情况下Spring事务可能会失效

求职者: Spring事务可能会在以下几种情况下失效:

  1. 私有方法或非公共方法上使用@Transactional,因为Spring事务代理默认只能应用于公共方法。
  2. 同一个类内部的方法调用,这种情况下事务的传播不会生效。
  3. 方法没有抛出运行时异常或指定的异常,事务默认只在出现运行时异常时回滚。
  4. 事务管理配置错误,如事务管理器没有正确配置或没有启用注解驱动的事务管理。

面试官: 讲讲Redis的基本数据结构

求职者: Redis支持的基本数据结构包括:

  1. String:字符串,可以包含任何数据,如文本或二进制数据。
  2. List:列表,可以在头部或尾部添加元素,实现栈或队列的功能。
  3. Set:集合,存储不重复的元素,支持集合间的运算如并集、交集。
  4. Hash:哈希表,用于存储对象及其属性。
  5. ZSet (Sorted Set) :有序集合,元素存储时会关联一个分数,按分数进行排序。

面试官: 那ZSet数据结构是由哪些部分组成的,以及常用的命令有哪些?

求职者: ZSet是由一对一映射的有序键值对组成的,每个元素都有一个分数(score) ,用来进行排序。常用的命令包括:

  1. ZADD:向ZSet添加元素。
  2. ZRANGEZREVRANGE:根据排名范围获取元素。
  3. ZRANGEBYSCOREZREVRANGEBYSCORE:根据分数范围获取元素。
  4. ZREM:删除元素。
  5. ZINCRBY:增加元素的分数。

面试官: 最后一个工程题,如何使用ZSet实现724小时的热搜词排行榜,并每小时更新?

求职者: 使用Redis的ZSet来实现热搜词排行榜是非常合适的。我们可以将热搜词作为键,搜索次数作为分数存入ZSet。每当有新的搜索请求时,我们可以使用ZINCRBY命令来增加该热搜词的分数。为了实现每小时更新,我们可以设置一个定时任务,每小时对ZSet进行处理,比如移除分数最低的元素或者重置分数。此外,我们还可以使用滑动窗口算法来保留最近一小时内的热搜数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/572883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot-基础操作,常用工具,配置文件

lombok工具 首先将lombok的依赖引入 Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。 日志操作 自定义日志打印 有以下两步: 在一个类中先获…

Https协议原理剖析【计算机网络】【三种加密方法 | CA证书 】

目录 一,fidler工具 前提知识 二,Https原理解析 1. 中间人攻击 2. 常见的加密方式 1). 对称加密 2). 非对称加密 对称加密 4). CA证书 1. 数据摘要 3. 数字签名 CA证书 理解数据签名 存在的安全疑问&am…

根据当年节假日和非工作时间计算请假时间-获取每个月的节假日,计算每个月的工作日时间进度,节假日每年更新

根据需求请假时间要排除法定节假日和非工作时间 1.获取当年的节假日 节假日是每年更新的,没有固定接口,需要手动录入 个人根据官方的节假日整理了当年的所有节假日,可以根据个人需求进行修改 // 获取每个月的节假日,如果当月没…

数据结构入门——排序(代码实现)(下)

int GetMidi(int* a, int left, int right) {int mid (left right) / 2;// left mid rightif (a[left] < a[mid]){if (a[mid] < a[right]){return mid;}else if (a[left] > a[right]) // mid是最大值{return left;}else{return right;}}else // a[left] > a[mid…

c++二叉树的进阶--二叉搜索树

1. 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点的值 它的左…

R-Tree与其他空间索引结构的对比

文章目录 R-Tree vs Quadtree/OctreeR-Tree vs kd-TreeR-Tree vs BSP TreeR-Tree vs Hilbert R-Tree总结Python: 使用rtree库实现R-TreeJavaScript: 使用rbush库实现kd-Tree R-Tree是一种广泛使用的空间索引结构&#xff0c;尤其适用于处理多维空间数据。然而&#xff0c;还有其…

电脑上怎么调照片尺寸?怎么压缩图片为144×144

在一些社交媒体平台通常要求用户上传头像&#xff0c;并对其进行裁剪和调整大小&#xff0c;144x144像素是常见的头像尺寸之一&#xff0c;适合在社交媒体上展示个人头像或者小图标&#xff0c;为了可以保证图片的画质&#xff0c;我们尽量会选择专业的图片处理工具来完成操作。…

OpenAI推出强化企业级安全与成本管理新功能

欢迎大家在 GitHub 上 Star 我们&#xff1a; 分布式全链路因果学习系统 OpenASCE: https://github.com/Open-All-Scale-Causal-Engine/OpenASCE 大模型驱动的知识图谱 OpenSPG: https://github.com/OpenSPG/openspg 大规模图学习系统 OpenAGL: https://github.com/TuGraph-…

探索在Apache SeaTunnel上使用Hudi连接器,高效管理大数据的技术

Apache Hudi是一个数据湖处理框架&#xff0c;通过提供简单的方式来进行数据的插入、更新和删除操作&#xff0c;Hudi能够帮助数据工程师和科学家更高效地处理大数据&#xff0c;并支持实时查询。 支持的处理引擎 Spark Flink SeaTunnel Zeta 主要特性 批处理 流处理 精确一次性…

Linux——(grep指令及zip/tar压缩指令)

1.grep指令 语法&#xff1a; grep【选项】查找字符串 文件 功能&#xff1a; 在文件中搜索字符串&#xff0c;将找到的行打印出来 常用选项&#xff1a; -i &#xff1a;忽略大小写&#xff0c;所以大小写视为相同 -n &#xff1a; 顺便输出行号 -v &#xff1a;反向选择&…

DDD领域驱动设计总结和C#代码示例

DDD&#xff08;领域驱动设计&#xff09;是一种软件设计方法&#xff0c;它强调以业务领域为核心来驱动软件的设计和开发。 DDD 的设计初衷是为了解决复杂业务领域的设计和开发问题&#xff0c;它提供了一套丰富的概念和模式&#xff0c;帮助开发者更好地理解和建模业务领域&…

【管理咨询宝藏88】556页!公司经营分析内部培训

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏88】556页&#xff01;公司经营分析内部培训 【格式】PDF版本 【关键词】经营分析、内部培训、多业务分析 【核心观点】 - 非常全面和详细的公…

Composer初次接触

php一直都是简单处理一下单片机的后台服务&#xff0c;没什么深入研究 今天安装一个 php composer.phar require qiniu/php-sdkComposer完全不懂&#xff0c;照着一试&#xff0c;就报错了 - topthink/think-installer v1.0.12 requires composer-plugin-api ^1.0 -> found…

Python爬虫入门指南--爬虫技术的由来、发展与未来--实战课程大赠送

爬虫&#xff0c;也称为网络爬虫或网络蜘蛛&#xff0c;是一种自动化程序&#xff0c;专门用于遍历互联网并收集数据。这种技术的起源、发展和未来都与互联网紧密相连&#xff0c;并在信息检索、数据挖掘等多个领域发挥着不可或缺的作用。 "免费IP池大放送&#xff01;助…

【汇编语言】流程转移和子程序

【汇编语言】流程转移和子程序 文章目录 【汇编语言】流程转移和子程序前言一、“转移”综述二、操作符offset三、jmp指令jmp指令——无条件转移jmp指令&#xff1a;依据位移进行转移两种段内转移远转移&#xff1a;jmp far ptr 标号转移地址在寄存器中的jmp指令转移地址在内存…

Linux信号(处理)

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言&#xff1a; Linux信号(产生)-CSDN博客 Linux信号(保存)-CSDN博客 前面我们解释了信号的产生和保存&#xff0c;接下来我们就要解释信号的处理&#xff0c;关于操作系统在合适的时候对信号进行处理&#xff0c;合适…

C++奇迹之旅:从0开始实现日期时间计算器

文章目录 &#x1f4dd;前言&#x1f320; 头文件Date.h&#x1f309;日期计算函数&#x1f320;前后置&#x1f309;前后置-- &#x1f320;两对象日期相减&#x1f309;自定义流输入和输出 &#x1f309; 代码&#x1f309; 头文件Date.h&#x1f320;Date.cpp&#x1f309; …

(windows ssh) windows开启ssh服务,并通过ssh登录该win主机

☆ 问题描述 想要通过ssh访问win主句 ★ 解决方案 安装ssh服务 打开服务 如果这里开不来就“打开服务”&#xff0c;找到下面两个开启服务 然后可以尝试ssh链接&#xff0c;注意&#xff0c;账号密码&#xff0c;账号是这个&#xff1a; 密码是这个 同理&#xff0c;如果…

matlab新手快速上手5(蚁群算法)

本文根据一个较为简单的蚁群算法框架详细分析蚁群算法的实现过程&#xff0c;对matlab新手友好&#xff0c;源码在文末给出。 蚁群算法简介&#xff1a; 蚁群算法是一种启发式优化算法&#xff0c;灵感来源于观察蚂蚁寻找食物的行为。在这个算法中&#xff0c;解决方案被看作是…

vue3中的ref、isRef、shallowRef、triggerRef和customRef

1.ref 接受一个参数值并返回一个响应式且可改变的 ref 对象。 ref 对象拥有一个指向内部值的单一属性 .value property &#xff0c;指向内部值。 例&#xff1a;此时&#xff0c;页面上的 str1 也跟着变化 <template><div><button click"handleClick&quo…