关于Java、spring、什么是耦合及如何解决数据库的优化

45 篇文章 1 订阅
23 篇文章 0 订阅

java编程模型

1、面向对象编程(OOP):封装性,派生型,多态性。
1.1、封装性:决定了数据的访问限制。
1.2、派生型:决定了上下流的关系。
1.3、多态性:决定了一种接口多种实现。
2、面向切面编程(AOP):拦截判断,拦截执行。
2.1、拦截判断:方法,注解,参数,异常。
2.2、拦截执行:前置,后置,返回,异常。
2.3、什么是面向切面
当我执行一段代码的时候这个地方就会做一定的拦截,会有一些事件和回调的发送。
2.4、AOP实现主要分为 静态代理和动态代理 。
静态代理 主要是 AspectJ
动态代理 主要是 Spring AOP
3、面向元信息编程(MDOP):泛型,反射,注解。
4、面向函数编程(FOP):函数式接口,默认方法,方法引用。
5、面向模块编程(MOP):一种全新的编程思想,是基于OOP,
AOP之上的编程思想,即在AOP之上进行了封装,和模块进行相关联,主要让编程人员专注分析模块的数据关系 与业务流程,至于模块本身的增加,删除,修改,查询,数据展现,性能优化,安全,事务,日志,权限都将由容器来实现,容器基于AOP思想封装了模块的常规编程方面,并且让外部程序可以切入到模块的创建,查询,删除,修改等方面。

Java编程思想

1、契约编程
		1.1、操作对象:字段(Fieid),方法(Method),构造器(Contructor)
		1.2、语义命名:模块名,包名,类名,枚举;字段,方法,常量。
		1.3、访问控制:private  默认,protectted ,public
		1.4、方法返回类型:类型(数据结构,泛型),多态性(层次性),约束(注解)
		1.5、异常错误:类型(检查和非检查),层次(Throwable,Error,Exception),来源(JDK,自定义,三方库)
2、设计编程
		2.1、面向对象设计模式(OOP):构造模式,结构模式,行为模式,并发模式
		2.2、面向切面设计模式(AOP):判断模式,拦截模式
		2.3、面向元数据设计模式(MDOP):泛型接口设计,注解驱动设计
		2.4、面向函数设计模式(FOP):函数式接口设计(SCFP),Fluent API设计,Reactive/stream API设计
3、模式驱动
	3.1、接口驱动
				JavaSE(Gof  23模式)
				JavaEE API(servlet,JSF,EJB.......)
				spring core API(interface 21)
	3.2、配置驱动
				Java Sysem properties
				OS环境变量
				文件配置(XML,properties,YAML)
				Java EE配置(JDNI,servlet,EJB.....)
	3.3、函数驱动
				java 8   stream API
				java 9   Flow API
				Rxjava , spring boot  webFlux
				Vertx
				spring  cloud Gateway/Function
	3.4、模块驱动
				java OSGI
				java 9  Module
				spring @Ehable
				spring boot AutoConfinguration
				spring boot Actuator
	3.5、注解驱动
				java SE(java Beans,JMX....)
				java EE(servlet3.0+,jax-Rs,BeanValidation,EJB3.0+.....)
				Spring (@Component,@service,@Respository......)
				spring boot (@spring boot Application)
				spring Cloud (@spring CloudApplication)
java服务器开发三层
	1、springMVC框架 表现层
	2、spring框架   业务层
	3、MyBatis框架   持久层
Java中实现多线程之间的通信和协作,是通过中断和共享变量实现的。
什么是线程池,为什么要使用它?
	创建线程要花费昂贵的资源和时间,如果任务来了才创建线程,那么响应时间会变长,而且一个进程能创建的线程数有限,为了避免这些问题,在程序启动时就创建若干线程来响应处理,他们被称为线程池,里面的线程叫工作线程。
为什么调用start()方法时会执行run()方法?
	当你调用start()方法时你将创建新的线程,并且执行在run()方法里的代码。
为什么不直接调用run()方法?
	如果直接调用run()方法,它不会创建新的线程池,不会执行调用线程的代码,只会执行run()方法当作普通方法执行。

面向对象的特性

1、抽象:只关注对象有那些行为和属性。
2、继承:是从已有类得到继承信息的创建类过程。
3、封装:把数据和操作数据的方法绑定起来。
4、多态性:指允许不同子类型的对象同一消息作出不同响应。
方法重载:实现的是编程时 的多态性。
方法重写:实现的是运行时的多态性。
构造器不能被继承,因此不能被重写,但可以被重载。
&&与&的区别
	&:运算符有两种用法:1、按位与,2、逻辑与
	&&:运算符是短路与运算。
string,stringbuilde,stringbuffer的区别
	1、三个类型可以储存和操作字符串。
	2、string只能读字符串,内容不能被改变的,其余两个不可以。
	3、stringbuilde与stringbuffer方法完全相同,区别是stringbuilde是在单线程环境下使用。
解决stringbuffer拼接字符串频繁循环,解决效率
	创建stringBuffer对象的时候,对拼接的字符串长度做预估。
	例:StringBuffe  strBu = New StringBuffe(capacity:预估值);
抽象类与接口
	1、两个都不能实例化,但可以定义抽象类和接口类型的引用。
	2、抽象类中可以定义构造器,可以有抽象类方法和具体方法。
	3、接口中不能定义构造器,而且其中的方法全部都是抽象方法。
	4、抽象类中的成员可以是private,默认,protected,public。
	5、接口中的成员全是public,抽象类中可以定义成员变量。
	6、接口中定义的实际是常量,有抽象方法的类必须声明为抽象类,而抽象类未必要是抽象方法。
