自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

γìńɡ雄尐年ぐ的博客

Every storm runs,runs out of rain.Just like every dark night turns into day.

  • 博客(101)
  • 收藏
  • 关注

原创 windows10/11重启电脑自动开启热点

有某种场景,需要一台电脑长期具备热点功能,在实际使用中发现,每次关机重启,热点都会自动关闭,需要手动开启,这很痛苦,那么我们寻找一种方式,可以在重启电脑后自动开启热点。

2024-04-10 16:56:15 706

原创 iphone拷贝照片中间带E自动去重软件,以及java程序如何打包成jar和exe

用苹果手机照相,有不使用默认的4:3拍照的习惯。如果只使用默认4:3比例拍照,后面的内容均可跳过。

2023-08-12 15:27:51 1237

原创 如何从0创建Spring Cloud Alibaba(多模块)[Nacos、OpenFeign、Ribbon、Dubbo、Sentinel、Gateway、Seata]

以一个父工程带两个Module(test1、test2)为例。

2023-02-26 22:21:01 1981 1

原创 Spring Initializr

Spring官网:https://spring.io/简单来说,Spring Initializr是Spring官方提供的快速创建Spring项目的脚手架,可以支持在可视前端页面打包后下载项目,或在本地使用脚手架直接创建项目,可选择:构建工具(maven/gradle)、打包方式(jar/war)、Spring版本、语言等,还可以在创建界面勾选需要的集成配置项而无需手工添加,简化创建流程。

2023-02-26 16:01:36 1652

原创 synchronized到底锁的是谁、何时生效

synchronized锁的几种形式,及各种形式下的举例及验证。下面看一个稍微复杂的场景,main方法中启动两个线程,func1和func2均被synchronized修饰。由于是非静态方法,锁的是当前对象data,由于func1和func2方法都被synchronized修饰,且在main方法中,是用的new出来的同一个data进行调用,于是锁的就是这个data,用到data发生资源抢占,需要排队。代码首先执行到func1,func1执行3秒,func2排队等待三秒后,执行func2。

2022-10-26 23:03:58 859

原创 分布式场景常用限流算法

在高并发场景下,你的系统不足以支撑高频次访问,如果不加以限制,会造成整个系统不可用。作为一种保护系统的兜底机制。比如系统仅支持5000QPS(每秒钟访问5000次),超过了这个次数,系统无法处理,剩下的请求就需要排队,然后排队的请求还没处理,新来的请求继续排队,排着排着资源就会耗尽,造成宕机。

2022-10-07 22:02:26 697

原创 JVM类加载机制

前言  java秉承“一次编写,到处运行”的理念,其平台无关系得益于JVM(Java虚拟机)的存在,其并不仅仅与java语言绑定,而是与“Class”文件(字节码文件)所关联,任何可以编译成Class文件的语言都可以被JVM识别。  Class文件中的信息,最终都要加载到JVM中才能运行和使用,Java语言中,类型的加载、连接、初始化均在程序运行期间完成,为其反射即动态扩展提供了支持。  因此,一个.java文件到最终被执行,一共经历了两个阶段:    1. 编译:从.java文件通过java编译器

2021-10-24 22:39:55 119

原创 HashMap链表成环(JDK1.7)原因及源码分析

触发条件JDK1.7 HashMap扩容 多线程同时扩容源码分析假设当前数组长度3(仅仅是假设,实际应该是2的n次方),其中一个bucket位置首次put 1,如图扩容发生在put元素超出阈值情况下,源码从put方法入手当扩容时,在put方法中,首先根据hashcode计算出所需插入新元素应当在数组中的什么位置(bucket),因此相同的hashcode意味着相同的bucket,就需要解决冲突。 for循环去遍历这个bucket,bucket可能是空的,也可能存在Entry...

2021-10-20 00:07:46 1352 2

原创 Sublime实现批量两行交换、多光标选中等

以下快捷键均为mac示例文本:第一行、、、开头,后面乱码,第二行年龄,第三行名称、、、¥#……age:12name:zhangsan、、、!@#¥%……age:22name:lisi、、、……&*()age:50name:wangwu目标实现1:去掉第一行无用信息,仅保留年龄和名称思路:匹配、、、开头的一行,将该行所有及回车替换为空白使用快捷键:command+option+F,出现替换菜单 打开正则表达式匹配开关 Find输入^、、、...

2021-10-14 15:43:42 1395

原创 Redis面试常见问题

