JDK

史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!

橙三吉。 提交于 2021-01-02 13:04:44
Java技术栈 www.javastack.cn 优秀的Java技术公众号 想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉。 下面我为大家准备了一些 Dubbo 常见的的面试题,一些是我经常问别人的,一些是我过去面试遇到的一些问题,总结给大家,希望对大家能有所帮助。 1、Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 面试官问你如果这个都不清楚,那下面的就没必要问了。 官网:http://dubbo.apache.org 2、为什么要用Dubbo? 因为是阿里开源项目,国内很多互联网公司都在用,已经经过很多线上考验。内部使用了 Netty、Zookeeper,保证了高性能高可用性。 使用 Dubbo 可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,使前端应用能更快速的响应多变的市场需求。 下面这张图可以很清楚的诠释,最重要的一点是,分布式架构可以承受更大规模的并发流量。 下面是 Dubbo 的服务治理图。 3、Dubbo 和 Spring Cloud 有什么区别? 两个没关联,如果硬要说区别

CentOS和Ubuntu哪个好?

懵懂的女人 提交于 2021-01-02 12:10:23
CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。 Ubuntu是一个以桌面应用为主系统,Ubuntu基于Debian发行版和GNOME桌面环境。Ubuntu的主要是为一般用户提供最新且相当稳定的操作系统。 (虽然Ubuntu桌面做的好,但是对于服务器操作系统开始,一般都是远程操作,所以Ubuntu的桌面优点在做云端服务器上就无法显现了,因为一般都是命令行远程操作) 由于CentOS和Ubuntu都是使用bash作为基础shell,所以在很多命令都相差不大。都是目前个人和小团队常用的服务级操作系统,在线提供的软件库中可以很方便的安装到很多开源的软件及库。 1.centos中新建的非root用户是没有sudo的权限的,如果需要使用sudo权限必须在/etc/sudoers 中加入账户和权限,所以切换到root账号的时候只需要输入:su,加入root账号的密码即可。在Ubuntu中,一般使用sudo+命令,如果是第一次使用会提示输入当前用户的密码(而不是root的密码) 2. 软件管理

30道超详细Dubbo面试答案整理!你不知道的这里都有,建议收藏!

这一生的挚爱 提交于 2021-01-02 12:01:50
目录 1、为什么要用 Dubbo? 2、Dubbo 的整体架构设计有哪些分层? 3、默认使用的是什么通信框架,还有别的选择吗? 4、服务调用是阻塞的吗? 5、一般使用什么注册中心?还有别的选择吗? 6、默认使用什么序列化框架,你知道的还有哪些? 7、服务提供者能实现失效踢出是什么原理? 8、服务上线怎么不影响旧版本? 9、如何解决服务调用链过长的问题? 10、说说核心的配置有哪些? 11、Dubbo 推荐用什么协议? 12、同一个服务多个注册的情况下可以直连某一个服务吗? 13、画一画服务注册与发现的流程图? 14、Dubbo 集群容错有几种方案? 15、Dubbo 服务降级,失败重试怎么做? 16、Dubbo 使用过程中都遇到了些什么问题? 17、Dubbo Monitor 实现原理? 18、Dubbo 用到哪些设计模式? 19、Dubbo 配置文件是如何加载到 Spring 中的? 20、Dubbo SPI 和 Java SPI 区别? 21、Dubbo 支持分布式事务吗? 22、Dubbo 可以对结果进行缓存吗? 23、服务上线怎么兼容旧版本? 24、Dubbo 必须依赖的包有哪些? 25、Dubbo telnet 命令能做什么? 26、Dubbo 支持服务降级吗? 27、Dubbo 如何优雅停机? 28、Dubbo 和 Dubbox 之间的区别? 29、Dubbo 和

双亲委派机制和沙箱安全机制