关键字final
	修饰类:不能为继承
	修饰方法:方法不能被重写
	修饰变量:变量只能一次赋值以后值不能被修改(常量)
进行异常处理的关键字:throws  throw  try  catch  finally
线程与进程的区别
	进程是操作系统分配资源的最下单元。
	线程是操作系统调用的最下单元。

什么是阻塞队列,实现原理是什么?

	阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。
	两个附加操作是:在队列为空时,获取元素的线程会等待队列变为空。当队列满时,储存元素的线程会等待队列可用。
	阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程,阻塞队列就是生产者存放元素的容器,而消费者也是从容器里拿元素。

Java VM的内存模型

1、方法区(Method Area)
2、堆(Heap)
3、虚拟机栈(Java Stack)
4、本地方法栈(Native Method Stack)
5、程序计数器(	Program Counter Register)
垃圾回收算法
	1、标记清除:标记阶段,清除阶段
	2、复制算法
	3、标记整理
	4、分代收集算法

什么是耦合

耦合性是编程中的一个判读代码模构成质量的属性,不影响已有的功能,但影响未来扩展,与之对应的是内聚性。
耦合性:也称块间联系。指软件系统结构中各模块间互相联系紧密程度的一种度量。模块之间联系越紧密,耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂度性,调用方式及传递的信息。
内聚性:又称内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间,程序度之间)联系的越紧密,则它的内聚性就越高。
因此,现代程序讲究高内聚低耦合,即将功能内聚在同一模块,模块与模块之间尽可能独立,互相依赖低,没有绝对没有耦合的模块,只有尽量降低互相之间的影响,使模块越独立越好。

spring在SSM框架中起什么作用

spring:轻量级框架
作用:Bean工厂,用来管理Bean的生命周期和框架集成。
两大核心:AOP面向切面编程,动态代理。
	IOC控制反转:把DAO依赖注入到service层
	DI依赖注入:service层转给action层,spring顶层容器为BeanFatory。
spring的事务
	1、编程式事务管理:编程方式管理事务,极大灵活性,难维护。
	2、声明式事务管理:可以将业务代码和事务管理分离,用注解和XML配置来管理事务。
IOC在项目的作用
	Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低耦合度。
	spring实现的两种模式
		1、工厂模式:工厂模式,简单工厂模式,抽象工厂模式
		2、单态模式
spring是什么
	spring是一个轻量级的DI和AOP容器框架(支持用户自定义切面)。
	DI:称作依赖注入和控制反转一个概念。
	DI的两种方式
		1、构造器注入:通过构造方法初始化。
		<constructor-arg name = "dao"></constructor-arg>
		2、setter注入:通过setter方法初始化注入。
		<property name = "dao" ref = "dao2"></property>
	AOP:spring对面向切面编程提供了让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现高内聚开发。
	AOP的两种实现方式
		1、JDK代理(动态的代理)
		2、CGLib的方式
		CGLib所创建的动态代理在实际运行时候要高。CGLib在创建对象的时候所花费时间比JDK多,因此对于singleton(单例模式)的代理对象或者具有实例池的代理,因为无需频繁的创建代理对象,所以比较适合CGLib动态代理,相反则比较JDK动态代理。
	OOP:静态的抽象,AOP:动态的抽象。
	容器:spring是一个容器,因为它包含并且管理应用对象的生命周期和配置。如对象创建,销毁,回调等。
	框架:spring作为一个框架,提供了基础功能,如:事务管理,持久层集成等,使开发人员更专注于应用逻辑的开发。
	优点:
		1、降低组件之间的耦合性
		2、提供众多事务,事务管理,WS等
		3、AOP很好支持,方便面向切面编程
		4、对主流框架提供了很好的集成支持 ,如Struts2
		5、springDI机制降低了业务对象替换的复杂性
		6、属于低侵入,代码污染底低
		7、高度可开发性,不强制依赖,可自由选择
	缺点:
		1、JSP中药写很多代码
		2、不支持分布式
		3、失去IDE的支持
		4、调试阶段不直观,后期bug对于阶段,不容易判断问题所在
spring配置文件有如下内容
	1、开启事务注解驱动
	2、事务管理器
	3、开启注解功能,并配置扫描包
	4、配置数据源
	5、配置SQL会话工厂,别映射文件
	6、不用编写DAO层的实现类(代理模式)

数据库中如何做优化

1、对查询进行优化,尽量避免全表扫描,应考虑在where即order  by 涉及的列上建索引。
2、避免在where子句中对字段进行null值得判断。
3、避免在where子句中使用!=或<>操作符。
4、避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。
5、in和not  in也要慎用,否则会导致全表扫描。
6、like模糊全匹配也将致全表扫描。
mybaits和hibernate的区别
	共同点:都是通过orm对象关系映射框架,都是持久层数据框架。
	不同点:hibernate是重量级框架,mybaits是轻量级的。
	hibernate对JDBC的封装比较深,对开发者写SQL的能力不是很高,只需要通过Hql语句操作对象即完成持久化。
	mybatis也是对JDBC的封装,但是没有hibernate那么深,它的SQL语句都在配置里,可以通过重写配置SQL来实现数据持久化,实施起来比较方便,处理大数据SQL优化更方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页
评论

打赏作者

小坏蛋至尊宝

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值