
java基础
qq_23204557
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
用AOP和注解 检查request header是否带有合法token
值得一提的是AuthException 最好设置为RuntimeException,否则就需要在连接点(比如上面的logout方法)声明将其throws , 不然就会报 java.lang.reflect.UndeclaredThrowableException错误。上面提到若无合法token, 会把http response status置为401。从上面的切点表达式可以看到,我不是通过指定类路径,而是注解类,来控制哪些方法将被此切面方法拦截的。原创 2025-01-15 17:34:33 · 400 阅读 · 0 评论 -
Java多Module项目打包
确实可以打包成功,但是使用时mysql r2dbc与redis发生了一些奇怪的问题。下面的方法则没有碰到此问题。原创 2024-10-25 15:57:50 · 482 阅读 · 0 评论 -
解决url含%导致404错误
使用这段代码时,如果imageUrl中包含%,则它会被自动转为%25,导致404 Not Found错误,怎么办?之类的方法,达不到预期。原创 2024-10-24 16:36:23 · 220 阅读 · 0 评论 -
用自定义类级注解校验两字段不能同时为空
有下面这么一个类,要校验两字段query、image不能同时为空,应该怎么实现?已知的@NotBlank都只能检验单个字段。原创 2024-09-03 15:40:48 · 623 阅读 · 0 评论 -
哲寻面试(部分)(未完全解析)
小端字节序是指低位字节在前,高位字节在后,这是计算机内部处理数据的方法。MySQL的UTF-8有一个缺陷,就是它并不是真正的UTF-8,而是阉割版的,最长只有三个字节。这是因为英文字符的Unicode码在0x00-0x7F的范围内,只需要一个字节就能表示,而汉字的Unicode码在0x0800-0xFFFF的范围内,需要三个字节才能表示。如果现在有一堆学生对象,每个学生对象有班级属性,要实现学生按班级分组,最终得到一个Map, Map的key为班级,value为对应的学生列表,如何做?原创 2023-09-02 23:07:45 · 495 阅读 · 0 评论 -
子类重写父类方法时的一些问题
两小一大private/static方法都不能被重写原创 2023-07-10 21:52:49 · 222 阅读 · 0 评论 -
王力面试(未完全解析)(部分)
对象创建过程分配内存:指针碰撞/空闲列表原创 2023-07-03 21:31:27 · 836 阅读 · 0 评论 -
tomcat与自定义类加载器
一个tomcat中可以部署多个应用,而每个应用中都存在很多类,并且各个应用中的类是独立的,全类名是可以相同的,比如一个博客系统中可能存在com.data.User类,一个库存系统中可能也存在com.data.User类。一个tomcat,不管内部部署了多少应用,Tomcat启动之后就是一个Java进程,也就是一个JVM,所以如果Tomcat中只存在一个类加载器,比如默认的AppClassLoader,那么就只能加载一com.data.User类,这是有问题的 .原创 2023-06-29 04:43:01 · 1908 阅读 · 0 评论 -
怎样迭代更新List/Map/Set
但是上述方法只适合在迭代时有删除操作,如果有更新或者新增等操作,还是会报ConcurrentModificationException的。我找了一些资料,找到一种方法,适用于迭代更新List,包括增删改,那就是用。1,用ConcurrentHashMap, CopyOnWriteArrayList等并发安全的容器。程序的时空效率会差一点。但是对于Map和Set,还没有找到类似的办法。2,新增一个新的容器,保存旧容器里想要的元素。原创 2023-01-25 22:10:19 · 896 阅读 · 0 评论 -
Convert String to JsonObject with Gson
【代码】Convert String to JsonObject with Gson。转载 2022-11-15 17:43:23 · 302 阅读 · 0 评论 -
用Java比较两URI是否相同
需求是http和https协议视为相同,且最后带不带/也无所谓,比如http://stackoverflow.com 和 https://stackoverflow.com/ 应视为相同。JDK现有的api包括URI.equals和URL.equals应该是不符合需求的。为此从stackoverflow(原创 2022-11-03 10:36:25 · 891 阅读 · 0 评论 -
Lombok 使用@SuperBuilder產生繼承類別的Builder
在子類別使用Lombok @SuperBuilder產生可建構父類別屬性的Builder。一般類別可以用Lombok @Builder來產生Builder程式碼,不過對於繼承父類別的子類別若要建構父類別成員的方法,則要用Lombok v1.18.2版本開始支援的@SuperBuilder。例如下面是父類別Parent。在父類別名稱前掛上@SuperBuilder。Parent下面則是繼承Parent的子類別Child。一樣在類別名稱前掛上@SuperBuilder。Child測試如下,使用@SuperB转载 2022-10-31 13:53:15 · 1088 阅读 · 0 评论 -
Collectors.toMap方法value值为null时的解决方案
发现Collectors.toMap的一个坑,key可以为null,但value不能为null,否则抛空指针异常nullPointerException。这可真是反直觉。原创 2022-10-27 19:37:28 · 13283 阅读 · 0 评论 -
一个is开头的方法导致的错误
org.apache.ibatis.reflection.ReflectionException: Illegal overloaded getter method with ambiguous type for property recommended in class class com.leyantech.codex.policy.bean.dto.ScenarioHolderDTO. This breaks the JavaBeans specification and can cause unpr原创 2022-03-31 23:33:49 · 1265 阅读 · 0 评论 -
Java的可变长度参数
表现为类型后面三个点,如(String...),表示此处接受的参数为0到多个String,或者是一个String数组。e.g. :public class point3 { private point3(){ test(); test("aaa"); test("bb","cc"); test(new String[]{"dd","ee"}); } //private void test(){ // Syste原创 2021-12-10 14:34:36 · 255 阅读 · 0 评论 -
为什么Exception会被当成RuntimeException抛出?
为什么以下代码可以通过编译不报错?btw,运行时还是会报原有的错误,不会吞掉public class ThrowAsUnchecked { public static void main(String[] args) {// throwAsUnchecked(new Exception("Testing new checked exception")); throwAsUnchecked(new IOException());// throwAsUnchecked(new Ru原创 2021-11-25 14:38:10 · 370 阅读 · 0 评论 -
记一次由不当使用fastjson序列化导致的bug
这样一行简单的调用fastjson进行序列化的代码:JSON.toJSONString(policy)导致了空指针异常,因为Policy类有这样一个方法:public boolean isOfficialPolicy() { return this.getParentId() > 0;}而某些情况下parentId为null。简单查阅了一些资料,推测根本原因是fastjson的JSON.toJSONString方法会使用反射,而像上面这种is开头的方法都会被反射处理。找到了原因,也就原创 2021-11-15 17:42:17 · 534 阅读 · 0 评论 -
On Java 8 笔记一
p199/2038,发现了一种内存泄漏的可能:调用了C语言的malloc等native方法,却没有手动释放:The need for finalize() is limited to special cases where your object can allocate storage in some way other than creating an object. But, you might observe, everything in Java is an object, so how ca原创 2021-10-20 15:08:19 · 95 阅读 · 0 评论 -
Mutable members should not be stored or returned directly
Mutable objects are those whose state can be changed. For instance, an array is mutable, but a String is not. Mutable class members should never be returned to a caller or accepted and stored directly. Doing so leaves you vulnerable to unexpected changes i转载 2021-08-21 02:39:39 · 674 阅读 · 0 评论 -
不建议在finally中return
这被sonar的代码检查禁止,因为会suppresses the propagation of any unhandled Throwable which was thrown in the try or catch block代码示例如下:public static void main(String[] args) { try { doSomethingWhichThrowsException(); System.out.println("OK"); }原创 2021-08-17 19:30:37 · 954 阅读 · 0 评论 -
UUID vs 雪花算法snowflake
UUID组成:简单来说,时间戳+MAC?重复机率/唯一范围:缺点:无顺序雪花算法组成:重复机率/唯一范围:缺点:参考:分布式id生成(UUID、雪花算法snowflake)原创 2021-07-23 13:41:43 · 951 阅读 · 0 评论 -
单例模式在序列化场景会怎样,如何解决
序列化对单例的破坏首先来写一个单例模式的类(为了比较equals的效果,我加进了一个实例字段并重写了hashCode和equals方法,这不重要):public class Singleton implements Serializable{ private int field = 3; @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result +原创 2021-05-09 22:33:21 · 196 阅读 · 0 评论 -
数据容器的相互转化
不能使用Arrays.asList方法。除了直接遍历外,就是:int[] nums = {1,2};List numCandidates = Arrays.stream(nums).boxed().collect(Collectors.toList());原创 2021-04-24 10:20:07 · 157 阅读 · 0 评论 -
解决class.getResource()得到的URL中汉字变乱码以及URLDecoder把+号解码为空格的问题
System.out.println(Main.class.getResource(""));System.out.println(Main.class.getResource("/"));System.out.println(URLDecoder.decode(Main.class.getResource("/").getPath(),"utf-8"));输出结果:file:/D:/%e5%9b%9bJava%e9%ab%98%e7%ba%a7-%e5%a4%a7%e5%88%80%e9%98%原创 2021-02-03 11:50:34 · 565 阅读 · 0 评论 -
子类覆盖父类方法时,不能抛出更多的checked exceptions
看《Java Concurrency in Practice》时注意到里面一句话:Runnable is a fairly limiting abstraction; run cannot return a value or throw checked exceptions成功引起了我的好奇心,为什么Runnable的run方法不能抛出 checked exception呢?我们先看下Runnable类的代码:public interface Runnable { publ原创 2021-01-03 19:53:04 · 198 阅读 · 0 评论 -
windows下面切换jdk版本
系统里同时装了jdk1.8和jdk11。发现只修改java_home的值没能改变系统默认的java version。发现以下方法有效:C:\Users\sdh>where java返回结果:C:\Program Files\Common Files\Oracle\Java\javapath\java.exeC:\Program Files (x86)\Common Files\Oracle\Java\javapath\java.exeC:\ProgramData\Oracle\Java\j原创 2020-10-18 00:17:27 · 220 阅读 · 0 评论 -
java1.8 接口默认方法的多继承
Java 使用的是单继承、多实现的机制,为的是避免多继承带来的调用歧义的问题。当接口的子类同时拥有具有相同签名的方法时,就需要考虑一种解决冲突的方案。interface InterfaceA { default void foo() { System.out.println("InterfaceA foo"); }}interface InterfaceB { default void bar() { System.out.println("I转载 2020-10-12 09:38:56 · 315 阅读 · 0 评论 -
old《1.3.3 并发容器类-2》以及我对三种并发程度的总结
跳表的实例:jdk中的ConcurrentSkipListMap、ConcurrentSkipListSet,以及Redis,levelDBCopyOnWriteArrayList并发安全。修改时会先lock, 然后 copy完整的数组,在这份复制的数组中进行修改,再把数组的引用指向此新数组。读方法未进行同步控制。所以有线程写数组时,读线程也不会阻塞,只是读到的是旧数组的数据。CopyOnWriteArrayList反映了读写分离的思想。它对比读写锁的优点:读写锁的写是独享的,即读写互斥。而CopyOn原创 2020-06-02 00:19:07 · 177 阅读 · 0 评论 -
old《1.2.3 JAVA锁相关》
Java SE 6 Performance White Paper中的2.1.2 Lock Coarsening等节描述了jdk1.6对锁一原创 2020-05-29 22:23:53 · 126 阅读 · 0 评论 -
old《1.2.2 线程安全之原子操作》
线程不安全的必要条件: 多线程操作同一共享变量,且其中存在写操作以下代码示范了对变量i的有原子性的方法add(),调用Unsafe, 基于CAS实现public class CASDemo { volatile private int i = 0; static Unsafe unsafe; private static long valueOffset; //i的内存偏移 static{// unsafe = Unsafe.getUnsafe();原创 2020-05-28 23:05:17 · 132 阅读 · 0 评论 -
old《1.2.1 线程安全之可见性问题》
import java.util.concurrent.TimeUnit;public class VisibilityDemo { private boolean flag = true; public static void main(String[] args) throws InterruptedException { VisibilityDemo demo = new VisibilityDemo(); new Thread(()->{ int i=0; whi原创 2020-05-28 04:10:02 · 161 阅读 · 0 评论 -
old《1.1.7 线程池应用及实现原理剖析》
为什么ThreadPoolExecutor使用的是BlockingQueue?参考不怕难之BlockingQueue及其实现,因为:入队方法比如有:offer(E e):如果队列没满,立即返回true; 如果队列满了,立即返回false–>不阻塞put(E e):如果队列满了,一直阻塞,直到队列不满了或者线程被中断–>阻塞JDK文档对put(E e)的描述:Inserts the specified element into this queue, waiting if necess.原创 2020-05-27 01:00:08 · 180 阅读 · 0 评论 -
Java多线程
old《1.1.2 线程状态》:考研的OS教科书里告诉我们,线程可以有五种状态:开始,就绪,运行,阻塞(等待),结束。而JDK对线程的状态是这样的:A thread can be in one of the following states:NEWA thread that has not yet started is in this state.RUNNABLEA thread executing in the Java virtual machine is in this state.BL原创 2020-05-26 03:17:27 · 166 阅读 · 0 评论 -
适配器模式(Adapter)
适配器可分为类适配器和对象适配器。其比较可参考 适配器模式之类适配器与对象适配器的区别及代码实现。本文只关注对象适配器。对象适配器的UML图如下:对象适配器模式包含如下角色Target(目标抽象类):定义客户所需接口,可以是接口、抽象类或者具体类Adapter(适配器):继承实现Target,关联Adaptee,完成接口的转换Adaptee(被适配者):定义存在的接口,被适配器适配对象适配器的核心是适配器Adapter继承或者实现目标类Target,委派被适配者Adaptee(关联关系)完成任原创 2020-05-23 05:26:14 · 248 阅读 · 0 评论 -
面向对象设计的SOLID原则
SOLID原则:s单一责任原则o开闭原则l里氏替换原则i接口分离原则d依赖倒置原则参考自面向对象设计的SOLID原则里氏替换原则:当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系. 以下参考https://www.cnblogs.com/wang-can/archive/2013/10/01/3348302.html通俗的定义:子类可以扩展父类的功能,但不能改变父类原有的功能,就是不要去重写父类的方法。里氏替换原则包含以下4层含义:1,子类可以实现父类的抽象方原创 2020-05-23 00:28:50 · 157 阅读 · 0 评论 -
《常用框架核心思想解读》
Spring Boot的核心知识点是条件注解Spring Cloud的核心知识点是服务的注册中心(如zk,eureka). 在客户端实现的负载均衡(Ribbon)的算法有轮询,带权重的轮询,一致性哈希等原创 2020-05-22 21:19:10 · 181 阅读 · 0 评论 -
字符“&”在XML文件中需要被转义
今天弄Mybatis的配置文件时,因为这样一条语句<property name="url" value="jdbc:mysql://localhost/cloud_study?useSSL=false&serverTimezone=UTC" />而运行出错。后来翻阅一些资料,发现是因为字符“&”在XML文件中需要被转义,遂将上文中的&改为其转义字符&就没有问题了。本文参考资料包括JDBC连接Mysql数据库出现的问题汇总How to escape原创 2020-05-20 03:06:17 · 13007 阅读 · 2 评论 -
Java Web开发总结
JDBC提供了对游标的支持。游标可防止读取的数据库记录过多而导致的内存溢出。游标是分批读取。JDBC通过在DB_url中增加 ?useCursorFetch=true----《JDBC进阶》原创 2020-05-19 19:35:22 · 160 阅读 · 0 评论 -
java基础回顾
1.初始化顺序:父类的定义初始化,父类的构造器,子类的定义初始化,子类的构造器2.构造器中如果没有显式调用this或者super构造器,则会自动调用super(),即父类的无参构造器----总结《子类父类关系(上)》...原创 2020-05-17 22:20:51 · 163 阅读 · 0 评论 -
3sum 及TreeMap的线性遍历
此题我的思路是,先形成一个 num与其频率的 treeMap, 然后每次选定一个左边的num,这样其他两数必在此key的右边,而且其和也被决定了,可用左右两指针互相逼近的方法获得。遍历左边num的时间为O(n), 找右边两数也是O(n),所以时间复杂为O(n)。应该说这已经是优化过的算法了,然后在实现中[https://leetcode.com/submissions/detail/2456...原创 2019-07-24 01:42:30 · 223 阅读 · 0 评论