自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 MySQL中四种存储日期类型的比较与选择

在开始接触Java时也许会使用String存储字符串,但是比较占空间且效率态度,在日常开发中,MySql通常使用的日期类型有Date、Datetime、Timestamp、时间戳四种类型。1.Date格式Date的存储数据格式为:YYYY-MM-DD,它支持的范围为’1000-01-01’到’9999-12-31’,如果不需要存储时分秒的数据,那推荐用Date格式存储。`work_date` date DEFAULT NULL COMMENT '工作日期',2. Datetime格式和TimeS

2021-07-21 21:20:12 2434 1

转载 jdk9为何要将String的底层实现由char[]改成了byte[]

先说结论:出于节省String占用jvm的内存空间。优化String节省jvm内存空间的必要性(1)调查统计发现一个java系统,堆里面存活最多的对象之一就是String对象,所以优化String的占用空间是很有意义的,因为String是实际开发中使用最频繁的类。否则,你去优化一个平时根本不怎么用到的类,那么就很鸡肋了。上图是基于java8运行的spring boot系统对象数量的快照,我们可以看到String对象有82039个,占用了1968936字节的内存,占用内存排在第5位。这里注意的是ja

2021-06-18 11:25:26 1592

转载 IO包中InputStream等源码解析

Java源码解析——Java IO包一、基础知识:1.Java IO一般包含两个部分:1)java.io包中阻塞型IO;2)java.nio包中的非阻塞型IO,通常称为New IO。这里只考虑到java.io包中堵塞型IO;2.Java.io包简单地分类。Java的IO主要包含三个部分:1)流式部分――IO的主体部分;2)非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;3)文件读取部分的与安全相关的类,如:S

2021-04-22 21:51:27 447

原创 mybatis的resultMap中字段重名处理

问题在写mybatis的关联查询时,resultMap中如果两个对象有相同的属性。查询出来的结果内层的对象的属性会被外层对象属性覆盖,导致内层list数据出错。resultMap结构如下:<resultMap id="DetailResultMap" type="com.tchirk.itsm.ca.domain.System"> <result column="object_version_number" jdbcType="BIGINT" property="ob

2021-04-07 21:48:01 3535 1

转载 RESTful风格API详解

在学习RESTful 风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题?有什么应用场景?听完下面描述我想你就会明白:在互联网并没有完全流行的初期,移动端也没有那么盛行,页面请求和并发量也不高,那时候人们对接口的要求没那么高,一些动态页面(jsp)就能满足绝大多数的使用需求。但是随着互联网和移动设备的发展,人们对Web应用的使用需求也增加,传统的动态页面由于低效率而渐渐被HTML+JavaScript(Ajax)的前后端分离所取代,并且安卓、IOS、小程序等形式客户端层出不穷,客户端的

2021-01-27 20:00:47 4143 1

转载 引用拷贝、浅拷贝、深拷贝、序列化的解析

