![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java学习
文章平均质量分 69
Harden丶13
这个作者很懒,什么都没留下…
展开
-
Mybatis如果在select sql 中不写resultType或resultMap会发生什么
1.结论如果select sql 中不写 resultType 或 resultMap在运行该 sql 时会抛出org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement '****(具体的sql方法)' It's likely that neither a Result Type nor a Result Map was s原创 2020-11-26 14:54:38 · 4053 阅读 · 3 评论 -
Zookeeper总结分享
1. Zookeeper基本概念1.1. Zookeeper简介ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper Service集群是一主多从结构。.原创 2020-09-23 10:23:19 · 269 阅读 · 0 评论 -
BeanUtils.copyProperties使用时需要注意的地方
简介:Spring给开发者提供了一个对java对象进行属性处理的工具类 BeanUtils,如果有两个对象具有大量相同的属性,并且想要把一个对象的属性拷贝到另一个对象里时,我们可以使用BeanUtils.copyProperties(source,target) 方法。用法:BeanUtils.copyProperties(Object source, Object target) 方...原创 2019-12-28 12:41:09 · 905 阅读 · 0 评论 -
服务器CPU突然飙升和GC频繁处理
如果遇到线上服务器系统运行突然缓慢并有大量报警的现象时,那么可能系统的CPU过高或者FULL GC 次数过多,我们可以通过以下方法进行排查和解决问题。排查思路:如果因为系统突然运行缓慢导致服务不可用的时候,我们首先要做的是导出 jstack 和内存信息,然后重启系统,尽快恢复服务。这种情况的原因主要有两种:代码中某个位置读取数据量较大,导致系统内存耗尽从而 FULL GC 次数过多...原创 2019-10-14 10:22:31 · 2084 阅读 · 0 评论 -
Java单例模式常用创建方式总结(饿汉式、懒汉式、登记式)
单例模式:单例模式常见有三种:饿汉式单例、懒汉式单例、登记式单例单例模式有以下特点:单例类只能有一个实例单例类必须自己给自己创建唯一实例单例类必须给其他对象提供这一实例饿汉式单例://饿汉式单例类.在类初始化时,已经自行实例化public class Singleton1 { private Singleton1() {} private static fina...原创 2019-10-14 10:17:06 · 179 阅读 · 0 评论 -
JDK7 socketRead0 无休止挂起原因及解决方法
今天遇到了一个之前从没遇到过的问题:线程执行到SocketInputStream.socketRead0 时就没动静了,一直保持 runnable 状态,等了一个多小时还是这样,后来只好重启服务器来解决了。在这个线程卡住的时候,通过 jstack 分析了一下线程栈:java.lang.Thread.State: RUNNABLE at java.net.SocketInputStr...原创 2019-02-27 22:35:20 · 3364 阅读 · 0 评论 -
foreach中修改集合结构抛出异常的原因及CopyOnWriteArrayList 浅析
今天回头看做过的笔记时发现忘记了fail-fast的原因,所以就又复习了foreach和iterator的区别,并由此引入了ArrayList和CopyOnWriteArrayList 对 add(E e) 方法的不同。foreach 即 :List<E> list=new ArrayList<E>();for(E e:list){System.out.pr...原创 2019-03-04 16:51:55 · 474 阅读 · 0 评论 -
java服务端与Android客户端使用 websocket 通信
最近因为项目需要所以得使用 websocket 来进行服务器与客户端的通信。使用java 来实现服务端,Android 实现客户端。刚开始服务端使用 @ServerEndPoint 注解来实现 Websocket 服务端,但是 Android 使用的是autobahn 实现的客户端,所以一直连接不上,报错为:WebSockets protocol violation 。后面我把服务端改...原创 2019-04-10 13:20:58 · 4134 阅读 · 5 评论 -
SpringMVC+Mybatis 使用service层获取对象正常,但是使用dao层获取对象为空
最近写毕设在项目中偷懒直接使用 dao 层来获取对象,从数据库中获取到了数据,但是不能赋给对象,但是使用 service 层获取对象就可以。后来在 mybatis 的 sqlConfig.xml 文件中增加了驼峰命名规则就可以从 dao 层直接获取数据并赋给对象了。。...原创 2019-05-09 21:36:28 · 1256 阅读 · 0 评论 -
Java内部类
内部类的种类:在Java中内部类主要分为成员内部类、方法内部类、匿名内部类、静态内部类。1.成员内部类成员内部类也是最普通的内部类,它是外部类的一个成员,所以他是可以无限制的访问外围类的所有成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。在成员内部类中要注意两点:成员内部类中不能存在任何static的变量(但可以是 st...原创 2019-07-27 20:21:56 · 79 阅读 · 0 评论 -
Java子线程异常及异常处理
最近使用线程池时,了解到了在子线程中抛出异常,主线程的处理方式。Java中抛出 Exception 时必须使用 try..catch 块处理,但是抛出 RuntimeException 和 Error 时可以不使用 try..catch 块来处理,但是会导致线程中断。如下为抛出RuntimeException代码示例:public class ChildThread implements...原创 2019-09-22 17:16:05 · 3796 阅读 · 0 评论 -
使用Arrays.asList 的坑(UnsupportedOperationException)
我们在工作中应该会经常使用到 Arrays.asList 方法来创建 List 对象,我们通常会认为使用这个方法创建出来的 List 是 java.util.ArrayList 类型,但其实通过这个方法创建出来的是Arrays 自己的内部类 Arrays.ArrayList ,这个方法中的 add、remove 等改变数据的结构的方法会直接抛出异常,因为在使用Arrays.ArrayList 的a...原创 2019-09-22 17:19:27 · 653 阅读 · 0 评论 -
Spring+Mybatis 实现动态选择数据源
有时候我们想要实现动态选择数据源的功能,即在进行数据库操作时选择对具体的某个数据源进行操作。这个功能我们利用Spring+Mybatis 即可实现。1.DataSourceSwitcherSpring 提供了一个 AbstractRoutingDataSource 抽象类来帮助我们实现动态数据源功能,我们可以自定义一个类 DataSourceSwitcher 并继承 AbstractRou...原创 2019-02-18 14:06:28 · 1517 阅读 · 1 评论 -
使用 Spring+Quartz 完成定时任务
想要使一个方法定时执行并不难,我们只需要使用 Spring+Quartz 就可以完成。1.context-quartz.xml 在配置文件中创建一个 scheduler 的 bean<!-- 调度器 --><bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFacto...原创 2018-12-28 09:42:37 · 152 阅读 · 0 评论 -
Java Set( 不允许重复的集合)
HashSet: 防止重复使用HashSet的class必须implements Comparable();ArrayList<class> classList=new ArrayList<class>();HashSet<class> classSet=new HashSet<class>();classSet.addAll(classLis...原创 2018-03-09 21:07:30 · 37740 阅读 · 0 评论 -
java类中代码执行顺序
当声明父类而用子类实例化时:public class Main { public static int i=methodi(); public int y=methody(); public static int methodi() { System.out.println("i"); return 1; ...原创 2018-03-29 21:20:21 · 217 阅读 · 0 评论 -
Java 阻塞方法和中断方法
线程阻塞或暂停执行的原因:等待I/O结束、等待获得一个锁、等待从Thread.sleep方法中醒来、等待另一个线程的计算结果。 当线程阻塞时,它通常被挂起,并处于某种阻塞状态(BLOCKED,WAITING,TIMED_WAITING)。 阻塞操作与执行时间很长的普通操作的差别:被阻塞的线程必须等待某个不受它控制的事件发生后才能继续执行(例如等待I/O操作完成,等待某个锁变成可...原创 2018-05-01 21:31:59 · 781 阅读 · 0 评论 -
Java同步工具类
同步工具类可与是任何一个对象,只要它根据自身的状态来协调线程的控制流。阻塞队列可与作为同步工具类,其他类型的同步工具类还包括 信号量(Semaphore)、栅栏(Barrier)以及闭锁(Latch)。所有的同步工具类都包含一些特定的结构化属性:它们封装了一些状态,这些状态将决定执行同步工具类的线程是继续执行还是等待,此外还提供了一些方法对状态进行操作,以及另一些方法用于高效地等待同步工具类进入到...原创 2018-05-01 21:32:20 · 136 阅读 · 0 评论 -
Java同步容器、并发容器、阻塞队列浅谈
同步容器类:Vector、Hashtable等。这些类实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。同步容器类都是安全的,但在某些情况下可能需要客户端加锁来保护复合操作。容器上常见的复合操作包括:迭代、跳转(根据指定顺序找到当前元素的下一个元素)以及条件运算,例如 若没有则添加。在同步容器类中,这些操作在没有客户端加锁的情况下仍然是线...原创 2018-04-29 22:25:34 · 183 阅读 · 0 评论 -
Java内存区域与内存溢出异常
运行时数据区: 线程共享的数据区:方法区、堆、本地库接口 线程隔离的数据区:虚拟机栈、本地方法栈、程序计数器程序计数器:是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。Java虚拟机栈:它的生命周期与线程相同。 虚拟机栈描述的是Java方法执行的内存模型:每个方...原创 2018-07-04 15:35:13 · 128 阅读 · 0 评论 -
HashMap 和 Hashtable 源码分析
1)HashTable是同步的,HashMap是非同步的HashTable中put和get方法:public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPo...原创 2018-07-18 09:42:58 · 170 阅读 · 0 评论 -
Java JDK代理、CGLIB、AspectJ代理分析比较
JDK动态代理小结现在我们对JDK代理有个简单的源码级别的认识,理清楚一下思路:JDK会帮我们在运行时生成一个代理类,这个代理类实际上就是我们需要代理的接口的实现类。实现的方法里面会调用InvocationHandler类中的invoke方法,并且同时传入自身被调用的方法的的Method对象和参数列表方便我们编码实现方法的调用。比如我们调用reduce方法,那么我们就可以通过Method.In...原创 2018-07-22 13:36:27 · 442 阅读 · 0 评论 -
Java数据结构之 AVL树(平衡二叉树)简析
AVL(即平衡二叉树)树是带有平衡条件的二叉查找树(二叉查找树即左孩子小于根节点,右孩子大于根节点的二叉树)。一颗AVL树是其每个节点的左子树和右子树的高度最多差 1 的二叉查找树(空树的高度定为-1),只有一个节点的树高度为0。在高度为h的AVL树中,最少节点数S(h)=S(h-1)+S(h-2)+1,对于h=0,S(h)=1;h=1,S(h)=2。当进行插入操作时,我们需要更新通向根节点路...原创 2018-10-10 21:05:20 · 227 阅读 · 0 评论 -
Ubuntu环境下 jdk 版本无法更改的情况
今天我想要在Ubuntu 环境下安装 jdk1.7.0_80,在完成了从官网下载、解压 jdk-7u80-linux-x64.tar.gz 后,将解压出来的文件夹移动到/usr/local/ 下,随后对/etc/profile 进行配置:export JAVA_HOME=/usr/local/jdk1.7.0_80export JRE_HOME=${JAVA_HOME}/jreexp...原创 2018-11-14 20:08:48 · 349 阅读 · 0 评论 -
String、StringBuilder与StringBuffer的区别
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下: 1.三者在执行速度方面的比较:StringBuilder > StringBuffer > Str...原创 2018-03-09 21:05:36 · 122 阅读 · 0 评论