ConcurentHashMap解析
说明ConcurrentHashMap并发容器 采用 cas自旋、while/for死循环、sychronize锁三种方式保证线程竞争下的插入安全,其原理与HashMap并不相同,改动量比较大 jdk7采用分段segament的概念,把数组分为几段,每次锁一段达到并发的目的,但是分段会多维护一次hash jdk8采用锁数组的节点Node,将链表或红黑树整个锁定,达到线程安全。jdk8的精髓就在于没有node节点的时候数据的并发插入,它并没有阻塞线程,而是cas重试 源码解析Jdk8源码putValue()1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980final V putVal(K key, V value, boolean onlyIfAbsent) { //第一部分 ...
HashMap源码分析
put()12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) { Node<K,V>[] tab; Node<K,V> p; int n, i; //判断是不是未初始化,没初始化则初始化 if ((tab = table) == null || (n = tab.length) == 0) n = (tab =...
HashMap解析
说明 底层采用数组+链表的数据结构存储 默认初始16容量,每次扩容2倍,加载因子0.75(即到了最大容量的0.75倍就开始扩容,因为过大的时候hash碰撞严重 自定义容量会按照向上取最近2^n数量定义初始容量,如new...
Jdk8新特性-Strean流
CollectJava8中Collectors详解
反射
1. 反射定义2. 反射方法2.1. 获取集合对象中泛型的类型[^获取集合对象中泛型的类型] 泛型的概念 泛型概念 泛型:参数化类型,也就是说要操作的数据一开始不确定是什么类型,在使用的时候,才能确定是什么类型,把要操作的数据类型指定为一个参数,在使用时传入具体的类型,实现代码的模板化。 获取集合泛型时遇到的问题 在学习JDBC设计BaseDao<T>时类遇到了一个需要在创建子类对象时给父类BaseDao<T>赋上泛性类型的案例,具体代码实现如下 12345678910111213141516171819public class BaseDao<T> { private QueryRunner queryRunner = new QueryRunner(); // 定义一个变量来接收泛型的类型 private Class<T> type; // 获取T的Class对象,获取泛型的类型,泛型是在被子类继承时才确定(难点!!!) public BaseDao() { ...
个人编程总结
代码习惯 复制对象时(大多用于返回模型转换,如 entity→bo bo→resp),在目标对象中写对源的复制;因为这种情况大概率目标对源是一种依赖关系,数据的来源应该基本从源对象来的。此种处理可以方便的梳理对象之间的关系,尤其在业务复杂后方便梳理; 可以写一个公共的泛型接口,并设置默认复制方法,如BeanUtil.toBean之类,保持更大统一; 1234567891011121314151617181920212223242526/** * 从源数据复制对象,需保证字段,类型一致** @author liukewen* @since 2022/8/3*/public interface CopyFromSource<S,T> { /** * 复制对象值 * @param s * @return */ default T copy(S s){ BeanUtil.copyProperties(s,this); return (T) this; } ...
markdown emoji表情
emojiemoji来源 People :bowtie: :bowtie: :smile: :smile: :laughing: :laughing: :blush: :blush: :smiley: :smiley: :relaxed: :relaxed: :smirk: :smirk: :heart_eyes: :heart_eyes: :kissing_heart: :kissing_heart: :kissing_closed_eyes: :kissing_closed_eyes: :flushed: :flushed: :relieved: :relieved: :satisfied: :satisfied: :grin: :grin: :wink: :wink: :stuck_out_tongue_winking_eye: :stuck_out_tongue_winking_eye: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :grinning:...
VueElementAdmin
改造相关将菜单逻辑改了,菜单的动态路由权限不应该设置在路由中。应该设置在后台,由后台管理 问题处理svg-icon 引入 https://juejin.cn/post/7067165103547744263
vue工程搭建
vue搭建工具提前安装好 nodejs ,安装过程省略 全局配置npm镜像源 1234# 淘宝旧镜像npm config set registry https://registry.npm.taobao.org#淘宝新镜像npm config set registry https://registry.npmmirror.com 环境搭建 安装vuecli 1npm install -g @vue/cli@4.5.13 初始化工程 12vue create demo-name#界面 ->选择vue2 配置文件vue.config.js配置vue支持webpack的配置 配置示例 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657// vue 配置文件,可以配置 webpack的相关配置//拿到 path ,需要先安装 npm install path@0 --saveconst path =...