java
汪汪汪汪吁
这个作者很懒,什么都没留下…
展开
-
java利用Thumbnailator进行图片压缩
java利用Thumbnailator进行图片压缩原创 2022-08-01 14:24:24 · 1142 阅读 · 0 评论 -
《重构》第三章-笔记
3.24里有句话给我很深的映像: “从嗅觉上说,注释不但不是一种坏味道,事实上它们还是一种香味呢。我们之所以要在这里提到注释,是因为人们常把他当做“除臭剂”来使用。chang”原创 2021-06-06 15:10:06 · 212 阅读 · 0 评论 -
Leetcode 244 场周赛
t1:5776. 判断矩阵经轮转后是否一致思路与原创 2021-06-06 14:00:32 · 119 阅读 · 0 评论 -
微博发布头条文章失去文本样式以及图片
起因:文稿里把编辑有各种样式的标题和正文以及图片视频的文稿发布到已授权的微博账号中,发现显示的文本样式以及图片全部都显示异常,首先是文本中的样式都消失了只剩下文字,其次是所有的图片的显示...原创 2021-05-30 15:45:57 · 967 阅读 · 0 评论 -
利用EasyExcel导出Excel的两种方式
首先准备实体类以及数据public class DemoData { @ExcelProperty({"主题","字符串标题"}) private String string; @ExcelProperty({"主题","日期标题"}) private Date date; @ExcelProperty({"主题","数字标题"}) private Double doubleData; /** * 忽略这个字段 */原创 2020-10-25 16:05:44 · 4277 阅读 · 1 评论 -
在接口中利用CyclicBarrier,完成并发操作
这边由于是直接判断map的大小来决定是否返回,所以一定得要使用支持并发的ConcurrentHashMap。还需要注意,方法一开始必须得要重置CyclicBarrier,不然第二次进方法的时候就不会跑CyclicBarrier后的方法了。 ConcurrentHashMap<String,List<ApPerson>> map = new ConcurrentHashMap<>(); // 这边就直接使用固定线程量的fixed作为线程池 .原创 2020-10-25 14:32:00 · 193 阅读 · 0 评论 -
mysql 使用静态内部类来当返回类型
有时业务中Vo中需要一个静态内部类来方便进行存储然而当这个静态内部类当场mybatis的返回值时,xml中的resultType需要用外部类加上$加上静态内部类即可。其实当这个类通过虚拟机转成.class文件时,也会导致有两个文件,而且静态内部类生成的class文件就是xml中需要写的形式。...原创 2020-09-19 14:28:22 · 627 阅读 · 0 评论 -
通过数据库获取本地图片路径,转成base64返显到页面
if(!list.isEmpty()){ String rootPath = SystemUtils.IS_OS_WINDOWS ? "D:/RESOURCE_ROOT" : "/home/RESOURCE_ROOT"; rootPath = this.getConfig(CFK_RESRC.ROOT_KEY, rootPath); for (CoreResrcFile file: list ) { ...原创 2020-09-11 17:31:08 · 765 阅读 · 0 评论 -
Leetcode23双周赛
排名:75 / 2044第一题:统计最大组的数目解题思路:这题是要统计数位上的值相加和相等的数,返回其中并列最多的组。这里可以构建一个足够大的数组,然后进行统计并列最多的组,最后在遍历结果集并记录次数返回。class Solution { public int countLargestGroup(int n) { int[] dict = new int[10000+10]; int max = 0; for (int i = 1; i <= n; i++)原创 2020-08-15 11:31:12 · 104 阅读 · 0 评论 -
Leetcode183周赛
排名:252 / 3754第一题:非递增顺序的最小子序列解题思路:先给原数组排个序,统计一下sum;之后从大到小,累加和temp,当temp>sum-temp就满足了题目要求。class Solution { public List<Integer> minSubsequence(int[] nums) { int n = nums.length; int max = 0; for (int i = 0; i < n; i++) {原创 2020-08-15 11:30:16 · 86 阅读 · 0 评论 -
mysql知识归纳
常用的数据库引擎有两种:MyISAM和InnoDBMyISAM只支持表级锁;Inno支持行级锁(默认)和表级锁MyISAM强调性能,不支持事务;InnoDB支持事务、外键。InnoDB支持MVCC(多版本并发控制),MVCC只支持READ COMMITTED(读已提交) 和 REPEATABLE READ(可重复读) 两个隔离级别下工作索引InnoDB: 其数据文件本身就是索引文件。相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点d原创 2020-08-15 11:29:33 · 167 阅读 · 0 评论 -
jvm学习日志
在jdk1.8中,方法区被替换成了内存中的元空间。程序计数器:主要有两个作用:1.字节码解释器通过改变程序计数器来依次读取指令,实现流程控制,如顺序、循环、选择、异常处理等;2.在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而线程切换回来的时候知道线程运行到了何处。(生命周期与线程相同,不会出现oom)虚拟机栈:生命周期与线程相同,描述的是java方法执行的内存模型,每次的方法调用的数据都是通过栈传递的。(每一个栈帧中都拥有:局部变量表、操作数栈、动态链接、方法出口信息)(会出现爆栈和内存)..原创 2020-08-15 11:27:52 · 181 阅读 · 0 评论 -
WebSocket学习日志
参考文章:英文:https://www.callicoder.com/spring-boot-websocket-chat-example/中文:https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247485578&idx=1&sn=eac39f010b8c2be949e0daae770fd7ae&chksm=ebd7498bdca0c09d2dad0af154f53d2aa2c9a0cce6602d1814346原创 2020-08-15 11:24:44 · 175 阅读 · 0 评论 -
Leetcode178周赛
排名:873 / 3304第一题:有多少小于当前数字的数字解题思路:双循环直接比较大小即可。class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { int ans[] = new int[nums.length]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++)原创 2020-08-15 11:24:04 · 95 阅读 · 0 评论 -
Leetcode178周赛
排名:873 / 3304第一题:有多少小于当前数字的数字解题思路:双循环直接比较大小即可。class Solution { public int[] smallerNumbersThanCurrent(int[] nums) { int ans[] = new int[nums.length]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++)原创 2020-08-09 14:41:07 · 125 阅读 · 0 评论 -
java-线程池
Runnable对比Callable:Runable不会返回结果或抛出检查异常,但是Callable可以。(Executors能够实现二者转换)execut()对比submit():execute()方法用于提交不需要返回值的任务,所以无法判断任务是否被线程池执行成功与否;submit()方法用于提交需要返回值的任务。线程池会返回一个 Future 类型的对象,通过这个 Future 对象可以判断任务是否执行成功,并且可以通过 Future 的 get()方法来获取返回值,get()方法会阻塞当前线程原创 2020-08-09 14:34:33 · 161 阅读 · 0 评论 -
java-JUC包
JDK提供的这些容器大部分在java.util.concurrent包中。ConcurrentHashMap:线程安全的HashMapCopyOnWriteArrayList:线程安全的List,在读多写少的场合性能非常好,远远好于Vector。(在写多的场合下可以使用Collections.synchronizedList来保证并发效率)ConcurrentLinkedQueue:高效的并发队列,使用链表实现。可以看做一个线程安全的LinkedList,这是一个非阻塞队列。BlockingQueu原创 2020-08-09 14:31:14 · 516 阅读 · 0 评论 -
Java基础-并发
进程:进程就是程序的一次执行过程,是系统运行程序的基本单位。在Java中,当我们启动main函数时其实就是启动了一个JVM的进程,而main函数所在的线程就是这个进程中的一个线程,也称为主线程。线程:一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程所不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程都拥有自己的程序计数器、虚拟机栈和本地方法栈。总结:线程是进程划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进...原创 2020-08-09 14:29:29 · 101 阅读 · 0 评论 -
java基础–集合类(Map)
JDK1.8 HashMap源码学习:HashMap的底层是使用数组+链表/数组+红黑树,当链表长度大于阈值(默认为8)时,将链表转化为红黑树(将链表转换成红黑树前会判断,如果当前数组的长度小于64时,娜美会先进行数组扩容,而不是转换为红黑树),以减少搜索时间(treeifyBin)。为了防止用户实现的hashCode方法较差,HashMap有一个扰动函数hash(其实每一个Hash算法应该都有) static final int hash(Object key) { int原创 2020-08-09 14:27:14 · 122 阅读 · 0 评论 -
java基础–集合类(Collection)
java的集合类主要就是Collection(List、Set)和 Map。ArrayList和LinkedList都不保证线程安全(事实上常用的集合类都不支持线程安全,线程安全模式的集合类都在juc包中)ArrayList底层使用的是Object数组、而LinkedList使用的是双向链表(1.6之前使用的是双向循环链表、1.7取消了循环)ArrayList会浪费一定的空间,空间浪费主要体现在在list列表的结尾会预留一定的容量空间。LinkedList的空间花费则体现在它的每一个元素都需要消耗比原创 2020-08-09 14:26:07 · 123 阅读 · 0 评论 -
Leetcode177周赛
排名:800 / 2985(题目简单,但是晚到了半小时。。。????)第一题:日期之间隔几天解题思路:日期问题,利用java的库函数和工具类可以方便的解决,但是leetcode不会默认导这些包,需要手动导一下。代码:import java.text.*;import java.util.Date;class Solution { public int daysBetweenDates(String date1, String date2) { SimpleDateFo原创 2020-08-09 14:24:20 · 119 阅读 · 0 评论 -
Leetcode20双周赛
本次排名:426 / 1541第一题:根据数字二进制下 1 的数目排序解题思路:把目标数组转成二进制,然后排序统计排序即可(之前代码是使用Pair存储,但是leetcode导包后没识别出来???然后换成List了)代码:class Solution { public int[] sortByBits(int[] arr) { int[] acc = new int[arr.length]; List<List<Integer>> list =n原创 2020-08-09 14:23:31 · 190 阅读 · 0 评论 -
java 异常知识点
在java中,所有的异常都有公共的祖先Throwable类,Throwable有两个重要子类:Exception和Error,而Error是程序无法处理的问题,比如说虚拟机运行错误,OOM等。Exception(异常):是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 异常由Java虚拟机抛出。NullPointerException(要访问的变量没有引用任何对象时,抛出该异常)、ArithmeticException..原创 2020-07-05 10:58:51 · 105 阅读 · 0 评论 -
java 基础复习
java程序从源代码到运行一般有3步: .java的源文件通过JDK的javac命令转换为jvm能够理解的.class文件(字节码),之后再由jvm将.class编译成为机器可执行的二进制码。jvm针对不同的系统操作有着特定的实现方式,目的是使用相同的字节码,它们都会给出相同的结果。也就能够保证说Java程序无须重新编译便可在多种不同操作系统的计算机上运行。(.class是相同的,不同的只不过是jvm在不同的环境中的实现)java的8个基本类型(byte和short不要忘记!!!):构造器是不能原创 2020-07-05 10:57:51 · 181 阅读 · 0 评论 -
solr学习日志
首先需要下载并解压solr,然后利用cmd进入solr的bin目录下,然后利用solr.cmd start启动。(添加core以及如何使用中文分词,网上教程比较多)在java中使用:1.需要在maven中添加相关的solr依赖(主要就是java操作solr的Api包–solrj): <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</ar原创 2020-07-05 10:56:42 · 224 阅读 · 0 评论 -
关于拦截器中注册不了RedisTemplate的问题
问题背景:常见的用户登录权限控制就是在用户登录时,将token信息放到redis中去,然后根据用户传递过来的请求头中获取token,判断是否登录(以及登录的用户信息)。然而在实际开发时,遇到了一个问题,在service层中,RedisTemplate能够成功注册进来,但是在拦截器中,RedisTemplate始终注册不进来。后来发现可以原因是在addInterceptors方法中添加拦截器时,是new的一个拦截器。@Configurationpublic class UserLoginConfi原创 2020-07-05 10:55:08 · 414 阅读 · 0 评论 -
Leetcode176周赛
排名:481 / 2409第一题:5340. 统计有序矩阵中的负数解题思路:直接双循环,遍历整个数组,统计负数即可。代码:class Solution { public int countNegatives(int[][] grid) { int ans = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { if (gri原创 2020-07-05 10:54:25 · 108 阅读 · 0 评论 -
Leetcode175周赛
排名:233 / 2046第一题:5332. 检查整数及其两倍数是否存在解题思路:数据量不大,直接暴力过了。class Solution { public boolean checkIfExist(int[] arr) { int n = arr.length; for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { if (arr[i]*2==arr[j] || arr[j]原创 2020-07-05 10:53:55 · 105 阅读 · 0 评论 -
Leetcode19双周赛
本次排名:289/1120第一题:5311. 将数字变成 0 的操作次数解题思路:直接利用一个while,在里面进行判断即可class Solution { public int numberOfSteps (int num) { int ans = 1; while (num!=1){ if (num%2==0)num/=2; else num--; ans++; } return ans; }}第二题:5312. 大小为 K原创 2020-07-05 10:53:25 · 155 阅读 · 0 评论 -
利用java爬取51job招聘信息
大体思路:首先了解一下51job的url地址的规则(听上去有点扯????,但其实也是最为便捷的方式),然后发送一下http请求,接受返回值并正确解析即可。具体代码:首先准备一下接收类(实体类)package testpoll;import lombok.Data;@Datapublic class Jobs { private Integer jobId;//自动增长id private String jobName; //岗位 private String companyName原创 2020-07-05 10:52:26 · 911 阅读 · 4 评论 -
Leetcode174周赛
第一题:1341. 方阵中战斗力最弱的 K 行解题思路:遍历一遍二维数组,将每一行的值统计出来,并进行排列。把前k个放到答案数组中即可。代码:import javafx.util.Pair;class Solution { public int[] kWeakestRows(int[][] mat, int k) { List<Pair<Integer,Integer>> ans = new ArrayList<>(); int n原创 2020-07-05 10:50:54 · 97 阅读 · 0 评论 -
设计模式-创建型(学习归纳)
创建型设计模式主要有4种:单例模式、工厂模式、建造者模式、原型模式单例模式主要分为两种:懒汉式(当第一次调用时进行创建)、饿汉式(在系统加载时进行创建)主要的好处:1.减少系统开销 2.减轻GC压力注意的点:单例类必须有一个private访问级别的构造函数 成员变量与方法必须是static的常见的懒汉式:1.非线程安全和synchronized关键字线程安全版本package testDesignPattern.single;public class BasicLazy {原创 2020-07-05 10:49:59 · 122 阅读 · 0 评论 -
union-find学习日志(效率比较)
主要学习了quick-find,quick-union以及加权quick-union,利用1319. 连通网络的操作次数来对比三个算法的实际效率。quick-find:代码:package testUnionFind;public class QuickFind { int[] id; int count; public void init(int n){ id = new int[n]; count=n; for (int i = 0; i < n; i++) {原创 2020-06-24 09:40:54 · 137 阅读 · 0 评论 -
关于java8中LocalDateTime与thymeleaf整合时产生的问题
一开始使用springboot与thymeleaf整合时,发现java8中关于时间的字段LocalDateTime在前台使用dates.format会报错。前端代码如下:<td style=""th:text="${#dates.format(data.updateDate,'yyyy-MM-dd HH:mm:ss')}"></td>报错信息:Caused by: org.springframework.expression.spel.SpelEvaluationE原创 2020-06-24 09:37:42 · 1464 阅读 · 0 评论 -
LeetCode 第172周赛
ps:由于当时是工作日,做到一半,被主管拉去当工具人了(去手动删zookeeper服务了)。。。第一题:1323. 6 和 9 组成的最大数字解题思路:直接先将原数字转成String,然后将第一个6换成9.并返回即可。代码:class Solution { public int maximum69Number (int num) { String str = String.valueOf(num); StringBuilder sb = new Stri.原创 2020-06-24 09:37:05 · 113 阅读 · 0 评论 -
关于Lucene的学习日志
简单步骤描述:1. 首先搜集数据(数据可以是文件系统,数据库,网络上,手工输入的,或者像本例直接写在内存上的)2. 通过数据创建索引3. 用户输入关键字4. 通过关键字创建查询器5. 根据查询器到索引里获取数据6. 然后把查询结果展示在用户面前思路图:大致代码:package com.how2java;import java.io.IOException;import java.io.StringReader;import java.util.HashMap;import j原创 2020-06-24 09:35:40 · 173 阅读 · 0 评论 -
关于调用第三方https接口的错误
问题背景:在一个卫健局的app上有一个报告单查询,要求新增一个返显用户姓名以及手机号(不需要用户手动输入了,旨在方便用户)。根据app传过来的token,调用他们的接口,获取用户信息并返显(一个简单到不能再简单的功能)。做完了之后并上线了,直到昨天,发现线上功能报了500.报错信息如下:[23:14:09:981] [ERROR] - cn.ucmed.common.core.exception.RRExceptionHandler.handleException(RRExceptionHandle原创 2020-06-24 09:34:27 · 2053 阅读 · 0 评论 -
LeetCode 第171周赛
周赛排名(457 / 1707):(第一题:1317. 将整数转换为两个无零整数的和解题思路:题目给出了一个n,需要你返回两个数,且返回的两个值中不存在0(比如:101,110就是不合法的,前导0不算)。这里直接暴力的去枚举第一个值a,那么第二个值就是n-a,然后我是直接把数字转成String,去找0。若不存在,返回。代码:class Solution { public int[] getNoZeroIntegers(int n) { int[] ans = new in原创 2020-06-24 09:33:08 · 116 阅读 · 0 评论 -
LeetCode 第17双周赛
双周赛排名(20/897)第一题:1313. 解压缩编码列表解题思路:数组的每相邻两个元素,如[a,b,c,d]代表结果有a个b以及c个d。最后将其排列出来即可。代码:class Solution { public int[] decompressRLElist(int[] nums) { int flag = 0; List<Integer> ans1 = new ArrayList<>(); for (int i = 0; i <原创 2020-06-24 09:32:09 · 96 阅读 · 0 评论 -
关于map按值排序
java版本1.8之前可以使用这个,利用list存储map,然后利用map.entry中自带的比较器比较。最后存入LinkedHashMappublic static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) { List<Map.Entry<K, V>> list = new ArrayList<>(ma原创 2020-06-23 21:31:25 · 303 阅读 · 0 评论