Skip to content

试题列表(真实面试250610)

1. string str = null""string.Empty 有什么区别?

解答
  1. null:表示字符串引用为空,没有分配堆内存实例,调用任何实例方法会抛出NullReferenceException
  2. "":空字符串实例,已分配内存,长度为0,是合法字符串对象;
  3. string.Empty:静态只读空字符串常量,本质等价于"",更规范、节省重复实例开销,推荐业务使用。

2. StringStringBuilder 有什么区别?

解答
  1. stringString):不可变字符串,每次修改、拼接都会生成新对象,频繁操作会产生大量内存垃圾;
  2. StringBuilder可变字符容器,内部维护字符缓冲区,增删拼接不会新建对象,循环高频拼接场景性能更强;
  3. 适用场景:短字符串简单操作用string;循环拼接、大量文本组装使用StringBuilder

3. 接口和抽象类的区别是什么?

解答
对比项接口interface抽象类abstract class
继承限制支持多实现仅支持单继承
成员限制无字段、无构造函数(C#8前仅抽象成员)可包含字段、构造函数、普通方法
访问修饰默认public可自定义public/private/protected
设计目的定义行为规范、能力契约抽取公共代码、实现模板复用

4. 委托是什么?在什么场景下使用?

解答
  • 委托是一种方法类型安全的引用类型,可以将方法作为参数传递、存储与调用;
  • 内置常用委托:Func<T>(带返回值)、Action(无返回值)、Predicate<T>(返回布尔);
  • 适用场景:回调函数、事件绑定、异步回调、策略模式、解耦业务逻辑、批量方法执行。

5. 如何实现懒汉式单例?

解答

线程安全懒汉式(双重检查锁 DCL) 标准实现:

csharp
public class Singleton
{
    private static Singleton _instance;
    private static readonly object _lockObj = new object();
    // 私有构造,禁止外部实例化
    private Singleton() { }

    public static Singleton GetInstance()
    {
        if (_instance == null)
        {
            lock (_lockObj)
            {
                if (_instance == null)
                {
                    _instance = new Singleton();
                }
            }
        }
        return _instance;
    }
}

懒汉特点:首次使用才创建实例,延迟加载,节省资源。

6. 数据库中死锁的成因与解决方案?

解答

成因

  1. 多个事务互相持有对方需要的锁,循环等待资源释放;
  2. 事务执行顺序不一致、长事务、不合理的锁级别(行锁升级表锁)。

解决方案

  1. 统一数据表操作执行顺序,避免循环等待;
  2. 缩短事务执行时长,避免事务中嵌套复杂逻辑;
  3. 合理设置隔离级别,减少悲观锁使用;
  4. 开启数据库死锁检测,自动回滚牺牲较小事务;
  5. 使用nolock查询、乐观锁(版本号)规避锁竞争。

7. 如何设计一个积分模块?(支持过期、优先扣除)

解答
  1. 数据表设计
  • 用户积分主表:记录总积分、冻结积分、可用积分;
  • 积分流水表:记录增减、来源、过期时间、积分批次、状态。
  1. 核心规则
  • 积分批次化管理:每笔发放积分绑定过期时间
  • 扣除策略:采用先过期先扣除原则,优先消耗即将到期积分;
  • 定时任务:定时清理过期积分、扣减失效额度。
  1. 核心能力
  • 积分发放、消费、退回、冻结/解冻;
  • 过期自动失效、流水溯源查询;
  • 分布式场景增加分布式锁,防止超扣、并发异常。
最近更新