java
文章平均质量分 64
Kellan_Song
就是一名为生活而艰苦拼搏的程序员。
展开
-
重写HttpServletRequest的Header
如何重写HttpServletRequest的Header场景在使用网关对请求头中的token进行鉴权之后,希望将鉴权后的用户信息,写入到request的header中;此时,一般的HttpServletRequest是没有提供直接写入header的方法的。此时或许有人会退而求其次,不将信息放到header中,而放到key-value参数里面;但如果我们的服务使用的是JSON格式接收数据,相关信息就不太好处理了。所以建议还是放到请求头里去。方案虽然HttpServletRequest没有直接提供a原创 2021-03-17 16:55:25 · 2736 阅读 · 1 评论 -
设计模式(三)—— 装饰模式
简述设计模式中的装饰模式,是在已有的功能状态下,向旧的类添加新的功能时,可以避免修改旧代码的设计模式。例如:一个人,穿衣服、裤子、鞋子…等功能都属于人的装饰,并且每个人选择的装饰可以有区别,可以独立分开和搭配;另外,在购买新的装饰时(新添加新的功能),只需要继承原有的装饰类并实现对应装饰的功能即可,与之前的其他装饰或人完全解藕。UML图示代码示例装饰相关类/** * 装饰器 * @author: Kellan_Song * @date: 2021-01-15 23:58 **/pub原创 2021-01-16 17:17:46 · 110 阅读 · 0 评论 -
Java对象的深浅复制
简介在开发过程中,由于Java对象的引用传递问题,我们经常需要避免对一个对象的值被修改而进行对象的复制/克隆操作;从而引申出浅复制/深复制的概念;浅复制:创建一个新的对象,将原有对象的值/成员变量逐一赋值到新的对象中;深复制:创建一个新的对象,不仅对象的引用发生改变,连通对象的值/成员变量都是新的引用;浅复制浅复制的简单理解就是,新的对象地址是新的,但是对象的成员变量的地址,则不一定是新的;当新旧两个对象同时引用一个成员变量时,一个改变,另一个则跟着改变;/** * @author: K原创 2020-12-23 01:03:47 · 263 阅读 · 0 评论 -
Java的邮件发送功能
简述使用spring 的邮件发送功能,能够很简易地实现 配置自己的邮箱信息,发送邮件到指定人,包括抄送、密送、以及上传附件pom.xml依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId></dependency>由于版本兼容问题,使用过两种方式,原创 2020-11-28 09:20:13 · 483 阅读 · 0 评论 -
Java定时任务Timer和@Scheduled
定时器在开发过程中,我们会经常遇见一些不需要马上执行的业务逻辑,并再特定时间开始执行一次或多次;这时候就需要使用到Java的定时器;一般定时器分两种,一种时持续执行的,一种的只需要执行一次的。下面就简述一下我自己学习使用的Timer和Spring3.0自带的@Scheduled。Timer先上一段Timer的示例:/** * @author: Kellan_Song * @date: 2020-08-23 15:32 **/public class TimerTest { pri原创 2020-08-23 17:26:43 · 1146 阅读 · 0 评论 -
Spring Boot启动原理解析
我们开发任何一个Spring Boot项目,都会用到如下的启动类@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); }}从...转载 2020-03-30 00:11:53 · 225 阅读 · 0 评论 -
JVM学习(一) —— 《深入理解Java虚拟机》知识点总结
原创 2020-02-23 17:32:35 · 189 阅读 · 0 评论 -
Spring Cloud理论知识点
概述什么是微服务?通常而言,微服务架构指的是一种架构模式或者说一种架构风格;它提倡的是将单一应用程序划分成一组小的服务,每个微服务提供单个业务功能,一个服务做一件事。每个服务独立运行于自己的进程,服务之间互相协调、互相配合;服务之间采用轻量级的通信机制(通常是HTTP资源的API);每个服务都围绕具体的业务进行构建,并且能够被独立地部署到生成环境;每个服务独立管理,可使用不同的语言进...原创 2020-01-04 14:17:14 · 215 阅读 · 0 评论 -
Spring AOP中切入点@Pointcut的使用
切入点@Pointcut的使用在确定切面aspect之后,需要在切面上确定切入点pointcut定义注解@pointcut("{切入点}")其中{切入点}格式如下:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)...原创 2019-12-07 15:33:55 · 4297 阅读 · 0 评论 -
面向切面编程AOP
面向切面编程:AOP简介AOP(Aspect Oriented Programming) 面向切面编程,是 OOP(Object Oriented Programming,面向对象编程) 的补充和完善;不过OOP引入封装、多态、继承等概念来建立一个对象层级结构,定义的是纵向关系;而AOP恰恰相反,它是利用一种称为“横切”的技术,剖解开封装的内部,并将那些影响了多个类的公共行为封装到一个可重用的...原创 2019-11-27 18:18:15 · 201 阅读 · 0 评论 -
Java注解
Java注解一、简介Java注解(Annotation),又称标注;是JDK1.5引入的一种新的注释机制,可以标注在Java类、方法、变量上;可在运行时,通过反射获取标注的内容。同时也支持自定义注解;1.1 定义注解定义一个注解,使用 @interface,示例如下:@Document@Inherited@Target(ElementType.METHOD)@Retention(R...原创 2019-11-21 17:20:10 · 154 阅读 · 0 评论 -
设计模式(一)—— 单例模式
简介单例模式是最常见、最常使用的设计模式之一;其优点是整个程序只会存在一个实例,节省资源的占用。实现方式实现方式有很多种,其中比较常见的实现方式有以下几种:饿汉式故名思议,一个饥饿难耐的大汉等着一个食物,故实现方式为直接使用静态方式,运行程序时在累加载的过程中直接创建一个实例,则当需要时直接获取即可。该方式缺点在于,若该实例未被使用,则会一直占用着资源。/** * 单例模式-饿汉式实...原创 2019-10-08 11:28:05 · 137 阅读 · 0 评论 -
Java集合与Map的实现原理
集合关系图Collection集合共有的父类接口 ,包含集合的共性方法:add、remove、Iterator、contains、clear…迭代器 Iterator它的作用是将各种不同集合的“判断”与“取出”操作封装成一个对象。每种集合都可以使用迭代器Iterator的hasNext/next/remove 来判断和取出集合中的对象。List元素是有序的,并且可以重复;该集合有索引。...原创 2019-09-02 11:04:46 · 586 阅读 · 0 评论 -
JAVA基础笔试题
Java经常遇见的笔试题8个基本类型及其占用字节(1字节=8位)类型占用字节byte1short2int4long8float4double8char2boolean1abstract 与 interface 的区别 :两者都是抽象类,都不能实例化;interface更多的强调功能的实现;而abstr...原创 2019-08-20 19:24:16 · 489 阅读 · 0 评论 -
FastDFS学习(三)—— SpringBoot集成FastDFS
相关依赖<!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java --><dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-cli...原创 2019-08-06 15:57:53 · 713 阅读 · 0 评论 -
FastDFS学习(二)—— 安装与配置
下载与安装下载安装libfastcommon简介:libfastcommon 是一款开源的C基础库,她是从FastDFS项目中剥离出来的C基础库。 这个库非常简单稳定。 函数包括:字符串,记录器,链,散列,套接字,ini文件读取器,base64编码/解码,url编码/解码,快速定时器,skiplist,对象池等详细信息请看c头文件。//下载wget https://github.com/h...原创 2019-08-06 15:53:32 · 206 阅读 · 0 评论 -
FastDFS学习(一)—— 简介
简介概述分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。FastDFS是用c语言编写的一款开源的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,功能包括:文件存储、文件同步、文件...转载 2019-08-06 15:45:44 · 159 阅读 · 0 评论 -
MyBatis中使用PageHelper分页工具
MyBatis中使用PageHelper分页工具场景使用MyBatis进行数据库查询,当数据量大时,一般都需要分页查询;这时可以自己手写sql语句,传入当前页pageNum 和 每页数量 pageSize,自己封装ResultMap。但这样做非常麻烦,特别是开发需求多的时候,这样的操作显然有点累赘。这时候就可以使用一个非常好用的MyBatis分页工具PageHelper。环境本次示例使用的...原创 2019-07-31 15:22:01 · 617 阅读 · 0 评论 -
MyBatis逆向工程generatorConfig.xml配置文件
MyBatis逆向工程generatorConfig.xml配置文件直接上代码<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"...原创 2019-07-31 10:44:02 · 678 阅读 · 0 评论 -
Jedis的使用
【原文来自】http://blog.csdn.net/xh16319/article/details/39142699Jedis 是 Redis 官方首选的 Java 客户端开发包。工作过程总结的一个示例,贴出来,如下:Java代码 package com.wujintao.redis; import java.util.Date;转载 2017-09-05 15:11:31 · 377 阅读 · 0 评论 -
Linux服务器安装JDK
安装Java环境1 查看系统是否自带 OpenJDK首先查看操作系统是否自带JDK,查看信息命令 java -version 若已经有自带安装的,则使用命令 rpm -qa | grep java 查看,有几个,卸载几个。卸载命令: rpm -e --nodeps ***-x.x.x-2 解压安装JDK到oracle官网下载Java1.8版本的JDK http://www.oracle.c原创 2018-03-01 14:11:55 · 189 阅读 · 0 评论 -
Linux服务器tomcat 8设置https
tomcat 8设置https1 下载解压tomcat下载地址: https://tomcat.apache.org/download-80.cgi 解压命令:tar -zcvf apache-tomcat-8.*.tar.gz2 配置tomcat的http与https在tomcat的解压目录中 配置 vim /conf/server.xml 配置http:<Connector port="8原创 2018-03-01 15:14:56 · 1755 阅读 · 0 评论 -
Spring Boot学习(二)——框架搭建
由于本次为了迎合Sping Boot快速搭建项目框架的需求,在ORM框架上,本次选用的是Spring Data JPA;目前为止,Java的ORM框架众多,我使用过的就有 Hibernate、MyBatis、BeetlSQL和Spring Data JPA。至于每个ORM框架之间的优劣,我之后有机会的话就额外发一遍文章说明。原创 2018-04-06 23:14:44 · 189 阅读 · 0 评论 -
Spring Boot学习(三)——环境配置
Spring Boot的基本配置文件为 application.properties。Spring Boot项目下的配置信息基本上都可以从这个配置文件上读取。以下分点说明可以配置的信息: 1 服务器配置 server.port = 8080; 当然Spring Boot同时也支持命令启动端口 : java-jar test.j...原创 2018-06-13 09:55:12 · 221 阅读 · 0 评论 -
Spring Boot学习(一)——框架介绍
Spring Boot 是目前Java开发中最为火热的框架之一。 随着Java发展的进程,Spring、Spring MVC等轻量级开发框架越来越重,无论是为了兼容低版本还是新版本的特性,Spring体系的框架的配置越来越让人摸不着头脑。常常会因为版本的问题,在配置上搞得一团糟。而Spring Boot的诞生,目的就是为了降低Spring框架体系的使用门槛,简化Spring的搭建开发过程。除了简化原创 2018-03-29 22:41:04 · 330 阅读 · 0 评论 -
Java经久不衰的缘由
前言在近20年的时间里,随着互联网的发展,相应的热门编程语言也同样在一直演变交替当中。从互联网早期的C跟C++,然后到90年代的Python、Java、PHP、JavaScript;然后到20世纪的C#、.Net、Ruby、Node.js和Go等一批优秀的编程语言。 纵横20载,Java在众多唾弃声中依旧保持的高傲的姿态占据在2018年热门编程语言排行榜中第二名(仅次于C),接下来,我们就探讨下其...原创 2018-07-07 09:31:32 · 983 阅读 · 0 评论 -
Java异常总结
Java异常Throwable 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出)。Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性。 而Throwable有两个重要的子类:Exception(异常)和 Error(错误),二者都是 Java 异常处理的重要子类,各自都包含大量子类。Error(错误...原创 2018-07-29 19:57:34 · 251 阅读 · 0 评论 -
Spring AOP 中@Pointcut的使用
Spring AOP 中@Pointcut的使用在确定切面aspect之后,需要在切面上确定切入点pointcut注解@pointcut("{切入点}")其中{切入点}格式如下:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-p...原创 2019-01-31 13:46:35 · 1908 阅读 · 0 评论 -
面向切面编程AOP
一、简介AOP(Aspect Oriented Programming) 面向切面编程,是OOP(Object Oriented Programming,面向对象编程)的补充和完善;不过OOP引入封装、多态、继承等概念来建立一个对象层级结构,定义的是纵向关系;而AOP恰恰相反,它是利用一种称为“横切”的技术,剖解开封装的内部,并将那些影响了多个类的公共行为封装到一个可重用的模块,并将其命名为“A...原创 2019-01-31 12:06:06 · 139 阅读 · 0 评论 -
使用AOP实现API访问日志
前言在项目开发过程中,我们经过会遇到各种各样的问题,我们会尽可能地做很多记录,以便事后对错误进行复查。一些通常的手段就是使用Log文件保存每天的后台请求日志。为了方便排查和做到可视化操作,楼主今日通过学习Spring AOP后,引用AOP实现记录每次API访问日志。该日志主要记录每次访问API成功的请求,配合 错误日志拦截器SystemExceptionHandler,就可以对每一次请求做日志管...原创 2019-04-04 18:03:21 · 794 阅读 · 0 评论 -
Java多线程学习:子线程中无法使用Spring的依赖注入
在实现Java多线程的时候,发现使用@Autowired或者@Resource依赖注入的类都会报空指针异常(NullPointerException)。原因:spring的声明周期,在工程启动时,并不会检测到线程类中的bean对其进行管理和注入;解决方法:1、 手动管理private UserDao userDao = new UserDaoImpl();如果是使用这种方式,缺点是每一...原创 2019-04-20 17:17:21 · 2476 阅读 · 0 评论 -
Java多线程学习:常用概念
MESI协议MESI协议保证了每个缓存中使用的共享变成的副本是一致的。它的核心思想是:当CPU写入数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行值为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存的该变量是无效的,那么它就会从内存中重新读取最新的数据。核心概念并发编程中的三个核心概念: 原子性,可见性,有序性...原创 2019-05-25 16:46:32 · 133 阅读 · 0 评论 -
Java多线程学习:CountDownLatch(闭锁)
介绍:CountDownLatch这个类是在Java1.5时引入的,其作用是 允许一个线程等待其他线程完成各自的工作后执行;例如:主线程执行到某处,并发生成3个子线程,这时主线程希望3个子线程都完成的情况下才往下执行,就需要使用CountDownLatch这个类了。原理:通过一个计数器来实现,这个计数器的初始化为线程的数量,当一个线程执行完之后,计数器-1,直到等于0时,表示所有线程执行完成...原创 2019-05-25 16:53:01 · 271 阅读 · 0 评论 -
Java多线程学习:CyclicBarrier(栅栏)
简介:可以在某处设定一个await事件,该事件就相当于一个栅栏一样拦截住线程,直到所有参与的线程汇集后才打开栅栏让所有线程继续往下执行;应用实例:public class CyclicBarrierTest {// 自定义工作线程private static class Worker extends Thread { private CyclicBarrier cyc...原创 2019-05-25 16:55:17 · 201 阅读 · 0 评论 -
java zxing 生成二维码工具类
import java.awt.BasicStroke;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Image;import java.awt.Shape;import java.awt.geom.RoundRectangle2D;import java.awt.image.BufferedIm转载 2016-05-01 15:32:28 · 407 阅读 · 0 评论