Java程序猿搬砖笔记(十一)

news2024/11/25 22:51:48

文章目录

    • Hexo博客 Next主题图片防盗链问题
    • Springboot Druid数据库密码加密配置步骤
    • Java统计字符串出现的次数
    • Java获取某个字符在字符串中出现第N次的位置
    • Maven激活指定profile
    • Maven中resources标签的用法详解
    • MySQL 字符集不一致报错
    • EasyExcel日期格式化
    • @Configuration、@Component、@Controller等注解
    • Java泛型方法
    • Java泛型-类型通配符:<?>
    • Java泛型-有限制的通配符(上下界)
    • SpringBoot下mybatis-plus如何打印sql日志和参数到日志文件
    • Maven的mirror镜像和仓库
      • mirror简介
      • mirrorOf的不同类型
      • 仓库jar包下载顺序
      • 仓库分类
    • 在windows环境下,后台运行jar包并打印后台日志
    • 停止Windows环境下的Java服务

Hexo博客 Next主题图片防盗链问题

问题场景:打开博客,所有引用外部链接的图片均无法正常加载,但是所有图片复制链接在浏览器请求是可以加载的。
问题原因:目标网站图片设置了防盗链。
解决方案:在 \themes\next\layout_partials\head.swig文件中加一行代码即可。
在这里插入图片描述
参考链接、参考链接

Springboot Druid数据库密码加密配置步骤

方式一:

  • 找到druid包的位置,CMD命令行执行下面的命令
java -cp druid-1.2.6.jar com.alibaba.druid.filter.config.ConfigTools 数据库密码 > pwd.txt
  • 把项目中的解密公钥和密文改为pwd.txt中的publicKey、password

方式二:

  • 在项目中运行下面的代码:
public static void main(String[] args) throws Exception {
	String password = "a123456";
	String[] arr = ConfigTools.genKeyPair(512);
	System.out.println("password:" + password);
	System.out.println("privateKey:" + arr[0]);
	System.out.println("publicKey:" + arr[1]);
	System.out.println("password:" + ConfigTools.encrypt(arr[0], password));
}
  • 把项目中的解密公钥、密文分别改为上面代码中输出的publicKey、password

注意:

  • Druid的版本一定要一致
    用druid-1.1.9.jar生成的公钥和密文在druid-1.2.6.jar中项目直接解密失败
  • 公钥和密文一定要同时替换
    同一个Jar包多次生成公钥,前后几个字符串是一样的,但是中间的不一样。

参考链接、参考链接

Java统计字符串出现的次数

  • 方法一:使用Java8的流和Lambda表达式
    代码示例:
String str = "你好/454/545/";
long count = str.chars().filter(ch -> ch == '/').count();
System.out.println(count);

返回结果:
3

  • 方法二:使用Spring框架中的StringUtils
int count = StringUtils.countOccurrencesOf("你好/454/545/", "/");
  • 方法三:使用commons-lang3工具类中的StringUtils
int count = StringUtils.countMatches("你好/454/545/", "/");
  • 方法四:使用HashMap

该方法可以统计字符串中每个字符出现的次数:

private static Map<Character, Integer> countsOfCharacter(String str){
	char[] chars = str.toCharArray();
	Map<Character, Integer> map = new HashMap();
	for (char c : chars) {
		if (map.containsKey(c)) {
			map.put(c, map.get(c) + 1);
		}else{
			map.put(c,1);
		}
	}
	return map;
}

调用示例:

String str = "你好/454/545/";
Map<Character, Integer> map = countsOfCharacter(str);
System.out.println(map.get("/".charAt(0)));

返回结果:
3

参考链接

Java获取某个字符在字符串中出现第N次的位置

/**
 * 获取某个字符在字符串中出现第N次的位置
 *
 * @param: data 字符串
 * @param: str 子字符串
 * @param: num 子字符串出现的第N次
 * @return int 字符串出现的位置,未匹配到返回-1
 * @date 2022/11/1
 */
public static int getIndexOf (String data, String str, int num) {
	Pattern pattern = Pattern.compile(str);
	Matcher findMatcher = pattern.matcher(data);
	// 标记遍历字符串的位置
	int indexNum = 0;
	while (findMatcher.find()) {
		indexNum++;
		if(indexNum == num){
			break;
		}
	}
	// 未匹配到返回-1
	if(!data.contains(str) || indexNum < num || num<0){
		return -1;
	}
	return findMatcher.start();
}

Maven激活指定profile

mvn package -P 待激活的profile
示例:mvn package -P dev

Maven中resources标签的用法详解

一旦pom当中添加resource,指定某一个文件,就会导致resources其他文件(java文件不会丢)打包的时候丢失。

