0%

安装Docker

1
2
3
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce

启动Docker

1
sudo systemctl start docker

设置开机启动

1
sudo systemctl enable docker

查看当前docker状态

1
sudo systemctl status docker

验证Docker

1
sudo docker run hello-world

卸载Docker

1
sudo yum remove docker-ce

配置阿里云镜像加速器

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

  1. java如何实现线程安全?
    同步代码块
    同步方法

  2. CAS是什么,如何解决ABA问题?
    使用AtomicStampedReference类,AtomicMarkableReference类

  3. AtomicInteger的原理?
    AtomicInteger内部声明了一个volatile修饰的变量value用来保存实际值
    函数中调用了Unsafe函数的getAndAddInt方法

  4. 可重入锁是什么,非可重入锁又是什么?
    可重入锁:在同一个线程中,可以重复获取同一个锁,不会造成死锁
    非可重入锁:在同一个线程中,获取锁的次数大于1,会造成死锁

  5. 生产者消费者问题,一个长度100的buffer,10个生产线程,10个消费线程?
    使用BlockingQueue实现生产者消费者问题,BlockingQueue有四种实现方式,分别是ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,PriorityBlockingQueue
    ArrayBlockingQueue:基于数组实现的有界阻塞队列,容量大小是固定的,生产者线程和消费者线程都需要等待
    SynchronousQueue:不存储元素的阻塞队列,每个插入操作必须等待一个相应的删除操作,反之亦然,容量大小是无限的
    LinkedBlockingQueue:基于链表实现的有界阻塞队列,容量大小是可配置的,生产者线程和消费者线程都需要等待
    PriorityBlockingQueue:基于优先级堆实现的无界阻塞队列,容量大小是无限的

  6. Spring,AOP是什么,IOC是什么?
    Spring是一个轻量级的Java开发框架,它提供了IOC和AOP功能,IOC是控制反转,AOP是面向切面编程,通过配置的方式,可以将一些通用的功能模块化,从而实现代码的重用,提高代码的可维护性
    IOC是Spring的核心概念,它通过依赖注入(DI)来实现对象的创建和依赖关系的管理,通过配置的方式,将对象之间的依赖关系进行解耦,从而实现松耦合的设计
    AOP是面向切面编程的一种技术,通过配置的方式,可以将一些通用的功能模块化,从而实现代码的重用,提高代码的可维护性
    Spring的核心思想是“约定优于配置”,通过配置的方式,可以实现对象的创建,依赖关系的管理,以及一些通用的功能的模块化,从而实现松耦合的设计

  7. 什么是Spring Boot,它有什么优点?
    Spring Boot是一个快速开发的脚手架,它简化了Spring应用的初始搭建以及开发过程,提供了各种开箱即用的功能模块,使得开发人员可以更专注于业务逻辑的开发,提高开发效率
    Spring Boot的优点:
    快速启动:Spring Boot通过内嵌的Tomcat或Jetty等服务器,可以快速启动应用,无需部署war包
    内置Tomcat/Jetty:Spring Boot内置了Tomcat和Jetty服务器,无需安装额外的服务器软件
    无需XML配置:Spring Boot使用Java配置,不需要编写复杂的XML文件
    自动配置:Spring Boot会根据应用所需的依赖来自动配置Spring,从而简化了Spring的配置
    无代码生成:Spring Boot使用注解来代替XML配置,可以使得配置更加简单,无需编写大量的代码
    内置监控:Spring Boot提供了Actuator模块,可以对应用进行实时的监控,如查看应用的健康状态,查看应用的统计数据,查看应用的日志等

  1. TCP三次握手的过程,重发报文的过程
  2. TCP和UDP的区别
  3. MySQL的事务特性,事务隔离级别,分别解决什么问题
  4. 间隙锁是什么,具体什么时候会加锁
  5. java里的锁,有哪几种?
  6. ReentrantLock有哪些特性?可重入是如何实现的?

1.安装WSL