Ⅰ、Redis为什么单线程还这么快?纯内存操作 Redis每个请求时间很快,且数据都在内存,CPU处理速度不是其瓶颈,瓶颈在内存和网络。单线程可以避免CPU的上下文切换,不存在多线程上下文切换导致的CPU消耗,不需要考虑并发问题、锁。而java由于每个请求处理时间很长,多线程可以充分利用CPU。 处理请求基于非阻塞IO多路复用Ⅱ、Redis的持久化机制Redis持久化_γìńɡ雄尐年ぐ的博客-CSDN博客Redis数据全部存储在内存中,关机则数据丢失,因此需要定期做数据的持久化备份,来保证不会

2021-09-25 22:46:28 144

原创 Redis持久化

Redis数据全部存储在内存中,关机则数据丢失,因此需要定期做数据的持久化备份,来保证不会因故障导致数据丢失。Redis持久化方式有两种,RDB(快照)和AOF日志。一、RDB1.1 触发方式将当前完整数据生成快照存到硬盘,触发快照分为手动和自动。1.1.1 手动触发save命令:阻塞Redis当前进程,直到RDB完成。因为内存数据较大时,阻塞时间过长,因此该命令已废弃。bgsave命令:save命令改进版。其不会完全阻塞当前进程,...

2021-09-21 17:05:10 376

原创 Redis四种部署模式(原理、优缺点及解决方案)

单节点模式 主从模式 哨兵模式(Sentinel) 集群模式(Cluster)单节点模式Redis默认启动,什么都不配置,默认就是Master节点,简单却不具备高可用。优点配置简单,操作简单缺点单点的宕机引来的服务的灾难、数据丢失 单点服务器内存瓶颈,无法无限纵向扩容解决办法单节点宕机,可以由其他节点暂时顶替,宕机的慢慢排查主从模式优点有了主从,提高了Redis整体的可用性,当主节点(master)挂了,可以把从节点(slave)手动升级为主节点继

2021-09-16 00:02:15 11502 3

原创 线程池如何实现的线程复用及源码分析

目录线程池创建流程图​源码分析总结【精华】常见问题线程池创建流程图源码分析线程池核心类:ThreadPoolExecutor,其构造方法维护了很多线程池关键参数,比如:corePoolSize、workQueue、handler等等,其都是ThreadPoolExecutor类的成员变量。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSi.

2021-09-01 00:37:01 338

原创 设计模式之---适配器模式

