- 博客(332)
- 问答 (2)
- 收藏
- 关注

原创 【DJL】Springboot+Maven+DJL实现java调取pytorch模型
前言近期学习了DJL(深度java学习),有了一点小的研究成果,特以此博客分享给大家。这个技术是一个特别新的技术,是亚马逊云服务在2019年re:Invent大会推出的专为Java开发者量身定制的深度学习框架,网上的资料比较少,只有官方文档可以参考,研究起来难度比较大,但是经过不懈的努力,终于搞定了,接下来以官网的demo入门。由于这块有很多坑,所以有必要好好的说一下。官网地址:https://docs.djl.ai/jupyter/load_pytorch_model.htmldemo1、创建Sp
2020-08-23 21:39:49
14886
26

原创 【多线程 六】彻彻底底搞懂CAS,解决ABA问题
前言:如果不知道JMM(java 内存模型),还请看博主的上一篇博客: volatile关键字与内存可见性详解 ,因为本博客还需要JMM的理论基础。博客内容导图1、CAS是什么CAS(Compare-And-Swap)是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问. CAS 是一种无锁的非阻塞算法的实现。以上是一本书给出的定义。其实我们在上篇博客已经提过CAS了,AtomicInteger 实现num++,AtomicInteger的底层就是
2020-06-23 01:11:45
4480
1

原创 【多线程 五】volatile关键字与内存可见性详解
前言:本篇博客内容较多,1、为什么会有volatile关键字?之前的内容我们都是用synchronize关键字进行同步,但是synchronize的效率低,每次都要cpu判断有没有锁,有锁就会阻塞。所以说synchronize是一个重量级的锁,比较耗费资源,因此引出vllatile,volatile相对synchronize 是一个轻量级的锁。2、volatile特点(1)保证内存可见性只要有一个线程将变量的值改了,那么其他的线程马上就可以得到这个改过后的值。(2)不保证原子性原子性:我们把
2020-06-21 17:11:07
1993
3

原创 面向对象与面向过程的本质的区别
前言:如果你很想搞明白面向对象是什么,面向过程是什么,或者说二者之间的区别是什么,那么就花费一点时间来研读一下这篇博客,你一定会有很大的收获的!一、面向对象与面向过程的区别面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个
2018-01-10 20:19:04
333621
226
原创 【多线程】轻松彻底搞懂ReentrantLock的底层实现原理
上篇博客讲解了Sychronized的底层实现原理,它是基于jdk实现的,现在此篇博客讲解基于AQS 框架实现的另一个锁ReentrantLock。
2025-03-28 19:35:52
631
原创 【多线程】synchronized底层实现的方式
在java 开发中对于锁的应用非常的常见,如果对于什么时候该用什么锁,以及锁实现的原理有所不知道的,或者面试过程中面试官问你不知道怎么回答的,欢迎来看下面的文章。
2025-03-24 22:54:05
732
原创 【java 查漏补缺】编码习惯之——异常的拦截处理方式
能给前端合理的返回一些异常信息,以及可以在日志中返回我们自己排错的异常信息是十分重要的,那么对此如何才能优雅的处理呢。今天看了同事的一些代码,觉得狠不错,特此分享一把。
2025-02-08 16:08:19
163
1
原创 【java 查漏补缺】彻底理解反射的原理
再学习java的过程中,反射是非常的重要,官方给的解释如下:Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键如果不能彻底理解,那么请看我下面的讲解为什么叫反射呢,在物理学中,比如你照镜子,镜子里有一个一摸一样的你,这就是反射。至于java中是怎么做到的呢,请看下图。
2024-11-11 08:40:14
835
1
原创 【java】idea查看源码的小技巧
今天再看spring security源码的时候,我发现通过maven引入进来,看不到 DefaultSecurityFilterChain 被哪些地方引用,就很好奇,简单的研究了一下。关于spring security 的源码就在以下四个包如果想要不下载其源码的方式好好的阅读,那么需要下载resource即可。
2024-09-26 11:16:16
229
原创 【Java】 attempt to unlock lock, not locked by current thread原因以及解决办法
做支付的时候,接口被调用了两次,第一次还没有执行完,点了第二次,此时第二次获取不到锁,理想情况下要抛出异常“请不要频繁发起付款”,但是报了错 “attempt to unlock lock, not locked by current thread”,这是因为第二次进来没有获取到锁,直接进去到了finally,执行了 lock.unlock(),第二个请求尝试解锁一个没有被当前线程锁定的锁
2024-05-30 16:49:02
826
3
原创 【Java 基础】Java Validation API分组,顺序校验,以及自定以校验注解的优雅写法
Java Validation API分组,顺序校验,以及自定以校验注解的优雅写法
2022-10-18 15:51:20
2133
2
原创 【mysql】垂直分表的意义是什么
当数据库数据量大的时候,我们会考虑分库分表,但是在有些情况我们还会考虑垂直分表,比如这个表的字段过多,有几十个字段,我们就需要考虑垂直分表了,垂直分表解决了什么问题,接下来大家一起来看一下吧。...
2022-07-26 14:21:18
854
1
转载 mysql的limit分页,越往后为什么越慢,怎么解决
一 什么是limit分页问题limit 20 这样的语句。仅仅扫描前30行,select* from table limit 0,10扫描满足条件的10行,返回10行,但当limit 866613,20的时候数据读取就很慢,limit 866613,20的意思扫描满足条件的866633行,扔掉前面的866613行,返回最后的20行,可想而知这时会很慢,如下图,达到37.44秒之久。二 怎么解决利用表的覆盖索引来加速分页查询我们都知道,利用了索引查询的语句中如果只包含了那个索引列(覆盖索引),那么这
2022-04-01 16:26:01
5907
转载 【ApplicationContextAware 和InitializingBean区别】
ApplicationContextAware接口1.首先什么是ApplicationContextApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个ApplicationContext对象, 事实上Spring2相关的web应用默认使用的是ApplicationCont
2022-03-22 14:13:10
1037
原创 【rabbitmq 】如何保证消息可靠性
1、rabbitmq如何保证消息可靠首先我们知道一个完整的结构涉及到生产者,mq,消费者这三部分,mq解除了系统之间的耦合,但是会出现一些问题,比如现在是三部分,它们都是独立的,每一部分都会存在消息丢失的情况,所以要从这三部分一起解决此问题。如下图。1.1 mq保证消息不丢失对交换机,队列,消息进行持久化,持久化之后mq断电重启,消息还会被继续消费1.2 消费者消息不丢失通过手动ack机制,当消费者成功将消息消费成功后,返回消息给mq,告诉mq你发送的消息我已经消费成功了,mq将队列中的消息进行
2022-01-05 16:26:15
2248
2
原创 【mysql】添加拼音首字母
1、功能实现说明图一图二数据量很大,目的是找到相应字段的首字母,如果后台写代码可能耗时比较久,现在整理一个mysql函数,轻松处理2、mysql函数DROP FUNCTION IF EXISTS `GET_FIRST_PINYIN_CHAR`;CREATE FUNCTION `GET_FIRST_PINYIN_CHAR`(PARAM VARCHAR(255)) RETURNS VARCHAR(2) CHARSET utf8mb4BEGIN DECLARE V_RETURN VARCHAR
2021-12-09 17:29:18
642
转载 【java 查漏补缺】彻底搞清分布式和集群的区别
概述1.单机结构我想大家最最最熟悉的就是单机结构,一个系统业务量很小的时候所有的代码都放在一个项目中就好了,然后这个项目部署在一台服务器上就好了。整个项目所有的服务都由这台服务器提供。这就是单机结构。那么,单机结构有啥缺点呢?我想缺点是显而易见的,单机的处理能力毕竟是有限的,当你的业务增长到一定程度的时候,单机的硬件资源将无法满足你的业务需求。此时便出现了集群模式,往下接着看。2.集群结构集群模式在程序猿界有各种装逼解释,有的让你根本无法理解,其实就是一个很简单的玩意儿,且听我一一道来。单机处
2021-11-24 16:50:12
237
转载 【java 查漏补缺】java接口回调机制到底是怎么回事
一、回调的含义和用途1、什么是回调?一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类同步调用、异步调用和回调。同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。异步调用是一种类似消息或事件的机制解决了同步阻塞的问题,例如A通知B后,他们各走各的路,互不影响,不用像同步调用那样,A通知B后,非得等到B走完后,A才继续走。回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,例如A要调用B,B在执行完又要
2021-11-24 16:18:10
256
原创 【Spring】Spring事务失效场景分析与理解
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-11-08 17:32:21
750
原创 【springCloud】com.netflix.hystrix.exception.HystrixRuntimeException:XXXXX timed-out
问题:springcloud 服务调用的时候报错:com.netflix.hystrix.exception.HystrixRuntimeException: CouponTrialApiClient#varietyModelTrial(TrialQuery) timed-out and no fallback available.解决办法1、pom文件 <dependency> <groupId>org.springframewo
2021-10-21 19:46:40
991
转载 【java8】 java8分组后,对数据顺序不改变的控制
一.概述 默认groupingBy代码里会生成一个HashMap(hashMap是无序的,put的顺序与get的顺序不一致) HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key...
2021-10-11 17:39:58
920
原创 【查漏补缺】mybatis自增返回主键的两种方式——selectKey、useGeneratedKeys
1、useGeneratedKeys+keyProperty实现主键自增这种方式是我们经常用到的方式,如果你的数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置为目标属性就 OK 了。eg: <insert id="insert" parameterType="im.ziwo.audit.baseservice.model.Attachment" useGenerat
2021-09-30 13:51:10
922
原创 Maven——maven中的 pom和import的作用到底是什么
1、前言在微服务的项目中,我们是不是经常在父项目中写一些统一版本的jar包,但是其中很多时候都有如下类似代码的影子,对于下面的代码中pom和type的作用是否明白呢,如果不明白,欢迎看下面的内容。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies<
2021-09-08 19:27:03
6927
2
转载 Eureka 缓存机制详解
上节为大家介绍了 Eureka 的工作原理,其中提到了 Eureka Server 内部有二层缓存机制,那这些机制是如何工作的,以及 Eureka Server 是如何存储服务的注册信息,本节会给大家揭晓。Eureka 在使用过程中有一些非常重要的配置项,本节也会整理出来,方便大家以后在生产环境根据项目场景来调整。Eureka Server 数据存储我们知道 Eureka Server 在运行期间就是一个普通的 Java 项目,并没有使用数据库之类的存储软件,那么在运行期间是如何存储数据的呢?Eur
2021-04-30 20:48:18
1694
1
转载 Arrays.sort()和lambda表达式
1、对基本数据类型数组的排序:数字排序:int[] intArray = new int[]{1,34,5,-9};Arrays.sort(intArray);System.out.println(Arrays.toString(intArray));字符串排序(先大写后小写):String[] strArray = new String[]{"Z", "a", "D"}; Arrays.sort(strArray); System.out.println(Arrays.toString(
2021-04-13 10:20:34
2494
原创 【spring】注解开发
前言:JavaConfig(基于java类进行配置)实现配置和上篇博客说到的xml配置bean是一样的,只不过spring4之后更加推荐javaConfig的方式。1、注解(1)@Configuration该类等价 与XML中配置beans,相当于Ioc容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean,与xml中配置的bean意思一样。(2)@Import@import 注解允许从另一个配置类中加载 @Bean 定义。考虑 ConfigA 类,如下所示:@C
2021-03-14 13:39:25
143
转载 【Spring】彻底搞明白事物的传播级别
1、什么是事务的传播行为一个方法运行在了一个开启了事务的方法中时,当前方法是开启一个新的事务还是使用原来的事物1、PROPAGATION_REQUIRED结论:通过这两个方法我们证明了在外围方法未开启事务的情况下Propagation.REQUIRED修饰的内部方法会新开启自己的事务,且开启的事务相互独立,互不干扰。结论:以上试验结果我们证明在外围方法开启事务的情况下Propagation.REQUIRED修饰的内部方法会加入到外围方法的事务中,所有Propagation.REQUIRED修饰的内部
2021-03-14 13:38:43
1038
1
原创 【JVM】垃圾回收算法详细对比说明
导图1、 概述在讲这些算法的时候,我们要知道我们的目的是垃圾回收,垃圾回收的是那些没有用的对象,但是什么时候判断对象是没有用的(死亡的),要进行垃圾回收的呢,那么此阶段有两种算法,分别是引用计数算法,和可达性分析算法,这个阶段也就是标记阶段。接着,在真正回收这些对象的算法上又分为复制算法,标记清除算法和标记整理算法。2、引用计数算法2.1概念对每个对象保存一个整型的引用计数器属性。用于记录对象被引用的情况。对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1;当引用失效时,引用计
2021-03-14 13:27:05
683
1
原创 【实战技能】超详细解决CPU占用过高的问题的办法
1、代码模拟import java.util.Random;public class HighCPUDemo { public static void main(String[] args) { while (true){ System.out.println(new Random(999999)); } }}2 、top命令找出cpu占用最高的进程如下图 看到java的进程id为74953、ps -ef 或者 jps
2021-03-14 13:26:12
1439
5
转载 【git】github骚操作
1.常用词 watch: 对于别人的项目,默认自己都处于 Not watching 的状态,当你选择 Watching,表示你以后会关注这个项目的所有动态,这个项目以后只要发生变动,如被别人提交了 pull request、被别人发起了issue等等情况,你都会在自己的个人通知中心,收到一条通知消息,如果你设置了个人邮箱,那么你的邮箱也可能收到相应的邮件。 stars: 星星,相当于点赞,不过这个赞需要得到程序员小伙伴的认可才会被star ...
2021-03-14 13:20:48
244
转载 【mysql】mybatis,防止sql注入原理以及#{}和${}区别
1、MyBatis如何防止SQL注入 SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自] SQL injection - WikipediaSQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“or ‘1’=’1’”这样的语句),有可能入侵参数检验不足的应用程序。所以,在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性要求很高的应用中(比如银
2021-03-08 13:26:00
2397
1
转载 【多线程】生产者消费者传统版和阻塞队列版
前言等待与唤醒机制其实就是经典的生产者与消费者问题我们知道,生产者要想和消费者作用在一件产品上,必须要用到锁机制。通过锁机制保证一个产品同一时间只有一个角色在执行。下面将分别使用Synchronized和Lock锁解决生产者和消费者的问题。1Synchronized版/** * 线程之间的通信问题:生产者与消费者问题! * A和B操作同一个变量,线程交替执行,num=0 * A num+1 * B num-1 */public class A { public static v
2021-03-07 23:01:42
269
2
转载 【多线程】虚假唤醒(什么时候用while,什么时候用if)
那什么是假唤醒?当一个条件满足时,很多线程都被唤醒了,但是只有其中部分是有用的唤醒,其它的唤醒都是无用功比如说买货,如果商品本来没有货物,突然进了一件商品,这是所有的线程都被唤醒了但是只能一个人买,所以其他人都是假唤醒,获取不到对象的锁避免虚假唤醒下面是避免虚假唤醒的示例:package duoxiancheng.bao;/* * 虚假唤醒的解决: * wait要始终保证在while循环当中。 */public class LockTest { public stati
2021-03-07 12:28:00
1541
1
空空如也
如何理解vb中的单引号
2017-08-05
cmd和dos的区别是什么
2017-07-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人