<resources>
  <resource>
	<directory>src/main/resources</directory>
	<filtering>true</filtering>
	<includes>
	  <include>a.properties</include>
	</includes>
  </resource>
</resources>

打包文件中只有a.properties。

另外,当filtering为false时,配置文件用@@,取不到值。

参考链接

MySQL 字符集不一致报错

Cause: java.sql.SQLException: Incorrect string value: ‘\xE9\x87\x91\xE5\x87\xA1…’ for column ‘username’ at row 1
; uncategorized SQLException for SQL []; SQL state [HY000]

检查建表时字符集:
在这里插入图片描述
在MySQL 8.0版本之前,默认字符集为latin1。

解决方法:
建表时添加默认字符集,示例代码如下:

COMMENT='用户信息历史表'
ENGINE=InnoDB DEFAULT CHARSET=utf8 

EasyExcel日期格式化

添加@DateTimeFormat注解,参考代码如下:

import com.alibaba.excel.annotation.format.DateTimeFormat;
@ExcelProperty(value="申请日",index = 8)
@ColumnWidth(12)
@DateTimeFormat("yyyy/MM/dd")
private Date applyDate;

参考链接

@Configuration、@Component、@Controller等注解

@Configuration注解:

  • 本质上还是@Component
  • 配置类必须以类的形式提供(不能是工厂方法返回的实例),允许通过生成子类在运行时增强(cglib 动态代理)
  • 配置类不能是 final 类(没法动态代理)
  • 配置类必须是非本地的(即不能在方法中声明,不能是 private)
  • @Bean 方法可能不会反过来创建进一步的配置类(也就是返回的 bean 如果带有 @Configuration,也不会被特殊处理,只会作为普通的 bean)

@Component、@Controller、@Service、@Repository这四个注解实际上没有任何本质区别,只是后三者只是涉及一些命名规范而已,四者的注解效果确实一致。关于这里的命名规范就好比苹果叫苹果,你不会说苹果是菠萝。这样的好处显然易见,听到别人说苹果,你就知道是苹果,不会想到菠萝。
实际上这四个注解实际上没有任何本质区别,如果你喜欢,你完全可以把这四个注解当成一个注解用,当然这样的话老板可能就不喜欢你了。
参考链接、参考链接

Java泛型方法

在方法中出现了泛型的结构,这样的方法叫做泛型方法。
泛型参数与类的泛型参数没有任何关系,换句话说,泛型方法所属的类是不是泛型类都没有关系
泛型方法可以声明为static。 方法使用类的泛型不能声明为static。

Java泛型-类型通配符:<?>

List<?>List<String>List<Object>等各种泛型List的父类。
<?>不能用在泛型方法、泛型类的声明上
不能在List<?>中添加元素(除了null)。
可以读取List<?>中的元素,类型为Object

Java泛型-有限制的通配符(上下界)

  • 上界extends
    使用时指定的类型必须是继承某个类(或者实现某个接口),即**<=**
  • 下界super
    使用时指定的类型不能小于操作的类(或接口),即**>=**

示例代码如下:

定义类:

public class Order {

}

public class SubOrder extends Order{

}

测试通配符初始化:

public class Test {
    public static void main(String[] args) {
        List<? extends Order> list1 = null;
        List<? super Order> list2 = null;

        List<Order> list3 = new ArrayList<>();
        List<SubOrder> list4 = new ArrayList<>();
        List<Object> list5 = new ArrayList<>();

        list1 = list3;
        list1 = list4;
        // list1 = list5; // 编译报错

        list2 = list3;
        // list2 = list4;// 编译报错
        list2 = list5;
    }
}

测试通配符取值:

public class Test {
    public static void main(String[] args) {
        List<? extends Order> list1 = null;
        List<? super Order> list2 = null;

        List<Order> list3 = new ArrayList<>();
        List<SubOrder> list4 = new ArrayList<>();
        List<Object> list5 = new ArrayList<>();

        list1 = list4;
        Order order = list1.get(0);
        // SubOrder subOrder = list1.get(0); 编译报错
        
        list2 = list3;
        Object object = list2.get(0);
        // Order order = list2.get(0); 编译错误
    }
}

测试通配符添加值:

public class Test {
    public static void main(String[] args) {
        List<? extends Order> list1 = null;
        List<? super Order> list2 = null;

        List<Order> list3 = new ArrayList<>();
        List<SubOrder> list4 = new ArrayList<>();
        List<Object> list5 = new ArrayList<>();

        list1 = list4;
        // list1.add(new SubOrder()); 编译错误
        // list1.add(new Order()); 编译错误:因为?可能小于Order甚至比SubOrder都小。这儿不可以,根据多态上面也就不可以

        list2 = list3;
        list2.add(new Order());
        list2.add(new SubOrder());// 多态
    }
}

