Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

IDEA创建SpringBoot项目并启动的方法

发表于 2024-06-28

IntelliJ IDEA是一种商业化销售的Java集成开发环境(Integrated Development Environment,IDE)工具软件,由JetBrains软件公司(前称为IntelliJ)开发,提供Apache 2.0开放式授权的社区版本以及专有软件的商业版本,开发者可选择其所需来下载使用。

创建Spring Boot项目的方法

请参考:

  • 使用idea创建第一个springboot项目 及 如何启动springboot项目 及 如何指点端口和上下文

启动Spring Boot项目的方法

请参考:

  • 使用idea创建第一个springboot项目 及 如何启动springboot项目 及 如何指点端口和上下文

参考链接

  1. IntelliJ IDEA,by wikipedia.
  2. 使用idea创建第一个springboot项目 及 如何启动springboot项目 及 如何指点端口和上下文,by wudinaniya.

Maven的配置文件pom.xml学习

发表于 2024-06-25

项目对象模型 (POM) 是 Maven 中的基本工作单元。它是一个 XML 文件,包含有关项目的信息以及 Maven 用于构建项目的配置详细信息。它包含大多数项目的默认值。例如,构建目录为target;源目录为src/main/java;测试源目录为src/test/java;等等。执行任务或目标时,Maven 在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执行目标。

POM.xml最简示例

1
2
3
4
5
6
7
<project>
<modelVersion>4.0.0</modelVersion>

<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1</version>
</project>

POM.xml结构

项目基本信息

必填项标签:

  • groupId:项目的组名,通常为反转的域名,例如:com.example
  • artifactId: 项目的唯一标识,通常为项目名称
  • version:项目版本号
  • packaging:项目打包方式,通常是 jar、war 或 pom, 如果没有指定packaging,则默认是 jar

其他重要标签:

  • modules

modules 标签用于声明当前 Maven 项目包含的模块子项目,每个子项目都是一个独立的 Maven 项目,具有自己的 pom.xml 文件,可以进行独立构建和测试。在父项目的 pom.xml 文件中,使用 标签来列出所有子项目的名称。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<project>
<modelVersion>4.0.0</modelVersion>

<groupId>com.ruoyi</groupId>
<artifactId>ruoyi</artifactId>
<version>3.8.7</version>

<modules>
<module>ruoyi-admin</module>
<module>ruoyi-framework</module>
<module>ruoyi-system</module>
<module>ruoyi-quartz</module>
<module>ruoyi-generator</module>
<module>ruoyi-common</module>
</modules>
</project>
  • parent

parent 标签用于声明当前 Maven 项目的父项目,它可以将若干个 Maven 项目组织成一个整体,指定版本号,插件版本号等,便于管理和维护,在一个 Maven 项目中,使用标签来引用父项目。

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<project>
<parent>
<artifactId>ruoyi</artifactId>
<groupId>com.ruoyi</groupId>
<version>3.8.7</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>ruoyi-framework</artifactId>
</project>
  • properties

properties 严格来说,并不一定是项目本身的信息,而是人为设置的属性或者说宏,这个标签用来定义和管理项目中所需要的属性,其作用有以下几个:

(1) 统一管理项目中的常用属性,比如版本号、路径、插件版本等,方便统一修改和管理。

(2) 可以在配置过程中使用 ${…}占位符引用这些属性,使得配置更加灵活和便捷。

(3) 避免硬编码,提高代码的可维护性和可读性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<project>
<properties>
<ruoyi.version>3.8.7</ruoyi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<spring-framework.version>5.3.33</spring-framework.version>
<druid.version>1.2.20</druid.version>
<bitwalker.version>1.21</bitwalker.version>
<swagger.version>3.0.0</swagger.version>
<kaptcha.version>2.3.3</kaptcha.version>
<pagehelper.boot.version>1.4.7</pagehelper.boot.version>
<fastjson.version>2.0.43</fastjson.version>
<oshi.version>6.5.0</oshi.version>
<commons.io.version>2.13.0</commons.io.version>
<poi.version>4.1.2</poi.version>
<velocity.version>2.3</velocity.version>
<jwt.version>0.9.1</jwt.version>
</properties>
</project>

项目的依赖列表

dependency

