- 博客(55)
- 收藏
- 关注
原创 2021-03-03
mysql优化0.sql编写顺序和mysql解析器的顺序1.尽量用确定的列名,而不用*;2.尽量少使用嵌套子查询;3.尽量少使用耗费资源的操作,如:DISTINCT,UNION,ORDER BY,MINUS(非交集),INTERSETCT(交集);4.对于有比较多or运算的查询,建议分成多个查询,用union all联结起来;5.合理使用索引;注:index的效率和all差不多5.1索引的左前缀匹配;5.2不在索引列上做任何操作(计算、函数、类型转换);5.3范围条件后索引会失效;5
2021-03-03 18:47:31
158
1
原创 leecode刷题小技巧(持续更新)
1.定义并初始化mapMap<Character, Character> pairs = new HashMap<Character, Character>() {{put( ‘)’ , ‘(’ );put( ‘]’, ‘[’ );put( ‘}’, ‘{’ );}};
2021-02-23 19:42:43
411
原创 部署简单的应用到云服务器的过程
部署简单的应用到云服务器的过程1.将要部署的程序打包,我要部署的是一个springboot的demo工程,将该工程以jar包的形式打包;2.在云服务器上安装tomcat和jdk,并进行相关的配置;2.1验证JDK是否安装:2.2启动tomcat服务3.设置云服务器防火墙开放8080端口,以及到云服务器配置页面开放8080端口腾讯云轻量应用服务器:4.启动服务5.查看日志注意:还需要云服务器上开放服务器的端口,我服务器占用8081。...
2020-11-20 19:49:00
1177
原创 springboot整合es实战
springboot整合es实战在做springboot和elasticsearch整合实战时,elasticsearch服务我用的docker容器,由于是第一次整合遇到许多bug。再次做记录。1.elasticsearch的服务的跨域问题解决链接2.elasticsearch-head创建索引响应406解决链接3.由于版本的原因在es6.x需要在往索引增加Document时添加type字段参考4.es-head的github地址,告诉我们怎么开启es-head的服务链接下面时相关实战:
2020-07-11 12:59:23
1890
2
原创 springboot+redis+阿里云短讯服务实战整合
springboot+redis+阿里云短讯服务实战整合这个笔记内容主要是使用阿里云的短信服务,整合到springboot的工程中。1.首先要拥有阿里云账号,并且得到用户的AccessKeyId和AccessKeySecret,这是发生短讯时必须的两个参数,并且还要给相应的用户赋予短信发生权限;2.设置自己的短讯模板和短讯签名;3.编写相关业务代码,工程目录如下:4.SendSmspackage com.liqian.sms.service;import java.util.Map;/
2020-07-09 19:43:18
214
原创 docker上运行rabbitmq服务和elasticsearch服务
docker上运行rabbitmq服务1.拉取rabbitmq镜像,这里拉取的是带管理界面的版本:docker pull rabbitmq:3-management2.运行服务,两个端口映射,第一个是服务端口;第二个是web管理界面的端口docker run -d -p 5672:5672 -p 15672:15672 --name myrabbitmq 镜像ID效果:...
2020-07-01 16:23:46
188
原创 在windows下通过sqlyog连接ubantu下docker中的mysql5.5服务
在windows下通过sqlyog连接ubantu下docker中的mysql5.5服务1.在docker中拉取mysql5.5镜像:docker pull mysql:5.52.使用mysql5.5镜像生成一个容器,需要指定端口映射和密码:docker run -p 3306:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.53.生成容器并运行成功后,此时可以到Windows下的sqlyog连接到该服务3.1打开sqly
2020-06-30 10:06:31
220
原创 Springboot中通过thymeleaf的方式引入静态资源
Springboot中通过thymeleaf的方式引入静态资源通过Thymeleaf引入静态资源后,当我们对项目访问路径修改后,不用再到页面中去修改对应的静态资源路径。1.引入Themeleaf的pom坐标2.在html页面中修改标签,如下:<html lang="en" xmlns:th="http://www.thymeleaf.org">3.使用themeleaf的标签修改静态资源路径<link href="asserts/css/bootstrap.min.css"
2020-06-28 11:04:51
1440
2
原创 Springboot中通过yml为实体类注入属性
Springboot中通过yml为实体类注入属性延伸:以后除了可以为实体类注入属性,还可以为配置类注入相关的配置信息1.编写实体类@Component@ConfigurationProperties(prefix = "person")public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; p
2020-06-27 13:03:04
4076
1
原创 深入SpringBoot自动配置原理解析,一步步深入与理解
SpringBoot自动配置原理解析本文将从一个最简单的web应用程序来分析springboot的自动配置原理。1.下面是springboot的启动程序,标注了@SpringBootApplication注解,说明当前是一个Springboot程序2.我们点击@SpringBootApplication注解,进入其内部。如上图红圈所示,@SpringBootConfiguration表示当前类是一个Springboot的配置类;@EnableAutoConfiguration表示开启自动配置功能。
2020-06-26 17:18:30
837
2
原创 通过java -jar跑springboot项目
java -jar跑springboot项目1.在pom文件中加入下面插件 <!-- 这个插件,可以将应用打包成一个可执行的jar包;--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>sp
2020-06-24 17:22:56
640
原创 Git系列笔记:rebase
Git系列笔记:rebase1.rebase 可以将多个版本进行合并2. rebase可以进行分支合并,不同与merge合并红色部分是rebase合并的效果,黄色绿色是merge合并的效果3.通过rebase合并有差异的分支将下划红线的语句替换为git rebase origin/dev下图对应rebase的三种操作...
2020-06-20 16:42:42
201
原创 Git系列笔记:使用Github做代码托管
Git系列笔记:使用Github做代码托管1.创建一个新的github代码仓库如下我创建了一个名为Demo_git的仓库来演示怎么使用Github做代码托管2.把本地的文件push到仓库中下面的文件可以假设是你的项目文件,我们将这些代码上传到github中1.首先在这个目录打开git bash,依次执行git init命令,git add . 命令,git commit -m "初始版本"命令作用是将当前目录交给git做版本控制,然后提交当前版本的代码;2.给远程仓库取别名,目的是后续向版
2020-06-20 15:33:26
289
原创 Git系列笔记:分支
Git系列笔记:分支1.查看当前所在分支:git branch2.创建一个分支:git branch 分支名3.切换到新的分支:git checkout dev目前的分支情况,在新的分支里面的操作不影响主分支4.切换到新的分支以后,可以在当前分支对相关代码文件进行修改,修改后提交当前版本的修改当我们提交了修改后的版本时,提示里面的内容出现了乱码。可以通过命令设置:git config core.quotepath false再次查看版本信息,现在版本信息正常显示,并且提示我们现在在d
2020-06-19 21:20:32
217
原创 Git系列笔记:回滚
回滚:当我们需要将当前版本回滚到之间版本时,可以使用git的回滚功能回滚命令:git reset --hard 版本号1.版本号可以通过git log查看,如下我们现在有四个版本。Head在版本4的位置,说明现在是版本4。2.输入回滚命令,现在提示说head在版本33.查看相关文件,文件已经回到了之前的版本,这里不做演示4.查看现在的版本状态,使用命令:git reflog最后四行,显示了我们最初的四个版本。同时,head执行的是版本三,说明现在回滚到了版本三。第一行也显示了一条回滚记录,
2020-06-18 22:16:01
132
原创 Git系列笔记:入门
Git系列笔记:入门1.进入要管理的目录2.git init 初始化:即让git帮助我们管理当前文件夹3.git status 查看当前目录下文件的状态提示说没有可提交的分支,也就是说当前管理的目录下没有新的文件或者修改了的文件让我们提交。不过,我们可以在这个目录下创建文件或者修改文件,再来看当前的状态。如下我们管理的目录下有三个文件,接下来我对index.html做一些修改现在再使用git status查看状态:发现有一个改变了并且没有提交的文件4.通过git add 文件名的方
2020-06-18 20:39:28
109
原创 使用pandas做简单的数据分析
需求: 对于这一组电影数据,如果我们希望统计电影分类(genre)的情况,应该如何处理数据?电影数据的形式如下,我们需要统计出Genre列中出现的电影分类的情况,即每种分类出现了多少次思路:重新构造一个全为0的二维数组,列名为分类,如果某一条数据中分类出现过,就让0变为11.先构造一个全0的数组,行代表每一部电影,有1000部;列代表1000部电影中所有包含的分类(不能重复)。df = pd.read_csv("./data/Movie-Data.csv")# 统计分类的列表temp_lis
2020-06-18 10:36:41
578
原创 在Linux创建用户
在Linux创建用户当我们想创建一个新的用户,并且给该用户指定一个组时,操作如下:1.首先到/etc/group目录下查看相关的组,并把新用户分配的组的id记下命令: cat /etc/group效果:我们想将新建的用户放到组police下,gid是10022.执行创建用户命令命令:adduser -gid 1002 tom效果:3.接下来就可以使用tom作为用户对系统进行操作可以进入到tom的家目录,然后在家目录中创建文件,查看文件所有者查看家目录,发现有一个与tom同名的目录,
2020-06-15 15:37:05
1208
原创 Redis主从复制演示
Redis主从复制演示一、什么是Redis主从复制简而言之就是开启多个redis服务,其中有一个是主服务,其余是从服务。主服务复制读,从服务负责读。当主服务中数据改变时,要通知从服务器做相应的数据更新。二、过程1.复制多份配置文件,可以通过include关键字引入原来的配置文件,然后在新的配置文件中将要更改的配置重写。一定要注意的是端口号不同。下面是新建的配置文件6379,6380,6381都对应的是各个服务占用的端口号。其中一个配置文件如下第一行:引入通用的原始配置第二行:设置pidf
2020-06-11 11:19:13
163
原创 通过Java的Jedis连接Redis服务
通过Java的Jedis连接Redis服务一、修改redis.config文件修改至少两个位置:1.注释掉ip,否则只能连本机2.关闭保护模式,将yes改为notips:在vim编辑器中i表示 进入编辑模式;ESC 则退出编辑模式;/+要搜索的关键字,能够全局搜索;按N能够进行切换下一个匹配的位置;:wq! 强制保存并退出二、保存配置文件并重新启动redis服务在关闭服务的时候可能不能正常关闭,这是由于保存日志的时候没有相关文件夹和文件的权限。详情点击。三、创建java工程,导
2020-06-10 14:11:57
167
原创 pip3安装tensorflow出现超时 (timeout) 解决办法 socket. timeout:The read operation timed out
1.更改超时限制;2.切换下载源,速度更快;输入pip3 --timeout=100 install -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow安装了一晚上,后来无意中看到,亲测有效
2020-06-10 12:41:11
914
原创 记录Redis的五大数据类型
记录Redis的五大数据类型前言:redis 中的五大数据类型为 string、list、set、hash 和 zset; 首先我们需要理解这五种数据类型是如何存储的,我们才能争取的取出数据。一、存储形式存储的逻辑如下,每个数据其实有个key对应。类似于java里面创建对象的时候,每个对象都有一个名字,通过这个名字我们能定位的对应的对象。在redis里面,key就相当于一个对象的名字,后面的具体数据类型则是这个key对应的存储类型。下面是对各个数据类型的操作,我只给出对每个数据类型的存储值和取值操
2020-06-08 14:42:06
186
原创 synchronized关键字修饰方法和代码块时JVM底层做了什么
synchronized关键字修饰方法和代码块时JVM底层做了什么一、修饰代码块参考如下的代码块,通过对下面代码的字节码文件(.class文件)进行反编译,可以得到指令文件。public class SynchronizedDemo { public void method() { synchronized (this) { System.out.println("synchronized 代码块"); } } }指令文件如下,可以看出synchronized同步语句块
2020-06-07 15:27:40
225
原创 记录在linux环境下如何运行redis服务
之前简单学习过Redis,前两天想通过SSM整合Redis,但是连怎么运行redis都不记得。一、打开虚拟机,通过finalShell连接到虚拟机。需要注意的是确保ip地址正确,可以在Linux下输入ip addr查询当前的IP地址。查询ip地址:配置连接信息:二、找到Linux安装的位置一般默认的安装位置在/usr/local/bin目录下,我们可以在任何目录通过redis-server启动服务。不过可以在启动的时候可以指定特定的配置文件,如果不指定就会加载默认的配置文件。我自己lred
2020-06-06 20:41:55
1257
原创 理解JMM内存模型与深入Volatile关键字原理
一、JMM内存模型首先看一下CPU多核并发缓存架构,由于CPU和内存数据读写之间的差距过大,添加了缓存来缓和这个差距。下面是JMM内存模型,每个线程能够从主内存读取共享变量,将读取到的共享变量保存在线程自己的工作内存中。需要注意的是线程与线程之间无法进行直接的通信。二、深入理解Volatile关键字一段代码如下,线程A和线程B共享变量initFlag。线程B先运行,线程A后运行。随后线程A将initFlag变为true,保存这个操作后主内存中的initFlag也会变为true。但是线程B不知道i
2020-06-05 22:06:25
183
原创 SSM前后端数据交互(通过表单和Ajax)
一、搭建SSM开发环境请参照 链接一个基于IDEA搭建SSM的教程,非常详细。二、表单交互这部分是普通表单形式:<h2>测试添加</h2><form action="account/save" method="post"> 姓名:<input type="text" name="name" /><br/> 金额:<input type="text" name="money" /><br/>
2020-06-05 16:46:40
4512
原创 剑指offer65-67
第65题题目描述:**代码如下: **public class Solution { public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { //参数一:矩阵(存储在数组) 参数二:行数 参数三:列数 参数四:待匹配字符串 //用于记录原数组对应位置上的元素是否被访问过 int[] flag = new int[matrix.length];
2020-05-31 14:37:28
150
原创 Java多线程生产者与消费者模型(分别使用synchronized和重入锁实现)
synchronized实现:消费者:public class ConsumerThread implements Runnable { private Goods goods; @Override public void run() { //消费者 while(true){ //厂库不空则消费 synchronized (ThreadDemo.queue) { try
2020-05-30 15:59:43
258
原创 剑指offer 60-63
第60题题目描述:请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。例如,我们可以把一个只有根节点为1的二叉树序列化为"1,",
2020-05-29 11:09:59
105
原创 剑指offer(54-59)
第54题题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路分析:1.首先肯定想到的是将每一个访问到的结点记录下来(比如HashSet),然后对每一个遇到的结点进行判断,以确定新的结点是否已经在之前出现过。但是这种方式当我在运行的时候会超时。2.快慢指针的方式。如下:代码如下:public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead){ //设置快慢指
2020-05-18 15:19:08
134
原创 剑指offer(48-53)
第48题题目描述: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。思路分析:1.字符串的首位可能有符号,首先需要判断是否有符号,并且记录符号的类型;2.根据是否存在符号位来标记字符串的起始位;3.依次将每个字符转为数字(取出字符和0作减法),拼接到结果中;代码如下:public class Solution { public int StrToInt(String str) { if(str.length
2020-05-13 14:18:04
180
原创 SpringBoot的一种前后端交互方式(Restful风格)
前端使用thymeleaf模板引擎,后端使用Springboot,暂时没有加入数据库,使用map模拟数据库中的数据。此处关注点是前后端如何进行数据传输,暂时没有使用AJAX的方式。1.项目结构(spring-boot-04-web-restfulcrud):component包 :包括一个自定义的登录拦截器和国际化版本处理器config包:存放配置类,在配置类中注入了一个自定义的处理器映射器和注入了国际化版本处理器Controller层:用于处理请求;dao层 :用于存放数据访问的方法;enti
2020-05-12 10:53:28
2046
原创 Java中与或非、异或、位运算(一目了然,超级详细!!! 深入解析)
具体内容如下public class Demo { @Test public void test1() { //java与操作:两个操作数中都为1,结果才为1,否则结果为0 int a = 5; //二进制表示0000 0101 int b = 6; //二进制表示0000 0110 //故a&b => 0000 0100 => 十进制4 System.out.println("a和
2020-05-09 17:49:55
1081
原创 剑指offer(44-47)牛客网刷题
第44题题目描述: LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育
2020-05-09 17:46:04
171
原创 剑指offer(40-43)
第40题题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输入输出描述: 输出所有和为S的...
2020-05-06 19:15:59
127
原创 剑指offer(35-39) 通俗易懂,算法总结
第35题题目描述 :输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)。思路1: 暴力解法,对链表1中的每一个结点,依次对链表2进行遍历。如果值相等的话,则就是第一个公共结点。思路2: 借助于栈的先进后出,由于找到两个链表的第一个公共结点,故这个链表在公共结点以后是一个Y字型,故我们将两个链表放入栈中,来找到栈中...
2020-05-04 20:54:27
137
原创 二路归并排序(超详细! 结合剑指offer34题)
二路归并排序二路归并排序有两个过程:分与和。如上图:(a) 把长度为4的数组分解成两个长度为2的子数组;(b) 把长度为2的数组分解成两个成都为1的子数组;© 把长度为1的子数组 合并、排序并统计逆序对 ;(d) 把长度为2的子数组合并、排序,并统计逆序对Java代码如下:public class Day0429 { @Test public void test1...
2020-04-30 11:24:32
1351
原创 一次网络请求的过程(第二部分)
通过前面的学习我们已经知道一个网络数据包如何从一个主机传到另一个主机。当时我们在具体通信时,不仅仅是两个主机之间能够进行通信,而是进程与进程的通信(跨设备的)。1.传输层:管理端到端的数据通信。在一台计算机中通过端口来标识不同的进程,端口由16为比特表示,一共有0~65535个端口。下面介绍传输层的两个重要协议:UDP协议和TCP协议。2.UDP协议:用户数据报协议UDP是传输层的协议...
2020-04-29 15:29:36
425
原创 一次网络请求的过程(网络知识点总结,纯手打!!!)(第一部分)
1.OSI七层模型物理层: 物理层主要负责传输比特流;数据链路层: 数据链路层负责封装成帧、透明传输、差错检测;网络层: 网络层负责路由选择,提供端到端的数据包传输;传输层: 实现不同主机上两个进程之间的通信,包括可靠传输(TCP)和不可靠传输(UDP);会话层: 会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成...
2020-04-28 20:58:15
2660
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人