java
文章平均质量分 50
不写bug的程序媛
.....
展开
-
多对括号{},保留成对{},单个“{“ 或 “}“就过滤
多对括号{},保留成对{},单个"{" 或 "}"就过滤原创 2023-08-03 14:45:53 · 147 阅读 · 0 评论 -
java多层循环跳出所有循环
java多层循环跳出所有循环原创 2023-02-23 16:21:43 · 285 阅读 · 1 评论 -
两个实体类字段不同实现赋值 (MapStruct)
两个实体类字段不同实现赋值原创 2022-12-17 14:05:40 · 1542 阅读 · 0 评论 -
使用aop拦截自定义注解
使用aop拦截自定义注解校验访问权限原创 2022-12-01 17:54:46 · 2413 阅读 · 0 评论 -
java生成随机数的三种写法
java生成随机数的三种写法原创 2022-11-05 21:52:50 · 2113 阅读 · 0 评论 -
@ModelAttribute注解的使用
@ModelAttribute注解的使用原创 2022-10-19 11:42:41 · 209 阅读 · 0 评论 -
mysql 删除某一字段重复数据只保留一条
mysql 删除某一字段重复数据,保留id最大那一条原创 2022-10-10 11:26:15 · 837 阅读 · 0 评论 -
用Calendar代替SimpleDateFormat
用Calendar代替SimpleDateFormat原创 2022-09-08 11:57:49 · 170 阅读 · 0 评论 -
stream final 生成序号
steam流解决final值,但需要生成序号原创 2022-08-29 18:02:55 · 420 阅读 · 0 评论 -
idea git commit插件及注释模板修改
git commit template原创 2022-08-29 13:57:13 · 2489 阅读 · 0 评论 -
mysql唯一索引无重复值报错重复
mysql唯一索引 报错重复值(实际无重复)原创 2022-07-19 15:23:16 · 991 阅读 · 1 评论 -
记一次用微服务把自己坑死的案例
spring cloud feign调用报404原创 2022-07-05 16:34:35 · 281 阅读 · 0 评论 -
http 工具类
http工具类 亲测可用原创 2022-06-16 09:02:21 · 624 阅读 · 0 评论 -
redis实践学习
redis所有的key都是字符串。redis是用C语言实现的redis底层的数据结构和hashMap类似,用的数组+链表+红黑树解决哈希冲突,用的链表,用next指针指向下一个节点(头插法)1.高并发场景下对库存扣减,会出现重复扣减问题,用synchronized解决不了。如下代码synchronized (this){ int stock=Integer.parseInt(stringRedisTemplate.opsForValue().get("stock")); if(stock&g..原创 2022-03-05 13:20:43 · 849 阅读 · 0 评论 -
spring cloud面试题
1. 什么是 spring cloud?spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。2. spring cloud 断路器的作用是什么?在分布式架构中,断路器模式的作用也是类似的,当某个服务发生故障比如网络故障或者代码异常之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一原创 2022-02-26 21:52:05 · 321 阅读 · 0 评论 -
spring cloud config和springcloudBus消息总线
首先下载rabbitMQconfig是配置中心,多个配置中心用bus全局广播(通知其它的配置中心该配置文件已更新)这里使用第二种,利用消息总线触发一个服务端3344是服务端,yml配置文件:server: port: 3344spring: application: name: cloud-config-center #注册进Eureka服务器的微服务名 cloud: config: server: git: ur原创 2022-02-26 19:54:42 · 1298 阅读 · 0 评论 -
设计模式整理
开放封闭原则(Open Close Principle)原则思想:尽量通过扩展软件实体来解决需求变化,而不是通过修改已有的代码来完成变化描述:一个软件产品在生命周期内,都会发生变化,既然变化是一个既定的事实,我们就应该在设计的时候尽量适应这些变化,以提高项目的稳定性和灵活性。优点:单一原则告诉我们,每个类都有自己负责的职责,里氏替换原则不能破坏继承关系的体系。里氏代换原则(Liskov Substitution Principle)原则思想:使用的基类可以在任何地方使用继承的子类,完美的替换基类。原创 2022-02-26 17:43:57 · 118 阅读 · 0 评论 -
spring cloud(学习)--Hystrix
1.服务雪崩2、Hystrix介绍Hystrix 是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix 能够保证在一个依赖出问题的 情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。 “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应 (FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务.原创 2022-02-26 15:44:39 · 307 阅读 · 0 评论 -
redis面试题
缓存雪崩、缓存穿透、缓存击穿缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案:●缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。●给每一个缓存数据增加相应的缓存标记.记录缓存是否失效,如果缓存标记失效, 则更新数据缓存。●缓存预热●互斥锁缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承受大量请求而崩掉。解决方案:●接口层增加校验,如用户鉴权校验,id做...原创 2022-02-24 21:47:04 · 487 阅读 · 0 评论 -
spring cloud 学习--(consul)
consul是近几年比较流行的服务发现工具,工作中用到,简单了解一下。consul的三个主要应用场景:服务发现、服务隔离、服务配置。consul与Eureka的区别Consul强一致性(CP) 服务注册相比Eureka会稍慢一些。因为Consul的raft协议要求必须过半数的节点都写入成功才认为注册成功 Leader挂掉时,重新选举期间整个consul不可用。保证了强一致性但牺牲了可用性。Eureka保证高可用和最终一致性(AP) 服务注册相对要快,因为不需要等注册信息replica原创 2022-02-22 11:48:38 · 510 阅读 · 0 评论 -
spring cloud学习(二)-- feign
Feign能干什么 (服务接口绑定器)Feign旨在使编写Java Http客户端变得更容易。前面在使用Ribbon+RestTemplate时,利用RestTemplate对http请求的封装处理,形成了一套模版化的调用方法。但是在实际开发中,由于对服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以通常都会针对每个微服务自行封装一些客户端类来包装这些依赖服务的调用。所以,Feign在此基础上做了进一步封装,由他来帮助我们定义和实现依赖服务接口的定义。在Feign的实现下,我们只需创建一个接口.原创 2022-02-21 17:55:16 · 354 阅读 · 0 评论 -
linux命令
nslookupnslookup 这个命令在 有 ip 地址时,可以用这个命令来显示主机名,可以找到给定域名的所有 ip 地址。而你必须连接到互联网才能使用这个命令。你也可以使用 nslookup 从 ip 获得主机名或从主机名获得 ip。traceroute一个方便的工具。可用来查看数据包在提交到远程系统或者网站时候所经过的路由器的 IP 地址、跳数和响应时间。同样你必须链接到互联网才能使用这个命令。telnet通过 telnet 协议连接目标主机,如果 telnet 连接可以在任一端口上完成原创 2022-02-16 14:08:34 · 64 阅读 · 0 评论 -
Threadlocal
每一个Thread对象均含有一个ThreadLoca1Map类型的成员变量threadLocals,它存储本线程中所有ThreadLocal对象及其对应的值Threadlocal内存泄漏内存泄漏为程序在申请内存后,无法释放已申请的内存空间,不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露。强引用:使用最普遍的引用(new),一个对象具有强引用,不会被垃圾回收器回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。如果想取消强引...原创 2022-02-15 16:56:12 · 260 阅读 · 0 评论 -
WebSocket实现原理
websocket同http和https一样,属于tcp基础上的应用层的协议;需要三次握手四次挥手的过程一般来说,我们使用的http协议只能由客户端发起请求,而服务端无法直接主动进行数据推送,这就导致了如果服务端有持续的变化(如聊天室)而客户端获取起来较为复杂(如实时性和服务端压力等)。因此,websocket协议便应运而生 对于websocket协议来说,客户端和服务端都可以主动推送消息,其中消息内容可以时文本也可以是二进制数据。而且没有同源策略的限制,也不存在跨域问题 websocket协议原创 2022-02-14 22:27:15 · 1277 阅读 · 0 评论 -
TCP三次握手四次挥手和TCP/UDP区别
TCP/UDP区别TCP 是面向连接的可靠传输,UDP 是面向无连接的不可靠传输TCP 是面向字节流的,UDP 是基于数据报的TCP 保证数据正确性,UDP 可能丢包TCP 保证数据顺序, UDP 不保证TCP 三次握手:第一次握手:主机A通过向主机B 发送一个含有同步序列号的标志位的数据段给主机B,向主机B 请求建立连接,通过这个数据段, 主机A告诉主机B 两件事:我想要和你通信;你可以用哪个序列号作为起始数据段来回应我。第二次握手:主机B 收到主机A的请求后,用一个带有确认应答(..原创 2022-02-14 22:07:54 · 953 阅读 · 0 评论 -
RabbitMQ面试题
1.为什么要使用消息队列:其实就是问问你消息队列都有哪些使用场景,然后你项目里具体是什么场景,说说你在这个场景里用消息队列是什么?1.解耦A系统发送数据到BCD系统,通过接口调用,如果有一天D系统不调用了,而又添加一个E系统,那A系统还要改调用代码,用MQ后,A系统只要把数据发送到MQ里,哪个系统需要就去消息MQ2.异步A系统接收一个请求,需要在自己本地写库,还需要在BCD三个系统写库,时间比较长,用了MQ后,只要在A系统里写库并把结果响应给用户,在把数据发送到MQ里就好。3.削峰假如A系统高...原创 2022-02-14 09:28:47 · 5506 阅读 · 0 评论 -
spring面试题
1.Spring 启动过程(原理)WEB项目启动时候,加载web.xml,spring会在web.xml中配置启动监听器和启动参数web容器启动加载spring容器顺序:1.执行web.xml中的contextLoaderListener监听器2.初始化ContextLoaderListener中的contextInitialized方法调用父类的initWebApplicationContextinitWebApplicationContext方法在initWebApplicationContex..原创 2022-02-12 19:57:36 · 387 阅读 · 0 评论 -
springboot面试题汇总
1.spring boot最先扫描包是哪个? 答:默认扫描 启动类所在的包及其子包,会扫描@ComponentScan配置的包2.spring boot 启动流程? 答:入口类上会有一个@SpringBootApplication注解,SpringBootConfiguration注解里面继承了Configuration,最重要的是@EnableAutoConfiguration 注解,这个@EnableAutoConfiguration 注解也是一个组合注解,其自身定义关键信息如下:pa...原创 2022-02-12 14:56:28 · 561 阅读 · 1 评论 -
BeanFactory和FactoryBean的区别
他们两个都是个工厂,但FactoryBean本质上还是一个Bean,也归BeanFactory管理BeanFactory是Spring容器的顶层接口,FactoryBean更类似于用户自定义的工厂接口。BeanFactory:以Factory结尾,表示它是一个工厂类(接口),它负责生产和管理bean的一个工厂。在Spring中,BeanFactory是IOC容器的核心接口,它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。BeanFactory只是个接口,并不是IOC容器的具.原创 2022-02-11 16:38:33 · 615 阅读 · 0 评论 -
jdk代理和cglib代理实现原理
JDK代理:接口:public interface BuyTicket { /** * 买票 */ void buyTicket();}被代理的类:public class CommonPerson implements BuyTicket { @Override public void buyTicket() { System.out.println("买到票了!"); }}代理类:核心类Invocati原创 2022-02-11 14:50:52 · 110 阅读 · 0 评论 -
ConcurrentHashMap原理
jdk7:数据结构: ReentrantLock+Segment+HashEntry, 一个Segment中包含-个HashEntry数组, 每个HashEntry又是一个链表结构元素查询:二次hash, 第一次Hash定位到Segment, 第二次Hash定位到元素所在的链表的头部锁: Segment分段锁Segment继承了ReentrantLock,锁定操作的Segment, 其他的Segment不受影响,并发度为segment个数,可以通过构造函数指定,数组扩容不会影响其他的segm...原创 2022-02-10 23:12:41 · 170 阅读 · 0 评论 -
MongoDB学习
1.安装MongoDB: 我下的5.0版本MongoDB Community Download | MongoDBhttps://www.mongodb.com/try/download/community2.配置环境变量:C:\Program Files\MongoDB\Server\5.0\bin添加到环境变量 里的path里3.启动mongoDB,打开cmd(路径没有关系)输入mongod访问localhost:27017代表成功自定义数据库data路径和端口号 命令:mongod -.原创 2022-01-29 12:07:33 · 1301 阅读 · 0 评论 -
spring cloud学习--(eureka)
eureka集群(两个服务示例代码):三个地方:pom.xml,yml配置文件,启动类pom.xml:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://..原创 2022-01-27 10:59:22 · 318 阅读 · 0 评论 -
String aop执行顺序和spring循环依赖
spring 4正常执行:@Before @After @AfterReturning(正常返回)异常执行:@Before @After @AfterThrowing(方法异常)spring 5正常执行:@Before @AfterReturning(正常返回) @After异常执行:@Before @AfterThrowing(方法异常)@Afterspring 循环依赖:多个bean之间相互依赖,形成了一个闭环构造器方式注入解决不了循环依赖问题,set方式可以解决默认的单例(s...原创 2022-01-23 18:39:30 · 140 阅读 · 0 评论 -
string的intern方法
String.intern()是一个本地(native)方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回该字符串的String对象的引用,否则会创建一个String对象添加到字符串常量池中,并且返回此对象的引用,在jdk6或更早之前的虚拟机中常量池都是分配到永久代中,我们可以通过-xx:PermSize和-xx:MaxPermSize限制永久代的大小,即可间接限制其常量池的容量,在jdk8中完全使用元空间来代替永久代。示例代码:public static void原创 2022-01-21 15:19:50 · 525 阅读 · 0 评论 -
dubbo学习
1.zookeeper下载安装到官网下载,我下的3.4.11版本下载地址:链接:https://pan.baidu.com/s/1zJEi_qJJMD86Bs-vAqtIFw 提取码:aj1n1.1 如下图1.2修改配置文件1.3在zookeeper的bin目录下启动cmd执行命令zkServer.cmd启动zookeeper. 报错JAVA_HOME is not set 和 JAVA_HOME is incorrectly set.直接把jdk写死如下:2.到dubbo...原创 2022-01-20 17:25:29 · 1678 阅读 · 0 评论 -
线程池的使用
代码示例:newFixedThreadPool: 一池五个线程 public static void main(String[] args){ //一池五个线程处理 ExecutorService threadPool=Executors.newFixedThreadPool(5); try{ for (int i = 1; i <=10 ; i++) { threadPool.execute(()-原创 2022-01-14 17:43:06 · 293 阅读 · 0 评论 -
Callable方式创建线程
示例代码:class th implements Callable<Integer> { @Override public Integer call() throws Exception { System.out.println(Thread.currentThread().getName()+"== come in "); Thread.sleep(3); return 1024; } public st.原创 2022-01-14 15:17:51 · 159 阅读 · 0 评论 -
synchronized和lock有什么区别
题目:synchronized和Lock有什么区别?用新的Lock有什么好处? 举例说说1. 原始构成synchronized是关键字属于JVW层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象只有在同步块或方法中才能调wait/notify等方法,lock是具体类(java.util.concurrent.locks.Lock)是api层面的锁2.使用方法synchronized不需要用户去手动释放锁,当sync...原创 2022-01-14 14:04:57 · 92 阅读 · 0 评论 -
阻塞队列示例
试图从空的阻寨队列中获取元素的线程将会被阻寨,直到其他的线程往空的队列插入新的元素。同样 ·试图往已满的阻寨队列中添加新元素的线程同样也会被阻寨,直到其他的线程从列中移除一个或者多个元素或者完全清空队列后使队列重新变得空闲起来并后续新增抛出异常: add,remove方法,如果队列满还add,如果队列空还remove 就抛出异常 public static void main(String[] args) { BlockingQueue<String> bl...原创 2022-01-14 13:24:40 · 200 阅读 · 0 评论