net浅谈
依赖注入:
- 依赖注入是指在 Spring IOC 容器创建对象的过程中,将所依赖的对象通过配置进行注入。我们可以通过依赖注入的方式来降低对象间的耦合度
- 注入的三种方法:构造器方法注入,set注入,基于注解的注入(接口注入)
- 使用set方法进行依赖注入的时候必须给需要注入的对象创建set方法
- 使用构造方法进行注入的时候Bean对象必须有一个带参的构造方法
- 自动注入的方式有两种,一种是全局配置自动注入,另一种是局部配置自动注入。
设计模式解读:
- 设计模式共23种。主要分为三大类:创建型模式、结构型模式、行为型模式。
- 创建型模式:所有的模式都涉及到创建对象实例的方式。
- 结构型模式:如何组合类和对象以获得更大的结构。
- 行为型模式:通常和对象之间的通信有关。
- 六大设计原则:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。
- 创建型模式:简单工厂模式、工厂方法模式、抽象工厂模式、单件模式、生成器模式、原型模式
- 简单工厂模式:又叫做静态工厂方法模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
- 工厂方法模式:提供了一个简单的决策类,它根据提供的数据返回一个抽象基类的多个子类中的一个。
- 抽象工厂模式:提供了一个创建并返回一些列相关对象的接口。
- 单件模式:某个类只能有一个实例。它提供了一个访问该实例的全局访问点。
- 生成器模式:将一个复杂的构建与它的表示分开,这样就能根据程序的需要创建不同的表现形式。
- 原型模式:先实例化一个类,然后拷贝或克隆该类来创建新的实例,可以用公有方法进一步修改这些实例。
- 结构型模式:适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式
- 适配器模式:将一个类的接口传换成另一个类的接口。
- 桥接模式:可以将一个类的接口与它的实现分离,这样可以不用修改客户端代码就能改变或替换实现过程。
- 组合模式:是一个对象的集合,其中的任何一个对象既可以是一个组合,也可以只是一个叶子对象。
- 装饰模式:用一个类包装给定的类,并为它添加新的功能,将所有未改动的方法传递给下面的类。
- 外观模式:将一系列复杂的对象放在一起,并提供一个新的、更简单的访问这些数据的接口。
- 享元模式:把一部分的类数据移到类外部,在执行方法时将数据传递进来,通过这种方式限制那些又小又相似的实例的增加数量。
- 代理模式:为一个比较复杂的对象提供一个简单的占位对象,实例化该复杂对象,在某种程度上比较浪费时间或代价较高。
- 行为型模式:职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式
- 职责链模式:把请求从链中的一个对象传递到下一个对象,直到请求被响应为止。通过这种方式在对象之间去除耦合。
- 命令模式:用简单的对象表示软件命令的执行,支持登陆和取消操作。
- 解释器模式:提供一个如何把语言元素包含在程序中的定义。
- 迭代器模式:提供了一种顺序访问一个类中的一系列数据的方式。
- 中介者模式:定义了如何用一个对象简化对象之间的通信,是对象之间不必相互了解。
- 备忘录模式:定义了如何保存一个类实例的内容以便以后能恢复它。
- 观察者模式:定义了一种把改动通知给多个对象的方式。
- 状态模式:允许一个对象在其内部状态改变时修改它的行为。
- 策略模式:将算法封装到类里。
- 模板方法模式:提供了算法的抽象定义。
- 访问者模式:在不改变类的前提下,为一个类添加多种操作。
反射解读:
- 反射的一切都是围绕着“检查对象及其类型”展开的。是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息
- 反射主要会用到两个类,1是System.Type类,通过这个类可以访问任何给定的数据类型的信息。2是System.Reflection.Assembly类,它可以用于访问给定的程序集的信息
面向对象解读:
- 面向对象开发具有以下优点:
- 代码开发模块化,便于维护。
- 代码复用性强
- 代码的可靠性和灵活性。
- 代码的可读性和可扩展性。
- 封装、继承、多态
- 封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。降低耦合、提高重用性。
- 子类拥有父类的一切属性和行为。可以实现代码的重用,.NET中类只能单继承。
- 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
覆写override、重载overload解读:
- 覆写
- 子类对父类虚方法、抽象方法的重新实现。子类对父类的虚方法可重写也可不重写,对父类的抽象方法,必须重写,都需要用override关键字修饰
- 重载
- 重载只是针对一个类内部的几个参数不同,名称相同的方法。
DDD解读:
- api:用户接口层,向外提供服务
- app:应用层,包含应用服务,负责用例流程调度,事务控制
- domain:领域层,包含领域对象和领域服务,专注核心业务
- infra:基础设施层,提供数据持久化、防腐层实现、第三方库、消息等
一千万的数据,你是怎么查询的 解读:
- 数据存储结构设计;索引设计;数据主键设计;查询方案设计
事务解读:
- 事务简单理解就是更新数据库中各种数据的一个程序执行单元(unit),一个事务严格上必须具备原子性、一致性、隔离性和持久性,简称 ACID。
- 原子性(Atomicity):一个事务内的所有操作要么都执行,要么都不执行。
- 一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,即数据库处理前后结果应与根据业务规则执行后的结果保持一致。
- 隔离性(Isolation):指的是多个事务并发执行的时候不会互相干扰。
- 持久性(Durability):指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响
提交操作(事务成功)
start transaction
DML语句
commit
回滚操作(事务失败)
start transaction
DML语句
rollback
ElasticSearch解读:
- ElasticSearch是一个基于REST接口的为云计算而设计的分布式搜索引擎,它快速、稳定、可靠,可以实时搜索
数据库优化经验解读:
- 数据库运维方面的优化:启用数据库缓存。对于一些比较常用的查询可以采用数据库缓存的机制,部署的时候需要注意设置好缓存依赖项,防止“过期”数据的产生。
- 数据库索引方面的优化:比如常用的字段建索引,联合查询考虑联合索引。(PS:如果你有基础,可以敞开谈谈聚集索引和非聚集索引的使用场景和区别)
- 数据库查询方面的优化:避免select * 的写法、尽量不用in和not in 这种耗性能的用法等等。
- 数据库算法方面的优化:尽量避免大事务操作、减少循环算法,对于大数据量的操作,避免使用游标的用法等等。
擅长的技术解读:
简单谈谈MEF使用吧。
在谈MEF之前,我们必须要先谈谈DIP、IOC、DI
- 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念)
- 控制反转(IoC):一种反转流、依赖和接口的方式(DIP的具体实现方式)。
- 依赖注入(DI):IoC的一种实现方式,用来反转依赖(IoC的具体实现方式)。
什么意思呢?也就是说,我们在软件架构的过程中,层和层之间通过接口依赖,下层不是 直接给上层提供实现,而是提供接口,具体的实现以依赖注入的方式在运行的时候动态注入进去。MEF就是实现依赖注入的一种组件。它的使用使得UI层不直接 依赖于BLL层,而是依赖于中间的一个IBLL层,在程序运行的时候,通过MEF动态将BLL里面的实现注入到UI层里面去,这样做的好处是减少了层与层 之间的耦合。这也正是面向接口编程方式的体现
IOC容器解读:
- IOC即控制反转,是一种设计思想,在之前的项目中,当我们需要一个对象时,需要new一个对象,而IOC的设计思想是我们将需要的对象注入到一个容器中,就会获得我们所需要的资源 。
- IOC和DI IOC是控制反转,DI是依赖注入,控制反转的解释有些模棱两可,而依赖注入就很明确,我们将需要的对象注入到容器中,获取所需要的资源。
- IOC控制反转:正常情况下程序开发是上端调用下端,依赖下端,依赖倒置原则告诉我们,上端不要依赖下端,要依赖抽象,上端只依赖抽象,细节交给第三方工厂(容器)来决定,这就是IOC,就是控制反转——使系统架构可以更稳定,支持扩展。
静态方法与非静态方法解读:
- 调用方法
- 静态方法可以通过 类名.方法名 直接调用。
- 非静态方法只有在对象被实例化之后,即new一个新对象之后,才能通过 对象名.方法名 调用。
- 生命周期
- 静态方法的生命周期与类相同,在类定义的时候静态方法就被分配和装载入内存中,当本进程结束时,才会随之销毁。
- 非静态方法的生命周期和类的实例化对象相同,只有当类实例化了一个对象,非静态方法才会被创建,而当这个对象被销毁时,非静态方法也马上被销毁
删除相同表的重复数据并保存最新的解读:
SELECT * FROM test WHERE
id IN (SELECT id FROM test WHERE s_name IN (SELECT s_name FROM test GROUP BY s_name,DATE_FORMAT(createdata,'%Y-%m-%d' ) HAVING COUNT(DATE_FORMAT(createdata,'%Y-%m-%d')) > 1))
AND id NOT IN (SELECT MAX(id) FROM test GROUP BY s_name,DATE_FORMAT(createdata,'%Y-%m-%d') HAVING COUNT(DATE_FORMAT(createdata,'%Y-%m-%d'))>1);
微服务解读:
-
-
-
-
-
微服务架构是将整体项目分割成项目关联的独立服务,一个服务通常会实现一组独立的功能,包含自己的逻辑,各个微服务之间关联通过暴露api来实现,这些独立的微服务可以部署在不同的服务器,虚拟机或系统中。
-
-
-
-
作者:码魇
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
您的资助是我最大的动力!
金额随意,欢迎来赏!