java
一步一台阶
跬步行千里,滴水聚江海!
展开
-
SOA、ESB、微服务架构的区别和联系
今天准备再聊下在当前微服务,中台和云原生技术下,传统的SOA是否已经过时这个话题。现在出去跟别人交流,谈到SOA的时候有些客户直接的反馈就是过时的技术怎么还在用?或者一说到SOA就认为过时了没必要采用,因此今天还是有必要就SOA是否过时进一步说明。SOA的基本概念我们可以来看下SOA本身的定义,即:SOA是一种架构方法,将传统的单片式应用打破,分解为离散的、自治的业务服务,利用标准提升他们的互操作性,从而可以更好地共享、重用和组装,快速构建复合的应用从而满足业务需求的变化。...转载 2022-04-04 13:13:55 · 5576 阅读 · 1 评论 -
Java 反射获取Class对象的几种方式
Java 程序中获得 Class 对象通常有如下三种方式:•使用 Class 的 forName() •调用某个类的 class 属性•调用某个对象的 getClass()代码举例:内容解析:Class本身也是一个类,当JVM将用户自定义的类加载进来之后,会生成对应的Class的对象。可以通过Class类的静态方法forName方法输入类的路径直接获取这个对象; ...原创 2018-10-14 12:19:48 · 973 阅读 · 1 评论 -
J2SE J2EE J2ME名字的来历
JESE,J2EE,J2ME中2的含义要追溯要1998年。1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个版本,分别叫做Java2SE,Java2EE,Java2ME,简称J2SE,J2EE,J2ME。故,2的含义为1.2版本。但是,这种叫法已经在2005年Java 1.6发布后取消,J2EE更名为Java EE,J2SE更名为...原创 2018-11-26 08:40:44 · 398 阅读 · 0 评论 -
常量池存储字符串对象 几种情景
1. 显示调用String的intern方法的时候; 2. 直接声明字符串字面常量的时候,例如: String a = "aaa";3. 字符串直接常量相加的时候,例如: String c = "aa" + "bb"; 其中的aa/bb只要有任何一个不是字符串字面常量形式,都不会在常量池生成"aabb". 且此时jvm做了优化,不会同时生成"aa"和"bb"在字符串常量池中。原创 2018-11-29 09:18:49 · 308 阅读 · 0 评论 -
定长线程池简易原理图及实现思路
队列中存放着实现了runnable接口的对象。每次有新任务的时候,就会往队列中push进一个对象。线程1-4需要定义为继承了Tread类的内部,在类中的run方法中,定一个while循环,不断的轮询送队列中取对象,执行对象中的run方法。线程中需要存放着线程池的对象的指针,便于获取到线程池对象的队列。当然,这个线程是是定长的。有些情况下,定长的数量不够,或者高峰期过后,长度需要降下来。...原创 2018-12-23 11:28:57 · 362 阅读 · 0 评论 -
JVM生成Class文件的几个时机
JVM生成Class文件的时机问题来源问题解答.java文件编译后内部类编译后匿名内部类编译后利用java的反射机制生成的类问题来源之前被面试的时候,被问到一个问题。我觉得这个问题很考验发散性思维和对java、JVM的认识。问题如题 JVM生成Class文件的时机 。问题解答.java文件编译后内部类编译后匿名内部类编译后利用java的反射机制生成的类...原创 2018-12-24 09:05:12 · 841 阅读 · 0 评论 -
如何让eclipse显示GC日志
原文链接:https://blog.csdn.net/lan861698789/article/details/51985188在eclipse根目录下的eclipse.ini配置文件中添加以下参数: -verbose:gc (开启打印垃圾回收日志) -Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) -XX:+PrintGCTimeSt...原创 2018-12-19 08:47:10 · 720 阅读 · 0 评论 -
本地启动两个tomcat报错: java.rmi.server.ExportException: Port already in use: 9999; nested exception is: jav
9999是端口号,当然还有可能是别的端口号。方案1:(失败)修改tomcat文件夹下的conf/server.xml两个tomcat的conf/server.xml中的端口已经都设计成不一样的了。方案2:(失败) 找出占用1099端口的进程,进入windows命令,查看什么进程占用了1099端口 使用命令:netstat -aon|findstr 1099 找出占用109...原创 2019-01-15 17:11:54 · 3690 阅读 · 0 评论 -
从JVM运行角度解释 为什么类的成员变量有默认初始值 而方法内的局部变量却没有初始值
最近又重新研读了《深入理解Java虚拟机》,其中一个知识点在这里记录一下。类的成员变量有默认初始值,而方法内的局部变量却没有初始值。这个问题涉及到JVM类加载和字节码执行两个阶段,这两个阶段是依次执行的。JVM类加载是JVM利用类加载器将class文件加载到JVM的过程,涉及“加载”、“验证”、“”准备“、“”解析“和”初始化“。一、类的成员变量初始化 ---在JVM类加载阶段完成...原创 2019-01-10 10:18:40 · 5208 阅读 · 3 评论 -
通过weblogic API 深入解析如何获取weblogic中服务的IP和端口
我们的服务是部署在weblogic上的,最近遇到一个需求,需要在代码中获取weblogic部署当前服务的IP地址和端口。后来搜到一段代码,亲测有效:public static String getIpAndPort(){ try { InitialContext initialContext = new InitialContext(); MBeanServe...原创 2019-02-14 16:52:17 · 2983 阅读 · 2 评论 -
System.getenv()和System.getProperty() 的区别
最近遇到一个需求,服务器实例需要获取当前的环境变量。经过查资料,发现环境变量可以在两个地方设置。一、在系统层面设置环境变量在系统层面设置环境变量,之前我们应该都操作过,以windows系统为例System.getenv()可以获取的在这里设置的变量。二、在java虚拟机层面设置环境变量个人理解,System.getProperty()可以获取在JVM 层面的变量,有些变量在...原创 2019-02-13 16:38:38 · 2998 阅读 · 0 评论 -
《深入理解Java虚拟机》 读书心得 全书概况
不得不说,这是一本很经典的书。本着把书读薄的态度,我把这本书读了三遍。现在个人认为这本书比较核心的内容和需要重点关注的点给大家分享一下,有不足之处,大家可以讨论。 《深入理解Java虚拟机》这本书中有很大的篇幅是在讲JVM内部的优化。这些优化在我们平时编码过程中,往往是不可见的,或者说根本不用关心的。要用好这本书,最重要的是理解和我们平时工作最贴合的一部分,然后应用起来。...原创 2019-03-15 08:58:31 · 210 阅读 · 0 评论 -
在eclipse中集成maven集成的基本步骤
本文主要讲从maven下载到在eclipse中的整个过程第一步:登录maven官网下载mavenhttp://maven.apache.org/download.cgi下载过程我就不多说了,下载好后,我放在C盘第二步:打开eclipse,集成mavenwindow—>preferences->Maven->Installations 点击add把maven的路径原创 2017-12-11 20:30:48 · 11997 阅读 · 0 评论 -
如何让Tomcat在指定JDK版本下启动 而不依赖环境变量中配置的版本
今天给客户部署软件时遇到了一个尴尬的问题:我们的软件只有部署在JDK1.7环境的tomcat下才会比较稳定。而客户的服务器上装的是JDK1.8,而且他们的环境还不能变,因为服务器中的其他程序都是依赖JDK1.8的环境开发的。他们又不能单独部署。后来经过查资料发现tomcat可以自己指定JDK环境的版本和JDK的路径。下面就把指定的步骤和大家说下,主要是修改文件。根据系统的不同,分为windows的...原创 2017-08-08 20:24:24 · 47605 阅读 · 8 评论 -
Spring中${}的使用
在spring里面用${}是可以获得配置文件里面的值。比如你的这个里面xmlTool是在另一个配置文件里面配了的,在spring里面就可以用${xmlTool}引用进来。以后如果你要对xmlTool做修改的话,也只用修改配置文件,不用修改代码。好处就是如果你的程序要修改的时候,就只用改${}里配置文件的内容就行了,不用改spring里的配置文件的内容。那么问题来了,spring这么知道我的配置原创 2017-08-07 21:24:15 · 5561 阅读 · 0 评论 -
JDK JRE Android SDk JVM Dalvik 关系 图解 源码框架分析
1.为什么我配置了Android SDk 还要配置JDK呢?这两者到底是什么关系?2.JVM是java程序的运行环境, Dalvik 是android程序的运行环境,而android是用java语言编写的,那么 JVM 与Dalvik是什么关系呢? 3.为什么我下载的JDK有两个文件夹,一个是jdk,一个是jre。而jdk文件中其实已经包含了jre,为什么有两个呢?4.为什么我不配置jdk的环境变量打不开eclipse,配置了之后,可以进入了,不过进入了eclipse之后还要配置jdk的路径呢?5原创 2016-09-01 09:33:54 · 2319 阅读 · 0 评论 -
Java中创建对象的四种方法
Java中创建对象的四种方法1.用new语句创建对象,这是最常见的创建对象的方法。2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。3.调用对象的clone()方法。4.运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。转载 2016-10-10 10:31:19 · 352 阅读 · 0 评论 -
java 线程的基础知识总结
一、线程如何定义 1.继承Thread类创建线程类 2.通过实现Runnable接口传入Thread类创建线程。 3.通过Callable和Future创建线程(1)创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。(2)创建Callable实现类的实例,使用Fu原创 2016-10-10 22:49:42 · 564 阅读 · 0 评论 -
java中HashMap,LinkedHashMap,TreeMap,HashTable,ConcurrentHashMap的区别和内部实现机制
首先简单介绍下,这几种map的应用场景:HashMap 存储键值对,没有什么特殊的功能;LinkedHashMap在存储的同时,能够保存用户插入数据的顺序,如果需要输出用户插入map的顺序可以用它;TreeMap 插入数据后,对键值进行排序,内部是通过红黑树实现的;HashTable 与HashMap的功能相同,区别有两点:1.HashTable是线程安全的,即某一时刻只允许一...原创 2016-09-26 11:44:22 · 4214 阅读 · 2 评论 -
new Integer(1)和Integer.valueOf(1)的区别
java.lang包中的Integer类是我们比较常用的类,比如以下代码:Integer a=new Integer(1)Integer a=Integer.valueOf(1);两个都是得到一个Integer对象,但是Integer.valueOf的效率高。为什么呢?因为Integer.valueOf用到了缓存机制。其中Integer.valueOf方法代码如下:转载 2016-10-11 21:44:58 · 2095 阅读 · 0 评论 -
java 内部类的分类及用法区分
我们都知道,java说白了就是由一个一个类组成的,但是java的类又可以相互嵌套,甚至一个.java文件中最外层可以并行的定义多个类,这些类的关系是什么呢?今天就来捋顺一下。java中的类无非就是放在.java文件中,然后进过编译后生成.class文件。我们先来看下.java文件中有一个类的情况,这种情况比较好理解。我们定义一个TextA的类,在java文件中它是这样存放的(如下图),原创 2016-10-21 13:35:23 · 916 阅读 · 0 评论 -
静态代码段 非静态代码 构造函数 在父类和子类中的调用顺序问题
废话不多说,直接上代码: class TextC { public TextC() { System.out.println("父类构造方法!"); } { System.out.println("父类非静态代码段!"); } static{ System.out.println("父类静态代码段!"); }}public c原创 2016-10-28 20:43:30 · 585 阅读 · 0 评论 -
Iterator 有没有向前遍历的方法
今天做笔试题遇到了这个问题:Iterator 有没有向前遍历的方法?直接看源码:/* * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. *原创 2016-10-20 11:24:14 · 2075 阅读 · 0 评论 -
对象的序列化和反序列化详解
一、序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中; 2) 在网络上传送对象的字节序列。 在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是转载 2016-10-30 15:41:02 · 503 阅读 · 0 评论 -
容器类的一些笔记
先上个简图:下面分别来简单介绍下:collectionListArrayList:内部用数组实现,查找、更改效率高;LinkedList:内部用链表实现,删除插入效率高;vector: 线程安全SetHashSet:常用的set类LinkedHashSet:可以存储插入顺序的setTreeSet:可以对内部对象排序(内部对象对应的类必须实现了Comp原创 2016-10-20 21:44:04 · 249 阅读 · 0 评论 -
一张图让你明白 java string 的 内存分配
定义 String str1=“hello”; String str2=new String("hello"); String str3=new String("hello");看到这里,你可能要疑惑了,堆区、栈区和常量池是个什么东西,在jvm中扮演什么角色呢?下面我们逐一来解释下:栈:在函数中定义的一些基本类型的变量和对...原创 2016-08-18 14:41:02 · 8608 阅读 · 0 评论