- 博客(35)
- 资源 (3)
- 收藏
- 关注
原创 单例模式的五种写法
饿汉式类加载到内存后,就是实例化一个单例,JVM保证线程安全(无论是设计模式还是static关键字修饰都保证了只实例化一次JVM保证将类只load到内存中一次static修饰的变量是在该类load到内存中之后马上进行初始化,就保证初始化一次。多线程访问都没关系)简单是用,推荐使用。唯一缺点:不管用到与否,类加载时就完成实例化(不用的话完全没必要将其实例化)public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(
2021-11-03 17:12:12 84
原创 ArrayList扩容机制【附源码】
ArrayList扩容的机制就是计算出新数组的size后然后对其进行实例化,再将原有数组的内容复制到新数组中去。ArrayList 初始化容量为10。默认情况下,扩容后的数组是原容量的1.5倍( 新容量=旧容量右移一位(相当于除于2)在加上旧容量)。ArrayList 的底层是用动态数组来实现的。在初始化一个ArrayList 集合还没有添加元素时,其实它是个空数组,只有添加第一个元素时,内部会调用扩容方法并返回最小容量10,也就是说ArrayList 初始化容量为10。当前数组长度小于最小容量的
2024-03-18 16:48:15 405
原创 SpringBoot调整上传文件大小限制
org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (16460312) exceeds the configured maximum (10485760) at org.apache.tomcat.util.http.fileupload.impl.FileItemIteratorImpl.init(FileItemIterato
2022-04-11 12:11:11 1091
原创 解决SpringBoot项目中PageHelper插件不生效
创建PageHelper插件类@Component@Intercepts({ @Signature( type = org.apache.ibatis.executor.Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class} ), @Signature( type = org.apac
2022-03-15 02:15:49 520
原创 jQuery获取当前系统时间
//系统当前时间startfunction getNow(s) { return s < 10 ? '0' + s : s;}; var myDate = new Date(); var year = myDate.getFullYear(); //获取当前年 var month = myDate.getMonth() + 1; //获取当前月 var date = myDate.getDate(); //获取当前日 var h = myDat
2022-03-14 00:35:05 2252
原创 【解决】springboot项目pagehelper插件启动报错
***************************APPLICATION FAILED TO START***************************Description:The dependencies of some of the beans in the application context form a cycle:┌──->──┐| com.github.pagehelper.autoconfigure.PageHelperAutoConfigurati.
2022-03-11 01:23:43 700
转载 安装Docker
卸载docker较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine安装依赖
2022-01-17 22:19:42 7305
原创 2Redis中value的5种类型的基本操作
redis对String类型的操作面向字符串的最基本操作set、get127.0.0.1:6379> set k1 helloOK127.0.0.1:6379> get k1"hello"set后除了可以接key和value,还可以接NX(键不存在的话才去设置:只能创建)、XX(键存在的话才能设置:只能更新)127.0.0.1:6379> set k1 xxoo nx(nil)127.0.0.1:6379> get k1“hello”127.0.0.1:63
2021-12-31 12:20:46 450
原创 01Mybatis的介绍、Mybaits基本使用、日志log4j
数据库操作框架的历程JDBCJDBC(JavaDataBaseConnection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同意访问,它由3一组用Java语言编写的类和接口组成,JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序优点:运行期:快捷高效缺点:编译期:代码量大、繁琐异常处理、不支持数据库跨平台DBUtilsDBUtils是Java变成中的数据库操作实用工具,小巧简单实用。DBUtils
2021-12-24 10:44:58 254
转载 Spring Boot读取properties配置文件的两种方式
Spring Boot读取properties配置文件的两种方式@Value:一般用于单个属性值时,直接通过这种方式进行注入@ConfigurationProperties:一般用于前缀下含有多个属性值时https://blog.csdn.net/weixin_42352733/article/details/121830775?utm_source=app&app_version=4.21.0&code=app_1562916241&uLinkId=usr1mkqgl919b
2021-12-24 08:03:03 249
原创 2Linux下安装Redis、Redis的简单使用
安装Redis准备好一个新创建出来的Linux系统环境访问https://redis.io复制下载压缩包地址省流助手最新版Redis(2021.12.22)虚拟机安装wget命令yum install wget添加目录并进入目录中mkdir soft cd soft/通过wget命令下载redis的压缩文件# wget https://download.redis.io/releases/redis-6.2.6.tar.gz通过命令解压缩tar xf redis-6.2.
2021-12-22 20:49:43 732
原创 1Redis介绍
常识介绍–磁盘、内存、IO磁盘寻址(ms)带宽(G/M)内存寻址(ns)带宽(很大)在寻址方面磁盘比内存慢了10万倍I/O buffer磁盘与磁道,扇区,一扇区512Byte,如果都是以512为单位读写在索引的成本上就会很大。解决办法就是4k对齐,操作系统无论读取多少都会会以4k大小为单位从磁盘中读取数据存储发展进程数据量大会造成性能下降传统文件随着文件变大,读取速度变慢,磁盘I/O成为速度瓶颈数据库存储是以4k大小的data page进行存储,刚好与操作系统的4k对齐一致
2021-12-22 20:36:28 660
原创 07MyBatis Plus代码生成、RBAC、表设计、MyBatis多表查询、YAML、项目配置
MyBatis Plus代码生成导入依赖pom.xml<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.1.2</version></dependency><dependency> <groupId>org.free
2021-12-19 08:18:21 1661
原创 06pageHelper、翻页、Example使用、异步表单
分页展示数据先在controller中定义访问数据的方法Controller@RequestMapping("list") // 用户列表public List<Account> list(HttpServletRequest request) { List<Account> list = accountSrv.findAll(); return list;}Servicepublic List<Account> findAll() { Accoun
2021-12-13 16:53:57 379
原创 MySQL数据库表主键自增、主键号不规律重新排列
问题: mysql数据库表的自增主键ID乱了,需要重新排序原理 删除原有的自增ID,重新建立新的自增ID删除原有主键:ALTER TABLE `table_name` DROP `id`;添加新主键字段: ALTER TABLE `table_name` ADD `id` MEDIUMINT( 8 ) NOT NULL FIRST;设置新主键: ALTER TABLE `table_name` MODIFY COLUMN `id` MEDIUMINT(8) NOT NU
2021-12-08 00:02:32 1434
原创 05系统设计、登录异步校验、权限管理、简单的退出功能
OA办公自动化无纸化办公工作流模块划分用户管理用户注册:表的增删改查权限管理角色管理:(普通用户、管理员)设计static目录静态文件是对外能够提供访问的文件templates文件是用户直接访问不到的,是需要模板引擎进行加载返回结果做一个异步的登录功能前端js代码$(function () { $(".login_btn").click(function () { var loginName = $("#loginName").val(); va
2021-12-07 18:54:19 623
原创 04mybatis整合SpringBoot、mybatis-generator
Spring Data JPA构建小型项目效率极快但是会带来N+的问题如果一个表中一个属性引用一个 对象,一对多的情况,需要做嵌套查询,就会发送N条查询语句到数据库里,所以很容易出问题。本来一条sql就解决的嵌套查询,现在需要发N条sql,数据库总是接收到这种无用的查询,数据库所受压力都是一些没有意义的压力。Hibernate逐渐被淘汰的原因是底层太复杂。ORM一个实体类对应一个数据库表一个实例对象对应一条记录这个映射关系就叫做ORM:表到对象之间的映射Mybatis也是使用ORM映射、对于
2021-12-05 21:44:18 624
原创 03SpringDataCRUD、thymeleaf、bootstrap
Spring Data 环境下的CRUDSpring Data JPA面向接口开发SpringDataJPA会自动的将数据库中字段名的_下划线转成驼峰命名形式login_name ----》 loginName创建account表CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO_INCREMENT, `login_name` varchar(45) NOT NULL, `password` varchar(45) NOT NULL,
2021-12-02 22:26:37 271
原创 02SB的MVC、spring data jpa
MVC三层controller层主要负责资源映射(@RequestMapping("/asdf"))逻辑跳转,参数的传递。通过url可以访问某一个方法,进入方法就可以去做业务逻辑的跳转了。收集用户请求的数据、提交的数据、把提交的数据收集到系统上保存到数据库。已经存到数据表中的数据可以通过url取出。return回去用模板引擎渲染到前端页面service层负责业务逻辑Servlet容器下的组件Filter:做一些简单的用户的uri过滤(权限过滤)基于SpringBoot 的MVC数据的查询展示
2021-12-01 22:28:16 741
原创 01SB介绍、构建方式、配置文件、构建web、热部署、模板引擎
SpringBoot主要解决的是在无服务的架构下简化配置(快速配置)、前后端分离、快速开发提供了快速启动入门开箱即用、提供默认配置内嵌容强化web项目没有冗余代码生成和xml配置要求像之前搭建一个spring的项目,需要将各种jar包导入。有了maven之后maven解决的是依赖的问题解决依赖冲突的问题:start.spring.io构建项目的脚手架(空项目)生成工具。开箱即用使用start构建项目脚手架导入springweb,会在项目中内置tomcat、spring、springMV
2021-11-26 16:59:34 381
原创 代理服务器、反向代理、反向代理的理解
反向代理通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中,由代理服务器向Internet上的web服务器发起请求最终达到客户机上网的目的。反向代理(Reverse Proxy)方式是指以代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上的得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。代理:快递员
2021-09-16 18:20:21 612
原创 常见的for循环优化方式
常见的for循环优化方式我们都经常使用一些循环耗时计算的操作,特别是for循环,它是一种重复计算的操作,如果处理不好,耗时就比较大,如果处理书写得当将大大提高效率,下面事几条for循环的常见优化方式。首先,初始化一个集合list:List<String> list = new ArrayList<String>();方法一:最常规的写法for (int i = 0; i < list.size(); i++) { System.out.println(list.
2021-08-28 19:34:19 191
原创 二叉树的遍历
先序、中序、后序遍历二叉树public class TraversalBinaryTree { public static class Node { public int value; public Node left; public Node right; public Node(int v) { value = v; } } public static void f(N
2021-08-11 21:52:47 54
原创 判断两个二叉树结构是否相同
判断两个二叉树结构是否相同leetcode原题https://leetcode.com/problems/same-treepublic class SameTree { public static class TreeNode { public int val; public TreeNode left; public TreeNode right; } public static boolean isSameTree(Tr
2021-08-11 21:49:26 172
原创 多个链表合成一个有序链表
多个链表合成一个有序链表Leetcode原题https://leetcode.com/problems/merge-k-sorted-lists/ public class MergeKSortedLists { public static class ListNode { public int val; public ListNode next; } public static class ListNodeComparator implem
2021-08-11 21:46:49 162
原创 位运算实现加减乘除
位运算实现加减乘除计算机实现加减乘除都是用位运算位运算要快于正常的加减乘除,但是在java中使用原生的加减乘除反而比执行位运算语句速度快,因为执行位运算语句时还需要经过Java虚拟机的编译。 public static int add(int a, int b) { int sum = a; while (b != 0) { sum = a ^ b; b = (a & b) << 1;
2021-08-11 21:43:24 148
原创 ES6新特性
ECMAScriptES6的目标是使JavaScript语言可以用于编写复杂的大型应用程序,成为企业级开发语言。let和const命令let所声明的变量只能在let命令所在的代码块内有效const声明的是常量不能被修改,类似于Java中的final关键字。字符串的扩展includes():返回布尔值,表示是否找到了参数字符串startsWith():返回布尔值,表示参数字符是否在原字符串的头部endsWith():返回布尔值,表示数字字符串是否在原字符串的尾部字符串模..
2021-07-28 01:50:49 139
原创 MyBatisPlus_进阶
配置日志我们所有的sql是不可见的,我们希望知道它是怎么执行的,所以我们必须要看日志。配置日志mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImplCRUD扩展插入操作@Test public void testInsert(){ User user = new User(); user.setName("李四"); user.setA
2021-07-24 00:51:34 901
原创 MyBatisPlus_快速入门
快速入门地址:https://mp.baomidou.com/guide/quick-start.html使用第三方组件:导入对应的依赖研究依赖如何配置代码如何编写提高扩展技术能力步骤创建数据库创建user表CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT N
2021-07-13 00:48:35 81
原创 Java面试题_网络通信篇
网络通信篇- TCP和UDP有什么区别?TCP为什么是三次握手,不是两次?TCP:是一种面向连接的、可靠的、传输层通信协议。 特点是,面向连接,可靠,但是效率比较低,占用的系统资源比较多。UDP:是一种无连接的,不可靠的、传输层通信协议 特点是,不需要连接,发送放不管接收方有没有准备好,直接发消息,传输不可靠 效率比较高,占用的系统资源比较少。TCP建立连接三次握手断开连接四次挥手。如果是两次握手,会导致传输不安全,造成连接资源浪费的情况。- Java有哪几种IO模型?
2021-07-02 18:54:33 363
原创 Java面试题_Java并发篇
Java并发篇- Java如何开启线程,怎么保证线程安全?进程是操作系统进行资源分配的最小单元线程是操作系统进行任务分配的最小单元开启线程的方法: 1.继承Thread类,重写run方法 2.实现Runnable接口,实现run方法 3.实现Callable接口,实现call方法 通过FutureTask创建一个线程,获取到线程执行的返回值。 4.通过线程池来开启线程保证线程安全: 加锁:1.JVM提供的各种锁,也就是synchronize
2021-06-27 21:03:28 152
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人