自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(153)
  • 收藏
  • 关注

原创 netty--粘包、半包解决方案

闲着没事研究了一下netty怎么用。如有错误,还请指正。在数据传输的过程中,TCP协议会将多个较小的数据包放在一起传输,或者是将数据拆分进行传输,这就导致在更上层需要进行判断收到是否为一个完整的数据包,否则进行就没办法玩了。下面列举几个常用的方案。一、强制每个数据包单独发送通过设置参数,强制要求不进行合并和拆包发送,简单粗暴,两行代码搞定问题。但是这样因为每次传送的数据较少,在频繁通信的时候会导致网络拥堵,不推荐使用。服务端配置: // 强制要求,每次.

2021-10-17 23:32:04 316

原创 Spring事务失效的场景

Spring事务失效主要有以下几种情况:数据库本身不支持事务数据源没有配置事务管理器主动设置不支持事务异常被catch了异常不是指定回滚的类型调用不是Spring的代理对象方法没有用public修饰一、数据库本身不支持事务数据库本身并不支持事务,没什么好说的,本身就不支持,怎么可能生效。二、数据源没有配置事务管理器如下是SpringBoot做的自动配置/** * {@link EnableAutoConfiguration Auto-configuration} for .

2021-08-26 16:48:48 202 1

原创 Ubuntu 20防火墙

默认安装了ufw,如果没有安装的话,使用如下命令安装:sudo apt install ufw常用的命令:# 查看防火墙的状态sudo ufw status verbose# 开启/关闭防火墙sudo ufw enable/disable# 查看当前防火墙的规则sudo ufw status# 重置防火墙sudo ufw reset# 使用外来访问默认的拒绝/允许规则sudo ufw default deny/allow# 允许/拒绝 20端口,后面可以加上/tcp或/ud

2021-07-06 09:27:23 497

原创 Ehcache的使用

这里着重说一下3.x的用法,至于2.x只说一下咋配置。2.x依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId></dependency><dependency> <groupId>net.sf.ehcache&.

2021-02-03 10:44:30 517

原创 错误处理

找到了三种错误处理的方法:使用@ControllerAdvice注解,这种可以处理所有controller层抛出的异常,但是如果是在controller层try/catch了,那么就无法进行处理了,而且也无法处理不经过controller层的异常,比如404;但是这个也有好处,那就是在处理异常的时候可以根据不同的异常来分开进行处理,而且处理方法也比较简单。实现ErrorController接口或者是继承他的子类,这个类是Spring Boot给我们写好的对错误处理的类,处理的结果就是我们看到的那个白色

2021-02-03 10:43:21 145

原创 日志

Spring Boot默认使用的日志框架是slf4j和logback,其中slf4是提供了一个统一的实现接口,logback则是实际的实现。另外,Spring Boot也是支持其他的日志框的。而Spring Boot中有许多其他的模块使用的是其他的日志框架,对此slf4j提出了解决方案,那就是在原本的基础上面再加上一层,做一个适配,这样就可以了。同样,尽管在应用的时候是使用的slf4j,也可以添加一个适配层从而使用其他的日志框架,包括log4j、jul等。具体的可以去看slf4j的官方文档:传送门,.

2021-01-30 13:55:57 914 3

原创 Spring Boot单元测试

同样Spring Boot已经给我们提供好了现成的测试模块,我们只要会用就行了,然后这个是官方的例子:传送门最简单的直接自动注入这个就是需要一个@SpringBootTest注解来告诉框架,这个是一个测试模块,然后将自己需要测试的类注入进来,调用方法就行了,个人认为,这种比较适合dao层或者是service层。@SpringBootTestpublic class DemoTest1 { @Autowired private HelloController controller;.

2021-01-30 13:54:01 86

原创 WEB开发

模板引擎Spring Boot不建议我们使用jsp,建议使用模板引擎;同样也他给我们提供了模板引擎的自动配置。提供了默认配置的模板引擎有以下几种:ThymeleafFreeMarkerVelocityGroovyMustache通过使用模板引擎来避免使用jsp。使用Thymeleaf首先第一步,引坐标<!-- 模板引擎--><dependency> <groupId>org.springframework.boot</groupId

2021-01-30 13:52:27 106

原创 资源映射

默认的几个配置在使用Spring MVC的时候,需要我们去配置各种静态资源、网页地址的映射,不然很容易就会出现问题。Spring Boot默认已经配置好了,会默认帮我们映射下面的几个文件夹classpath:/META-INF/resources/classpath:/resources/classpath:/static/classpath:/public/如果想要配置自己的静态资源地址,需要使用spring.web.resources.static-locations属性来配置,需要注

2021-01-30 13:50:49 288

原创 Hello Word

方法一创建项目的时候可以先创建maven项目,然后添加各种坐标,创建文件,文件夹啥的方法二如果是用的专业版的IDEA,可以直接用他自带的springBoot创建器,创建项目这样会根据你自己的选择去添加坐标,然后默认创建各种文件夹。方法三使用spring官方提供的创建器来创建,效果和上面那个差不多,就是需要联网,这个是那个网站的地址:传送门选择以下选项:Project类型是:Maven ProjectSpring Boot版本:根据需要选择然后填上包名、团队名称、项目名称等等最后选择项

2021-01-30 13:48:26 79

原创 dubbo控制台的docker镜像制作

准备工作有docker有dubbo-admin这个项目的代码,可以从GitHub自己下载开始修改配置需要根据自己的实际情况修改注册中心的地址,我这里是用的zookeeper作为注册中心,另外就是我是把zookeeper和dubbo做在一个镜像里面了,只有一个zookeeper节点,自己测试的时候使用一下就行了,实际情况应该不会这么完。另外就是建议修改一下项目的端口,默认是8080,可能会跟后面自己使用的冲突。创建Dockerfile文件我是打算将zookeeper和dubbo-admin

2021-01-20 20:20:17 198

原创 将自己的web应用打包成docker镜像并运行

闲着没事,学学了一下docker的玩法,写个笔记备忘。就是使用Dockerfile的形式来将自己的应用打包成镜像,然后运行。创建web应用略如果这都 不会弄回去学web吧我这里是将应用打包成war包,在Tomcat上运行。将web应用打包自己怎么舒服怎么来,我是用的maven的形式来打包的插件配不配其实都行,如果不配的话会使用默认的插件来打包。关键是指定web.xml文件的地址,可能是因为我项目结构的问题,如果不指定web.xml文件位置,无法打包。 <!-- 指定打成wa.

2021-01-08 15:42:44 1445

原创 各种安装

安装各种各样的东西,做一个备忘文章目录ubuntu安装jdk8ubuntu安装jdk11docker安装mysqldocker安装redisubuntu安装Jmetardocker安装Tomcatubuntu安装jdk8sudo apt-get updatesudo apt-get install openjdk-8-jdkubuntu安装jdk11sudo apt install openjdk-11-jdk# 使用以下的命令更改默认的jdk版本sudo update-altern.

2021-01-05 20:19:51 121

原创 Spring Boot数据库操作

文章目录连接池使用JdbcTemplate代码测试使用JPA代码测试使用MaBatis代码测试多数据源连接池JdbcTemplate整合代码测试与JPA整合代码测试与MyBatis整合首先需要引入Spring Boot的数据库模块,然后根据连接的数据库类型加入数据库驱动。<!-- 数据库--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>s

2021-01-05 09:59:47 327

原创 MyBatis----逆向工程

文章目录概述配置运行概述这个逆向工程就是mybatis根据数据库中的表,然后生成对应的实体类以及各种mapper。能够方便我们的开发,配置好之后就会自动生成一些CRUD操作,基本上可以满足我们的各种需求。另外就是官网也给到了如何去使用:传送门,配置文件以及怎么去调用都说明了。配置除了常规的一些依赖文件,还需要加入逆向工程的核心依赖 <dependency> <groupId>org.mybatis.generator</gro

2020-12-01 10:51:15 71

原创 SSM+Layui整合

文章目录概述依赖各种配置文件web.xmlspring配置springMVC配置MyBatis配置Mapper映射文件关于Layui概述刚学完了ssm,打算自己上手做一个项目玩玩,先第一步,整合ssm,自己不会写前端,所以前端用了Layui。这个整合的大致就是ssm,Layui,MySQL,druid。依赖这个是我的依赖,没出问题。 <dependencies> <dependency> <groupId>org.springframew

2020-11-17 08:59:34 1355

原创 Java8新特性之Stream

文章目录概述创建Stream概述Java8的一个新特性就是增加了Stream API,这东西提供了一个对数据更加便捷的一些操作。首先就是,相关的类在java.util.stream包里面。其次,流是一种渠道,用来处理对应数据源的的各种元素。需要注意的是:1、Stream本身不存储元素,2、Stream不会改变原有的数据源,而是产生新的数据。3、Stream的各种操作不是立即进行的,而是在调用的时候才会执行。最后,Stream操作有以下三个步骤:创建Stream:根据相应的数据源产生需要的S

2020-11-10 17:22:39 169

原创 Java开发工具Lombok的使用详解

文章目录概述配置安装插件添加依赖使用@Data@NoArgsConstructor@AllArgsConstructor@Setter@Getter@ToString概述lombok是一个Java工具,可以让我们在开发中省去写一些不必要的代码的时间,让Java的代码变的更加的简洁。配置使用lombok需要在ide中安装一个插件,具体方法要看是那个ide。我用的是IDEA,然后这里就只说IDEA怎么弄,其他的出门左转,百度。接下来就是在项目添加lombok的依赖,然后就可以用了。安装插件直接在设置

2020-10-28 23:09:16 195

原创 Lambda表达式用法

文章目录什么是Lambda表达式用法无参数无返回值无参数有返回值有参数无返回值有参数有返回值函数式接口什么是Lambda表达式Lambda表达式是Java8的一个新特性,可以使代码更加的简洁,提高代码可读性(如果没学过Lambda另说)。以下是百度百科对Lambda的解释:Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。L

2020-10-26 22:11:32 489

原创 Maven常用小配置

平时写代码的时候用到的一些配置,当作备忘录;出现错误还请指正。文章目录配置使用阿里云仓库更改本地仓库位置配置使用阿里云仓库使用阿里云的仓库主要就是为了速度,有的使用官方的仓库加载半天,老烦人了。在mirrors标签中添加如下配置。 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</n.

2020-10-23 15:18:47 75

原创 使用exe4j将Java可执行文件转换为exe

文章目录概述打包jar文件转换概述Java最大的优势就是可以跨平台,打包成exe就没了这个优势了,这样做没啥用,但是玩玩嘛。之前这样做过,然后写一下,备忘。需要的东西:exe4j这玩意直接百度就行,找到链接后下载安装,一路next下去就行了。你的代码打包jar文件我使用的是idea,感觉挺方便的,eclipse电脑上没装,就不列出来了。首先去项目设置里面,设置打包的各种属性,快捷键看图片。找到artifacts,然后点那个➕,根据你的项目类型去添加。一般常用的是前两个,后面的也可

2020-10-20 09:30:56 125

原创 MyBatis----缓存

文章目录概述本地缓存本地缓存失效的情况全局缓存配置方法与缓存有关的配置整合第三方缓存依赖更改配置文件源码解读执行流程全局缓存本地缓存参考文档概述MyBatis有两级的缓存:本地缓存,以会话(sqlSession)为单位的一级缓存全局缓存,以命名空间为单位的二级缓存默认情况,一级缓存是开启的;二级缓存需要手动开启。MyBatis提供了自定义二级缓存的接口,想要自定义二级缓存直接继承Cache接口实现相应的方法就行了。而想要使用第三方的缓存需要添加相应缓存的依赖,并添加MyBatis项目为该缓存

2020-10-17 21:45:04 87

原创 MyBatis---动态SQL

文章目录概述if标签choose标签trim标签额外添加一个必为true的条件where标签set标签trim标签foreach标签概述简单来说,动态sql就是根据不同的参数拼接出来不同的sql语句,通常情况我们使用Java来拼接不能说很难,只能说比较痛苦,MyBatis就直接将类似的功能提供给我们,方便开发。MyBatis借助了OGNL的表达式,但是相对来说比较简单,因为MyBatis对其进行了精简,只有学习几个标签就可以用了。ifchoose(when、otherwise)trim(w

2020-10-15 11:33:35 89

原创 Spring----控制反转(IOC)

文章目录目的底层原理Bean管理概述基于xml只有一个对象,没有属性注入普通的属性使用set方法注入使用构造方法注入注入对象属性引用内部bean级联赋值注入集合属性普通的注入使用引用自动装配基于注解作用域和生命周期作用域生命周期后置处理器参考控制反转就是将对象的创建和对象之间调用的管理,交给Spring。我们在一个对象中需要另一个对象的资源无需去考虑如何去获得,Spring自动帮我们完成对象获取这个过程。目的降低耦合度底层原理xml解析、工厂模式、反射关于工厂模式,有兴趣的可以看一下我的另一

2020-10-13 21:00:16 88

原创 Spring入门

文章目录什么是Spring[^1]第一个程序首先,创建一个Java的maven项目随便创建一个类,写上方法,然后再在配置文件中注册最后,敲出来测试的代码控制反转(IOC)目的底层原理Bean管理概述基于xml只有一个对象,没有属性注入普通的属性使用set方法注入使用构造方法注入注入对象属性引用内部bean级联赋值注入集合属性作用域和生命周期什么是Spring1Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。轻量级:完整Spring框架的大小只有一兆多,而Spring处理所

2020-10-13 19:04:01 62

原创 MyBatis---映射文件

文章目录增删改代码获取执行的结果Mysql获取自增主键的值查1、返回一个封装好的对象2、返回封装好的对象的列表3、将返回的数据封装为Map4、将返回的多个对象封装为一个map5、一对一、多对一关联查询分步查询6、一对多级联分步鉴别器输入参数只有一个基本数据类型传入一个对象作为参数传入多个参数传入参数类型为Map传入数据为Collection对象或者是数组#{}与${}其他参考文档增删改增删改大同小异,没什么复杂的东西,只是标签不一样。需要注意的是,增删改必须进行提交操作之后才会将改变提交给数据库。M

2020-10-11 19:37:43 101

原创 8/15数码问题的A*算法

文章目录题目描述思路代码8数码问题15数码问题题目描述有以下的表格,然后每次与空白表格相邻的位置可以与其位置进行交换,求进行交换过程中的路径。思路这种题目可以使用A*算法来解决,具体的复杂度要看估价函数。我这里使用了两种估价函数,虽然整体还是很垃圾,但是能够明显的感觉到不同估价函数对运行时间的影响。另外就是,实现的算法中没有保存交换路径,留待解决。具体的实现,我把表格封装成了一个对象,其中封装了移动,估价函数这些操作。然后留给其他的就只是一个循环,不停的判断是否在OPEN表和CLOSED

2020-10-09 14:57:06 1120 1

原创 MyBatis入门

文章目录MyBatis第一个案例创建项目创建数据库创建配置文件对应的类测试参考MyBatis使用MyBatis的意义作为一个半自动的持久层框架,MyBatis将sql语句交给开发者去完成,使开发者可以优化自己的SQL语句,自身则完成剩余的部分。第一个案例创建项目在maven中添加如下的依赖:这两个分别是MyBatis和jdbc的驱动 <dependency> <groupId>org.mybatis</groupId&g

2020-10-07 12:37:33 59

原创 从输入网址到看到界面的过程解析(HTTP请求的过程)

文章目录域名解析数据传输应用层传输层网络层链路层参考文章域名解析域名解析就是将我们输入的各种字符串(域名)解析为对应的IP地址的过程。以下是查询的过程 1从缓存中查询。这个从缓存中查询一般分为两种:1、从浏览器的缓存记录中查询。2、从操作系统的缓存中进行查询。从操作系统的host文件中查询。操作系统中的映射文件是不可以动态修改的,只要你不主动改,那这个永远就是这个样子,不像之前的缓存,可以修改,也可以清空。以win10来说,在C:\Windows\System32\driv

2020-10-02 17:04:24 275

原创 LinkedList详解

文章目录概述节点的构型概述LinkedList是JavaAPI中的一种动态数组,其底层采用链表,插入删除快,访问慢。以下是其继承结构:节点的构型 /** * 链表中的节点 * @param <E> */ private static class Node<E> { E item; Node<E> next; Node<E> prev;

2020-09-28 16:56:17 103

原创 梵塔/汉诺塔问题

文章目录问题描述解题思路代码问题描述有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。1解题思路就,递归。将第N个从A移动到C需要先将前N-1个移动到B,然后才能移动到C。其他的思路相同,反复循环就可以了。代码import org.junit.Test;impo

2020-09-23 18:58:39 515

原创 Java创建线程的几种方式

文章目录创建线程的四种方式继承Thread类实现Runnable接口实现Callable接口线程池创建线程的四种方式继承Thread类实现Runnable接口实现Callable接口线程池继承Thread类以此种方法创建线程需要继承Thread类,重写其run方法。class Test3Thread extends Thread{ @Override public void run() { System.out.println(Thread.current

2020-09-16 19:28:40 116

原创 JVM虚拟机栈

文章目录概述栈帧局部变量表概述虚拟机栈是线程私有的,他的生命周期与线程的相同。每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧。当方法执行完毕之后,栈帧出栈。栈帧包括局部变量表、操作数栈、动态链接、方法返回地址等信息。虚拟机栈中会出现两种异常:StackOverflowError:线程请求的栈的深度大于虚拟机所允许的深度。OutOfMemoryError:如果虚拟机栈的容量是可以动态扩展的,当栈扩展时无法申请到足够的内存会出现此异常。栈帧栈帧是Java虚拟机栈的栈元素,是用

2020-09-12 14:55:47 60

原创 JVM程序计数器

文章目录什么是程序计数器存在的意义关于native方法参考什么是程序计数器程序计数器可以看作是JVM对CPU程序计数器的一种模拟;其是一块较小的内存空间,用来存储当前线程的所执行的字节码的行号。注意:程序计数器是线程私有的,每个线程都有一个自己的程序计数器。在这块内存空间中不存在任何OutOfMemoryError情况。存在的意义虽然Java字节码在未经过即时编译器编译前,是通过字节码解释器解释执行。一行一行的读取、解释、执行,即使存在分支、跳等操作,只要是按照流程执行的,其实不需要程序计

2020-09-06 18:55:54 110

原创 题51、N 皇后

题目1代码import org.junit.Test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @date 2020/9/3 10:20 */public class T0051 { @Test public void test() { System.out.println(solveNQueens(0)); } p

2020-09-03 14:45:01 82

原创 Java设计模式之建造者模式

文章目录思想代码样例思想建造者模式简单来说就是将对象的创建由构造函数交给第三方的一个类,由这个类去负责创建对象的时候各种参数管理,我们可以调用不同的方法去个性化的定义创建对象时候的属性,而不用去将所有属性组合的构造函数都写出来。主要使用的地方就是创建对象的时候参数太多了,如果都写成构造函数会太复杂。用这种方法,我们只用对每个属性创建一个设置的函数就可以了,而不必写多个构造函数。代码public class Robot { public static String ROBOT_TYPE_1

2020-09-02 21:40:06 66

原创 Java设计模式之原型模式

文章目录原型模式思想浅拷贝与深拷贝的问题两种实现方法原型模式简单来说就是使用Object类的clone()方法来复制一个新的对象。原型模式思想非常简单,在实现一个类的时候,实现一个方法,可以使用这个方法去创建一个和这个对象完全一样的新的对象。大概就是这个东西。public class Bean implements Cloneable{ private String name; private int id; @Override protected

2020-09-01 21:08:06 77

原创 安卓高级开发总结

文章目录第1部分 多媒体应用开发1、MediaPlayer的状态图和生命周期及相关方法IDlE状态Initialized状态Preparing状态Prepared状态Started状态Paused状态Stopped状态PlaybackCompleted状态Error状态End状态2、MediaPlayer音视频播放的基本实现3、Android的音效框架AudioEffect的基本应用;4、声音特效VolumeShaper的基本应用5、如何使用SoundPool播放音频以及与MediaPlayer的区别6、V

2020-08-26 16:22:20 585

原创 编译原理

文章目录第一章编译程序的各个逻辑阶段及各阶段的意义遍的概念第二章词法分析器的相关概念状态转换图、NFA、DFA、NFA与DFA的转换、DFA的化简正规式与正规集第三章优先集、结合性;名字、标识符;左值和右值;符号串和符号串集合的相关概念以及相关运算上下文无关文法、推导与归约、语法分析树、二义性形式语言鸟瞰,即四种类型的文法语法分析器的相关概念自上而下分析面临的问左递归的消除,公共左因子的提取first集 follow集LL(1)文法的条件LL(1)分析表的构造及预测分析过程概念的掌握,如短语、直接短语、句柄

2020-08-26 13:59:13 1075

原创 Java的ArrayList解读

文章目录概述初始化扩容操作方法解读forEach(Consumer<? super E> action)之前有一个博客是对源代码的解读,有兴趣的可以直接看源代码,看一遍基本上就啥都清除了概述ArrayList是java中的一种动态数组,其底层采用数组实现,访问快插入删除慢。初始化如果使用无参构造方法ArrayList()初始链表,这个时候并不会初始化列表底层的数组,直到第一次进行插入操作的时候会对数组进行初始化。当使用ArrayList(int initialCapacity

2020-08-20 10:20:14 320

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除