单例模式

单例模式的优缺点

优点

  • 内存消耗小
  • 全局只有一个实例

缺点

  • 没有接口,扩展困难
  • 如果要扩展单例,只能修改代码

创建单例的方法

饿汉式模式

  • 直接创建-消耗内存-线程不安全
  • 静态创建-线程不安全

懒汉式模式

  • 判断为空再创建-线程不安全
  • 双重检验为空再创建 使用synchronize关键字-线程安全
  • 静态内部类创建-线程安全

注册式创建

  • 简单注册-spring
  • 枚举类创建

序列化

线程池

关于单例模式的问题

spring的单例会被回收吗?

  • 注册式单例,被保存在ioc的缓存容器中,给每个实例起个名字,叫beanName、id
  • ioc容器持有单例对象的引用
  • 当对象为null或引用不被任何地方所持有时会被回收
  • ioc容器本身也是个单例,ioc容器什么时候被回收,那么ioc中的beanName也就什么时候被回收
  • ioc容器实在spring启动时初始化,在spring销毁时被回收
  • spring中的单例Bean跟ioc容器同生死

spring的单例是线程安全的吗?

  • 它由在beanFactory中由反射机制创建,被缓存到ioc容器中,相当于new Object()
  • 所以他是线程安全的

插入图片

1
2
3
{% asset_img clipboard.png 图片1 %}


linux命令

上传-下载文件

上传和下载文件使用rz和sz命令

使用以下命令安装rz和sz:

1
yum install -y lrzsz

上传

输入以下命令:

1
rz

打开选择文件窗口

选择文件即可上传

下载

输入以下命令:

1
sz 文件名

打开文件要下载的地址

选择路径下载即可

ssh传输文件

1
2
3
scp test.zip admin@192.168.1.1:/test

解析:scp 文件名 ssh地址:要复制的文件到远程机的路径

vi编辑器

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
打开文件:vi test.txt
Ctrl+u:向文件首翻半屏;
Ctrl+d:向文件尾翻半屏;
Ctrl+f:向文件尾翻一屏;
Ctrl+b:向文件首翻一屏;
Esc:从编辑模式切换到命令模式;
ZZ:命令模式下保存当前文件所做的修改后退出vi;
:行号:光标跳转到指定行的行首;
:$:光标跳转到最后一行的行首;
x或X:删除一个字符,x删除光标后的,而X删除光标前的;
D:删除从当前光标到光标所在行尾的全部字符;
dd:删除光标行正行内容;
ndd:删除当前行及其后n-1行;
nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字;
p:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的下方;
P:粘贴文本操作,用于将缓存区的内容粘贴到当前光标所在位置的上方;
/字符串:文本查找操作,用于从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示;
?字符串:文本查找操作,用于从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示;
a,bs/F/T:替换文本操作,用于在第a行到第b行之间,将F字符串换成T字符串。其中,“s/”表示进行替换操作;
a:在当前字符后添加文本;
A:在行末添加文本;
i:在当前字符前插入文本;
I:在行首插入文本;
o:在当前行后面插入一空行;
O:在当前行前面插入一空行;
:wq:在命令模式下,执行存盘退出操作;
:w:在命令模式下,执行存盘操作;
:w!:在命令模式下,执行强制存盘操作;
:q:在命令模式下,执行退出vi操作;
:q!:在命令模式下,执行强制退出vi操作;
:e文件名:在命令模式下,打开并编辑指定名称的文件;
:n:在命令模式下,如果同时打开多个文件,则继续编辑下一个文件;
:f:在命令模式下,用于显示当前的文件名、光标所在行的行号以及显示比例;
:set number:在命令模式下,用于在最左端显示行号;
:set nonumber:在命令模式下,用于在最左端不显示行号;

git提交步骤

  • git init //初始化仓库
    
  • git add .(文件name) //添加文件到本地仓库
  • git commit -m “first commit” //添加文件描述信息
  • git remote add origin + 远程仓库地址 //链接远程仓库,创建主分支
  • git pull origin master // 把本地仓库的变化连接到远程仓库主分支
  • git push -u origin master //把本地仓库的文件推送到远程仓库

强制提交

如果确定代码无误,可以强制提交
  • git push -f

错误处理

