java
若疆赤云online
这个作者很懒,什么都没留下…
展开
-
多线程环境中慎用 BeanUtils.copyProperties
发生错误的原因:BeanUtils.copyProperties 时,为了节省内存,集合数据在复制后,引用指向的是同一个对象,此时在多线程中,对同一个集合对象进行排序后,就会出现ConcurrentModificationException:null 异常,不操作集合可忽略,毕竟节省内存。在做项目开发时,使用到多线程去并发获取基础数据。原创 2024-01-30 09:25:35 · 268 阅读 · 0 评论 -
多线程力扣题解 1 https://leetcode-cn.com/problems/print-foobar-alternately/
class FooBar { private int n; private int flag = 0; public FooBar(int n) { this.n = n; } public void foo(Runnable printFoo) throws InterruptedException { for (int i = 0; i < n; i++) { synchronized (..原创 2020-09-14 21:01:33 · 152 阅读 · 0 评论 -
Mybatis分页插件,自定义分页的坑
场景:PageHelper 的默认分页方案是 select count(0) from (你的sql) table_count由于查询数据比较大时,导致分页查询效率低下。优化:使用自定义的count查询。、废话不多说,对应代码如下:这个时候会使用自定义的 count sql进行统计查询。然后一般分页默认使用 PageHelper.startPage();作者优化:如果获取的数量大于实际数量,则进行pageNum优化。所以 最好建议重载 startPage。 ...原创 2020-06-08 14:52:21 · 893 阅读 · 0 评论 -
数据结构-单链表作为栈使用,以及反转的思路
/** * @author zhangshiqiang on 2020/2/28. */public class LinkedStack { private int size; private int curSize; private Node head; public LinkedStack(int size) { this.size =...原创 2020-02-28 20:52:18 · 215 阅读 · 0 评论 -
数据结构-单向链表实现约瑟夫
/** * @author zhangshiqiang on 2020/2/27. */public class JosephSingleLinked { private int id; private String name; public JosephSingleLinked next; public JosephSingleLinked() {...原创 2020-02-27 23:50:00 · 109 阅读 · 0 评论 -
Java组装json
Java组装json,零侵入,自定义实现。/** * @author zhangshiqiang on 2019/10/24. */public interface IFieldAssembleJson { /** * 组装各种数据类型的json体 * * @param sb * @param fieldName * @p...原创 2019-10-25 08:39:13 · 1062 阅读 · 0 评论 -
POI下载EXCEL模板-设置列的属性!!!
找了好久,只能说答案真的是坑。以下代码需要放到最后,表格都生成完毕之后在设置列属性。参数:1 代表的是列,默认从0开始在设置EXCEL的时候,需要给某一列设置默认的列属性:(在EXCEL生成对应的行列之后在调用) /**设置单元格格式为文本格式*/HSSFCellStyle textStyle = workbook.createCellStyle();HSSFDataF...原创 2017-08-11 17:01:46 · 1685 阅读 · 0 评论 -
Java线程八锁
线程八锁的关键:① 非静态方法的锁默认为 this,静态方法的锁为 对应的 class 实例② 在某一个时刻内,只能有一个线程持有 锁,无论几个方法。原创 2017-08-19 19:06:28 · 258 阅读 · 0 评论 -
Java实现图片压缩
一种是使用Java原生的API,一种是使用 thumbnail使用方法为: Thumbnails.of().size().toFile(); 可以调用keepAspectRatio方法设置强制缩略。package test;import javax.imageio.ImageIO;import java.awt.*;import java.awt.image.BufferedI...原创 2017-11-19 13:13:47 · 613 阅读 · 0 评论 -
工厂模式学习笔记
工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类时哪一个,工厂方法让类把实例化推迟到子类。工厂方法模式能够封装具体类型的实例化。将创建对象的代码集中在一个对象或方法中,可以避免代码中的重复,并且更方便以后的维护。这也意味着客户在实例化对象时,只会依赖于接口,而不是具体类。可以帮助我们针对接口编程。而不针对实现编程。让代码更具有弹性,可以应对未来的扩展。加载配置文件:...原创 2017-11-19 15:17:09 · 171 阅读 · 0 评论 -
代理模式学习笔记
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。代理对象起到中介作用,可去掉功能服务或增加额外的服务。常见的代理模式:①远程代理:为不同地理的对象提供局域网代表对象②虚拟代理:根据需要将资源消耗很大的对象进行延迟,真正需要的时候进行创建③保护代理:控制对一个对象的访问权限④智能引用代理:提供对目标对象额外的服务 代理模式实现①静态代理:代理和被代理...原创 2017-11-19 15:56:35 · 220 阅读 · 0 评论 -
IO流学习笔记
在Java API中,可以从其中读入一个字节序列的对象叫做输入流,而可以向其中写入一个字节序列的对象称做输出流。抽象类InputStream和OutputStream构成了输入/输出(I/O)类层次结构的基础。因为面向字节的流不便于处理Unicode形式存储的信息(回忆一下,Unicode中每个字符都使用了多个字节来表示),所以从抽象类Reader和Writer中继承出来了一个专门用于处理Un...原创 2017-11-21 16:21:04 · 175 阅读 · 0 评论 -
Java8常用的函数式接口
1、Predicate:断言型接口 // 传入的字符串是否以 .sql 结尾 Predicate<String> isEndWithSql = (s) -> s.endsWith(".sql"); // 传入的字符串非 .sql 结尾 Predicate<String> notEndWithSql = isEndWithSq...原创 2019-02-02 16:36:39 · 766 阅读 · 0 评论 -
Java webp图片处理
import org.apache.commons.lang3.StringUtils;/** * 文件类型与对应的文件魔数枚举类 */public enum FileTypeEnum { /** * JPEG (jpg) */ JPEG("JPG", "FFD8FF"), /** * PNG */ PNG...原创 2019-02-21 17:06:39 · 1565 阅读 · 0 评论 -
高并发优化之一:返回数据要少
在平时的开发中,以前从开没有注意过接口的数据返回大小,都是写完,交给测试,然后没问题,上线。然后在高并发,大量请求过来的时候,影响接口的往往是大量的数据阻塞,说白了 也就是 带宽!程序写得稳不稳,堆机器,堆配置 ,根本看不出来。实际在使用中,用户量上来,带宽很吃紧。接口返回数据要尽量少:1、不是必须的字段尽量不要返回2、大字段文本,如果不是详情类似内容,尽量返回需要范围的数...原创 2019-03-14 23:04:23 · 288 阅读 · 0 评论 -
Java调用命令截取图片
工具在资源中。package com.g.utils;import java.io.InputStream;import java.util.List;/** * Created by roztop1 on 2017/4/14. */public class CutOutImgUtils { public static void cutImg(String input...原创 2017-04-25 16:13:32 · 333 阅读 · 0 评论 -
Java生成PDF的实现。
此文章出处代码示例: import com.itextpdf.text.*;import com.itextpdf.text.Font;import com.itextpdf.text.Image;import com.itextpdf.text.List;import com.itextpdf.text.pdf.*;import org.junit.After;impo...原创 2017-03-31 10:39:09 · 888 阅读 · 0 评论 -
jfinal 整合 sharding-jdbc
问题遇到了才会去解决。今天有个数据表数据量4000万。不得已分表。选用 ShardingSphere目前本人仅用于查询。单库多表。mysql5.7数据库https://www.jfinal.com/share/1395maven依赖:<!-- https://mvnrepository.com/artifact/io.shardingsphere/sharding-jd...原创 2019-01-21 18:28:47 · 762 阅读 · 0 评论 -
使用 jstack 命令分析jvm 线程调度
线上tomcat应用线程排查:首先连接到远程服务器,(centos7 为例)1、使用 ps -ef | grep java 查看当前运行的进程的pid。2、jstack 2563 > /tmp/java/dump/dump1 将pid 为 2563 的dump信息导出至 dump1 文件中3、grep java.lang.Thread.State dump1 | ...原创 2018-12-02 17:22:18 · 177 阅读 · 0 评论 -
出入Java并发-synchronized实现同步的基础
Java中的每一个对象都可以作为锁。1、对于普通同步方法,锁是当前实例对象2、对于静态同步方法,锁是当前类的Class对象3、对于同步方法块,锁是Synchronization括号里配置的对象。当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。...转载 2018-06-07 15:44:33 · 154 阅读 · 0 评论 -
初入Java并发-避免死锁的常见方法
1、避免一个线程同时获取多个锁2、避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源3、尝试使用定时锁,使用lock.tryLock(timeout)来替代使用内部锁机制4、对于数据库锁,加锁和解锁必须在一个数据库连接里,否则会出现解锁失败的情况。...转载 2018-06-07 15:35:31 · 813 阅读 · 0 评论 -
解决request.getInputStream()与request.getReader()只能调用一次的问题
request.getInputStream()与request.getReader()只能调用一次,因为是流,读取完就没了。 然而,有时我们可能会需要读取多次的场景,如在前端过滤器中,拦截请求数据并记录日志,记录日志后,请求继续向后传递,在后面的业务代码中,仍然可以继续取得请求的数据。 怎么办,办法总是有的,重写HttpServletRequestWrapper,自己实现一个Wr...转载 2018-05-23 11:05:36 · 3104 阅读 · 0 评论 -
数据结构-排序二叉树
排序二叉树是一种特殊结构的二叉树,通过它可以非常方便地对树中所有节点进行排序和检索。特点:1、若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值。2、若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值。3、它的左、右子树分别为排序二叉树。代码:结合JVM内存分配图。import java.util.ArrayDeque;import java.uti...原创 2018-03-15 12:10:01 · 174 阅读 · 0 评论 -
数据结构-哈夫曼树
哈夫曼树被称为最优二叉树。是一类带权路径最短的二叉树。节点之间的路径长度:从一个节点到另一个节点之间的分支数量称为两个节点之间的路径长度。树的路径长度:从根节点到树中每一个节点的路径长度之和。节点的带权路径长度:从该节点到根节点之间的路径长度与节点上权的乘积。树的带权路径长度:树中所有叶子节点的带权路径长度之和。带权路径最小的二叉树被称为哈夫曼树或最优二叉树。简单代码实现:...原创 2018-03-15 11:08:19 · 190 阅读 · 0 评论 -
数据结构-二叉树遍历
采用顺序结构来保存二叉树,程序遍历底层数组即可。采用链表保存二叉树:1、深度优先遍历:先访问到树中最深层次的节点 L:左子树 D:根 R:右子树 1)先(前)序遍历二叉树 DLR 2)中序遍历二叉树 LDR 3)后序遍历二叉树 LRD2、广度优先遍历:逐层访问每层的节点,也叫按...原创 2018-03-14 14:36:23 · 252 阅读 · 0 评论 -
数据结构-二叉树
二叉树指每个节点最多只能有两个子树的有序树,通常左边的子树被称为“左子树”(left subtree),右边的子树被称为“右子树”(right subtree)普通树与二叉树的区别:1、树中节点的最大度数没有限制,而二叉树节点的最大度数为2。2、无序树的节点无左、右之分,而二叉树的节点有左、右之分。满二叉树类:遵循 2^k-1个节点。二叉树第 i 层的节点数目最多为 (i-1)...原创 2018-03-14 14:22:18 · 258 阅读 · 0 评论 -
数据结构-树
父节点表示法:让每个节点“记住”它的父节点的索引。import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2018/3/14. */public class TreeParent<E> { public static class Node<T&...原创 2018-03-14 11:39:27 · 101 阅读 · 0 评论 -
数据结构-队列
简单队列是一种特殊的线性表,只允许在表的前端(front)进行删除操作,只允许在表的后端(rear)进行插入操作,进行插入操作的端称为队尾,进行删除操作的端称为队头。队列简称为先进先出(FIFO)的线性表。简单demo:import java.util.Arrays;public class SequenceQueue<T> { private int DEFA...原创 2018-03-13 15:52:32 · 125 阅读 · 0 评论 -
数据结构-栈
栈是一种数据结构,只能在某一端进行插入、删除操作的特殊线性表,通常是在尾端进行插入删除操作,允许插入、删除的一端称为栈顶(top),另一端称为栈底(bottom)从栈顶插入一个元素,是“压栈”,从栈顶删除一个元素,是“出栈”,栈中的元素是按照 后进先出(LIFO) 的原则进行的。顺序存储import java.util.Arrays;/** * Created by Admin...原创 2018-03-13 14:54:20 · 115 阅读 · 0 评论 -
数据结构-链式存储线性表
链式存储结构的线性表(简称为链表)将采用一组地址任意的存储单元存放线性表中的数据元素,链式结构的线性表不会按线性的逻辑顺序来保存数据元素,它需要在每一个数据元素里保存一个引用下一个数据元素的引用。优点:插入、删除元素快,充分利用计算机内存空间缺点:查找元素需要整体遍历,空间开销大单链表:/** * Created by Administrator on 2018/3/13. ...原创 2018-03-13 14:05:51 · 171 阅读 · 0 评论 -
数据结构-顺序存储线性表
import java.util.Arrays;public class SequenceList<T> { //数组默认长度 private int DEFAULT_SIZE = 16; // 数组容量 private int capacity; //定义一个数组保存顺序线性表的元素 private Object[] el...原创 2018-03-13 11:38:51 · 167 阅读 · 0 评论 -
Java虚拟机基础知识
虚拟机执行的步骤:①虚拟机有一个用于加载类文件的机制②如果一个类拥有类型为另一个类的域,或者是拥有超类,那么这些类文件也会加载(加载某个类所依赖的过程称为类的解析)③虚拟机执行类中的main方法(它是静态的,无需创建类的实例)④main 方法或者 main 调用的方法要用到更多的类,那么接下来就会加载这些类。每个Java程序至少拥有三个类加载器:引导类加载器、扩展类加载器、系统类加...原创 2017-12-17 18:21:42 · 185 阅读 · 0 评论 -
Java8新特性-接口
接口改造: 1、接口中可以有默认方法 2、接口中可以有静态方法 示例: interface Test { void test(); default void a() { } static void b() { } }一个类继承了类,实现了接口,如果接口与继承类的方法重名...原创 2019-02-02 15:06:23 · 122 阅读 · 0 评论