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


    心之所向,勇往直前!
    记录面试中的那些小事。面试题只是一道门,最好还是走进屋里看看。

    正文

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

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

        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命令保证数据一致性

    结语

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

  • 相关阅读:
    [leedcode 155] Min Stack
    [leedcode 154] Find Minimum in Rotated Sorted Array II
    [leedcode 153] Find Minimum in Rotated Sorted Array
    [leedcode 151] Reverse Words in a String
    [leedcode 150] Evaluate Reverse Polish Notation
    [leedcode 149] Max Points on a Line
    maven记录
    intelij idea常用功能介绍
    intelij idea设置和使用git
    intelij idea模板
  • 原文地址:https://www.cnblogs.com/AssertionBird/p/14883227.html
Copyright © 2020-2023  润新知