Spring Cloud

Java 泛型,你了解类型擦除吗?

老子叫甜甜 提交于 2020-08-20 00:49:02
作者:frank909 https://blog.csdn.net/briblue/article/details/76736356 泛型,一个孤独的守门者。 大家可能会有疑问,我为什么叫做泛型是一个守门者。这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇。泛型是 Java 中一个很小巧的概念,但同时也是一个很容易让人迷惑的知识点,它让人迷惑的地方在于它的许多表现有点违反直觉。 文章开始的地方,先给大家奉上一道经典的测试题。 List<String> l1 = new ArrayList<String>(); List<Integer> l2 = new ArrayList<Integer>(); System.out.println(l1.getClass() == l2.getClass()); 请问,上面代码最终结果输出的是什么?不了解泛型的和很熟悉泛型的同学应该能够答出来,而对泛型有所了解,但是了解不深入的同学可能会答错。 正确答案是 true。 上面的代码中涉及到了泛型,而输出的结果缘由是类型擦除。先好好说说泛型。 泛型是什么? 泛型的英文是 generics,generic 的意思是通用,而翻译成中文,泛应该意为广泛,型是类型。所以泛型就是能广泛适用的类型。 但泛型还有一种较为准确的说法就是为了参数化类型

JVM 与 Linux 的内存关系详解

点点圈 提交于 2020-08-19 23:57:05
在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m。 从表面上,物理内存应该是足够使用的;但实际运行的情况是,会发生大量使用SWAP(说明物理内存不够使用 了),如下图所示。由于SWAP和GC同时发生会致使JVM严重卡顿,所以我们要追问:内存究竟去哪儿了? 要分析这个问题,理解JVM和操作系统之间的内存关系非常重要。接下来主要就Linux与JVM之间的内存关系进行一些分析。 一、Linux与进程内存模型 JVM以一个进程(Process)的身份运行在Linux系统上,了解Linux与进程的内存关系,是理解JVM与Linux内存的关系的基础。下图给出了硬件、系统、进程三个层面的内存之间的概要关系。 从硬件上看,Linux系统的内存空间由两个部分构成:物理内存和SWAP(位于磁盘)。物理内存是Linux活动时使用的主要内存区域;当物理内存不够使用时,Linux会把一部分暂时不用的内存数据放到磁盘上的SWAP中去,以便腾出更多的可用内存空间;而当需要使用位于SWAP的数据时,必须 先将其换回到内存中。 JVM运行时区域详解 ,推荐大家看下。 从Linux系统上看,除了引导系统的BIN区,整个内存空间主要被分成两个部分:内核内存(Kernel space)、用户内存

【转】GitHub搜索技巧 (记录)

↘锁芯ラ 提交于 2020-08-19 23:43:50
GitHub搜索技巧 (记录) 查找仓库名称包含 spring cloud 的仓库,可以使用语法 in:name 关键词 如果想查找描述的内容,可以使用这样的方式: in:descripton 关键词 一般项目,都会有个README文件,如果要查该文件包含特定关键词的话 in:readme 关键词 stars: > 数字 关键字。 比如咱们要找 star 数大于 3000 的Spring Cloud 仓库,就可以这样 stars:>3000 spring cloud 如果要找在指定数字区间的话,使用 stars: 10..20 关键词 fork 数同理,将上面的 stars 换成 fork,其它语法相同 比如你只想看个简单的 Demo,不想找特别复杂的且占用磁盘空间较多的,可以在搜索的时候直接限定仓库的 size 。 使用方式: size:>=5000 关键词 这里注意下,这个数字代表K, 5000代表着5M。 在 GitHub 上找项目的时候,不再需要每个都点到项目里看看最近 push 的时间,直接在搜索框即可完成。 通过这样一条搜索 pushed:>2019-01-03 spring cloud 咱们就找到了1月3号之后,还在更新的项目。 明确搜索仓库的 LICENSE 例如咱们要找协议是最为宽松的 Apache License 2 的代码,可以这样 license

Dubbo对Spring Cloud说:来老弟,我要拥抱你

