![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后台
缘自天方
个人小心得,不定期更新
展开
-
Java奇淫巧技之Lombok
背景 我们在开发过程中,通常都会定义大量的JavaBean,然后通过IDE去生成其属性的构造器、getter、setter、equals、hashcode、toString方法,当要对某个属性进行改变时,比如命名、类型等,都需要重新去生成上面提到的这些方法,那Java中有没有一种方式能够避免这种重复的劳动呢?答案是有,我们来看一下下面这张图,右面是一个简单的JavaBean,只定义了两个转载 2017-06-06 13:10:41 · 323 阅读 · 0 评论 -
垃圾回收算法比较
垃圾回收的瓶颈传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在几百甚至几十毫秒以内,如果分代垃圾回收方式要达到这个指标,只能把最大堆的设置限制在一个相对较小转载 2017-08-14 10:02:23 · 188 阅读 · 0 评论 -
BlockingQueue深入分析
1.BlockingQueue定义的常用方法如下 抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e,time,unit)移除remove()poll()take()poll(time,unit)检查element()peek()不可用不可用原创 2017-08-06 19:10:31 · 177 阅读 · 0 评论 -
IDEA快捷键及小技巧
idea开发工具,初学者可以参考原创 2017-06-11 11:25:14 · 431 阅读 · 0 评论 -
spring声明式事务 同一类内方法调用事务失效
[问题] Spring的声明式事务,我想就不用多介绍了吧,一句话“自从用了Spring AOP啊,事务管理真轻松啊,真轻松;事务管理代码没有了,脑不酸了,手不痛了,一口气全配上了事务;轻量级,测试起来也简单,嘿!”。不管从哪个角度看,轻量级声明式事务都是一件解放生产力的大好事。所以,我们“一直用它”。 不过,最近的一个项目里,却碰到了一个事务管理上的转载 2017-10-11 10:39:34 · 391 阅读 · 0 评论 -
JAVA并发编程J.U.C学习总结
JSR 166及J.U.C什么是JSR:JSR,全称 Java Specification Requests, 即Java规范提案, 主要是用于向JCP(Java Community Process)提出新增标准化技术规范的正式请求。每次JAVA版本更新都会有对应的JSR更新,比如在Java 8版本中,其新特性Lambda表达式对应的是JSR 335,新的日期和时间API对应的是JSR 310。什...转载 2018-07-05 14:32:13 · 255 阅读 · 0 评论 -
Spring中bean的作用域与生命周期
在Spring中,那些组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。简单地讲,bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。 Spring中的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应...转载 2018-08-11 16:39:07 · 20829 阅读 · 3 评论 -
分布式高并发下唯一标识snowflake算法
简介:在系统小时,唯一标识的产生,可以利用公用模块来处理,比如数据库表的唯一键、或者缓存的唯一id等等方式。但在分布式高并发的系统中,如果还是这样使用公共模块,就会产生很大的风险和瓶颈。网上也有相关推荐的,twitter的snowflake就能解决这个问题。snowflake满足了以下个要求: 1. 只用64位就能达到要求;而无需128的方式。 2. 考虑到排序的要求,标识的排序跟时间...转载 2018-09-04 17:53:42 · 1106 阅读 · 0 评论 -
分布式架构知识体系必读
1.问题 1、何为分布式何为微服务? 2、为什么需要分布式? 3、分布式核心理论基础,节点、网络、时间、顺序,一致性? 4、分布式是系统有哪些设计模式? 5、分布式有哪些类型? 6、如何实现分布式? 2.关键词节点,时间,一致性,CAP,ACID,BASE,P2P,机器伸缩,网络变更,负载均衡,限流,鉴权,服务发现,服务编排,降级,熔...转载 2019-02-13 14:51:03 · 329 阅读 · 0 评论 -
锁的粒度:ThreadLocal、volatile、Atomic和Synchronized
导读:题目中提到的几个关键字,分别是解决并发问题中,加锁所使用到的几个关键字,每个关键字代表的锁的粒度 不同,本篇博客,主要是从概念定义上,区分这几个关键字的应用场景。(PS:睡梦中,依稀记得有回面试的时候,问了我一个问题:你们在加锁的时候,加多大的锁? 哇塞,当时愣了一下,压根儿就没有这个大小的概念,我真的以为都是一样的)话说,就像加锁日记本的锁是个很小的艺术锁,保险箱一般是转载 2017-08-13 21:38:17 · 848 阅读 · 0 评论 -
深入理解volatile关键字
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我转载 2017-08-13 21:23:35 · 186 阅读 · 0 评论 -
Spring中@Autowired注解和@Resource注解的区别
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是nam原创 2017-07-10 17:15:44 · 303 阅读 · 0 评论 -
Spring实现mysql读写分离
Spring实现mysql读写分离原创 2017-06-11 16:17:34 · 442 阅读 · 0 评论 -
ConcurrentHashMap实现原理
ConcurrentHashMap是Java1.5中引用的一个线程安全的支持高并发的HashMap集合类。这篇文章总结了ConcurrentHashMap的内部实现原理,是对于自己理解后的一些整理。1.HashTable与ConcurrentHashMap的对比HashTable本身是线程安全的,写过Java程序的都知道通过加Synchronized关键字实现线程安全,这样对整转载 2017-08-09 11:16:28 · 145 阅读 · 0 评论 -
让SpringMVC支持可版本管理的Restful接口
需求移动互联网时代的到来,软件开发的模式也在变化。记得以前做B/S的后台开发,基本上没有Http接口一说,全部是通过渲染模板技术(jsp,freemark)把最终html展示给最终用户。现在完全变了,基于后台接口提供方,我们从来不是针对只是浏览器展示的后台输出,而是各种终端,比如android,ios。所以设计接口的时候一定要小心,一旦放出去的接口可能就永远都难以变动(除非你强制客户端用户转载 2017-08-11 10:46:31 · 2690 阅读 · 0 评论 -
两款codereview工具
我们是使用Eclipse IDE开发的,Eclipse的插件不计其数,不怕找不到,就怕你不找,因此从Eclipse Code Review Plugin 下手。经过调研和试用,我找到两款比较好用的免费插件:ReviewClipse 和 Jupiter 。简单介绍一下这两个工具的特点和在Qone中的使用场景ReviewClipse 官方地址:http:转载 2017-08-05 17:02:01 · 1413 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除转载 2017-08-13 19:14:36 · 143 阅读 · 0 评论 -
ThreadLocal用法详解和原理
一、用法ThreadLocal用于保存某个线程共享变量:对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。1、ThreadLocal.get: 获取ThreadLocal中当前线程共享变量的值。2、ThreadLocal.set: 设置ThreadLocal中当前线程共享变量的值。3、T转载 2017-08-13 19:27:53 · 1114 阅读 · 0 评论 -
AtomicInteger源码分析——基于CAS的乐观锁实现
1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来。在转载 2017-08-13 19:41:40 · 210 阅读 · 2 评论 -
机票垂直搜索引擎之性能优化
行业背景与垂直搜索从2011年到2016年,无论国内,还是国际,整体趋势都是机票价格便宜了,坐飞机的人也越来越多。特别是国际机票,这五年里机票价格下降了30%,客运量增长了140%。 乘客越来越多,购买机票的渠道有哪些呢?现在主要有三个:网络平台、代售点和航司官网。像携程、去哪儿、飞猪、同程等,都是主流的网络购票平台;像旅行社这类代售点,是旅行团的主要购票渠道;同时大部分航空公司的官...转载 2019-02-13 15:04:50 · 985 阅读 · 0 评论