2021年.Net高级开发工程师面试题

  • A+
所属分类:.NET技术
摘要

心之所向,勇往直前!
记录面试中的那些小事。   请解释什么是强类型、弱类型

心之所向,勇往直前!
记录面试中的那些小事。

正文

   请解释什么是强类型、弱类型

    强类型:指定明确的数据类型,如: int a = 1

    弱类型:没有指定明确的数据类型,会在程序运行的时候解析数据类型,如: var a = 1

 

   你是如何保证系统是高可用的(结合自己项目讲解最好,不一定需要行业内很复杂的方案)参考资料

    高可用就是减少程序停机的可能性,常用做法是负载均衡 + 集群。

    a. nginx负载均衡 + 前后端分离 + Api微服务 + 集群

    b. Redis可以启用哨兵模式或者cluster

    c. MQ集群

    d. 数据库主从

 

   什么情况下会产生死锁

    当两个进程同时竞争相同资源时,如在A中获取1号资源后加锁再获取2号资源,同时B先获取2号资源加锁,再去获取1号资源,两者会进入死锁状态。 

    a. 互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用

    b. 请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放

    c. 占有申请条件:进程自己已经至少保持一个资源,又请求其他资源,但是这个资源被其他进程占有,而且又不释放自己已经占有的资源

    d. 循环等待条件:发生死锁时,必定会形成一个进程——资源的环路。

 

   如何避免死锁的发生?参考资料

    a. 尽量让事务按顺序执行。

     b. 将大事务拆成多个小事务执行

    c. 读写分离

    d. 避免编写需要用户交互的事务

 

   什么是乐观锁、悲观锁?参考资料

    乐观锁:假设数据一般情况不会造成冲突,通过给数据添加Version列来实现并发控制

    悲观锁:数据库锁,具有极强的独占、排他性。比较少用。

      - 共享锁:也称读锁,多个事务中只能读不能改

      - 排他锁:也称写锁,获取到锁的事务拥有读和写的权限,其他事务不能再获取资源的一切锁

      

    什么是脏读、幻读、不可重复读,如何避免?参考资料

     脏读:指一个事务中访问到了另外一个事务未提交的数据,当事务A出现回滚时,事务B的读取到的将是脏数据(被事务A修改过的)

     幻读:指一个事务中两次相同的查询,得到的数据量不一致

      不可重复读:指一个事务两次相同的查询,得到的结果不一致

 

    你都了解哪些ORM?

     Entity Framework,Dapper,NHibernate

 

    你都了解哪些MQ?参考资料

     a. ActiveMQ

      b. RocketMQ

      c. RabbitMQ

      d. Kafka

 

    一般什么业务场景下会使用MQ

     使用MQ是为了解耦、异步、消峰。

     a. 系统只能承受2000人并发,但出秒杀活动时出现5000并发,此时使用队列可让多余的请求等待。

     b. 有多个系统需要同时获取相同数据的时候

 

    如何保证MQ的幂等性(不会重复消费)

      a. 在写库时先查询一次是否已经存在,存在则Update

      b. 如果是Set到Redis中具有天然幂等性

      c. 主键唯一

 

    如何保证MQ的可靠性(不会丢失数据) 参考资料

       a. 生产阶段:要捕获消息发送错误,并重发消息

       b. 储存阶段:数据持久化,集群

       c. 消费阶段:确认业务逻辑都完成后再发送确认消息

 

    MQ消息积压如何处理

       a. 部分业务可以采取限流操作,减少消息的产生

      b. 对Broker进行扩容处理

      c. 增加消费端

 

     你都了解哪些数据库?

       a. Access:基于Windows的关系型小型数据库。数据量大会出现性能问题

       b. Sqlite:开源、轻量级嵌入式数据库、简单配置、无需安装

        - 不支持高并发

        - 适用数据量小

       c. MySql: 关系型、体积小、查询速度快,支持上千万数据量查询

        - 不是完全开源免费

       d. Sqlserver:功能全面,商业型数据库,Windows Server部署时优先选用

       e. Oracle:功能全面,商业型数据库,大型项目/Linux部署优先选用

       f. MongoDB:开源、文档型NoSql数据库,查询性能极高,有丰富的社区支持

        - 不支持事务

        - 占用磁盘

 

     知道数据库索引类型有哪些吗?

       a. 聚集索引:聚集索引全表只能有一个,比如主键

       b. 非聚集索引:可以有多个

 

     使用索引的优缺点

       a. 优点:提升查询速度

       b. 缺点:增加维护成本,降低增、删、改速度

    

    你了解过哪些缓存技术?

       a. Redis

        - 单线程

        - 支持多种数据类型:list、set、hash、string、zset

        - 支持持久化RDB和AOF两种模式

        - 支持事务

       b. Memcached

        - 多线程

        - 支持Key-Value型

        - 不支持持久化,可靠性低

        - 通过cas命令保证数据一致性

结语

  本篇到此结束,如果有任何疑问或者指正,请发表在评论区。