本秂侑毒 提交于 2020-08-19 23:26:01
项目地址 https://github.com/yinjihuan/kitty-cloud 前言 Kitty Cloud 开源后有以为朋友在 GitHub 上给我提了一个 issues,问为什么项目中要同时集成 Feign 和 Dubbo 两个框架来调用服务。今天就来聊一聊这个问题,然后讲下在 Kitty Cloud 中如何切换使用两种调用方式。 为什么要支持两种协议? 关于支持两种协议,我这个是一个开源项目,主要还是为了让使用者有更多的选择。当然框架本身不是我开发的,我只是使用者而已。 一种协议更统一化,两种协议混着用也不是不可以,具体还是看实际需求。比如你们内部有个 ID 分发的服务,调用量很高,就是对性能有这极致的要求。那么这个场景你就可以用 Rpc 来代替 Http 了。其他的正常使用 Http 协议就行,特殊场景的就用 Rpc 协议,互补而已。 用 Http 最好的点在于简单,传输内容就是文本,调试什么的都很方便。比如我要单独测试某个服务的接口,直接 PostMan 上调用这个 Http 接口就可以了,或者用 Swagger。 如果是 Dubbo 的 Rpc, 我可能需要用 telnet 来调用。 还有就是网关层的转发,如果是 Http 协议,直接转发过去了。如果是 Rpc 协议,网关内部需要转特殊处理,当然目前也有支持 Rpc 的网关。如果我们是两种协议

Zuul中聚合Swagger的坑

怎甘沉沦 提交于 2020-08-19 23:06:23
每个服务都有自己的接口,通过Swagger来管理接口文档。在服务较多的时候我们希望有一个统一的入口来进行文档的查看,这个时候可以在Zuul中进行文档的聚合显示。 下面来看下具体的整合步骤以及采坑记录。Cloud版本:Finchley.SR2, Boot版本:2.0.6 加入Swagger的依赖: 1. <!-- Swagger --> 2. <dependency> 3. <groupId>io.springfox</groupId> 4. <artifactId>springfox-swagger-ui</artifactId> 5. <version>2.9.2</version> 6. </dependency> 7. <dependency> 8. <groupId>io.springfox</groupId> 9. <artifactId>springfox-swagger2</artifactId> 10. <version>2.9.2</version> 11. </dependency> 增加聚合代码: 1. @EnableSwagger2 2. @Component 3. @Primary 4. public class DocumentationConfig implements SwaggerResourcesProvider { 5. 6.

SpringBoot2 整合FreeMarker模板,完成页面静态化处理

淺唱寂寞╮ 提交于 2020-08-19 22:58:08
本文源码: GitHub·点这里 || GitEE·点这里 一、页面静态化 1、动静态页面 静态页面 即静态网页,指已经装载好内容HTML页面,无需经过请求服务器数据和编译过程,直接加载到客户浏览器上显示出来。通俗的说就是生成独立的HTML页面,且不与服务器进行数据交互。 优缺点描述: 静态网页的内容稳定,页面加载速度极快; 不与服务器交互,提升安全性; 静态网页的交互性差,数据实时性很低; 维度成本高,生成很多HTML页面; 动态页面 指跟静态网页相对的一种网页编程技术,页面的内容需要请求服务器获取,在不考虑缓存的情况下,服务接口的数据变化,页面加载的内容也会实时变化,显示的内容却是随着数据库操作的结果而动态改变的。 优缺点描述: 动态网页的实时获取数据,延迟性低; 依赖数据库交互,页面维护成本很低; 与数据库实时交互,安全控制的成本高; 页面加载速度十分依赖数据库和服务的性能; 动态页面和静态页面有很强的相对性,对比之下也比较好理解。 2、应用场景 动态页面静态化处理的应用场景非常多,例如: 大型网站的头部和底部,静态化之后统一加载; 媒体网站,内容经过渲染,直接转为HTML网页; 高并发下,CDN边缘节点代理的静态网页; 电商网站中,复杂的产品详情页处理; 静态化技术的根本:提示服务的响应速度,或者说使响应节点提前,如一般的流程,页面(客户端)请求服务,服务处理,响应数据

MongoDB设计方法及技巧

自作多情 提交于 2020-08-19 22:08:33
MongoDB是一种流行的数据库,可以在不受任何表格schema模式的约束下工作。数据以类似JSON的格式存储,并且可以包含不同类型的数据结构。例如,在同一集合collection 中,我们可以拥有以下两个文档document: { id: '4', name: 'Mark', age: '21', addresses : [ { street: '123 Church St', city: 'Miami', cc: 'USA' }, { street: '123 Mary Av', city: 'Los Angeles', cc: 'USA' } ] } { id: '15', name: 'Robin', department: 'New Business', example: 'robin@example.com' } 为了能够充分利用MongoDB的优势,您必须了解并遵循一些基本的数据库设计原则。在讲解设计方法之前,我们必须首先了解MongoDB存储数据的结构。 一、 数据如何存储在MongoDB中 与传统的RDBMS关系型数据库不同,MongoDB并没有表Table,行row和列column的概念。它将数据存储在集合collections,文档documents和字段fields中。下图说明了与RDBMS类比的结构之间的关系: 二、 数据库设计技巧和窍门 2.1.

互联网公司忽悠员工的黑话,套路太深了。。

廉价感情. 提交于 2020-08-19 22:02:30
作者:@siyecao66 据说这些是互联网公司招工时忽悠的黑话,大家来看看是不是真的? 再列举几个黑话: 老板: 市场很大 = 我还不知道怎么赚钱 有一定的用户基础 = 建立了 QQ 群和微信群 自主研发的系统 = XXX 开源代码二次开发的 采用了大数据技术 = Nginx 日志开起来了,怎么用以后再说 采用了云技术 = 买了几台 ECS 。。。 产品: 在吗?= 有个需求需要改一下 没有我要的那种感觉 = 抄下苹果 我下去再确认一下=这个老子没想到,别说了 设计应该大道至简 = 复杂的我也不会 商业模式要形成闭环 = 放东西线上卖 。。。 程序员: 在吗?= 今天做不完 你这个需求不清晰 = 我不想做 目前技术实现不了 = 我不想做 现在服务器性能跟不上 = 我不想做 这个太复杂了 = 我不想做 。。。 推荐去我的博客阅读更多: 1. Java JVM、集合、多线程、新特性系列教程 2. Spring MVC、Spring Boot、Spring Cloud 系列教程 3. Maven、Git、Eclipse、Intellij IDEA 系列工具教程 4. Java、后端、架构、阿里巴巴等大厂最新面试题 觉得不错,别忘了点赞+转发哦! 来源: oschina 链接: https://my.oschina.net/javaroad/blog/4309386

SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)

