主流java框架了解
小编说一下分布式管理事务
简单的来说呢,分布式事务其实就是一次大的操作分成了好的小的操作,这些小的操作分别部署在不同的服务器上,而且属于不同的应用,分布式的事务其实就是保证这些小的事务要么都成功,要么都失败。
分布式事务出现的场景比方在支付和在线下单都会出现,我理解的分布式事务管了解决方法就是二次提交,基于MQ的特性,MQ作为二次提交的中间节点,负责储存请求数据的,在失败的情况下可以进行屡次尝试,还有可以基于MQ中的事务回滚操作,可以保证性能,又能保证业务一致性的方案。
请你简单详情一下SpringCloud组件分别是什么,并有什么用处?
SpringCloud中有五个组件,分别是:
服务发现——Eureka
负载均衡——Ribbon
断路器——Hystrix
网关——Zuul
配置——SpringCloud Config
Eureka是Netflix的一个子板块,也是核心的板块之一,Eureka是一个基于rest的服务,用于定位服务,服务注册等功能,有了这些功能,只要要使用服务的标识符,即可以访问到服务,而不需要调用服务的配置文件了,功能相似于dobbo中的zookerper。
Ribbon主要提供负载均衡算法,它提供了一系列的配置项,比方连接超时,重试,重试算法等,他有少量实现策略:简单轮询负载均衡,加权响应时间,区域感知轮询,随机负载均衡。
Hystrix可以防止个应用程序屡次试图执行一个操作,就是很可能失败的操作,断路器模式也可以检测出故障是不是处理了,假如问题得到理解决,那么应用程序即可以尝试调用操作。
Zuul网关相似于Nginx,反向代理商,不过netflix自己添加了少量配合其余组件的特性。
Spring Cloud Config
这个是静态的,得配合SpringCloudBus实现动态的配置升级。
为什么eureka可以实现高可用?
在微服务的项目中,我们要考虑到发生故障的情况,所以也要对服务的注册中心也要进行高可用的部署,那么eureka就是通过多个实例进行互相注册,而后修改每个serviceUrl即可以,eurekaServer的高可用其实就是将自己作为服务去其余的注册中心注册自己,这样即可以形成一组互相注册的注册中心,即可以实现服务清单的互相同步,这样就达到了高可用的情况。
Git合并分支的命令是什么?
查看分支:git branch
创立分支:git branch
切换分支:git checkout
创立+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
HashMap和HashTable 的区别?
首先他们两个的底层都是基于数组+链表实现的,而后hashtable的key和value都不可以为空,他是线程安全的,他实现线程安全的方法是在修改数据时锁住整个hashtable,这样的话效率就会很低。
Hashmap是线程非安全的,他可以存空值,我对他印象比较深的就是他的初始size是16,而后每次扩容都是以2的n次幂扩容的。
负载均衡的策略有哪些?
大约有很多种,但我理解的有轮询的方式和最小连接数,轮询就是很简单的实现,依次将请求发送给后台的服务器,有点就是实现简单,请求分配均匀,缺点也是在均匀,由于有的服务器性能好,可以承受更多的请求,但是他都是均匀分配的,所以也是有不合适的地方。最小连接数就是在后台服务器性能差异较大的话,可以优化lc的性能,高权值的服务可以承载更高的连接负载。
线程池是什么?
线程池就是java.util包下的有一个接口,用来创立线程池的,加入一个服务完成一项任务需要的时间是创立线程的时间,执行线程的时间,和销毁线程的时间,假如创立的时间和销毁的时间大于执行任务的时间,那我们就要采用线程池来提高服务器的性能了,线程池包括:线程池管理器(就是用来创立并管理线程的,也包括销毁,增加新任务)工作线程(线程池中的线程,在没有任务处于等待的情况下,可以循环的执行任务) 任务接口(每个任务必需实现接口,供工作线程的调用),任务队列(用来存放没有解决的任务,提供一种缓冲的机制) 线程池就是关注如何优化创立线程时间和销毁线程时间的。
常见的线程池有单个的线程池,和固定数量的线程池,还有就是无数量限制的线程池。
熔断是什么,用来解决什么问题的?
熔断机制就是应对微服务雪崩效应的一种链路保护机制,就是当我们某个微服务突然不可用或者者响应时间过长的时候,就会进行服务降级,熔断该节点的服务调用,而后响应错误信息,等到检测这个应用响应正常的时候,再恢复这个链路。SpringCloud中的熔断是通过Hystrix实现的,它会监测服务的调用状况,
当失败到达肯定阈值的时候,就会启动熔断,熔断机制的注解就是加一个注解,@hystrixCommand。
线程间的通信是什么,通信状态有几种?
在一个进程中,线程一般都不是单独存在的,而是多个线程之间需要进行通信的。他们的表现就是,当一个线程传输数据给另一个线程,一个线程执行完特定的任务后转到另一个线程继续执行任务。线程通信的方法有perform,还有NSmachport:本地之间的通信,通过传递端口对象变量进行端口间的通信。他应该是通过代理商模式来传递消息的。管道,命名管道,信号,消息队列,共享内存
消息队列是干什么的,举一个实际应用场景?
消息队列MQ就是一个保存消息的容器,另外它也是一个高性能的中间件。
实际场景的话当我们客户注册后要初始化好多操作,比方调用邮箱服务发邮件,调用促销活动发优惠券,这时候我们即可以把监听服务交给MQ,当客户注册成功之后,就通知MQ让其余服务开始操作,确保能保证客户的性能。
为什么要做服务降级?
由于当我们的服务压力剧增的情况下,要根据实际业务以及流量,对少量服务和页面要有策略的不解决或者者换一种简单的方式解决,从而释放服务器资源保证核心交易正常工作或者者高效工作。
熔断和服务降级是用什么实现的?
Springcloud有服务熔断和降级的机制是Hystrix,通过Hystrix的注解HystrixCommond实现的。服务降级有几种实现方法,超时降级,故障降级,限流降级。也可以在配置中心配置
sql的隔离级别有哪些。
未提交读:事务还没提交,而别的可以看到他修改数据的后果,就是脏读。
提交读:就是一个事务在执行的时候,其余事务看不到他的操作,所以看到的是旧数据,也是无效的数据。
可重复读:可以保证读取同一条数据的一致性,却不能保证没有插入新的数据。
可串行化:是最高的隔离级别,因为他加上了大量的锁,所以可能会出现大量的请求超时,性能比较低下。
Localstorge是干什么的,sessionstorge是做什么,sessionstorge和Localstorge的区别
sessionStorage仅在当前浏览器关闭之前有效,不在不同的浏览器窗口共享,在同源的同窗口可以共享跨页面刷新仍然存在,存在本地。假如浏览器支持,浏览器崩溃并重启之后仍然会存在。
localStorage除非主动清理否则始终有效,无论窗口关闭与否,存储大小达5M,存本地
Spring原理?
内部最核心的就是IOC了,动态注入,让一个对象的创立不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创立、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创立对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 板块)从而达到对一个板块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(板块与板块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,但凡在容器里的对象才会有Spring所提供的这些服务和功能。
spring aop? ioc ?
IOC
概念:控制权由对象本身转向容器;由容器根据配置文件去创立实例并创立各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创立的各个实例称作bean
AOP
1、 代理商的两种方式:
静态代理商:
l 针对每个具体类分别编写代理商类;
l 针对一个接口编写一个代理商类;
动态代理商:
针对一个方面编写一个InvocationHandler,而后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理商类
tomcat优化?
优化连接配置,可以修改conf/server.xml文件,修改连接数,关闭用户端dns的查询。
采用集群
调整线程数量
优化tomcat参数
什么是反射?
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性
spring阻拦器 sturts过滤器有什么区别?
1.阻拦器是基于java反射机制的,而过滤器是基于函数回调的;
2.阻拦器不依赖于servlet容器,而过滤器依赖于servlet容器;
3.阻拦器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用;
4.阻拦器可以访问Action上下文、值栈里的对象,而过滤器不能;
5.在Action的生命周期中,阻拦器可以屡次调用,而过滤器只能在容器初始化时被调用一次。
6.Springmvc的入口是一个servlet即前台控制器,而Struts2入口是一个filter过虑器
sql优化?
模糊查询的时候不要在字段前面加%
多用join少用子查询
给常用的字段加索引
Where和having相比较用where
为什么要加索引?
在一个或者者少量字段需要频繁操作的时候,创立索引会提高会快的速度,由于会从全盘扫描改为索引扫描,但是索引不是越多越好,太多的索引会占用很多的索引表空间,而且加上索引之后,执行insert操作会很慢。
Mysql中的mysam和innodb是干什么的
Mysam和innodb是mysql中最常见的两个表类型,各有优缺点,innodb具备事务回滚和崩溃修复的能力,Mysam相对简单所以效率上要比innodb好,所以在进行读写分离的时候,innodb适合做写的操作,mysam适合做读的操作
Jvm结构?
方法区,java堆,java栈,本地方法栈,指令计数器以及其余隐含寄存器
Wait和sleep的区别
这两个方法来自不同的类分别是Thread和Object
最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其余线程可以使用同步控制块或者者方法(锁代码块和方法锁)。
wait,notify和notifyAll只能在同步控制方法或者者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
sleep必需捕获异常,而wait,notify和notifyAll不需要捕获异常
Java开发模式都有什么?
集中式架构
分布式服务
微服务
垂直拆分
服务治理(SOA)
线程池
线程池就是提前创立若干个线程,假如有任务需要解决,线程池里的线程就会解决任务,解决完之后线程并不会被销毁,而是等待下一个任务。因为创立和销毁线程都是消耗系统资源的,所以当你想要频繁的创立和销毁线程的时候即可以考虑使用线程池来提升系统的性能
?为了让学习变得轻松、高效,今天给大家免费分享一套Java教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 主流java框架了解