WSL指的是windows System for Linux

1. 检查是否打开虚拟化设置(一般默认是开启的,但以防万一,还是检查一下)

  1. 打开任务管理器(Ctrl+Shift+Esc)>>性能
    image
    2.如果没有打开,打开BIOS系统设置,自行配置(不同电脑进入按键不同)

2.配置文件

  1. 打开windows的启动或或关闭windows功能
    image
  2. 打开!适用于linux的windows子系统,系统会自动配置完成,可能会重启
    image

3.下载WSL

  1. 打开windows的PowerShell
    image
  2. 运行wsl --list --online,选择要安装的版本
    image
  3. 以Ubuntu-20.04为例,输入以下代码,等待下载完成
1
wsl --install -d Ubuntu-20.04
  1. 下载完成后,可能会报错
    image
    下载最新的wsl安装包,并运行安装,下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
  2. 重新打开后,会让你输入用户名,以及密码,完成后即为安装成功
    6. 之后的操作迁移wsl从C盘到其他盘,可以选择不进行操作
  3. 检查当前wsl是否在运行
    image
  4. 如果显示的是running,则输入命令wsl --shutdown
    wsl –export Ubuntu G:\Virtual_Machines\Ubuntu.tar
    wsl –unregister Ubuntu
    wsl –import Ubuntu F:\Virtual_Machines G:\Virtual_Machines\Ubuntu.tar –version 2
  5. 迁移
1
2
3
wsl --export Ubuntu-20.04 D:\Ubuntu.tar
wsl --unregister Ubuntu-20.04
wsl --import Ubuntu-20.04 D:\Ubuntu_2004 D:\Ubuntu.tar --version 2
  1. 进行用户配置<username>是你前面注册的用户名
1
ubuntu.exe config --default-user <username>

4. 下载Docker Desktop

  1. 从官网下载Docker Desktop;https://www.docker.com/get-started/
    image
  2. 建立存储路径软连接(Docker默认安装在C盘,如果想更得化,建立软链接)
1
2
mkdir "D:\Program Files\Docker"
mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"
  1. 安装Docker Desktop,默认就行
  2. 打开Docker Desktop,软件可能检测不到,然后自动退出,此时需要在打开时,快速点击右上角的设置按钮,并进行以下配置,并点击apply
    image
    image
  3. 重新打开Docker Desktop,发现界面已改变
    image
  4. PowerShell查看版本号docker --version和测试docker run hello-world
    image

至此在windows11中安装配置Docker成功

1. 环境准备

1.1 安装Git

Git 官网上下载安装。

安装好后,使用命令查看一下git版本,检查是否安装成功。

1
git -v

windows安装完git后,可以使用git bash敲命令。

1.2 安装node.js

直接到官网上下载。

同样,安装完成后,使用命令查看版本,检查是否安装成功。

1
2
node -v
npm -v

2. hexo安装与使用

2.1 安装hexo

创建一个文件夹blog,进入该文件夹,右键git bash here打开git bash,输入命令安装hexo:

1
npm install -g hexo-cli

2.2 初始化hexo

使用以下命令初始化hexo,其中myblog是自己随意取得名字

1
hexo init myblog

2.3 安装npm

进入myblog文件夹,安装npm:

1
2
cd myblog
npm install

新建完成后,指定文件夹目录下有:

  • node_modules: 依赖包
  • public:存放生成的页面
  • scaffolds:生成文章的一些模板
  • source:用来存放你的文章
  • themes:主题
  • _config.yml: 博客的配置文件

2.4 启动本地服务站点:

使用如下命令启动本地服务站点,每次提交新的部署之前也可以先启动本地服务站点检查。

1
2
hexo g //生成静态网页
hexo s //打开本地服务站点

在浏览器输入localhost:4000就可以看到生成的博客了,里面默认会有hello world这篇文章。

使用ctrl+c可以关掉本地服务。

