- 博客(51)
- 收藏
- 关注
原创 微服务架构的介绍
Spring Cloud是⼀系列框架的有序集合。它利⽤Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册、配置中⼼、消息总线、负载均衡、断路器、数据监控等,都可以⽤ Spring Boot的开发⻛格做到⼀键启动和部署。Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务,它简化了与http服务的通信⽅式,统⼀了RESTful的标准,封装了http链接, 我们只需要传⼊url及返回值类型即可。
2024-08-20 19:18:11
794
原创 Redis的基本应用
Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。
2024-08-19 19:58:35
1021
原创 SpringBoot如何做自动配置
Spring Boot通过注解开启自动配置,对autoconfigured的jar包下的META-INF下的spring包中下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。用注解来对一些常规的配置做默认配置,简化了各种xml配置内容,使项目能够快速运行。
2024-08-18 22:48:54
854
原创 Spring框架的应用(面试题)
如果 Bean 在 Spring 配置文件中配置了init-method 属性,则会自动调用其配置的初始化方法。
2024-08-14 19:40:06
845
原创 设计模式——单例设计模式
问题:由于加锁原因使方法的并发量很低,每次并发1个,而这个方法在单例使用期间,一直会被调用。 特点: 不支持延迟加载实例(懒加载) , 此中方式类加载比较慢,但是获取实例对象比较快。在类加载期间就初始化静态实例对象,保证创建的getInstance实例的是线程安全的。如果你想创建一个类而且它在任何时刻只会有一个对象,那么你就应该使用单例类模式。此模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 问题: 该对象足够大的话,而一直没有使用就会造成内存的浪费。
2024-08-10 14:23:08
622
原创 Spring核心思想-AOP面向切面编程
就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib,基于继承的方式,生成一个被代理对象的子类来作为代理(Cglib动态代理的核心是MethodInterceptor接口和Enhancer类);将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;AOP将抽取出来的共性功能称为通知;
2024-08-08 19:30:33
1060
原创 设计模式-动态代理模式
代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。
2024-08-08 18:08:04
560
原创 SpringIOC对bean的管理,以及Spring的配置
替换:替换:语法:@Component(value="注入容器中的id,如果省略id为类名且首字母小写,value属性名称可以省略")
2024-08-07 23:44:05
918
原创 Spring的Spring IOC的简单理解
包括:Ioc container(loc容器),Events(事件通知机制),Resources(资源加载机制)(数据绑定),Type Conversioi18n(国际化),Validation(数据校验),Data Bindingn(类型转换),SpEL(Spring表达式),AOP(面向切面编程)ClassPathXmlApplicationContext============>通过加载主配置文件的相对路径,获取spring容器。3.1.加载spring核心配置文件,获取spring容器对象。
2024-08-06 19:50:01
791
原创 MyBatis的基本注解
"主键属性", resultType = 结果类型, before = true )说明:每个@Results可以包含多个@Result,其中通过id属性来判断是否为主键。FetchType.EAGER:即时加载,FetchType.LAZY:延时加载。FetchType.EAGER:即时加载,FetchType.LAZY:延时加载。column = "字段", property = "属性" ) })结果映射注解:实现结果的映射关系,也可以完成级联映射。脚本sql:XML配置方式的动态SQL,是用。
2024-08-05 19:41:10
278
原创 MyBatis动态代理和映射器
在接口中有方法的返回值定义,参数的定义,方法名,在sqlMapper.xml 中也对应这接口给予了赋值,这时候dao的实现类就显得多余,这是Mybatis可以帮助我们自动产生实现类,并可以调取方法得到结果,这就是Mybatis的mapper动态代理指多个对象之间的映射关系,建立数据之间的级联关系提高管理效率。
2024-08-01 20:02:21
855
原创 学习Mybatis及其简单配置
ORM 模型是数据库的表和简单 Java 对象(Plain Ordinary Java Object,简称 POJO)的映射关系模型,主要解决数据库数据和 POJO 对象的相互映射。Java对象:pojo对象:简单的java对象,实际就是普通的javaBeans配置分为:类与数据库中表的映射,对象与表中记录的映射,类的属性与数据库中表的字段的映射数据库:按照数据库结构来组织,存储和管理数据的仓库,ORM模式中最底层的内容Hibernate:是一个全自动的orm模型,可以自动生成sql语句,自动执行。
2024-07-31 20:02:50
805
原创 Mongodb(非关系型数据库)的简单学习和基础语法
1.MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。2.如果负载的增加,它可以分布在计算机网络中的其他节点上这就是所谓的分片。3. MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。4.你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。1. MongoDB 不支持事务2. MongoDB 不能进行多表联查无需要跨文档或跨表的事务及复杂的join查询支持敏捷迭代的业务,需求变动频繁,数据模型无法确定。
2024-07-30 18:52:46
813
原创 事务、函数和索引
事务(Transaction),就是将一组SQL语句放在同一批次执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行特点:一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到该事务开始之前的状态。限制:MySQL数据库中仅InnoDB和BDB类型的数据库表支持事务为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行。
2024-07-27 17:00:23
697
原创 MySQL数据库的DQL的高级数据查询语句
SELECT * FROM 表1,表2select * from 表1,表2 where 表1.字段1=表2.字段2...
2024-07-25 19:40:54
1152
原创 mysql对数据库的增删改
select [distinct] {*\表.*} from 表1 [left\right\inner join 表2 on 表之间关系] [where] [group by] [having] [order by] [limit {[位置偏移量]行数}]是SQL语句中最核心、最重要的语句,也是使用频率最高的语句。insert into 表名 (字段名,字段名,...,字段名) values/value (值,...,值)select * from 表名 where 字段 in (值1,值2...);
2024-07-23 20:14:02
1334
原创 初学MySQl简单sql语句(1)
SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。名词解释命令DDL(数据定义语言)定义和管理数据对象,如数据库,数据表等DML(数据操作语言)用于操作数据库对象中所包含的数据DQL(数据查询语言)用于查询数据库数据SELECTDCL(数据控制语言)用来管理数据库的语言,包括管理权限及数据更改。
2024-07-23 18:56:29
906
原创 Shell的正确使用
Shell 一个命令解释器,它接收应用程序/用户命令,然后调用操作系统内核。Shell还是一个功能强大的编程语言,易编写、易调试、灵活性强。Linux提供的Shell解析器有:Centos 默认的Shell解释器是bash命令:echo $SHELL(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写(2)等号两侧不能有空格(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算(4)变量的值如果有空格,需要使用双引号或单引号括起来。
2024-07-19 19:05:37
978
原创 Linux如何正确安装MySQL数据库
对于Linux安装mysql,如果大家有不会的可以来参考小编的详细安装步骤哦,小编带你一步步走向成功~然后静静等待下载下载完后我们使用命令检查本目录下是否有mysql:看到后我们将进入接下来的步骤接下来我们需要创建用户:先进入目录中,通过pwd命令查看当前目录是否在目录中,进入local目录,我们先创建mysql目录,然后再进入mysql目录中结果:通过ls可看到我们的解压缩文件:如果需要我们可以将解压缩文件改为mysql8更方便观看查找(可不用)
2024-07-18 17:01:47
416
原创 Linux的进程和权限的基本命令
如果需要在同一文件系统中创建多个等效的文件访问路径,且不希望因为删除其中一个而影响其他的使用,可以使用硬连接;- 硬连接:只有当所有指向该文件的硬连接(包括原始文件)都被删除时,文件的数据才会真正被删除。- 硬连接:与原始文件是平等的关系,删除其中一个硬连接,不影响其他硬连接和原始文件的使用。- 软连接:如果删除了原始文件,软连接将成为无效的链接,因为它指向的目标文件已不存在。- 软连接:是一个独立的文件,其中包含了指向目标文件的路径。date +"%Y-%m-%d %H-%M-%S" 格式化显示时间。
2024-07-16 19:55:58
661
原创 UDP传输文件和FTP传输文件
它包含了要发送或已经接收的数据,以及与数据相关的一些元信息,例如数据的目标地址(包括 IP 地址和端口号)或者数据的来源地址(在接收数据报时)。使用 UDP(用户数据报协议)传输文件不是一种常见和推荐的方式,因为 UDP 是无连接、不可靠的协议,不保证数据包的顺序和完整性。为每个数据块添加包头:包头中包含数据块的序号、总数据块数等信息,以便接收方重组文件。对象,可以指定端口来监听传入的数据报,或者不指定端口让系统自动分配可用端口。接收数据块:接收方接收到数据块后,根据包头中的序号将其存储在合适的位置。
2024-07-15 20:18:13
862
2
原创 Linux的初级简单命令
23、 将用户目录下的文件“1.c”移动到该目录的子目录“aaa”下,并覆盖该目录下的 2.c 文件。16、请用cp命令将/boot/目录下以vmlinuz开头的文件拷贝到/abc下。21、 将/usr/games 目录下的所有内容拷贝到/vivi/bbb 目录下。22、将用户目录下的文件“a.c”拷贝到该目录的子目录“program”下。24、 删除目录“~/program”下的所有后缀为”.c”的文件。7、如何查看/etc下的所有文件,并以人性化的长格式显示。注意的是如果文件不存在。
2024-07-15 19:51:45
1044
原创 客户端与服务端之间的通信连接
Socket(套接字)是在网络编程中使用的一种抽象概念,用于建立不同计算机之间的通信连接。Socket允许不同计算机上的应用程序通过网络进行数据交换。在Java编程中,Socket类是对套接字的抽象表示,提供了用于网络通信的接口。通过Socket类,可以实现客户端和服务器之间的通信,包括数据的发送和接收。在一个通信过程中,客户端和服务器端各自创建一个Socket对象,并通过这个Socket对象来进行通信。
2024-07-12 18:36:07
1003
原创 压缩文件的解析方式
java解析压缩文件,压缩文件中有zip格式和rar格式,格式不相同对应的方法就不同首先进行解压缩时,我们需要用到第三方库,分别是 slf4j-api-2.0.13.jar和junrar-7.5.5.jar。
2024-07-11 19:49:25
289
原创 HashMap和ConcurrentHashMap的区别
元素加入数组时,会自动判断数组长度是否超过给定区域,默认为0.75,如果超出,则进行扩容,扩容为原数组的2的幂次方,若原数组在内存中没有连续可用空间,则申请新的可用的连续空间,将旧的数组复制到新的地址,再将旧数组置空,等待回收。底层代码在操作数组时未加锁,在多线程环境下会导致数据覆盖之类,产生线程安全问题,所以在多线程环境下使用HashMap会抛异常。:底层代码在操作数组时加锁,保证线程安全,高并发情况下,线程安全,操作成员变量或局部变量都不需要单独加锁处理。:数组+链表+红黑树。与HashMap一致。
2024-05-19 21:31:56
210
原创 JavaEE企业开发新技术5
1、无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。2、每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。3、实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
2024-04-08 16:53:58
603
1
原创 JavaEE企业开发新技术4
控制反转,把对象创建和对象之间的调用过程交给Spring框架进行管理使用IOC的目的:为了耦合度降低解释:模仿 IOC容器的功能,我们利用 Map 集合存放需要的对象,并新建一个 conf.properties 文件存放信息,在获取对象之前解析ioc.properties 文件中的信息,利用反射技术将 conf.properties 文件中的内容通过 Class.forName 的形式解析为 Class 对象放入集合 map 中,这样每次获取对象都会从 map 中进行获取,不需要。
2024-03-25 15:56:24
959
原创 JavaEE企业开发新技术3
总结:通过反射的方式调用静态方法,invoke()方法的第一个参数并不和某一个具体的对象所关联起来,所以第一个参数赋为null。总结:getMethod得到的是指定的方法,第一个参数是得到方法的名称 ,第二个参数是方法带的参数的class类型。按名称得到某个特定的public方法(包括从父类或接口继承的方法)得到public方法(包括从父类或接口继承的方法)总结:拿到了所有共有的方法,包括从父类继承的方法。按名称得到某个特定的方法(不包括继承的方法)得到所有的方法(不包括继承的方法)
2024-03-21 18:34:16
1061
原创 JavaEE企业开发新技术2
Class.gelFields()可以得到Class对象的所有字段,返回Field数组。Class.getField(String name)返回一个 Field 对象,它可以指定公有成员字段。Field的对象所代表的某一个类的属性,而不是那个类的某一个对象的属性。要得到某个对象对应的属性值,需要通过get(0bject obj)方法与某个对象具体关联。对于非公有属性只能通过Class的方法得到,可以指定非公有成员字段。对于私有属性要得到它所关联到的对象的值,需要用到Field的。
2024-03-11 18:05:59
795
原创 JavaEE企业开发新技术1
而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象。Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。Class类定义了一系列方法来获取java类的属性、方法、构造方法、包等信息,这些信息都有相应的来表示,分别是Field、Method、Constructor、Package等。Java当中的类用来表示具有相同属性和方法的对象的结合,是抽象的概念。
2024-03-08 18:16:40
1161
1
原创 String字符串的常见方法总结
(8)、lastIndexOf() 返回字符串的位置(从右向左查看)(7)、indexOf() 返回字符串的位置(从左向右查看)(11)、toLowerCase() 转换为小写。(12)、toUpperCase() 转换为大写。(16)、isEmpty() 判断是否为空字符串。(2)、equals() 比较是否相等。(6)、contains() 是否包含。(1)、length() 字符串长度。
2024-02-24 21:51:57
414
1
原创 String为什么是不可变的
String类的保存字符串的数组被final修饰且私有,保证了String类没有提供修改这个字符串的方法,当String类型的值被修改时,都是在方法内部重新新建的String类型对象,并且返回这个新的对象,原来的对象是不会被改变的。String是由final关键字修饰的类不能被继承,避免了破环String类的不可变,它的成员变量value也是用final关键字修饰的,保证了value的引用地址不可变,但里面的具体元素可以被改变。
2024-02-23 14:35:59
485
原创 数组常见算法代码总结
算法是一种简单的算法,它主要是通过不断交换相邻元素,使得数组中最大元素通过交换移动到最后位置,然后重复上面操作将第二大元素移动到最大元素前一个位置,等等最后完成数组的有序。方法2是单指针查找,通过for遍历数组中的每一个元素,在通过与目标元素比较是否相等来查找元素。2、将中间元素与目标元素进行比较,如果中间元素等于目标元素,则返回中间索引位置,3、如果中间元素大于目标元素,则目标元素位于前半部分,高位则等于中间减1,4、如果中间元素小于目标元素,则目标元素位于后半部分,低位则等于中间加1,
2024-02-22 13:56:22
573
1
原创 Arrays工具类的常用方法
该方法适用于对象型数据的数组(String,Integer...),不适用于基本数据类型数组(int,long...)里面的参数是基本数据类型,包含要查找元素的数组,从指定下标开始(可省略),到指定下标结束(可省略),最后是目标元素。参数可以是long,float,double,int,boolean,byte,object型的数组。用于复制指定数组内容以达到扩容的目的,该方法返回的数组是一个新的数组对象,不会影响原来的数组。第二个参数:指要复制的长度,如果长度超过目标数组则超过的数为默认数值。
2024-02-20 10:42:54
1085
原创 数值类型的运算方式总结
整数类型在内存中保存在一个固定长度的空间,它能存储的最大值和最小值是固定的,如果我们存储的值大于或小于它的范围,则产生整数溢出,产生一个非正常数值。二进制整数整体右移n位,正数高位补0,负数高位补1,右移n位相当于将一个数除以2的n次方并取整。采用异或运算(^):真真为真,假假为假,真假为真,两个数字异或相同为0,不同为1。或运算:两个二进制对应位上的数字有一个为1时,结果位上的数字就为1;对二进制的每一位都取反,1取反为0,0取反为1,数字交换:(运行结果:a=11,b=2)3的二进制表示:0011。
2024-02-17 14:14:54
442
1
原创 集合框架——map集合
List集合是一种单列集合,是一种顺序列表,而map是一种键值对集合,用key和value表示,就比如根据名字查找对应的歌曲,名字就是key,歌曲就是value,即通过特定的关键信息查找对应的值用List依次遍历查找效率非常低,而map这种(K-V)键值对数据结构,作用就是能高效的通过key来找到对应的value。HashTable : 特点:无序,线程安全,性能低,不允许null做key,不允许null做value(会导致空指针异常)数据结构:数组+链表+红黑树。数据结构:数组+链表。
2024-02-07 13:45:05
461
1
原创 集合框架——list集合
能,却比数组方便,当我们设定数组时需要规定一定的长度,但当我们需要增加数组长度时,便会比较麻烦,一次次的手动增加数组长度,且数组在某个位置进行增加时,需要将其他元素都向后移动才能给增加的元素腾位置,或者删除某个元素时,需要将其后面的元素都向前移动,这种数组的实现非常麻烦。list集合是一种有序列表,它和数组相似,用来保存数据,list的内部按照放入元素的顺序来保存元素,每个元素可以通过自己的索引来确定位置,和集合的下标来获取元素一样,索引也从0开始。特点:适合插入,删除。list集合和数组有着相似的功。
2024-02-06 12:30:11
565
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人