自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 微服务架构-springcloud

将项目所有模块(功能)打成jar或者war,然后部署一个进程.优点: 1:部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可。2:技术单一:项目不需要复杂的技术栈,往往一套熟悉的技术栈就可以完成开发。缺点: 1:系统启动慢,一个进程包含了所有的业务逻辑,涉及到的启动模块过多,导致系统的启动、重启时间周期过长;2:系统错误隔离性差、可用性差,任何一个模块的错误均可能造成整个系统的宕机;3:可伸缩性差:系统的扩容只能只对这个应用进行扩容,无法结合业务模块的特点进行伸缩。

2024-08-06 16:32:02 964

原创 Java Iterator级线程面试题

迭代器取代了Java集合框架的枚举,迭代器允许调用者在迭代的过程中移除元素。Iterator的特点是更加安全,因为它可以确保,在当前遍历的集合元素被更改的时候,就会抛出ConcurrentmodificationException 并发修改异常。枚举简称enum,是一种特殊的数据类型,它也许程序员定义一个变量,该变量可以是预定义常量池的其中一个。Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。1.提高代码的可读性,提高代码的可维护性3.类型安全。

2024-07-29 21:00:29 446

原创 springbootsecurity整合thymeleaf

INSERT INTO `sys_user` VALUES (1, '张三', '$2a$10$cI7e7bgSs9.9nNHhxKO9LuK/Ll.AeZwgUyZb77oD2y3UwwZyZhWG6', '男', '郑州');INSERT INTO `sys_user` VALUES (2, '李四', '$2a$10$cI7e7bgSs9.9nNHhxKO9LuK/Ll.AeZwgUyZb77oD2y3UwwZyZhWG6', '男', '北京');//表示除了上方的路径其他都需要登入。

2024-07-29 20:27:24 920

原创 Java集合面试题

LinkedList:基于链表,可以储存在分散的内存中,适合对元素进行插入或删除等操作,不适合查询,因为需要逐一遍历,遍历LinkedList必须使用iterator,不能使用for循环,因为每次通过for循环体get(i)获取某一数据时都会对list进行重新遍历,性能消耗极大。扩容机制:因数组长度固定,数据超出数组长度时会建立新数组,如果不是尾部插入法还会涉及到元素的移动,使用尾部插入法并指定初始容量可以极大的提高性能,甚至超过LinkedList。而 ArrayList 是非线程安全的。

2024-07-27 17:27:44 227

原创 redis面试题

