自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringBoot自动配置--原理探究

需求: 自定义redis-starter,要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean。

2024-08-18 16:42:24 275

原创 Redis 删除策略

Redis是一种内存级数据库,所有数据均存放在内存中,内存中的数据可以通过TTL指令获取其状态XX :具有时效性的数据-1 :永久有效的数据-2 :已经过期的数据或被删除的数据或未定义的数据问:过期的数据真的删除了吗?答:不是的。

2024-08-15 19:15:55 512

原创 Java 操作 Redis和redis持久化

Bean//1.创建自定义模板类//配置json类型的序列化工具//这样key会用字符串方式保存2.具体代码了解:/*** 测试自定义* 法意:定义配置类JavaConfig,自定义序列化策略* */@Test//保存对象Student stu = new Student(1,"xx","拉面");//获取对象Student stu2 = new Student(2,"ll","拉面");

2024-08-15 19:06:44 1058

原创 了解Redis

Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数 据库特征:1. 数据间没有必然的关联关系2. 内部采用单线程机制进行工作3. 高性能,官方提供测试数据,50个并发执行100000 个请求,读的速度是110000 次/s,写的速度是 81000次/s。4. 多数据类型支持5. 持久化支持。可以进行数据灾难恢复。

2024-08-14 19:36:57 633

原创 SpringMVC的用法

意义:处理用户的请求,相似于doget与dopost位置: 类上:一级目录方法:二级目录例如:user/save属性:value = "",path = ""表示请求路径method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式限制请求参数,例如:params={"msg1","msg2"}表示请求路径中必须携带参数名为msg1与msg2的参数注意:1.超链接默认发送的是get请求2.所有请求所携带的参数格式均为:key = value。

2024-08-14 19:10:56 621

原创 SpringBoot-enjoy模板引擎

主要用于Web开发,前后端不分离时的页面渲染。1.将页面保存在templates目录下。2.添加enjoy的坐标。3.开启配置(配置类)

2024-08-12 23:26:41 242

原创 初识SpringBoot

YAML是一种直观的能够被电脑识别的的数据数据序列化格式, 并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,比 如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以数据为核心的,比传统的xml方式更加简洁。YAML文件的扩展名可以使用.yml或者.yaml。

2024-08-12 19:15:13 767

原创 Spring

包括:IoC Container(Ioc容器)、Events(事件通知机制)、Resources(资源加载机制)、i18n(国际化)、Validation(数据校验)、Data Binding(数据绑定),Type Conversion(类型转换)、SpEl(Spring表达式)、AOP(面向切面编程);包括:Spring MVC(Spring基于MVC模式设计封装的web框架),WebSocket(spring集成WebSocket,WebSocket是一个服务器与客户端双向通信的技术)等;

2024-08-05 22:34:05 471

原创 索引小tips

9. 【建议】对单表的多次alter操作必须合并为⼀次 对于超过100W⾏的⼤表进⾏alter table,必须经过DBA审核,并在业务低峰期执⾏,多个alter需整合在⼀起。7. 【建议】在多表 JOIN 的SQL⾥,保证被驱动表的连接列上有索引,这样JOIN 执⾏效率最⾼。B+树的设计特别适合磁盘存储, 其节点可以容纳更多的键值对,减少了磁盘I/O次数。3. 【建议】主键的名称以 pk 开头,唯⼀键以 uni 或 uk 开头,普通索引以 idx 开头,⼀律 使⽤⼩写格式,以字段的名称或缩写作为后缀。

2024-08-05 19:20:30 693

原创 Mybatis基础

ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。Java对象 POJO 对象(Plain Ordinary Java Object): 简单的 Java 对象,实际就是普通 JavaBeans。映射配置 配置分为:类与数据库中表的映射;对象与表中记录的映射;类的属性与数据库中 表的字段的映射。数据库 按照数据结构来组织、存储 和管理数据的仓库,ORM 模型中最底层的内容。

2024-07-29 20:18:50 1005 1

原创 Java操作MongoDB

【代码】Java操作MongoDB。

2024-07-29 15:31:53 312

