自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 JSON字符串作为入参时,转换为具体对象

java.util.LinkedHashMap cannot be cast to JSON字符串转换为对象

2024-01-31 17:32:09 420

原创 POI处理excel,根据XLOOKUP发现部分公式格式不支持问题

poi4不支持XLOOKUP函数,但poi最新的5.2.3却已经对此函数做了支持

2023-08-14 19:39:44 880

原创 通过Xshell连接远程服务器搞懂SSH非对称加密的实际应用

最近阿里云服务器即将到期,正好618入手了腾讯云很便宜的轻量级服务器,之前阿里云服务器远程控制都是用Xshell密码登录,这次腾讯云试了试SSH免密登录,还是很好用的,正好借这个机会研究了下SSH原理SSH是“非对称加密”非常直观的一种应用,用了SSH能很好的加深对“非对称加密”的理解

2023-06-15 15:37:01 1041

原创 查询数据时,orderby按照指定的复杂业务规则进行排序

List集合按照制定规则排序的妙用

2022-07-01 19:26:10 707 1

原创 使用windows的“符号链接”优化C盘空间

优化C盘:使用windows的符号链接,只需要1行cmd命令即可实现将大文件迁移到其他盘符中

2022-02-12 15:11:48 1133

原创 Java 设计模式 - 单例模式

在有些系统中,为了节省内存资源、保证数据内容的一致性,对某些类要求只能创建一个实例,这就是所谓的单例模式。单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。在计算机系统中,还有 Windows 的回收站、操作系统中的文件系统、多线程中的线程池、显卡的驱动程序对象、打印机的后台处理服务、应.

2021-03-23 12:57:14 141

原创 云服务器中挖矿病毒watchdog记录

晚上收到阿里云服务器被攻击的紧急邮件,登录控制台就发现遭到了恶意植入挖矿病毒,直接把我cpu资源吃完了,可恨。主要是挖矿程序和恶意脚本代码执行,我把这六个问题分别截图,挨个来解决一、挖矿程序看这两个挖矿程序的PID相同,直接追踪目标吧。应该是通过恶意植入了一个文件。先通过top查看了资源情况,好家伙,直接抓到凶犯。本想着直接kill -9杀掉该进程再说,但看了阿里云社区的相关案例,发现这种挖矿程序似乎还会出现,于是通过ls -l /proc/30282/exe找到了这个文..

2021-03-16 00:44:55 2028 11

原创 Java 日期相关的几种API

日期其实基本每个项目必用,但API比较多又杂乱,懒得记忆,这里就整理一下做个记录目录java.util.Date(处理麻烦,不推荐)java.sql.Date(适用于Sql)java.util.Calendar(线程不安全)Java 8新版的API(推荐使用)java.util.Date(处理麻烦,不推荐)

2021-02-02 23:46:22 166

原创 SpringBoot使用@RequestParam和@RequestBody获取GET和POST请求

前面两篇博客从客户端角度深入的分析了GET和POST的差异性和应用场景(从跨域问题探究Ajax的GET请求和地址栏发起GET请求的区别、从使用角度分析GET和POST的差异性 应用场景)这篇博客就讲一下在服务端如何正确的处理GET和POST请求spring boot中处理前端的GET和POST请求时,常用到的两个注解是@RequestParam和@RequestBody@RequestParam:获取以&分割的数据,适用于获取一些比较少量的参数数据。@RequestBody:获取请求

2021-01-30 17:07:06 12563 1

原创 从使用角度分析GET和POST的差异性及应用场景

这里着重讲一下GET和POST一些细节。在讲两者传输区别之前,一个需要注意的就是:很多人一提到地址栏的传参方式,就联想到GET,其实不管是GET还是POST都可以通过地址URL传递参数,因为参数属于URL的一部分,服务端只要能获取URL就能获取其中的参数。很多浏览器也对URL传参的大小做了限制,一般是2K字节数,很多服务器最多也只处理64K的URL。

2021-01-30 02:37:17 1369 2

原创 从跨域问题探究Ajax的GET请求和地址栏发起GET请求的区别

最近做的一个项目中,前后端分离,前端使用ajax方式来请求接口获取的json数据,但这不可避免会出现跨域的问题,这个问题以前也遇到过,一般解决方案是后端修改一下请求头部的Allow-Origin。但这两天研究HTTP协议时,就花了点时间研究了一下这个跨域问题的来龙去脉。对跨域不了解的同学可以先看看阮一峰老师的这篇博客:http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html,讲的很细很全面。对同源策略有所了解的同学,要解决跨域问题,

2021-01-28 16:21:34 1353 1

原创 Java NIO文件传输

