技术标签: JAVA
1.颜老师,分布式和微服务有什么区别呢?网上说啥的都有,越看越晕了。
答:分布式的核心就一个字:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,那就算是分布式。
如何拆呢?有两种方式:水平拆分,或垂直拆分(也称为“横向拆分”和“垂直拆分”),具体如下:
水平拆分:根据“分层”的思想进行拆分。例如,可以将一个项目根据“三层架构”拆分成 表示层(jsp+servlet)、业务逻辑层(service)和数据访问层(dao),然后再分开部署:把表示层部署在服务器A上,把service和dao层部署在服务器B上,然后服务器A和服务器B之间通过dubbo等RPC进行进行整合(在左下角的“阅读原文”里有dubbo的视频课程,可以点击学习),如图所示。
垂直拆分:根据业务进行拆分。例如,可以根据业务逻辑,将“电商项目”拆分成“订单项目”、“用户项目”和“秒杀项目”。显然这三个拆分后的项目,仍然可以作为独立的项目使用。像这种拆分的方法,就成为垂直拆分。
什么是微服务呢?
从名字就能知道,“微服务”就是非常微小的服务。
微服务可以理解为一种非常细粒度的垂直拆分。例如,以上“订单项目”本来就是垂直拆分后的子项目,但实际上“订单项目”还能进一步拆分为“购物项目”、“结算项目”和“售后项目”,如图。
现在看图中的“订单项目”,它完全可以作为一个分布式项目的组成元素,但就不适合作为微服务的组成元素了(因为它还能再拆,而微服务应该是不能再拆的“微小”服务,类似于“原子性”)。
总结:
分布式:拆了就行。
微服务:细粒度的垂直拆分。
2.Java中不是有GC吗,怎么还有内存泄漏一说?
答:Java内存有两种常见问题:内存溢出和内存泄漏。
内存溢出好理解,就是JVM内存有限。如果对象太多,JVM内存放不下了,就会内存溢出。
那什么是内存泄漏?首先得明确,GC只会回收那些“不可达”的对象(可以简单理解为,如果一个对象存在着指向它的引用,这个对象就“可达”;如果没有引用指向它,则“不可达”)。
若一个对象是“无用但可达的”,就会造成内存泄漏。
如下代码中,obj的值是null,因此是“无用的”;但同时obj又同时被被list引用,因此是“可达”的,所以此时的obj就会造成内存泄漏。
Object obj = new Object();
list.add( obj );
obj = null ;
除了上面obj这种内存泄漏的情况以外,在实际开发中最常见的内存泄漏就是打开资源后没有调用close()方法。例如socket、io流等,都需要再最后close()一下防止内存泄漏。
- 完 -
推荐阅读
文章浏览阅读152次。Inscode是一款无需安装的编程、协作和分享社区,用户可以在线进行项目的开发和发布,通过使用平台提供的编程语言模版进行项目的编辑和运行,同时完成的项目还可以发布到社区进行展示。
文章浏览阅读218次。【代码】python存储json时,发生中文乱码。_python dataframe to_json中文乱码
文章浏览阅读7.9k次。if "%computername%"=="name1" SETRES h800 v600 b32 f85if "%computername%"=="name2" SETRES h1024 v768 b32 f85if "%computername%"=="name3" SETRES h1280 v960 b32 f75请善用此程序调整显示器刷新率参数!命令格式SETRES hXXXX vXXXX..._批处理更改屏刷新率
文章浏览阅读763次。转自:http://blog.csdn.net/qibin0506/article/details/47393725今天来了解一下Android最新给我们带来的数据绑定框架——Data Binding Library。数据绑定框架给我们带来了更大的方便性,以前我们可能需要在Activity里写很多的findViewById,烦人的代码也增加了我们代码的耦合性,现在我们马上就可以抛弃_js databinding
文章浏览阅读4.7k次,点赞3次,收藏4次。地址:HKEY_CLASSES_ROOT\CLSID{01E04581-4EEE-11d0-BFE9-00AA005B4383}链接:HKEY_CLASSES_ROOT\CLSID{0E5CBF21-D15F-11D0-8301-00AA005B4383}实际起作用的是HKEY_CLASSES_ROOT\CLSID{GUID}\Implemented Categories{00021492..._注册表 implemented categories是什么
文章浏览阅读926次。前言随着工作年限的增加和工作内容的深入,不知不觉的发现想要成为一名优秀的IT工程师,对于一些底层原理的了解是必不可少的。遂希望能在文章中概括的记录一些比较重要的方面,来助力初学者以及希望有大致轮廓的同学一个比较系统的概念。由于我也是非科班出身(本科通信,研二重点才重点关注的计算机),对有些地方的理解可能也不是透彻,可以一起讨论。由于平时工作比较多,很难抽出时间,目前希望能够每一两周能够输出一篇文章..._计算机组成总线硬件有哪些
文章浏览阅读3.1k次。最近在配置RabbitMQ SSL连接支持,阅读了RabbitMQ官方的文档,觉得官方文档不是那么好理解;在Google了一番之后,我发现了这篇文章:http://www.gettingcirrius.com/2013/01/configuring-ssl-for-rabbitmq.html国内的童鞋们也许需要通过代理才能访问,不过没关系,作者还在github上写了一些shell脚..._ssl, [{versions, ['tlsv1.2', 'tlsv1.1']
文章浏览阅读867次,点赞3次,收藏5次。1 虚拟串口移植项目新建 USB 文件夹,将USB 驱动拷贝过来从官方案例的 src,inc拷贝以下文件2 配置新建分组添加头文件目录_#include "usb_lib.h
文章浏览阅读4.7k次,点赞3次,收藏20次。关于传递函数的频率响应和低通滤波器参考资料:【动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析_哔哩哔哩_bilibili以前关于这部分只是知道了而已,并没有用MATLAB认真试验过。这里借着DR_CAN老师的课程重新复习一下。下面讨论一个简单的一阶线性系统的传递函数:G(s)=as+a(1)G(s)=\frac{a}{s+a} \tag1G(s)=s+aa(1)分析式(1)的频率响应,将s=jωs=j\omegas=jω代入,可得G(jω)=a_低通滤波器传递函数
文章浏览阅读5.1k次,点赞4次,收藏28次。这里写目录标题外形注意事项代码实际效果外形注意事项引脚设置为开漏输出模块可以3.3v供电代码代码来自STM32 单片机 GY-906 MLX90614 红外温度读取这位大哥的.c#include "mlx90614.h"/* Private typedef -----------------------------------------------------------*//* Private define -----------------------------------_gy906
文章浏览阅读777次。今天是周四高等数学专题的第7篇文章。之前的文章和大家聊了许多数学上的理论,今天和大家聊点有用的东西。我们都知道,工业上的很多问题经过抽象和建模之后,本质还是数学问题。而说到数学问题就离不开方程,在数学上我们可以用各种推算、公式,但是有没有想过在计算机领域我们如何解一个比较复杂的方程?如果之前没有想过,那你可能得想一想,因为以后很有可能会在面试题当中遇到。二分法我们要介绍的第一个方法是二分法。说到二..._二分法求方程的根java
文章浏览阅读727次。实现在文本框内输入某关键词,对应搜索并列出出相应的内容_keyword事件