原创 编码算法、哈希算法

/URLEncoder类:进行编码操作//URLDecoder类:进行解码操作。

2024-07-28 20:24:59 334

原创 非关系型数据库MongoDB的基础操作

更新数据 语法: db.集合名.update({查询条件},{$set:{更新内容}}, { upsert: , multi: , } )gf:[{stuname:'小红'},{stuname:'小黄'},{stuname:'小孩' }]3. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++, PHP,C#等多种语言。db.student.insert({stuname:'张三',age:16});// {upsert:true}把没匹配到的数据 作为新增的值添加到mongo中。

2024-07-28 19:25:14 635 1

原创 sql注入和防止sql注入的方法

SQL注入(SQL Injection)是一种网络安全漏洞,允许攻击者在应用程序的SQL查询中插入恶意代码。使用ORM(Object-Relational Mapping)工具:许多ORM工具会自动处理SQL构建,减少注入风险。占位符,并通过编程语言的库绑定参数。使用存储过程(Stored Procedures):将SQL代码预先存储在数据库中,并通过参数调用。通过一些特殊的符号让原本的sql失效,让sql执行新的sql指令。验证和清理用户输入:确保用户输入不包含恶意字符或SQL关键字。

2024-07-27 20:21:46 241

原创 JDBC(Java访问数据库)

Java Database Connectivity:Java访问数据库的解决方案JDBC定义了一套标准接口,即访问数据库的通用API, 不同的数据库厂商根据各自数据库的特点去实现这些接口。JDBC希望用相同的方式访问不同的数据库,让具体的数据库操作与数据库厂商实现无关,从而在不同数据库之间轻易的进行切换。下载对应的数据库的驱动 mysql-connector-java-5.0.4-bin.jar将驱动类加载到项目中 Eclipse: Build Path。

2024-07-27 19:55:33 355

原创 事务、函数和索引

MySQL默认10秒内没有响应SQL结果,则为慢查询。可以去修改MySQL慢查询默认时间。

2024-07-25 18:48:19 878 1

原创 Mysql高级DQL数据查询

只有完全满足条件(主外键关系)的数据才能出现的结果#1.1非等值联查 笛卡尔积 两个结果集的相乘 逻辑上有错误#1.2等值联查-- 查询出学生和班级信息student class 相同字段做主键那个是主表 做外键那个是子表where student.classid=class.classid and ssex='男';-- 5张表全部联查起来stduent class sc cource teacher#面试题:查询出学过张三老师课程的学生信息。

2024-07-22 21:35:24 980 1

原创 MySQL数据库基本用法

什么是数据库?MySQL数据库的特点。

2024-07-20 20:40:07 739

原创 Linux下vim编辑器的使用方法

ctrl+w+j/k 通过j/k可以上下切换,或者:ctrl+w加上下左右键,还可以通过快速双击ctrl+w依次切换窗口。:vsplit+窗口名(保存后就是文件名) 打开一个新窗口,vsplit可以简写为vsp。:split+窗口名(保存后就是文件名) 打开一个新窗口,split可以简写为sp。O 为在目前光标所在处的上一行插入新的一行。a 从目前光标所在的下一个字符处开始插入。A 从光标所在行的最后一个字符处开始插入。o 在目前光标所在的下一行处插入新的一行。r 只会取代光标所在的那一个字符一次。

2024-07-18 23:34:25 388

原创 shell的基本操作

(1)变量名称可以由字⺟、数字和下划线组成,但是不能以数字开头,环境变量名建议⼤写。(2)等号两侧不能有空格(3)在bash中,变量默认类型都是字符串类型,⽆法直接进⾏数值运算。(4)变量的值如果有空格,需要使⽤双引号或单引号括起来。

2024-07-18 19:28:33 1319

原创 Linux常用操作命令

r:重启 可以加参数21:00ls [选项] [文件或目录]选项:-l : 每列仅显示一个文件或目录名称。-a 或--all : 下所有文件和目录。-i 或--inode: 显示文件和目录的inode编号。(ls -ai:命令累加使用,查看加inode编号的隐藏文件)cd [文件或目录]~:当前用户的家目录绝对路径:一定由根目录/写起相对目录:相对于某一路径,其中 .代表当前目录, ..代表上一级目录。