上次写了个OIO的的Sokcet编程,现在把最近学习的NIO补上客户端:Clientimport java.io.Closeable;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;i

2021-01-24 16:16:22 525

原创 对阻塞、非阻塞、同步、异步的个人理解

这四点在开发中经常遇到,但经常看的有些懵逼,似懂非懂的样子。其实要讨论这四点的区别,要分不同应用场景来看。1.进程通信场景在进程通信中,这四个词基本都是一个含义。比如我们常用的socket网络编程,其目的就是为了实现客户端与服务器的通信,这其实就可以看作是两个进程的通信。进程间的通信是通过 send() 和 receive() 两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计。 消息的传递有可能是阻塞的或非阻塞的–也被称为同步或异步的。阻塞式发送(blocking send

2021-01-13 13:16:06 212

原创 Java 有趣的程序编译

今天看到一道题,很有意思,特此记录一下。public class Test { public static void main(String args[]) { int a = 0; int b = 0; while(a < 10){ b = b++; a++; } System.out.println(b); }}大脑编译一下,直觉告诉我每次循环

2021-01-06 17:39:00 244 3

原创 Java 数组的length方法对时间复杂度的影响问题

最近无意中看到一个问题,提到循环数组时,是否在循环体中使用length会影响时间复杂度。由于看了没保存,现在找不到在哪了,大概意思就如下面的代码。只记得这个问题是基于C语言提出的,所以我很好奇java语言中,是否存在这种问题。int[] num = {9,3,1,2,7};//这种写法,每次循环都要获取num.length,而获取num.length就要去遍历num,这样就会造成O(N^2)的时间复杂度for(int i = 0; i < num.length; i++){ ...

2021-01-06 16:05:07 1743 3

原创 Java 数据结构与算法 环形队列

最近由于忙其他事情,有一段时间没有接触一些基础的数据结构了,前两天遇到一个手写环形队列的题,都搞忘了,再次特地写一篇博客,记录一下,加深印象。环形队列主要是有几个公式容易忘记,其实理解了也很简单。几个必要的变量说明int[] arr:存储队列的数组,也可以用链表做,这里不多赘述int maxSize:数组的长度,也是队列的最大长度,通常是初始化队列时传入int front:队头指针,记录数组中队列的队头下标int size:当前的队列的长度注:以前学习数据结构时,一般老师或者教

2020-12-30 13:09:34 125

原创 Java LinkedList作为栈和队列的使用

最近用java写一些算法时,经常遇到要使用栈和队列结构(比如树的各种遍历等等),使用栈的话,Stack已经不被推荐使用了,所以栈和队列我们通常都是用LinkedList这种双链表结构实现,用的多了自然就开始好奇它的各种操作具体是怎么实现的?先下面分别从用法和源码角度简单记录下如何用LinkedList实现栈和队列作为栈使用时,push是入栈,pop / poll是出栈,peek是获取栈顶元素具体使用如下示例:LinkedList<String> stack = new .

2020-12-11 14:08:56 2017 2

原创 Java 随机获取多个不重复的数字

最近在做一些算法测试时,为了方便测试,自己写了一个获取多个随机数字的小Demopublic class GetArrays { /** * 获取随机数组 * @param arrLength 随机数组长度 * @return 随机数组,可重复 */ public static int[] getArrays(int arrLength){ int arr[] = new int[arrLength];//随机数个数为数组长度

2020-12-02 19:13:44 1137

原创 Java 数据结构与算法 二叉树的常见操作

下面通过一个实例来简单实现下二叉树的常见操作创建一个树结构TreeNode类:/** * 二叉树结构 - 子节点 */public class TreeNode { Object data;//泛型数据对象 TreeNode lchild;//左子节点 TreeNode rchild;//右子节点 //默认构造方法 public TreeNode(Object data,TreeNode lchild,TreeNode rchild) {

2020-11-29 16:37:40 138

原创 Java Socket网络编程 TCP / UDP

TCPTCP连接最大的特点就是需要对方始终开启端口,才能够进行通信,这样能够保证通信数据传输过程中不会丢失。所以常说的TCP有连接、安全就是这个道理。下面写一个小Demo,通过TCP实现信息传递和文件传输编写客户端类:ClientDemo import java.io.*;import java.net.InetAddress;import java.net.Socket;//客户端public class ClientDemo { public static voi

2020-11-24 17:20:47 278 5

原创 List集合循环添加对象会重复的原因及解决办法

最近在开发中,遇到个以前还没怎么遇到过的问题,可能是开发经验太少了吧,不过才个坑就最好把这个坑补上,下次才不会再掉进去。Android开发,从数据库读取一些用户的数据,我使用的是List集合来存储一个用户对象,然后传给前台,但却是发现取到的数据居然是重复的。我当时的写法大概是下面这样的//后台读取数据库的对象数据List<User> list = new ArrayList<>();User u = new User();for (int i = 0; i <

2020-11-24 16:51:42 6895 13

原创 Java 设计模式 - 中介者模式

中介者模式其实理解起来还是蛮简单的,但是我看代码还是想了很久才逐渐弄明白。中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。中介者模式由四个部分组成抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对.

2020-11-17 22:39:26 109

原创 Java 设计模式 - 动态代理模式

代理模式的定义:给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问代理模式通常分为静态代理模式和动态代理模式。简单来理解代理模式,其实就是客户端不直接对一个对象进行操作,而是将这些操作放在一个代理类中,由代理类完成操作,客户端只负责与代理类的交互即可。这样做一是可以提高代码的安全性、而是能够降低耦合度。代理模式通常由三个角色组成Subject:抽象主题角色 Proxy:代理主题角色 RealSubject:真实主题角色由于静态代理模式比较简单,后面再补上,这里先讲下.

2020-11-16 21:39:10 157

原创 ClassLoader简单理解-记录

部分内容参考至:https://www.jianshu.com/p/554c138ca0f5很多时候在需要使用类的反射来处理问题时,都会遇到ClassLoader,但只知道这个是类加载器,却不知道有啥用,从哪来的。特此记录一下。首先看定义,java通常有三种系统类加载器,其功能也各不相同,同时也支持自定义类加载器启动类加载器(Bootstrap ClassLoader): 这个类加载器负责将\lib目录下的类库加载到虚拟机内存中,用来加载java的核心库,此类加载器并不继承于ja..

2020-11-16 17:55:57 100

原创 Android实现小米手机自带的计算器

最近突发兴趣,想自己实现一个提供四则混合运算的计算器,心动不如行动,就开始用Android来具体的实现下。但这种小Demo听着简单,实现起来还是需要一些参考。考虑到界面的美观性,我最终选择了小米手机自带的计算器来模仿。这个计算器的图大概是这样的以前学习栈的时候,我们知道,要实现一个能进行简单混合运算的计算器功能,需要通过两个栈将中缀表达式转换为前缀表达式(或后缀表达式),而且逻辑也比较复杂。如果对这个有兴趣的可以看我另一篇博客,有程序的流程图:https://blog.csdn.net/c_o_

2020-11-07 00:49:24 1842 3

原创 单链表实现栈结构

最近遇到一种类型的算法题,是实现栈的pop、push、peek等方法的同时,还让实现min取得栈中最小值的功能, 题目最特殊的一点就是,要求时间复杂度为O(1)。具体的题目如下:请设计一个栈,除了常规栈支持的pop与push函数以外,还支持min函数,该函数返回栈元素中的最小值。执行push、pop和min操作的时间复杂度必须为O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);

2020-10-28 16:54:11 739 2

原创 Java 值引用、参数传递的问题详解

在讨论这个问题之前,先抛出两个概念:值传递和引用传递。学过程序的同学应该对两个概念不陌生,就算忘了也可以看看下面的定义回忆回忆。值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,在函数中如果对参数进行修改,不会影响到实际参数引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,会影响到实际参数。

2020-10-22 13:10:02 307 2

原创 中缀表达式转前缀、后缀表达式

中缀表达式转前缀、后缀表达式

2020-09-24 14:46:16 7113 2

原创 Java 简单记录下==和equals的区别与联系

日常开发中,对象的比较是肯定绕不开的,我自己以前也是似懂非懂,很多时候干脆两者都用上,但又觉得代码臃肿,而且这种方式并不可取,所以特地花点时间自己整理一篇博客来记录一下。 很多时候只知道==比较地址,equals比较地址指向的值,但开发中千变万化,死记硬背是行不通的,必须理解才行,下面的内容这些只是自己的理解,可能很多地方不是很严谨全面,但整体思路没错就行,可以作为参考首先引进一个叫做常量池的东西,把这个看明白了才明白后面的String部分内容

2020-09-14 14:05:08 102 2

原创 Java Timer定时器的四种方法

Timer定时任务代码简洁,用的较为广泛,但除了传递TimerTask外,还有后面的一些参数在使用时,容易搞混淆,所以我特意从源码中找出来,整理一下。 1.当传递的参数只有一个long类型的delay时,就是延迟delay毫秒执行一次,但线程不会被销毁public void schedule(TimerTask task, long delay) { if (delay < 0) throw new IllegalArgumentException("Negative delay..

2020-09-09 12:59:21 1009

原创 bug记录 - Long和Integer为0时,mybatis识别为空的问题

这段时间遇到一个比较奇葩的bug实体属性设置为封装类型Long,在使用它为mybatis的xml文件中获取参数时,由于加了一个if对属性的非空判断,就出现了这个奇葩bugxml代码如下select * from crm<where> <if test="projectStatus != null and projectStatus != '' ">and crm_status = #{projectStatus}</if></where>

2020-09-02 13:44:41 1006 2

原创 踩坑 阿里云code第一次使用http远程clone项目的坑

解决方案直接看总结总结:重置私人令牌时,遇到如下报错,说明令牌格式错了1 error prohibited this user from being saved: Reset password token is inval令牌格式是:只能是数字且不能低于8位坑就坑在 重置这里没有详细格式提示详细记录:最近公司用阿里云Code作为代码仓库,使用起来比较简单,但使用http的方式来clone项目时,有些坑还是要提一提,毕竟网上相关资料太少阿里云Code有个帮助...

2020-08-23 11:42:14 2143

原创 Git使用SSH方式远程clone阿里code的项目(完整+详细+多图)

以前使用git远程clone项目,通常都是clone的github项目,这次clone阿里code的项目,需要使用ssh来远程下载,所以又鼓捣了很久才弄明白,主要参考了https://blog.csdn.net/qq_37735780/article/details/80955697这篇博客。博主写的很详细,但似乎排版顺序和图片有些凌乱,不过还是万分感激。我特意重新自己整理了一遍想偷懒复制粘贴的小伙伴,注意windows下Git Bash的复制快捷键是ctrl + insert,粘贴键是shift +

2020-08-17 20:10:13 3717 2

原创 Java 数据结构与算法 单链表

单链表通过结点存储数据,每一个数据都是一个结点结点由当前数据的指针(这里可以理解为java的对象)、数据内容、下一个结点的指针三部分组成单链表的结构如下图看懂下面代码所需知识:java基础由于写的注释有点多,代码不是很简洁,望理解,适合新手阅读/** * 基础单链表增删改查的实现 * 思路: * 1.创建存储基本信息的结点(Node)类 * 2.创建单链表操作类对这些基本信息进行增删查改 */public class SingleListDemo1 { ..

2020-07-19 22:01:15 172

原创 递归的压栈出栈过程 - 动图演示

一个简单的java程序实现的递归public static void main(String[] args) { test(10); } static void test(int i){ System.out.println("非递归的i="+i); if(i>0){ test(i-2); System.out.println("递归“i-2”的i="+i); }

2020-07-16 14:02:28 3484

原创 Java 通过字节流实现文件复制的四种方式

功能:读取一个文件的字节流,在另一个文件夹将字节output到硬盘文件越大,四种方式的比较效果越明显输入:要复制的文件路径+文件名,该文件要复制的目标路径输出:复制所耗时间(毫秒)代码如下:import java.io.*;public class CopyFileDemo { public static void main(String[] args) throws IOException { String filepath = "...

2020-07-10 16:26:26 2771

原创 Java 通过递归实现简单的文件搜索

要求:传入文件名(或者文件类型),和要查找的文件目录,使用递归遍历此文件目录下的所有文件,找到该文件对象并输出如果没有找到则输出未找到直接上代码import java.io.File;import java.util.ArrayList;import java.util.List;public class SearchFile { public static List<File> searchResult = new ArrayList<>.

2020-07-07 22:47:56 562

原创 Java 通过注解和反射 实现模拟 Hibernate Validator验证框架对实体对象的字段验证功能

需求: 1实现对字段的非空校验 2实现对邮箱的正则验证 3实现对年龄字段的未成年判断输出: 若字段为空则打印注解传递的message 若邮箱格式正则验证不通过则输出邮箱格式错误 若年龄小于18则打印注解传递的message1 创建一个实体类(getter&&setter略)【下面的所有文件都在同一个包中】public class User { @NotNull() String userid;...

2020-07-06 20:40:28 320

原创 Java 通过反射实现一个“半成品框架”

反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法。利用java的反射机制可以很方便的对一个类进行各种操作,也是一个“框架”所依赖的核心功能之一。下面利用反射来完成一个“基础框架“的搭建,这个框架可以根据配置文件中配置的类路径去操作对应的类,那么每次运行就不需要修改java程序,只需要修改配置文件即可。框架功能:通过用户在配置文件设置的姓名和年龄来判断用户是否成年。1.创建一个用户类User,放在包reflex.FrameDemo下(简洁起见,就没有添加getter和s...

2020-07-05 18:58:52 210

原创 Java 多线程 买票问题和生产者消费者问题

Java 多线程 买票问题和生产者消费者问题

2020-07-03 17:19:30 430 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除