hexo是一款静态框架,即我们在本地编写完文章后使用hexo g生成静态网页,然后将之部署到服务器上。

下面部署到github page上,以便大家可以访问。

3. Github建站访问

3.1 Github新建仓库

如果没有Github账号,注册一个,登录。

创建一个和你用户名相同的仓库,后面加.github.io。

在这里插入图片描述

注意:格式必须是xxx.github.io,其中xxx是你注册Github的用户名,只有这样部署到GitHub page的时候,才会被识别。

3.2 生成SSH添加到GitHub

回到git bash,输入以下命令:

1
2
git config --global user.name yourname
git config --global user.email youremail

这里的yourname输入你的GitHub用户名,youremail输入你GitHub的邮箱。这样GitHub才能知道你是不是对应它的账户。

可以用以下两条命令,检查一下你有没有输对:

1
2
git config user.name
git config user.email

然后创建SSH,一路回车

1
ssh-keygen -t rsa -C "youremail"

这个时候它会告诉你已经生成了.ssh的文件夹。在你的电脑中找到这个文件夹。

在这里插入图片描述

而后在GitHub的setting中,找到SSH keys的设置选项,点击New SSH key把你的id_rsa.pub里面的信息复制进去。

在这里插入图片描述

在这里插入图片描述

Title随便写个名字,把id_rsa.pub里面的信息复制到key那里,点击Add SSH key

在git bash中,使用以下命令查看是否成功:

1
ssh -T git@github.com

在这里插入图片描述

3.3 将hexo部署到GitHub

这一步,我们就可以将hexo和GitHub关联起来,也就是将hexo生成的文章部署到GitHub上,打开站点配置文件_config.yml,翻到最后,修改为如下所示,其中YourgithubName就是你的GitHub账户。

1
2
3
4
deploy:
type: git
repo: https://github.com/YourgithubName/YourgithubName.github.io.git
branch: master

这个时候需要先安装deploy-git ,也就是部署的命令,这样你才能用命令部署到GitHub。

1
npm install hexo-deployer-git --save

然后

1
2
3
hexo clean
hexo generate
hexo deploy

其中 hexo clean清除了你之前生成的东西,也可以不加。hexo generate 顾名思义,生成静态文章,可以用 hexo g缩写。hexo deploy 部署文章,可以用hexo d缩写。

注意deploy时可能要你输入username和password。

得到下图就说明部署成功了,过一会儿就可以在http://yourname.github.io 这个网站看到你的博客了!!

在这里插入图片描述

3.4 发布文章

正式开始写文章了:

1
hexo new newpapername

然后在source/_post中打开对应的markdown文件,就可以开始编辑了。当你写完的时候,再

1
2
3
hexo clean
hexo g
hexo d

这样就可以在自己的博客网站上看到刚发布的文章了。

4. 多终端工作

4.1 原因

由于hexo d上传部署到github的其实是hexo编译后的文件,是用来生成网页的,不包含源文件,上传的就是本地目录里面自动生成的.deploy_git里面的文件。

而我们的源文件、主题文件、配置文件都没有上传,这也就意味着我们只能在一台电脑上操作,换了电脑就没法改变我们的网站了。

我们可以利用git的分支系统将源文件上传到仓库的另一个分支。

4.2 上传分支

首先在Github上新建一个分支hexo。

然后在这个仓库的settings中,选择默认分支为hexo分支(这样每次同步的时候就不用指定分支,比较方便)。

然后在本地的任意目录下,打开git bash,输入以下命令:

1
git clone git@github.com:TyroGzl/TyroGzl.github.io.git

将hexo分支克隆到本地。

接下来在克隆到本地的TyroGzl.github.io中,把除了.git 文件夹外的所有文件都删掉

把之前我们写的博客源文件全部复制过来,除了.deploy_git。

复制过来的源文件应该有一个.gitignore,用来忽略一些不需要的文件,如果没有的话,自己新建一个,在里面写上如下内容,表示这些类型文件不需要git:

