8月14号成长题目

HashMap、Hashtable、ConcurrentHashMap的原理与区别?

HashTable
继承于Dictionary,实现了Map,Cloneable,Java.io.Serializable接口

底层数组+链表实现,无论key还是value都不能为null,同步线程安全,实现线程安全的方式是锁住整个hashtable,效率低,concurrentMap做了相关优化。
初始容量为11 扩容:newsize=oldsize*2+1
两个参数影响性能:初始容量,加载因子(默认0.75)
计算index方法:index=(hash&0x7FFFFFFF)%tab.length
HashMap

底层数组+链表实现,可以存在null键和null值,线程不安全
初始size为16 扩容:newsize=oldsize*2,size一定为2的n次幂
扩容针对整个map,每次和扩容时,原数组的元素重新计算存放位置,并重新插入。
插入元素后才判断是否需要扩容,若再无插入,无效扩容
加载因子:默认0.75
计算index方法:index=hash&(tab.length-1)
空间换时间:如果希望加快Key查找的时间,还可以进一步降低加载因子,加大初始大小,以降低哈希冲突的概率。
ConcurrentMap

底层采用分段的数组+链表实现,线程安全。
通过把整个map分为N个Segment,可以提供相同的线程安全效率提升N倍,默认16倍。
读操作不加锁,修改操作加分段锁,允许多个修改操作并行发生。
扩容:段内扩容(段内元素超过该段对应的Entry数组的0.75,触发扩容,而不是整段扩容),插入前检测是否需要扩容,避免无效扩容。
(有些方法需要跨段,比如size()和containsValue(),它们可能需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁)。

SpringBoot和SpringCloud面试题

一. 什么是springboot

1.用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
2.创建独立的spring引用程序 main方法运行
3.嵌入的Tomcat 无需部署war文件
4.简化maven配置
5.自动配置spring添加对应功能starter自动化配置

二.springboot常用的starter有哪些

可以去Maven仓库中搜索以下插件,pom文件依赖即可
Maven仓库官网:http://mvnrepository.com/
1.spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)
2.spring-boot-starter-data-jpa (数据库支持)
3.spring-boot-starter-data-redis (redis数据库支持)
4.spring-boot-starter-data-solr (solr搜索应用框架支持)
5.mybatis-spring-boot-starter (第三方的mybatis集成starter)

三. springboot自动配置的原理

[email protected]这个注释告诉SpringBoot“猜”你将如何想配置Spring,基于你已经添加jar依赖项。如果spring-boot-starter-web已经添加Tomcat和Spring MVC,这个注释自动将假设您正在开发一个web应用程序并添加相应的spring设置。会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean

2.使用@SpringbootApplication注解 可以解决根类或者配置类(我自己的说法,就是main所在类)头上注解过多的问题,一个@SpringbootApplication相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具有他们的默认属性值

四.springboot读取配置文件的方式

    springboot默认读取配置文件为application.properties或者是application.yml

application.properties.PNG

springboot集成mybatis的过程
添加mybatis的starter maven依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.2.0</version>
</dependency>
在mybatis的接口中 添加@Mapper注解
在application.yml配置数据源信息

五. springboot如何添加【修改代码】自动重启功能

    添加开发者工具集=====spring-boot-devtools

六.微服务

    以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中 同一个项目的不同模块不同功能互相抢占资源
    微服务 将工程根据不同的业务规则拆分成微服务 微服务部署在不同的机器上 服务之间进行相互调用
    Java微服务的框架有 dubbo(只能用来做微服务),spring cloud(提供了服务的发现,断路器等)

七. springcloud如何实现服务的注册和发现

    服务在发布时 指定对应的服务名(服务名包括了IP地址和端口) 将服务注册到注册中心(eureka或者zookeeper)
    这一过程是springcloud自动实现 只需要在main方法添加@EnableDisscoveryClient  同一个服务修改端口就可以启动多个实例
    调用方法:传递服务名称通过注册中心获取所有的可用实例 通过负载均衡策略调用(ribbon和feign)对应的服务

八.ribbon和feign区别

Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value="服务名称") 使用RestTemplate调用远程服务对应的方法
feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient("指定服务名")
Ribbon和Feign的区别:
Ribbon和Feign都是用于调用其他服务的,不过方式不同。
1.启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2.服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
3.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。
Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,
不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

九.springcloud断路器的作用

当一个服务调用另一个服务由于网络原因或者自身原因出现问题时 调用者就会等待被调用
者的响应 当更多的服务请求到这些资源时
导致更多的请求等待 这样就会发生连锁效应(雪崩效应) 断路器就是解决这一问题断路器
有完全打开状态
一定时间内 达到一定的次数无法调用 并且多次检测没有恢复的迹象 断路器完全打开,那
么下次请求就不会请求到该服务半开,短时间内 有恢复迹象 断路器会将部分请求发给该服务 当
能正常调用时 断路器关闭,当服务一直处于正常状态 能正常调用 断路器关闭

SpringCloud简介与5大常用组件

springcloud

springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。

通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。

SpringCloud的组件相当繁杂,拥有诸多子项目。重点关注Netflix

图片来源@王璐-Louise。我是画不出来这么美的图的。。。

springcloud的版本说明:

springcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子项目版本号的冲突。

版本名的来源是伦敦的地铁站名,以字母排序。比如最早的Release版本为Angel,第二个Release版本为Brixton。。。

当一个版本的update积累的比较多或者解决了一个严重bug时,会发布一个ServiceRelease版本,简称SR,后面带的数字就是该大版本下的第一次发布。

从官网上看,springcloud的F版本是基于springboot的2.0.x构建,之前的是基于springboot的1.5.x构建

