- 博客(19)
- 收藏
- 关注
原创 集群环境WebSocket数据推送功能改造(基于Redis消息订阅与发布)
主要问题集群模式下,WebSocket Session共享问题,例如有A,B两台服务器,与客户端建立WebSocket连接的是A服务器,但是处理和结果推送是在B服务器上执行的,因为B服务器上没有保存与客户端WebSocket连接的Session, 这就导致了数据是无法推送到客户端的。设计方案1.第一种是nginx基于ip_hash的会话保持,nginx可以基于客户端ip进行负载均衡,在upstream里设置ip_hash,这样可以基于同一个C类地址段中的同一个客户端,选择同一个服务器,除非服务器宕机才
2022-04-07 10:32:07
1956
1
原创 Linux安装部署Redis
结合网上各类技术贴以及本人实操,教程整理如下前期准备Redis版本 5.0.7系统版本 Linux CentOS 6.7Redis下载安装官网 https://redis.io/download找到想要的版本,复制链接Linux控制台输入如下命令下载wget http://download.redis.io/releases/redis-5.0.7.tar.gz解压文件到当前目录tar -zvxf redis-5.0.7.tar.gz移动Redis目录(一般把redis目
2021-08-02 21:18:54
324
原创 JAVA业务开发常见错误整理(17.OOM 18.反射、注解、泛型遇到OOP)
朱晔《Java业务开发常见错误100例》课程学习整理一、OOM1.程序确实需要超出JVM配置的内存上限的内存。不管是程序实现的buhel,haishi因为各种框架对数据的重复处理、加工和转换,相同的数据在内存中不一定只只占一份空间。针对内存量使用超大的业务逻辑,比如缓存逻辑。文件上传下载和导出逻辑,我们在做容量评估时,可能还需要实际做一下Dump,2.出现内存泄漏,也就是我们认为没有用的对象最终没有被GC,GC并不会回收强引用对象,当我们在程序中定义一些容器作为缓存,但容器中的数据无限增长,要特
2021-05-28 10:28:05
590
原创 JAVA业务开发常见错误整理(15.序列化 16.Java8时间类)
朱晔《Java业务开发常见错误100例》课程学习整理一、序列化(1)序列化和反序列化需要确保算法一致,因为不同序列化算法输出必定不同,要正确处理序列化后的数据就要使用相同的反序列化算法例:Redis的Redis Template和StringRedisTemplate两种方式存取的数据完全无法通用,因为默认情况下RedisTemplate针对Key和Value使用了JDK序列化处理,StringRedisTemplate对于Key和Value,使用String序列化方式。自定义RedisTe
2021-05-26 10:27:57
413
原创 JAVA业务开发常见错误整理(13.日志记录 14.文件IO)
朱晔《Java业务开发常见错误100例》课程学习整理一、日志记录日志记录重复(1)logger配置继承关系导致日志重复记录(2)错误配置LevelFilter造成日志重复记录异步日志问题(1)记录异步日志撑爆内存(2)记录异步日志出现日志丢失(3)记录异步日志出现阻塞Logback提供的AsyncAppender实现异步日志记录,重要参数:includeCallerData 控制是否收集调用方数据,默认false,queueSize 控制阻塞队列大小,使用Arra
2021-05-19 17:58:46
408
原创 JAVA业务开发常见错误整理(9.数值计算 10.集合类)
朱晔《Java业务开发常见错误100例》课程学习整理一、数值计算1.精确表示浮点数应该使用BigDecimal。并且使用BigDecimal的Double入参构造方法同样存在精度丢失问题,应该使用String入参的构造方法或者BigDecimal.valueOf方法来初始化2.对浮点数做精确计算,参与计算的各种数值应该始终使用BigDecimal,所有的计算都要通过BigDecimal方法进行。任何一个环节出现精度损失,最后的计算结果可能都会出现误差3.对于浮点数的格式化,如果使用Strin
2021-05-08 11:35:22
296
原创 JAVA业务开发常见错误整理(7.数据库索引 8.判等问题)
朱晔《Java业务开发常见错误100例》课程学习整理一、数据库索引InnoDB存储数据虽然数据存储在磁盘中,但处理是在内存中的,为了减少磁盘随机读取次数,InnoDB采用页而不是行的粒度来保存数据,即数据被分成若干页,以页为单位保存在磁盘中。InnoDB的页大小,一般是16K.。各个数据页组成一个双向链表,每个数据页中的记录按照主键顺序组成单向链表;每一个数据页中有一个页目录,方便按照逐渐查询记录。页目录通过槽把记录分成不同的小组,每个小组有若干条记录。通过槽我们可以采用二分法快速搜索,无需从最
2021-05-07 17:11:20
168
原创 JAVA业务开发常见错误整理(5.HTTP调用 6.Spring声明式事务)
朱晔《Java业务开发常见错误100例》课程学习整理一、HTTP调用配置连接超时和读取超时参数连接超时和连接超时误区1.连接超时配置很长,比如60秒。一般TCP三次握手建连时间很短,通常在毫秒最多到秒级,长时间无法建连需排查网络和防火墙问题,连接超时通常可配置为1-5秒2.排查连接超时,没有理清连的是哪里。通常常务会有多个节点,如果别的客户端通过客户端负载均衡技术连接服务端,那么客户端和服务端会直接建连,此时出现连接超时大概率是服务端的问题,而如果服务端通过蕾西Nginx反向代理来负载均
2021-05-07 13:41:28
312
原创 JAVA业务开发常见错误整理(3.线程池 4.连接池)
朱晔《Java业务开发常见错误100例》课程学习整理一、线程池线程池的声明需要手动进行《阿里巴巴Java开发手册》中提到。禁止使用Java中的Executors类定义的快捷工具方法,而应该手动new ThreadPoolExecutor来创建线程池。最典型的问题就是new FixedThreadPool和new CachedThreadPool,可能因为资源耗尽导致OOM问题。(1)new FixedThreadPool时,线程池的工作队列直接new了一个LinkedBlockingQ.
2021-05-06 16:38:58
397
1
原创 Springboot单元测试样例以及爬坑
package com.perf.skyhammer;import com.google.gson.Gson;import com.perf.enumBean.Constant;import com.perf.po.DebugPO;import com.perf.task.TestTask;import lombok.extern.slf4j.Slf4j;import org.hamcrest.Matchers;import org.junit.Test;import org.junit.
2021-04-29 16:28:19
178
原创 JAVA业务开发常见错误整理(1.线程安全 2.代码加锁)
线程安全问题1、线程重用导致数据错乱Bug例:使用ThreadLocal缓存数据,因为tomcat的工作线程是基于线程池,若ThreadLocal存储的数据在代码运行完成,未显示地去清空,会产生数据错乱问题。其他类似线程工具使用时也会存在该问题2、使用线程安全的并发工具不代表解决了所有线程安全问题例:ConcurrentHashMap只能保证提供的原子性读写操作是线程安全的...
2021-04-21 22:27:19
379
1
原创 2020-09-28
Aop使用过程中遇到的问题1、在使用Aop切入Controller方法时发现无法切入,具体表现为 不会进入切面,进入切点方法后,注入的类都为null原因:Spring AOP是基于代理机制的,private 方法对外部类不可见,无法切入原理参考https://docs.spring.io/spring-framework/docs/3.1.x/spring-framework-reference/html/aop.html#aop-introduction-spring-defn.
2020-09-28 17:55:43
103
原创 Java中final关键字详解
final关键字:通常指无法改变的,可能使用的场景有三种:数据、方法和类。final数据: 1、一个永不改变的编译时常量。 2、一个在运行时被初始化的值,而你不希望它被改变。 注意点: 1、Java中,常量必须是基本数据类型,并且以final表示,初始化时必须赋值。 2、一个既是static又是final的域只占据一段不能改变的存储空间。 3、final修饰的基本类...
2018-05-07 17:04:32
323
原创 Java中staic关键字详解
static :静态修饰符static表示“全局”或者“静态”的意思。static 可以修饰: 1、变量(所谓 class variable) 2、方法(所谓 class method) 3、代码块(所谓 block) 4、内部类(所谓 nested class)凡是被static修饰的这四种元素,都是属于类的,而不是类实例的Java把内存分为栈内存和堆内存,其中栈内存用来...
2018-04-26 16:35:13
1506
原创 Java中this关键字
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。(在方法内部调用同一个类的另一个方法,不必使用this,可以直接调用,当前方法中的this引用会自动应用于同一类中的其他方法。)this三种主要用法1、返回对当前对象的引用(也可以将当前对象传递给其他方法)例:public class Leaf{ int i = 0; Leaf increment() { ...
2018-04-13 14:25:36
184
原创 Java Web开发常用jar包
主要介绍一下最近Web开发中用到的一些jar包,主要包括Spring以及Apache开源的工具包。因为项目是使用maven管理的,所以在这里直接采用了maven dependency的方式介绍jar包。 <!--Java语言的单元测试框架 --> <dependency> <groupId>junit</groupId>
2017-12-28 11:33:05
2871
转载 spring-jar包详解整理
Spring各jar包详解 spring.jar 是包含有完整发布模块的单个jar 包。但是不包括mock.jar,aspects.jar, spring-portlet.jar, and spring-hibernate2.jar。spring-src.zip就是所有的源代码压缩包。除了spring.jar 文件,Spring 还包括有其它21 个独立的jar 包,各自包含着对应的Spring组
2017-12-28 11:10:58
253
原创 Spring整合Quartz Job以及Spring Task实现
Spring中常用的定时任务的主要有两种 1、Spring整合Quartz Job 2、Spring 3.0以后自带的Task一、两种定时任务的实现方式 Quartz job 1、首先编写任务类package com.yjf.job;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @author yjf */
2017-12-22 14:02:04
378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