1
2
3
4
5
6
7
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/

而后

1
2
3
git add .
git commit –m "add branch"
git push

这样就上传完了,可以去Github上看一看hexo分支有没有上传上去,其中node_modulespublicdb.json已经被忽略掉了,没有关系,不需要上传的,因为在别的电脑上需要重新输入命令安装 。

在这里插入图片描述

4.3 更换电脑操作

4.3.1 安装git

4.3.2 设置git全局邮箱和用户名

4.3.3 设置ssh key

1
2
3
4
ssh-keygen -t rsa -C youremail
#生成后填到github
#验证是否成功
ssh -T git@github.com

4.3.4 安装node.js

4.3.5 安装hexo

1
npm install hexo-cli -g

4.3.6 克隆项目

1
git clone git@………………

4.3.7 安装npm

进入到克隆的文件夹:

1
2
3
cd xxx.github.io
npm install
npm install hexo-deployer-git --save

生成,部署:

1
2
hexo g
hexo d

以上内容摘自:hexo史上最全搭建教程_zjufangzh的博客-CSDN博客_hexo

5. 使用Vercel代理Github Page

由于Github拒绝百度爬虫的访问,导致基于Github Page的个人博客无法被百度收录,这里介绍一个免费的方法,利用zeit(现在改名为vercel)代理。

5.1 Github账户登录vercel

打开vercel网站。选择 Continue with Github,利用自己的Github账号登录。
在这里插入图片描述

5.2 新建vercel项目

点击New Project,新建项目。
在这里插入图片描述

导入Github仓库。

在这里插入图片描述
为项目起个名字,点击Deploy
在这里插入图片描述
新建项目成功。

5.3 切换分支

vercel默认分支名是main,即上传到Github仓库main分支中才会触发更新,打开项目中的Settings,选择Git,将分支名改为自己部署静态网页资源的分支名。
在这里插入图片描述

5.4 配置个人域名

同样在项目里的Settings里面,打开Domains,新增自己的个人域名,然后在自己的域名服务商那里添加一条DNS解析。完成配置,这样百度爬虫就可以爬取我们的网站了。

在这里插入图片描述

浏览器不能加载crx插件处理方式

下载的crx文件 不能直接拖入扩展程序安装,其实浏览器只是默认隐藏了拖入安装 .crx 扩展功能,

打开 chrome://flags/#extensions-on-chrome-urls

将 Disabled 改为 Enabled,重启浏览器就行了。

windows截图

windows下截图有两种方式:

  1. 按下 Win+Shift+S 截取当前屏幕,按下 Win+Alt+S 截取全屏。
  2. 按下 Win+Shift+S 后,按住 Shift 再按下 Win+S 截取当前窗口。

wsl –list –running 没有正在运行的分发。

报错解释:

这个报错信息表示你正在尝试列出正在运行的Windows子系统Linux(WSL)分发版,但是没有发现任何正在运行的分发版。

解决方法:

  1. 确认你是否安装了WSL分发版。可以使用 wsl --list --verbose 来列出所有安装的分发版。
  2. 如果已安装分发版,确保它们已正确启动。你可以尝试启动一个分发版,例如,如果你安装了Ubuntu,可以尝试运行 wsl --terminate Ubuntu 停止它,然后运行 wslwsl -d Ubuntu 来启动它。
  3. 如果你刚刚安装了一个新的分发版,可能需要重启你的电脑来完成安装。
  4. 确认你的Windows版本支持WSL。需要Windows 10 更新版本1607或更高版本,以及特定的处理器架构。

以下是一些常用的方法和技巧:

优化SQL查询语句:

  1. 确保查询语句使用合适的索引,可以通过创建适当的索引来优化查询性能。
  2. 避免使用SELECT *,而是只选择需要的列,减少数据传输量。
  3. 使用JOIN查询时,确保相关字段有适当的索引。
  4. 避免在WHERE子句中使用函数,这会导致无法使用索引。