一曲冷凌霜 提交于 2021-01-02 11:07:37
双亲委派机制和沙箱安全机制 如果对类加载器没有了解的可以先看我另一篇文章讲得是类加载器 点击传送 概述 为什么需要双亲委派机制和沙箱安全机制,举个栗子,如果说我们任何人都可以在项目里去定义一个java.lang包下的String类进行使用的话,就说明java核心的API可以被随意篡改。这样即不安全,也不规范了。 双亲委派机制 工作原理: 如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给自己的父类加载器去执行,如果父类加载器存在父类则进一步向上进行委托,依次递归,最终到达顶层启动类加载器。 如果父类加载器可以完成类加载任务,就成功返回。反之,子加载器才会尝试自己去加载,这就是双亲委派模式 沙箱安全机制 自定义String类,但在加载自定义String类的时候会先使用引导类加载器加载,而引导类加载器在加载的过程中会先加载jdk自带的文件,报错说没有main方法,就是因为加载的是rt.jar包中的String,这样就可以保证对加载核心源代码的保护,这就是沙箱安全机制 其他 所以在虚拟机中判断两个对象是否为同一个类的两个条件 类的完整类名是否一致 加载这个类的ClassLoader(类加载器)是否相同。 小结 双亲委派机制和沙箱安全机制都是为了保护核心源代码的安全,并且保证所有的类只能被加载一次。 秃头萌新一枚 多多关照 来源: oschina 链接:

java9模块化编程示例

落花浮王杯 提交于 2021-01-02 00:56:49
这里是把在慕课网上看到的《Java9之模块系统》课程代码学习了一遍,加深了一些对模块化的理解,但是还是不太懂如今这种模块化思想,其实在java里面有了maven管理依赖模块,通过pom文件来控制依赖也很好,而且模块化也是导入导出,通过声明了,还不能直接替代pom.xml里面的<dependency></dependency>导入,仍然需要加入项目依赖,在idea中,还需要手动加入Modulepath,这一点感觉又把模块化搞复杂了。 我也看过一些示例,都是新建工程,然后在非src目录下创建目录,比如com.xxx,目录名字就叫com.xxx,com.xxx不是一个两级目录,而是一级目录,这样还需要将com.xxx目录设置为source folder,感觉多此一举,然后在com.xxx目录下新建module-info.java文件,最后再创建package:com.xxx这时候,com.xxx才是层级目录,对于这一点,我很不能理解。 module-info.java文件的设置: module sms.model{ exports sms.model; } 其中,模块名称sms.model并不是文件夹的路径,其实这个名字无所谓,但是他对应的目录一定是sms.model。也就是说在module-info.java平级的目录下一定要有sms.model这样的package存在

Java代码是怎么运行的 ?

