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

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

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

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

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

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

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

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

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

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

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

求职者: 当然可以。最近我主要参与了一个电商平台的后端开发项目。在这个项目中,我负责商品管理模块,实现了商品的增删改查功能,以及与订单系统的对接。我们使用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进行处理,比如移除分数最低的元素或者重置分数。此外,我们还可以使用滑动窗口算法来保留最近一小时内的热搜数据。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能医疗:人工智能在医疗领域的革命性突破

在当今科技日新月异的时代,人工智能的蓬勃发展正在为医疗行业带来前所未有的革命性变革。其中,以其独特的智能诊断能力和个性化医疗服务,引领着医疗技术的飞速进步,而这一切的核心就是智能医疗系统。 智能医疗系统不仅仅是简单的…

ROS摄像机标定

文章目录 一、环境准备二、摄像头标定2.1 为什么要标定2.2 标定前准备2.2.1 标定板2.2.2 摄像头调焦 2.3 开始标定2.4 测试标定结果 总结参考资料 一、环境准备 安装usb_cam相机驱动 sudo apt-get install ros-noetic-usb-cam 安装标定功能包 sudo apt-get install ros-noet…

MySql 函数和表达式索引

MySQL 支持使用函数和表达式来创建索引,这通常被称为函数式索引或表达式索引。这样的索引在某些情况下非常有用,特别是当你需要基于某个函数的计算结果进行快速查询时。 1. 函数式索引 函数式索引是基于某个函数的结果创建的索引。 例如,你…

深度学习——常用激活函数解析与对比

1、 简介 在神经网络中,激活函数扮演着至关重要的角色。它们的主要目的是引入非线性因素,使得网络能够学习和表示更加复杂的函数映射。以下是激活函数应具备的特点,以及这些特点为何重要的详细解释: 引入非线性有助于优化网络&am…

【Ant-Desgin-React 步骤条】步骤条配合组件使用

步骤条配合组件使用 基础使用多分组进度 基础使用 /* eslint-disable no-unused-vars */ import React, { useState } from react import { Button, message, Steps, theme } from antd import After from ./components/after import Now from ./components/now const steps …

Docker 安装 Mongo

创建宿主机目录 在你的宿主机上创建必要的目录来存储 MongoDB 的数据和配置文件。这样做可以保证即使容器被删除,数据也能得到保留。 mkdir -p /develop/mongo/data mkdir -p /develop/mongo/config创建 MongoDB 配置文件 创建一个名为 mongod.conf 的 MongoDB 配…

RestfulApi RestTemplate代码规范介绍

1.介绍 1.1 RestfulApi Restful API 是一种设计风格,代表了使用 HTTP 协议构建 web 服务的一种架构原则。REST(Representational State Transfer)的核心思想是,通过 URL 定位资源,使用 HTTP 方法(GET, POS…

C++中容易遗忘的知识点一

文章目录 前言一、数据类型二、运算符按位运算符 三、分支和循环四、数组五、字符串六、结构体七、指针const和指针:看const在 * 哪一边 总结 前言 C语法基础,涉及牛客网上刷题 一、数据类型 1.一个字节8位 2.int是2个字节,float是4个字节…

MySQL多版本并发控制mvcc原理浅析

文章目录 1.mvcc简介1.1mvcc定义1.2mvcc解决的问题1.3当前读与快照读 2.mvcc原理2.1隐藏字段2.2版本链2.3ReadView2.4读视图生成原则 3.rc和rr隔离级别下mvcc的不同 1.mvcc简介 1.1mvcc定义 mvcc(Multi Version Concurrency Control),多版本并发控制,是…

golang学习笔记(defer基础知识)

什么是defer defer语句用于golang程序中延迟函数的调用, 每次defer都会把一个函数压入栈中, 函数返回前再把延迟的函数取出并执行。 为了方便描述, 我们把创建defer的函数称为主函数, defer语句后面的函数称为延迟函数。延迟函数…

npm常用的命令大全(2024-04-21)

nodejs中npm常见的命令 npm主要是node包管理和发布的工具。 npm官网网址:npm | Homehttps://www.npmjs.com/官网英文文档: npm DocsDocumentation for the npm registry, website, and command-line interfacehttps://docs.npmjs.com/about-npm官网中文文…

同城便民信息小程序源码系统:相亲交友+拼车顺风车功能 带完整的安装代码包以及搭建教程

在信息化、数字化的时代,人们的生活越来越离不开各种智能应用。其中,小程序作为一种轻量级、便捷的应用形式,正逐渐渗透到我们日常生活的方方面面。今天,我们要介绍的这款“智慧同城便民信息小程序源码系统”,不仅集成…

SQL仓库

1. 查表中数据个数 select count(*) from table_name where condition 2. 删除表中数据 delete from table_name where condition 3.筛选符合条件数据并且将结果根据条件公式求和 SELECTsum(case when transaction_state B then transaction_amountwhen transaction_stat…

.cn是几级域名?

.cn是中国的国家顶级域名(ccTLD),在互联网域名系统中起着重要的作用。在本文中,我们将重点探讨.cn域名的层次结构和级别,并解释每个级别的含义和应用。 一、域名的层次结构 域名采用了一种典型的层次结构&#xff0c…

基于享元模式实现连接池

享元模式 结构 享元(Flyweight )模式中存在以下两种状态: 1. 内部状态,即不会随着环境的改变而改变的可共享部分。 2. 外部状态,指随环境改变而改变的不可以共享的部分。享元模式的实现要领就是区分应用中的这两 种…

jitpack发布,记录一个异常

异常日志(全文): Init SDKMan Found Android manifest Android SDK version: . Build tools: Found gradle Gradle build script WARNING: gradle/wrapper/gradle-wrapper.jar does not exist! Needs to be committed.ERROR: Gradle wrapper not found. Please ad…

每日一题:跳跃游戏II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…

CAS机制(Compare And Swap)源码解读与三大问题

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java源码解读-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 原子性问题 3. 乐观锁与悲观锁 4. CAS操作 5. CAS算法带来的…

西米支付:支付行业中,“清算、结算、清结算”之间的区别

做支付最头疼的三个词莫过于“清算、结算、清结算”&#xff0c; 傻傻分不清&#xff0c;偶尔清晰偶尔混沌&#xff0c;有时候吧觉得自己很清晰了&#xff0c;突然跟别人聊天或者看书、看文章时又觉得糊涂起来了&#xff0c;在一些场景里好像很清晰&#xff0c;但是到了另一些…