2024-07-17 22:58:01 1028

原创 String、StringBuilder和StringBuffer的区别

String 是 Java 中的一个类,用于表示字符串。它是不可变的,因为内部使用字符数组来保存字符串内容,用于存放值的value[ ]是final类型,因此只能被赋值一次,不能被更改,即一旦创建就不能被修改。StringBuilder的实现原理与 StringBuffer 相同,唯一的区别是 StringBuilder 不是线程安全的,而 StringBuffer 是线程安全的。当对 String 进行修改时,实际上是创建了一个新的 String 对象,将修改后的字符串复制到新的对象中。

2024-07-15 19:06:16 341

原创 Java网络编程

1.在Java中,可以通过InetAddress类的静态方法getLocalHost()来获取本地主机的IP地址2.在Java中,如果需要测试网络是否通畅,可以使用Runtime对象的exec()执行ping命令3.如果想检查主机与目标主机之间的网络是否通畅,可以使用ping命令来测试,请求超时代表网络不通畅,有正常答复响应代表网络通畅。在Windows操作系统中,可以通过ipconfig命令查看本地主机的IP地址。

2024-07-13 10:12:10 206 1

原创 如何处理压缩文件?

(1).根据原始路径(字符串),创建源文件(File对象)(2).创建根目录(File对象),判断根目录是否已经存在,如果存在,则删除(//rootDir.delete();仅能删除空目录,非空白目录则需使用commons-io包提供的FileUtils工具类进行删除),如果不存在,则在磁盘上创建根目录(3).ZipInputStream:用于进行zip格式的压缩文件输入流;遍历压缩包中的每个子目录或子文件(ZipEntry类型的对象)

2024-07-11 19:20:00 232 1

原创 String字符串的常见方法总结

split(String regex):分割字符串,参数为正则表达式,以regex所表达的字符串为分隔符,返回一个分割后的字符串数组。equals():用于比较字符串内容是否相等,返回值为boolean类型,若相等返回true,不相等返回false。toString():用于将对象转换为字符串类型返回字符串本身,返回值为String类型。toLowerCase():将字符串转成小写字母,返回String类型的值。toUpperCase():将字符串转成大写字母,返回String类型的值。

2024-02-18 21:21:41 349 1

原创 String为什么是不可变的?

String是一个引用类型,而它引用的是一个字符串对象,从源码可以看出,它是个char类型的数组,被final修饰为常量,其次,value数组是用private修饰的,且String外部不提供修改这个数组的方法,所以初始化之后没法继续改变value数组的内容,String类被final修饰,也就是不可继承,即不可被继承后修改破坏。

2024-02-18 21:06:54 358

原创 数组常见算法代码总结

采用二分查找的基本思想,将查找的值和数组的中间值作比较(要求这个数组必须有序)如果被查找的值小于中间值,就在中间值左侧数组继续查找;否则中间值就是要找的元素。采用冒泡排序的基本思想,就是把小的元素往前移或者把大的元素往后移。相邻的两个元素进行比较,交换也发生在这两个元素之间,若两个元素相等,则不会交换。数组旋转可以分为向左旋转和向右旋转,向左旋转即正序循环遍历交换相邻两个元素,向右旋转即逆序循环遍历交换相邻两个元素,外层循环控制旋转的位数。采用双指针的思想,即从头、尾部同时开始进行比较,查询速率快。

2024-02-18 20:30:45 393

原创 Arrays工具类的常用方法

【代码】Arrays工具类的常用方法。

2024-02-17 11:51:29 850 2

原创 数值类型的运算方式总结

两个数字相同位上,相同为0,不同为1。

2024-02-16 19:03:34 385 2

原创 今日Java小问题:List、Set、Map

插入、删除数据时,LinkedList的效率比较高,因为ArrayList要移动数据,ArrayList适用于遍历、查找。Vector只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性。List 以索引来存取元素,有序的,元素是允许重复的,可以插入多个null。ArrayList是数组的数据结构,LinkedList是链表的数据结构。Set 基于 Map 实现,Set 里的元素值就是 Map的键值。Vector是线程安全的,ArrayList不是线程安全的。

2024-01-28 16:10:52 350 1

原创 压缩字符串

【代码】压缩字符串。

2024-01-23 22:22:46 398 1

原创 今日Java小问题:跨平台性、接口、抽象类

接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;因为是运行在jvm虚拟机上的,所以它的代码就能不经修改在不同平台的jvm上运行,window或unix的jvm是已经开发好了的,有jvm就可以四处运行(而jvm是安装jre或jdk就有的)。java语言是一次编译,多次运行的,java编译器会将源文件编译为二进制字节码(.class),然后字节码在jvm上直接运行(解释执行)的。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。

2024-01-23 22:04:28 368 1

原创 今日Java小问题:字符串、面向对象

String re3=String.format("商品类¥%f,库存%d,卖家%s", 1234.56,100,"lili");多态:一个类型(父类)可能存在多种类型状态(不同的子类),让程序实现更加灵活(一个父类的引用,可以指向任意子类对象)String[] arr= {"西安","宝鸡","渭南","铜川","延安","安康"};String re2=String.join("$", "西安","安康","汉中");继承:代码的复用,通过定义父类,子类在父类的基础上进行扩展(数据、功能)

2024-01-22 19:32:36 427 1

原创 StringBuilder的用法

【代码】StringBuilder的用法。

2024-01-22 19:08:36 343 1

原创 今日Java小问题:JDK、JRE、String、普通类、抽象类

JDK:Java开发工具包,提供了Java运行环境、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。JRE:顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。split():分割字符串,返回一个分割后的字符串数组。length():返回字符串长度。

2024-01-20 22:02:04 345

原创 final和static关键字的用法

【代码】final和static关键字的用法。

2024-01-20 20:55:21 417

原创 接口与抽象类的区别

语法4:接口中不允许定义带有方法体的普通方法,但可以通过default关键字定义默认方法。* 语法5:实现类通过implements关键字实现接口,必须重写接口中定义的抽象方法。* 语法5:子类通过extends关键字继承抽象类,必须重写抽象类中定义的抽象方法。* 语法2:接口中允许定义抽象方法,定义时允许忽略abstract。* 语法4:抽象类中允许定义带有方法体的普通方法。* 语法3:接口中不允许定义构造方法。* 语法2:抽象类中允许定义抽象方法。* 语法3:抽象类中允许定义构造方法。

2024-01-19 21:11:39 346

原创 【查找target在目标数组的下标位置】

/查找target在目标数组的下标位置。* 代码基本思想是先排序再查找。//先排序(冒泡排序)//再查找(二分查找)

2024-01-19 20:49:55 388

原创 今日Java小问题:equals、int、重写、重载

如果没有重写equals(),仍然调用的是Object父类的equals()方法,则比较的是内存地址;重写override:发生在子类中,是对父类中的方法进行“覆盖”,方法名和参数必须与父类中的方法保持一致。如果有符号位的话,需要去除一个符号位,正数最大为:2的31次方-1 ,负数最小为:-2的31次方。重载overload:在同一个类中,一组“同名”的方法,但参数不同(个数,类型,顺序)==是关系运算符,equals()是Object类中定义的方法。如果重写equals()方法,则比较的是值。

2024-01-19 19:43:18 418

原创 今日Java小问题:浮点数、数组、构造方法

在编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己手动添加构造函数,无论有参数或是没参数,默认构造函数都将无效)浮点十进制值通常没有完全相同的二进制表示形式,会进行截取部分小数进行存储,从而导致计算机存储的数值只能是个大概的值,而不是精确的值。编写时添加有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法。二分查找利用binarySearch冒泡排序。如果需要使用无参构造方法,一定要在类里面添加。一个是遍历 一个是二分查找。

2024-01-18 22:30:21 357

空空如也

空空如也

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

TA关注的人

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