7.腾讯全栈一面
-
算法题:
- 高精度加法:
高精度加法通常用于处理超出普通数据类型(如int, long)能表示范围的整数加法。可以使用
vector
或string
来表示大整数,并实现加法。- 括号匹配:
使用栈来匹配括号是一种常见的方法。对于每个左括号,将其推入栈中;对于每个右括号,检查栈顶元素是否是相应的左括号,如果是则弹出栈顶元素,否则括号不匹配。
-
Java内容:
- 2.1 数组和链表的区别:
数组是连续的内存空间,因此它支持通过索引快速访问元素,但插入和删除操作需要移动大量元素。链表由节点组成,每个节点包含数据和指向下一个节点的指针,因此链表插入和删除操作效率较高,但不支持快速随机访问。
- 2.2 List的实现:
Java中的List接口有多种实现,包括
ArrayList
、LinkedList
、Vector
和Stack
。ArrayList
基于动态数组实现,LinkedList
基于双向链表实现,Vector
与ArrayList
类似但线程安全,Stack
是Vector
的一个子类,用于实现栈数据结构。- 2.3 常见的集合类:
Java集合框架包括
Set
、List
、Queue
和Map
等接口及其实现类。常见的实现类包括HashSet
、TreeSet
、ArrayList
、LinkedList
、PriorityQueue
、HashMap
、TreeMap
等。- 2.4 存储有序且不重复的数据:
可以使用
TreeSet
,它基于红黑树实现,能够保证元素的有序性和唯一性。- 2.5 线程安全的Map及实现原理、扩容机制:
ConcurrentHashMap
是线程安全的Map实现。它通过分段锁(Segmentation)来降低锁的粒度,提高并发性能。每个Segment相当于一个小的HashMap,内部维护着一个独立的锁。扩容时,会创建一个新的数组,并将旧数组中的元素重新映射到新数组中。-
2.6 Java的锁:
-
synchronized
:内置锁,可重入,通过monitor对象实现。 -
乐观锁:通常通过版本号实现,假设没有冲突,在更新数据前检查版本号是否变化。
-
悲观锁:如
ReentrantLock
,它是一个显式锁,提供比synchronized
更丰富的功能,如可中断的锁获取、尝试非阻塞地获取锁等。
-
-
Redis内容:
-
3.1 Redis的数据类型:
-
String:简单的键值对。
-
List:按照插入顺序排序的字符串列表。
-
Set:无序集合,元素唯一。
-
ZSet(Sorted Set):有序集合,每个元素都有一个分数,根据分数排序。
-
Hash:键值对的集合,适合表示对象。
-
-
3.2 分布式锁实现的原理和方案,程序崩了怎么办:
- 原理:使用Redis的
SETNX
命令(现在推荐使用SET
命令带NX
和PX
选项)来设置一个键,如果键不存在则设置成功,返回1,否则设置失败返回0。设置成功后,该键就代表获取了锁。为了防止程序崩溃导致锁无法释放,通常会为锁设置一个过期时间(使用PX
参数),这样即使程序崩溃,锁也会在过期后自动释放。
- 原理:使用Redis的
-
- 3.3 Zset设计用户行为限流:
可以使用Redis的ZSet来设计一个简单的限流系统。为每个用户维护一个ZSet,以时间戳作为分数,将用户的行为作为成员。当用户进行操作时,可以检查ZSet中最早的行为是否在时间窗口之外,如果是,则移除,然后添加新的行为。通过这种方式,可以限制用户在特定时间窗口内的行为次数。
- 3.4 命令查看Redis信息:
使用INFO
命令可以查看Redis服务器的各种信息和统计数据,如内存使用情况、客户端连接数、持久化状态等。
-
MySQL内容:
-
SQL题目:由于没有具体的题目,无法提供具体的SQL语句。但一般来说,
UPDATE
语句用于修改表中的数据,GROUP BY
语句用于对结果集进行分组。 -
索引有哪些、什么时候加索引、怎么加索引:
-
索引类型:主键索引、唯一索引、普通索引、全文索引、复合索引等。
-
何时加索引:在经常需要搜索、排序、分组的列上添加索引,可以提高查询效率。
-
如何加索引:使用
CREATE INDEX
语句来创建索引,例如:CREATE INDEX idx_column1 ON table_name (column1);
-
-
如何提高查询效率:
-
优化SQL语句,避免使用子查询和复杂的连接。
-
使用合适的索引。
-
减少数据检索量,如使用
LIMIT
限制返回结果的数量。 -
分析查询计划,使用
EXPLAIN
语句查看查询的执行计划。
-
-
MySQL的锁:
-
表锁:锁定整张表,适用于MyISAM存储引擎。
-
行锁:只锁定需要的行,适用于InnoDB存储引擎。
-
-
-
简历上的和其它:
-
通信协议、TCP的好处:
-
可靠传输:通过序列号、确认应答、重传机制等确保数据的可靠传输。
-
流量控制:通过滑动窗口算法来控制发送方的发送速率,避免网络拥塞。
-
拥塞控制:通过慢启动、拥塞避免、快速重传和快速恢复等算法来避免网络拥塞。
-
-
如何自定义Starter:
创建一个Spring Boot Starter通常需要以下步骤:
- RocketMQ如何避免重复消费:
RocketMQ提供了消息幂等性保证,可以通过以下方式避免重复消费:
- GC垃圾回收的流程、原理:
Java虚拟机中的垃圾回收主要包括以下几个阶段:
- 线程池的参数有哪些,怎么用:
线程池的主要参数包括:
-
AOP是什么,有什么用,怎么用,口述一个记录日志的使用过程,如何设计一个AOP,设计模式:
-
AOP(Aspect-Oriented Programming):面向切面编程,是一种编程范式,用于将横切关注点(如日志、事务、安全)与业务逻辑分离。
-
用途:用于在不修改业务逻辑代码的情况下,增加额外的功能。
-
使用:在Spring框架中,可以通过定义切面(Aspect)、通知(Advice)、切点(Pointcut)来使用AOP。
-
日志记录使用
-
-
过程示例:
// 定义一个切面
@Aspect
@Component
public class LoggingAspect {
// 定义切点
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceLayerMethods() {}
// 定义通知
@Before("serviceLayerMethods()")
public void logMethodEntry(JoinPoint joinPoint) {
// 获取方法签名
String methodName = joinPoint.getSignature().getName();
// 获取方法参数
Object[] args = joinPoint.getArgs();
// 记录日志
System.out.println("Entering method: " + methodName + " with arguments " + Arrays.toString(args));
}
@AfterReturning(pointcut = "serviceLayerMethods()", returning = "result")
public void logMethodExit(JoinPoint joinPoint, Object result) {
// 获取方法签名
String methodName = joinPoint.getSignature().getName();
// 记录日志
System.out.println("Exiting method: " + methodName + " with result " + result);
}
}
在这个例子中,我们定义了一个切面LoggingAspect
,它包含一个切点serviceLayerMethods
,这个切点匹配com.example.service
包下的所有方法。我们定义了两个通知:logMethodEntry
在方法执行前记录日志,logMethodExit
在方法执行后记录日志。
如何设计一个AOP:
-
确定切面:识别出需要在哪些地方添加横切关注点。
-
定义切点:使用AspectJ表达式语言定义切点,以确定哪些方法将被拦截。
-
实现通知:根据需要实现@Before、@After、@AfterReturning、@AfterThrowing、@Around等通知。
-
绑定通知和切点:将通知与切点关联起来,确保在正确的时机执行通知逻辑。
设计模式:
AOP本身就是一种设计模式,它通常与以下设计模式结合使用:
-
代理模式(Proxy Pattern):通过代理对象来控制对原始对象的访问。
-
责任链模式(Chain of Responsibility Pattern):通过一系列处理者来处理请求,每个处理者都有机会处理请求。
-
策略模式(Strategy Pattern):定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。
在实现AOP时,Spring框架使用了代理模式,通过代理对象来拦截方法调用,并执行通知逻辑。
以上是对AOP相关内容的详细解释。在实际应用中,AOP提供了一种非常灵活的方式来增加和维护横切关注点,从而使得业务逻辑代码更加简洁和聚焦。
#秋招提前批启动你开冲了吗##简历中的项目经历要怎么写##牛客创作赏金赛##我的成功项目解析##我的失利项目复盘#八股文分类整理 老哥们点点赞,订阅一下,纯福利做数据。