自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 资源 (4)
  • 收藏
  • 关注

原创 Java利用Apache compress包实现文件夹压缩成Zip包

Apache common提供了很多实用的工具包,下面就说一下如何用compress包来压缩文件夹。执行main函数跑测试用例,发现程序将dir路径下的所有文件已经压缩并输出zip包。

2024-01-10 10:11:06 1998 5

原创 Java获取本机ip地址

在做项目过程中,我们有时候会需要获取部署服务的本机机器地址。我们可以直接用jdk自带的方法来获取ip地址,但是一定要注意,这个方法执行会比较慢,不要频繁调用。跑单测看一下,可以正常输出本机的ip地址。

2024-01-10 10:06:37 421 1

原创 Java对象转Map

在和外部系统对接时,对方系统提供的SDK方法入参全是Map,没办法,只能想办法把对象转成Map。这里,借助了hutool的工具类,可以方便的通过反射获取对象的属性。

2023-12-07 15:49:00 1986 6

原创 spring boot项目如何自定义参数校验规则

spring boot项目对参数进行校验时,比如非空校验,可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则。当参数中加了MobileNo注解,如果输入的手机号不满足1打头的11位数字的规则,就会抛出异常信息。当然这里返回的错误信息比较不友好,实际项目中可以对参数校验异常统一拦截,返回需要的数据格式。

2023-12-07 15:34:18 1280 2

原创 spring boot项目如何自定义参数校验规则

但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则。这样,很简单的两个类,就实现了自定义参数校验规则。当参数中加了MobileNo注解,如果输入的手机号不满足1打头的11位数字的规则,就会抛出异常信息。然后输入一个不符合要求的手机号,会返回400错误码,错误信息如下。当然这里返回的错误信息比较不友好,实际项目中可以对参数校验异常统一拦截,返回需要的数据格式。

2023-07-05 17:19:35 1495

原创 Java如何实现分库分表

ShardingSphere-JDBC定义为轻量级Java框架,在 Java 的 JDBC 层提供的额外服务。它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;

2023-06-27 14:46:26 6596 6

原创 spring boot项目敏感配置信息如何加密?

但是这样就会存在一个问题,一些比较敏感的配置信息,比如数据库密码,一旦被泄露,就会有严重的数据安全问题。因此,我们可以通过对敏感信息进行加密处理,然后在项目中再自动解密,就可以解决此类问题。代码如下,实现逻辑是判断配置项是否是以(testcipher)为前缀的,符合这个条件的会用SM4算法进行解密,就得到配置信息的明文啦。首先,引入ulisesbocchio包,这个包就实现了我们需要的这个功能。可以看到,项目启动的时候,直接把配置信息明文打出来了,实现了解密后的配置信息自动解密。

2023-06-27 14:12:47 602 1

原创 Nacos源码学习(5)— spring cloud集成nacos实现服务注册

nacos主要有两部分的功能:配置中心和注册中心,之前几篇文章讲了nacos作为配置中心的实现原理,这篇文章主要介绍下spring cloud如何集成nacos实现服务注册。

2023-06-06 16:55:25 401

原创 Nacos源码学习(4)— 客户端监听机制

nacos添加监听listener是通过ClientWorker的addTenantListeners方法来实现的,会将需要监听的数据都缓存到内存的map中,key就是dataId,group,namespace拼接起来的字符串,value是CacheData对象,CacheData类里属性主要有listener数组,配置内容content,配置内容的md5摘要等。CacheData的checkListenerMd5方法会匹配md5值,如果md5值发生了变化,会通知listener列表。

2023-06-06 16:53:35 685

原创 Nacos源码学习(3)— spring cloud自动刷新配置信息

spring cloud动态刷新nacos配置,是通过spring boot自带的@RefreshScope注解来实现的,在类上面加上这个注解,就能动态刷新配置了。实现过程是通过添加listener,来监听nacos配置,当有配置修改时,会发送RefreshEvent事件,带有@RefreshScope注解的类就能自动刷新配置了。NacosContextRefresher会执行动态刷新具体逻辑,NacosRefreshHistory会记录配置刷新历史。

2023-06-06 16:47:10 504

原创 Nacos源码学习(2)— spring cloud集成nacos配置中心