与项目的依赖列表相关的标签最外层由 dependencies 来囊括,内部包含了各种具体的依赖 dependency,该标签用于指定一个依赖项,它包含以下几个子标签:

  • groupId:指定依赖项的groupId,项目的组名
  • artifactId:指定依赖项的artifactId,项目的唯一标识符
  • version:指定依赖项的版本号。
  • scope:指定依赖项在项目中的使用范围。

其中的 一般包含以下几种范围:常用的有compile、test、provided 和 runtime。

repository

我们还能在pom文件中支持指定Maven仓库,即使用 repositories 和 repository 标签,repository 用于指定一个Maven仓库。

项目的构建配置

项目的构建配置信息,包括编译器版本、插件列表、源代码目录等。

具体请参考:

  • 全面详解Maven的配置文件pom.xml(含常用plugin)

参考链接

  1. 全面详解Maven的配置文件pom.xml(含常用plugin),by Slow菜鸟.
  2. Introduction to the POM,by apache.
  3. Maven的三种项目打包方式——pom,jar,war的区别,by Mr.史.
  4. 基于Springboot的maven父子工程pom文件打包配置,by Sherlock先生.

不同桌面操作系统间文件传输方法

发表于 2024-06-23 | 更新于 2024-06-24

最近经常在不同操作系统之间传输数据,因此简单记录一下所使用的方法。

获取远程 Windows 系统中数据

从本地操作系统获取远程 Windows 系统中的数据,优先可使用 Windows 自带的 FTP 服务,这样不仅可以获取数据,也可以向远程 Windows 系统写入数据。具体方法请参考:

  • windows搭建一个FTP服务器超详细

如果本地和远程都是 Windows 系统,也可以使用自带的远程桌面应用读写数。开启远程桌面访问后,在命令行提示符中输入 mstsc ,远程登陆即可。

获取远程 Linux 系统中数据

本地 Linux 系统

如果本地也是 Linux 系统,可以使用 SCP 命令。具体方法为:

  • 复制文件
1
2
3
4
5
$scp local_file remote_username@remote_ip:remote_folder
$scp local_file remote_username@remote_ip:remote_file

$scp remote_username@remote_ip:remote_file local_folder
$scp remote_username@remote_ip:remote_file local_file

指定了用户名,命令执行后需要输入用户密码;如果不指定用户名,命令执行后需要输入用户名和密码;

  • 复制目录
1
2
3
4
$scp -r local_folder remote_username@remote_ip:remote_folder
$scp -r local_folder remote_ip:remote_folder

$scp -r remote_username@remote_ip:remote_folder local_folder

本地 Windows 系统

如果本地是 Windows 系统,可使用 FTP 服务,让远程 Linux 系统将数据直接写入到本地 Windows 系统的 FTP 服务目录。

参考链接

  1. windows搭建一个FTP服务器超详细, by 程序猿——小白菜.
  2. 18. scp 跨机远程拷贝,by Linux Tools Quick Tutorial.
  3. win10隐藏正在运行的程序怎么操作_win10怎么隐藏正在运行的软件,by Rsun04551.

虚拟DOM技术学习

发表于 2024-06-23

文档对象模型(DOM)通过将文档的结构(例如表示网页的 HTML)以对象的形式存储在内存中,将网页与脚本或编程语言连接起来。 虚拟 DOM 是声明式 Web 框架(如 React、Vue.js 和 Elm)中使用的文档对象模型 (DOM) 的轻量级 JavaScript 表示形式。

为什么需要虚拟 DOM

虚拟 DOM 本质上是在 DOM 基础上的更高级别的抽象,使用虚拟 DOM 将带来如下好处:

  • 虚拟 DOM 比 DOM 更新渲染的速度更快。这就是虚拟 DOM 的魅力,正常来说增加一层抽象,可以减少编程复杂度,但会影响运行效率,但是虚拟 DOM 却两者兼备。
  • 减少编程复杂度,更有利于前端组件式开发。

关键思想

  • 如何创建 DOM 的虚拟表示
  • 如何比较不同虚拟 DOM 节点之间的差异
  • 应用虚拟 DOM 节点差异到真实的 HTML 元素

具体原理

请参考:

  • A virtual DOM in 200 lines of JavaScript

参考链接

  1. A virtual DOM in 200 lines of JavaScript,by Marcelo Lazaroni.
  2. 文档对象模型(DOM),by mozilla.
  3. Virtual DOM,by wikipedia.

Linux桌面版安装过程笔记

发表于 2024-06-13 | 更新于 2024-06-14

