java
文章平均质量分 56
Leonarde_WP
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
面试 - HashMap的31连环炮
写在前面在面试中,HashMap基本必问,只是问法各有不同而已。曾经我也和很多面试官聊过关于HashMap的话题,使用HashMap就能考察面试者的很多知识点。不幸的是,很大部分人都拜倒在HashMap的石榴裙底下。HashMap为什么如此受面试官青睐?我觉得其中有4个原因: HashMap在我们工作中使用频率相当高。 Java基础(可以通过此Java集合) 线程安全问题(可以通过这个问题引入多线程并发编程的相关问题) 大厂都在问,岂能不问?(不问的话,显得面转载 2021-04-22 21:54:47 · 418 阅读 · 0 评论 -
10张图告诉你多线程那些破事
头发很多的程序员:『师父,这个批量处理接口太慢了,有什么办法可以优化?』架构师:『试试使用多线程优化』第二天头发很多的程序员:『师父,我已经使用了多线程,为什么接口还变慢了?』架构师:『去给我买杯咖啡,我写篇文章告诉你』……吭哧吭哧买咖啡去了在实际工作中,错误使用多线程非但不能提高效率还可能使程序崩溃。以在路上开车为例:在一个单向行驶的道路上,每辆汽车都遵守交通规则,这时候整体通行是正常的。『单向车道』意味着『一个线程』,『多辆车』意味着『多个job任务』。单线程顺利同行..转载 2021-04-22 21:50:03 · 161 阅读 · 0 评论 -
Zookeeper客户端Curator使用详解
https://blog.youkuaiyun.com/u012129558/article/details/81076487转载 2020-08-09 16:40:28 · 167 阅读 · 0 评论 -
RateLimiter单机限流
一般用RateLimiter来限制服务访问其他资源的qps。假设第三方服务接口限流75,我们需要配置预热时间3秒,固定速率增加qps限制(需要足够请求数来使其达到饱和值,否则速率还会下降),3秒后达到最大qps=75;RateLimiter rateLimiter = RateLimiter.create(75, 3, TimeUnit.SECONDS);rateLimiter.acquire();//TODO 调用第三方服务接口这么做是为了使qps较为平稳的达到最大值。如果不是平..原创 2020-07-28 16:54:48 · 1013 阅读 · 0 评论 -
Spring 如何解决循环依赖
https://zhuanlan.zhihu.com/p/84267654转载 2020-07-19 20:59:05 · 198 阅读 · 0 评论 -
JDK8中支持Lambda表达式的函数式接口
Java 8中,Function,Consumer,Predicate,Supplier举例https://blog.youkuaiyun.com/wang252949/article/details/79291205?ops_request_misc=&request_id=&biz_id=102&utm_term=Predicate%20Consumer&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sob原创 2020-07-17 14:49:11 · 493 阅读 · 0 评论 -
重试utils
/** * @description 重试utils */public class RetryUtils { /** * 默认用法(最多重试3次),返回null表示多次重试依旧失败 */ public static <T, R> R retryDo(Function<T, R> doFunction, T doFunctionRequest, Function<R, Boolean> checkFunction, Logger.原创 2020-06-21 20:28:14 · 226 阅读 · 0 评论 -
优雅关机
public class XXXApplication extends WebMvcConfigurerAdapter { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(XXXApplication.class);...原创 2020-03-24 21:27:01 · 178 阅读 · 0 评论 -
Quartz - 定时任务的简单使用
https://zhuanlan.zhihu.com/p/110417841转载 2020-03-03 16:18:26 · 229 阅读 · 0 评论 -
SPI技术
JDK SPI是什么最近工作中听几个同事说了好几次SPI这个名词,虽然和我没关系,但是心里默默想还是学习一下,不然下次和我说到SPI,连是什么都不知道那就尴尬了。所以SPI是什么呢?SPI全称Service Provider Interface,在Java中还是一个比较重要的概念,是Java提供的一套用来被第三方实现或者扩展的API,或者换句话说,SPI是一种服务发现机制。JDK...转载 2020-02-28 16:38:28 · 999 阅读 · 2 评论 -
获取Class对象的三种方式
第一种,使用 Class.forName(类的全路径名)静态方法。前提:已明确类的全路径名。(用的较多)第二种,使用该类的class 属性获取 Class 对象。说明:仅适合在编译前就已经明确要操作的 Class。(鸡肋)第三种,使用类对象的 getClass() 方法。...原创 2020-02-20 11:46:07 · 2107 阅读 · 0 评论 -
@Autowired与@Resource的区别
建议使用@Resource1、@Resource默认按名称匹配,是JDK的;@Autowired默认类型匹配,是Spring的。2、@Resource相对而言更精确些,它功能上相当于@Autowired和@Qualifier("名称")的组合。3、@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resou...原创 2020-01-22 16:22:36 · 268 阅读 · 0 评论 -
Java多线程:彻底搞懂线程池
线程池不建议使用Executors去创建,而是通过ThreadPoolExecutor手动创建的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。Executors各个方法的弊端:newFixedThreadPool和newSingleThreadExecutor: 主要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。(笔者注:阻塞队列均采用Link...转载 2019-08-25 17:32:46 · 336 阅读 · 0 评论 -
20ms内RPC查询接口建设 - 一次优化经验
1、技术前提:现需要提供一个查询商品标签的RPC接口(响应时间50ms以内,2W+QPS);数据已分库分表(8库65表);2、业务特性:商品标签最多一天变更一次;大部分查询请求是不会命中标签的;3、解决思路:需要缓存的帮助,全部打到db上是不现实的。 1)商品标签值不常变,缓存时间可以长一些(一小时),数据量较大,考虑使用redis缓存; 2)如果这个商品有秒杀...原创 2019-09-06 15:08:25 · 632 阅读 · 0 评论 -
@ControllerAdvice + @ExceptionHandler 捕获全局异常
来源:https://blog.youkuaiyun.com/w372426096/article/details/78429141@ControllerAdvice,是Spring3.2提供的新注解,从名字上可以看出大体意思是控制器增强。让我们先看看@ControllerAdvice的实现:package org.springframework.web.bind.annotation; @T...转载 2018-08-21 18:17:29 · 1104 阅读 · 0 评论 -
ClassLoader的使用
原文:https://blog.youkuaiyun.com/briblue/article/details/54973413总结:ClassLoader的具体作用就是将class文件加载到jvm虚拟机中去,程序就可以正确运行了。但是,jvm启动的时候,并不会一次性加载所有的class文件,而是根据需要去动态加载。Java语言系统自带有三个类加载器: BootstrapClassLoader 最顶层的加载类,...转载 2018-06-08 17:23:55 · 509 阅读 · 0 评论 -
JAVA-写更好更少的代码(技巧)
做项目,从数据角度出发,分为增删查改,先做增逻辑,再做查逻辑,一般到这里就可以写核心代码了,最后再做删、改逻辑,这样可以减少很多开发过程中的问题,即使遇到问题修改量也会少些,谨记!!!一、判断字符串是否为空白/null,(来源org.apache.commons.lang3.StringUtils)StringUtils.isBlank(str);StringUtils.isNotB...原创 2019-03-14 11:18:26 · 357 阅读 · 0 评论 -
redis 加锁新方法 - jedisCluster.set(key,value,"NX","EX",expireSeconds);
参考:https://blog.youkuaiyun.com/Dennis_ukagaka/article/details/78072274 incr、incrBy、setnx的加锁方式都是有缺陷的,现在使用set方法加锁:jedisCluster.set(key, value, "NX", "EX", expireSeconds); // SET IF NOT EXIST,而且还是原子的操...原创 2018-07-27 17:19:25 · 36781 阅读 · 8 评论 -
spring方法级参数校验(@Validated)
参考:https://blog.youkuaiyun.com/kenight/article/details/77774465 https://blog.youkuaiyun.com/feng020a/article/details/54754950依赖的jar包:spring相关jar包版本:4.3.1.RELEASE<dependency> <groupI...原创 2018-07-27 15:22:39 · 10510 阅读 · 0 评论 -
YY骨架工程
一、多模块(企业的核心项目:一级系统):1、skeleton-demo-public(提供给其他系统使用的jar包,完全独立,不引入下面的jar包(用脚本程序去判断);一旦修改就需要deploy)2、总POM.xml(jar包版本控制、参数属性配置、插件配置等等)3、skeleton-demo-tech-common(各层通用jar包)(只存放技术有关代码,不可以存放业务代码,不引入下面的jar包...原创 2018-07-05 14:56:59 · 164 阅读 · 0 评论 -
spring与springMVC父子容器的坑
前言:在整合spring和SpringMVC这两个框架中,Spring作为父容器(一般用来管理controller层),SpringMVC作为子容器。为什么要用到两个容器呢?因为Spring的扩展性,所以保留了spring的父容器配置;而且子容器是可以调用父容器对象的,反之不行。 但是今天遇到一个问题,纠结了许久。(spring版本:4.3.6.RELEASE) 一个项目的...原创 2018-07-10 16:34:08 · 555 阅读 · 0 评论 -
Executor线程池的最佳线程数量计算
如果是IO密集型应用,则线程池大小设置为2N+1;如果是CPU密集型应用,则线程池大小设置为N+1;N代表CPU的核数。假设我的服务器是4核的,且一般进行大数据运算,cpu消耗较大,那么线程池数量设置为5为最优。(现在很多项目线程池滥用,注意分配线程数量,建议不要动态创建线程池,尽量将线程池配置在配置文件中,这样方便以后整体的把控和后期维护。每个核心业务线程池要互相独立,互不影响。...原创 2018-06-19 18:35:17 · 11482 阅读 · 0 评论 -
JAVA-从深耕到彷徨
从事JAVA已经五年了,这是一门伟大的语言(万物皆对象,这境界,啧啧啧),但是最近越来越想抛弃它了。原因如下:一、基本数据类型、数组、函数式编程Lambda表达式等这些非面向对象的用法二、JAVA的低糖用法,比如JAVA的伪泛型,多线程这些三、有一个不靠谱的主子,随时带你入坑不过JAVA还是有很多伟大的地方(运行期动态语言、面向对象思想、JVM平台等等),即使未来有门语言会取代它,那也是基于它的思...原创 2018-05-31 16:30:26 · 303 阅读 · 0 评论 -
如何下载JDK历史版本
一、访问 http://www.oracle.com/technetwork/java/javase/downloads/index.html 二、最下方Java Archive,点击DOWNLOAD三、选择你想下载的版本四、接受证书之后,便可下载原创 2018-06-04 09:09:58 · 2270 阅读 · 3 评论 -
Process对象.waitFor()的阻塞问题(坑)
有时需要在程序中调用可执行程序或脚本命令:Process process = Runtime.getRuntime().exec(shPath);int exitCode = process .waitFor();Runtime.getRuntime()返回当前应用程序的Runtime对象,该对象的exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对...转载 2018-05-16 15:30:23 · 14803 阅读 · 0 评论 -
如何正确地写出单例模式
或者许多的朋友在使用单例模式中会学到双重检查加锁(double-checked locking)的应用。public class Singleton { private volatile static Singleton uniqueInstance; private Singleton(){} public static Singleton getInstance(){...转载 2018-06-02 17:09:48 · 600 阅读 · 0 评论 -
Spring整合Jedis2.9(客户端作集群并使用密码)
参考:https://blog.youkuaiyun.com/cslucifer/article/details/78586809jar包:<!-- Jedis 只有2.9.0版本以上,jedis集群才支持auth密码 --><dependency> <groupId>redis.clients</groupId> <artif...原创 2018-07-31 09:19:30 · 2125 阅读 · 0 评论 -
java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
转载:https://www.cnblogs.com/newcaoguo/p/6224071.htmlFile file = new File(".\\test.txt"); System.out.println(file.getPath()); System.out.println(file.getAbsolutePath()); System.out.println(file.ge...转载 2018-08-08 09:45:53 · 230 阅读 · 0 评论 -
JDK 1.8 新特性之Stream 详解个人笔记
来源:https://blog.youkuaiyun.com/chenhao_c_h/article/details/80691284转载 2019-01-21 14:57:08 · 226 阅读 · 0 评论 -
判断字符串中的中文字符数量
匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]原创 2018-12-28 10:56:23 · 1575 阅读 · 0 评论 -
JAVA开发装机必备软件
一、Navicat for Mysql:https://blog.youkuaiyun.com/wypersist/article/details/79834490二、Postman:http://www.cnblogs.com/LTmei/p/10028831.html三、JDK8:https://jingyan.baidu.com/article/e2284b2b5967e7e2e7118d74....原创 2018-12-05 19:37:05 · 686 阅读 · 0 评论 -
java中int转成String 位数不足前面补零
来源:http://www.xuebuyuan.com/543811.html java中int转String位数不够前面补零String.format("%010d", 25); //25为int型 0代表前面要补的字符 10代表字符串长度 d表示参数为整数类型 ...转载 2018-11-23 16:46:30 · 5213 阅读 · 1 评论 -
Lombok 介绍
使用Lombok的前提是,开发团队中都要支持这种用法,否则他人是无法运行的。详细请查看:https://blog.youkuaiyun.com/motui/article/details/79012846转载 2018-10-29 14:07:21 · 146 阅读 · 0 评论 -
Guava - EventBus(事件总线) - 事件发布订阅模式(一对多、同一个JVM下解耦)
原文:https://www.cnblogs.com/whitewolf/p/4132840.htmlGuava在guava-libraries中为我们提供了事件总线EventBus库,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。不再多的废话,直奔Guava EventBus主题。首先Guava为我们提供了同步事件E...转载 2018-08-21 17:28:33 · 5044 阅读 · 0 评论 -
XSS跨站脚本攻击以及解决办法
来源:https://www.cnblogs.com/insaneXs/p/7465014.htmlXSS,全称为Cross Site Script,跨站脚本攻击,是WEB程序中一种常见的漏洞。其主要的攻击手段是在在利用网站上的可由用户输入信息的地方,恶意注入含有攻击性的脚本,达到攻击网站或者窃取用户cookied等隐私信息的目的。XSS漏洞主要分为两种类型,一种是Stored XSS, ...转载 2018-08-21 15:52:20 · 8298 阅读 · 1 评论 -
Cpdetector识别网页编码、文件编码格式(防止乱码)
https://blog.youkuaiyun.com/u014566794/article/details/56839400?locationNum=6&fps=1https://blog.youkuaiyun.com/upshi/article/details/69946688https://blog.youkuaiyun.com/henryzhang2009/article/details/79119066...转载 2018-08-20 14:26:18 · 632 阅读 · 0 评论 -
JAVA获取路径的几种通用方法(坑)
一、Class.getResource(String path)path不以’/'开头时,默认是从此类所在的包下取资源;path 以’/'开头时,则是从ClassPath根下获取资源;获取到的路径一般是这种格式:/E:/workspace/Test/bin/testpackage/二、Class.getClassLoader().getResource(String path)...转载 2018-08-08 10:14:43 · 335 阅读 · 0 评论 -
(JAVA)Process.waitFor()方法的返回值参考手册
转载:https://blog.youkuaiyun.com/qq_35661171/article/details/79096786 OS error code 0: Success操作系统错误代码0:成功OS error code 1: Operation not permitted操作系统错误代码1:操作不允许OS error code 2: No such file or di...转载 2018-08-08 09:49:33 · 6529 阅读 · 0 评论 -
日志推荐选择:log4j2+slf4j
一、简介:logback是开源日志工具库,是日志功能的真正实现者;slf4j是一个日志门面抽象框架,是日志的入口,由slf4j去调用logback的功能。为什么呢?因为除了logback,你以后可能会选择log4j、log4j 2.0或者其他工具作为日志实现者,那么因为入口框架不变(目前这些工具slf4j都支持),只需要很少的改动即可。二、为什么选择logback:更快更强(更详细的原因可以自行百...转载 2018-06-05 15:39:12 · 1478 阅读 · 0 评论
分享