加载配置顺序如下,以dataId前缀为application,文件扩展名为yml,active profile为test为例,会先加载data id 为application的配置项,再加载application.yml,最后再加载application-test.yml。spring-cloud-starter-alibaba-nacos-config包提供了spring cloud集成nacos功能,对于spring boot项目,可以在项目启动时,直接去nacos配置中心拉取配置。

2023-06-06 16:45:46 304

原创 【Java加解密系列】- SM4加解密

之前文章介绍过SM2生成密钥和加解密的代码实现过程,这篇文章主要介绍下SM4对称加密算法的代码实现,依然还是引用的BC库。

2023-05-26 16:36:28 2712

原创 Nacos源码学习(1)— 配置中心客户端如何保证高可用

一般情况下,这个文件都是不存在的,只有在nacos服务不可用时,可把配置文件放置在固定目录下,这样业务系统依然能正常加载配置信息。业务系统本身配置很多,一般都会引入配置中心,把配置文件都放到配置中心上,方便统一管理,且能做到配置热更新。因此,配置中心的高可用至关重要。这样,业务系统下次加载配置时,如果nacos服务不可用,且本地没有预先设置应急的配置文件,则会从上次快照文件中加载配置。其次,nacos向服务端拉取配置时,会采用轮询重试机制,如果服务端某个节点不可用,会自动去下一个节点拉取配置。

2023-05-18 17:12:20 651 1

原创 【Java加解密系列】- SM2加解密

上一篇博客介绍了SM2算法生成密钥的过程,详见-SM2生成密钥。这篇博客接着介绍SM2算法如何用上篇博客生成的密钥进行加解密操作。因为密钥都是byte数组,在进行加解密前,我们需要将密钥转换成BC库的CipherParameters。代码如下:/** * 私钥转换为 {@link ECPrivateKeyParameters} * @param key key * @return * @throws InvalidKeyException */

2020-12-01 08:42:35 11924 18

原创 【Java加解密系列】- SM2生成密钥

国密算法是国家密码局制定标准的一系列算法,包括SM1、SM2、SM3、SM4等。其中,SM1是采用硬件实现的,不予讨论;SM2是非对称加密算法;SM3是摘要算法;SM4是对称加密算法。本系列博客将讲解SM2、SM3、SM4 Java版本实现,所有的代码实现都是基于BC库来做的,本篇博客将讲解如何生成SM2密钥对。BC库是实现加解密算法的基础库,我们首先要在代码里引入BC库,如下: <dependency> <groupId>org.bo

2020-10-29 09:40:26 18089 6

原创 Spring Boot异常统一处理

最近在学习自己搭建一个配置中心平台,准备用spring boot来搭建后台web系统,将遇到的问题在此记录。github项目地址:https://github.com/zhaikevin/confCenter,如果觉得有用,请给个star。ps:还有很多东西没有完成,欢迎感兴趣的童鞋一起来搞。我们在用ajax向服务端请求数据时,免不了会有异常。如果不进行统一处理,直接把异常信息抛到前端,界面会很不...

2018-05-24 17:16:19 2930

原创 Java容器LinkedList源代码解析

写在前面的话本文针对的是Java1.6进行的源码分析,与其他版本可能存在差异。概述LinkedList是基于双向链表来实现的,与ArrayList一样,它也实现了List接口。与ArrayList相比,它的插入和删除操作更加高效,但是在随机访问数据方面要逊色许多。LinkedList适用的场景:更多的执行插入和删除操作,基本上不会随机访问数据。源代码解析1. LinkedList底层数据结构

2017-06-06 09:34:21 1252

原创 Java容器HashSet和LinkedHashSet源代码解析

写在前面的话本文针对的是Java1.6进行的源码分析,与其他版本可能存在差异。概述HashSet和LinkedHashSet分别是用HashMap和LinkedHashMap来实现的,它们是把数据作为Key值存入到HashMap或LinkedHashMap中。因此Set都不允许有重复的值,且HashSet是无序的,LinkedHashSet是有序的。之前,已经介绍过HashMap和LinkedHas

2017-05-31 11:24:28 1204

原创 Java容器LinkedHashMap源代码解析