1
fatal: refusing to merge unrelated histories

在merge、pull或push中出现以上错误,可以使用以下命令:

1
2
3
4
5
6
7
8
9
10
merge时:
git merge master --allow-unrelated-histories

pull时:
git pull origin master --allow-unrelated-histories

push时:
git push -u origin master --allow-unrelated-histories


html5 audio配合span data-src-mp3使用

编写html代码

1
2
3
4
5
6
7
<audio id="player" style="display: none"></audio>

<span class = '1' data-src-mp3="" data-src-ogg=""></span>

<span class = '2' data-src-mp3="" data-src-ogg=""></span>


初始化span标签

1
2
3
4
5
6
$("span.1")
.attr("data-src-mp3","song1.mp3")
.attr("data-src-ogg","song1.ogg");
$("span.2")
.attr("data-src-mp3","song2.mp3")
.attr("data-src-ogg","song2.ogg");

控制播放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$("span[data-src-mp3]").click(function () {
var player = document.getElementById("player"),
$this = $(this);

if ($this.hasClass("selected")) {
if (player.paused) {
player.play();
} else {
player.pause();
}
}
else {
$("span[data-src-mp3].selected").removeClass("selected");
$this.addClass("selected");
$(player)
.empty()
.append($("<source>").attr("src", $this.attr("data-src-mp3")))
.append($("<source>").attr("src", $this.attr("data-src-ogg")))
// 必须使用load重新加载audio,否则播放audio时,播放出来的还是最初始的资源
player.load();
player.play();
}
});

什么是spring boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 — 来自百度百科

springboot 的特点

  1. 创建独立的Spring应用程序
  2. 嵌入的Tomcat,无需部署WAR文件
  3. 简化Maven配置
  4. 自动配置Spring
  5. 提供生产就绪型功能,如指标,健康检查和外部配置
  6. 绝对没有代码生成并且对XML也没有配置要求

使用spring boot有什么好处

简单、快速、方便!平时如果我们需要搭建一个spring web项目的时候需要怎么做呢?

1)配置web.xml,加载spring和spring mvc

2)配置数据库连接、配置spring事务

3)配置加载配置文件的读取,开启注解

4)配置日志文件

配置完成之后部署tomcat 调试

快速入门

maven构建项目

使用工具:
IntelliJ IDEA 2018.3.4、jdk1.8.0_201

在idea界面点击 Create New project,然后点击Next

选择Spring Initializar点击Next

设置初始java包结构点击Next

在此步骤选择springboot集成的其他框架,如mysql
然后点击Next

输入项目名称,点击***finish***即可完成创建springboot项目

项目结构如下:

  • src/main/java/: 程序开发及主程序入口
  • src/main/resources/: 配置文件
  • src/test: 测试程序

引入web模块

1、在pom文件中添加web模块依赖
1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

pom.xml文件中默认有两个模块:

spring-boot-starter:核心模块,包括自动配置支持、日志和YAML;

spring-boot-starter-test:测试模块,包括JUnit、Hamcrest、Mockito。

2、编写 HelloWorldController
1
2
3
4
5
6
7
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
private String hello(){
return "hello world";
}
}

@RestController的意思就是controller里面的方法都以json格式输出.

3、启动主程序
在浏览器打开http://127.0.0.1:8080/hello,即可看到结果

开发环境的调试

springBoot对调试支持很好,修改之后可以实时生效,需要添加以下的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>

该模块在完整的打包环境下运行的时候会被禁用。如果你使用java -jar启动应用或者用一个特定的classloader启动,它会认为这是一个“生产环境”。

excel中把一列数据中第一个空格前后的内容分为两列

设原内容在A列,则

1
2
B1=LEFT(A1,FIND("",A1))
C1=MID(A1,FIND("",A1)+1,LEN(A1))

在一组数据中筛选包含另一组数据的某个数据的单元

使用MATCH(A2,$B$2:$B$13,0)

公式里第三个参数的含义:

返回结果为位置,如果只需要知道是否存在则可用:

 IF(MATCH(A2,$B$2:$B$13,0)>0,TRUE)

mysql删除语句使用

1
2
delete t from table_name t where t.id = 1

mysql 清空表数据

1
truncate table table_name;
0%