携程实习生一面0514

算法题:

解题思路:

题目给的是排序数组,没说升序降序,已知条件就是相同的数会在一块,可以维护两个指针一个数,一个指向下一个要填充的位置,这个指针之前的都是删除重复项后的。另一个指针指向当前位置,同时维护一个数,表示上一个数。每次比较当前指针和上个数,相同则下一个,不相同则填充到第一个指针。

解题思路:

遍历取子字符串,长度为10,用哈希表记录次数即可。

你对项目掌握多少,是跑起来还是可以实现一些业务还是了解比较深。

提到拦截器,那spring实现拦截器原理是什么

  • JDK动态代理:对于实现了接口的类,Spring可以使用JDK动态代理来创建拦截器的代理对象。JDK动态代理通过反射机制在运行时动态地生成代理类的字节码,并创建代理类的实例。这个代理实例会在调用目标方法时,先执行拦截器的逻辑,然后再调用目标方法。
  • CGLIB动态代理:对于没有实现接口的类,Spring会使用CGLIB动态代理。CGLIB是一个强大的、高性能的代码生成库,它可以在运行时扩展Java类和实现接口。CGLIB通过继承目标类来创建代理对象,因此它不需要目标类实现接口。

AspectJ和AOP中CGlib和jdk动态代理你选择哪个。

  • 如果要被代理的对象是个实现类,那么Spring会使用JDK动态代理来完成操作(Spirng默认采用JDK动态代理实现机制);

  • 如果要被代理的对象不是个实现类那么,Spring会强制使用CGLib来实现动态代理。

JVM内存模型

类加载器、本地接口、执行引擎、方法区、堆、虚拟机栈、本地方法栈、程序计数器

为什么要有JMM

保证原子性、可见性和有序性

synchronized在项目哪里用到的

如果你这个项目集群化部署你这个锁还有什么用

采用分布式锁

Redis分布式锁原理了解过吗

底层原理是redis的单线程保证了并发环境下的原子性

Redis之后引入了多线程,这和你提到单线程有啥区别

  • 在高并发场景下,传统的单线程模型在处理大量网络请求时可能会遇到瓶颈。多线程模型允许多个线程同时处理不同的网络请求,从而大大提高了网络I/O的吞吐量。
  • Redis 为「关闭文件、AOF 刷盘、释放内存」这些任务创建单独的线程来处理,是因为这些任务的操作都是很耗时的,如果把这些任务都放在主线程来处理,那么 Redis 主线程就很容易发生阻塞。

  • 其核心操作主要基于单线程模型。Redis 单线程指的是「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」这个过程是由一个线程(主线程)来完成的。

mysql中唯一索引和主键索引有什么区别

1. 唯一性要求

  • 主键索引:要求索引列的值在整个表中是唯一的,且任何两行数据的主键值都不能相同。同时,主键索引列的值不允许为空(NULL),即每一行都必须有一个主键值。
  • 唯一索引:也要求索引列的值是唯一的,但允许部分行没有索引值,即允许索引列的值为空(NULL)。这意味着可以有多个行的索引列为空,但非空值必须是唯一的。

2. 表中数量

  • 主键索引:每个表只能有一个主键索引,用于唯一标识表中的每一行数据。
  • 唯一索引:一个表中可以有多个唯一索引,允许在多个列或列组合上设置唯一性约束。

3. 索引类型

  • 主键索引:不仅是一种约束,还是一种特殊的索引类型,即聚集索引(Clustered Index)。在聚集索引中,数据行的物理顺序与主键的逻辑顺序一致。
  • 唯一索引:通常是非聚集索引(Non-clustered Index),这意味着数据行的物理顺序与索引的创建顺序或插入顺序无关。不过,需要注意的是,在某些数据库管理系统中,如果表没有定义主键或聚集索引,系统可能会选择唯一索引作为聚集索引的候选者(但这并不是MySQL的默认行为)。

4. 自动增长

  • 主键索引:通常情况下,主键索引会使用自动增长(AUTO_INCREMENT)属性来生成唯一的主键值,特别是在主键为整数类型时。
  • 唯一索引:并不强制要求使用自动增长属性,其值可以由用户手动指定或根据业务规则生成。

你在表里加索引的规则是什么

1. 主键和外键索引

  • 主键索引:表的主键必须建立索引。主键是表中每一行的唯一标识,通过索引可以快速定位到表中的任何一行。
  • 外键索引:外键列通常也应该建立索引。外键用于维护不同表之间的参照完整性,索引可以加速外键约束的检查过程。

2. 数据量考虑

  • 对于数据量超过一定阈值(如300行)的表,建议考虑添加索引以优化查询性能。然而,这个阈值并不是绝对的,需要根据实际情况和数据使用模式来判断。

3. 连接字段索引

  • 如果表经常与其他表进行连接操作,那么在连接字段上应该建立索引。这样可以加速连接查询的速度。

4. 查询条件索引

  • 经常出现在WHERE子句中的字段,特别是大表的字段,应该建立索引。这样可以减少数据库在查询过程中需要扫描的数据量,从而提高查询效率。

5. 选择性高的字段索引

  • 索引应该建在选择性高的字段上。选择性高的字段意味着该字段的唯一值比例较高,索引的效果会更好。

数据量大了之后sql语句效率降低,你对sql语句优化上面有什么了解

  1. 主键索引: 聚簇索引上存储了全部数据, 相比普通索引查询, 减少了回表的消耗.

  2. 主键自增。不自增会导致页分裂。页分裂还有可能会造成大量的内存碎片,导致索引结构不紧凑,从而影响查询效率。

  3. 前缀索引,使用字符串的前几个字符作为前缀索引,提高查询速度。

  4. 索引下推, 索引下推是把本应该在 server 层进行筛选的条件,下推到存储引擎层来进行筛选判断,这样能有效减少回表。

  5. 索引覆盖避免回表。

  6. 最左前缀匹配原则

  7. 小表驱动大表:in 适用于左边大表,右边小表。exists 适用于左边小表,右边大表。

  8. 为经常需要排序、分组、查询和联合操作的字段建立索引

  9. 选择区分度高的列作为索引

  10. 联合索引将高频字段放在最左边

加索引就比不加索引快吗

  1. 小表:对于包含少量记录的小表,索引可能不会带来明显的性能提升,因为全表扫描已经足够快。
  2. 低选择性列:如果索引列包含大量重复值(即选择性低),则索引可能不是最佳选择,因为查询优化器可能会选择忽略它。
  3. 频繁更新的列:在频繁更新的列上创建索引可能会降低数据修改操作的性能,因为索引也需要被频繁更新。

mysql中char和varchar有什么区别,知道长度后选什么

Char(10)表示10位固定字符串,不满10则补空格。

varchar(10)表示存储10个变长的字符,存储多少个就是多少个,空格也按一个字符存储,这一点是和char(10)的空格不同的,char(10)的空格表示占位不算一个字符

知道长度选char

  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

装B且挨揍の

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值