Java
文章平均质量分 94
java基础
EmineWang
计算机专业,资深java开发工程师,从事后端开发、架构方向,热爱技术,热爱分享,愿对你有所帮助,感恩大家的支持,欢迎来信交流~~
展开
-
通过自定义注解和import动态加载bean
文章目录【前言】import注解作用@Import使用的三种方式第一种直接导入类第二种使用ImportBeanDefinitionRegistrar简单用法高阶用法(配合自定义注解)1.首先自定义注解MyComponentScan2.定义ImportBeanDefinitionRegistrar实现类3.自定义注解MyService4.通过上面加载的ServicePostProcessor,实现加载指定路径下的Bean.5.自定义MyBeanScanner6.定义相关需要加载的Bean7.测试8.启动类Ma原创 2022-01-27 18:07:38 · 2205 阅读 · 3 评论 -
【老生常谈系列】hashMap 1.7 和1.8的区别
之前做过一篇关于hashMap 1.7 和1.8原理分析,在这里再次做一下小结HashMap 1.7数据结构数组+链表。entry是hashmap的最小单元每个entry都存有下一个元素的指针,组成一个单向的链表。同一条entry链表的的数据key,计算得到的hash值一定相同(这个是经过HashMap特定的hash计算方法,而不是key本身的hashcode)put 过程当key为null ,则加入到table[0]key不为null,就计算key的hash值,根据hash值找到数组的下原创 2022-01-04 20:18:04 · 4582 阅读 · 2 评论 -
序列化分析
package com.reflect.singleton;import java.io.Serializable;/** * if (obj != null && * handles.lookupException(passHandle) == null && * desc.hasReadResolveMethod()) * { * Object rep = desc.原创 2021-08-19 00:50:59 · 174 阅读 · 0 评论 -
强引用、软引用、弱引用、虚引用、finalize
Java引用介绍Java从1.2版本开始引入了4种引用,这4种引用的级别由高到低依次为:强引用 > 软引用 > 弱引用 > 虚引用⑴强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。⑵软引用(SoftReference)如果一个对象只具有软引用,则内存空间足原创 2021-08-01 22:21:46 · 376 阅读 · 0 评论 -
HashMap1.7和1.8实现原理和区别
JDK1.7中的HashMapJDK1.7中的HashMap是一个数据与链表的结合体。底层是一个数组结构,数组中的每一项都是一个链表,当新建一个HashMap的时候,就会初始化一个数组。结构大致如下hashmap的成员变量1.DEFAULT_INITIAL_CAPACITY = 1 << 4;:初始桶(数组)大小为16,因为底层是数组,所以也是数组大小2.MAXIMUM_CAPACITY = 1 << 30:桶最大值,2的30次方3.DEFAULT_LOAD_FACTO原创 2020-08-28 17:09:33 · 2963 阅读 · 0 评论 -
静态代理和动态代理
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题。代理对象持有真是对象的引用,通过代理对象去调用真实对象方法,于此同时可以在代理对象增加自己的处理,如监控、日志打印等操作。代理模式有三个角色:抽象角色:即一个接口,里面具体写了要执行的方法代理角色: 用来操作真实对象真实角色:真实的对象实现原理:代理对象和真实对象共同实现一个抽象角色的接口...原创 2019-03-03 17:33:18 · 4209 阅读 · 1 评论 -
@Scope(BeanDefination.SCOPE_PROTOTYPE)
当类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰时,说明每次依赖注入时,都会产生新的对象但是在多线程编程中,如果一个类被@Scope(BeanDefination.SCOPE_PROTOTYPE)修饰,且在另外的对象中如果需要引用此对象时,最好不要使用@Autowired依赖注入,而是使用 ApplicationContext.getBean()的方式去调用。举例说明:@Component@Scope(BeanDefinition.SCOPE_PROTOTYPE原创 2020-05-26 11:44:33 · 1603 阅读 · 0 评论 -
线程饥饿和公平
Java中导致饥饿的原因在Java中,下面三个常见的原因会导致线程饥饿:高优先级线程吞噬所有的低优先级线程的CPU时间。线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前持续地对该同步块进行访问。线程在等待一个本身(在其上调用wait())也处于永久等待完成的对象,因为其他线程总是被持续地获得唤醒。高优先级线程吞噬所有的低优先级线程的CPU时间你能为每个线程设置独自的...原创 2019-08-22 18:01:34 · 119 阅读 · 0 评论 -
java.net.ConnectException: Connection timed out
大量查询异常交易,发现syn包丢失时,均可以在之前的30min里,匹配到相同源端口,且之前的连接未能正常关闭,客户端在TCP连接关闭时未发送fin。在http发送请求之后,没有关闭连接。可以看到在22:27、22:35、22:47均有相同源端口36486的访问,而在22:53、22:57发起的连接的syn包被防火墙丢弃,在服务器侧没有收到报文,也不会响应。22:47产生的连接,...原创 2019-07-29 16:03:02 · 14186 阅读 · 0 评论 -
JSONObject.toJSONString()输出null的问题
问题:fastjson的api种,jsonObject.toJsonString(),当值为null时,没打印出来代码 JSONObject jsonObject = new JSONObject(); jsonObject.put("id",null); jsonObject.put("class","12"); jsonOb...原创 2019-07-19 09:47:26 · 19766 阅读 · 2 评论 -
遍历xml循环节点
public void analysisXML() throws DocumentException { SAXReader saxread = new SAXReader(); File xmlFile = new File("idcMonitor.xml"); if (xmlFile.exists()) { Documen...原创 2019-07-03 17:38:37 · 8358 阅读 · 0 评论 -
springboot+rabbitmq
pom<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency&g...原创 2019-04-19 19:26:53 · 3685 阅读 · 0 评论 -
字符串反转
public class StringFanzhuan {public static void main(String[] args) { String str = "1234567"; char[] chars = str.toCharArray(); int mid = chars.length / 2; int length = chars.leng...原创 2019-03-12 16:38:13 · 3662 阅读 · 0 评论 -
二叉树最大深度
@Datapublic class BinaryTreeDeep { public static int getDeep(Node node) { if (node == null) { return 0; } else { Node lefNode = node.getLeftNode(); ...原创 2019-03-12 16:10:28 · 3760 阅读 · 0 评论 -
二分查找
二分查找: 适用有序数组public class BinarySearch { public static int[] arr = {1, 3, 6, 8, 9, 11, 33, 55}; public static void main(String[] args) { System.out.println(indexOfArray(11)); }...原创 2019-03-12 15:52:40 · 3640 阅读 · 0 评论 -
缓存击穿、缓存穿透、缓存雪崩
缓存击穿当某一个缓存失效时候,瞬时并发或请求量很大大,由于缓存失效,直接穿透到数据库查询。解决办法:单机情况可以使用synchronized,分布式情况设置一个redis分布式锁(原生的是setnx对应redisson),注意使用redis分布式锁的时候,最好加上超时时间。String get(String key) { String value = redis...原创 2019-03-06 10:57:42 · 3982 阅读 · 2 评论 -
关于第二版《深入理解java虚拟机》中“栈溢出”案例的不同看法
文中说明:使用-Xss参数减少栈内存容量。结果:抛出StackOverflowError异常,异常出现时输出的堆栈深度缩小。定义了大量的本地变量,增大此方法帧中本地变量表的长度。结果:抛出StackOverflowError,异常出现时输出的堆栈深度缩小。 书中代码如下: private int stackLength = 1; public void stackLea...原创 2019-01-24 15:01:38 · 3818 阅读 · 0 评论 -
String.intern()分析jdk1.6和1.7后变化
先看如下代码输出结果 String str = new StringBuilder("11").append("va").toString(); System.out.println(str.intern() == str); System.out.println("---------------------"); Stri...原创 2019-01-23 16:02:04 · 4352 阅读 · 0 评论 -
当synchronized 作用在String上(String#intern())
*需求: 在并发情况下,根据不同的id,查询库中数据,放在内存中,仅仅第一次查库,下次查询不再查库。。 思路:查询时,将id加锁,第一个获取锁的,就先查询,放入缓存中。后面获取锁的,先判断缓存 最开始按造下面设计:private static final ConcurrentMap<String, String> KEYMAP = new ConcurrentHashMap&l...原创 2018-04-19 13:04:00 · 13061 阅读 · 8 评论 -
java.net.ConnectException: Connection timed out
情景:对接银行公网https请求报错,时好时坏。报错connetion timed outjava.net.ConnectException: Connection timed out at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(A...原创 2019-01-15 19:30:51 · 40335 阅读 · 0 评论 -
Socket java.net.SocketException: Connection reset的解决方案
背景: 服务端通讯方式:TCP/IP socket 短链接。 首先看下我的最开始的socket代码:public static byte[] sendMessage(String url, int port, byte[] request, int timeout) { byte[] res = null; Socket socket = n原创 2018-01-16 19:56:17 · 176665 阅读 · 8 评论 -
ShutdownHook优雅停机
背景通常在我们重启应用服务时候,有些请求还没有执行完毕,此时我们想要等当前请求执行完毕之后,然后再进行停机操作,此时就用到了ShutdownHook 。用法使用ShutdownHook,我们可以向jvm注册一个钩子,这个钩子其实就是一条线程,在应用停机时候,会触发这个线程,此时只要再这个钩子里面写上我们需要的操作即可。注意:这里说的停机,不是强制停止。强制停机(kill -9)是不会触发...原创 2019-01-08 15:30:12 · 5682 阅读 · 0 评论 -
String.valueOf(object)和String.valueOf(null)的问题
示例代码如下: TreeMap&amp;amp;amp;amp;lt;String,Object&amp;amp;amp;amp;gt; ttt = new TreeMap&amp;amp;amp;amp;lt;String,Object&amp;amp;amp;amp;gt;(); if(ttt.get(&amp;amp;amp;quot;xxxx&amp;amp;amp;quo原创 2018-12-27 21:01:24 · 8742 阅读 · 0 评论 -
jackson反序列化失败InvalidFormatException: Can not deserialize value of type java.util.Date
问题:客户端使用fastjson进行序列化,服务端使用jackson反序列化失败。报错。Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.util.Date from String &amp;amp;amp;quot;2018-12-25 10:07:49&amp;amp;amp;quot;: ...原创 2018-12-25 12:16:19 · 21535 阅读 · 5 评论 -
sftp上传:密码认证和密钥认证两种方式
import com.jcraft.jsch.*;import lombok.extern.slf4j.Slf4j;import java.io.*;import java.util.Properties;@Slf4jpublic class SftpUtil { private String userName; // FTP 登录用户名 private Stri...原创 2018-12-14 10:40:51 · 15834 阅读 · 0 评论 -
zip压缩文件到内存字节流和压缩文件到本地目录
1、压缩文件到内存字节,不需要存储本地。2、压缩文件存储到本地目录import lombok.extern.slf4j.Slf4j;import org.apache.commons.io.IOUtils;import java.io.*;import java.util.ArrayList;import java.util.HashMap;import java.util.Lis...原创 2018-12-14 10:06:56 · 5563 阅读 · 0 评论 -
查看端口对应进程
lsof -i:80可以看见进程的PID原创 2019-09-20 11:18:22 · 1338 阅读 · 0 评论 -
idea打jar包方式
选择file-project structure2 选择artifacts3 进入下面这个页面,根据需要选择。选择你要打jar包的模块,MainClass:选择你main 函数所在的类Jar files from libraries:选中第一个打完包后是一个jar包选中第二个,打完包后是一个jar包,外带你项目所用的jar包,墙裂推荐第二个设置设置 META-INF...原创 2019-07-30 17:28:56 · 4794 阅读 · 1 评论 -
记一个简单而容易忽视的问题:IDEA中main方法加密和tomcat加密出来的字符串不一致
场景:都是在IDEA中,一个是使用main方法直接加密。一个是使用IDEA导入的tomcat容器。对同一个字符串加密(含中文字符):在IDEA中使用main方法进行RSA加密得到的HOWNQWONSOP;而使用IDEA中的tomcat进行加密时得到的字符串是:YI2N24P2JLXO3O;特意检查了IDEA的右下角的编码是UTF-8没什么问题。原因:其实原因很简单,但是容易忽视。在...原创 2018-12-14 09:46:04 · 4427 阅读 · 1 评论 -
@Cacheable 指定缓存位置
@Cacheable 可以自动生成缓存,一次在开发中使用使用该注解,本来以为重启后缓存就消失了,可以重启后,原来缓存的值还在,后来查找redis,发现缓存到redis中,如果我们不想持久化,仅仅缓存到内存,可以通过实现CacheManager,指定缓存的位置,指定ConcurrentMapCache@Cacheable(value = &amp;quot;sampleCacheTest&amp;quot;, unless = &amp;quot;...原创 2018-11-27 17:27:33 · 12408 阅读 · 0 评论 -
@Cacheable注解不生效
在同一个类中,一个方法调用另外一个有注解(比如 @Cacheable,@Async,@Transational)的方法,注解是不会生效的。原因:通过Spring注解标识的方法,在Spring加载类的时候会生成代理类,通过代理类调用原本类的方法。而同一个类中,方法间的调用并不会通过代理类,而是直接调用。...原创 2018-11-27 17:16:11 · 7550 阅读 · 0 评论 -
java实现图片压缩
import org.apache.commons.io.FileUtils;import org.apache.commons.io.IOUtils;import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.image.BufferedImage;import java.i...原创 2018-10-30 15:52:28 · 354 阅读 · 0 评论 -
kafka常用命令
<持续添加中…>kafka常用指令:查找安装目录: find / -name ‘libs’ -type d查看topickafka-topics.sh --zookeeper localhost:2181 --list原创 2019-09-19 20:36:16 · 183 阅读 · 0 评论 -
常用指令
查看cpu使用情况:ps aux --sort -rssfree -mtop原创 2019-08-12 16:51:15 · 164 阅读 · 0 评论 -
解压缩ZIP中指定文件(ZipInputStream )
压缩文件20180316.zip 其中含有文件xxx.csv。 现要解析子文件xxx.csv //关于流的操作,集成了Closeable接口的流,尽量使用try-with-resources。 下面代码并没有关闭流的操作。 //在try-with-resources里面做了的关闭流这一步操作 try (InputStream is = new FileInpu...原创 2018-06-12 15:04:59 · 8157 阅读 · 0 评论 -
微信公众号授权目录设置
微信授权目录的设置,是校验域名在要ICP备案,但是对协议限制不大。 比如,这是个ICP备案的域名http://www.xxx.com。 情景一:ICP备案的是http,但是配置目录https这个是可行的,上面这个域名可以设置的授权目录https://www.xxx.com/aa/bb/ 情景二:但是如果微信配置的支付目录是http,但是请求的时候是https。这个是不可行的。原创 2018-01-09 15:40:17 · 8836 阅读 · 0 评论 -
JSch登录sftp,跳过 Kerberos username 身份验证提示
一般情况下,我们登录sftp服务器,用户名或者密钥。但是如果对方服务器设置了Kerberos 身份验证, 则会提示输入 Kerberos username [xxx] Kerberos password 此时,可以去掉Kerberos 身份验证来解决解决办法 session.setConfig(“PreferredAuthentications”, “publickey,keybo...原创 2018-05-17 20:23:25 · 10623 阅读 · 3 评论 -
生成6位随机数
生成6位数字 RandomStringGenerator generator = new RandomStringGenerator.Builder().withinRange(‘0’, ‘9’).build(); generator.generate(6);生成6位字母 RandomStringGenerator generator = new RandomStringGenerato...原创 2018-04-04 17:38:03 · 8652 阅读 · 1 评论 -
静态块什么情况下执行
概括的说:静态代码块在类加载时调用,并且只调用一次。静态代码块最常用的作用就是:给一个对象的属性初始化。具体的说:1.当调用一个类的静态变量时,这个类中的静态代码块会执行。【只有静态代码块会执行】2.当调用一个 类的静态方法时,这个类中的静态代码块会执行。【只有静态代码块会执行】3.当创建一个 类的一个实例时,这个类中的静态代码块、非静态代码块(也叫构造代码块)、创建实原创 2017-12-14 19:09:26 · 4735 阅读 · 0 评论 -
java获取GET和POST请求参数
URL和参数列表一 获取请求方式request.getMethod()二 获取请求类型request.getContentType()三 获取所有参数keyrequest.getParameterNames() ,注:不适用contentType为multipart/form-data四 获取参数值valuere原创 2017-08-31 11:56:30 · 48023 阅读 · 2 评论