SpringBoot下mybatis-plus如何打印sql日志和参数到日志文件

参考链接(很详细)

Maven的mirror镜像和仓库

mirror简介

说明:

  • Maven优先从镜像中下载,找不到再从中央仓库(默认配置)下载
    默认中央仓库地址:https://repo.maven.apache.org/maven2
  • 可以配置多个
  • id可以随便写,不重复就行
  • name对仓库进行一些描述

如果配置多个mirror,首先按照搜索顺序优先级搜索,相同优先级的repository根据配置顺序搜索。

mirrorOf的不同类型

// 对所有仓库id镜像,你配置的所有仓库都不起作用了
mirrorOf=*? 
// 镜像my-repo-id,你配置的my-repo-id仓库不起作用了
mirrorOf=my-repo-id 
// !表示非运算,排除你配置的my-repo-id仓库,其他仓库都被镜像了。就是请求下载my-repo-id的仓库的jar不使用mirror的url下载,其他都是用mirror配置的url下载
mirrorOf=*,!my-repo-id? 
// 如果本地库存在就用本地库的,如果本地没有所有下载就用mirror配置的url下载
mirrorOf=external:*? 

仓库jar包下载顺序

本地仓库 -> settings_profile_repo -> pom_profile_repo -> pom_repositories -> settings_mirror -> central

仓库分类

在这里插入图片描述
(简书)Maven中配置mirrorOf和仓库
(CSDN)深入理解Maven的私服(Nexus)和仓库(Repository)以及settings中的mirror和mirrorOf

在windows环境下,后台运行jar包并打印后台日志

run.bat脚本如下:

@echo off
%1 mshta vbscript:CreateObject("WScript.Shell").Run("%~s0 ::",0,FALSE)(window.close)&&exit
java -jar reward-portal-2023-02-02.jar >StartupLog.log  2>&1 &
exit

注意:run.bat放在和jar包同一个目录

参考链接、参考链接

停止Windows环境下的Java服务

// 查看进程号
// 下面两种方法都可以,端口号为SpringBoot项目的server.port
jps -l
netstat -aon|findstr "端口号" 
// 停止服务
taskkill -f -pid 进程号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gradle Task 详解

Task定义和配置 查看工程下所有的task&#xff0c;使用如下命令 gradle tasks 定义一个task task创建的源码 参数分别是 task 名称&#xff0c;和一个 closure。groovy语法的closure可以写在小括号外面&#xff0c;小括号可以省略 task的源码 public interface Task extends…

【Java笔试强训 25】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;星际密码…

RabbitMQ死信队列延迟交换机

RabbitMQ死信队列&延迟交换机 1.什么是死信 死信&死信队列 死信队列的应用&#xff1a; 基于死信队列在队列消息已满的情况下&#xff0c;消息也不会丢失实现延迟消费的效果。比如&#xff1a;下订单时&#xff0c;有15分钟的付款时间 2. 实现死信队列 2.1 准备E…

网络编程代码实例:IO复用版

文章目录 前言代码仓库内容代码&#xff08;有详细注释&#xff09;server.cclient_select.cclient_poll.cclient_epoll.c 结果总结参考资料作者的话 前言 网络编程代码实例&#xff1a;IO复用版。 代码仓库 yezhening/Environment-and-network-programming-examples: 环境和…

[Linux]网络连接、资源共享

​⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;Linux基础操作。本文主要是分享一些Linux系统常用操作&#xff0c;内容主要来源是学校作业&#xff0c;分享出来的…

详解c++---vector模拟实现

目录标题 准备工作构造函数迭代器的完善性质相关的函数实现reservepush_back[ ]emptyresizeinserteraseerase后迭代器失效问题swapclear~vector老式拷贝构造迭代器构造新式拷贝构造老式赋值重载新式赋值重载N个数据的构造vector的浅拷贝问题 准备工作 首先我们知道vector是一个…

HTB靶机06-Beep-WP

beep 靶机IP&#xff1a;10.10.10.7 攻击机IP&#xff1a;10.10.14.6 web RCE漏洞利用、nmap提权 扫描 nmap 常规扫描&#xff1a; ┌──(xavier㉿xavier)-[~/HTB/005-Beep] └─$ sudo nmap -sSV -sC 10.10.10.7 -oN nmap1.out Starting Nmap 7.91 ( https://nmap.org …

《道德经》

《道德经》是春秋时期老子&#xff08;李耳&#xff09;的哲学作品&#xff0c;又称《道德真经》、《老子》、《五千言》、《老子五千文》&#xff0c;是中国古代先秦诸子分家前的一部著作&#xff0c;是道家哲学思想的重要来源。 道德经分上下两篇&#xff0c;原文上篇《德经…

