Java
文章平均质量分 87
lancankun
这个作者很懒,什么都没留下…
展开
-
SpringMVC使用(二)
SpringMVC统一异常处理、统一结果封装、拦截器原创 2022-11-18 17:39:53 · 1069 阅读 · 0 评论 -
Spring使用(三)
springAOP和spring事务管理原创 2022-08-16 17:18:27 · 167 阅读 · 0 评论 -
JDK的动态代理(附带完整代码demo)
JDK的代理,实际上是对Java接口(Interface)的代理,而且只能对接口进行代理,达到的效果是,当调用指定接口的指定方法时,会执行特定的操作。例如,HelloService是一个接口,public String sayHello(String msg)是该接口的其中一个方法,当代码调用该接口的sayHello方法时,会执行规定好的动作。这里会有一个问题,HelloService接口的实现类是从哪里来的呢?这里HelloService接口的实现类是由代理动态生成的实现类。所以想为一个接口生成代理,需要原创 2022-05-25 10:56:12 · 1742 阅读 · 0 评论 -
SpringBoot自动装配源码解析
为什么需要自动装配默认情况下,springboot启动时,只会扫描到启动类下的包及其子包中的组件。像Apollo client、mybatis等第三方插件,其包名并不会和应用启动类下的包名一样,所以没法扫描到第三方插件包中的组件。这个时候,就需要一个装配机制,应用只需要引入第三方插件包,就能够自动扫描到第三方插件的组件并加载到spring中。BeanDefinitionspring中的每个bean都会被封装成BeanDefinition对象,然后存放在一个BeanDefinitionMap中。B原创 2021-07-20 15:28:09 · 194 阅读 · 0 评论 -
Java进程内存问题分析
生产环境上个别服务出现内存占用过高的情况。运行环境:jdk1.8.0_171、Linux 64bit其中,服务PC0100的最大堆内存设置为1g的情况下,但rss达到3.4g。该服务的具体vm参数如下:-server -Xms1g -Xmx1g -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:ErrorFile=$AFA_H..原创 2021-09-14 19:58:37 · 1576 阅读 · 4 评论 -
Apollo分布式配置中心集群部署
1. 部署架构分布式部署需要事先确定部署的环境以及部署方式,Apollo目前支持以下环境:DEV开发环境FAT测试环境,相当于alpha环境(功能测试)UAT集成环境,相当于beta环境(回归测试)PRO生产环境另外也可以添加自定义环境。本次演示部署架构图如下:以上面的架构图为例:Portal部署在生产环境的机房,通过它来直接管理多个环境(DEV、FAT、UAT、PRO等环境)的配置 Config Service和Admin Service在每个环境都.原创 2020-10-16 17:31:07 · 4143 阅读 · 1 评论 -
Java的System.identityHashCode(Object x)方法
Returns the same hash code for the given object as would be returned by the default method hashCode(), whether or not the given object's class overrides hashCode(). The hash code for the null referenc...原创 2020-03-06 16:33:11 · 622 阅读 · 1 评论 -
JVM参数
GC相关-XX:+PrintGC或者-verbose:gc 打印GC日志,包括堆内存总大小的变化、GC使用的时间。 (JDK9、JDK10中建议使用-Xlog:gc) -XX:+PrintGCDetails 打印更详细的GC日志,包括新生代(DefNew)、老年代(Tenured)、永久代(Perm)、用户态CPU耗时(user)、系统CPU耗时...原创 2019-09-14 22:58:30 · 277 阅读 · 0 评论 -
Java中String类的hashCode()方法
相同的字符串调用hashCode()方法,得到的值是一样的,与内存地址、进程、机器无关。String类的hashCode()方法的源码如下:public int hashCode() { int h = hash; // 默认值是0 if (h == 0 && value.length > 0) { char val[] = value; /...原创 2019-05-09 17:47:03 · 20468 阅读 · 8 评论 -
Java位运算符
Java的位运算符“有按位与”、“按位或”、“按位取反”、“按位异或”、“移位”。位运算符除“按位与”和“按位或”运算符外,其他只能用于处理整数的操作数。位运算是完全针对位方面的操作。整型数据在内存中以二进制的形式表示,如int型变量7的二进制表示是00000000 00000000 00000000 00000111。左边最高位是符号位,最高位是0表示正数,若为1则表示负数。负数才用补码表示...原创 2019-05-01 20:20:08 · 197 阅读 · 0 评论 -
Java中的关键字transient
先解释下Java中的对象序列化在讨论transient之前,有必要先搞清楚Java中序列化的含义。Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输,一般当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让我们的实体类实现Seri...转载 2019-04-16 18:23:25 · 122 阅读 · 0 评论 -
JNA调用.dll或.so动态链接库文件
1. 编译一个dll文件或so文件1.1 C++代码熟悉C/C++的,可以忽略该步骤。由于对C/C++不熟悉,编译dll和so文件只是按部就班,不足之处请指教。.dll文件是Windows系统的动态链接库文件,Linux的.so文件。首先在ide中新建dll项目,此处使用的IDE是Dev-C++。如下图所示。main.cpp代码如下:#include "main.h" in......原创 2019-03-12 19:01:30 · 2532 阅读 · 4 评论 -
Java文件过滤 java.io.FileFilter
JAVA文件过滤 java.io.FileFilterFileFilter是Java文件过滤的一个接口,若需实现文件过滤,则需要自定义一个实现了FileFilter的类,重写接口的 public boolean accept(File file) 方法。该方法返回true时,文件则通过,不会被过滤掉。Mp3FileFilter类实现FileFilter接口,重写accept方法,获取mp3...原创 2018-08-02 10:37:58 · 988 阅读 · 0 评论 -
Java Daemon线程
Daemon线程即守护线程,是一种支持型线程,主要被用作程序中后台调度以及支持性工作。当Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出,所有的Daemon线程都会立即终止(注意“立即”二字),不会继续执行。通过下面代码进行说明Daemon线程立即终止:public class Daemon { public static void main(String[] args...原创 2018-10-23 15:15:11 · 323 阅读 · 0 评论 -
Java文件看门狗,检测文件是否发生变化
背景有时候需要在某个文件发生变化时,做出相应的一些操作。例如,想在xml文件、properties属性文件等发生变化时,重新解析文件中的内容。这时可以设计一个文件看门狗,不断检测文件是否发生了变化,从而做出相应的操作。设计方法隔一定的时间,获取指定文件的修改的时间戳,和上一次修改的时间戳作对比,不相等则表示文件发生了变化。实现代码public abstract class FileWat...原创 2019-02-18 22:46:46 · 1429 阅读 · 0 评论