欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-08-12 08:17:41
心之所向,勇往直前!记录面试中的那些小事。面试题只是一道门,最好还是走进屋里看看。 正文 请解释什么是强类型、弱类型 强类型:指定明确的数据类型,如: int a = 1 弱类型:没有指定明确的数据类型,会在程序运行的时候解析数据类型,如: var a = 1 你是如何保证系统是高可用的(结合自己项 ......

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

正文

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

    强类型:指定明确的数据类型,如: 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命令保证数据一致性

结语

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