最近需要在一台比较老的机器上安装银河麒麟4.0.2,遇到一些问题,记录一下。

光盘启动后,显示器黑屏

解决方案:光盘启动后,选择 install kylin 启动选项,按键盘 e 进入编辑状态,找到 quiet splash ,在后面添加 nomodeset ,然后按 crtl+x 启动。

具体原理:

  • nomodeset

这是一个新型的显示模式,即内核在启动阶段调用更先进的图形显示技术,以达到更好的显示效果。副作用就是兼容性低。

可以设置nomodeset 或者modeset=0关闭这项功能,至少保证进入字符界面。

更进阶一点的写法是:i915.modeset=0,其中i915是intel的显示驱动,该命令可以单独关闭该驱动的KMS。

  • quiet

quiet参数的作用:启动系统的过程中,如果没有quiet,那么内核就会输出很多内核消息,这些内核消息就包括的了系统启动过程中运行了哪些程序,如果系统运行正常,就没必要看到这些消息。

  • splash

splash是一个不可或缺的参数,系统很多核心程序,都需要这个参数,且这个参数与可视化界面有关,没有就可能导致屏幕一片空白。

网卡不识别,需要安装驱动

进入Linux系统桌面后,执行如下步骤:

  • 查未安装驱动的网口
    ifconfig 和 ifconfig -a对比,查看哪些网口没有加载,即为没有驱动的网口

  • 查网卡驱动型号
    ethtool -i 网口,输出的driver:XXX就是驱动名

  • 下载网卡
    去intel官网下载对应驱动的源码

  • 卸载旧驱动
    rmmod XXX

  • 编译
    进入源码的makefile同级目录,执行make install

  • 加载新驱动
    depmod -a
    modprobe XXX

  • 查看
    lsmod | grep XXX

  • 重启网络服务
    service networking restart

显示器分辨率不够,需要安装驱动

进入Linux系统桌面后,执行如下步骤:

  • 禁用原驱动nouveau
    vim /etc/modprobe.d/blacklist.conf
    追加blacklist nouveu

  • 备份启动项
    mv /boot/initram….img /boot/initram…img.bak

  • 重新生成启动项
    dracut -v /boot/initram…img,名称要和原来的一样

  • 重启,并ctrl alt f1(或者f2-f6)进去tty界面
    登录root用户,关闭lightdm
    service lightdm stop
    找到nvidia显卡驱动并执行,都选yes或者ok,重新生成initram,并添加带X服务
    安装好后启动lightdm
    service lightdm start
    按ctrl alt f7进入图形界面

参考链接

  1. 银河麒麟v4.0.2安装,by 阿瓦隆勒菲.
  2. linux中grub,nomodest,quiet等参数的含义,进入启动项之后黑屏的可能原因,by dair6.
  3. linux内核启动参数,by deepin.
  4. Linux系统安装网卡驱动,by luhuaxiang.
  5. 【亲测有效】Linux系统安装NVIDIA显卡驱动,by 自动驾驶simulation.
  6. AMD显卡驱动安装,by skyao.
  7. Linux中获得AMD显卡的状态信息,by 香风家的火柴盒.
  8. ubuntu环境配置AMD显卡驱动,by WocheDonner.

QT私有类的设计模式学习

发表于 2024-06-11

查看QT源码,会发现很多类会有一个同样名字、但是以Private结尾的孪生类,这是QT用于封装私有操作的一种设计模式。这种设计模式可以有如下优点:

  • 信息隐藏
  • 二进制兼容

示例

myclass.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// myclass.h  
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QtCore/QObject>
class MyClassPrivate;
class MyClass: public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = 0);
virtual ~MyClass();
void dummyFunc();
signal:
void dummySignal();
private:
MyClassPrivate * const d_ptr;
Q_DECLARE_PRIVATE(MyClass);
Q_DISABLE_COPY(MyClass);
};
#endif // MYCLASS_H

myclass.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// myclass.cpp  
#include "myclass.h"
class MyClassPrivate
{
public:
MyClassPrivate(MyClass *parent)
: q_ptr(parent)
{
}
void foobar()
{
Q_Q(MyClass);
emit q->dummySignal();
}
private:
MyClass * const q_ptr;
Q_DECLARE_PUBLIC(MyClass);
};
MyClass::MyClass(QObject *parent)
: QObject(parent)
, d_ptr(new MyClassPrivate(this))
{
}
MyClass::~MyClass()
{
Q_D(MyClass);
delete d;
}
void MyClass::dummyFunc()
{
Q_D(MyClass);
d->foobar();
}