在对象的拷贝中,很多初学者可能搞不清到底是拷贝了引用还是拷贝了对象。在拷贝中这里就分为引用拷贝、浅拷贝、深拷贝进行讲述。引用拷贝引用拷贝会生成一个新的对象引用地址,但是两个最终指向依然是同一个对象。如何更好的理解引用拷贝呢?很简单,就拿我们人来说,通常有个姓名,但是不同场合、人物对我们的叫法可能不同,但我们很清楚哪些名称都是属于"我"的!当然,通过一个代码示例让大家领略一下(为了简便就不写get、set等方法):class Son { String name; int age;

2020-12-19 20:12:39 186

转载 mysql快速插入海量数据的方法总结

多线程插入(单表)多线程插入(多表)预处理SQL多值插入SQL事务(N条提交一次)多线程插入(单表)问:为何对同一个表的插入多线程会比单线程快?同一时间对一个表的写操作不应该是独占的吗?答:在数据里做插入操作的时候,整体时间的分配是这样的:链接耗时 (30%)发送query到服务器 (20%)解析query (20%)插入操作 (10% * 词条数目)插入index (10% * Index的数目)关闭链接 (10%)从这里可以看出来,真正耗时的不是操作,而是链接,解析的.

2020-11-19 16:00:28 516

原创 文件上传和下载的任务中心功能

通过实现文件上传下载的任务中心功能,可以将一个产品中所有涉及到文件下载的地方,在文件下载后,都去任务中心统一查看和下载。任务中心的表结构如下:创建SQL语句:CREATE TABLE `mission_center` ( `mission_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `file_id` decimal(10,0) DEFAULT NULL COMMENT '文件id', `mission_name` varchar(6

2020-10-24 08:52:46 979

原创 SpringCloud的配置中心从数据库中获取config配置

在微服务中,配置文件Config服务端:配置中心的config文件: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency>

2020-10-21 20:14:36 2481

转载 使用objectMapper处理数据之间的转化详解

在项目中使用到了ObjectMapper,故研究了一下。现将自己的几个测试用例和大家分享一下~首先在pom.xml文件中,加入依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.

2020-10-20 20:07:04 2256

原创 Mysql动态行转列处理一对多数据

一、业务需求在系统中有一张事件单表以及它的扩展字段表,如下图所示:事件单主表:扩展字段表:主表的一条数据对应着多条扩展表的数据,业务人员想将扩展表的field_code作为列的标题,field_value作为列的值与主表拼在一起查出来,这就是典型的列转行问题了。由于field_code不固定,所以需要动态行转列。二、SQL实现联表查询SQL:SELECTe.id,e.title,e.service_catalog_struct,s.field_code,s.field_value

2020-10-15 23:10:42 974

原创 百度云和阿里云实现文件上传下载和删除功能

创建百度云对象存储实例1. 进入百度云官网找到对象存储BOS2.创建Bucket3.客户端认证信息accessKeyId和accessKeySecret数据配置BOS和OSS的配置文件:accessKeyId和accessKeySecret为上图中认证信息中的数据。endpoint为bucket中的官方域名。test: file: bos: accessKeyId: idTest accessKeySecret: secretTest e

2020-10-13 22:34:30 1359

原创 Fegin调用时出现JSON parse error:can not deserialize instance of ...

一、问题接口调用时提示json解析报错,如图二、解决通过排查发现Fegin调用时出现问题,Fegin调用的代码时这样写的:employeeFeignClient.addRole(iamOrganizationId,employeeId,roleIds);Fegin类是这样写的:@PutMapping("/v1/{iam_organization_id}/organizations/employee/{employee_id}/role")ResponseEntity<Integer&

2020-09-24 17:40:16 5078 1

转载 SpringCloud注册中心Eureka详解(核心概念、工作流程、自我保护机制)

Eureka 工作原理上节内容为大家介绍了,注册中心 Eureka 产品的使用,以及如何利用 Eureka 搭建单台和集群的注册中心。这节课我们来继续学习 Eureka,了解它的相关概念、工作流程机制等。Eureka 作为 Spring Cl...

2020-08-05 22:14:29 1225

原创 Dockerfile命令详解(FROM、COPY、ENTRYPOINT等)

本文收集、整理了官网关于制作Dockerfile的全部命令(除SHELL没整理,这个就不弄了),可帮助大家快速进入Dockfile制作的学习。以下为正文,下面进入学习姿势吧!      FROM 功能为指定基础镜像,并且必须是第一条指令。如果不以任何镜像为基础,那么写法为:FROM scratch。同时意味着接下来所写的指令将作为镜像的第一层开始 语法:FROM <image>FROM <im.

2020-07-29 20:10:00 5435

原创 好用的录屏软件分享

之前用Captura时使用蓝牙耳机声音会有问题,所以重新找了一个录屏软件,BandiCAM破解版链接。直接贴B站视频链接吧:https://www.bilibili.com/video/av92431591/

2020-07-15 22:09:42 265

原创 操作集合的常用工具类Collections和Arrays的常见方法

Collections 工具类和 Arrays 工具类常见方法Collections排序操作查找,替换操作同步控制Arrays类的常见操作排序 : sort()查找 : binarySearch()比较: equals()填充 : fill()转列表 asList()转字符串 toString()复制 copyOf()Collections 工具类和 Arrays 工具类常见方法CollectionsCollections 工具类常用方法:排序查..

2020-07-15 22:07:29 272

转载 @Transactional注解失效场景

引言@Transactional注解哪些场景下会失效,一时语塞致使面试失败。所以今天简单的和大家分享一下@Transactional相关的知识。@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。一、事务事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务

2020-07-13 19:07:29 328

转载 SSO单点登录详解-------九、自定义CAS Server端登录页面

一、前言在第七章节,我们搭建了SSO Server.在浏览器中输入http:www.sso.com:8443/cas/login之后,跳转到了统一认证中心的登陆界面.如下图所示:但是这个页面的logo和布局都是默认apereo的.我们希望把logo换成公司的logo,已经可以自己去定义布局.比如完成如下图:自定义登陆界面我们需要修改的地方包括这几点:修改浏览器标签页图标icon修改浏览器标签标题文本修改logo信息,点击logo跳转到指定页面修改登陆页面的布局修改底部的版权信息

2020-07-12 23:11:51 1241

转载 SSO单点登录详解-------八、搭建CAS Client服务端

一、前言目前为止我们已经搭建好了CAS Server端,我们需要来搭建客户端配合使用,完成单点登录和单点注销的功能.我们将讲两种方式来搭建CAS Client端.一种是普通项目搭建,另一种是基于SpringBoot的项目搭建.二、普通项目搭建CAS Client官方提供了一个简易的模板来搭建CAS Client.Github地址:https://github.com/cas-projects/cas-sample-java-webapp下载导入项目之后,我们只需要稍作修改,运行起来就可以使用了.

2020-07-12 23:11:36 1096 1

转载 SSO单点登录详解-------七、搭建CAS Server服务端

一、前言什么是maven的overlay?overlay可以把多个项目war合并成为一个项目,并且如果项目存在同名文件,那么主项目中的文件将覆盖掉其他项目的同名文件。apereo提供了一个基于层结构的框架,可以帮助开发者快速引入cas server的代码,然后实现自由配置或代码覆盖,打包方式也非常简单。Github地址:https://github.com/apereo/cas-overlay-template二、快速构建1.环境要求:JDB1.8+2.下载或者克隆cas-overlay-te

2020-07-12 23:11:09 1279

转载 SSO单点登录详解-------六、CAS简介和配置https

一、什么是什么是CASCAS(Central Authentication Service) 是 Yale (耶鲁)大学发起的开源的企业级单点登录系统。它的特点:Java (Spring Webflow/Spring Boot) 服务组件可插拔身份验证支持(LDAP,Database,X.509,MFA)支持多种协议(CAS,SAML,OAuth,OpenID,OIDC)跨平台客户端支持(Java,.Net,PHP,Perl,Apache等)与uPortal,Liferay,BlueSocke

2020-07-12 23:10:46 1097

转载 SSO单点登录详解-------五、手写单点登录客户端和服务端单点注销

一、前言单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明。单点注销难点在于在其中一个系统注销之后,需要把其他的子系统的会话销毁.所以肯定需要子系统在令牌校验通过之后,统一认证中心要把该子系统的地址和会话记录起来.才能在注销的时候找到这些子系统通,依次调用子系统通的注销方法,销毁局部会话.二、单点注销流程图单点注销流程cookie和session存储结构三、代码实现客户端(注意:两个客户端项目都得改):步骤:1.在两个客户端项目中修改main.

2020-07-04 20:56:01 418

转载 SSO单点登录详解-------四、手写单点登录客户端和服务端

一、前言我们自己动手写单点登录的服务端目的是为了加深对单点登录的理解.如果你们公司想实现单点登录/单点注销功能,推荐使用开源的单点登录框架CAS.我们后面的章节也会带同学们快速搭建CAS Server和CAS Client的环境.二、条件如果没看前面章节的同学,请返回去观看这几章内容,不然这代码是不太好理解的.SSO单点登录教程(一)多系统的复杂性SSO单点登录教程(二)单点登录流程分析SSO单点登录教程(三)单点注销流程分析三、环境要求JDK1.7+Maven3.3Ecli

2020-07-04 20:55:17 1400

转载 SSO单点登录详解------三、单点注销流程解析

一、前言单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明:单点注销流程步骤分析:1. 用户在CRM系统中点击注销按钮.会重定向到统一认证中心的注销方法2. 统一认证中心接受到注销请求之后,会销毁全局的会话.3. 统一认证中心会拿到之前在该系统中注册的子系统集合.4. 依次的调用子系统的登出方法,销毁局部会话.5. 每个系统中的会话都已经销毁之后,跳转到登陆页面.二、系统中的Cookie和Session存储图解以下图解是基于单点登录图

2020-07-04 20:53:54 1539

转载 SSO单点登录详解-------二、单点登录流程解析

一、简介单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。二、应用场景如公司有多个系统,分别OA系统、CRM系统、财务管理系统、设备管理系统等,总不能访问每个系统都要登录一遍吧,用户会疯掉的,应该我们认证一遍,其他系统即可访问。网上很多项目都在使用SSO单点登录,比如天猫,淘宝,CSDN,博客园.三、流程分析相比于单系统登录,sso需要一个独立的认证中心,只有认证

2020-06-25 22:50:46 2625

转载 SSO单点登录详解-------一、多系统登录时存在的问题

一、学习大纲1.回顾会话机制和登录机制. 因为学习单点登录需要对Cookie和Session有较深的理解,所以我们会先回顾知识.2.多系统的复杂性带来的问题,我们如何解决这些问题?通过这个问题引出单点登录的需求.3.自己动手写单点登录的服务端和客户端,通过这个案例加深对单点登录的理解.4.学习使用开源的单点登录框架CAS,我们使用cas-overlay-template模板来搭建CAS 服务端5.搭建CAS的客户端.我们需要学习普通项目集成CAS客户端以及SpringBoot项目集成CAS客户端.

2020-06-24 00:01:03 3266

原创 [LeetCode]231.给定一个整数,编写一个函数来判断它是否是 2 的幂次方。(扩展:给定一个数,判断它是否是完全平方数)

给定一个整数,编写一个函数来判断它是否是 2 的幂次方。示例 1:输入: 1输出: true解释: 20 = 1示例 2:输入: 16输出: true解释: 24 = 16示例 3:输入: 218输出: false思路1.将数字循环除以2,到最后判断是余1还是0,余1则不是2的幂次方。public boolean isPowerOfTwo(int n) { if (n == 0) return false; while (n % 2 == 0) {

2020-06-14 23:29:40 597

原创 nginx反向代理结合keepalived实现高可用

一、概念正向代理正向代理最大的特点是客户端非常明确要访问的服务器地址。服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。总结  始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的

2020-06-11 22:47:12 1097

原创 minio实现文件上传下载和删除功能

前言之前用到文件上传功能,在这里做个学习记录。使用minio实现,后面会记录使用fastdfs和阿里云的oss实现文件上传以及他们的比较(oss根据流量收费)。minio的中文文档:https://docs.min.io/cn/minio安装首先查询docker镜像:docker search minio选着stars最高的那个拉取:docker pull minio/minio启动minio服务器,并设置端口号,容器名,账号和密码:docker run -p 9000:90

2020-06-10 21:15:01 27014 14

转载 MockMvc单元测试使用总结

Junit单元测试之MockMvc在测试restful风格的接口时,springmvc为我们提供了MockMVC架构,使用起来也很方便。下面写个笔记,便于以后使用时参考备用。一 场景提供一个restful风格的接口import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import qinfeng.zheng

2020-06-08 19:13:39 1060

原创 使用 DecimalFormat 和 NumberFormat 处理数字的格式化显示问题(千分位、百分号等)

前言原来没有接触过DecimalFormat,没有想到还有这玩意。使用的时候还是不错的,详细的了解可以看官方的api。找到了中文的api,小伙子们可以直接跳转啊!DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。DecimalFormat 包含一个模式 和一组符号。差点忘记说它是干嘛的。符号含义:上一个经典的表格,我们来说一说响应的符号的意义:符号位置本地化?含义0数字是阿拉伯数字#数字是阿拉伯数字如果不存在就

2020-06-04 21:31:07 7105

转载 生产环境又有问题?都是脏数据惹的祸!

本文笔者对脏数据的来源、脏数据的危害、脏数据的预防、如何对已出现的脏数据进行处理等问题进行详细阐述。“小光,今天那个诡异的生产环境问题找到原因了吗?”“还是数据问题!之前做的一个功能有一部分数据迁移工作没有做好,导致生产环境有脏数据,委托人的联系人已经不为该委托人服务了,应该移除掉的……”“又是脏数据……”“嗯,好在不是代码问题。”这是在蓝鲸项目发生的真实对话。其中提到的脏数据(Dirty data),也叫坏数据(Bad data),通常是指跟期...

2020-06-01 20:05:30 890

转载 Mysql索引失效原理与最左匹配原则

索引的底层是一颗B+树,那么联合索引当然还是一颗B+树,只不过联合索引的健值数量不是一个,而是多个。构建一颗B+树只能根据一个值来构建,因此数据库依据联合索引最左的字段来构建B+树。例子:假如创建一个(a,b)的联合索引,那么它的索引树是这样的可以看到a的值是有顺序的,1,1,2,2,3,3,而b的值是没有顺序的1,2,1,4,1,2。所以b = 2这种查询条件没有办法利用索引,因为联合索引首先是按a排序的,b是无序的。同时我们还可以发现在a值相等的情况下,b值又是按顺序排列的,但是这种顺序是相对的

2020-05-27 21:23:38 2775

原创 Java对象的内存结构分布简介

概念在JVM虚拟机种Java对象的内存结构如图所示分为三大块:对象头(Header)、对象种的实际数据(Instance Data)、对齐填充(Padding)。对象头(Header)Mark Word:用于存储对象自身的运行时数据,如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID等。Mark Word 被设计成一个非固定的数据结构以便在极小的空间内存储尽量多的信息,它会根据自己的状态复用自己的存储空间。Class Pointer:对象指向它的类数据的指针,

2020-05-26 21:52:28 807

原创 ReentrantLock中lock(),tryLock(),lockInterruptibly()的区别

lock()两个线程都使用lock获取锁,如果线程A获取到了锁,线程B只能等待,对线程B调用interrupt()方法不能中断线程B的等待过程。tryLock()使用lock获取锁,如果线程A获取到了锁,线程A返回true,线程B直接返回false。可以传入时间参数,表示拿不到锁等待一段时间,这段时间内还是拿不到就返回false。lockInterruptibly()两个线程都使用lockInterruptibly获取锁,如果线程A获取到了锁,线程B只能等待,对线程B调用interrupt()方法

2020-05-25 19:38:45 4495 1

转载 Token登录认证详解

参考文章:Token 认证的来龙去脉前后端分离使用 Token 登录解决方案理解Cookie和Session机制基于 Cookie/Session 的认证方案CookieCookie的工作原理由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是。cookie指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。cooki

2020-05-25 18:44:35 24384 13

转载 JDK中javac、jar、javap、jps、jstack等工具的使用

JDK的bin目录下那些常见工具使用集锦 在JDK的bin目录下有许多java小工具可以用于编译,运行以及调试Java程序或监控JVM的运行。在习惯于在Window下使用Eclipse等IDE工具开发的程序员来说,可能bin目录下的很多工具都很少使用。但是如果是运行在Linux下的应用程序并且是命令行模式运行的话,很多时候使用JDK提供的一些工具可以给开发人员带来很多便利。本文总结了在实际开发中我们可能接触到或需要掌握的一些小工具的基本用法。对于像java,javac,javadoc这样的工具可能

2020-05-20 17:42:33 1006

原创 JDK1.8中Map的getOrDefault、putIfAbsent、computeIfAbsent、merge方法

一、getOrDefaultgetOrDefault获取当前key的value值,如果Map中存在这个key,就获取到key对应的value值,如果不存在key,就返回一个传入的默认值,常用于往集合。源码: default V getOrDefault(Object key, V defaultValue) { V v; //如果key对应得value不为空,或者Map包含了key,则取得value得值,否则得到默认值。 return (((v =

2020-05-12 19:18:03 1024

原创 ThreadLocal线程本地变量学习笔记

一、概念线程安全的解决思路:互斥同步: synchronized 和 ReentrantLock非阻塞同步: CAS, AtomicXXXX无同步方案: 本地存储(Thread Local)ThreadLocal为线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使

2020-05-10 20:43:45 382

使用Java自定义注解模拟实现SpringBoot相关注解.zip

自定义实现Autowired、Component、Configuration、SpringBootApplication注解,通过Java的反射完成。

2020-04-07

常用工具安装包.zip

NavicatPremium免安装版本,下载下来直接能用。Navicat是一套数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。Navicat 是以直觉化的图形用户界面而建的,可以安全和简单地创建、组织、访问并共用信息。 Navicat Premium 是 Navicat 的产品成员之一,能简单并快速地在各种数据库系统间传输数据,或传输一份指定 SQL 格式及编码的纯文本文件。其他功能包括导入向导、导出向导、查询创建工具、报表创建工具、资料同步、备份、工作计划及更多。

2020-04-04

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

TA关注的人

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