写在前面的话本文针对的是Java1.6进行的源码分析,与其他版本可能存在差异。概述LinkedHashMap是继承自HashMap,所以HashMap的特性,它都有。与HashMap不同之处在于,它自身还维护了一个双向链表,这个链表是有序的,可以根据元素的插入顺序或者访问顺序排列。关于HashMap的解析请参考 Java容器HashMap源代码解析源代码解析1.LinkedHashMap属性

2017-05-26 14:25:25 893

原创 Java容器HashMap源代码解析

本文主要介绍了HashMap的源代码实现,包括哈希表的简介、HashMap底层数据结构、添加数据、获取数据等主要方法。

2017-05-25 10:41:48 1044

原创 Java容器HashMap遍历方法和源代码解析

本文主要介绍了HashMap遍历用法和相应的元代码解析

2017-05-22 16:17:09 1294

原创 Java容器ArrayList源代码解析

ArrayList是很常用的一个容器,它的底层是用动态数组实现的,可以根据数据量大小自动扩容。它支持很多操作,比如向容器中添加、删除、查找数据,返回容器的大小等等。

2017-05-18 18:11:13 830

原创 利用ajaxSubmit()方法实现Form提交表单后回调

1.      背景最近在工作中,需要实现网页端图片上传到FTP服务器的功能。上传文件是用Form表单提交数据的方法向后台传输文件流,在此遇到了一个问题:后台在处理完图片上传功能后,需要向前台回传是否上传成功的状态码、上传失败的错误信息和上传成功后的图片URL。但是,用普通Form表单提交的话,没有办法实现回调函数。后来在小伙伴的介绍下,发现可以用ajaxSubmit()方法来实现此功能。

2017-01-12 17:48:30 45459 1

原创 【python脚本】-刷CSDN博客流量

本脚本可以通过打开CSDN博客页面,来增加博客访问量。写此脚本纯粹是为了练手,想要增加访问量,写出高质量的文章才是王道。脚本如下:#!usr/bin/python# -*- coding: utf-8 -*-import urllib2import reimport time from bs4 import BeautifulSoupbaseUrl = 'http://blog.

2016-09-02 17:26:38 18464

原创 spring mvc能访问到Controller但是显示404问题解决办法

今天,在配置Spring mvc时碰见一个很奇怪的问题,路径明明是对的,但是访问页面一直显示404 Not Found。启动调试,跟踪代码,发现请求能够进入到Controller中,但是返回jsp时却出现错误。上网查了一下,发现是web.xml配置有问题。我的配置文件如下:<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmln

2016-08-31 17:27:01 18142 1

原创 【Python脚本】-爬虫得到CSDN博客的文章访问量和评论量

对于CSDN博客,我们比较关注的就是文章的访问量和评论量。但是当文章多了之后,我们想看每篇文章的访问量变得很费劲。通过爬虫,我们可以把每篇博客的基本信息都能得到。之后,可以再进行进一步的统计分析。脚本如下:#!usr/bin/python# -*- coding: utf-8 -*-import urllib2import refrom bs4 import BeautifulSoup

2016-08-31 15:37:17 2423 1

原创 【Spring学习笔记七】-Spring MVC基本配置和实例

一、spring mvc基本配置对于spring mvc的配置,如果是maven项目,只需要简单地加入spring mvc和Servlet的依赖就可以了。下面所说的配置,指的是没有使用maven的项目配置。首先,新建一个web项目。在new->project->web->Dynamic Web Project,输入工程名即可。新建后的web项目结构如下:之后,先导入spring

2016-08-30 13:36:25 9533

转载 【Spring学习笔记六】-Spring MVC框架

一、Spring mvc介绍Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还可以是 Struts 这样的 Web 框架。Spring web mvc和Struts2都属

2016-08-22 18:21:59 1200

原创 【Spring学习笔记五】-Bean的作用域

一、Bean作用域类型Spring定义了多种作用域,可以基于这些作用域创建Bean。Spring包括以下四种作用域:(1) 单例(Singleton):在整个应用中,只创建bean的一个实例(2) 原型(Prototype):每次注入或者通过Spring应用上下文获取时,都会创建一个新的bean实例(3) 会话(Session):在Web应用中,为每个会话创建一个bean实例。

2016-08-22 10:36:29 1181

原创 【Spring学习笔记四】-自动装配Bean