纵饮孤独 提交于 2020-08-19 19:00:19
作者 | 孤弋 阿里云高级技术专家,负责 EDAS 的开发和用户体验优化工作。 导读 :在上一篇文章 《SpringCloud 应用在 Kubernetes 上的云上实践 - 开发篇》 中讲到可以通过两个工具,轻松地将一个 SpringCloud 应用从初始化到本地运行。本篇文章,我们将介绍如何将上一篇文章中提到的应用在云上跑起来。 初始化集群 为了将应用运行在云端,首先我们需要一个 Kubernetes 集群,在 EDAS 中使用 Kubernetes 集群目前最快的方式,是将一个阿里云容器集群中的 Kubernetes 集群( ACK 集群 ),导入到 EDAS 中来。 如果还没有ACK集群的话,您可以通过以下两种方式来创建一个: 直接进入容器服务的控制台进行创建; 如果您已经有一个在云上建好的集群,或者有一个在其他 IDC 或友商中有的集群,也可以在容器服务这边通过“注册已有集群”的方式,导入到容器服务中来。 等到 Kubernetes 集群就绪之后,在 EDAS 上需要进行一次集群“导入”,导入方式如下图所示: 在导入集群时,EDAS 会做以下操作: 初始化 EDAS 的集群控制器和相关资源,主要包含:基于开放云原生应用标准的 OAM Controller、日志采集的 Agent、监控链路中的 Arms 环境信息等;其中大部分控制器运行时不会占用用户集群的资源,而会运行在

eurek获取服务列表为空,非DiscoveryClient.getServices 的方式获取

怎甘沉沦 提交于 2020-08-19 16:42:11
最近要做一个功能,服务上线下线的操作,于是百度了一下,网上基本是下面这种代码形式。 import java.util.ArrayList; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @Autowired private DiscoveryClient discoveryClient; @RequestMapping( "getServicesList"