网络安全: CIDR无类别路由

网络安全&#xff1a; CIDR无类别路由 CIDR是无类别路由&#xff0c;出现CIDR的原因是因为ipv4的地址被使用完客&#xff0c;CIDR的出现暂缓了ipv4用完的速度。 原本的ipv4很刻板&#xff0c;网络号分成8位&#xff0c;16位&#xff0c;24位作为掩码&#xff0c;也就是 xxx.0…

DRY编码原则

基本情况 DRY&#xff0c;Don’t repeat yourself&#xff0c;就是不要重复你自己的意思。 不要重复&#xff0c;是多么简单的意思了&#xff0c;重复就是多了一个一样的东西&#xff0c;为什么多一个呢&#xff0c;一个就可以了&#xff0c;这样才简单&#xff0c;这是一个常…

【报错】arXiv上传文章出现XXX.sty not found

笔者在overleaf上编译文章一切正常&#xff0c;但上传文章到arxiv时出现类似于如下报错&#xff1a; 一般情况下观察arxiv的编译log&#xff0c;不通过的原因&#xff0c;很多时候都是由于某一行导入了啥package&#xff0c;引起的报错&#xff1b;但是如果没有任何一个具体的…

AppSmith(安装与练习4套)

AppSmith官网文档&#xff1a; https://docs.appsmith.com/getting-started/setup/installation-guides/docker安装前需要已经安装好docker&#xff0c;需要版本如下&#xff1a; Docker ( 20.10.7或者更高) Docker-Compose ( 1.29.2或者更高) 安装Appsmith&#xff1a; 准备…

【Linux】第二站:Linux基本指令(一)

文章目录 一、操作系统OS概念1.OS是什么&#xff1f;2.为什么要有OS?1.一个好的操作系统&#xff0c;他的衡量指标是什么&#xff1f;2.操作系统的核心工作 3.理解我们在计算机上的操作4.Linux和Windows的特点 二、Linux基本指令1. 指令概述2.ls指令1> ls -l2> ls -a3&g…

ChatGPT其实并不想让开发人员做这5件事情

前言 ChatGPT已经火爆了快半年了吧&#xff0c;紧接着国内也开始推出了各种仿制品&#xff0c;我甚至一度怀疑&#xff0c;如果人家没有推出ChatGPT&#xff0c;这些仿制品会不会出现。而很多人也嗨皮得不行&#xff0c;利用各种方法开始科学上网&#xff0c;用ChatGPT做各种觉…

不得不说的行为型模式-解释器模式

解释器模式&#xff1a; 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种语言&#xff0c;用于解释执行特定的操作&#xff0c;例如正则表达式、查询语言、数学表达式等。该模式通过定义一个解释器来解释语言中的表达式…

分治与减治算法实验:题目6 淘汰赛冠军问题

目录 前言 实验内容 实验流程 实验分析 实验过程 流程演示 写出伪代码 实验代码 运行结果 改进算法 总结 前言 淘汰赛冠军问题是一个经典的算法设计与分析的问题&#xff0c;它要求我们在给定的n个参赛者中&#xff0c;通过一系列的比赛&#xff0c;找出最终的冠军…

nginx负载均衡+RabbitMq集群及镜像队列(2)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、nginx是什么&#xff1f;二、搭建步骤1.软件和环境2.安装nginx3.负载均衡配置nginx.conf4.应用程序配置 总结 前言 提示&#xff1a;这里可以添加本文要记…

Linux套接字编程-3

在之前的套接字编程内容中&#xff0c;我们讲述完了UDP和TCP的主要内容&#xff0c;但是对于TCP通信中具体的实现还存在一些问题没有解决&#xff0c;所以我们本篇博客将对进行分析和解决。 目录 1.引入 2.多进程 3.多线程 1.引入 在上一篇博客中&#xff0c;当我们使用T…

sed进阶之模式替换

shell脚本编程系列 &符号可以代表替换命令中的匹配模式&#xff0c;不管模式匹配到了什么样的文本&#xff0c;都可以使用&符号代表这些内容。这样就能处理匹配模式的任何单词了。 echo "The cat sleeps in his hat." | sed s/.at/"&"/g&…

告别低效繁琐的Prometheus告警管理,Nightingale助你快速响应故障!

Prometheus的告警规则、记录规则都是采用配置文件管理&#xff0c;适合奉行Infrastructure as Code的公司或团队内部使用。但如果要把监控能力开放给全公司&#xff0c;就要支持协同操作的 UI&#xff0c;让各个团队互不干扰的同时共享成果。 开源方案&#xff1a; Grafana 擅…