上一次博客写到Spring有两种依赖注入的方式,设值注入和构造注入,详情点击这里:http://blog.csdn.net/kevin_zhai/article/details/52184901。上述两种注入方式的例子,都是通过XML配置文件来装配Bean的。除此之外,Spring提供了一种更加方便的装配Bean的方法,即利用@Autowired注解进行自动装配。一、@Autowired基本使

2016-08-18 10:47:11 4023 4

原创 【Python脚本】-Python查找可用代理IP

在用Python爬虫时,我们有时会用到IP代理。无意中发现一个免费代理IP的网站:http://www.xicidaili.com/nn/。但是,发现很多IP都用不了。故用Python写了个脚本,该脚本可以把能用的代理IP检测出来。脚本如下:#encoding=utf8import urllib2from bs4 import BeautifulSoupimport urllibimp

2016-08-14 15:48:52 6383 2

原创 【Spring学习笔记三】-依赖注入的两种方式

依赖注入通常有两种方式:设值注入和构造注入。设值注入,即Spring容器使用属性的setter方法来注入被依赖的实例。构造注入,即Spring容器使用构造器来注入被依赖的实例。一、设值注入设值注入是指Spring容器使用属性的setter方法来注入被依赖的实例。这种注入方式简单、直观,因而在Spring的依赖注入里大量使用。还是以上一篇博客中讲到的人和斧子为例。首先,定义人和斧子接口。

2016-08-11 17:43:04 1745

原创 【Spring学习笔记二】-理解依赖注入

为了更好的理解依赖注入,我们先从一个简单的例子说起。一个人(我们可以看做是一个Java实例,调用者),他因为劳动,需要一把斧子(在这里也可以看做是一个Java实例,被调用者)。在原始社会里,几乎没有任何分工,想要斧子,就必须要自己动手去打造。在Java中,就相当于,调用者自己创建被调用者,通常做法就是用new关键字创建一个Java对象。进入到工业社会,斧子开始在工厂生产,想要斧子的话,只需

2016-08-11 15:28:34 750

原创 【leetcode Database】262. Trips and Users

题目:The Trips table holds all taxi trips. Each trip has a unique Id, while Client_Id and Driver_Id are both foreign keys to the Users_Id at theUsers table. Status is an ENUM type of (‘completed

2016-08-09 11:22:00 4283

原创 【leetcode Database】178. Rank Scores

题目:Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ranking. Note that after a tie, the next ranking number should be the next consecutive intege

2016-08-08 17:06:10 4229

原创 【leetcode Database】180. Consecutive Numbers

题目:Write a SQL query to find all numbers that appear at least three times consecutively.+----+-----+| Id | Num |+----+-----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 || 5 | 1 |

2016-08-08 15:51:12 3758

原创 【leetcode Database】185. Department Top Three Salaries

题目:The Employee table holds all employees. Every employee has an Id, and there is also a column for the department Id.+----+-------+--------+--------------+| Id | Name | Salary | Departmen

2016-08-08 14:25:14 3667

原创 【leetcode Database】177. Nth Highest Salary

题目:Write a SQL query to get the nth highest salary from the Employee table.+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+F

2016-08-04 18:17:17 4441

原创 【leetcode Database】196. Delete Duplicate Emails

题目:Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique emails based on its smallest Id.+----+------------------+| Id | Email |+-

2016-08-04 13:36:50 3387

原创 【leetcode Database】184. Department Highest Salary

题目:The Employee table holds all employees. Every employee has an Id, a salary, and there is also a column for the department Id.+----+-------+--------+--------------+| Id | Name | Salary |

2016-08-03 18:47:07 4165

jrebel插件

jrebel插件,将解压后的文件方到Eclipse/dropins文件夹下,在tomcat服务器,点击Open launch configuration,Arguments/VM arguments中添加以下两行: -javaagent:E:\eclipse\dropins\jrebel5.5.2\jrebel.jar -noverify 路径为自己的Eclipse路径,即可使用

2016-08-30

python自动发送邮件脚本

本脚本可以实现自动发送邮件

2016-07-27

C++实现链表基本功能大代码

用C++实现链表的基本功能,包括创建链表、插入结点、删除结点、链表反序等功能。

2016-01-10

利用Python scrapy框架抓取北邮人论坛十大热门帖子

利用scrapy框架抓取北邮人论坛十大热门话题

2015-12-22

空空如也

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

TA关注的人

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