参考链接

  1. C++学习—qt的公有类、私有类、Q_Q、Q_D、二进制兼容,by 手磨咖啡.
  2. Qt使用技巧–定义Private类,by 大王怕我去巡山.

Python提取数据库内容并根据文档模板生成文档的方法

发表于 2024-06-08

最近需要从Oracle数据库中提取一些数据,并使用文档模板生成文档,鉴于Python环境部署的方便性,编程的简便性,于是采用Python开发该程序。方法记录如下:

环境配置

依赖环境

核心是 docxtpl 和 oracledb 两个库。

  • python 3.8.5,可在windows7上运行,python 3.9以后版本不支持windows7
  • Babel==2.15.0
  • cffi==1.16.0
  • cryptography==42.0.8
  • docxcompose==1.4.0
  • docxtpl==0.17.0
  • jinja2==3.1.4
  • lxml==5.2.2
  • MarkupSafe==2.1.5
  • numpy==1.24.4
  • oracledb==2.2.1
  • pandas==2.0.3
  • pycparser==2.22
  • python-dateutil==2.9.0.post0
  • python-docx==1.1.2
  • pytz==2024.1
  • six==1.16.0
  • typing-extensions==4.12.2
  • tzdata==2024.1

虚拟环境

1
2
3
4
5
6
7
mkdir wordtpl_generate
cd wordtpl_generate
python -m venv env
env\Scripts\activate.bat
pip install pandas
pip freeze > requirement.txt
pip download -d packages -r requirement.txt

离线迁移

创建envConfig.bat批处理文件,一键执行离线环境配置。

1
2
3
python -m venv env
call env\Scripts\activate.bat
pip install --no-index --find-links=packages -r requirements.txt

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import getpass
import oracledb
from docxtpl import DocxTemplate

def oracledb_test():
un = 'scott'
cs = 'localhost/orclpdb'
pw = getpass.getpass(f'Enter password for {un}@{cs}: ')

with oracledb.connect(user=un, password=pw, dsn=cs) as connection:
with connection.cursor() as cursor:
sql = """select sysdate from dual"""
for r in cursor.execute(sql):
print(r)

def wordtpl_test():
doc = DocxTemplate("my_word_template.docx")
context = { 'company_name' : "World company" }
doc.render(context)
doc.save("generated_doc.docx")

if __name__ == '__main__':
oracledb_test()
wordtpl_test()

参考链接

  1. Python自动化:根据模板批量生成含指定数据的word文档,by aliyun.

Python提取csv文件中的特定列的方法

发表于 2024-05-24

最近需要抽取csv文件中的特定列,使用excel老是将hh.mm.ss.SSS格式数据搞坏,于是想通过python直接提取。方法记录如下:

环境配置

Pandas介绍

Pandas是用于数据操纵和分析的Python软件库。它建造在NumPy基础上,并为操纵数值表格和时间序列,提供了数据结构和运算操作。

依赖环境

  • python 3.8.5,可在windows7上运行,python 3.9以后版本不支持windows7
  • numpy==1.24.4
  • pandas==2.0.3
  • python-dateutil==2.9.0.post0
  • pytz==2024.1
  • six==1.16.0
  • tzdata==2024.1

虚拟环境

1
2
3
4
5
6
7
mkdir csv_extract
cd csv_extract
python -m venv env
env\Scripts\activate.bat
pip install pandas
pip freeze > requirement.txt
pip download -d packages -r requirement.txt

离线迁移

创建envConfig.bat批处理文件,一键执行离线环境配置。

1
2
3
python -m venv env
call env\Scripts\activate.bat
pip install --no-index --find-links=packages -r requirements.txt

具体实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import pandas as pd
import os

def walk_files(src_filepath = "."):
filepath_list = []

for root, dirs, files in os.walk(src_filepath):
for file in files:
if root == '.':
root_path = os.getcwd() + "/"
else:
root_path = root

if (root_path != src_filepath) and (root != '.'):
filepath = root_path + "/" + file
else:
filepath = root_path + file

if filepath not in filepath_list:
filepath_list.append(filepath)

return filepath_list

def extract_csv(filepath,usecols=[0,3,11,42,43],encoding='gbk'):
df = pd.read_csv(filepath,usecols=usecols,encoding=encoding)
df.to_csv(filepath+'.csv',index=0)