下面只简单介绍下经常用的5个

服务发现——Netflix Eureka客服端负载均衡——Netflix Ribbon断路器——Netflix Hystrix服务网关——Netflix Zuul分布式配置——Spring Cloud Config

Eureka

作用:实现服务治理(服务注册与发现)

简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

由两个组件组成:Eureka服务端和Eureka客户端。

Eureka服务端用作服务注册中心。支持集群部署。

Eureka客户端是一个java客户端,用来处理服务注册与发现。

在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

Ribbon

作用:Ribbon,主要提供客户侧的软件负载均衡算法。

简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

注意看上图,关键点就是将外界的rest调用,根据负载均衡策略转换为微服务调用。Ribbon有比较多的负载均衡策略,以后专门讲解。

Hystrix

作用:断路器,保护系统,控制故障范围。

简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

Zuul

作用:api网关,路由,负载均衡等多种作用

简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

Config

作用:配置管理

简介:SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。

这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

原文地址:https://www.cnblogs.com/whymoney1000/p/11354730.html

时间: 2024-11-10 11:03:44

8月14号成长题目的相关文章

8月16号成长题目

1.HTTP返回码中301与302的区别? 301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved).302 redirect: 302 代表暂时性转移(Temporarily Moved ). 每个HTTP请求和响应都会带有相应的头部信息.默认情况下,在发送XHR请求的同时,还会发送下列头部信息: Accept:浏览器能够处理的内容类型Accept-Charset:浏览器能够显

2019年8月29号成长题目

1.讲下redis 答:非关系型数据库:本质上是一个key-value类型的内存数据库 支持String.Hash.List.Set.zset(sorted set:有序集合)这五种数据类型,redis持久化:RDB和AOF RDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发 AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令达到恢复数据的目的.AOF的主要作用是解决了数据持久化的实时性

2019年8月7号成长题目

1.游标是什么? 游标是SQL的一个内存工作区,存储过程,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库.这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率. 2.SpringBoot哪些注解可以替代SpringMVC? @Componet @Autowired @Resource 3.Linux下如何查看当前所有运行程序的端口 netstat-a

6月14号=》136页-145页

6.3.6 包含选择器 代码示范: //该样式仅对该父元素所指定的子元素起作用 父元素 父元素包含的元素{ 定义对该元素起作用的css样式 } 6.3.7 css3新增的兄弟选择器 代码示范: //该样式仅对某元素后面的兄弟元素起作用 某元素 ~ 某元素后面的兄弟元素{ 定义对该元素起作用的css样式 } 6.3.8 选择器组合 代码示范: //该样式对下列所有指定的元素起作用 元素1,元素2,元素3,元素4,元素5,{ 定义对该元素起作用的css样式 } 6.4 伪元素选择器 伪元素选择器并不

4月14号周二课堂练习:买书最优问题

一.问题提出 书店针对<哈利波特>系列书籍进行促销活动,一共5卷,用编号0.1.2.3.4表示,单独一卷售价8元, 具体折扣如下所示: 本数                   折扣 2                       5% 3                       10% 4                       20% 5                       25% 二.题目要求 1.根据购买的卷数以及本数,会对应不同折扣规则情况.单数一本书只会对应一个折扣

工程架构师对3月14号的白×××人节有什么看法??

今天早上赶地铁的时候刷到一则故事:人挤人的火车上,男孩喜欢上了坐在过道另一边的女孩,一直想找机会跟对方认识,但是整个旅途女孩都望着窗外. 失落的男孩在自己的微博里说: " 很想跟她说话,但她好像不太开心,一直望着窗外.我马上就要到站了,就这样错过,好遗憾. " 过了一会儿,有个人在他的微博下评论: " 没有不开心,只是因为玻璃上印着你的脸. " 而当男孩再次看向女孩的时候,发现她也正笑着看向自己. 评论里很多人都在感慨: " 我酸了 " &quo

2016年4月14号渗透学习总结

serv-u提权radmin vnc zend提权cacls提权 type,rar命令妙用 iis读取服务器日志分析,清理 rar a -k -r -s -m3 c:\1.rar c:\folde (如果没有得到服务器,可以试着在webshell中执行这条命令打包下载整站源码.)_ cacls c: /e /t /g everyone:F           #c盘everyone权限cacls "目录" /d everyone               #everyone不可读,包

OA系统开发随笔-2018年05月14号

OA系统最主要的工作只有一个,就是流程流转.环节审批,一个2万人用户量的OA系统,模块的数量将达到2700多个,其中有1700个甚至更多牵扯到流程审批这一套功能,以下内容为开发过程中随手记,均为个人使用另前端内容较多,如有更好建议欢迎指出,共同学习. 1.打印功能 用  window.print():这一句就够,程序会调用浏览器自带的打印功能,实现打印. 2.@Transactional事务 readOnly=true开启只读事务.   readOnly=false默认,开启读写事务.写数据的时

《微赢微信公众平台系统5月14最新破解高级运营版+水果机+邀请函+微汽车+微食品+用户CRM》

<微赢微信公众平台系统5月14最新破解高级运营版+水果机+邀请函+微汽车+微食品+用户CRM> 此版本目前是淘宝卖600RMB的,其它VIP源码论坛也都还没有发布,咱们这里完全免费分享出来,但这里先说明下,别拿回去叫着安装不了,这套微赢微信公众平台系统5月14最新破解高级运营版需要在php 5.4版本下面才能安装,目前一般的虚拟主机都无法正常安装. 非常感谢分享此套源码的童鞋,希望更多的童鞋能分享好的资源. 下面是我们亲测截图 微赢高级版正式上线,支持后台一键更新升级.高级版新功能:新版商城,