主流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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503162.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的多线程的示例

在讨论多线程之前,让我们先讨论线程。线程是进程中轻量级的最小部分,可以与同一进程的其他部分(其他线程)并发运行。线程是独立的,因为它们都有独立的执行路径,这就是为什么如果一个线程中发生异常,它不会影响其他线程…

几个改变世界的java工具

Java的开源生态系统强大而健康,这是我们创建OSCON Java的主要原因之一。在过去的十年中,有几个项目已经超越了简单的采用,并在Java世界中发挥了主导作用,进入了软件开发的一般领域,有些甚至深入到用户的日常生活中。 …

java网络篇-tcp的握手和挥手!

package com.wql.test; public class Test6 { public static void main(String[] args) { test1(ErrorType.ERROR_2); } public static void test1(ErrorType type){ switch(type){ case ERROR_1: System.out.println("参数type"type",value"type.…

java enum枚举使用例子

package com.wql.test; public class Test6 { public static void main(String[] args) { test1(ErrorType.ERROR_2); } public static void test1(ErrorType type){ switch(type){ case ERROR_1: System.out.println("参数type"type",value"type.…

经典Java编程面试题分析

求职者参加企业面试是进入职场的一个必经阶段,企业的面试官一般都用哪些问题来考求职者呢?不少求职人员认为,面试官提题出的问都是随机的,没有一定的规律。其实面试官基于想多方面了解面试者的情况下,会通过特定的提问…

Java高级架构师需要掌握什么?

没有谁能够随随便便的就成功,也没有谁能够随随便便就成为一名高级Java架构师。在Java行业中,如果按照排序,Java架构师一定是排在最顶端的,所以成为高级Java架构师,也是得有高超的Java技能,并且还得有着一定…

Java的三种工厂模式

一、简单工厂模式 简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类 实现汽车接口 public interface Car { String getName(); } 奔驰类 public class Benz im…

浅谈Java中类加载机制

首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区域,这几个区域在java类的生命周期中扮演着比较重要的角色: 方法区:在java的虚拟机中有一块专门用来存放已经加载的类信息、常量、静态变量以及方法代码的内存区…

Java学习四步曲,助你成长!

对于很多新手来说,可能JAVA的学习会很难。这种难度体现在语言的专业性、学习的不系统、条理的不清晰以及缺乏足够的耐心。实际上想要学习好JAVA,除了有足够的心理准备,还要有挑战JAVA终极四部曲的信心和勇气,那么四部曲是什么&…

Java里的 for (;;) 与 while (true),哪个更快?

在JDK8u的jdk项目下做个很粗略的搜索: 并没有差多少。 其次,for (;;) 在Java中的来源。个人看法是喜欢用这种写法的人,追根溯源是受到C语言里的写法的影响。这些人不一定是自己以前写C习惯了这样写,而可能是间接受以前写C的老师、…

Java中的null到底是什么?

让我们从下面的陈述开始: String xnull; 1. 这句话到底是什么意思? 回想一下什么是变量,什么是值。 一个常见的比喻是变量类似于一个盒子。 就像您可以使用一个框来存储某些东西一样,您也可以使用一个变量来存储一个值。 在声明变量时…

学习Java编程-Java Timezone类常见问题

今天遇到了一个比较有意思的问题,从服务器上封装好的java.sql.timestamp对象返回到本地客户端程序后与数据库中的时间相差了整整14个小时。因为跟客户的时差是14个小时,所以大体怀疑是时差问题。 所以计划在客户端程序执行之前首先设置默认的TimeZone: …

热门专业学习之关于java的一些知识

1. JAVASE 首先要学 JavaSE,这是毋庸置疑的。与此同时,和 JavaSE 的学习同步,建议大家研究一下数据结构与算法。 在 JavaSE 完成之后,可以试着完成一些小项目,同时关注一下设计模式的内容,不必强求自己能…

企业需求的Java程序员是什么样子的

选择学习Java编程​语言,大部分人还是冲着高薪就业去的,既然如此,就业是学习Java的最终目的,企业需要什么我们就学什么。 下面分析一下企业需要什么,这些也是我们在学习中应该着重关心的。当然,如果你是因…

如何提高Java代码的可重用性?

提高java代码可重用性有哪些方法措施,以下就讲解了三种关于提高java代码可重用性的措施,一起来了解一下吧~ 改写类的实例方法 通过类继承实现代码重用不是精确的代码重用技术,因此它并不是最理想的代码重用机制。继承总是带来一些多余的方法…

Java常见面试题之类的加载过程

程序员看似光鲜的就业前景面前,逃不过的是层层的面试,想要进前沿的大公司没有个五六七八面,是不可能滴!而找工作的首个关卡就是笔试,想要获得高薪工作的小伙伴,先刷一波面试题吧! 类加载过程主…

作为Java程序员,这些开源工具你应该要学习!

1. JIRA Atlassian的JIRA是当前敏捷开发领域最重要的工具之一。它用于错误跟踪,问题跟踪和项目管理。如果你遵循敏捷开发方法,例如Sprint和Scrum,那么你必须了解JIRA。它允许您创建Spring循环并跟踪软件开发的进度。 JIRA 是目前比较流行的基…

在Java编码中,如何减少bug数量

众所周知,Java编程语言在IT行业是企业中不可缺少的。不管,从Web应用到Android应用,这款语言已经被广泛用于开发各类应用及代码中的复杂功能。但在编写代码时,bug永远是困扰每一位从业者的头号大难题。今天就与大家分享几个关于减少…

为什么要学习Java EE?需要掌握哪些技能?

随着互联网的不断发展,Java作为一种古老的编程语言,全年仍占据着编程语言的榜首。那么编辑应该如何学习Java呢? 选择学习JavaEE或JavaME(或者你想继续学习Java SE的深度,只要你喜欢,你就可以一直深入下去&…

Java Socket

什么是Socket Socket的概念很简单,它是网络上运行的两个程序间双向通讯的一端,既可以接收请求,也可以发送请求,利用它可以较为方便地编写网络上数据的传递。 所以简而言之,Socket就是进程通信的端点,Sock…