- 博客(48)
- 收藏
- 关注
原创 2024金三银四java面试这一篇就够了(干货)
1、简单易学、有丰富的类库 2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高) 3、与平台无关性(JVM是Java跨平台使用的根本) 4、可靠安全 5、支持多线程新建(new):新创建了一个线程对象。可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权。运行(running):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。
2024-01-24 15:33:38 11151 8
原创 Docker安装常用软件集合
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器。进入容器修改:docker exec -it 1e12f8dd3efd /bin/bash。通过命令source /etc/profile让profile文件立即生效。通过命令source /etc/profile让profile文件立即生效。测试:安装分词词库是否可以使用!第五步:测试是否安装成功。
2024-01-24 15:19:01 1255
原创 mysql主从同步简单理解
想一下每个用户都通过控制层业务层调用服务器数据,用户量小还好说,用户量大的话轻则用户体验极差,重则数据库崩溃甚至数据丢失,那真的就是很严重的事情了。许多大型网站为了减轻海量用户对于服务器并发访问量的性能问题,会使用很多解决的方案,从服务器执行主服务器的同步操作也要一步一步的来,可以类比生产者消费者案例,主从那长话短说就是,一台服务器我处理不了就用几台服务器咯,所以需要同步到从服务器日志中一步一步的同步执行。数据库主从分离,就是目前主流的一种解决手段。如何解决,解决方案之一就是主从分离。
2024-01-22 13:50:16 405
原创 springboot整合spring data elasticsearch
jpa可以自定义接口查询,也就意味着自己在mappe按照要求写一个方法,service只需要调用传值就可以了。
2024-01-17 10:16:34 711
原创 springboot整合spring data jpa
自动生成的表的存储引擎是MyISAM,此引擎不支持事务,需要该为InnoDB,创建hibernate.properties配置文件添加以下配置。删除表重写启动服务器。
2024-01-17 10:09:45 463
原创 DBeaver安装步骤
DBeaver 是一个基于 Java 开发,免费开源的通用数据库管理和开发工具,使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。由于 DBeaver 基于 Java 开发,可以运行在各种操作系统上,包括:Windows、Linux、macOS 等。DBeaver 采用 Eclipse 框架开发,支持插件扩展,并且提供了许多数据库管理工具:ER 图、数据导入/导出、数据库比较、模拟数据生成等。
2024-01-16 16:16:54 1376
原创 Redis和MySQL如何保持数据一致性
在高并发应用场景下,如果是对数据一致性要求高的情况下,要定位好导致数据和缓存不一致的原因。解决高并发场景下数据一致性的方案有两种,分别是延时双删策略和异步更新缓存两种方案。另外,设置缓存的过期时间是保证数据保持一致性的关键操作,需要结合业务进行合理的设置。
2024-01-16 16:12:21 1016
原创 高并发缓存问题分析以及分布式锁的实现
经过分析发现分布式锁的实现在一定程度上还是会存在一系列的问题,通过这些问题的解决可以在很大程度的避免数据不一致的情况,关于分布式锁的实现可以抽取为模板,有业务场景需要的时候二次修改复用即可.
2024-01-16 16:07:08 2399
原创 springboot整合quartz
Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。Quartz是一个任务日程管理系统,一个在预先确定(被纳入日程)的时间到达时,负责执行(或者通知)其他软件组件的系统。Quartz用一个小Java库发布文件(.jar文件),这个库文件包含了所有Quartz核心功能。
2024-01-03 14:05:56 494
原创 springboot整合spring-security(权限框架)
前面我们的登录页面都是使用的SpringSecurity默认的,我们可以在配置类中修改成我们自定义的登录页面这里的name属性默认是username和password,这里我们采用自定义的方式,/login是SpringSecurity默认的处理登录的Controller用户名:密码:
2024-01-03 09:50:38 965
原创 springboot整合gateway网关
API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:(1)客户端会多次请求不同的微服务,增加了客户端的复杂性。(2)存在跨域请求,在一定场景下处理相对复杂。(3)认证复杂,每个服务都需要独立认证。(4)难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通信,那么重构将会很难实施。
2023-12-28 18:19:59 4986 2
原创 springboot整合jwt做单点登陆生成token
但是其实只要用一些工具就可以把base64编码解成明文,所以不要在JWT中放入涉及私密的信息。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。JWT是这种解决方案的代表。主要是该JWT的相关配置参数,比如签名的加密算法、格式类型、过期时间等等。userInfo{用户的Id,用户的昵称nickName}用户自定义的内容,根据实际需要真正要封装的信息。
2023-12-28 15:48:00 780
原创 springboot整合minio做文件存储
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。旧一点新。
2023-12-27 19:46:19 2090
原创 springBoot整合redis做缓存
Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,Redis数据都是缓存在计算机内存中,不同的是,Memcache只能将数据缓存到内存中,无法自动定期写入硬盘,这就表示,一断电或重启,内存清空,数据丢失。所以Memcache的应用场景适用于缓存无需持久化的数据。
2023-12-27 19:35:45 1695
原创 软件架构的演进过程
全部功能集成在一个工程中,对于大型项目不易开发、扩展和维护。技术栈受限,只能使用一种语言开发。系统性能扩展只能通过扩展集群节点,成本高。
2023-12-26 09:40:55 1213
原创 设计模式---中介者模式
一般来说,在软件开发中,类之间的关系是非常复杂的,往往每个类中都有很多其他对象的引用,形成一张复杂的网状结构,显得非常混乱,软件6大设计原则的迪米特法则告诉我们,一个类应尽可能的少于其他类发生交互,尽量提供一个中间类来完成,那么我们的中介者模式就是迪米特法则最好的实现。中介者模式是行为型设计模式的一种,它的原始定义是:定义一个单独(中介)的对象,来封装一组对象之间的交互,将这组对象之间的交互委派给中介对象交互,避免对象直接交互。
2023-12-21 23:16:15 1173
原创 设计模式----解释器模式
解释器模式使用频率并不高,通常用来构建一个简单语言的语法解释器,它只在一些非常特定的领域被用到,比如编译器、规则引擎、正则表达式、sql解析等。解释器模式是行为型设计模式之一,它的原始定义为:用于定义语言语法规则表示,并提供解释器来处理句子中的语法。我们通过一个例子来解释下解释器模式,假设我们设计一个软件来进行加减计算,我们第一想法就是使用工具类,提供对应的加法和减法的工具方法。return a+b;......
2023-12-21 21:11:06 974
原创 设计模式---命令模式
命令模式属于行为型设计模式的一种,它的原始定义为:命令模式将请求(命令)封装为一个对象,这样可以使用不同的请求(命令)封装参数化对象(将不同请求依赖注入到其他对象),并且能够支持请求命令的排队执行、记录日志、撤销等功能。命令模式的核心是将指令信息封装成一个对象,并且将此对象作为参数发送 给接收方去执行,达到使命令的请求与执行方解耦,双方只通过传递各种命令对象来完成操作。在实际开发中,如果你用到的编程语言并不支持用函数作为参数来传递,那么就可以借助命令模式将函数封装为对象来使用。
2023-12-20 21:35:15 815
原创 设计模式----备忘录模式
①提供了一种状态恢复的实现机制,使得用户可以方便的回到一个特定的历史步骤,当新的状态无效或者存在问题的时候,可以使用暂时存储起来的备忘录,将状态复原。②备忘录实现了对信息的封装,一个备忘录对象是一种发起者状态的表示,不会被其他代码所改动,备忘录保存了发起者的状态,采用集合存储备忘录可以实现多次撤销的操作。
2023-12-19 23:00:00 395
原创 设计模式----访问者模式
①扩展性好:在不修改对象结构中元素的情况下,为对象结构中的元素添加新的功能。②复用性好:通过访问者来定义整个对象结构的通用功能,从而提高复用程度③分离无关行为:通过访问者来分离无关行为,把相关的行为封装在一起,构成一个访问者,这样每一个访问者的功能都比较单一。
2023-12-19 10:16:04 827
原创 设计模式----迭代器模式
迭代器模式是我们平常开发中很少用到的一种设计模式,但编码实现时却经常实现,在绝大多数编程语言中,迭代器已经成为一个基础类库,直接用来遍历集合对象,在平常开发中,我们更多的是直接使用它,而不是从零实现一个迭代器。迭代器模式是行为性设计模式之一,又叫游标模式,它的原始定义为:迭代器提供一种对容器对象中的各个元素进行访问的方法,而又不需要暴漏该对象的内部细节。在软件系统中,容器对象拥有两个职责,一是存储数据,二是遍历数据。从依赖性上来看,前者是聚合对象的基本职责,而后者是可以变化的,又是可以分离的。
2023-12-18 21:24:22 392
原创 设计模式----状态模式
①将所有与某个状态有关的行为放到一个类中,并且可以方便的增加新的状态,只需要改变对象的状态即可改变对象的行为。②允许状态转换逻辑与状态对象合成一体,而不是某个巨大的条件语句块。
2023-12-18 00:28:23 135
原创 设计模式-------责任链模式
责任链模式是行为型模式的一种,它的原始定义是:避免将一个请求发送者与接收者耦合在一起,让多个对象都有机会处理请求,将接收请求的对象连城一条链,并且沿着这条链传递请求,直到有一个对象能够处理它为止。在责任链模式中,多个处理器(也就是定义中说的接收对象)依次处理同一个请求, 一个请求先经过A处理器处理,然后交由B处理器处理,B处理器处理完在交给C处理器,依此类推,链条上的每个处理器各自承担各自的处理职责,所以叫做职责链模式。①降低了对象之间的耦合度:该模式降低了请求者和发送者的耦合度。
2023-12-14 22:23:04 74
原创 设计模式----策略模式
①策略类之间可以自由切换,由于策略类都是实现同一个接口,所以使他们之间可以自由切换②易于扩展,增加一个新的策略只需要新增一个类实现策略类即可,基本不改变原有代码,符合开闭原则③避免使用多层if--else,充分体现面向对象设计思想。
2023-12-14 20:09:24 87
原创 设计模式-------监听者模式
监听者模式时行为型设计模式的一种,他的原始定义为:定义对象间一对多依赖关系,这样当一个对象改变时,他的所有依赖项都会自动的得到通知和更新。简而言之观察者模式她是用于建立一中对象与对象之间的依赖关系,一个对象发生改变时将自动通知另一个对象。①降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系②被观察者发送通知,所有注册的观察者都会收到消息【可实现广播机制】
2023-11-28 22:29:43 300
原创 设计模式-----模版方法模式
①在父类中形式化的定义一个算法,而由他的子类来实现细节处理,在子类实现详细的处理代码时,并不改变父类算法中步骤的执行顺序。②模版方法可以实现一种反向的控制结构,通过子类覆盖父类的钩子方法来决定某一个类特定步骤是否需要执行③在模版方法模式中可以通过子类来覆盖父类的基本方法,不同的子类可以提供基本方法的不同实现。更换和增加新的子类很方便,符合单一职责和开闭原则。
2023-11-27 21:38:56 38
原创 设计模式-----享元模式
优点1、减少对象的创建 ,降低内存中对象的数量 ,降低系统的内存 ,提高效率;2、减少内存之外的其它资源占用。缺点:1、关注内、外部状态、关注线程安全问题;2、使系统、程序复杂化。享元模式其实就是工厂模式的一个改进机制,享元模式同样要求创建一个或一组对象,并且就是通过工厂方法生成对象的,不同的地方在于享元模式增加了缓存的功能。主要的使用场景:当程序中需要创建大量的相似对象时,可以使用享元模式来共享相同的内部状态,减少对象的重复创建,节省内存开销。
2023-11-27 16:07:39 71
原创 设计模式-----组合模式
组合模式的定义是:将对象组合成树形结构以表示正规部分的层次结构,组合模式可以让用户统一对待单个对象和对象组合。透明组合模式中,抽象根节点角色中声明了所有用于管理1对象成员的方法,比如类图中声明了add,remove,getChildren方法,这样做的好处是确保所有构件类有相同的接口,透明组合模式也是组合模式的标准形式.
2023-11-26 13:09:34 62
原创 设计模式------外观模式
外观模式属于结构性模式的一种,它隐藏了系统的复杂性,提供统一的接口供外部调用,这个接口可以使子系统更容易得被使用和访问,简而言之就是将几个细粒度的类或系统组合成一个粗粒度的统一外观者,由外部调用,外观者可以灵活的进行组合以及可以有多个外观者。要点:1. 外观模式为复杂子系统提供了一个简单接口,并不为子系统添加新的功能和行为。2. 外观模式实现了子系统与客户之间的松耦合关系。3. 外观模式没有封装子系统的类,只是提供了简单的接口。如果应用需要,它并不限制客户使用子系统类。
2023-11-24 15:45:50 56
原创 设计模式------适配器模式
适配器模式是结构性设计模式之一,它的原始定义是将类的接口转换为客户期望的另一个接口,适配器可以让两个不兼容的类一起协同工作。适配器有两种:①类适配器:使用继承关系实现,耦合度高②对象适配器:使用组合关系实现,耦合度低①将目标类和适配者类进行解耦,通过引入一个适配器类来重用现有的适配者类,无需修改原有结构②增加类的透明性和复用性,将具体业务实现过程封装在适配器类中,对于客户端而言是透明的,而且提高了适配者的复用性,同一个适配类可以在多个不同的系统中复用。
2023-11-24 11:07:13 82
原创 设计模式------装饰者模式
装饰者模式是结构性模式之一,它可以在不改变原有功能的基础上将新的功能扩展到对象上,它提供了比继承更有弹性的替代方案,它的核心是功能扩展,使用装饰器模式可以透明且动态的扩展功能。装饰器模式可以动态给对象添加一些额外的职责从而实现功能的拓展,在运行时选择不同的装饰器,从而实现不同的行为;比使用继承更加灵活,通过对不同的装饰类进行排列组合,创造出很多不同行为,得到功能更为强大的对象;符合“开闭原则”,被装饰类与装饰类独立变化,用户可以根据需要增加新的装饰类和被装饰类,在使用时再对其进行组合,原有代码无须改变。
2023-11-23 15:47:13 50
原创 设计模式------桥接模式
桥接模式定义:将抽象部分与实现部分分离,使他们都可以独立的变化。桥接模式用一种巧妙的方式处理多层继承问题。用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使的系统更加灵活,有效的控制了系统中类的个数。
2023-11-22 23:13:14 56
原创 设计模式------代理模式
在软件开发中,由于一些特殊的原因,客户端不能访问或者不能直接访问一个类,需要引入一个中间角色来完成操作,此种方式便叫做代理模式。代理模式原始的定义是:让你能够提供对象的替代品或者占位符,代理对象控制着对原始对象的访问,并允许将请求提交给对象前后进行一些处理,通俗的来说代理模式就是在不改变源代码的基础上,对类进行增强,Spring框架的aop就是通过代理实现的。
2023-11-22 11:16:52 58
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人