一个没有技术只会增删改查的后端
Drone CI/CD 安装

安装 Drone(github,其他参考官网)

  1. 创建OAuth程序,并通过keySecret授权访问github资源。

请参考下面的格式填写Authorization callback URL

数据库中char、varchar、nchar、nvarchar的区别

我们在进行数据库的设计的时候,很多情况下表中的字段都是用的是字符串类型的数据,其中就有四种选择char,varchar,nchar,nvarchar,我们该如何选择?

四种类型的详细说明

  1. char:固定长度,非Unicode字符数据(对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节)。

    用来存储定长数据,长度为n个字节,n的取值范围为1至8,000,存储大小是n个字节。

  2. varchar:可变长度,非Unicode字符数据(对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节)。

    用来存储变长数据,长度为n的字节,n的取值范围为1至8,000,max指示最大存储大小是2^31-1个字节,存储大小是输入数据的实际长度加2个字节,所输入数据的长度可以为0个字符。

  3. nchar:固定长度,Unicode字符数据。

    n个字符,n值必须在1到4,000之间(含)。存储大小为两倍n字节。

  4. nvarchar:可变长度,Unicode字符数据。

    n个字符,n值在1到4,000之间(含)。max指示最大存储大小为2^31-1字节,存储大小是所输入字符个数的两倍+2个字节,所输入数据的长度可以为0个字符。

Unicode或非Unicode的区别

  1. 非Unicode:charvarchar

  2. Unicode:ncharnvarchar

    数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储,如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。

    Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar,这两种类型使用了Unicode字符集。

通用解决LocalDateTime转为字符串后中间含“T”

直接上代码,亲测可用。

@Transactional注解的失效的几种场景

@Transactional 注解相信大家并不陌生,平时Spring开发中很常用的一个注解,它能保证方法内多个数据库操作的事务性和原子性。在使用@Transactional注解时需要注意许多的细节,不然你会发现@Transactional总是莫名其妙的就失效了。

首先呢,先简单介绍下Spring的事务:

1、事务

Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。

1)编程式事务

让VirtualBox虚拟机实现开机自动后台运行

目的: 开机后自动后台运行虚拟机,只有进程,不显示GUI界面.

软件选择: 开源的virtualbox.

编写脚本

  1. 启动脚本:start.bat
1
2
3
4
5
@echo off
rem 进入VirtualBox安装目录
cd /d "C:\Program Files\Oracle\VirtualBox"
rem 启动名为ubuntu的虚拟机
VBoxManage.exe startvm "ubuntu" -type headless
HTTP Header控制缓存

我们经常通过缓存技术来加快网站的访问速度,从而提升用户体验。HTTP协议中也规定了一些和缓存相关的Header,来允许浏览器或共享高速缓存缓存资源。这些Header包括:

  • Last-Modified 和 If-Modified-Since

  • ETag 和 If-None-Match

  • Expires

  • Cache-Control

以上Header又可以分成两种类型:

  • 协商缓存:浏览器发送验证到服务器,由服务器决定是否从缓存中读取,如 1 和 2 。

  • 强缓存:浏览器验证缓存的有效性,然后决定是否从缓存中读取数据,如 3 和 4 。

本文将会分别介绍这四种配置的作用以及可能产生的影响。

SpringBoot使用Nacos配置中心

本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心。

Nacos简介

Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计。它可以帮助您轻松构建云本机应用程序和微服务平台。

Nacos基本上支持现在所有类型的服务,例如,Dubbo / gRPC服务,Spring Cloud RESTFul服务或Kubernetes服务。

尤其是使用Eureka注册中心的,并且担心Eureka闭源的开发者们,可以将注册中心修改为Nacos,本文主要介绍Nacos配置中心的使用。
nacos官网

解决vue打包css文件中背景图片的路径问题

vue-cli写完的静态页面我们在node环境中引入没有问题,但是打包后放在Apache环境下,路径却有问题了.

如一个简单css语句

1
.welcome { width: 420px; height: 235px; background: url(../img/welcome.jpg) 0 0 no-repeat;

但是打包后路径成了却出现404访问不到的问题。

解决的办法很简单

使用NTLM的windows身份验证的nginx反向代理

一次项目中使用开源nginx反向代理NTLM的windows身份验证出现反复登陆框,最终分析属于keepalive 在NTLM认证过程中发生变化导致。

如采用nginx plus版本,可以直接在在upstream区域添加专用的语句 ntlm;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
upstream http_backend {
server 127.0.0.1:8080;

ntlm; # 允许使用NTLM身份验证代理请求 。一旦客户端发送带有以“ Negotiate”或“ NTLM”开头的“ Authorization”头字段值的请求,则上游连接将绑定到客户端连接。其他客户端请求将通过相同的上游连接进行代理,同时保留身份验证上下文。
# Allows proxying requests with NTLM Authentication. The upstream connection is bound to the client connection once the client sends a request with the “Authorization” header field value starting with “Negotiate” or “NTLM”. Further client requests will be proxied through the same upstream connection, keeping the authentication context.

}

server {
...

location /http/ {
proxy_pass http://http_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
...
}
}

如果不是nginx plus版本,就可以直接放弃了.

根据网上其他教程配置,可以实现登录功能,但存在bug.
因为上游链接和客户端链接没有绑定(参考上面ntlm参数说明),可能出现A用户获取B用户登录信息的问题(多用户同时访问系统时).

CORS解决跨域问题(Nginx跨域配置)

为什么会出现跨域问题

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。

什么是跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。

当前页面url 被请求页面url 是否跨域 原因
http://www.test.com/ http://www.test.com/index.html 同源(协议、域名、端口号相同)
http://www.test.com/ https://www.test.com/index.html 跨域 协议不同(http/https)
http://www.test.com/ http://www.baidu.com/ 跨域 主域名不同(test/baidu)
http://www.test.com/ http://blog.test.com/ 跨域 子域名不同(www/blog)
http://www.test.com:8080/ http://www.test.com:7001/ 跨域 端口号不同(8080/7001)