优化数据库结构:

  1. 选择合适的数据类型,尽量避免使用过大或过小的数据类型,以节省存储空间和提高查询效率。
  2. 正规化数据库,避免冗余数据。合理设计表结构,减少不必要的关联查询。
  3. 使用合适的主键和唯一索引,以提高查询和更新的性能。

配置MySQL服务器:

  1. 调整缓冲区大小,如innodb_buffer_pool_size和key_buffer_size,以提高读写性能。
  2. 调整并发连接数,根据实际情况合理设置max_connections参数。
  3. 合理分配系统资源,确保MySQL服务器有足够的内存和CPU资源。

缓存优化:

  1. 使用MySQL的查询缓存功能,对于经常重复的查询可以从缓存中获取结果,减少数据库的查询压力。
  2. 合理利用应用程序层面的缓存,如使用Memcached或Redis来缓存查询结果或热门数据,减少对数据库的访问。

优化磁盘性能:

  1. {将MySQL的数据文件和日志文件分别放置在不同的物理磁盘上,以提高读写性能。
  2. 使用RAID技术,如RAID 10,以提高磁盘的读写速度和容错能力。}

监控和调优:

  1. 定期监控MySQL服务器的性能指标,如CPU、内存、磁盘和网络的使用情况。
  2. 使用MySQL自带的性能监控工具,如Explain和Slow Query Log,来分析慢查询并进行优化。
  3. 使用第三方监控工具,如Percona Toolkit和pt-query-digest,进行更深入的性能分析和调优。

使用 AspectJ 在 Android 项目中实现面向切面编程(AOP)可以帮助您在代码中更好地处理横切关注点,如日志记录、权限控制、性能监测等。下面是在 Android 项目中使用 AspectJ 的详细流程:

1. 添加依赖和插件:

在您的 Android 项目中,首先需要添加 AspectJ 相关的依赖和插件。

  • 在项目级别的 build.gradle 文件中,添加 AspectJ 的 Gradle 插件依赖:
1
2
3
dependencies {
classpath 'org.aspectj:aspectjtools:1.9.8'
}

注意:dependencies 所在的buildscript节点一定要在plugins的前面

  • 在应用模块的 build.gradle 文件中添加以下内容:

dependencies中添加

1
2
3
dependencies {
api 'org.aspectj:aspectjrt:1.9.8'
}

build.gradle文件下面添加aspectj的编译配置:

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
37
38
39
import org.aspectj.bridge.IMessage
import org.aspectj.bridge.MessageHandler
import org.aspectj.tools.ajc.Main
final def log = project.logger
final def variants = project.android.applicationVariants

variants.all { variant ->
JavaCompile javaCompile = variant.javaCompileProvider.get()
javaCompile.doLast {
String[] args = ["-showWeaveInfo",
"-17",
"-inpath", javaCompile.destinationDir.toString(),
"-aspectpath", javaCompile.classpath.asPath,
"-d", javaCompile.destinationDir.toString(),
"-classpath", javaCompile.classpath.asPath,
"-bootclasspath", project.android.bootClasspath.join(File.pathSeparator)]

MessageHandler handler = new MessageHandler(true)
new Main().run(args, handler)
for (IMessage message : handler.getMessages(null, true)) {
switch (message.getKind()) {
case IMessage.ABORT:
case IMessage.ERROR:
case IMessage.FAIL:
log.error message.message, message.thrown
break
case IMessage.WARNING:
log.warn message.message, message.thrown
break
case IMessage.INFO:
log.info message.message, message.thrown
break
case IMessage.DEBUG:
log.debug message.message, message.thrown
break
}
}
}
}

2. 编写 AspectJ 切面:

创建一个 Java 类作为您的 AspectJ 切面,用于定义横切逻辑。切面类中定义了一系列切点和通知,以及需要在哪些地方织入这些通知。

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