if __name__ == '__main__':
print(os.getcwd())

search_dir='./testData/'
file_info_list = walk_files(search_dir)

for file in file_info_list:
print(file)
extract_csv(file)

参考链接

  1. pandas,by pandas.
  2. How to Recursively Traverse Files and Directories in Python,by Sabahat Khan.
  3. Pandas读取CSV的时候报错文件不存在的经验小记,by 翻滚的小@强.
  4. Python os.walk() 方法,by runoob.

Wireshark回环地址抓包问题

发表于 2024-05-22

通过套接字发送本地的数据包不会通过真实的网络接口发送,而是通过回环地址。因此,如果需要分析发往本机的网络数据包,需要Wireshark在回环地址上抓包。

关键的Npcap程序

windows系统没有提供本地回环网络的接口,用wireshark监控网络的话只能看到经过网卡的流量,看不到访问localhost的流量,因为wireshark在windows系统上默认使用的是WinPcap来抓包的,现在可以用Npcap来替换掉WinPcap,Npcap是基于WinPcap 4.1.3开发的,api兼容WinPcap。

Npcap 是 Nmap 项目的 Microsoft Windows 数据包捕获(和发送)库。它使用自定义 Windows 内核驱动程序以及我们的 Windows 版本的优秀 libpcap 库来实现开放Pcap API。这允许 Windows 软件使用简单、可移植的 API 捕获原始网络流量(包括无线网络、有线以太网、本地主机流量和许多 VPN)。 Npcap 现在提供:

  • 环回数据包捕获和注入
  • 支持所有当前 Windows 版本
  • Libpcap API
  • 支持所有 Windows 架构(x86、x86-64 和 ARM)
  • 额外的安全性
  • WinPcap 兼容性
  • 原始(监控模式)802.11 无线捕获

Wireshark安装注意事项

安装Wireshark 3.4.4时,其安装包内置了Npcap的安装程序,但是安装时需要注意需勾选兼容WinPcap选项,否则Wireshark将找不到Adapter for loopback traffic capture网口。

参考链接

  1. Wireshark本地回环网络抓包,by 三希.
  2. Wireshark之本地回环抓包,by Word哥.
  3. Npcap: Packet capture library for Windows,by npcap.

Linux网口混杂模式设置方法

发表于 2024-05-18 | 更新于 2024-05-19

最近在Kylin 4.0.4社区版上安装了VirtualBox,使用VirtualBox安装了Win7操作系统,虚拟机通过设置网口桥接模式与宿主机进行通信。偶尔出现宿主机无法ping通虚拟机,虚拟机无法ping通宿主机的情况,查看虚拟机网口接收情况,发现虚拟机接收数据包为0,重启虚拟机也无法恢复,因此严重怀疑其原因是虚拟机使用的宿主机网口工作模式并不是混杂模式。下面介绍在Linux上查看网口工作模式和设置网口工作模式的方法。

查看网口工作模式

如果存在ifconfig命令,则可使用该命令查看网口的工作模式,命令如下:

1
2
3
4
5
6
7
8
[root@localhost jack]# ifconfig
eth0 Link encap:Ethernet HWaddr 08:00:27:70:1D:79
inet6 addr: fe80::a00:27ff:fe70:1d79/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:100124 errors:0 dropped:0 overruns:0 frame:0
TX packets:8795 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:12986638 (12.3 MiB) TX bytes:6452270 (6.1 MiB)

如果存在ip命令,则可使用该命令查看网口的工作模式,命令如下:

1
[root@localhost jack]# ip addr

设置网口工作模式

如果存在ifconfig命令,则可使用该命令设置网口的工作模式,命令如下:

1
2
ifconfig eth0 promisc  设置混杂模式
ifconfig eth0 -promisc 取消混杂模式

如果存在ip命令,则可使用该命令设置网口的工作模式,命令如下:

1
2
ip link set eth0 up
ip link set eth0 promisc on

参考链接

  1. Linux中如何将网卡设置为混杂模式,by splaybow.
  2. VirtualBox网络之桥接网卡,by 五星上炕.
  3. 设置网卡混杂模式,by duyiwuer2009.
  4. Linux下的ip命令,by wyaoo.
  5. 【网络】网口工作模式(混杂模式|监听模式|监视模式|管理模式),by bandaoyu.
上一页1…456…53下一页

Jack Huang

523 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse