
Java
文章平均质量分 59
qq_41084438
这个作者很懒,什么都没留下…
展开
-
同步、异步与阻塞、非阻塞的理解
同步 (Synchronous):在同步操作中,调用者发起一个请求,然后等待操作完成,而不进行其他操作,直到操作完成并返回结果。这种方式可以确保操作的顺序性和一致性,但也可能会造成程序在等待操作完成时出现阻塞,降低效率。异步 (Asynchronous):在异步操作中,调用者发起一个请求后,不必等待操作完成,而可以继续执行其他操作。被调用的操作会在后台进行,并且通常会通过回调函数、事件或者轮询等方式来通知调用者操作已经完成或者出现了新的状态。原创 2023-11-02 16:16:02 · 182 阅读 · 0 评论 -
Java实现内网穿透
1、当公司的一些系统功能使用了第三方服务时,通常第三方会回调我们的接口。在对接阶段,为了方便debug,我们肯定希望能回调到我们本地电脑上来。2、当你在公司想访问部署在家里电脑的服务或者文件时。3、当你的外地同事想访问你本地的服务,虽然发布到测试也可以,但是部署需要时间,发生错误排除也没有本地来的快,不够所见即所得。虽然有现成的内网穿透工具,但没有比自己写的用起来更有成就感,哈哈哈哈~原创 2023-04-16 20:44:38 · 3371 阅读 · 5 评论 -
Spring AOP代理对象创建时机
在Spring中,我们经常会为我们的Bean做AOP,根据上面我们知道,代理对象需要引用被代理对象,那就需要在Bean初始化完成之后再对Bean做代理。因为Bean初始化完成之后就是一个可用的Bean了,而且会被放入IOC容器,我们需要在这个Bean被放入IOC容器之前生成它的代理对象,并代替原先的类放入IOC容器中。而第七步是Spring给我们提供的扩展点,在这一步可以拿到可用的原始对象,我们的代理对象生成和替换就是在这里。原创 2023-03-28 11:38:53 · 3460 阅读 · 1 评论 -
list.forEach()和list.stream().forEach()区别
首先它们的功能都是遍历数组每个元素并执行入参的accept方法,但是它们的实现方式却不一样,在一些特定的情况下,执行会出现不同的结果。区别list.forEach()使用增强的for循环(默认)ArrayList自己实现了forEachlist.stream().forEach()它首先将集合转换为流,然后对集合的流进行迭代差异一、元素遍历的顺序list.forEach的增强for循环使用集合的迭代器Iterator来遍历元素,相当于这样。List<.原创 2021-11-27 23:42:18 · 16854 阅读 · 0 评论 -
JPA实现数据库int类型与Java实体枚举的转化
定义表num字段在java的实体类中定义为枚举枚举类import com.fasterxml.jackson.annotation.JsonCreator;import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Getter;import java.util.Arrays;/** * Created with IntelliJ IDEA. * * @auther: lkz * @date: .原创 2021-04-05 22:51:59 · 892 阅读 · 0 评论 -
Spring Data Jpa---EntityManager属性与属性值的映射
在开发中使用JPA作为项目的持久层框架,在联表查询查询的时候多半会用到EntityManager这个类。String sql = "SELECT xxx, xxx, xxx FROM x a JOIN y b ON x.id = y.id";Query nativeQuery = em.createNativeQuery(sql);List<Object[]> resultList = nativeQuery.getResultList();大概是这种形式,Object数组里面的值原创 2021-03-06 16:50:04 · 1157 阅读 · 1 评论 -
Java类之间有相同属性名之间的赋值
使用这个工具类即可实现,但是不灵活。我们可以进行封装,自定义一些规则。import org.springframework.beans.BeanUtils;BeanUtils.copyProperties(source, target);比如自定义注解,忽略一些不需要赋值的字段。为了方便,我使用了@JsonIgnore。import com.fasterxml.jackson.annotation.JsonIgnore;定义两个类@Dataclass AA { .原创 2021-01-23 11:54:29 · 1040 阅读 · 3 评论 -
IDEA根据数据库表生成对应Java实体类
修改这个文件import com.intellij.database.model.DasTableimport com.intellij.database.model.ObjectKindimport com.intellij.database.util.Caseimport com.intellij.database.util.DasUtilimport java.io.*import java.text.SimpleDateFormat/* * Availabl...原创 2021-01-09 15:56:55 · 1190 阅读 · 1 评论 -
01背包、完全背包、多重背包(模板+优化)
此文章不提供具体解题思路,仅提供模板。01背包你有一个容量为W的背包,n个物品,物品的重量为weight[i],价值为value[i],物品只有一件。求背包能装的最大价值。dp[n + 1][W + 1]的二维数组初始化为0,dp[i][j]:i表示前i件物品,j表示当前的背包容量,则dp[i][j]表示i,j状态下背包的价值,只是当前最优,不过随着更新,dp[i][j]会变成全...原创 2020-01-29 14:13:15 · 226 阅读 · 0 评论 -
关于java继承的一些问题
在Java的继承中,子类继承父类之后,当子类中有与父类相同的方法时(方法名、参数、返回值均相同)称子类重写父类的方法。而我们在写代码的时候加上@Override是为了增加可阅读性和IDE帮助我们检查一些错误,加不加都是重写。当子类重写的是父类的static的方法时,其实不是重写,而是隐藏父类的方法,因为static、final修饰的方法是不可以重写的,所以子类有跟父类一样的static方法时,不是...原创 2019-07-11 12:55:19 · 163 阅读 · 0 评论 -
关于join()与join(long)的区别
join()表示一个线程会无限等待至被等待线程死亡为止。join(long)public final synchronized void join(long millis) throws InterruptedException { long base = System.currentTimeMillis(); long now = 0; ...原创 2019-07-14 21:31:16 · 662 阅读 · 0 评论