十年热恋 提交于 2021-01-01 03:04:11
Java开发前,都会做一件事情,安装编译Java代码的JDK环境,即配置Java运行环境。 JDK包含jre和其他一些工具包,jre包含运行java的虚拟机和一些核心类库等。 1:为什么java要在虚拟机中运行? Java属于高级程序语言,语法复杂,抽象程度高。并不能直接在硬件上运行,所以(.java文件)需要经过编译器,编译成(.class文件)虚拟机能识别的指令序列,即Java字节码。Java虚拟机可以由硬件实现,但是在各个平台(windows,Linux)上已经提供了软件的实现。此时,程序一旦被编译为java字节码,就可以在多个平台上运行(“一次编译,到处运行")。不仅如此,虚拟机还提供了托管环境(Managed Runtime),托管环境能够代替我们处理代码带中容易出错的部分,最为常见的就是内存管理和垃圾回收,除此之外托管环境还提供了如:数组越界、动态类型、安全权限等动态监测,省去了我们书写与业务无关的代码。 2:Java虚拟机具体是怎么运行Java字节码的? 从虚拟机视角分析:执行Java代码首先需要将它编译而成的class文件加载到虚拟机中,加载后的Java类会被存放在方法区(Method Area)中,实际运行中,虚拟机会执行方法区内的代码。Java虚拟机会将内存划分出堆和栈来存储运行时的数据,而且Java虚拟机会将栈细分为面向Java的Java方法栈,面向本地方法

Android SDK的安装与环境变量配置--安装Android studio环境需要安装SDK和JDK

穿精又带淫゛_ 提交于 2020-12-31 12:18:15
配置Andriod环境变量 前提是要先安装好JAVA环境 1、下载Android SDK,点击安装,直接默认路径即可! 下载地址: http://developer.android.com/sdk/index.html 2、默认路径安装后,安装完成,开始配置环境变量。 3、打开计算机属性——高级系统设置——环境变量(如上文) 4、新建一个环境变量,变量名:ANDROID_HOME,变量值: D:\adt-bundle-windows-x86_64-20140702\sdk (以你安装目录为准,确认里面有tools和add-ons等多个文件夹),点击确认。 5、在用户变量PATH后面加上变量值 ;%ANDROID_HOME%\platform-tools; 点击确认即可。 在系统变量path中添加; D:\adt-bundle-windows-x86_64-20140702\sdk \tools 6、Android SDK配置完成,接下来验证配置是否成功。 7、点击运行——输入 cmd ——回车——输入 adb ——回车,如果出现一堆英文,如下图所示,即表示配置成功,在输入 Android ,启动 Android SDK Manager 。 来源: oschina 链接: https://my.oschina.net/u/3563297/blog/3060608

Apache+Tomcat+Session+Memcache 高性能群集搭建

浪子不回头ぞ 提交于 2020-12-31 09:35:33
一、拓扑图 二、环境安装 安装memcached的直接yum [root@70sec ~]# yum -y install memcached [root@70sec ~]# service memcached start Starting memcached: [ OK ] [root@70sec ~]# ss -anlpt | grep memcached LISTEN 0 128 :::11211 :::* users:(("memcached",26347,27)) LISTEN 0 128 *:11211 *:* users:(("memcached",26347,26)) [root@70sec ~]# 因为tomcat依赖于java环境 所以先安装jdk,(tomcat A B 都相同) [root@90sec src]# rpm -ivh jdk-7u9-linux-x64.rpm [root@90sec src]# vim /etc/profile.d/java.sh JAVA_HOME=/usr/java/jdk1.7.0_09 PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME [root@90sec src]# source /etc/profile.d/java.sh 安装tomcat [root@90sec src]#

MapStruct

泄露秘密 提交于 2020-12-31 00:11:06
1.什么是MapStruct      简单来说,MapStruct 可以将某几种类型的对象映射为另外一种类型,如将多个 DO(业务实体对象) 对象转换为 DTO(数据传输对象),避免了在业务代码内new DTO对象和不断的进行set方法 2.如何使用MapStruct    (1)引入Maven依赖      <!--mapStruct依赖--> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-jdk8</artifactId> <version>1.2.0.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <scope>provided</scope> <version>1.2.0.Final</version> </dependency>   (2)使用     此处假设将两个实体对象(StudentInfo,classInfo)转换为一个DTO(StudentInfoDTO)      @Data public class StudentInfo { /** * 姓名 */ private

手把手带你搭建Java共享网盘

空扰寡人 提交于 2020-12-30 17:01:14
项目介绍 在线共享网盘采用jsp+servlet搭建项目结构实现共享网盘,项目分为管理员,普通用户和会员三种角色,根据不同角色控制不同权限,实现不同用户对个人文件文件,所有文件,共享文件的增删改查操作。 开发环境: jdk 8 intellij idea tomcat 8.5.40 mysql 5.7 所用技术: jsp+servlet js+ajax layUi jdbc直连 项目访问地址 http://localhost:8090 项目结构 项目截图 注册 我的网盘 我的共享 回收站 会员充值 管理员-所有文件 管理员-共享申请 关键代码: 1.初始化工作 //数据库连接初始化 public class DBInfo { String url = null; String username = null; String password = null; String driverClass = null; private static DBInfo db = new DBInfo(); public static DBInfo getInstance(){ return db; } private DBInfo() { InputStream in = this.getClass().getClassLoader().getResourceAsStream("db