当接口中 只有一个抽象方法的时候 可以用@FunctionalInterface 注解声明为函数式接口
凡是声明为函数式接口的接口 都可以用lambda表达式来处理
1234567891011121314151617181920212223242526272829package atestdemo;import java.util.*;public class Test { public static void main(String[] args) { //用lambda表达式传参+函数式接口 test(()->System.out.println("当...刀卷刃了")); test(()->System.out.println("刷...斩钢碎石")); test(()->System.out.println("不灵不灵...一刀999")); } static void test(刀 dao){ System.out.println(& ...
代码中使用的Vector、ArrayList、Stack、LinkedList均属于 Java 集合框架中的List 接口实现类(Stack继承自Vector),它们都实现了Collection接口的所有方法,因此基础功能一致。但由于底层数据结构不同,它们在特性和适用场景上存在差异。以下是它们的对比整理:
一、共性(均实现 Collection/List 接口)所有类都支持以下核心方法(来自Collection和List接口):
方法分类
核心方法
添加元素
add(E e)、addAll(Collection<? extends E> c)
删除元素
remove(Object o)、removeAll(Collection<?> c)、clear()、remove(int index)(List 特有)
查询判断
contains(Object o)、containsAll(Collection<?> c)、size()、isEmpty()
交集操作
retainAll(Collection<?> c ...
单例模式和多例模式都是创建型设计模式,用于控制类的实例化过程:
单例模式(Singleton)
核心特点:一个类在整个系统中只能创建唯一实例,且提供全局访问点。
实现方式:私有构造方法 + 静态方法返回唯一实例,通常配合线程安全处理。
适用场景:全局资源管理(如日志管理器、配置中心)、工具类等,需确保资源唯一或状态一致的场景。
多例模式(Multiton)
核心特点:一个类可以创建有限个(预先定义数量)的实例,通过键值等方式管理和获取特定实例。
实现方式:私有构造方法 + 静态容器(如 Map)存储实例,通过静态方法根据标识返回对应实例。
适用场景:需要控制实例数量的场景(如线程池、数据库连接池),或特定类型的实例集合(如不同国家的货币实例)。
两者的核心区别在于:单例模式严格限制为 1 个实例,多例模式限制为固定数量的多个实例,均通过私有构造防止外部随意创建实例。
在上述 Java 代码的最后一个示例中,判断k1 == k2结果为true ,这需要结合String类的特性、字符串拼接原理以及intern()方法的作用来进行解释,具体如下:
代码分析1234String k1 = new String("hello") + new String("world");k1.intern();String k2 = "helloworld";System.out.println(k1 == k2); // true
String k1 = new String("hello") + new String("world"); :
首先,new String("hello")会在堆内存中创建一个String对象,new String("world")同样会在堆内存中创建一个String对象。
对于字符串拼接操作+ ,在 Java 中,其实质是通过StringBuilder类来实现的。具体来说,编译器会将代码隐式地转换 ...
Java 常用命名规则整合:
类 / 接口 / 枚举类:
帕斯卡命名法(PascalCase),首字母及后续单词首字母均大写。
类:多为名词,如 UserService、OrderController;异常类以 Exception 结尾,如 LoginException。
接口:描述功能,如 UserRepository、Validator(可加 I 前缀,如 IUserDao,非强制)。
枚举类:类名同普通类,如 Season;枚举值全大写 + 下划线,如 SPRING、ORDER_PAID。
包名:
全小写,用点分隔,通常以公司域名倒写为前缀,如 com.company.util、org.project.service。
文件名:
与类名完全一致(包括大小写),如类 User.java 对应文件 User.java。
方法名:
驼峰命名法(camelCase),首字母小写,后续单词首字母大写,多为动词短语,如 getUserInfo()、submitOrder()。
变量 / 参数:
驼峰命名法(camelCase),首字母小写 ...
静态代理:编码期间就决定好了代理的关系 定义:代理对象,是目标对象的接口的子类型,代理对象本身并不是目标对象,而是将目标对象作为自己的属性。 优点:同一种类型的所有对象都能代理 缺点:范围太小了,只能负责部分接口代理
动态代理:运行期间才决定好了代理关系(拦截器:拦截所有) 定义:目标对象在执行期间会被动态拦截,插入指定逻辑 优点:可以代理世间万物 缺点:难写
代理对象proxy需要传递三个参数分别是:
ClassLoader loader 类加载器
Class<?>[] interfaces 目标对象实现的接口
InvocationHandler h 代理逻辑
1、对于类加载器:userService.getClass().getClassLoader()
写法
获取的类加载器
推荐度
userService.getClass().getClassLoader()
UserServiceImpl的类加载器
一般
UserService.class.getClassLoader()
UserService接口的类加载器
推荐
更推 ...
问题:在 Spring 中,用@Bean将组件添加到容器后,为什么在@Controller等组件中还需要用@Autowired自动注入一遍?
回答:@Bean和@Autowired是 Spring IoC(控制反转)机制中两个核心且互补的步骤,作用不同,缺一不可:
@Bean:负责 “注册组件到容器”
作用:告诉 Spring 创建指定对象,并将其放入容器中管理(相当于 “把工具放进仓库”)。
例:用@Bean定义DataSource(数据库连接池),Spring 会创建该实例并保存到容器,但此时它仅存在于容器中,未被其他组件使用。
@Autowired:负责 “从容器中获取并注入组件”
作用:当某个组件(如@Controller、@Service)需要依赖容器中的其他组件时,告诉 Spring“从容器中找一个该类型的组件,注入给我使用”(相当于 “从仓库取工具”)。
例:UserController需要DataSource操作数据库,用@Autowired标注DataSource字段,Spring 会自动从容器中找到已注册的DataSource实例并注入。
总结:
...
搭建个人图床的方法有很多,可以通过很多平台赠送的免费额度来存储自己的文件
首先
需要下载这个软件 —— PicGo:下载地址
其次
你还需要准备
1.自己的自定义域名(这个可以去阿里云或者腾讯云买一个,并不是很贵)
2.一个平台账号(下面会说一种我在用的,还可以去上面的PicGo下载地址里面查看官方文档,也有其他平台的配置方法)
1.通过 七牛云 + PicGo 搭建个人图床我最开始先搭建了七牛云的存储服务,等所有配置都弄完才发现一个关键问题:从七牛云复制出来的资源链接,默认是 HTTP 协议的。但现在绝大部分网站都用的是 HTTPS 协议,浏览器会拦截 HTTPS 页面里的 HTTP 资源(也就是“混合内容”),直接导致这些资源用不了。 要解决这个问题,就得给七牛云的资源配 SSL 证书才能用 HTTPS 访问,可七牛云本身不提供免费证书,还得自己额外申请、再手动配置,步骤看着挺麻烦,我就没继续弄了。
如果实在想在七牛云上存储,貌似也是可以申请免费SSL证书的,可以通过下面关键词自行搜索一下
免费申请 SSL 证书:通过 Let’s Encrypt(完全免费,9 ...




