![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 89
小太阳啊凯
这个作者很懒,什么都没留下…
展开
-
Java:CAS(乐观锁)
三个线程交替打印1~99如 t1,t2,t3线程打印如下t1: 1t2: 2t3: 3t1: 4t2: …具体实现思路: 线程共享资源类,保证操作共享资源时加锁,每个线程执行一次打印之后唤醒下一个线程,并且保证结束打印后线程不能处于阻塞状态public class PrintHundred { public static void main(String[] args)...转载 2019-11-12 20:20:29 · 1241 阅读 · 0 评论 -
分库分表设计方案
一、为什么要分库分表?随着业务的不断发展,数据量不断增加,因此数据操作,如增删改查的开销也会越来越大,原来基于单库单表的设计已经不能满足存储需求,数据库随时面临爆库风险;再加上物理服务器的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。二、如何解决?1、增加存储这只能暂时缓解,但也可能是一种性价比比较高的方案2、数据实现动静分离,定时备份到达终态数据,缓解存储压力例:热数据:3个月内的订单数据,查询实时性较高;(mysql中分库分表)冷数据A:原创 2021-03-29 19:23:53 · 1950 阅读 · 0 评论 -
Java序列化与反序列化
一、什么是序列化与反序列化?Java 序列化是指把 Java 对象转换为字节序列的过程;Java 反序列化是指把字节序列恢复为 Java 对象的过程;二、为什么要用序列化与反序列化?在 为什么要用序列化与反序列化 之前我们先了解一下对象序列化的两种用途:把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;在网络上传送对象的字节序列。我们可以想想如果没有序列化之前,又是怎样一种情景呢?举例:Web 服务器中的 Session 会话对象,当有10万用户并发访问,就有可能出现10万个 Se原创 2020-09-23 16:42:50 · 85 阅读 · 0 评论 -
PowerMock使用详解
1. PowerMock是什么?PowerMock是一个Java模拟框架,用于解决测试问题。举个例子,你在使用Junit进行单元测试时,并不想让测试数据进入数据库,怎么办?这个时候就可以使用PowerMock,拦截数据库操作,并模拟返回参数。2. PowerMock包引入<!-- PowerMock JUnit 4.4+ Module --><dependency> <groupId>org.powermock</groupId> <a原创 2020-05-08 18:30:39 · 636 阅读 · 0 评论 -
java 字符串去除ios特殊字符
问题不知道用户从哪里copy来的不可见字符,通过前端表单传给后端保存在数据库中,用户再次查看该数据时,前端无法解析后端返回的json字符串,后来通过数据库发现该数据中间出现了一个换行符号/u2028,带有这个字符的json通过js是不能解析的。这个字符属于不可见字符,很难发现。常见不可见字符代码 /** * 获取去除ios字符后的字符串 * * @param...原创 2019-10-24 20:43:40 · 360 阅读 · 0 评论 -
java 字符串去除/r/n
字符串包含/r/n.使用这个就不会有/r/n.String msg = str.replaceAll("(\\\r\\\n|\\\r|\\\n|\\\n\\\r)", "");原创 2019-10-24 20:38:24 · 5053 阅读 · 0 评论 -
JAVA实现腾讯企业邮箱发邮件
//发件人账号 private String emailUsename; //发件人密码 private String emailPassword; //smtp.exmail.qq.com private String emailSmtpServer; //收件人账号 private String[] emailToAddress; publi...原创 2019-10-22 22:14:57 · 1373 阅读 · 0 评论 -
Java秒杀业务架构设计之路
一、秒杀业务为什么难做IM系统,例如QQ或者微博,每个人都读自己的数据(好友列表、群列表、个人信息)。微博系统,每个人读你关注的人的数据,一个人读多个人的数据。秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存...原创 2019-09-07 19:31:54 · 161 阅读 · 0 评论 -
我读过最好的Java对象头详解
由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能,这些标记字段组成了对象头。1.对象头形式JVM中对象头的方式有以下两种(以32位JVM为例):1.1.普通对象|--------------------------------------------------------------|| ...原创 2019-09-03 14:22:40 · 131 阅读 · 0 评论 -
Java线程池的底层实现与使用
一、线程池的底层类与接口在介绍线程池的实现机制之前,先了解一下线程池重要的类或接口ExecutorService是真正的线程池接口Executors是静态工厂的功能,生产各种类型线程池Executor是线程池的顶级接口,只是一个执行线程的工具,只提供一个execute(Runnable command)的方法,真正的线程池接口是ExecutorServiceAbstractExecuto...原创 2019-08-07 17:52:56 · 244 阅读 · 0 评论 -
Java-五种线程池,四种拒绝策略,三种阻塞队列
Java-五种线程池,四种拒绝策略,三种阻塞队列三种阻塞队列:BlockingQueue workQueue = null;workQueue = new ArrayBlockingQueue<>(5);//基于数组的先进先出队列,有界workQueue = new LinkedBlockingQueue<>();//基于链表的先进先出队列,无界workQueue...原创 2019-08-07 17:13:12 · 257 阅读 · 0 评论 -
Java8 中stream使用 skip or limit 来替代 subList
Java8 中使用 skip or limit 来替代 subList1、例子程序如下: public class StreamSkipAndLimitTest { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5,...原创 2019-08-09 15:15:47 · 3344 阅读 · 0 评论 -
ThreadPoolExecutor中的submit()方法与execute()方法区别
在使用线程池的时候,有两个方法可以调用,无返回值异步调用:execute()方法,底层使用Runnable的run()有返回值异步调用:submit()方法,底层使用Callable的call()话不多说,上代码 //submit ExecutorService executorService = Executors.newFixedThreadPool(3); F...原创 2019-08-08 16:51:39 · 1846 阅读 · 0 评论 -
为什么要实现Serializable接口
首先说明Serializable主要作用将类的实例持久化保存,序列化就是保存,反序列化就是读取。保存也不一定保存在本地,也可以保存到远方。工作中我们经常在进行持久化操作和返回数据时都会使用到javabean来统一封装参数,方便操作,一般我们也都会实现Serializable接口,那么问题来了,首先:为什么要进行序列化;其次:每个实体bean都必须实现serializabel接口吗?最后:我做一些...原创 2019-08-08 11:12:49 · 546 阅读 · 0 评论