java
pf1234321
这个作者很懒,什么都没留下…
展开
-
Java中HashMap底层实现原理(JDK1.8)源码分析
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析一哈最新的JDK1.8的HashMap及性能优化。在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储...转载 2018-03-07 20:24:10 · 210 阅读 · 0 评论 -
spring 注解@primary解析
文章引自:http://jackyrong.iteye.com/blog/2208000spring中少见的注解@primary注解,例子 @Component public class MetalSinger implements Singer{ @Override public String sing(String lyrics) { retu...转载 2018-06-20 23:25:13 · 414 阅读 · 0 评论 -
spring FilterType 详解
素材来自于 http://enjoy.ke.qq.com/@ComponentScan是告诉Spring哪个packages的用注解标识的类会被spring自动扫描并且装入bean容器。 basePackages参数是用于扫描带注释组件的基本包excludeFilters 表示那些class文件不会被扫描进去 此时 useDefaultFilters 应该为true 默认值也是t...原创 2018-06-08 21:57:34 · 9920 阅读 · 0 评论 -
Spring Boot应用的健康监控
之前的系列文章中我们学习了如何进行Spring Boot应用的功能开发,以及如何写单元测试、集成测试等,然而,在实际的软件开发中需要做的不仅如此:还包括对应用程序的监控和管理。正如飞行员不喜欢盲目飞行,程序员也需要实时看到自己的应用目前的运行情况。如果给定一个具体的时间,我们希望知道此时CPU的利用率、内存的利用率、数据库连接是否正常以及在给定时间段内有多少客户请求等指标;不仅如此,我们希望通转载 2018-06-10 11:06:31 · 447 阅读 · 0 评论 -
java 线程方法join的简单总结
虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结。 一、作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并行执行变为串行执行。具体看代码: public class JoinTest { public static void main(String [] args) throws Int...转载 2018-06-10 11:19:15 · 176 阅读 · 0 评论 -
MyBatis中resultType和resultMap的区别
一、综述MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。...转载 2018-07-15 17:09:48 · 331 阅读 · 0 评论 -
Mybatis Generator
参考 https://enjoy.ke.qq.com/#category=-1 学习资料 MyBatis Generator:MyBatis 的开发团队提供了一个很强大的代码生成器,代码包含了数据库表对应的实体 类 、Mapper 接口类、 Mapper XML 文件和 Example 对象等,这些代码文件中几乎包含了全部的单表操作方 法,使用 MBG 可以极大程度上方便我们使用 M...原创 2018-07-30 21:44:21 · 300 阅读 · 0 评论 -
mybatis 如何批量操作数据库
1、通过foreach 在sql里面批量操作数据 示例如下 <insert id="insertForeach4Batch"> insert into t_user (user_name, real_name, sex, mobile,email,note, position_id) values ...原创 2018-07-30 22:01:54 · 1357 阅读 · 0 评论 -
Java动态代理之JDK实现和CGlib实现(简单易懂)
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6542259.html 一:代理模式(静态代理) 代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理。 静态代理由 业务实现类、业务代理类 两部分组成。业务实现类 负责实现主要的业务方法,业务代理类负责...转载 2018-08-04 22:58:12 · 156 阅读 · 0 评论 -
谈谈设计模式的几个原则
单一职责原则:一个类或者一个接口只负责唯一项职责,尽量设计出功能单一的接口; 高层模块不应该依赖低层模块具体实现,解耦高层与低层。既面向接口编程,当实现发生变化时,只需提供新 的实现类,不需要修改高层模块代码; 开放-封闭原则:程序对外扩展开放,对修改关闭;换句话说,当需求发生变化时,我们可以通过添加新模块 来满足新需求,而不是通过修改原来的实现代码来满足新需求 ...原创 2018-08-04 23:09:44 · 219 阅读 · 0 评论 -
对象的访问定位:句柄与直接指针
对象的访问定位:句柄与直接指针Java程序通过栈中的reference数据来操作堆上的具体对象,而对象的访问方式取决于虚拟机的实现。主流访问方式有句柄和直接指针两种句柄方式Java堆中将会划出一块内存来作为句柄池,reference对象存储的就是对象的句柄地址。句柄中包含了对象实例数据和类型数据的具体地址:直接指针方式reference对象直接存储对象地址:两者对比...转载 2018-08-12 22:46:27 · 572 阅读 · 0 评论 -
BlockingQueue
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起...转载 2018-06-04 23:03:49 · 148 阅读 · 0 评论 -
三种基本的GC算法基石
一、 标记/清除算法内存中的对象构成一棵树,当有效的内存被耗尽的时候,程序就会停止,做两件事,第一:标记,标记从树根可达的对象(途中水红色),第二:清除(清楚不可达的对象)。标记清除的时候有停止程序运行,如果不停止,此时如果存在新产生的对象,这个对象是树根可达的,但是没有被标记(标记已经完成了),会清除掉。缺点:递归效率低性能低;释放空间不连续容易导致内存碎片;会停止整个程序运行;二、 复制算法把...转载 2018-06-04 21:55:27 · 783 阅读 · 0 评论 -
8个SQL语句常用优化技巧
要提高SQL语句的执行效率,最常见的方法就是建立索引,以及尽量避免全表扫描。在本章MySQL教程中,UncleToo给大家整理一些常见的SQL优化技巧,避免全表扫描。一个简单的优化,也许能让你的SQL执行效率提高几倍,甚至几十倍。1、避免在where子句中使用 is null 或 is not null 对字段进行判断。如:select id from table where name is nu...转载 2018-03-07 20:51:17 · 156 阅读 · 0 评论 -
volatile和synchronized的区别
volatile和synchronized特点首先需要理解线程安全的两个方面:执行控制和内存可见。执行控制的目的是控制代码执行(顺序)及是否可以并发执行。内存可见控制的是线程执行结果在内存中对其它线程的可见性。根据Java内存模型的实现,线程在具体执行时,会先拷贝主存数据到线程本地(CPU缓存),操作完成后再把结果从线程本地刷到主存。synchronized关键字解决的是执行控制的问题,它会阻止其...转载 2018-03-07 21:07:10 · 163 阅读 · 0 评论 -
Java并发容器(一) CocurrentHashMap的应用及实现
CocurrentHashMap的优势首先常用三种HashMap包括HashMap,HashTable和CocurrentHashMap:HashMap在并发编程过程中使用可能导致死循环,因为插入过程不是原子操作,每个HashEntry是一个链表节点,很可能在插入的过程中,已经设置了后节点,实际还未插入,最终反而插入在后节点之后,造成链中出现环,破坏了链表的性质,失去了尾节点,出现死循环。Hash...转载 2018-03-08 15:53:57 · 369 阅读 · 0 评论 -
Tomcat 7最大并发连接数的正确修改方法
转载:::http://blog.csdn.net/qysh123/article/details/11678903这是个很简单的问题,但是搜了一圈,发现大家都写错了。所以这里总结一下:几乎所有的中文网页都介绍,要修改Tomcat的默认最大并发连接数,应该进行如下设置(实际上这些步骤是错误的):--------------------------------------------在tomcat配...转载 2018-03-12 21:32:33 · 419 阅读 · 0 评论 -
CentOS下搭建SVN服务器
一,介绍SVN SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。 ----百度百科二,安装SV官网下载: http://subversion.apache.org/pack...转载 2018-03-23 22:17:48 · 168 阅读 · 0 评论 -
java 线程 中断标志位
课程素材来自 http://enjoy.ke.qq.com/ 版权所有java线程中,线程中断方法详解:线程自然终止:自然执行完或抛出未处理异常stop(),resume(),suspend()已不建议使用,stop()会导致线程不会正确释放资源,suspend()容易导致死锁。java线程是协作式,而非抢占式调用一个线程的interrupt() 方法中断一个线程,并不是强行关闭这个线程,只...原创 2018-05-19 12:19:00 · 3275 阅读 · 1 评论 -
java 启动线程的方式 3种方式详解
课程素材来自 http://enjoy.ke.qq.com/ 版权所有java 启动一个线程 最常见的方式有2种(继承thread 实现runnable接口),其实还有另外一种方式,是实现Callable接口前面两种方式不说了 强调一下 runnable比thread好的方面是java是单继承 多实现的 ,所以个人认为runnable比thread好这里主要说callable接口 ...原创 2018-05-19 12:39:34 · 586 阅读 · 0 评论 -
CountDownLatch 知识点详解
课程素材来自 http://enjoy.ke.qq.com/ 版权所有 CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。 比如当CountDownLatch提前减到0 了 那么其他的线程就会...原创 2018-05-19 12:50:06 · 460 阅读 · 0 评论 -
ThreadLocal 详解
ThreadLocal 就是部分变量 几个线程要同时来访问 为了保证数据的安全性 简单的理解就是一个大大的 map<thread,value> 我们知道在一般情况下,只有无状态的Bean才可以在多线程环境下共享,在Spring中,绝大部分Bean都可以声明为singleton作用域。就是因为Spring对一些Bean(如RequestContextHolder、Trans...原创 2018-05-19 13:09:31 · 211 阅读 · 0 评论 -
java多线程系列(四)---ReentrantLock的使用
转载地址 https://www.cnblogs.com/-new/p/7256297.html博客园首页新随笔联系订阅管理随笔 - 55 文章 - 0 评论 - 95java多线程系列(四)---ReentrantLock的使用Lock的使用前言:本系列将从零开始讲解java多线程相关的技术,内容参考于《java多线程核心技术》与《java并发编程实战》等相关资料,希望站在巨人的肩膀上,再...转载 2018-05-19 19:54:34 · 148 阅读 · 0 评论 -
Tomcat的三种部署模式
原创 2018-08-27 22:16:06 · 207 阅读 · 0 评论 -
Tomcat 调优方案
Tomcat的默认配置,性能并不是最优的,我们可以通过优化tomcat以此来提高网站的并发能力。提高Tomcat的性能可以分为两个方向。服务器资源服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响,所以说服务器性能牛B,Tomcat也不会太差。当然提高服务器的硬件配置,是需要大量RMB的支持的。所以不到万不得已不会采用这种方式,一般公司会采取下面这种通过优化配置,来提升Tomc...转载 2018-08-28 11:31:16 · 122 阅读 · 0 评论 -
CyclicBarrier
2.CyclicBarrier CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每...转载 2018-12-17 16:56:37 · 121 阅读 · 0 评论 -
Tomcat 部署项目的4种方法
目录1、下载 Tomcat 服务器 2、启动并部署 Tomcat 服务器 3、Tomcat 的目录结构 4、部署项目的第一种方法(项目直接放入 webapps 目录中) 5、部署项目的第二种方法(修改 conf/server.xml 文件 ) 6、部署项目的第三种方法(apache-tomcat-7.0.52\conf\Catalina\localhost ) 回到顶部1、...转载 2018-12-17 17:29:09 · 176 阅读 · 0 评论 -
Spring classPath:用法
classpath就是代表 /WEB-INF /classes/ 这个路径(如果不理解该路径,就把一个web工程发布为war包,然后用winrar查看其包内路径就理解啦)常用的场景:在SSH架构中,配置spring的上下文环境<context-param> <param-name>contextConfigLocation</param-name&...转载 2018-12-28 12:43:25 · 3192 阅读 · 0 评论 -
JDK1.7源码分析【集合】HashMap的死循环
前言在JDK1.7&1.8源码对比分析【集合】HashMap中我们遗留了一个问题:为什么HashMap在调用resize() 方法时会出现死循环?这篇文章就通过JDK1.7的源码来分析并解释这个问题。如下,并发场景下使用HashMap造成Race Condition,从而导致死循环,现象是CPU 100%被占用。final HashMap<String, Strin...转载 2018-12-18 14:50:20 · 206 阅读 · 0 评论 -
HashMap在JDK1.8中并发操作,代码测试以及源码分析
package JDKSource;import java.util.HashMap;import java.util.Map;import java.util.concurrent.TimeUnit;/** * @Auther: wenbochang * @Date: 2018/8/5 11 */public class TestHashMap { /** ...转载 2018-12-18 15:02:28 · 179 阅读 · 0 评论 -
JDK1.8 HashMap源码分析
一、HashMap概述 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。 下图中代...转载 2018-12-18 15:04:17 · 133 阅读 · 0 评论 -
HTTP 方法:GET 对比 POST
两种最常用的 HTTP 方法是:GET 和 POST。什么是 HTTP?超文本传输协议(HTTP)的设计目的是保证客户机与服务器之间的通信。HTTP 的工作方式是客户机与服务器之间的请求-应答协议。web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能...转载 2018-12-24 15:22:56 · 182 阅读 · 0 评论 -
java自带的监控工具VisualVM
VisualVM 是一款免费的,集成了多个 JDK 命令行工具的可视化工具,它能为您提供强大的分析能力,对 Java 应用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回收器、执行内存和 CPU 分析,同时它还支持在 MBeans 上进行浏览和操作。本文主要介绍如何使用 VisualVM 进行性能分析及调优。http://visualvm.github.io/re...原创 2018-12-19 12:02:24 · 1912 阅读 · 0 评论 -
java建造者模式--给一个你一看就懂的建造者模式
在开始写这个建造者模式的文章前,我也确实看了挺多次其他介绍这个模式的文章。感觉看了很多次才有一点对建造者模式明白透彻的感觉。细心想来,可能是接口的理解不好,平时工作比较少用到过建造者模式,所以理解的比较慢。所以看通了建造者模式,就可以加深自己对接口的理解。好了,接下来让我们进入正题,建造者模式呢,很多其他介绍这个文章的内容中都提到了4个角色。什么builder,director的一时让同为初次了...转载 2019-01-16 22:27:01 · 172 阅读 · 0 评论 -
mysql数据向Redis快速导入
Redis协议* 参数个数$ 第一个参数长度 第一个参数$ 第一个参数长度 第二个参数… …编写SQL语句,把mysql数据组合成Redis协议数据流复制代码SELECT CONCAT(“*16\r\n”,‘KaTeX parse error: Can't use function '\r' in math mode at position 24: …H(redis_cmd)...转载 2019-03-31 11:04:47 · 245 阅读 · 0 评论 -
漫画:什么是分布式锁?【转载】
分布式锁的实现有哪些?1.Memcached分布式锁利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程得到了锁。2.Redis分布式锁和Memcached的方式类似,利用Redis的setnx命令。此命令同样是原子性操作,只有在key不存在的情况下,才能set成功。(setnx命令并不完善,后续会介绍替代方案)3.Zo...转载 2018-12-20 16:35:35 · 234 阅读 · 0 评论 -
JAVA垃圾收集器之Parallel Scavenge收集器
Parallel Scavenge收集器是JAVA虚拟机中垃圾收集器的一种。和ParNew收集器类似,是一个新生代收集器。使用复制算法的并行多线程收集器。1、特点Parallel Scavenge收集器的关注点与其他收集器不同, ParallelScavenge收集器的目标则是达到一个可控制的吞吐量(Throughput)。所谓吞吐量就是CPU用于运行用户代码的时间与CPU总消耗时间的比值...转载 2018-12-19 14:10:03 · 695 阅读 · 0 评论 -
怎么查看jvm垃圾回收的算法看是那个
在控制台输入命令java -XX:+PrintCommandLineFlags -version显示结果 -XX:+UseParallelGC 新生代使用ParallerGC,老年代使用Serial Old 垃圾回收器列表并行:垃圾收集的多线程的同时进行。并发:垃圾收集的多线程和应用的多线程同时进行。垃圾回收器工作示意图Serial/Serial ...原创 2018-09-01 17:17:53 · 11758 阅读 · 2 评论 -
JVM 新生代老年代
1.为什么会有年轻代我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的唯一理由就是优化GC性能。你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候我们要找到哪些对象没用,这样就会对堆的所有区域进行扫描。而我们的很多对象都是朝生夕死的,如果分代的话,我们把新创建的对象放到某一地方,当GC的时候先把这块存“朝生夕死”对象的区域进行回收,这样就会腾出...转载 2018-09-01 17:19:12 · 119 阅读 · 0 评论 -
tomcat运行三种模式:http-bio|http-nio|http-apr介绍
Tomcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一。不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式,那么这三种运行模式有什么区别呢,我们又如何修改Tomcat Connector的运行模式来提高Tomcat的运行性能呢?下面,我们先大致了解Tomcat Connector的三种运行模式。...转载 2018-08-25 22:47:17 · 1143 阅读 · 0 评论