适配器模式作为两个不兼容接口之间的桥梁,就是一个中间层,起着转化/委托的作用,将一种接口转化为另一种符合需求的接口。属于结构型模式。生活中,手机充电,中国市电为220v交流电,不能直接给手机充电,需要通过电源适配器将交流电变成手机充电需要的直流电。电源适配器相当于一个桥梁,将两个不兼容的东西兼容到一起。例如:public class Client { public static void main(String[] args) { new ElectricAdapte

2021-08-30 23:47:08 117

原创 23种设计模式分类及原则

创建型【5种】工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式结构型【7种】适配器模式 装饰者模式 代理模式 外观模式 桥接模式 组合模式 享元模式行为型【11种】策略模式 模板方法模式 观察者模式 迭代器模式 责任链模式 命令模式 备忘录模式 状态模式 访问者模式 中介者模式 解释器模式...

2021-08-30 22:43:26 221

原创 设计模式之---装饰器模式

当一个既定对象已经拥有它本身的功能,但我们想对他的功能进行扩展,那么有两种方法:子类继承后扩展 装饰器模式子类继承会随着功能的增加,子类数量膨胀,使用装饰器模式可以包装原有的类,不改变原有的类,并提供额外的功能。装饰器模式实现原理:让装饰器实现类与被装饰类实现同一接口,并在构造方法中传入被装饰类对象,然后在实现该对象原有功能上添加新功能。例如:public class Client { public static void main(String[] args) {

2021-08-30 00:21:00 193

原创 设计模式之---工厂模式

前言工厂模式,是Java最常用的设计模式之一。属于创建型模式,提供创建对象的最佳方式。适用于创建复杂对象场景。如果是简单对象,比如new就可以的,如果使用工厂模式,就需要引入工厂类,反而增加了复杂度。复杂对象:类的构造方法参数过多或构造过于复杂,在业务代码中直接引用耦合度较高。后续业务的更改带来的影响和依赖过大,修改地方过多,而工厂模式能很好的解决这些问题。按照实际业务场景进行划分,工厂模式有3中不同的实现方式:简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式又叫静态工厂方法模式,

2021-08-29 22:26:30 462 3

原创 Java可重入锁及其如何避免死锁

定义可重入锁,也叫递归锁。“重入”将获取锁的粒度由“调用”转变为“线程”,即当一个线程请求一个未持有的锁,该线程将顺利得到锁并被记录,且将计数值从0变为1;当下次同一个线程再次请求这把锁,该线程无需排队,而是直接得到锁,且计数值由1变为2,仅仅是数量上的累加;每次退出一个线程,计数值-1,直到计数值为0,这把锁将被释放。因此重入锁的原理:当某个线程请求一个由其他线程持有的锁,该线程将被阻塞。synchronized及ReentainLockJava中内置锁synchronized及Ree

2021-08-22 14:38:48 1525

原创 CountDownLatch、CyclicBarrier

CountDownLatchJDK1.5被引入,在java.util.concurrent包下,其初始化一个数值(>=0),使用countDown将计数器数值减1,使用awit方法阻塞线程。当计数器数值为0时,解除阻塞。常用方法:public CountDownLatch(int count) // 构造方法:初始化计数器数量public void await() // 阻塞线程public boolean await(long timeout, TimeUnit unit)

2021-08-22 14:03:28 123

原创 Java NIO

Java磁盘数据读取模型数据存在磁盘中,磁盘控制器从磁盘中读取将其放入操作系统内核的缓冲区,然后Java程序从缓冲区中读取数据由于现在CPU处理速度的上升,整体的运行速度瓶颈已不在CPU,更多的是由I/O效率决定,而目前市面上所有操作系统已经将I/O性能改善到非常OK不会拖后腿,但由于Java虚拟机为了提供一个多系统统一的环境,其单方面屏蔽了操作系统在I/O上处理的优化。是JVM在I/O方面效率不足,导致的程序效率降低。在操作系统中,可以从硬件上直接读取大块的数据,而JVM只能从这些大块的.

2021-08-21 16:54:23 100

原创 Unix网络I/O模型

阻塞式I/O 非阻塞式I/O I/O复用 信号驱动式I/O 异步I/O

2021-08-19 00:23:57 104

原创 通俗理解同步、异步、阻塞、非阻塞

同步异步,阻塞非阻塞是完全不同的概念。同步与异步同步、异步描述的是多个线程之间的协作关系,线程之间要么是同步,要么是异步同步 只要一段调用开始执行,就必须要得到执行结果,然后才能继续后面的操作。这个结果的获取,要么是傻等,要么是轮询。例如:以下调用方法a执行3秒,方法b执行4秒,c最终等于a+b,同步调用,b的执行必须等待a执行完,于是该调用一共执行3+4+1=8秒。c开始执行的时候a、b已经得到执行结果,因此c不用关心a、b结果的问题,直接...

2021-08-16 00:30:47 432

原创 RabbitMQ消息可靠性保证及AMQP

目录一、AMQP简介1.1 主要概念​二、RabbitMQ2.1 消息机制2.1.1 消息保存2.1.2 消息确认2.1.3 消息预取2.2 可靠性保证2.2.1 Broker在接收消息后宕机2.2.2 生产者发送至Broker途中 / Broker在接收消息后写入磁盘前宕机2.2.3 Broker发送至消费者途中2.3 生产环境需要考虑问题2.3.1 重复消费问题2.3.2 启动手动ack,nack重入队导致死循环2.3.3 消息堆积2.

2021-08-09 00:43:04 379

原创 Java常用锁及源码实现分析

常用锁乐观锁(无锁) Lock(显示锁) synchronized(内置锁)乐观锁实现方式:CAS(compare and swap:比较并交换),就是在更新一个变量之前,先获取这个变量是否和预期相等,如果相等则更新,否则什么也不做。例如:数据库更新:update user set name=xxx where xxx=xxx,只有当where符合条件才更新,否则什么也不做。 Atomic操作AtomicInteger底层源码我们在多线程并发i++时,通常会使用atomicIn

2021-06-28 01:18:08 433 1

原创 理解AQS(AbstractQueuedSynchronizer)源代码分析

java.util.concurrent.locks下public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {/** * The synchronization state. */ private volatile int state;}其继承的

2021-06-28 01:16:39 170 1

原创 synchronized锁的膨胀过程

在jdk1.6以前,随着并发数提高,synchronized吞吐量下降严重,而ReentrantLock则比较稳定,如果说ReentrantLock性能较强,那么synchronizedzeyuo

2021-06-20 20:55:41 685

原创 Java内存模型与线程

由于内存和CPU的读写速度有断崖式差距,于是在内存与CPU之间增加了一层高速缓存,以缓解CPU想要数据时内存供不应求的尴尬场面。在CPU需要时将使用到的数据复制到缓存中,提高运算速度,运算结束后将结果同步...

2021-06-20 15:18:00 222

原创 Java线程通信及线程虚假唤醒

线程在内部运行时,线程调度具有一定的透明性,程序通常无法控制线程的轮换执行。但Java本身提供了一些机制来保证线程协调运行。假设目前系统中有两个线程,分别代表存款和取钱。

2021-06-14 20:42:14 185 1

原创 HashMap的桶位为什么是2的N次方(源码分析----1.8)

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; No.

2021-06-06 19:05:43 229 2

原创 Floyd判圈算法

Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法,该算法可以:判断链表是否有环 判断环的七点

2021-05-31 00:08:41 1819 3

原创 jdk8新特性:方法引用

方法引用可以继续简写Lambda,使代码更紧凑,引入操作符::当接口的抽象方法入参和返回值,与此接口实例化时内部调用方法的入参和返回值一致,则可以使用方法引用简写。例如:Consumer<String> consumer = str -> System.out.print(str);构造器引用:Class::newSupplier<String> supplierOld = () -> new String();Supplier<Stri

2021-05-12 23:39:00 99

原创 jdk8新特性:函数式接口

函数式接口:只包含一个抽象方法的接口。其可以包含多个默认方法、类方法,但抽象方法只能有一个。因此一个函数式接口的实例可用匿名内部类形式来表示,而匿名内部类在jdk8中可被Lambda表达式代替。【Lambda表达式介绍参照我另一篇:https://blog.csdn.net/qq_26012495/article/details/116614342?spm=1001.2014.3001.5501】Java8专门为函数式接口提供了@FunctionalInterface注解来校验该接口是否为函数式接口

2021-05-12 22:52:53 280

原创 jdk8新特性:Lambda表达式

Lambda表达式,又称为闭包或匿名函数,是jdk8的重要特性,可以使代码变的简单、优雅,增强代码可读性。用我们熟悉的Runnable,源代码就是一个简单的接口,里面有一个唯一的抽象方法:run()@FunctionalInterfacepublic interface Runnable { public abstract void run();}jdk7中我们实现run方法:public static void main(String[] args) { R

2021-05-10 23:24:54 177 5

原创 jdk8新特性:Optional使用介绍

Optional方法介绍方法名 方法介绍 方法声明 empty 创建一个空的Optional对象。调用isPresent返回false,调用get抛空指针异常 <T> Optional<T> empty() of 使用一个非空的值创建Optional对象。Optional.of(null)抛空指针异常 <T> Optional<T> of(T value) ofNullable 可使用任意值创建O...

2021-03-25 15:08:54 871 2

原创 Kubernetes(K8S)简介

目录一、使用容器原因二、容器与虚拟机区别虚拟机Docker三、使用K8s原因四、常用概念MasterNodePod 为什么提出Pod的概念?LabelsNamespaceReplication Controller(RC)DeploymentService 服务发现机制 kube-proxy 外部系统访问ServiceIngressVolumeConfigMap五、Pod调度调度说明Aff...

2021-03-12 14:35:11 2865 1

原创 SpringBoot向前端实时输出日志

传统的HTTP请求只能由客户端发起,而服务端要想给客户端源源不断的发送数据,必须由客户端不断的向服务端发起请求,Ajax轮询,这种方式显然更加浪费开销。WebSocket是HTML5提供的一种在单个TCP连接进行全双工的通信协议。浏览器和服务器只需要一个握手动作,就形成了一条快速通道,两者之间即可方便的数据持续互传,直到客户端或者服务器中的某一方主动关闭连接。使用Linux的tail -f读取服务器日志,在前端实时展示。添加依赖<dependency> &lt.

2020-12-28 20:00:03 3689 14

原创 Mac MySQL忘记密码解决办法

1、进入mysql安装路径/usr/local/mysql/bin2、打开管理员权限,输入开机密码sudo su3、跳过mysql安全认证./mysqld_safe --skip-grant-tables &4、进入mysql(不要以为上一步跳过安全认证后是卡在了那里,其实是在等你输入)./mysql5、刷新权限,返回Query OK, 0 rows affected (0.01 sec)FLUSH PRIVILEGES;6、查询密码se.

2020-12-21 15:59:55 474

原创 IDEA启动项目巨慢无比问题解决

有一天连着公司的VPN,项目启动突然一行一行巨慢无比!! 平时嗖嗖的项目启动5-10分钟,简直不能忍,调个bug重启一下简直崩溃。。。起初以为是VPN的问题,把VPN的型号、版本换了个遍,有时候突然好用,然后过两天又不行了,后来发现是host映射的问题。因为某些程序需要通过本机名称在本地DNS映射IP,但是由于本地并没有写,因此它去外面更广阔的DNS世界溜达了一大圈,导致查询无比慢。查看本机主机名称hostname发现是MacBook-Pro.local 的结尾信息然后修改..

2020-12-15 22:13:23 2008 1

原创 SpringBoot配置自定义Servlet

目录一、前言二、准备工作三、开始配置配置文件配置注解自动扫描四、测试运行一、前言DispatcherServlet是SpringMVC处理请求的默认Servlet,当有需求自己写一个Servlet来处理请求,可有以下两种方式配置:(传统web.xml配置方式不做赘述。此处为SpringBoot配置方式)配置文件配置 注解自动扫描二、准备工作加入web依赖<dependency> <groupId>org.springfram

2020-11-20 16:16:12 1449 3

原创 Spring注解扫包依赖注入核心简单代码实现

传统配置Spring xml配置文件将Bean托管Spring容器。但由于配置的繁琐性,随着JDK5支持注解,Spring2.x版本后逐渐使用注解方式代替传统XML配置。现在开发的新项目惯于使用Spring扫包+注解的方式自动装配,托管于Spring容器。本篇文章基于上述内容,大致描述Spring新版本核心思想,代码只提炼精髓与关键点,且与源码大相径庭,复杂程度远不及源码的N分之一,仅供参考。

2020-11-20 15:31:47 381 1

iphone拷贝照片中间带E自动去重软件,需要java环境 无java环境的下载另一个

iphone相机自动去重 详细可见博客:https://blog.csdn.net/qq_26012495/article/details/132248085 我们在将iphone照片拷贝到电脑的过程中(USB接入电脑拷贝的方式),如果喜欢使用16:9来拍照或者出现过不是默认的4:3拍照的情形,你会发现拷贝出来的照片 总是有一模一样的两张,只不过一张是4:3的一张是16:9的(假设开的是16:9),因为iphone的其他比例方式是通过在4:3的比例上剪裁出来的16:9。 我们暂且管4:3叫原片,4:3的比例为A,16:9的比例为B,那么实际的情况是: A为原片,B是在A的基础上剪裁的 真正通过USB方式拷贝的,会同时存在A与B A与B文件名几乎相同,唯一的区别是B的名称中间加了个E,例如:A–>IMG_3854.HEIC,B–>IMG_E3854.HEIC 只有HEIC的苹果相机照片会有这个问题,png等不存在 我们需要B存在时留下B,否则留下A

2023-08-12

iphone拷贝照片中间带E自动去重软件-install安装包,可以在无java环境下运行

需要java环境的下载:https://download.csdn.net/download/qq_26012495/88209424

2023-08-12

iphone拷贝照片中间带E自动去重软件,需要java环境 无需java环境的下载另一个

无需java环境的下载https://download.csdn.net/download/qq_26012495/88210285 iphone相机自动去重 详细可见博客:https://blog.csdn.net/qq_26012495/article/details/132248085 我们在将iphone照片拷贝到电脑的过程中(USB接入电脑拷贝的方式),如果喜欢使用16:9来拍照或者出现过不是默认的4:3拍照的情形,你会发现拷贝出来的照片 总是有一模一样的两张,只不过一张是4:3的一张是16:9的(假设开的是16:9),因为iphone的其他比例方式是通过在4:3的比例上剪裁出来的16:9。 我们暂且管4:3叫原片,4:3的比例为A,16:9的比例为B,那么实际的情况是: A为原片,B是在A的基础上剪裁的 真正通过USB方式拷贝的,会同时存在A与B A与B文件名几乎相同,唯一的区别是B的名称中间加了个E,例如:A–>IMG_3854.HEIC,B–>IMG_E3854.HEIC 只有HEIC的苹果相机照片会有这个问题,png等不存在 我们需要B存在时留下B,否则留下A

2023-08-12

空空如也

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

TA关注的人

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