
Java
文章平均质量分 63
凯凯兹
code..
展开
-
手写DCL双重验证单例模式
直接上代码public class Singleton{ private volatile static uniqueInstance; private Singleton(){} public static Singleton getInstance(){ if(uniqueInstance == null){ synchronized (Singleton.class){ if(uniqueInstance == null){ uniqueInstance = new原创 2021-02-26 14:19:12 · 491 阅读 · 1 评论 -
面试题思考:java中快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
一:快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modCount变量是否为expectedmodCount值,是的话就返回原创 2021-02-24 15:26:46 · 341 阅读 · 2 评论 -
2021数据大屏-词云-源码分享(VUE+DataV+Echarts,后端SpringBoot)
数据大屏-实现方案现公司一直做政务项目,到年底自己搞了个大屏项目,挣点业绩好过年。分享一下前、后端搭建的框架,代码可用。废话不多说直接上效果图下载地址:前端代码:前端代码下载后端代码:后端代码下载一、项目描述1 前端项目1.1 项目简介一个基于 Vue、datav、Echart 框架的 " 数据大屏项目 ",通过 vue 组件实现数据动态刷新渲染,内部图表可实现自由替换。部分图表使用 DataV 自带组件,可进行更改,详情请点击下方 DataV 文档。项目需要全屏展示(按 F11)。原创 2021-01-05 17:36:10 · 1758 阅读 · 0 评论 -
数据大屏+词云SpringBoot+Redis+Jieba(后端项目-源码分享)
一、项目描述1 后端项目1.1 项目简介让我们先理解这个项目的原理先整理好前端需要的各种图表的数据,将其SQL语句存入query_statement表再定期执行这些SQL,执行结果放Redis最后提供一个接口让前端取数据项目使用SpringBoot-Redis-Jieba,为大屏项目提供数据接口(配套前端项目)一个基于 SrpingBoot、Redis、Jieba 框架的 " 数据大屏项目 "项目使用定时器,定期从数据库执行n个统计SQL,将统计结果存放Redis中,前端定时刷新请求原创 2021-01-05 17:33:25 · 3681 阅读 · 1 评论 -
Java并发编程-锁的粒度与死锁
锁的粒度今天拿取款来说说事儿假设我们有Acount用户这个实体,有两个字段,一个用户名,一个余额,都是资源。class Acount{ private Integer balance; private String name; public void updateName(String name){ this.name = name; } public void withdraw(Integer amt){ if(this.balance > amt){ this.bal原创 2020-12-10 13:50:19 · 361 阅读 · 0 评论 -
Java并发编程-内存模型
Java内存模型如何解决可见性和有序性问题一. 什么是Java内存模型?简述:Java的内存模型主要解决多处理器架构下,可见性、有序性的相关问题。现在我们的计算机处理器架构都是对称多处理器,每个处理器都有自己的寄存器、缓存,多个处理器可以同时执行同一进程下的多个线程,称为处理器的乱序执行。在Java程序中,不同线程可能访问同一个共享变量,任由处理器或者编译器对这些访问进行优化,会有很多问题出现,因此引入内存模型。二.三个基本原则原子性、可见性、有序性三.Happens-beforeHap原创 2020-12-09 14:25:04 · 126 阅读 · 0 评论 -
Java并发编程-并发问题从哪儿来
并发问题的根本围绕着原子性、有序性、可见性,会出现各种的并发问题,要理解透彻这三种特性,才能有效的定位出现的并发问题(并发问题往往是综合性的)可见性例如:不同的CPU缓存造成的可见性问题假设一个场景,调用add方法,count+=1执行1w次,在代码编译后,CPU指令为如下3步骤1、将count读到cpu2、进行+1操作3、count写回内存中(有可能写入cpu缓存,但cpu缓存再写入内存时间不可控)现在线程A、B同时执行add方法,执行结果理想为count=2w,但实际结果往往是0-2w之原创 2020-12-08 13:22:25 · 174 阅读 · 0 评论 -
GC算法和收集器
GC算法和收集器参考:周志明《深入理解java虚拟机》第二版如何判断对象可以被回收堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)引用计数法给对象添加一个引用计数器,每当有一个地方引用,计数器就加1。当引用失效,计数器就减1。任何时候计数器为0的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中没有选择这个算法来管理内存,最主要的原因是它很难解决对象之前相互循环引用的问题。所谓对象之间的相互引用问题,通过下原创 2020-08-28 11:16:54 · 201 阅读 · 0 评论 -
带你手撕Java虚拟机栈(手把手实战)
Java虚拟机栈Java方法执行的内存模型一个栈帧就是对应一个方法被执行的过程,入栈、出栈分别对应方法加载、执行结束让我们来个????首先,创建一个类把它编译为class,再把它javap反编译回来,脱裤子放屁就为了看两行字节码,也是不容易qiyankaideMacBook-Pro:study qiyankai$ javap -verbose Demo.class Classfile /Users/qiyankai/Desktop/project/foodie-dev/foodie-de原创 2020-05-26 20:57:54 · 8908 阅读 · 0 评论 -
谈谈类加载器的双亲委派机制
谈谈类加载器的双亲委派机制如果我们要加载一个类,我们会先依据上图的顺序,一层一层去找是否已经有类加载器已经加载类信息,最后才是我们的自己写的类加载器,最大程度上防止资源的浪费我们现在去看看ClassLoader的源码重点看看这段,简单明了,他会先去看看classLoader的parent(EXTClassLoader)有没有加载这个类,没有parent就去BootstrapClassLoader去找找双亲委派,就是找爹,看看他加载过这个类么,没有拉求倒,自己加载!我们通过刚才这段代码可以确定调原创 2020-05-26 19:49:42 · 8897 阅读 · 1 评论 -
Java进程和线程详解(手把手教学)
进程和线程的区别进程和线程的由来Java进程和线程的关系我们的一个Java应用程序,启动类启动后。这个应用程序就是一个进程,他会开启一个主线程进行程序的执行,并不知启动一个主线程,其实还有GC线程等很多线程都在运行。一个进程就是一个JVM,不同的线程在这个进程内运行,各自具有栈、程序计数器、本地方法区,多个线程共享堆空间,1.7版本方法区(包含静态常量池),1.8时元空间直接放在内存上了线程的RUN和START方法run方法是当前主线程通过执行一个方法,执行结束就结束了,start方法是真正原创 2020-05-24 22:28:58 · 10281 阅读 · 1 评论 -
Socket知识点总结-相关面试题(Java)
简介分别总结基础的网络架构知识,延伸Java用Socket实现TCP、UDP编程DEMO(代码可运行)相关面试题面试题一编写一个网络应用程序,有客户端与服务器端,客户端向服务器发送一个字符串,服务器收到该字符串后将其打印到命令行上,然后向客户端返回该字符串的长度,最后,客户端输出服务器端返回的该字符串的长度下面是TCP实现原创 2020-05-17 18:12:25 · 18084 阅读 · 0 评论 -
读懂HashMap
一文读懂HashMap本文准备从以下几个方面去讲解HashMap:1)HashMap源码详细分析2)HashMap为什么是线程不安全的?3)1.7和1.8的HashMap实现区别总结4)HashMap和HashTable的区别HashMap源码分析一、构造函数让我们先从构造函数说起,HashMap有四个构造方法,别慌1.1 HashMap()// 1.无参构造方法、// 构造一个空的HashMap,初始容量为16,负载因子为0.75public HashMap() { thi原创 2020-05-17 18:25:53 · 6307 阅读 · 0 评论 -
一文读懂HashMap
一文读懂HashMap本文准备从以下几个方面去讲解HashMap:1)HashMap源码详细分析2)HashMap为什么是线程不安全的?3)HashMap和HashTable的区别4)1.7和1.8的HashMap实现区别总结HashMap源码分析一、构造函数让我们先从构造函数说起,HashMap有四个构造方法,别慌1.1 HashMap() // 1.无参构造方法、 // 构造一个空的HashMap,初始容量为16,负载因子为0.75 publi原创 2020-12-10 13:48:49 · 163 阅读 · 0 评论 -
Spring Cloud Alibaba Dubbo
Spring Cloud Alibaba Dubbo为什么?是什么?怎么做?为什么?单体应用单体服务经过长期的迭代更新,逐渐走向代码臃肿、高耦合,这显然与我们软件开发设计理念高内聚\低耦合背道而驰,从而难以维护~市场需求也在逐渐要求服务高并发、高性能、高可用,在这样的场景下,单体服务宕机重启时间长、访问过慢的问题一一暴露!分布式应用系统分布式开发,将服务拆分,是建立在网络之上...原创 2019-08-14 17:40:31 · 17069 阅读 · 0 评论 -
ftl模板文件换行
解决JAVA生成word时,模板中换行符替换,代码如下:${(suggestion?html?replace('\r\n','<w:br/>') )!}原创 2018-10-18 16:39:13 · 24207 阅读 · 5 评论