7月9
MySQL中,查询表(crawl_content)中字段(url)值重复的记录:
SELECT url, COUNT(*) AS sumCount FROM crawl_content GROUP BY url HAVING sumCount > 1;
说明:先用GROUP BY 对 url进行分组,同时使用COUNT(*)进行统计,再用HAVING来过滤大于1的,这样查找出来的就是重复的记录了。
SELECT url, COUNT(*) AS sumCount FROM crawl_content GROUP BY url HAVING sumCount > 1;
说明:先用GROUP BY 对 url进行分组,同时使用COUNT(*)进行统计,再用HAVING来过滤大于1的,这样查找出来的就是重复的记录了。
7月9
nginx location语法
语法详解
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头
~ 开头表示区分大小写的正则匹配 以xx结尾
~* 开头表示不区分大小写的正则匹配 以xx结尾
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
语法详解
语法规则: location [=|~|~*|^~] /uri/ { … }
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头
~ 开头表示区分大小写的正则匹配 以xx结尾
~* 开头表示不区分大小写的正则匹配 以xx结尾
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
7月3
nginx设置反向代理后,页面上的js css文件无法加载
问题现象:
nginx配置反向代理后,网页可以正常访问,但是页面上的js css文件无法加载,页面样式乱了,图片也不显示。
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
#配置静态资源 解决js css 文件无法加载无法访问的问题,注意末尾不能有 /
location ~ .*\.(jpg|js|html|mp3|gif|jpeg|png|bmp|swf|ico|css)$ {
proxy_pass http://localhost:8080;
}
#号注释的部分是后面加上去的,之前是没有,这个就是nginx的反向代理的配置文件;
location ~ .*\.(jpg|js|html|mp3|gif|jpeg|png|bmp|swf|ico|css)$
加上这个就可以了
问题现象:
nginx配置反向代理后,网页可以正常访问,但是页面上的js css文件无法加载,页面样式乱了,图片也不显示。
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
}
#配置静态资源 解决js css 文件无法加载无法访问的问题,注意末尾不能有 /
location ~ .*\.(jpg|js|html|mp3|gif|jpeg|png|bmp|swf|ico|css)$ {
proxy_pass http://localhost:8080;
}
#号注释的部分是后面加上去的,之前是没有,这个就是nginx的反向代理的配置文件;
location ~ .*\.(jpg|js|html|mp3|gif|jpeg|png|bmp|swf|ico|css)$
加上这个就可以了
6月28
今天在项目中发现一个问题:使用shiro的时候,虽然隐藏掉了一些菜单,但是当我们通过get请求直接访问菜单的时候还是会访问到,也就是shiro可以在界面实现隐藏一些信息,但是没有真正的根据权限码验证请求,于是想自己在后台实现验证。
需求:有权限(权限码是systemmanager:settings)的人可以点击系统设置跳转到系统设置页面,没权限的人看不到菜单,但是通过get访问可以访问到,于是需要在后台拦截。
实现思路:在需要精确验证的方法开始先验证权限,如果验证成功啥也不做,验证失败的话就抛出一个没有权限的异常。在拦截器中捕捉到异常就记录日志,并返回到提醒页面。
1. 验证Shiro权限的工具类(此工具还可以进一步完善,封装为判断是否有指定角色,或者有任意角色)
package com.microxiang.common.util;
import com.microxiang.common.constant.ResultCode;
import com.microxiang.common.exception.user.NoPermissionException;
import com.microxiang.common.system.vo.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
/**
* 验证shiro权限的工具类
*
* @author jiangjun
*/
@Slf4j
public class ShiroPermissionUtils {
private ShiroPermissionUtils() {
}
/**
* 检查当前用户是否有权限(任意一项)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAny(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (permitted) {
return;
}
}
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("user no permission !");
}
/**
* 检查当前用户是否有权限(所有的)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAll(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (!permitted) {
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("no permission ");
}
}
}
}
需求:有权限(权限码是systemmanager:settings)的人可以点击系统设置跳转到系统设置页面,没权限的人看不到菜单,但是通过get访问可以访问到,于是需要在后台拦截。
实现思路:在需要精确验证的方法开始先验证权限,如果验证成功啥也不做,验证失败的话就抛出一个没有权限的异常。在拦截器中捕捉到异常就记录日志,并返回到提醒页面。
1. 验证Shiro权限的工具类(此工具还可以进一步完善,封装为判断是否有指定角色,或者有任意角色)
package com.microxiang.common.util;
import com.microxiang.common.constant.ResultCode;
import com.microxiang.common.exception.user.NoPermissionException;
import com.microxiang.common.system.vo.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
/**
* 验证shiro权限的工具类
*
* @author jiangjun
*/
@Slf4j
public class ShiroPermissionUtils {
private ShiroPermissionUtils() {
}
/**
* 检查当前用户是否有权限(任意一项)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAny(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (permitted) {
return;
}
}
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("user no permission !");
}
/**
* 检查当前用户是否有权限(所有的)
*
* @param permissionCodes 任意权限
* @throws NoPermissionException
*/
public static void checkPermissionAll(String... permissionCodes) {
if (permissionCodes == null || permissionCodes.length == 0) {
return;
}
// 获取用户信息
Subject currentUser = SecurityUtils.getSubject();
for (String permission : permissionCodes) {
boolean permitted = currentUser.isPermitted(permission);// 判断是否有权限
if (!permitted) {
// 没权限就抛出一个异常
Object principal = currentUser.getPrincipal();
if (principal instanceof LoginUser) {
LoginUser user = (LoginUser) principal;
log.error("user {} no permission !", user.getUsername());
}
throw new NoPermissionException("no permission ");
}
}
}
}
6月17
如何怎么能把QQ昵称加上2020,²º²º上标小字符?? (QQ昵称右上角加数字2020)经常有很多人在这个问题,所以分享下。
²º²º复制上去就可以了
⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉
用什么输入法可以打出 怎么_如何能把QQ昵称加上2020有右上标小字符?右上角标小字²º²º
怎么_如何能把QQ昵称加上²º²º有右上标小字符?右上角标小字²º²º,QQ昵称右上角小数字怎么打出来
怎么能把QQ昵称加上2020上标小字符?_微信昵称上面的小字和数字(上标或下标)是怎么弄出来的
搜狗输入只有01234这几个特殊上标符号,怎么办?有其他输入方式吗? 怎样给你的QQ昵称加上标小字2020
²º²º复制上去就可以了
⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉⁰ º ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉
用什么输入法可以打出 怎么_如何能把QQ昵称加上2020有右上标小字符?右上角标小字²º²º
怎么_如何能把QQ昵称加上²º²º有右上标小字符?右上角标小字²º²º,QQ昵称右上角小数字怎么打出来
怎么能把QQ昵称加上2020上标小字符?_微信昵称上面的小字和数字(上标或下标)是怎么弄出来的
搜狗输入只有01234这几个特殊上标符号,怎么办?有其他输入方式吗? 怎样给你的QQ昵称加上标小字2020
5月26
Spring Boot项目在多环境下(开发、生产或测试环境)调用不同配置文件方式:
我们知道,一个项目在开发环境、测试环境、生产环境,不同的环境会有不同的配置,比如数据库的配置就不同,那么怎么样才能做到,不用每次换环境的时候,都去修改这些配置呢,下面以我写的一个小案例来作说明。
如下图是我项目的三个配置文件,其中,application.yml是启动服务时,服务器会自动加载的配置文件,而application-dev.yml代表的是开发环境的配置文件,application-prod.yml代表的是生产环境的配置文件,后两个文件在启动服务时,服务器不会自动加载,那么在不同的环境中时怎么调用不同的文件的呢?

方式一、修改配置文件方式
修改application.yml配置文件,具体内容如下图:

这样,在启动服务时,服务器就会通过application.yml文件去调用application-dev.yml文件。同理,若active: prod,那么服务在启动时,服务器就会调用application-prod.yml文件。也就是说,在开发环境时,只需将application.yml配置文件配置为"dev",而生产环境时,只需将“dev”改为“prod”就可以了。
我们知道,一个项目在开发环境、测试环境、生产环境,不同的环境会有不同的配置,比如数据库的配置就不同,那么怎么样才能做到,不用每次换环境的时候,都去修改这些配置呢,下面以我写的一个小案例来作说明。
如下图是我项目的三个配置文件,其中,application.yml是启动服务时,服务器会自动加载的配置文件,而application-dev.yml代表的是开发环境的配置文件,application-prod.yml代表的是生产环境的配置文件,后两个文件在启动服务时,服务器不会自动加载,那么在不同的环境中时怎么调用不同的文件的呢?
方式一、修改配置文件方式
修改application.yml配置文件,具体内容如下图:
这样,在启动服务时,服务器就会通过application.yml文件去调用application-dev.yml文件。同理,若active: prod,那么服务在启动时,服务器就会调用application-prod.yml文件。也就是说,在开发环境时,只需将application.yml配置文件配置为"dev",而生产环境时,只需将“dev”改为“prod”就可以了。
5月22
通过IDE创建一个springboot项目
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>//这行红色
</plugin>
提示spring-boot-maven-plugin not found。在网上找了有说是通过添加<pluginRepositories>过解决,但是测试之后发觉不起作用。 经过多次尝试,最终spring-boot-maven-plugin指定版本后成功解决。 修改后的pom.xml文件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.3.RELEASE</version>
</plugin>
其实说白了就是没有加上这些Maven插件的版本号,导致Maven无法自动下载插件到本地,基本上提示这个not found的错误都是这个问题引起的。
maven-surefire-plugin、maven-compiler-plugin
这些插件也会出现这种问题,解决方案同上。只要你本地有下这些插件,不管哪个版本,就不会提示这个错误,去掉版本号也无所谓。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>//这行红色
</plugin>
提示spring-boot-maven-plugin not found。在网上找了有说是通过添加<pluginRepositories>过解决,但是测试之后发觉不起作用。 经过多次尝试,最终spring-boot-maven-plugin指定版本后成功解决。 修改后的pom.xml文件
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.3.RELEASE</version>
</plugin>
其实说白了就是没有加上这些Maven插件的版本号,导致Maven无法自动下载插件到本地,基本上提示这个not found的错误都是这个问题引起的。
maven-surefire-plugin、maven-compiler-plugin
这些插件也会出现这种问题,解决方案同上。只要你本地有下这些插件,不管哪个版本,就不会提示这个错误,去掉版本号也无所谓。
5月22
一般情况下我们springboot用Application的main方法启动 ,怎么配置成tomcat启动呢?
首先有几个步骤:
1、<packaging>jar</packaging> 改为=> <packaging>war</packaging>
2、 排除springboot内置和tomcat容器(注:这一步可选)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 移除内嵌Tomcat需要重新添加servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
3、修改启动类,并重写初始化方法
我们平常用main方法启动的方式,都有一个App的启动类,代码如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
首先有几个步骤:
1、<packaging>jar</packaging> 改为=> <packaging>war</packaging>
2、 排除springboot内置和tomcat容器(注:这一步可选)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 移除内嵌Tomcat需要重新添加servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
3、修改启动类,并重写初始化方法
我们平常用main方法启动的方式,都有一个App的启动类,代码如下:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
5月19
4月21
首先我们来看看95后的生活和成长环境,这一代人很多是母亲做全职家庭主妇,每天接送孩子上学放学,陪伴写作业,吃饭请过来,水果送到面前。各种兴趣班,高强度补课,95后已经厌倦了学习。工作后家里给配车,几乎一线城市的父母都有房产留给他们,只要他们的工资能养活自己不用家里补贴就行了。
以上分析虽然不能代表所有95后家庭,但是绝大多数城市的孩子都在类似环境中成长的。
雇佣95后员工面临的问题是什么?
在95后的家庭中,父母充当了保姆和秘书的工作,长期在这种环境中生活,有些能力被扼杀了,有些95后进入社会后,可能意识到这些问题,并主动去改变自己,更多的人可能一辈子无法改变,这种情况从90后身上可能看到。一旦进入公司,就离开了“保姆和秘书”的舒适区,需要很长时间去适应,这与80后是放养的一代人,野蛮生长,经过优胜略汰(社会达尔文主义),最后胜出的人完全不同。
95后员工缺少什么:
自驱能力
主动能力
思考能力
创新能力
自学能力
工作中你会发现,95后员工几乎绝大多数都存在上面列出的问题。
以上分析虽然不能代表所有95后家庭,但是绝大多数城市的孩子都在类似环境中成长的。
雇佣95后员工面临的问题是什么?
在95后的家庭中,父母充当了保姆和秘书的工作,长期在这种环境中生活,有些能力被扼杀了,有些95后进入社会后,可能意识到这些问题,并主动去改变自己,更多的人可能一辈子无法改变,这种情况从90后身上可能看到。一旦进入公司,就离开了“保姆和秘书”的舒适区,需要很长时间去适应,这与80后是放养的一代人,野蛮生长,经过优胜略汰(社会达尔文主义),最后胜出的人完全不同。
95后员工缺少什么:
自驱能力
主动能力
思考能力
创新能力
自学能力
工作中你会发现,95后员工几乎绝大多数都存在上面列出的问题。