缓存穿透:查询的数据在数据库中不存在缓存中也不存在,这时候有人恶意访问这种数据,请求到达数据库。解决方案:第一步:在controller校验数据。对一些不合法的数据过滤。第二步:使用布隆过滤器。第三步:存放一个空对象,并设置过期时间不能超过5分钟。缓存击穿:数据库存在,但是缓存中该数据过期了。这时候有大量的请求访问过期的数据。压力顶到数据库。解决方案:1.使用互斥锁 2.设置永不过期。缓存雪崩:当缓存服务器重启或者大量缓存数据集中某一段时间失效,这样失效的时候,也会给后端系统(比如数据库。

2024-07-26 15:33:59 638

原创 redis的使用场景-热点数据缓存

把一些经常访问的数据放入缓存中,减少访问数据库的频率,减少数据库的压力,从而提高程序的性能。【内存中存储】

2024-07-25 20:15:28 1412

原创 Java实现短信验证码服务

上面的一些属性没有直接写到代码中,而是模拟真实的开发场景,写入application.yml配置文件中,通过定义一个类,然后指定配置文件,在阿里配置类中注入改实体类对象。// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi。

2024-07-25 19:30:32 1144

原创 Java基础面试题

equals是object类中的方法,默认情况下,Object中的equals方法是比较两个对象的引用是否相等,等价于==操作符。不一定,hashcode相等,他们的equals不一定相等,HashCode相等即两个键值对相等,hash值相等则两个键值对不一定相等。JDK : Java Develoment Kit 的简称,Java开发的工具包,提供了Java的开发环境和运行环境。表示四舍五入的方法,等于-1,因为在数轴上取值时,中间值(0.5)向右取整,正数向上取整,负数直接舍弃。

2024-07-24 09:29:49 419

原创 redis集群模式

redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个整数结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。redis主从模式表示一个主节点若干个从节点,主节点负责写和读的操作,从节点负责读的操作,主节点的数据会同步到从节点。为了解决主从模式的问题,主节点宕机后无法选举主节点。

2024-07-23 18:54:11 871

原创 reids的持久化方式

想把内存中的数据存储到磁盘中的过程,同时也可以磁盘中的数据加载到内存中。

2024-07-22 14:58:17 361

原创 Maven项目:【maven】:找不到或无法加载主类

【代码】Maven项目:【maven】:找不到或无法加载主类。

2024-07-19 16:23:08 115

原创 redis 基础命令

redis支持的数据类型有很多,使用最频繁的有String 字符串类型,List队列,Hash,Zset有序集合,Set集合。1. lpush key value value ....: 将一个或多个值插入到列表的头部。setnx key value:如果key存在则不设置,不存在则存入。hget key filed: 获取存在hash表指定的value值。hgetall key : 获取在hash表中指定的所有字段和值。get key: 获取指定key对应的值。incr key:为指定的key递增。

2024-07-19 15:22:51 389

原创 nginx的核心功能

代理的为服务器端。对于客户来说不知道服务器的信息。例如: nginx。

2024-07-19 08:31:58 636

原创 localhost.localdomain firewalld[70156]: ERROR: INVALID_PROTOCOL: 8080/tcp

Centos7防火墙报错放行端口号是时防火墙报错开始以为是端口被占用,于是找遍了端口都没有使用8080这个,然后重新使用手动放行端口号firewall-cmd --add-prot=端口号/tcp --zone=public --permanent发现还是不行,就在一筹莫展的时候突然发现。

2024-07-16 11:35:37 127

原创 String类的常用方法

使用StandardCharsets类,不会声明异常。不带参数的getBytes。该方法可以配合多种方法使用。

2024-07-16 10:47:14 148

原创 NAT网络和桥接网络有什么区别?

NAT:(Network Address Translation,网络地址转换)模式:虚拟机不能直接触碰到外部的网络,所有的网络连接请求都是由宿主机进行转发。这种方式的优点是设置简单,可以在没有额外IP地址的情况下使用。缺点就是虚拟机不能作为服务器提供服务,因为他没有自己的公网IP地址。桥接模式:在这种模式下,虚拟机直接连接到宿主机所在的物理网络,它会从网络中获取自己的IP地址,就像是网络中的一台独立的计算机。但是,这种模式需要在网络上有足够的IP地址供虚拟机使用。

2024-07-16 09:35:13 130

原创 Java基础面试题

重载:发生在一个类中,同名的方法如果有不得参数列表(类型不同,个数不同,参数不同)视为重载。重写:重写发生在子类与父类之间,子类重写父类的方法与被重写的方法返回相同的返回类型,比父类的方法更好的访问,且不能比父类声明更多的异常。

2024-07-15 11:05:33 830

原创 Java关于springboot面试题

springboot是为spring服务的,是为了简化spring初始搭建以及开发过程的作用:1.配置简单2.自动装配3.独立运行4.无代码生成和xml配置5.易上手6.提供应用监控7.提升开发效率。

2024-07-11 21:25:45 120

原创 springboot 配置文件 整合第三方框架

端口号默认是8080,也可以使用application.yaml,这里使用的是application.properties,properties优先级要高于yaml 如果两个配置文件内容不同,程序会选择两个配置文件的内容。加入mybatis整合springboot jar包 注意版本要兼容。注意这里使用lombok代替手写get set方法。接下来我们利用之前所学的技术对一个表进行增删改查。在主启动类加入扫描dao层驱动。加入mysql依赖jar包。

2024-07-11 21:08:06 102

原创 Java关于设计模式的面试题

模板方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类在不改变算法结构的前提下重新定义算法的步骤。观察者模式:定义了对象一对多的依赖,这样一来,当一个对象改变时,他的所有依赖者都会收到通知并且自动更新。外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。代理模式:代理模式给某一个对象提供一个代理对象,由代理对象控制对原对象的引用。代理模式::静态代理,JDK动态代理、Cglib动态代理。工厂模式:简单工厂、工厂方法模式、抽象工厂。

2024-07-10 08:56:48 198

原创 Java常用的设计模式

这种类型的设计模式属于行为型模式。案例分析:1.取材2.处理食材3.起锅烧油4.放入食材5.翻炒6.放入各种调料7.翻炒均匀8.出锅炒菜接口测试类优点:1、封装不变部分,扩展可变部分。2、提取公共代码,便于维护。3、

2024-07-09 19:49:59 199

原创 代理模式的三种实现方式

三种代理模式各有优缺点和相应的适用范围,主要看目标对象是否实现了接口。以Spring框架所选择的代理模式举例在Spring的AOP编程中: 如果加入容器的目标对象有实现接口,用JDK代理 如果目标对象没有实现接口,用Cglib代理。

2024-07-09 19:34:47 470

原创 Java线程秒杀任务

假如某网上商城推出活动,新上架10部新手机免费送客户体验,要求所有参与活动的人员在规定的时间同时参与秒杀挣抢,假如有20人同时参与了该活动,请使用线程池模拟这个场景,保证前10人秒杀成功,后10人秒杀失败;1:既然商品总数量是10个,那么我们可以在创建线程池的时候初始化线程数是10个及以下,设计线程池最大数量为10个;2:当某个线程执行完任务之后,可以让其他秒杀的人继续使用该线程参与秒杀;2:编写主程序类,创建20个任务(模拟20个客户);3:创建线程池对象并接收20个任务,开始执行任务;

2024-07-09 09:55:44 258

原创 关于线程池的两种创建方式

不同点:execute属于Excute类中的方法,而submit属于ExcutirService接口中的方法,而且submit可以执行Runable和Callable类型的任务,而execute只能执行Runable类型的任务,submit执行完任务有返回结果。使用场景:适用于需要大量处理短期任务的线程场景,如异步请求,服务器后台处理任务等。该线程池只有一个线程,适用于需要按任务执行线程场景,保证任务的顺序性。特点:可以动态调整大小的线程池,根据任务数量自动增加线程数量。

2024-07-09 09:41:27 1409

原创 Java线程基础面试题

当线程A独占线程a,并尝试独占线程b,线程B独占线程b,双方都互相持有对方需要的锁,就会造成死锁。1.尽量减少同步代码块2.降低使用粒度,不要几个功能使用同一把锁3.尽量使用 Java.util.concurrent并发类代替自己手动写锁4.尽量使用trylock的方法,设置超时时间,超出时间时可以退出防止死锁。

2024-07-04 20:01:19 295

原创 Java关于线程的面试题

进程:指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。线程:系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。是程序执行的最小单位。

2024-07-03 20:03:10 167

原创 手撕orm框架

该方式可以轻松的拿到子类的反射类,接着就可以获取子类中方法和属性的参数类型,然后通过拼接SQL语句实现操作,最后在调用DbUtil中的getConnection()方法进行加载SQL语句并返回相应的条数,以上就是手写orm框架的全部内容啦。以上使用静态方法是为了重复加载,static就是为了保证只被加载一次。应该根据需求填写相应的配置信息。这里就不给大家详细展示代码了。

2024-07-03 11:41:20 250

原创 关于反射的Java基础面试题

反射是Java的一种机制,允许在运行时获取类的信息,访问类中的属性和方法,以及调用类中的方法,使得编程变得更加灵活和可扩展,但是要注意安全和性能问题。以下情况需要使用Java序列化:想把一个对象的状态存储在一个文件或者数据库中;想通过套接字在网络上传送对象得时候;想通过RMI(远程方法调用)传输对象的时候动态代理就是运行时动态生成的代理类。应用场景:spring aop, rpc, Java注解等。

2024-07-03 11:19:10 206

原创 #{}和${}的区别?

在Java中, 和 这两个符号通常在MyBatis或类似的ORM(对象关系映射)框架中使用,而不是直接在Java语言中使用。这两个符号在MyBatis中用于参数替换,但它们的用途和语义是不同的。1.#{}#{}用于预编译的sql语句中的参数替换。Mybatis会为每一个#{}中的参数创建一个PreparedStatement的占位符(?),并设置相应的参数值。由于是预编译的,这样可以防止sql注入攻击。#{}中的参数名可以是Java对的属性名,也可以是Map中的Key。实例:2.${}在编写MyBatis

2024-07-01 20:26:02 233

原创 Java的八种基本类型以及包装类详细解析

2.Java八种数据类型字节数:分别为1、2、4、8个字节(byte、boolean)、2字节(short、char)、4字节(int、float)、8字节(long、double);八种分为byte、short、int、long、float、double、boolean、char;4.八种数据类型的包装类:除了char的是Character、Int类型的是Integer,其他都是首字母大写;5.关于值的范围问题,需要注意char类型是无符号的,不能为负,所以从0开始;1.1类型的字节,范围,等如图所示。

2024-07-01 19:01:25 102

原创 线程池的五种状态

状态说明:当所有任务已经终止,ctl记录的“任务数量为0",线程池会变为TIDYING状态。当线程池变为TIDYING状态时,会执行构造函数termainated()。状态说明:当线程池处于STOP状态时,不能接收新任务,不能处理已添加的任务,并且终止正在处理了的任务.状态说明:当线程池处于SHUTDOWN时,不能接收新任务,但是可以处理已经添加的任务。状态说明:当线程池处于Running状态时,能够添加新任务,并且处理已添加的任务。状态说明:线程池彻底终止就会变成TERMINATED状态。

2024-07-01 18:37:25 151

原创 什么是反射

反射是框架的灵魂,我们常见的框架mybatis mybatis-plus,spring,spring-boot,spring-cloud微服务框架都是通过反射实现的,反射就是类在运行期间,把类中的成员变量抽取为其他的过程就是反射。反射的作用:1.运行时探查类的信息:反射允许我们在运行时加载,检查和使用类,甚至可以在运行时获取一个未加载的类。2.动态创建数组:使用反射可以实现动态的创建对象,而且可以选择任意一个构造函数来创建对象实例。

2024-07-01 15:16:57 211

空空如也

空空如也

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

TA关注的人

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