
Java
ocp114
这个作者很懒,什么都没留下…
展开
-
深入扒 HashMap 源码 - 5 HashMap get() 获取元素时都发生了什么?
先看看 get() 方法public V get(Object key) { // 同样生命了一个临时变量,这个变量是一个 node 元素,不是 key 对应的 value 变量哦 Node<K,V> e; // 所以看到这里应该能明白,做法是通过和 put 方法一样,hash 一下 key,再根据这个 hash 值查找 return (e = getNod...原创 2018-09-29 22:56:38 · 227 阅读 · 0 评论 -
深入扒 HashMap 源码 - 4 HashMap put() 插入元素时都发生了什么?
坦白说,没做啥,喏~~,就两三行代码 (/ω╲)public V put(K key, V value) { return putVal(hash(key), key, value, false, true);}哈哈哈,主菜/** * @param hash key 的 hash 值 * @param key key 的值 * @param value 需要添加的值 * ...原创 2018-09-28 22:58:12 · 351 阅读 · 0 评论 -
深入扒 HashMap 源码 - 3 HashMap resize() 扩容时都发生了什么?
先看一组数据,里面是各个参数就不解释了,不明白的可以看看这里,HashMap 的初始化参数全部是默认的resize()之前 [capacity = 16, size = 0, modCount = 0, threshold = 0, loadFactor = 0.75]resize()之后 [capacity = 16, size = 0, modCount = 0, threshold =...原创 2018-09-28 21:31:43 · 340 阅读 · 0 评论 -
深入扒 HashMap 源码 - 2 HashMap 的实例化方法
HashMap 的实例化其实没做什么,主要是一些基础参数的赋值那么来一个一个看看一、默认的方式public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; }简单地使用了默认装载因子 (0.75)参数变化:size = 0, modCount = 0, threshold = 0, loadFactor = 0.75...原创 2018-09-28 19:53:22 · 497 阅读 · 0 评论 -
深入扒 HashMap 源码 - 1 各属性解析
先理解几个 HashMap 中的属性DEFAULT_INITIAL_CAPACITY:默认初始化容量,值为 16,实例化 HashMap 时也可以通过 new HashMap<String, Object>(需要的容量); 来指定容量static final int DEFAULT_INITIAL_CAPACITY = 1 &am原创 2018-09-28 19:14:25 · 400 阅读 · 0 评论 -
Head First 设计模式各模式思想及总结
虽然接触设计模式很久了,但是以前没有做笔记,也没留下什么代码,只怪当初太年轻呀~现在要重新回顾了。记住,设计模式注重的是思想,并不是具体实现,不要被设计模式限制了自己,也并不是我们写代码一定要想着怎么用设计模式来实现出来,按照设计模式的规范设计出来,一般情况下,把代码封装好,把变化的东西封装好,对外暴露不变的方法或接口,代码按照功能模块拆分成类和方法,做到这些已经可以让后来看自己代码的人不骂自己了...原创 2018-10-03 21:34:07 · 1588 阅读 · 0 评论 -
Java 多线程高并发 3.8 — LockSupport 简单使用
先讲讲主要的 api名称描述park()相当于 suspend() 使线程挂起unpark(Thread thread)相当于 thread.resume() 唤醒线程park(Object blocker)功能和 park() 一样,但是 blocker 可以当作参数在不同线间传递getBlocker(Thread t)可以获取到线程 t 调用 ...原创 2018-09-26 15:22:27 · 461 阅读 · 0 评论 -
Java 多线程高并发 3.7 — CyclicBarrier(循环栅栏)简单使用
如果有了解过 CountDownLatch 的话,这个应该不难理解,相当于 CountDownLatch 的升级版,使得栅栏可重复使用,下面讲讲大概意思和用法内部有一个计数器,用于记录剩下还没就绪的线程数量内部使用的是 ReentrantLock ,相当于对 ReentrantLock 作了封装主要的 api 只有 await() 这个方法,调用这个方法时,CyclicBarrier 中的...原创 2018-09-26 11:43:17 · 688 阅读 · 0 评论 -
深入扒 HashMap 源码 - 6.5 HashMap 内部类分割迭代器 HashMapSpliterator、KeySpliterator、ValueSpliterat、EntrySplitera
首先说说作用,原来的 HashMap 已经有了迭代器了,为什么还要这些迭代器?难道是爱吗?是责任吗?(づ。◕‿‿◕。)づ哈哈哈,李白说过,存在即合理为了适应时代的变化,现在并行计算越来越需要,这个迭代器的诞生也是为了并行迭代而出现的,可以在多线程的情况下迭代同一个 HashMap,但是官方建议一个线程只和一个迭代器配合使用啦好,入正题,在这里 KeySpliterator、ValueSpli...原创 2018-10-01 18:30:57 · 528 阅读 · 3 评论 -
深入扒 HashMap 源码 - 6.1 HashMap 内部类 Node
Node<K,V> 可以说是 HashMap 的核心内部类之一了,它实现了 Map 结构顶层规范的 Map.Entry<K,V> (以键值对的形式储存数据的结构),在桶数据树化之前都用这个来存储数据,树化之后就改用了 TreeNode<K,V> 了那么接下来看看都有些什么static class Node<K,V> implements Map....原创 2018-09-30 12:06:36 · 683 阅读 · 1 评论 -
Java 读取文本统计字符出现次数
最近公司考核笔试,竟然做不出来,呀呀呀~真的缺了 IDE 就不会写代码了,还有就是一直面向搜索引擎编程(泪流满面 T_T),得端正一下了public static void main(String[] args) { try { // 读取文件 BufferedReader br = Files.newBufferedReader(Paths.get("C...原创 2018-12-07 14:05:12 · 812 阅读 · 0 评论 -
算法练习题-栈
public static void main(String[] args) { String str = "(){}[(]"; String leftParen = "("; String leftBrach = "{"; String leftBrachet = "["; String ...原创 2019-01-21 17:12:13 · 83 阅读 · 0 评论 -
fastjson: JSONException: syntax error, expect {, actual [, pos 0
还是写下来吧~攒点积分,这里分享一个和 json 格式没有关系导致的错误,是 Java 基础的问题一、问题描述在用 fastjson 做 json 字符串转对象的时候遇到以下错误Exception in thread "main" com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 0, fa...原创 2019-06-01 09:26:47 · 5101 阅读 · 0 评论 -
Java 打印365天
因为最近要写一个批量改东西的脚本,覆盖到一年的,这里当做是代码备份吧~~ public static void main(String[] args) { int year = LocalDateTime.now().getYear(); for (int month = 1; month <= 12; month++) { i...原创 2019-05-06 22:30:17 · 376 阅读 · 0 评论 -
SpringBoot JPA 多数据源 Not a managed type: class *** 问题解决
问题描述:在使用 SpringBoot JPA 配置好多数据源时出现了下面的问题Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.xuanwu.schedule.core.quartz.entity.JobEntity at org.hibernate.metamodel.internal...原创 2019-09-14 21:08:46 · 1526 阅读 · 0 评论 -
Java 根据不同操作系统获取 classpath 绝对路径
仅作代码备份只用 private static final String WINDOWS_PREFIX = "\\"; private static final String LINUX_PREFIX = "/"; private static final String PATH_SEPARATOR = "\\\\"; /** * 根据不同操作系统处理...原创 2019-04-09 11:30:56 · 115 阅读 · 0 评论 -
重复造轮子 — SpringBoot 2.1.4 整合 Quartz 2.3.1 + Mybatis 分布式定时任务
前言:由于最近公司要做重构,定时任务模块全部抽离出来,所以要搭建一个定时任务模块,于是就研究了一下,不过到最后用的并不是本文搭建的项目,由于公司原来项目架构原因和其他因素影响,定时任务只能当做一个子模块独立出来,做这个的原因是为了代码更加清晰明了和支持分布式而已,最后还是要引用到原来的系统里面的,所以最后并没有使用自己搭建的这个项目,只用到了里面一少部分核心代码,并且为了兼容原来的系统,改动也不...原创 2019-03-27 22:46:37 · 537 阅读 · 0 评论 -
Java 桌面弹幕工具【优化完善版本】
应该不需要解释什么是弹幕吧~~之前其实已经写过一篇Java 桌面弹幕工具,超级简单的实现,在这里花了点时间完善了一下具体可配置功能如下:自定义弹幕内容…自定义弹幕字体(样式、颜色、大小,加粗)弹幕速度配置(指定或随机)弹幕分批发射数量弹幕分批发射时间间隔每个弹幕发射的时间差弹幕发射方向(左、右、随机)弹幕位置(上、中、下、随机)电脑重启后是否从上次加载的位置开始发射弹幕...原创 2019-03-17 18:41:26 · 354 阅读 · 0 评论 -
@MapperScan通配
貌似网上没有,这里写出来,能给搜索的同学帮助@MapperScan(basePackages = "com.th.**.mapper")单个星号试过貌似不行,加多个星号就可以了原创 2019-03-12 13:56:12 · 3280 阅读 · 0 评论 -
Java 桌面弹幕工具
最近想做一个弹幕工具,貌似还没找到好的,就手写一个咯,由于对 swing 不熟悉,jframe的属性设置也是一把泪~各种细节慢慢调了好久才调好,其实还挺简单的,也没几行代码 ~上码:import java.awt.Color;import java.awt.Dimension;import java.awt.Font;import java.awt.Toolkit;import j...原创 2019-03-10 23:02:36 · 394 阅读 · 1 评论 -
Java Color 随机颜色简单生成
网络上的其他方法就不说了,大多比较复杂,这里说一种比较简单的方法 public static void main(String[] args) { // rgb 颜色 -16777216 ~ 0 Color color = new Color(-new Random().nextInt(16777216)); }对,就这么简单!能用~~...原创 2019-03-10 10:35:07 · 933 阅读 · 0 评论 -
Java 多线程高并发 3.6 — CountDownLatch 简单使用
按照名字理解是 计数锁用于多线程并行的同步,起栅栏作用做法是利用计数器计算还未完成的任务数,直到计数为 0 的时候,才会往下执行貌似挺简单的,需要根据业务场景灵活运用下面看原理图放码过来public class TestCountDownLatch { private static CountDownLatch cdl = new CountDownLatch(5); ...原创 2018-09-25 23:28:54 · 471 阅读 · 0 评论 -
深入扒 HashMap 源码 - 6.4 HashMap 内部类迭代器 HashIterator、KeyIterator、ValueIterator、EntryIterator
KeyIterator、ValueIterator、EntryIterator 都继承于 HashIterator 以及实现了 Iterator,只在内部有部分差异,KeyIterator 的 next() 方法获取的是 key,ValueIterator 的是 value,EntryIterator 是 node下面看代码实现abstract class HashIterator { //...原创 2018-10-01 13:01:21 · 554 阅读 · 0 评论 -
Java 多线程基础备忘
package jvm.concurrent.thread;/** * @author 黄小天 1853955116@qq.com * @date Sep 23, 2018 8:59:49 AM * 线程的基本操作 */public class TestThread { public static void main(String[] args) { new TestThr...原创 2018-09-23 11:18:23 · 78 阅读 · 0 评论 -
一个语音转文字的工具 java 编写
一、这是啥?一个 PC 版语音转文字的工具二、能做什么?把对着话筒说的话转换成文字,并且粘贴在当前窗口可以输入文字并且光标聚焦的地方看看效果 三、怎么用?首先参考上一篇博客到讯飞开放平台创建相应的应用,得到下面箭头的文件以及一个appid 2.appid 填写到 config.properties 文件中,没有的话就创建一个,文件名和属性名不要改变哦 ...原创 2018-08-21 18:18:27 · 3426 阅读 · 0 评论 -
Java 语音转文字
最近变懒了,连做读书笔记都不想打字了,于是找了一下网上看看有木有语音转文字的工具,发现 windows 自家就有啊,但是准确率惊人啊,所以心血来潮就开搞了,这里用到了讯飞的语音转文字服务 1、到讯飞开放平台那边注册开发者账号 2、找到 “语音听写” 3、创建应用 4、填写完表单之后,会得到一个 appid 5、下载 SDK 6、下载的 SDK 一般都有三个 demo 项目,使用其中一个...原创 2018-08-21 17:11:32 · 7767 阅读 · 3 评论 -
Java 视频、音频格式转码,借助 ffmpeg 和 mencoder 实现
首先说明一下,这篇文章只是自己有代码洁癖,看了别人的文章后,重新整理了一下,精简压缩了,我都害怕自己这么固执了,~(╯﹏╰)~。然后吐槽两句,类似的文章从12年就看到有了,也是使用 ffmpeg 和 mencoder,我等小辈又没能力写个转码器,最多也就把文件读进来然后复制一份修改一下后缀Ψ( ̄∀ ̄)Ψ,最后来正题,需要下载两个东东,ffmpeg 和 mencoder ,问一下度娘就知道她原创 2018-01-21 17:21:08 · 3948 阅读 · 2 评论 -
Mybatis 使用 model 自动创建表/更新表结构/动态建表
首先,下面的代码都是基于 孙琛斌这位大兄弟的‘Mybatis自动创建表/更新表结构/动态建表’这篇文章进化而来的,这里非常感谢该博主,受该博主的启发,使我的技术提升了不少,非常感谢!下面进入正题: 一,说说能做什么能使用 model 自动创建表可以自动初始化一部分数据到数据库中使用 model 进行基本的增删改查二、先来说说不同的地方(好多啊,被我改的面目全非了(/ω╲))直接干掉非 M原创 2017-12-27 21:01:00 · 12667 阅读 · 4 评论 -
java 自定义注解注入父类属性值
有这样的需求其实我也挺奇葩的,不过也合理,先说说现实情况:正在开发一个 Java 后台项目 基于用 SSM 框架改造 不想重复写这么多代码 搞了个基类 基类中基本的增删改查都有,继承下来就行了原创 2017-12-11 20:42:21 · 2271 阅读 · 0 评论 -
Java 反射——把表单值映射到 model 中
回想起过往的漫漫编程人生路,不禁让人唏嘘感慨,或许这是我人生中第一次比较正规地使用反射了(/ω╲),不废话,码上见:import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Enumeration;原创 2017-11-20 22:01:09 · 910 阅读 · 0 评论 -
lanproxy 使用教程 内网穿透软件
世界最大同性交流:https://github.com/ffay/lanproxy原理什么的就不说的,自己到 git 上看看吧,已经非常详细了,下面就说一个小白步骤吧~~ 一、有自己服务器的用法1、下载安装包:下载地址,下面箭头的两个都要下载,如果想要研究源码的可以把下下面的 Source code下载看看原创 2017-11-13 22:28:05 · 1663 阅读 · 0 评论 -
java数据结构和算法-2,栈和队列
在Java的世界里讨论的最多的应该是栈和队才对吧!但这里是数据结构和算法,并不是Java虚拟机。废话不说,码上见!1、栈public class StackTest { private int[] arr;//用数组模拟栈的结构 private int top;//栈顶的位置 public StackTest(){ arr = new int[10];原创 2017-05-20 23:35:42 · 345 阅读 · 0 评论 -
Java 多线程高并发 1 — 几个重要的概念
原子性:和物理上的原子貌似没多大关系,对于一系列的操作只能单个线程做处理,不能有其他线程干扰,例如多个人想往同一个杯子倒茶,但只有一个茶壶,只有等这个茶壶让出来才能继续让其他人倒茶有序性:在并发的时候,程序的执行可能是乱序的,这里并不是程序本身代码的逻辑乱序,而是多个程序对于同一个变量的操作或者同一段代码的操作,其先后顺序并不能根据线程启动的先后来定,例如多个人同时做往一个杯子倒茶的工...原创 2018-09-23 14:41:51 · 272 阅读 · 0 评论 -
一些被遗忘的 Java 语言规范 —— 变量初始化值的写法
1、变量初始化值的写法int 类型123 最常见的写法0372 前面带个 0 是可以的0xDada_Cafe 0x开头表示16进制里面可以写 [0, f] 的值,不区分大小写,下划线允许存在,仅用作易于人们观看,编译时会去掉0x00_FF_00_FF 0x00_FF_00_...原创 2018-09-18 21:44:55 · 350 阅读 · 0 评论 -
Java 多线程高并发 2 — CAS 无锁
在 Java 并发编程里面,最可爱的就是无锁了,非常巧妙,精彩绝伦 额。O__O &amp;quot;…那么什么是无锁?顾名思义,在并发情况下采用无锁的方式实现对象操作的原子性,保证数据一致性、安全性、正确性怎么做?采用 CAS (Compare And Swap)的方式操作核心思想是:比对旧数据,如果没人动过或者旧数据和预想的一样,就执行更新等操作实现的原理是 CAS(V, E, N) ,当且...原创 2018-09-23 20:10:31 · 489 阅读 · 0 评论 -
深入扒 HashMap 源码 - 6.3 HashMap 内部类 KeySet、Values、EntrySet
KeySet、Values、EntrySet 操作其实都差不多,其内部并不存储任何数据,这三个内部内都是封装了方便外部对于 table 的 key,value,node 的遍历和操作一、KeySet是 HashMap 中所有 key 的集合// HashMap 的 table 中所有 key 的集合final class KeySet extends AbstractSet&lt;K&gt...原创 2018-10-01 11:29:57 · 373 阅读 · 0 评论 -
深入扒 HashMap 源码 - 6.2 HashMap 内部类 TreeNode
TreeNode&amp;lt;K,V&amp;gt; 是 HashMap 每个桶中数据树化之后用到数据结构也就是红黑树了,TreeNode&amp;lt;K,V&amp;gt; 是从 Node&amp;lt;K,V&amp;gt; 继承而来的,下图初略看看实现和继承的关系这里由于本人对红黑树的实现挺复杂的,就不深入挖了大概说说红黑树的特性吧把节点当作有颜色地看待的话,有分红色和黑色两种,所以称为原创 2018-09-30 23:24:30 · 375 阅读 · 0 评论 -
Java 多线程高并发 3.5 — ReadWriteLock 读写锁使用
ReadWriteLock 又称为共享锁,的读写分离锁,内部分为读锁和写锁关于 A 和 B 线程,读和写的关系A 读 — B 读:不互斥、不阻塞A 读 — B 写:互斥,互相阻塞A 写 — B 写:互斥,互相阻塞用法:非常简单,和 ReentrantLock 一样public class TestReadWriteLock { // 实例化读写锁 private stati...原创 2018-09-25 20:04:00 · 191 阅读 · 0 评论 -
Java 多线程高并发 3.4 — 线程池 ExecutorService、ScheduledExecutorService
对于线程池的理解简单理解就好,就一个池子池子里面放着线程,需要的时候向池子要,用完归还回去由于是资源重复利用,所以有助于提高系统性能,节约系统资源,是个好孩子问题在于池子的管理,例如 线程不够用的时候怎么扩容?装得下吗?别人来要线程,要等多久?怎么控制线程的动向?别人一次要多个线程怎么办?空闲的线程怎么管理?其实如果单单使用的话就不用我们管了,java.util.concurrent 包...原创 2018-09-25 14:21:33 · 886 阅读 · 0 评论 -
Java 多线程高并发 3.3 — Semaphore 共享锁使用
Semaphore 是共享锁的一种,字面上意思就是信号量锁顾名思义,一个可以共享的锁,可以让多个线程共享同一把锁,例如同一条马路可以让 4 台车同时并行跑,相当于可以让 4 个线程共享一把锁,临界区的限制也就是 4会有一个临界区,用于控制线程,只有拿到信号量(许可)才能的进入一个线程可以拿多个许可,但是一般情况不会这样做,还是看业务需求咯~~常常用在并发控制的场景主要 api...原创 2018-09-25 10:58:03 · 611 阅读 · 0 评论