- 博客(48)
- 收藏
- 关注
原创 初学Rails遇到的坑--总结
P:Problem,遇到的问题。 A:Answer,解决方案P:1.edit.html submit为什么没有自动跳转到update?A:因为请求方法默认为post,在前端控制台改为put可解决; 具体原因应该是rails版本不同的原因,rails7的写法有所改变P:2.docker-compose启动时报错:bundler: failed to load command: rails (/usr/local/bundle/bin/rails)A:删掉docker-com...
2022-03-30 18:02:28
1755
原创 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
4277
4
原创 Zookeeper总结分享
1. Zookeeper基本概念1.1. Zookeeper简介ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。Zookeeper Service集群是一主多从结构。.
2020-09-23 10:23:19
321
原创 BeanUtils.copyProperties使用时需要注意的地方
简介:Spring给开发者提供了一个对java对象进行属性处理的工具类 BeanUtils,如果有两个对象具有大量相同的属性,并且想要把一个对象的属性拷贝到另一个对象里时,我们可以使用BeanUtils.copyProperties(source,target) 方法。用法:BeanUtils.copyProperties(Object source, Object target) 方...
2019-12-28 12:41:09
960
原创 Redis持久化总结(RDB+AOF)
Redis的持久化Redis有两种持久化的方式:快照(RDB文件)和追加文件(AOF文件):RDB方式会在一个特定的间隔保存当时的数据快照; AOF则会记录每一个服务器收到的写命令,当服务器启动时,这些记录会逐条执行来重建出原来的数据; Redis的持久化可以被禁用,即可以让Redis的数据的生命周期只存在于服务器的运行时间里; 两种持久化方式可以同时使用,但是当Redis 重启时A...
2019-10-14 10:28:37
192
原创 服务器CPU突然飙升和GC频繁处理
如果遇到线上服务器系统运行突然缓慢并有大量报警的现象时,那么可能系统的CPU过高或者FULL GC 次数过多,我们可以通过以下方法进行排查和解决问题。排查思路:如果因为系统突然运行缓慢导致服务不可用的时候,我们首先要做的是导出 jstack 和内存信息,然后重启系统,尽快恢复服务。这种情况的原因主要有两种:代码中某个位置读取数据量较大,导致系统内存耗尽从而 FULL GC 次数过多...
2019-10-14 10:22:31
2222
原创 Java单例模式常用创建方式总结(饿汉式、懒汉式、登记式)
单例模式:单例模式常见有三种:饿汉式单例、懒汉式单例、登记式单例单例模式有以下特点:单例类只能有一个实例单例类必须自己给自己创建唯一实例单例类必须给其他对象提供这一实例饿汉式单例://饿汉式单例类.在类初始化时,已经自行实例化public class Singleton1 { private Singleton1() {} private static fina...
2019-10-14 10:17:06
209
原创 Spring 发生 has not been refreshed yet 异常
Spring发生ApplicationContext has not been refreshed yet 错误的场景为:在Spring容器初始化时发生异常,此时 Spring还没有执行 destroy(该方法中会执行 close()->doClose())方法时尝试去获取Bean时会出现这个问题。因为在Spring容器初始化时发生异常Spring会在catch块中捕捉异常然后调用...
2019-09-22 17:20:03
37821
5
原创 使用Arrays.asList 的坑(UnsupportedOperationException)
我们在工作中应该会经常使用到 Arrays.asList 方法来创建 List 对象,我们通常会认为使用这个方法创建出来的 List 是 java.util.ArrayList 类型,但其实通过这个方法创建出来的是Arrays 自己的内部类 Arrays.ArrayList ,这个方法中的 add、remove 等改变数据的结构的方法会直接抛出异常,因为在使用Arrays.ArrayList 的a...
2019-09-22 17:19:27
706
原创 Java子线程异常及异常处理
最近使用线程池时,了解到了在子线程中抛出异常,主线程的处理方式。Java中抛出 Exception 时必须使用 try..catch 块处理,但是抛出 RuntimeException 和 Error 时可以不使用 try..catch 块来处理,但是会导致线程中断。如下为抛出RuntimeException代码示例:public class ChildThread implements...
2019-09-22 17:16:05
3938
原创 使用Redis实现并发一致性
我们现在基本都是使用mysql来实现对金额的操作,保证数据的准确性,那能不能使用redis来对金额进行操作并保证数据的准确性呢?可以利用 redis 的事务来实现这个想法。redis 的 WATCH 和 EXEC 可以提供类似事务的机制:WATCH观察key是否被改动,如果提交时key被改动,EXEC将返回null,表示事务失败。假设redis客户端执行:$money = GET ke...
2019-09-22 17:14:08
430
原创 Spring七种事务传播特性
Spring七种事务传播特性:REQUIRED如果不存在外层事务就主动开启事务,否则使用外层事务。SUPPORTS如果不存在外层事务就不开启事务,否则使用外层事务。MANDATORY如果不存在外层事务就抛出异常,否则使用外层事务。REQUIRES_NEW总是主动开启事务,如果存在外层事务,就将外层事务挂起。NOT_SUPPORTED总是不开启事务,如果...
2019-09-22 17:13:44
498
原创 Redis命令之KEYS与SCAN
Redis中有两种用来遍历key的数据的命令,它们分别是KEYS和SCAN。KEYS:KEYS命令的速度虽然非常快,但是因为它是一次将所有满足条件的数据都会找到并返回,所以当redis中的key非常多时对于内存的消耗和redis服务器是一种隐患,Redis2.8版本以上提供了一种更优的遍历 key 的命令就是 SCAN来解决这个问题。SCAN:SCAN命令的基本格式:SCAN...
2019-09-22 17:10:59
425
原创 Java内部类
内部类的种类:在Java中内部类主要分为成员内部类、方法内部类、匿名内部类、静态内部类。1.成员内部类成员内部类也是最普通的内部类,它是外部类的一个成员,所以他是可以无限制的访问外围类的所有成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。在成员内部类中要注意两点:成员内部类中不能存在任何static的变量(但可以是 st...
2019-07-27 20:21:56
120
原创 Spring/SpringBoot 使用@Autowired/@Resource 获取的Bean 在方法中为NULL
昨天在开发时出现使用Spring/SpringBoot 的@Autowired/@Resource 注解依赖的 Bean 在方法调用时为NULL的情况。尝试了很多办法都没有解决,最后发现是调用的方法为 private ,改为 public/protected 就解决了。原因是 Spring 对于 private 方法不能进行代理,所以使用对象来调用该方法时,该方法中的 Bean 为 NULL...
2019-07-25 11:22:00
1478
原创 SpringBoot初学时可能出现的问题
最近我在学习SpringBoot,SpringBoot在初学时可能会出现一些问题,下面我将列举出我在初学SpringBoot时出现的问题以及解决的方法:1.启动SpringBoot项目时报错 502,这是因为 java 版本太低,升到与 maven 对应的版本就行了,并且SpringBoot 要求 java 版本必须是 1.8 及以上。...
2019-07-10 09:18:58
479
原创 SpringMVC+Mybatis 使用service层获取对象正常,但是使用dao层获取对象为空
最近写毕设在项目中偷懒直接使用 dao 层来获取对象,从数据库中获取到了数据,但是不能赋给对象,但是使用 service 层获取对象就可以。后来在 mybatis 的 sqlConfig.xml 文件中增加了驼峰命名规则就可以从 dao 层直接获取数据并赋给对象了。。...
2019-05-09 21:36:28
1297
原创 java服务端与Android客户端使用 websocket 通信
最近因为项目需要所以得使用 websocket 来进行服务器与客户端的通信。使用java 来实现服务端,Android 实现客户端。刚开始服务端使用 @ServerEndPoint 注解来实现 Websocket 服务端,但是 Android 使用的是autobahn 实现的客户端,所以一直连接不上,报错为:WebSockets protocol violation 。后面我把服务端改...
2019-04-10 13:20:58
4236
5
原创 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
524
原创 JDK7 socketRead0 无休止挂起原因及解决方法
今天遇到了一个之前从没遇到过的问题:线程执行到SocketInputStream.socketRead0 时就没动静了,一直保持 runnable 状态,等了一个多小时还是这样,后来只好重启服务器来解决了。在这个线程卡住的时候,通过 jstack 分析了一下线程栈:java.lang.Thread.State: RUNNABLE at java.net.SocketInputStr...
2019-02-27 22:35:20
3631
原创 Spring+Mybatis 实现动态选择数据源
有时候我们想要实现动态选择数据源的功能,即在进行数据库操作时选择对具体的某个数据源进行操作。这个功能我们利用Spring+Mybatis 即可实现。1.DataSourceSwitcherSpring 提供了一个 AbstractRoutingDataSource 抽象类来帮助我们实现动态数据源功能,我们可以自定义一个类 DataSourceSwitcher 并继承 AbstractRou...
2019-02-18 14:06:28
1602
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
190
原创 Ubuntu 环境下 Maven 小结
/home/user/.m2/settings.xml 是局部配置,特定用户有的maven 配置。/usr/local/maven/conf/settings.xml 是全局配置,所有用户都有的 maven 配置。当用户既有局部配置,又有全局配置时,会将两个配置文件合并,并用局部配置文件覆盖全局配置文件。即若某些属性在两个配置文件中都有配置,用 /home/user/.m2/setting...
2018-11-14 20:15:28
152
原创 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
377
原创 Ubuntu环境下Resin配置到IDEA时出现的问题
在我将Resin安装配置好之后,想要在 IDEA 中加入 Resin plugin ,但是死活找不到。原因是我在下载解压 Resin 后没有配置时就在 IDEA 中加入了 Resin plugin ,所以我在 IDEA plugin 中先将 Resin 取消勾选,然后restart idea,然后再将 Resin 勾选,restart idea ,就可以在 run/debug configur...
2018-11-14 09:35:49
274
原创 Ubuntu 环境下配置 Resin
1.下载 Resin先到官网上下载 resin-pro-4.0.36.tar.gz,官网链接:http://www.caucho.com/download/resin-4.0.37.tar.gz 下载完成后 tar -zxvf resin-pro-4.0.36.tar.gz 解压到当前目录下,然后再将解压后的文件夹移动到 /usr/local/resin 下,这个目录是我们自己定义的,当...
2018-11-14 09:10:04
524
原创 Ubuntu 环境下Git 安装配置总结
1.git安装可以先输入 git 命令,看看系统里是否已经安装git。若没有安装,在Ubuntu下可以使用:sudo apt-get install git 来安装git。2.git 用户设置在安装成功后还需要进行用户配置。git config --global user.name "git的用户名"git config --global user.email "git的邮...
2018-11-13 20:54:44
263
原创 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
263
原创 Java JDK代理、CGLIB、AspectJ代理分析比较
JDK动态代理小结现在我们对JDK代理有个简单的源码级别的认识,理清楚一下思路:JDK会帮我们在运行时生成一个代理类,这个代理类实际上就是我们需要代理的接口的实现类。实现的方法里面会调用InvocationHandler类中的invoke方法,并且同时传入自身被调用的方法的的Method对象和参数列表方便我们编码实现方法的调用。比如我们调用reduce方法,那么我们就可以通过Method.In...
2018-07-22 13:36:27
486
原创 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
212
原创 Java内存区域与内存溢出异常
运行时数据区: 线程共享的数据区:方法区、堆、本地库接口 线程隔离的数据区:虚拟机栈、本地方法栈、程序计数器程序计数器:是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。Java虚拟机栈:它的生命周期与线程相同。 虚拟机栈描述的是Java方法执行的内存模型:每个方...
2018-07-04 15:35:13
155
原创 TCP/IP三次握手四次挥手和连续ARQ协议
TCP:TCP三次 握手:首先客户端处于Closed状态,服务器端处于Listen状态,客户端首先回向服务器端发送SYN报文,之后客户端进入SYN_SENT状态,服务器端收到报文后回复一个SYN+ACK的报文,之后服务器端进入SYN_RECEVED状态,这是一个三次握手中的一个中间状态,称为半连接状态,很短暂,基本上用netstat很难看到这种状态,如果发生了SYN flood(洪泛攻击),这种状...
2018-07-04 15:34:40
260
原创 使用SpringMVC开发项目时其他配置都是标准的,但是访问Controller显示404并且没有报错的问题
前两天我使用SpringMVC开发项目时其他配置都是标准的,但是访问Controller显示404并且没有报错,在网上搜了各种回答都没有解决我的问题,这个问题困扰了我一中午,终于在偶然间让我找到了解决方法!!因为我在开发非Maven项目时有一个习惯,就是每次导包后都会 Add to build path,而这次错误就是因为这个习惯导致的!当 Add to build path 后 打开项目的 Ja...
2018-07-03 22:04:12
911
原创 Java同步工具类
同步工具类可与是任何一个对象,只要它根据自身的状态来协调线程的控制流。阻塞队列可与作为同步工具类,其他类型的同步工具类还包括 信号量(Semaphore)、栅栏(Barrier)以及闭锁(Latch)。所有的同步工具类都包含一些特定的结构化属性:它们封装了一些状态,这些状态将决定执行同步工具类的线程是继续执行还是等待,此外还提供了一些方法对状态进行操作,以及另一些方法用于高效地等待同步工具类进入到...
2018-05-01 21:32:20
168
原创 Java 阻塞方法和中断方法
线程阻塞或暂停执行的原因:等待I/O结束、等待获得一个锁、等待从Thread.sleep方法中醒来、等待另一个线程的计算结果。 当线程阻塞时,它通常被挂起,并处于某种阻塞状态(BLOCKED,WAITING,TIMED_WAITING)。 阻塞操作与执行时间很长的普通操作的差别:被阻塞的线程必须等待某个不受它控制的事件发生后才能继续执行(例如等待I/O操作完成,等待某个锁变成可...
2018-05-01 21:31:59
839
原创 Java同步容器、并发容器、阻塞队列浅谈
同步容器类:Vector、Hashtable等。这些类实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。同步容器类都是安全的,但在某些情况下可能需要客户端加锁来保护复合操作。容器上常见的复合操作包括:迭代、跳转(根据指定顺序找到当前元素的下一个元素)以及条件运算,例如 若没有则添加。在同步容器类中,这些操作在没有客户端加锁的情况下仍然是线...
2018-04-29 22:25:34
216
原创 处理Spring使用@Autowired自动装配的歧义性
@Autowired默认使用的是byType的方式注入,@Qualifier则是使用byName的方式阐述自动装配的歧义性,假设使用@Autowired注解标注了setDessert()方法:@Autowiredpublic void setDessert(Dessert dessert){ this.dessert=dessert;} 在本例中,Dessert是一个接口,并且有了三个...
2018-04-23 19:20:05
333
原创 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
235
原创 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
38344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人