import android.util.Log;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class LoggingAspect {
private static final String TAG = "LoggingAspect";
ThreadLocal<Long> time = new ThreadLocal<>();
@Before("execution(* com.snrt.helloworld.music.*.getMusics(..))")
public void before() {
// 在方法调用前执行的逻辑,比如打印日志
long startTime = System.currentTimeMillis();
Log.e(TAG, "方法开始时间: "+ startTime);
time.set(startTime);
}
@After("execution(* com.snrt.helloworld.music.*.getMusics(..))")
public void after() {
// 在方法调用前执行的逻辑,比如打印日志
long endTime = System.currentTimeMillis();
Log.e(TAG, "方法结束时间: "+ endTime);
Log.e(TAG, "after: "+ (endTime - time.get()) +"ms");
}
}

3. 构建和运行:

完成上述步骤后,重新构建您的 Android 项目。AspectJ 将会在编译期间织入您的切面逻辑。
运行结束如下:

1
2
3
4
5
2023-08-04 20:40:47.160 22060-22060 LoggingAspect           com.snrt.helloworld                  E  after: 12ms
2023-08-04 20:44:47.954 24627-24627 LoggingAspect com.snrt.helloworld E 方法开始时间: 1691153087954
2023-08-04 20:44:47.968 24627-24627 LoggingAspect com.snrt.helloworld E 方法结束时间: 1691153087968
2023-08-04 20:44:47.968 24627-24627 LoggingAspect com.snrt.helloworld E after: 14ms

以上就是在 Android 项目中使用 AspectJ 的基本流程。使用 AspectJ 可以更好地将横切关注点从业务逻辑中分离出来,从而提高代码的模块化和可维护性。

1. Install a New Theme:

First, find a theme you like from the Hexo theme collection or from other sources on the internet. Once you’ve chosen a theme, install it by using npm (Node Package Manager). Open your command-line interface and navigate to your Hexo project folder, then run the following command:

1
npm install <theme-name>

Replace with the name of the theme you want to install. For example, if you want to install a theme called “my-awesome-theme,” the command will be:

1
npm install my-awesome-theme

2. Configure the Theme:

After installing the theme, you need to update your _config.yml file to set the new theme as the default theme. Open the _config.yml file located in your Hexo project root directory and locate the line that defines the theme setting. Change the value to the name of the new theme you installed. For example:

1
theme: my-awesome-theme

3. Customize the Theme (Optional):

Many themes offer customization options, such as changing colors, layout, fonts, and other settings. Check the documentation of the theme you installed to understand how you can customize it. Some themes may provide additional configuration options in the _config.yml file.

4. Generate and View Your Site:

After installing the theme and making any desired customizations, generate your Hexo site by running the following command:

1
hexo generate

Finally, view your updated site by running the server with the following command:

1
hexo server

Now you can open your web browser and go to http://localhost:4000 to see your Hexo site with the newly installed theme.

Remember, when switching themes, it’s essential to check if there are any specific instructions or steps provided by the theme’s documentation, as themes may have varying requirements or customizations.

将本地仓库关联并推送到远程库,你需要执行以下步骤:

1. 创建远程仓库

首先,在远程代码托管服务(如 GitHub、GitLab 或 Gitee)上创建一个新的空仓库。在创建过程中,你可能会得到一个远程仓库的 URL。

2. 关联本地仓库

打开命令行终端(或 Git Bash),进入本地仓库所在的文件夹。然后,使用以下命令将本地仓库与远程仓库进行关联:

1
git remote add origin <远程仓库的 URL>

将 <远程仓库的 URL> 替换为你在第一步中获取到的远程仓库的 URL。

3. 推送到远程仓库

现在,你可以使用以下命令将本地分支推送到远程仓库:

1
git push -u origin <本地分支名>

如果是第一次推送该分支,使用 -u 参数可以将本地分支与远程分支进行关联,以后可以直接使用 git pushgit pull 不带参数进行推送和拉取。

完成上述步骤后,你的本地仓库就会与远程